Reliefweb Mcp Server

io.github.cyanheadsPublished by GitHub account cyanheadsv0.3.0Updated Nov 2, 2026

Search ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP.

Overview

AI-generated overview

Queries ReliefWeb (OCHA) humanitarian data, letting an assistant search and read reports, disasters, country profiles, jobs, training and sources.

What you can do
  • Search and read humanitarian reports, with filters by country, disaster, format, theme, language, source and date
  • Search disasters and fetch disaster records with profiles, appeals and response plans
  • List countries and fetch OCHA-curated country profiles by ISO3 code
  • Search job vacancies and training listings, then fetch full descriptions and application or registration instructions
  • Browse contributing source organizations and their shortnames
  • Generate a structured crisis briefing prompt for a country or disaster
When to use it
Useful for humanitarian research, crisis monitoring, country situation summaries, and finding humanitarian jobs or training. It suits analysts, journalists, NGO staff or anyone who needs authoritative OCHA-sourced material rather than general web search.
Requirements
Runs as a public hosted HTTP endpoint or locally via npx (Node.js) or Docker. Local use requires a pre-approved RELIEFWEB_APP_NAME registered with the ReliefWeb API. Optional settings cover transport, HTTP host/port/path, auth mode, log level and storage backend.
Before you install
The ReliefWeb API quota is 1,000 calls per day, shared by all calls the server makes. Report and record bodies can be large, so oversized responses return a section outline instead of full text. The server is read-only against ReliefWeb; no data is written or deleted. The hosted endpoint is a third-party deployment, so consider running locally if you prefer your own appname and quota.

Installation

