Reliefweb Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.3.0更新於 Nov 2, 2026

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

已驗證Streamable HTTP可網頁執行位置與生活網頁搜尋與抓取知識與記憶

概覽

AI 產生的概覽

查詢 ReliefWeb(OCHA)人道主義資料,讓助理搜尋並閱讀報告、災害、國家概況、職缺、訓練與來源機構。

可以做什麼
  • 搜尋並閱讀人道主義報告,可依國家、災害、格式、主題、語言、來源與日期篩選
  • 搜尋災害並取得災害紀錄,含概況、募款與應變計畫
  • 列出國家並依 ISO3 代碼取得 OCHA 編輯的國家概況
  • 搜尋職缺與訓練資訊,再取得完整說明及申請或報名指示
  • 瀏覽投稿來源機構及其簡稱
  • 產生針對某國家或災害的結構化危機簡報提示
適用情境
適合人道主義研究、危機監測、國家情勢摘要,以及尋找人道主義領域的工作或訓練機會。適用於需要 OCHA 權威資料而非一般網頁搜尋的分析人員、記者或機構人員。
執行需求
可作為公開託管的 HTTP 端點使用,也可透過 npx(Node.js)或 Docker 在本機執行。本機使用需要一個已向 ReliefWeb API 註冊並核准的 RELIEFWEB_APP_NAME。選用設定涵蓋傳輸方式、HTTP 主機/連接埠/路徑、驗證模式、日誌等級與儲存後端。
安裝前請注意
ReliefWeb API 每日配額為 1,000 次呼叫,伺服器所有請求共用此配額。報告與紀錄正文可能很大,超出回應預算時只回傳章節大綱而非全文。伺服器對 ReliefWeb 為唯讀,不會寫入或刪除資料。公開託管端點由第三方部署,若希望使用自己的 appname 與配額,可考慮在本機執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Reliefweb Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Freliefweb-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "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.

來源:README.md,提交 3a6e85e

工具

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.

輸入參數sorttextlimitthemefilterformatoffsetsourcecountrydate_tolanguagedate_from另有 2 個

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.

輸入參數id必填sections

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.

輸入參數sorttextglidelimitoffsetstatuscountrydate_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.

輸入參數id必填archivesections

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.

輸入參數iso3必填archivesections

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.

輸入參數limitoffsetcrisis_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.

輸入參數sorttextlimitthemeoffsetsourcecountryexperiencecareer_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.

輸入參數id必填sections

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.

輸入參數costsorttextlimitformatoffsetsourcecountrylanguagedate_start_tocareer_categorydate_start_from另有 2 個

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.

輸入參數id必填sections

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.

輸入參數texttypelimitoffset

版本歷史

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

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分