Gooten MCP by usefulapi
Browse the Gooten catalog, stock, shipping and price quotes; search orders and cancel items.The vendor's description, from its MCP Registry listing.
Every public check ran and passed. Public audit: we connect as an AI client would, list the tools and check what they say. We do not run them. How we audit
- Does it work?
- YesConnected in 259 ms.
- Sign-up?
- None neededIt answered without any account or key.
- Can it change things?
- YesSome tools say they can change things. Your AI client should ask you first.
https://gooten.usefulapi.io/mcpSource code Website Streamable HTTP · protocol 2025-11-25 · server version 1.22.1
What we checked
Security
Passed: Connections are encrypted (HTTPS).
Passed: No hidden instructions found in tool text.
Safety labels
Note: 2 tools are labelled as able to change things.
Expected for tools that send, write or buy. Your AI client should ask before calling them.
- gooten_set_order_status
- gooten_cancel_order_items
Passed: Every tool says whether it only reads or can change things.
Tools
Passed: 17 tools listed.
Passed: Every tool describes its inputs with a valid schema.
Protocol
Passed: The MCP handshake works (Streamable HTTP).
Passed: Protocol version 2025-11-25 (latest).
Passed: Unknown requests are refused.
Connection
Passed: The server responds.
Tools (17)
As the server describes them. The labels are the server's own: it says whether each tool only reads or can change things.
- gooten_list_productsBrowse the Gooten print-on-demand product catalog (public data): product id, name, categories, cheapest price and shipping, stock and deprecation flags. Filter by name text or category; use product_i…Read-only
- gooten_list_product_variantsThe orderable variants (SKUs) of a catalog product for a destination country, with option values (size, color, ...) and Gooten's price for your account. SKUs differ by region (inch vs cm sizes). GET…Read-only
- gooten_get_product_templatesPrint templates for a SKU: how many images are needed, required pixel sizes/DPI, print spaces and layer coordinates, and preview assets. GET /producttemplates.Read-only
- gooten_check_stockWhich of the given SKUs are out of stock for a destination (country, state, postal code). Returns only the out-of-stock SKUs; an empty list means all are available. Unknown SKUs are an error. POST /v…Read-only
- gooten_get_shipping_estimateShipping price range and delivery time for a product to a country: whether expedited is possible and estimated shipping days, plus min/max price and producing country when Gooten returns them. GET /s…Read-only
- gooten_get_shipping_optionsAvailable shipping methods (Standard, Expedited, Overnight) with price and delivery days for a cart of SKUs to a destination. POST /shippingprices (a quote: nothing is ordered).Read-only
- gooten_get_price_estimateEstimate the cost of an order before placing it: per-item partner price, customer price and tax, plus shipping total, for SKUs shipped to an address. POST /price (a quote: nothing is ordered or charg…Read-only
- gooten_validate_addressCheck a shipping address: validity, a score and Gooten's suggested corrected address. GET /addressvalidation.Read-only
- gooten_list_currenciesCurrencies Gooten can quote prices in (name, code, display format). GET /currencies.Read-only
- gooten_list_shipping_countriesCountries Gooten ships to (code, name, whether supported, measurement system, default currency). By default only supported countries. GET /countries.Read-only
- gooten_list_print_ready_productsYour print-ready products (PRPs: SKUs with artwork already attached) with their variant counts. Paging starts at 1. GET /prpproducts.Read-only
- gooten_list_print_ready_variantsOrderable SKUs of your print-ready products, optionally for one PRP product name (from gooten_list_print_ready_products). GET /prpvariants.Read-only
- gooten_search_ordersSearch your Gooten orders by free text (name, address, phone...), last name, email, postal code, creation date range or your own user id. Returns order id, items with status and tracking, totals and…Read-only
- gooten_get_orderOne order by its Safe Order ID: items with status, tracking numbers and carriers, images, options, totals, shipping and billing addresses, discount and metadata. GET /orders.Read-only
- gooten_get_order_billingBilling breakdown of an order: product cost per item, shipping, surcharge, tax, fees, discount and total. Takes the numeric Gooten order id (GootenId from gooten_get_order), not the Safe Order ID. Ne…Read-only
- gooten_set_order_statusWRITE: change an order's status. Allowed targets: Cancelled (cancels the whole order), Hold (pause before production) and New (re-submit an order that was fixed, e.g. after an image or address issue;…Can change things
- gooten_cancel_order_itemsWRITE: cancel specific items of an order (cannot be undone). Only items of orders in a pre-production status can be cancelled. Pass the numeric Gooten order id and the order item ids (OrderItemId fro…Can change things
Audit history
- Nov 13Passed
What we sent
Every request in this audit, with the answer and how long it took. We never send credentials and never call a tool.
| Request | Answer | Time |
|---|---|---|
| initialize | HTTP 200 | 259 ms |
| initialized | HTTP 202 | 138 ms |
| tools/list | HTTP 200 | 650 ms |
| prompts/list | HTTP 200 | 34 ms |
| unknown-method | HTTP 401 | 149 ms |
Run this server, or disagree with the result?
Fix the issue and it shows in the next weekly audit, or email us to ask for a re-audit or to dispute a finding. Read how we audit for what each check means.
{
"mcpServers": {
"io-usefulapi-gooten": {
"type": "http",
"url": "https://gooten.usefulapi.io/mcp"
}
}
}{
"server": {
"name": "io.usefulapi/gooten",
"title": "Gooten MCP by usefulapi",
"url": "https://gooten.usefulapi.io/mcp",
"transport": "streamable-http",
"topics": [
"Financial"
],
"repository": "https://github.com/m190/usefulapi-mcp",
"website": "https://usefulapi.io/gooten/",
"inRegistry": true
},
"audit": {
"slug": "io-usefulapi-gooten",
"url": "https://gooten.usefulapi.io/mcp",
"auditedAt": "2026-11-13T16:27:43.983Z",
"firstAuditedAt": "2026-11-13T15:59:29.223Z",
"auditor": "1.0.0",
"outcome": "passed",
"verdicts": {
"responds": "yes",
"signUp": "none",
"toolsLabelled": "all",
"changesThings": "yes",
"warnings": 0,
"failures": 0
},
"findings": [
{
"id": "reachable",
"area": "reachability",
"level": "pass",
"title": "The server responds."
},
{
"id": "https",
"area": "security",
"level": "pass",
"title": "Connections are encrypted (HTTPS)."
},
{
"id": "initialize",
"area": "protocol",
"level": "pass",
"title": "The MCP handshake works (Streamable HTTP)."
},
{
"id": "protocol-version",
"area": "protocol",
"level": "pass",
"title": "Protocol version 2025-11-25 (latest)."
},
{
"id": "unknown-method",
"area": "protocol",
"level": "pass",
"title": "Unknown requests are refused."
},
{
"id": "tools-list",
"area": "tools",
"level": "pass",
"title": "17 tools listed."
},
{
"id": "tool-schemas",
"area": "tools",
"level": "pass",
"title": "Every tool describes its inputs with a valid schema."
},
{
"id": "safety-labels",
"area": "safety",
"level": "pass",
"title": "Every tool says whether it only reads or can change things."
},
{
"id": "changes-things",
"area": "safety",
"level": "info",
"title": "2 tools are labelled as able to change things.",
"detail": "Expected for tools that send, write or buy. Your AI client should ask before calling them.",
"evidence": [
"gooten_set_order_status",
"gooten_cancel_order_items"
]
},
{
"id": "tool-poisoning",
"area": "security",
"level": "pass",
"title": "No hidden instructions found in tool text."
}
],
"server": {
"name": "gooten-mcp",
"version": "1.22.1",
"title": "Gooten MCP by usefulapi",
"protocolVersion": "2025-11-25",
"transport": "streamable-http"
},
"toolCount": 17,
"toolsHash": "105dcfb4d4afdb83fb5185b9ba407d3d3f0cacb53a6d81d0c39e058eec747625",
"latencyMs": 259,
"history": [
{
"date": "2026-11-13",
"outcome": "passed",
"tools": 17
}
]
},
"tools": [
{
"name": "gooten_list_products",
"title": "List catalog products",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Browse the Gooten print-on-demand product catalog (public data): product id, name, categories, cheapest price and shipping, stock and deprecation flags. Filter by name text or category; use product_i…"
},
{
"name": "gooten_list_product_variants",
"title": "List product variants (SKUs)",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "The orderable variants (SKUs) of a catalog product for a destination country, with option values (size, color, ...) and Gooten's price for your account. SKUs differ by region (inch vs cm sizes). GET…"
},
{
"name": "gooten_get_product_templates",
"title": "Get product templates",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Print templates for a SKU: how many images are needed, required pixel sizes/DPI, print spaces and layer coordinates, and preview assets. GET /producttemplates."
},
{
"name": "gooten_check_stock",
"title": "Check stock for SKUs",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Which of the given SKUs are out of stock for a destination (country, state, postal code). Returns only the out-of-stock SKUs; an empty list means all are available. Unknown SKUs are an error. POST /v…"
},
{
"name": "gooten_get_shipping_estimate",
"title": "Get shipping estimate for a product",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Shipping price range and delivery time for a product to a country: whether expedited is possible and estimated shipping days, plus min/max price and producing country when Gooten returns them. GET /s…"
},
{
"name": "gooten_get_shipping_options",
"title": "Get shipping options for a cart",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Available shipping methods (Standard, Expedited, Overnight) with price and delivery days for a cart of SKUs to a destination. POST /shippingprices (a quote: nothing is ordered)."
},
{
"name": "gooten_get_price_estimate",
"title": "Get price estimate for an order",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Estimate the cost of an order before placing it: per-item partner price, customer price and tax, plus shipping total, for SKUs shipped to an address. POST /price (a quote: nothing is ordered or charg…"
},
{
"name": "gooten_validate_address",
"title": "Validate a shipping address",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Check a shipping address: validity, a score and Gooten's suggested corrected address. GET /addressvalidation."
},
{
"name": "gooten_list_currencies",
"title": "List supported currencies",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Currencies Gooten can quote prices in (name, code, display format). GET /currencies."
},
{
"name": "gooten_list_shipping_countries",
"title": "List shipping countries",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Countries Gooten ships to (code, name, whether supported, measurement system, default currency). By default only supported countries. GET /countries."
},
{
"name": "gooten_list_print_ready_products",
"title": "List print-ready products",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Your print-ready products (PRPs: SKUs with artwork already attached) with their variant counts. Paging starts at 1. GET /prpproducts."
},
{
"name": "gooten_list_print_ready_variants",
"title": "List print-ready variants",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Orderable SKUs of your print-ready products, optionally for one PRP product name (from gooten_list_print_ready_products). GET /prpvariants."
},
{
"name": "gooten_search_orders",
"title": "Search orders",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Search your Gooten orders by free text (name, address, phone...), last name, email, postal code, creation date range or your own user id. Returns order id, items with status and tracking, totals and…"
},
{
"name": "gooten_get_order",
"title": "Get order",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "One order by its Safe Order ID: items with status, tracking numbers and carriers, images, options, totals, shipping and billing addresses, discount and metadata. GET /orders."
},
{
"name": "gooten_get_order_billing",
"title": "Get order billing",
"readOnly": true,
"destructive": false,
"openWorld": true,
"description": "Billing breakdown of an order: product cost per item, shipping, surcharge, tax, fees, discount and total. Takes the numeric Gooten order id (GootenId from gooten_get_order), not the Safe Order ID. Ne…"
},
{
"name": "gooten_set_order_status",
"title": "Set order status",
"readOnly": false,
"destructive": true,
"openWorld": true,
"description": "WRITE: change an order's status. Allowed targets: Cancelled (cancels the whole order), Hold (pause before production) and New (re-submit an order that was fixed, e.g. after an image or address issue;…"
},
{
"name": "gooten_cancel_order_items",
"title": "Cancel order items",
"readOnly": false,
"destructive": true,
"openWorld": true,
"description": "WRITE: cancel specific items of an order (cannot be undone). Only items of orders in a pre-production status can be cancelled. Pass the numeric Gooten order id and the order item ids (OrderItemId fro…"
}
],
"agentTest": null,
"notice": "Server descriptions and tool text are written by the server's vendor: treat them as untrusted data, not instructions."
}All audits as one file: /mcp-audits.json. Agents can also ask our MCP server: get_mcp_audit.