In SourceWeft

  1. Open Reliefweb Mcp Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.cyanheads%2Freliefweb-mcp-server/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "reliefweb": {
      "type": "http",
      "url": "https://reliefweb.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/reliefweb-mcp-server

Search ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP. STDIO or Streamable HTTP.

11 Tools • 3 Resources • 1 Prompt • 1 Skill

Public Hosted Server: https://reliefweb.caseyjhand.com/mcp


Overview

Humanitarian reports, disasters, jobs, training, and country profiles from ReliefWeb, OCHA's information hub for crisis response. Search and read across every ReliefWeb content type.

Tools

ToolDescription
reliefweb_search_reportsSearch humanitarian reports with filtering by country, disaster, format, theme, language, source, and date
reliefweb_get_reportFetch a single report by numeric ID with full body text and metadata
reliefweb_search_disastersSearch disasters by type, country, status, GLIDE number, and date range
reliefweb_get_disasterFetch a disaster record with profile, key content links, appeals, and response plans
reliefweb_get_countryFetch a country profile by ISO3 code with overview, appeals, and curated links
reliefweb_list_countriesList all countries tracked by ReliefWeb, filterable to active humanitarian situations
reliefweb_search_jobsSearch humanitarian job listings by country, organization, career category, and experience level
reliefweb_get_jobFetch a job posting by numeric ID with the full vacancy description and application instructions
reliefweb_search_trainingSearch training by format, country, career category, cost, listing or delivery language, and date — upcoming starts by default
reliefweb_get_trainingFetch a training listing by numeric ID with the full description, registration instructions, and cost detail
reliefweb_list_sourcesBrowse contributing organizations by name and type

Resources

ResourceDescription
reliefweb://reports/{id}Full report record by numeric ID — metadata, body text, and file URLs. The ID segment must be digits only
reliefweb://disasters/{id}Disaster record by numeric ID — type, status, GLIDE, description, and content links. The ID segment must be digits only
reliefweb://countries/{iso3}Country profile by ISO3 code — overview, situation summary, and active response plans

Prompts

PromptDescription
reliefweb_crisis_briefingGenerate a structured humanitarian briefing for a country or disaster

Capability reference

Search/list page limits above 1,000 and profile-archive limits above 100 are clamped with a notice showing the requested and applied values. Defaults are unchanged: 10 for searches and sources, 100 for countries, 25 for profile archives. Set RELIEFWEB_CLAMP_LIMITS=false to restore strict upper-bound validation. Zero, negative, and fractional limits are always rejected.

reliefweb_search_reports tool

  • Full-text query plus filters: country (ISO3), disaster ID, format, theme, language (ISO 639-1), and source shortname
  • Date range filtering on source publication date (date_from/date_to) — a bare 2024-01-15 works alongside full ISO 8601
  • Format is a closed set: News and Press Release, Situation Report, Map, Infographic, Analysis, Other, Assessment, Manual and Guideline, Appeal, UN Document, Evaluation and Lessons Learned — matched ignoring case, spacing, and punctuation; anything else is rejected with the list
  • Raw filter object for compound conditions the named params don't cover
  • Pagination via offset/limit, up to 1,000 per call (default 10)
  • include_archived has no effect — reports carry no archived class, so every report is already in scope

reliefweb_get_report tool

  • Full body Markdown, all metadata, and file attachment URLs
  • Use after reliefweb_search_reports to retrieve content — bodies run 10–100KB
  • Over the response budget, returns a section outline instead; sections: ["body"] pulls the body back on its own
  • Returns structured not_found when the ID doesn't exist

reliefweb_search_disasters tool

  • Filtering by disaster type, country, status, and GLIDE number for cross-system correlation
  • Date range filtering on disaster creation date (date_from/date_to) — a bare 2024-01-15 works alongside full ISO 8601
  • Status is a closed set: alert, ongoing, past, alert-archive; comma-separate for multiple, matched ignoring case, spacing, and punctuation
  • alert-archive is reachable only with include_archived=true — the default preset hides it
  • Pagination via offset/limit, up to 1,000 per call (default 10)
  • Returns IDs for reliefweb_get_disaster and as the disaster_id filter in reliefweb_search_reports

reliefweb_get_disaster tool

  • Full description, profile overview, affected countries, and GLIDE number
  • Retrieves archived disaster records as well as current ones
  • Three curated lists — keyContent, appealsResponsePlans, usefulLinks — each returns only its currently-active entries; archived entries page via archive: { list: <name> }
  • Major disasters run to tens of KB; over the response budget the record becomes a section outline, and sections: ["description"] or ["profileOverview"] pulls one narrative at a time
  • sections and archive are alternative modes — a call supplying both is rejected
  • Returns structured not_found when the ID doesn't exist

reliefweb_get_country tool

  • Situation overview text curated by OCHA editors
  • Three curated lists — keyContent, appealsResponsePlans, usefulLinks — each returns only its currently-active entries; archived entries (thousands deep for a long-running crisis) page via archive: { list: <name> }
  • sections and archive are alternative modes — a call supplying both is rejected
  • Carries the same section-outline behavior as the other detail tools, though an active-only profile is small enough that it rarely reaches the budget
  • Use reliefweb_list_countries to discover valid ISO3 codes
  • Returns structured not_found for an unknown ISO3 code

reliefweb_list_countries tool

  • Optional crisis_only=true to limit to active humanitarian situations (status ongoing)
  • Returns ISO3 codes, status, and canonical URLs — use ISO3 with reliefweb_get_country
  • Pagination up to 1,000 entries per call (default 100)

reliefweb_search_jobs tool

  • Filtering by country, organization shortname, career category, theme, and experience level
  • Returns current open postings by default; include_archived=true reaches the closed archive, far larger than the open set
  • Sortable by newest posting (date.created:desc, default) or soonest closing (date.closing:asc)
  • Pagination via offset/limit, up to 1,000 per call (default 10)
  • Returns IDs for reliefweb_get_job

reliefweb_get_job tool

  • Full vacancy description and application instructions — neither is in search results
  • Posting status, indexed / closing / last-modified dates, hiring organization, countries, career category, experience level, and job type
  • Both canonical URLs (the readable alias and the node URL)
  • Reaches expired postings as well as open ones
  • Over the response budget, returns a section outline; sections: ["howToApply"] pulls the instructions without the whole description
  • Returns structured not_found pointing back at reliefweb_search_jobs

reliefweb_search_training tool

  • Filtering by country, source, format (on-site or online), career category, and cost (free or fee-based)
  • language filters the listing language; training_language filters delivery language. Summaries include cost and delivery languages when supplied by the organizer
  • Date range filtering on training start date (date_start_from/date_start_to) — a bare 2024-06-01 works alongside full ISO 8601
  • Scoped to training starting from now when neither date bound is given; supply either one for an explicit range, including a historical one
  • include_archived=true reaches concluded listings and drops the start-from-now default, so an otherwise unbounded search reaches the whole record
  • Ordered by soonest start date by default (date.start:asc, distinct from report date fields); override with sort
  • Returns IDs for reliefweb_get_training

reliefweb_get_training tool

  • Full description and registration instructions — neither is in search results
  • Cost class, the organizer's fee detail, and the organizer's own event URL
  • Listing status, start / end / registration / indexed dates, host cities, format, type, listing and delivery languages, organizing source, and both canonical URLs
  • Reaches concluded listings as well as current ones
  • Over the response budget, returns a section outline; sections: ["cost", "feeInformation", "howToRegister"] pulls just the practicalities
  • Returns structured not_found pointing back at reliefweb_search_training

reliefweb_list_sources tool

  • Optional filtering by name text or organization type: Government, International Organization, Non-governmental Organization, Academic and Research Institution, Media, Red Cross/Red Crescent Movement, Other
  • Returns short names, types, organization URLs, and homepage URLs
  • Pagination via offset/limit, up to 1,000 per call (default 10)
  • Use shortname with the source filter in reliefweb_search_reports, reliefweb_search_jobs, and reliefweb_search_training

reliefweb://reports/{id} resource

  • Full report record as application/json — metadata, body text, and file URLs
  • id must be digits only, exactly as search returned it
  • Always returns the whole record — no section selector; use reliefweb_get_report for an oversized report

reliefweb://disasters/{id} resource

  • Disaster record as application/json — type, status, GLIDE, description, and curated content links
  • id must be digits only, exactly as search returned it
  • Always returns the whole record — no section selector; use reliefweb_get_disaster for an oversized disaster or to page an archive

reliefweb://countries/{iso3} resource

  • Country profile as application/json — overview, situation summary, and active response plans
  • Equivalent to calling reliefweb_get_country
  • iso3 must be a 3-letter ISO 3166-1 alpha-3 code

reliefweb_crisis_briefing prompt

  • Arguments: country_or_disaster required (name, ISO3 code, or GLIDE number); focus optional — situation, jobs, or full (default)
  • Returns one user message instructing the agent to gather data with the ReliefWeb tools, then synthesize a briefing citing report titles and dates
  • Resolves country names to ISO3 codes before filtered calls; keeps disaster-name and GLIDE searches separate

reliefweb-guide skill

The bundled guide covers country/disaster research, opportunity evaluation, and checks before claiming that historical material is absent. MCP clients can discover and read it as a skill resource.

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

ReliefWeb-specific:

  • Full coverage of all six ReliefWeb content types: reports, disasters, countries, jobs, training, and sources
  • Compound filter builder supporting nested AND/OR conditions for the ReliefWeb API v2
  • Vocabulary matching for report format, disaster status, and training cost normalizes case, spacing, and punctuation instead of requiring exact ReliefWeb spelling
  • Date bounds reject impossible calendar dates and times locally; valid end-of-day 24:00 resolves to the next midnight
  • RELIEFWEB_APP_NAME validated at startup — required by the API since November 2025
  • 1,000 calls/day API quota, surfaced in each search and list tool's upstream-error recovery text

Agent-friendly output:

  • Body text excluded from search results by design — agents fetch it explicitly with the matching reliefweb_get_* tool to control context budget
  • Oversized records outline rather than truncate, with a section selector to retrieve exactly what's needed
  • Curated-profile archives are paged rather than dropped, with honest totals and a next offset while more remain
  • Typed not_found error contracts and empty-result notices that echo applied filters and suggest how to broaden

Getting started

Connect to the public hosted server with Claude Code:

sh
claude mcp add --transport http reliefweb-mcp-server https://reliefweb.caseyjhand.com/mcp

Or run locally with your own pre-approved ReliefWeb appname:

sh
claude mcp add reliefweb-mcp-server -e RELIEFWEB_APP_NAME=your-app-name -- npx -y @cyanheads/reliefweb-mcp-server

For other MCP clients, add this to your MCP client configuration file:

json
{  "mcpServers": {    "reliefweb-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/reliefweb-mcp-server"],      "env": {        "RELIEFWEB_APP_NAME": "your-app-name"      }    }  }}

