{"mcpSpec":"0.3.1","server":{"name":"filemonk-api-v2","version":"2.0.0","description":"Filemonk API v2 — digital product delivery for Shopify, 74 actions reached through search / execute_read / execute_write instead of one tool per action.  To connect: add https://app.filemonk.io/api/v2/external/mcp as a custom connector in Claude or ChatGPT (the merchant can copy it from Filemonk -\u003e Settings -\u003e Other -\u003e AI connectors). Signing in asks for the store's myshopify.com address, then the merchant approves the connection in the Shopify admin; or choose \"Use a connector key instead\" and paste the connector key from that same settings section (not the API key). Claude Code and scripts can send the API key from Settings -\u003e Other -\u003e API keys as a header: claude mcp add --transport http filemonk https://app.filemonk.io/api/v2/external/mcp --header \"X-Auth-Token: \u003capi_key\u003e\". Never paste a key into the chat. Docs: https://app.filemonk.io/llms.txt and https://app.filemonk.io/api/v2/external/skill.md. Catalog: GET /api/v2/external/help","endpoint":"/api/v2/external/mcp","connect":"To connect: add https://app.filemonk.io/api/v2/external/mcp as a custom connector in Claude or ChatGPT (the merchant can copy it from Filemonk -\u003e Settings -\u003e Other -\u003e AI connectors). Signing in asks for the store's myshopify.com address, then the merchant approves the connection in the Shopify admin; or choose \"Use a connector key instead\" and paste the connector key from that same settings section (not the API key). Claude Code and scripts can send the API key from Settings -\u003e Other -\u003e API keys as a header: claude mcp add --transport http filemonk https://app.filemonk.io/api/v2/external/mcp --header \"X-Auth-Token: \u003capi_key\u003e\". Never paste a key into the chat.","authorization_server_metadata":"/.well-known/oauth-authorization-server"},"tools":[{"name":"search","description":"Find the Filemonk action for a request, in plain words or a path (\"revoke access for an order\", \"customer didn't get the email\", \"my plan\", \"/orders/:id/send_email\"). Results come best first, each with method + path + description; the first has its full request JSON Schema (all do when 3 or fewer come back). `not_offered` lists matching actions this connector can't run, with where the merchant can do them instead. An empty query lists every action.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","description":"What the merchant wants, in a few words, or an action path. Empty lists everything."},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"description":"Optional: only actions with this HTTP method."},"limit":{"type":"integer","minimum":1,"description":"Most results to return (default 20; an empty query returns everything)."}},"required":["query"]},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"execute_read","description":"Run a read (GET) action from the Filemonk catalog. Search first for the path and its params. Prefer one list call with filters or per_page over many single reads; a 429 says how many seconds to wait. Answers { success: true, data } or { success: false, status, errors, code, retryable }.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"method":{"type":"string","enum":["GET"],"description":"HTTP method of the action: GET."},"path":{"type":"string","description":"The action path from search with real values in place of every :placeholder, e.g. \"/orders/1062/downloads\". No query string: put those values in params."},"params":{"type":"object","description":"The action's parameters as a JSON object, following its request_schema from search (for reads too: page, per_page, search, filters). Omit or {} when it takes none."}},"required":["method","path"]},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true}},{"name":"execute_write","description":"Run a write (POST, PUT, PATCH or DELETE) action from the Filemonk catalog. It changes the live store at once, with no undo: check with the merchant before anything that emails buyers, deletes or charges usage. Actions that take `confirm` preview first: send without it, tell the merchant what the 409 `confirmation_required` lists, and resend with confirm: true only after they agree. For many records use the bulk or list action in one call, never a loop of single calls: the connection shares one rate limit, and a 429 says how many seconds to wait before resending. Search first for the path and its params. Pass idempotency_key on writes that create something or send email (importing orders, adding keys or files, send_email, send_emails, notify_buyers, imports, exports) so a retry never repeats them. Answers { success: true, data } or { success: false, status, errors, code, retryable }.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"method":{"type":"string","enum":["POST","PUT","PATCH","DELETE"],"description":"HTTP method of the action: POST, PUT, PATCH, DELETE."},"path":{"type":"string","description":"The action path from search with real values in place of every :placeholder, e.g. \"/orders/1062/downloads\". No query string: put those values in params."},"params":{"type":"object","description":"The action's parameters as a JSON object, following its request_schema from search (for reads too: page, per_page, search, filters). Omit or {} when it takes none."},"idempotency_key":{"type":"string","maxLength":255,"description":"A new unique string (a UUID) for this call. Send one with every write that creates something or sends email. To retry after a timeout or an unclear result, send the same key with the same method, path and params: you get the first result back with idempotent_replay: true and nothing runs twice. Keys last 24 hours; a key reused for a different call is refused."}},"required":["method","path"]},"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false}}]}