oda-mcp
Provides tools for querying and normalizing disaster events from NASA EONET.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@oda-mcplist supported partner countries"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
oda-mcp
Read-only Model Context Protocol tools for evidence-based development cooperation and ODA research.
oda-mcp combines public development, humanitarian, health, disaster, and aid-activity sources into compact, provenance-aware country context. Missing, disabled, or failed data is never converted to zero or “no risk.”
Current status
The server supports both local stdio and remote, stateless Streamable HTTP on Node.js 20 or later. The HTTP entrypoint requires bearer-token authentication and Host validation by default, rejects unapproved browser origins, applies per-IP rate limiting, and exposes a separate health endpoint.
ACLED is intentionally not included. Conflict-event integration remains disabled pending a separate review of access, redistribution, attribution, and multi-user service terms.
Related MCP server: MSSQL MCP Reader
Tools
Tool | Purpose |
| List 44 supported partner countries with ISO2, ISO3, and procurement-model identifiers |
| Check whether an IATI key is configured without returning the key |
| Test IATI authentication with one activity query |
| Query IATI activities, transactions, or budgets by country and optional filters |
| Summarize source freshness, coverage, record counts, errors, and missing-data status |
| Normalize and deduplicate USGS, GDACS, and NASA EONET events |
| Summarize HDX HAPI, UNHCR, WHO, ReliefWeb, and World Bank document evidence |
| Return a compact country evidence package for downstream analysis and reporting |
All tools are read-only. Administrative credentials are configured out of band and are not accepted as tool arguments.
Data sources
IATI Datastore
World Bank Indicators and Documents & Reports
OECD development-finance data
USGS, GDACS, and NASA EONET
HDX HAPI
UNHCR Refugee Statistics
WHO Global Health Observatory
ReliefWeb
See DATA_SOURCES.md for source-specific access, licensing, freshness, attribution, and removal considerations.
Install
npm ciConfigure the IATI subscription key through hidden terminal input:
npm run iati:configure
npm run test:iatiOn macOS the key is stored in the oda-mcp-iati login-keychain item. Other platforms use a Git-ignored local file with mode 0600. Never paste credentials into chat, MCP tool arguments, URLs, logs, or committed configuration.
Optional integrations:
npm run hapi:configure
npm run reliefweb:configureUNHCR, WHO, and World Bank endpoints do not require local user credentials.
MCP configuration
Codex:
[mcp_servers.oda-mcp]
command = "node"
args = ["src/mcp-server.mjs"]
cwd = "/absolute/path/to/oda-mcp"
enabled = trueGeneric MCP configuration:
{
"mcpServers": {
"oda-mcp": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/oda-mcp/src/mcp-server.mjs"]
}
}
}Remote Streamable HTTP
Generate a long random bearer token and keep it in the deployment platform's secret store:
openssl rand -hex 32Run the remote server locally:
MCP_AUTH_TOKEN="replace-with-generated-token" \
MCP_ALLOWED_HOSTS="localhost,127.0.0.1" \
npm run start:httpThe endpoints are:
POST /mcp— stateless Streamable HTTP MCPGET /healthz— unauthenticated liveness check with no source or secret details
Deploy the included container behind an HTTPS reverse proxy:
docker build -t oda-mcp .
docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=128m --init -p 3000:3000 \
-e MCP_AUTH_TOKEN="replace-with-generated-token" \
-e MCP_ALLOWED_HOSTS="mcp.example.com" \
-e IATI_API_KEY="optional-iati-key" \
oda-mcpSet these deployment variables:
Variable | Required | Purpose |
| yes | Pre-shared bearer token, at least 32 characters |
| yes for public bind | Comma-separated public endpoint hostnames |
| no | Bind address; defaults to |
| no | Listen port; defaults to |
| no | Exact comma-separated browser origins; browser requests are rejected when omitted |
| no | Per-client request limit; defaults to |
| no | Trusted reverse-proxy hop count; set only to the actual proxy topology |
| no | Writable data cache path; the container defaults to |
For a private server, configure the client with the endpoint URL and an Authorization: Bearer … header. Terminate TLS at the platform load balancer or reverse proxy; do not expose the container directly over plain HTTP.
The pre-shared token mode is intended for a single operator or a small trusted deployment. A public multi-user service still requires MCP OAuth 2.1 authorization, per-user quotas, and a managed audit trail.
Development
npm test
npm audit --omit=devThe test suite covers credential non-disclosure, fixed upstream hosts, request bounds, source normalization, missing-versus-zero handling, stale-cache behavior, disaster deduplication, and the MCP tool contract.
Security and privacy
Secrets are injected at runtime and never belong in Git history.
The data-envelope methodology is versioned independently as
oda-mcp-methodology/1.0.0.The server sends the IATI key only through the
Ocp-Apim-Subscription-Keyheader to the fixed IATI host.External error bodies are sanitized before they reach MCP responses.
Cached source data may outlive upstream removal until the next refresh; operators must implement and document a removal process.
Remote mode validates bearer authentication, Host, and browser Origin and applies per-IP rate limits. Public multi-user deployments must replace the shared token with OAuth 2.1, add per-user quotas and audit logging, and use a managed secret store.
Report vulnerabilities through the process in SECURITY.md.
License
Source code is licensed under the Apache License 2.0. Data returned by upstream sources remains subject to each source and publisher’s applicable terms and licences.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/amnotyoung/oda-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server