REMOTE MCP QUICKSTART
Connect Open Medici to your MCP client.
Choose the instructions for your client, then use /mcp as the Streamable HTTP endpoint. It is not a web page.
Choose your client
The public server is authentication-free. Do not add an API key, Authorization header, OAuth credential, or cookie. Client availability depends on the provider plan and workspace permissions; if a custom-connector control is missing, use the REST API or another MCP client.
| Client | Setup | Use it |
|---|---|---|
| ChatGPT | Enable Developer mode in Settings → Security and login. Then open Settings → Plugins or chatgpt.com/plugins, choose +, provide a name and description, enter https://openmedici.com/mcp as the MCP URL, and create the app. | In a new chat choose + → More → Open Medici. If these controls are absent, the current plan or workspace role does not expose custom MCP connections. |
| Claude web or desktop | Open Customize → Connectors, choose + → Add custom connector, paste https://openmedici.com/mcp, and add it. Team and Enterprise workspaces may require an owner to add the connector first. | Enable Open Medici for a conversation from + → Connectors. |
| Claude Code | Run the command below. It stores a local project connection by default and requires no header or environment variable. | Run /mcp inside Claude Code to confirm that three tools are connected. |
| Other MCP clients | Configuration field names differ by client. Follow the client’s remote HTTP or Streamable HTTP instructions and enter https://openmedici.com/mcp. Do not reuse another client’s JSON shape. | Confirm that search_opportunities, get_opportunity, and list_filter_options are available. |
claude mcp add --transport http open-medici https://openmedici.com/mcpChatGPT setup reference ↗Claude connector reference ↗Claude Code reference ↗
Protocol-level verification
These stateless requests prove initialize → tools/list → live filter options → search. Each response is HTTP 200 with JSON when successful.
curl --silent --show-error 'https://openmedici.com/mcp' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"open-medici-quickstart","version":"1.0.0"}}}'Expected fragment
{"result":{"protocolVersion":"2025-11-25","serverInfo":{"name":"open-medici-public"}}}curl --silent --show-error 'https://openmedici.com/mcp' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'Expected fragment
{"result":{"tools":[{"name":"search_opportunities"},{"name":"get_opportunity"},{"name":"list_filter_options"}]}}curl --silent --show-error 'https://openmedici.com/mcp' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_filter_options","arguments":{"facet":"types","q":"grant","limit":10}}}'Expected fragment
{"result":{"structuredContent":{"data":[{"value":"grant","label":"Grant"}]}}}curl --silent --show-error 'https://openmedici.com/mcp' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"search_opportunities","arguments":{"query":"climate","openOnly":true,"fundedOnly":true,"limit":5}}}'Expected fragment
{"result":{"structuredContent":{"opportunities":[{"slug":"…","recordUrl":"https://openmedici.com/programs/…","officialUrl":"https://…","sourceCheckedAt":"2026-…"}]}}}After search, verify each candidate before ranking or citing it.
curl --silent --show-error 'https://openmedici.com/mcp' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"get_opportunity","arguments":{"slug":"{slug}","locale":"en"}}}'{"result":{"structuredContent":{"opportunity":{"slug":"…","sources":[…]}}}}Tools and prompt
| Capability | Kind | Use |
|---|---|---|
list_filter_options | Tool | Load the database’s current filter vocabulary before searching. |
search_opportunities | Tool | Search published opportunities with structured filters. |
get_opportunity | Tool | Read one candidate’s details, sources, cycles, and approved facts. |
find_best_opportunities | Prompt | Run an interview-led matching workflow. |
All tools are read-only and idempotent. A tool can report isError for a validation or not-found outcome even when the HTTP transport itself succeeded.
Browser-origin policy
Server-side clients can omit the Origin header and send no credentials. Browser clients must use the canonical Open Medici origin or an origin explicitly configured by the deployment. An unconfigured browser origin receives HTTP 403.
The transport’s CORS response is credential-free. Do not send cookies. Host validation also rejects a request addressed to an unapproved host with HTTP 421.
Transport, JSON-RPC, and tool errors
| Problem | Likely cause | Fix or retry | Reference |
|---|---|---|---|
| HTTP 400 | Invalid JSON or an unsupported protocol header. | Correct the body/version; do not retry unchanged. | Quickstart |
| HTTP 403 | The browser Origin is not configured. | Use a server-side client or ask the deployment owner to configure the exact origin. | Origin policy |
| HTTP 413 | The request exceeds 64 KiB. | Reduce the JSON-RPC body. | Request flow |
| HTTP 421 | The Host is not approved for this deployment. | Use the endpoint from the server card. | Server card |
| HTTP 429 | The client exceeded 60 requests per minute. | Honor Retry-After, then retry with backoff. | Request flow |
| HTTP 500 | The server could not complete the request. | Retry with backoff and report a persistent failure with the request ID/method. | Contact |
JSON-RPC error | The protocol method or parameters were invalid. | Use the returned code/message to correct the request. | Capabilities |
Tool isError | The tool rejected a range, filter, or missing record. | Correct the arguments; do not treat it as a transient transport failure. | Tool definition |