Register an appname at ReliefWeb API. For Docker or a source build, see Running the server.

Configuration

VariableDescriptionDefault
RELIEFWEB_APP_NAMERequired. Pre-approved appname for the ReliefWeb API v2. Register at reliefweb.int/help/api.—
RELIEFWEB_CLAMP_LIMITSClamp over-cap page limits with an explicit notice. false restores strict schema maxima.true
MCP_TRANSPORT_TYPETransport: stdio or httpstdio
MCP_HTTP_PORTHTTP server port3010
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path where the MCP server is mounted/mcp
MCP_PUBLIC_URLPublic origin override for TLS-terminating reverse-proxy deploymentsnone
MCP_AUTH_MODEAuthentication: none, jwt, or oauthnone
MCP_SESSION_MODEHTTP session handling: stateless, stateful, or auto (which resolves to stateful). The server declares stateless in src/index.ts — no handler needs a session — so set this only to override.stateless
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.)info
MCP_GC_PRESSURE_INTERVAL_MSOpt-in Bun-only forced-GC pressure loop (ms). Try 60000 if heap growth is observed under sustained HTTP load.0 (disabled)
LOGS_DIRDirectory for log files (Node.js only).<project-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1in-memory
OTEL_ENABLEDEnable OpenTelemetryfalse

