{"apiVersion":"v1","directorySlug":"openshopgraph-mcp-5a780bb7b9","title":"OpenShopGraph","description":"2991 verified shops in 169 categories — an open database for people and AI assistants. No paid rankings, no tracking, no accounts.","pageUrl":"https://www.mcpbundles.com/skills/openshopgraph-mcp-5a780bb7b9","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://api.openshopgraph.com/mcp","hostedMcpUrl":null,"toolCount":8,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.openshopgraph/openshopgraph-mcp-5a780bb7b9","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"find_shop","description":"Search merchants/shops by free-text query (name or domain fragment), optionally filtered by country (ISO 3166-1 alpha-2, e.g. \"DE\") and/or by an EXACT category slug. Returns the public shop view only — shops still under internal review are never returned. `results` carries at most `limit` entries (default 50, max 100); `total_count` is the full match count before that cap and `truncated` is true when more results exist beyond this page — raise `offset` (default 0) to page through them. Multi-wor","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1},"query":{"type":"string","maxLength":512},"offset":{"type":"integer","minimum":0},"country":{"type":"string","maxLength":512},"category":{"type":"string","maxLength":128}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_shop","displayName":"find_shop","title":"find_shop"},{"name":"list_categories","description":"Enumerate the shop category taxonomy: every category slug currently carried by at least one public shop, together with how many public shops carry it. Call this BEFORE passing `category` to find_shop — the taxonomy is flat (no parent/child hierarchy, e.g. \"fashion\" and \"womens-clothing\" are siblings, not nested) and its slugs come from observed data, not a fixed enum baked into this tool, so a slug cannot be reliably guessed. `find_shop(category: <slug>)` only accepts a slug returned here; givin","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_categories","displayName":"list_categories","title":"list_categories"},{"name":"get_shop","description":"Fetch a single merchant/shop by id or domain (public view). Returns \"shop not found\" for shops still under internal review, identical to a genuinely unknown domain — reviewers cannot be distinguished from typos. The offers array is present for schema stability but empty until merchant offers are ingested (Offer table measured empty on 2026-07-30).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["shop_domain"],"properties":{"shop_domain":{"type":"string","maxLength":512}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_shop","displayName":"get_shop","title":"get_shop"},{"name":"list_coupons","description":"List currently USABLE discount codes/coupons, optionally filtered by shop_domain (e.g. \"otto.de\"). A code is withheld from `results` when it is EXPIRED (valid_until has passed), when a real checkout test PROVED it does not work (verification_status \"verified_rejected\"), or when a display policy suppresses it on this channel/country. Nothing is withheld silently: `total_count` is how many codes the query found before any of that, and `withheld` breaks the difference down by reason ({expired, veri","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"shop_domain":{"type":"string","maxLength":512}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_coupons","displayName":"list_coupons","title":"list_coupons"},{"name":"get_shipping_policy","description":"What a shop STATES about its own shipping: which destinations it names, the delivery time it claims, and any free-shipping threshold — plus the date that statement was last checked and where it was read (policy_page or structured_data). This is a shop-level statement, NOT an offer and NOT a quote: it carries no carrier and no shipping price, because OpenShopGraph does not hold that data. Pass country (ISO 3166-1 alpha-2, e.g. \"DE\") to get a ships_to verdict derived from the stated destination li","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["shop_domain"],"properties":{"country":{"type":"string","maxLength":512},"shop_domain":{"type":"string","maxLength":512}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_shipping_policy","displayName":"get_shipping_policy","title":"get_shipping_policy"},{"name":"get_trust","description":"Trust-relevant facts OpenShopGraph itself measured about one merchant/shop (by id or domain): TLS certificate issuer and grade, hosting ISP and country, domain registration date, registrar, and accepted payment methods. Returns INDIVIDUAL signals, never an aggregate: every entry carries its own value, `source` (where OpenShopGraph observed it) and `checked_at` (when). There is deliberately no score, rating, percentage or star value — not even an internally computed one; you are given the raw evi","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["shop_domain"],"properties":{"shop_domain":{"type":"string","maxLength":512,"minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_trust","displayName":"get_trust","title":"get_trust"},{"name":"report_code","description":"Record that a specific shop_domain + code (coupon) pair is wrong in one of four fixed, documented ways (invalid | mismatch | item_restricted | min_order_missing — see reasons enum; no free text anywhere). This is a write: it appends one new report row and NEVER changes the delivered coupon directly — it never deletes or overwrites data, and it does not itself decide anything. Subject to per-source dedup it only queues a re-check (RecheckQueueEntry); only a separate Pruefurteil process may later","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["shop_domain","code","reason"],"properties":{"code":{"type":"string","maxLength":64,"minLength":1},"reason":{"enum":["invalid","mismatch","item_restricted","min_order_missing"],"type":"string"},"shop_domain":{"type":"string","maxLength":253,"minLength":1}},"additionalProperties":false},"logicalName":"report_code","displayName":"report_code","title":"report_code","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"report_issue","description":"Record a shop-level or data-fact issue as one fixed, documented reason (no free text). subject_type \"shop\": unreachable | no_longer_exists | info_outdated | wrong_category | wrong_name_or_domain. subject_type \"fact\": shipping_cost | return_period | payment_methods | evidence_broken. Same write semantics as report_code: appends one report row, never changes delivered data directly, only queues a re-check subject to per-source dedup.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["subject_type","shop_domain","reason"],"properties":{"reason":{"enum":["unreachable","no_longer_exists","info_outdated","wrong_category","wrong_name_or_domain","shipping_cost","return_period","payment_methods","evidence_broken"],"type":"string"},"shop_domain":{"type":"string","maxLength":253,"minLength":1},"subject_type":{"enum":["shop","fact"],"type":"string"}},"additionalProperties":false},"logicalName":"report_issue","displayName":"report_issue","title":"report_issue","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=OpenShopGraph&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkub3BlbnNob3BncmFwaC5jb20vbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22OpenShopGraph%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.openshopgraph.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22OpenShopGraph%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.openshopgraph.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=OpenShopGraph&connectorUrl=https%3A%2F%2Fapi.openshopgraph.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"OpenShopGraph\" --url \"https://api.openshopgraph.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openshopgraph-mcp-5a780bb7b9","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openshopgraph-mcp-5a780bb7b9/tools/{tool}","mcpServerUrl":"https://api.openshopgraph.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openshopgraph-mcp-5a780bb7b9?live=1"}