关于 reliefweb-mcp-server
reliefweb-mcp-server 面向人道主义研究人员和应急响应人员,提供 OCHA ReliefWeb 的报告、灾害、国家档案、职位和培训信息,并支持搜索、详情读取与危机简报。
主要功能
- 01搜索报告和灾害
- 02读取国家与灾害档案
- 03查找人道主义职位和培训
- 04浏览信息贡献机构
- 05读取完整记录和附件
适用场景
- 01编写国家或灾害简报
- 02查找当前开放的人道主义职位
- 03按地点和形式比较培训
- 04获取报告全文和文件
MCP 相关
通过 STDIO 或 Streamable HTTP 向 MCP 客户端提供 11 个工具、3 个资源、1 个提示词和随附技能,并提供公共托管服务。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://reliefweb.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-reliefweb https://reliefweb.caseyjhand.com/mcp{"mcpServers":{"cyanheads-reliefweb":{"type":"http","url":"https://reliefweb.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-reliefweb":{"type":"http","url":"https://reliefweb.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-reliefweb":{"type":"http","url":"https://reliefweb.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-reliefweb":{"serverUrl":"https://reliefweb.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
11| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sort | string | 否 | 排序顺序。最新优先使用 date.original:desc(默认),最早优先使用 date.original:asc,按相关性使用 score:desc。 |
| text | string | 否 | 全文搜索查询。匹配标题、正文和关键元数据字段。使用自然语言或关键词。 |
| limit | integer | 否 | 要返回的结果数(1–1000,默认 10)。针对性查找时使用较小值;批量研究时使用较大值。每次调用都会计入每天 1,000 次的配额。 |
| theme | string | 否 | 行业或跨领域主题(例如 Health、Food and Nutrition、Shelter and Non-Food Items、Protection)。不限于预设值——与 ReliefWeb 使用的 theme.name 完全匹配。 |
| filter | object | 否 | 用于组合条件的原始 ReliefWeb 筛选器对象,适用于未被命名参数覆盖的条件。示例:{"operator": "AND", "conditions": [{"field": "format.name", "value": "Map"}, {"field": "language.code", "value": "fr"}]}。 |
| format | string | 否 | 内容格式筛选器。可选值:News and Press Release、Situation Report、Map、Infographic、Analysis、Other、Assessment、Manual and Guideline、Appeal、UN Document、Evaluation and Lessons Learned。忽略大小写、空格和标点;其他值将被拒绝,并返回有效值列表。 |
| offset | integer | 否 | 从零开始计数的分页偏移量。与 limit 和 totalCount 补充字段配合使用,可遍历大型结果集。 |
| source | string | 否 | 组织简称(例如 UNHCR、OCHA、WFP)。按 source.shortname 筛选。 |
| country | string | 否 | ISO 3166-1 alpha-3 国家/地区代码(例如 SYR、AFG、UKR)。筛选标记了此国家/地区的内容。 |
| date_to | any | 否 | 最晚发布日期。与 date_from 配合使用可指定日期范围。仅含日期的值将解析为 UTC 当天结束时刻,因此范围会完整涵盖该日期;带任意时区偏移量的日期时间将转换为 UTC。 |
| language | string | 否 | ISO 639-1 语言代码(例如 en、fr、es、ar)。按 language.code 筛选。 |
| date_from | any | 否 | 最早发布日期。按 date.original(来源发布日期)筛选。接受 2024-01-15 这样的纯日期,并将其解析为 UTC 当天开始时刻;带任意时区偏移量的日期时间将转换为 UTC。 |
| disaster_id | integer | 否 | ReliefWeb 数字灾害 ID。筛选与特定灾害关联的报告。通过 reliefweb_search_disasters 获取 ID。 |
| include_archived | boolean | 否 | 对报告无影响。报告没有归档类别——无论此项如何设置,所有报告都已在范围内。保留此项是为了让传入该参数的现有调用继续正常工作;此参数对 reliefweb_search_jobs、reliefweb_search_training 和 reliefweb_search_disasters 有效。 |
详细介绍
@cyanheads/reliefweb-mcp-server
通过 MCP 搜索 ReliefWeb 人道主义报告、灾害、职位、培训和国家概况。支持 STDIO 或 Streamable HTTP。
概述
来自 ReliefWeb 的人道主义报告、灾害、职位、培训和国家概况。ReliefWeb 是 OCHA 的危机应对信息中心。搜索和阅读 ReliefWeb 的所有内容类型。
工具
| 工具 | 描述 |
|---|---|
reliefweb_search_reports | 搜索人道主义报告,可按国家、灾害、格式、主题、语言、来源和日期筛选 |
reliefweb_get_report | 按数字 ID 获取单份报告,包含完整正文和元数据 |
reliefweb_search_disasters | 按类型、国家、状态、GLIDE 编号和日期范围搜索灾害 |
reliefweb_get_disaster | 获取灾害记录,包含概况、关键内容链接、紧急呼吁和响应计划 |
reliefweb_get_country | 按 ISO3 代码获取国家概况,包含概览、紧急呼吁和精选链接 |
reliefweb_list_countries | 列出 ReliefWeb 跟踪的所有国家,可筛选为当前有人道主义局势的国家 |
reliefweb_search_jobs | 搜索人道主义职位,可按国家、组织、职业类别和经验水平筛选 |
reliefweb_get_job | 按数字 ID 获取职位信息,包含完整职位描述和申请说明 |
reliefweb_search_training | 搜索培训,可按形式、国家、职业类别、费用、列表语言或授课语言及日期筛选 — 默认搜索即将开始的培训 |
reliefweb_get_training | 按数字 ID 获取培训信息,包含完整描述、报名说明和费用详情 |
reliefweb_list_sources | 按名称和类型浏览提供内容的组织 |
资源
| 资源 | 描述 |
|---|---|
reliefweb://reports/{id} | 按数字 ID 获取完整报告记录 — 包含元数据、正文和文件 URL。ID 部分只能包含数字 |
reliefweb://disasters/{id} | 按数字 ID 获取灾害记录 — 包含类型、状态、GLIDE、描述和内容链接。ID 部分只能包含数字 |
reliefweb://countries/{iso3} | 按 ISO3 代码获取国家概况 — 包含概览、局势摘要和当前响应计划 |
提示词
| 提示词 | 描述 |
|---|---|
reliefweb_crisis_briefing | 为某个国家或灾害生成结构化的人道主义简报 |
功能参考
搜索/列表页的上限超过 1,000,以及概况存档的上限超过 100 时,都会被限制到对应上限,并显示请求值和实际应用值。默认值不变:搜索和来源为 10,国家为 100,概况存档为 25。设置 RELIEFWEB_CLAMP_LIMITS=false 可恢复严格的上限验证。始终拒绝零、负数和小数形式的上限。
reliefweb_search_reports 工具
- 全文查询及筛选条件:国家(ISO3)、灾害 ID、格式、主题、语言(ISO 639-1)和来源简称
- 按来源发布日期筛选日期范围(
date_from/date_to)— 除完整 ISO 8601 格式外,也可使用2024-01-15这样的简写 - 格式为固定集合:
News and Press Release、Situation Report、Map、Infographic、Analysis、Other、Assessment、Manual and Guideline、Appeal、UN Document、Evaluation and Lessons Learned— 匹配时忽略大小写、空格和标点;其他值将被拒绝,并显示可用格式列表 - 对于命名参数未涵盖的复合条件,可使用原始
filter对象 - 通过
offset/limit分页,每次调用最多 1,000 条(默认 10 条) include_archived不起作用 — 报告不带存档类别,因此所有报告本来就都在范围内
reliefweb_get_report 工具
- 完整正文 Markdown、所有元数据和文件附件 URL
- 使用
reliefweb_search_reports后获取内容 — 正文大小为 10–100KB - 超出响应预算时改为返回章节大纲;单独设置
sections: ["body"]可重新获取正文 - ID 不存在时,返回结构化的
not_found
reliefweb_search_disasters 工具
- 按灾害类型、国家、状态和 GLIDE 编号筛选,便于跨系统关联
- 按灾害创建日期筛选日期范围(
date_from/date_to)——除完整 ISO 8601 格式外,也支持直接使用2024-01-15 - 状态为固定集合:
alert、ongoing、past、alert-archive;多个状态用逗号分隔,匹配时不区分大小写、空格和标点 - 只有设置
include_archived=true才能获取alert-archive记录——默认预设会将其隐藏 - 通过
offset/limit分页,每次调用最多返回 1,000 条(默认 10 条) - 返回的 ID 可用于
reliefweb_get_disaster,也可作为reliefweb_search_reports中的disaster_id筛选条件
reliefweb_get_disaster 工具
- 完整描述、概况、受影响国家和 GLIDE 编号
- 可检索已归档和当前的灾害记录
- 三个精选列表——
keyContent、appealsResponsePlans、usefulLinks——各自只返回当前有效条目;可通过archive: { list: <name> }分页获取已归档条目 - 重大灾害的记录可能达数万 KB;超出响应预算时,记录会缩减为各部分的提纲,可使用
sections: ["description"]或["profileOverview"]一次获取一个叙述部分 sections和archive是互斥模式——同时提供两者的调用会被拒绝- 如果 ID 不存在,会返回结构化的
not_found
reliefweb_get_country 工具
- 由 OCHA 编辑整理的局势概况文本
- 三个精选列表——
keyContent、appealsResponsePlans、usefulLinks——各自只返回当前有效条目;可通过archive: { list: <name> }分页获取已归档条目(长期危机的归档条目可能多达数千条) sections和archive是互斥模式——同时提供两者的调用会被拒绝- 与其他详情工具一样,内容超出响应预算时会返回各部分的提纲;不过,仅含当前有效内容的概况通常较短,很少超出预算
- 使用
reliefweb_list_countries查找有效的 ISO3 代码 - 未知 ISO3 代码会返回结构化的
not_found
reliefweb_list_countries 工具
- 可选设置
crisis_only=true,仅列出正在进行的活跃人道主义局势(状态为 ongoing) - 返回 ISO3 代码、状态和规范 URL——将 ISO3 代码用于
reliefweb_get_country - 每次调用最多返回 1,000 条(默认 100 条)
reliefweb_search_jobs 工具
- 按国家、组织简称、职业类别、主题和经验级别筛选
- 默认返回当前开放的招聘信息;设置
include_archived=true可获取已关闭的归档信息,其数量远多于开放职位 - 可按最新发布排序(
date.created:desc,默认)或按最早截止时间排序(date.closing:asc) - 通过
offset/limit分页,每次调用最多返回 1,000 条(默认 10 条) - 返回的 ID 可用于
reliefweb_get_job
reliefweb_get_job 工具
- 完整职位描述和申请说明——这两项都不会出现在搜索结果中
- 招聘状态、索引日期/截止日期/最后修改日期、招聘组织、国家、职业类别、经验级别和职位类型
- 提供两个规范 URL(易读别名和节点 URL)
- 可获取已过期和开放的招聘信息
- 超出响应预算时会返回各部分的提纲;使用
sections: ["howToApply"]可在不获取完整职位描述的情况下提取申请说明 - 返回结构化的
not_found,并指向reliefweb_search_jobs
reliefweb_search_training tool
- 按国家、来源、形式(
on-site或online)、职业类别和费用(free或fee-based)筛选 language筛选列表语言;training_language筛选授课语言。组织方提供费用和授课语言信息时,摘要会包含这些内容- 按培训开始日期筛选日期范围(
date_start_from/date_start_to)——单独使用2024-06-01即可,也支持完整的 ISO 8601 格式 - 未指定任一日期边界时,搜索范围限定为从现在起开始的培训;指定任一边界即可设定明确范围,包括历史范围
include_archived=true会纳入已结束的列表,并取消“从现在起开始”的默认范围,因此未设置日期边界的搜索会覆盖全部记录- 默认按最早开始日期排序(
date.start:asc,与报告日期字段不同);可用sort覆盖 - 返回供
reliefweb_get_training使用的 ID
reliefweb_get_training tool
- 完整说明和注册指南——搜索结果不包含这两项
- 费用类别、组织方提供的费用详情,以及组织方自己的活动 URL
- 列表状态、开始/结束/注册/索引日期、主办城市、形式、类型、列表和授课语言、组织来源,以及两个规范 URL
- 可获取已结束和当前的列表
- 若响应超出预算,则返回章节大纲;
sections: ["cost", "feeInformation", "howToRegister"]仅提取实用信息 - 返回结构化的
not_found,指向reliefweb_search_training
reliefweb_list_sources tool
- 可选按名称文本或组织
type筛选:Government、International Organization、Non-governmental Organization、Academic and Research Institution、Media、Red Cross/Red Crescent Movement、Other - 返回简称、类型、组织 URL 和主页 URL
- 使用
offset/limit分页;每次最多返回 1,000 条(默认 10 条) - 在
reliefweb_search_reports、reliefweb_search_jobs和reliefweb_search_training的source筛选条件中使用shortname
reliefweb://reports/{id} resource
- 完整报告记录,格式为
application/json——包含元数据、正文文本和文件 URL id必须仅由数字组成,且与搜索结果返回的 ID 完全一致- 始终返回完整记录——不支持章节选择器;对于过长的报告,请使用
reliefweb_get_report
reliefweb://disasters/{id} resource
- 灾害记录,格式为
application/json——包含类型、状态、GLIDE、描述和精选内容链接 id必须仅由数字组成,且与搜索结果返回的 ID 完全一致- 始终返回完整记录——不支持章节选择器;对于过长的灾害记录或需要分页浏览存档时,请使用
reliefweb_get_disaster
reliefweb://countries/{iso3} resource
- 国家简介,格式为
application/json——包含概览、形势摘要和当前响应计划 - 等同于调用
reliefweb_get_country iso3必须是 3 个字母的 ISO 3166-1 alpha-3 代码
reliefweb_crisis_briefing prompt
- 参数:必填的
country_or_disaster(名称、ISO3 代码或 GLIDE 编号);可选的focus——situation、jobs或full(默认值) - 返回一条用户消息,指示 Agent 使用 ReliefWeb 工具收集数据,然后综合整理简报,并引用报告标题和日期
- 在进行筛选调用前,将国家名称解析为 ISO3 代码;灾害名称搜索与 GLIDE 搜索分别进行
reliefweb-guide skill
随附的指南涵盖国家/灾害研究、机会评估,以及在声称缺少历史资料前应进行的检查。MCP 客户端可将其作为技能资源发现并阅读。
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及结构化日志和可选的 OpenTelemetry 跟踪。
ReliefWeb 专属功能:
- 全面支持 ReliefWeb 的六种内容类型:报告、灾害、国家、职位、培训和来源
- 复合筛选器构建器支持 ReliefWeb API v2 的嵌套 AND/OR 条件
- 报告
format、灾害status和培训cost的词汇匹配会统一大小写、空格和标点,无需严格匹配 ReliefWeb 的拼写 - 日期边界会在本地拒绝不可能的日历日期和时间;有效的日终时间
24:00会解析为次日午夜 RELIEFWEB_APP_NAME会在启动时验证——自 2025 年 11 月起,该 API 要求提供此项- 每日 1,000 次 API 调用配额,会在每个搜索和列表工具的上游错误恢复文本中显示
便于 Agent 使用的输出:
- 搜索结果默认不包含正文文本——Agent 使用对应的
reliefweb_get_*工具显式获取正文,以控制上下文预算 - 超大记录会显示大纲而非截断内容,并提供章节选择器以便精确获取所需内容
- 精选资料档案会分页显示而非直接省略,并提供准确的总数,以及仍有更多结果时的下一偏移量
- 提供类型化的
not_found错误约定;无结果提示会回显已应用的筛选条件,并建议如何放宽条件
开始使用
使用 Claude Code 连接到公开托管服务:
claude mcp add --transport http reliefweb-mcp-server https://reliefweb.caseyjhand.com/mcp
或者,使用你自己的预先批准的 ReliefWeb appname 在本地运行:
claude mcp add reliefweb-mcp-server -e RELIEFWEB_APP_NAME=your-app-name -- npx -y @cyanheads/reliefweb-mcp-server
对于其他 MCP 客户端,请将以下内容添加到 MCP 客户端配置文件中:
{
"mcpServers": {
"reliefweb-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/reliefweb-mcp-server"],
"env": {
"RELIEFWEB_APP_NAME": "your-app-name"
}
}
}
}
在 ReliefWeb API 注册 appname。Docker 或从源代码构建的相关说明,请参阅运行服务。
配置
| 变量 | 描述 | 默认值 |
|---|---|---|
RELIEFWEB_APP_NAME | 必填。 ReliefWeb API v2 预先批准的 appname。请访问 reliefweb.int/help/api 注册。 | — |
RELIEFWEB_CLAMP_LIMITS | 将超出上限的页面限制调整至上限,并显示明确提示。设为 false 可恢复严格的架构最大值限制。 | true |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http | stdio |
MCP_HTTP_PORT | HTTP 服务端口 | 3010 |
MCP_HTTP_ENDPOINT_PATH | 挂载 MCP 服务的 HTTP 端点路径 | /mcp |
MCP_PUBLIC_URL | 用于由 TLS 终止反向代理部署的公开来源覆盖值 | 无 |
MCP_AUTH_MODE | 身份验证:none、jwt 或 oauth | none |
MCP_SESSION_MODE | HTTP 会话处理方式:stateless、stateful 或 auto(解析为 stateful)。服务在 src/index.ts 中声明为 stateless——无需任何处理程序使用会话,因此仅在需要覆盖时设置此项。 | stateless |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等) | info |
MCP_GC_PRESSURE_INTERVAL_MS | 选择启用的、仅限 Bun 的强制 GC 压力循环(毫秒)。如果持续 HTTP 负载下出现堆增长,可尝试设为 60000。 | 0(已禁用) |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
STORAGE_PROVIDER_TYPE | 存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1 | in-memory |
OTEL_ENABLED | 启用 OpenTelemetry | false |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
需要 Bun v1.4.0 或更高版本(或者使用已构建的服务时需要 Node.js v24+)。
git clone https://github.com/cyanheads/reliefweb-mcp-server.git
cd reliefweb-mcp-server && bun install
cp .env.example .env # set RELIEFWEB_APP_NAME
-
构建并运行生产版本:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker run --rm -e RELIEFWEB_APP_NAME=your-app-name -p 3010:3010 ghcr.io/cyanheads/reliefweb-mcp-server:latest
镜像默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/reliefweb-mcp-server。若要使用 stdio,请运行 docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio -e RELIEFWEB_APP_NAME=your-app-name ghcr.io/cyanheads/reliefweb-mcp-server:latest。使用 docker build -t reliefweb-mcp-server . 在本地构建;默认会安装 OpenTelemetry 对等依赖,若要省略这些依赖,请添加 --build-arg OTEL_ENABLED=false。
项目结构
| 目录 | 用途 |
|---|---|
src/mcp-server/tools | 工具定义(*.tool.ts)。涵盖报告、灾害、国家、工作、培训和来源的 11 个工具,以及共享的分页、章节大纲和档案资料辅助工具。 |
src/mcp-server/resources | 资源定义。报告、灾害和国家资源。 |
src/mcp-server/prompts | 提示词定义。危机简报提示词。 |
src/services/reliefweb | ReliefWeb API 服务层——HTTP 客户端、筛选器构建器,以及六种内容类型的响应规范化器。 |
src/config | 使用 Zod 解析和验证服务专用环境变量。 |
skills/ | 已发布的 Agent 指南,同时作为 MCP 技能资源提供。 |
tests/ | 单元测试和集成测试,结构与 src/ 相对应。 |
开发指南
开发指南和架构规则请参见 CLAUDE.md。简要来说:
- 处理器抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录日志,使用ctx.state存储数据 - 在
createApp()数组中注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。