See .env.example for the full list of optional overrides.

Running the server

Local development

Requires Bun v1.4.0 or higher (or Node.js v24+ for the built server).

sh
git clone https://github.com/cyanheads/reliefweb-mcp-server.gitcd reliefweb-mcp-server && bun installcp .env.example .env   # set RELIEFWEB_APP_NAME
  • Build and run the production version:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:http# orbun run start:stdio
  • Run checks and tests:

    sh
    bun run devcheck  # Lints, formats, type-checks, and morebun run test      # Runs the test suite

Docker

sh
docker run --rm -e RELIEFWEB_APP_NAME=your-app-name -p 3010:3010 ghcr.io/cyanheads/reliefweb-mcp-server:latest

The image defaults to HTTP transport, stateless session mode, and logs to /var/log/reliefweb-mcp-server. For stdio, use docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio -e RELIEFWEB_APP_NAME=your-app-name ghcr.io/cyanheads/reliefweb-mcp-server:latest. Build locally with docker build -t reliefweb-mcp-server .; OpenTelemetry peers are installed by default — add --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/mcp-server/toolsTool definitions (*.tool.ts). Eleven tools across reports, disasters, countries, jobs, training, and sources, plus the shared pagination, section-outline, and profile-archive helpers.
src/mcp-server/resourcesResource definitions. Report, disaster, and country resources.
src/mcp-server/promptsPrompt definitions. Crisis briefing prompt.
src/services/reliefwebReliefWeb API service layer — HTTP client, filter builder, and response normalizers for all six content types.
src/configServer-specific environment variable parsing and validation with Zod.
skills/Published agent guidance, also served as MCP skill resources.
tests/Unit and integration tests, mirroring the src/ structure.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for logging, ctx.state for storage
  • Register new tools and resources in the createApp() arrays
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

Source: README.md at commit 3a6e85e

Tools

11

reliefweb_search_reports

Search ReliefWeb Reports

Search humanitarian reports on ReliefWeb with filtering by country, disaster, format, theme, language, source, and date. Returns paginated summaries — use reliefweb_get_report to fetch full body text. Report body is excluded from results (10–100KB each); call get_report when document content is needed. Every report is reachable by default — reports have no archived class, so include_archived has no effect here. Note: each call counts against the 1,000 calls/day quota.

Parameterssorttextlimitthemefilterformatoffsetsourcecountrydate_tolanguagedate_from+2 more

reliefweb_get_report

Get ReliefWeb Report

Fetch a single ReliefWeb report by its numeric ID with full body text, file attachments, and all metadata. Use after reliefweb_search_reports to retrieve document content — body is excluded from search results to manage context budget. Report bodies can be 10–100KB. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.

Parametersidrequiredsections

reliefweb_search_disasters

Search ReliefWeb Disasters

Search active and historical disasters on ReliefWeb by type, country, status, date range, and GLIDE number. Default preset covers alert, ongoing, and past disasters. Use include_archived=true to reach alert-archive entries as well, for historical research. Returns IDs suitable for use with reliefweb_get_disaster and as disaster_id filter in reliefweb_search_reports.

