{"openapi":"3.1.0","info":{"title":"Grembed public API","version":"0.7.1","description":"Public, read-only tools. No account, API key or authentication is required."},"servers":[{"url":"https://grembed.dev"}],"paths":{"/api/tools":{"post":{"operationId":"callTool","summary":"Call one public tool","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"convert_link"},"arguments":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":4096,"description":"A supported Civitai or Grembed URL."}},"required":["url"],"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"resolve_preview"},"arguments":{"type":"object","properties":{"url":{"type":"string","minLength":1,"maxLength":4096,"description":"A supported Civitai or Grembed URL."}},"required":["url"],"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["name"],"properties":{"name":{"const":"list_updates"},"arguments":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0}},"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"get_update"},"arguments":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80}},"required":["id"],"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["name"],"properties":{"name":{"const":"get_service_info"},"arguments":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false},{"type":"object","required":["name"],"properties":{"name":{"const":"list_feeds"},"arguments":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false}]}}}},"responses":{"200":{"description":"The requested public data.","content":{"application/json":{"schema":{"type":"object","required":["ok","result"],"properties":{"ok":{"const":true},"result":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The input is invalid.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"404":{"description":"The requested tool or update was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"413":{"description":"The request exceeds the 64 KiB body limit."},"503":{"description":"The public preview cannot be read right now."}}}},"/api/convert":{"get":{"operationId":"convertLink","summary":"Convert a supported Civitai link without fetching it","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4096}}],"responses":{"200":{"description":"The requested public data.","content":{"application/json":{"schema":{"type":"object","required":["ok","result"],"properties":{"ok":{"const":true},"result":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The input is invalid.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"404":{"description":"The requested tool or update was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"413":{"description":"The request exceeds the 64 KiB body limit."},"503":{"description":"The public preview cannot be read right now."}}}},"/api/resolve":{"get":{"operationId":"resolvePreview","summary":"Read the existing direct public preview object","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","maxLength":4096}}],"responses":{"200":{"description":"Public preview card with share_url and selected media; this endpoint has no tools envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid link.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/updates":{"get":{"operationId":"listUpdates","summary":"Read release notes, newest first","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"The requested public data.","content":{"application/json":{"schema":{"type":"object","required":["ok","result"],"properties":{"ok":{"const":true},"result":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The input is invalid.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"404":{"description":"The requested tool or update was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"413":{"description":"The request exceeds the 64 KiB body limit."},"503":{"description":"The public preview cannot be read right now."}}}},"/api/info":{"get":{"operationId":"serviceInfo","summary":"Read the current service version and endpoints","parameters":[],"responses":{"200":{"description":"The requested public data.","content":{"application/json":{"schema":{"type":"object","required":["ok","result"],"properties":{"ok":{"const":true},"result":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The input is invalid.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"404":{"description":"The requested tool or update was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"413":{"description":"The request exceeds the 64 KiB body limit."},"503":{"description":"The public preview cannot be read right now."}}}},"/api/feeds":{"get":{"operationId":"listFeeds","summary":"Find the update blog and RSS feed","parameters":[],"responses":{"200":{"description":"The requested public data.","content":{"application/json":{"schema":{"type":"object","required":["ok","result"],"properties":{"ok":{"const":true},"result":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"The input is invalid.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"404":{"description":"The requested tool or update was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"}}}}}},"413":{"description":"The request exceeds the 64 KiB body limit."},"503":{"description":"The public preview cannot be read right now."}}}},"/rss.xml":{"get":{"operationId":"updatesRSS","summary":"Read the public RSS 2.0 release feed","responses":{"200":{"description":"Release notes feed.","content":{"application/rss+xml":{"schema":{"type":"string"}}}}}}},"/mcp":{"post":{"operationId":"mcp","summary":"MCP Streamable HTTP endpoint with JSON responses","description":"Supports 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. Current clients send matching MCP-Protocol-Version and params._meta, Mcp-Method, and Mcp-Name for tool calls. Legacy clients use initialize. All clients send Accept: application/json, text/event-stream. No SSE or sessions are opened.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"Single JSON-RPC response.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Accepted notification; no response body."},"400":{"description":"Invalid JSON-RPC input or protocol headers."},"403":{"description":"Origin is not allowed."},"405":{"description":"Use POST; SSE GET and session DELETE are not supported."}}}}}}