Open Medici Public Fellowship and Grant Search

Read-only remote MCP for finding and comparing public fellowships, grants, scholarships, prizes, and funded residencies.

Documentation

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.

ClientSetupUse it
ChatGPTEnable 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 desktopOpen 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 CodeRun 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 clientsConfiguration 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 Code

claude mcp add --transport http open-medici https://openmedici.com/mcp

ChatGPT setup reference ↗ Claude connector reference ↗ Claude Code reference ↗

These stateless requests prove initialize → tools/list → live filter options → search. Each response is HTTP 200 with JSON when successful.

1. Initialize HTTP 200 · application/json

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"}}}

2. List tools HTTP 200 · application/json

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"}]}}

3. Load current filter values HTTP 200 · application/json

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"}]}}}

4. Search HTTP 200 · application/json

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.

5. Read one opportunity HTTP 200 · application/json

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":[…]}}}}
CapabilityKindUse
list_filter_optionsToolLoad the database’s current filter vocabulary before searching.
search_opportunitiesToolSearch published opportunities with structured filters.
get_opportunityToolRead one candidate’s details, sources, cycles, and approved facts.
find_best_opportunitiesPromptRun 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.

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.

ProblemLikely causeFix or retryReference
HTTP 400Invalid JSON or an unsupported protocol header.Correct the body/version; do not retry unchanged.Quickstart
HTTP 403The browser Origin is not configured.Use a server-side client or ask the deployment owner to configure the exact origin.Origin policy
HTTP 413The request exceeds 64 KiB.Reduce the JSON-RPC body.Request flow
HTTP 421The Host is not approved for this deployment.Use the endpoint from the server card.Server card
HTTP 429The client exceeded 60 requests per minute.Honor Retry-After, then retry with backoff.Request flow
HTTP 500The server could not complete the request.Retry with backoff and report a persistent failure with the request ID/method.Contact
JSON-RPC errorThe protocol method or parameters were invalid.Use the returned code/message to correct the request.Capabilities
Tool isErrorThe tool rejected a range, filter, or missing record.Correct the arguments; do not treat it as a transient transport failure.Tool definition