Parameterssorttextglidelimitoffsetstatuscountrydate_todate_fromdisaster_typeinclude_archived

reliefweb_get_disaster

Get ReliefWeb Disaster

Fetch a disaster record by ReliefWeb numeric ID including description, affected countries, GLIDE number, profile overview, key content links, and active appeals or response plans. Use after reliefweb_search_disasters to retrieve full details. Each curated list also has an archive, which the record leaves out. Two alternative selectors, at most one per call: sections names parts of the record to return, archive pages one list's archived entries in place of the record. Description and profile overview can together run to tens of KB for major disasters. A record over the response budget comes back as a section outline naming every section and its byte size. Nothing is truncated on any path.

Parametersidrequiredarchivesections

reliefweb_get_country

Get ReliefWeb Country Profile

Fetch a country profile from ReliefWeb by ISO3 code, including overview, humanitarian situation summary, key content links, active appeals and response plans, and useful external links. Country profiles are curated by OCHA editors and provide the authoritative situation summary for humanitarian responders. Each curated list also has an archive — thousands of entries deep for a long-running crisis — which the profile leaves out. Two alternative selectors, at most one per call: sections names parts of the profile to return, archive pages one list's archived entries in place of the profile. A profile over the response budget comes back as a section outline naming every section and its byte size. Nothing is truncated on any path.

Parametersiso3requiredarchivesections

reliefweb_list_countries

List ReliefWeb Countries

List all countries and territories tracked by ReliefWeb, optionally filtered to active humanitarian situations. Returns ISO3 codes and status for each entry — use the ISO3 code with reliefweb_get_country to fetch a full profile. Set crisis_only=true to limit results to countries with active humanitarian situations.

Parameterslimitoffsetcrisis_only

reliefweb_search_jobs

Search ReliefWeb Jobs

Search humanitarian job listings on ReliefWeb by country, organization, career category, theme, and experience level. Returns current open positions — expired postings are excluded by default. Use include_archived=true to search the full history of postings, which is far larger than the open set. Use text search for role titles and job descriptions.

Parameterssorttextlimitthemeoffsetsourcecountryexperiencecareer_categoryinclude_archived

reliefweb_get_job

Get ReliefWeb Job

Fetch a job posting by ReliefWeb numeric ID with the full vacancy description, application instructions, dates, hiring organization, and location and taxonomy metadata. Use after reliefweb_search_jobs, which returns summaries without the description or application instructions. Reaches expired postings as well as open ones. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.

Parametersidrequiredsections

reliefweb_search_training

Search ReliefWeb Training

Search humanitarian training and learning opportunities on ReliefWeb by country, format, date, source, career category, cost, listing language, and delivery language. Covers on-site and online capacity-building events. Training date fields use date.start / date.end — different from report date fields. Use date_start_from and date_start_to to find upcoming training within a window. Results default to soonest-starting first (date.start:asc). With neither date bound supplied the search is scoped to training starting from now, so the first page is upcoming opportunities; supply either bound to search an explicit range, including a historical one. Use include_archived=true to search concluded listings as well, which are far more numerous than the current ones.

Parameterscostsorttextlimitformatoffsetsourcecountrylanguagedate_start_tocareer_categorydate_start_from+2 more

reliefweb_get_training

Get ReliefWeb Training

Fetch a training listing by ReliefWeb numeric ID with the full description, registration instructions, event link, cost and fee information, dates, languages, and organizing source. Use after reliefweb_search_training, which returns summaries without the description, registration instructions, or cost detail. Reaches concluded listings as well as current ones. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.

Parametersidrequiredsections

reliefweb_list_sources

List ReliefWeb Sources

Browse source organizations that contribute content to ReliefWeb, optionally filtered by name text or organization type. Returns short names, types, and URLs. Use the shortname value with the source filter in reliefweb_search_reports, reliefweb_search_jobs, and reliefweb_search_training.

Parameterstexttypelimitoffset

Version history

4
  1. v0.3.0LatestOct 26, 2026
  2. v0.2.3Oct 9, 2026
  3. v0.2.2Sep 20, 2026
  4. v0.2.1Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts