关于 unesco-heritage-mcp-server
unesco-heritage-mcp-server 通过 MCP 搜索并读取 UNESCO 世界遗产、非物质文化遗产、生物圈保护区和全球地质公园记录,适用于遗产研究与旅行规划。支持按地区、国家和地点筛选,并提供完整记录与数据来源信息。
主要功能
- 01搜索四类 UNESCO 遗产记录
- 02按国家、类别和年份筛选
- 03按坐标及距离搜索
- 04读取完整记录与关联信息
- 05查询危险名录和参考数据
适用场景
- 01查找某地附近的世界遗产
- 02核对遗产的完整记录和标准
- 03研究非物质文化遗产关联地点
MCP 相关
通过 STDIO 或 Streamable HTTP 向 MCP 客户端提供 9 个搜索、读取和参考数据工具,以及 4 种记录资源。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://unesco-heritage.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-unesco-heritage https://unesco-heritage.caseyjhand.com/mcp{"mcpServers":{"cyanheads-unesco-heritage":{"type":"http","url":"https://unesco-heritage.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-unesco-heritage":{"type":"http","url":"https://unesco-heritage.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-unesco-heritage":{"type":"http","url":"https://unesco-heritage.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-unesco-heritage":{"serverUrl":"https://unesco-heritage.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
9| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| near | object | 否 | 仅包含距此点不超过 radius_km 的遗址:当遗址的代表点或任一组成部分位于半径范围内时,即视为匹配;既无代表点也无组成部分的遗址永不匹配。distance_km 和距离排序使用这些点中最近的一个。 |
| near.latitude | number | 是 | 该点的纬度,单位为十进制度(−90 至 90)。 |
| near.longitude | number | 是 | 该点的经度,单位为十进制度(−180 至 180)。 |
| near.radius_km | number | 否 | 搜索半径,单位为公里(最多 5000,默认 100)。 |
| sort | enum | 否 | 结果顺序。默认值:设置 query 时按相关性排序;否则,设置 near 时按距离排序;否则按名称排序。相关性排序需要 query;距离排序需要 near。缺失的区域和濒危年份排在最后。relevance | name | inscribed_newest | inscribed_oldest | area_largest | danger_listed_newest | distance |
| limit | integer | 否 | 每页最多返回的结果数(1–50,默认 20)。 |
| query | string | 否 | 关键词;每个词都必须匹配站点名称(任意六种语言)、描述或突出普遍价值声明中某个词的开头。忽略大小写、重音符号和标点,因此查询必须至少包含一个字母或数字,且最多包含 16 个不同的词;不支持短语、运算符或模糊匹配。 |
| cursor | string | 否 | 来自上一次调用的 next_cursor 的不透明续页游标。使用相同的筛选条件和排序方式传入此值,以获取下一页。 |
| region | enum | 否 | UNESCO 区域:非洲、阿拉伯国家、亚洲及太平洋、欧洲及北美,或拉丁美洲及加勒比地区(接受代码 AFR、ARB、APA、EUR、LAC)。Africa | Arab States | Asia and the Pacific | Europe and North America | Latin America and the Caribbean |
| country | string | 否 | ISO 3166-1 alpha-2 或 alpha-3 代码,不区分大小写(FR、FRA)。匹配该国参与的所有站点,包括跨境站点。若要查询国家名称,请使用 unesco_list_reference(topic countries)查找其代码。 |
| category | enum | 否 | 站点类别:文化、自然或混合。Cultural | Natural | Mixed |
| criteria | array | 否 | 站点必须满足的全部列入标准。(i)人类创造天才的杰作。(ii)在建筑、技术、纪念性艺术、城镇规划或景观设计方面,体现了不同时期或某一文化区域内人类价值观的重要交流。(iii)为某种文化传统或现存或已消亡的文明提供独特或特殊的见证。(iv)作为某种建筑、建筑或技术组合、或景观的杰出范例,展现人类历史上的重要阶段。(v)作为某种文化或人类与环境互动的代表,体现传统人类定居、土地利用或海洋利用的杰出范例,尤其是在易受不可逆转变化影响的情况下。(vi)与具有突出普遍意义的事件、现存传统、思想、信仰或艺术和文学作品有直接关联。(vii)绝佳的自然现象,或具有特殊自然美和美学重要性的地区。(viii)作为地球历史重要阶段的杰出范例,包括生命记录、持续进行的重要地质过程或重要地貌特征。(ix)作为生态系统和动植物群落演化中持续进行的重要生态和生物过程的杰出范例。(x)生物多样性原地保护最重要的自然栖息地,包括具有突出普遍价值的受威胁物种栖息地。标准(vi)根据突出普遍价值声明推断,因为 UNESCO 的标准字段未包含该项。 |
| in_danger | boolean | 否 | true:仅限列入《濒危世界遗产名录》的站点。false:仅限未列入该名录的站点。省略则包含两者。 |
| inscribed_to | integer | 否 | 最近一次列入名录的年份,包含边界值。 |
| transboundary | boolean | 否 | true:仅限由多个缔约国共同拥有的站点。false:仅限由单个国家拥有的站点。 |
| inscribed_from | integer | 否 | 最早列入名录的年份,包含边界值。 |
| include_description | boolean | 否 | 设为 false 可在响应中省略每行的描述(默认值为 true);unesco_get_site 会返回描述。匹配的站点、顺序和 matched_in 均不变。 |
详细介绍
@cyanheads/unesco-heritage-mcp-server
通过 MCP 搜索 UNESCO 世界遗产地、非物质文化遗产、生物圈保护区和世界地质公园。支持 STDIO 或 Streamable HTTP。
概述
UNESCO 世界遗产名录、非物质文化遗产名录、生物圈保护区和世界地质公园。搜索并读取完整记录、查看《濒危世界遗产名录》,还可以查找任意地点附近的遗产地、保护区或地质公园。无需 API 密钥。
工具
| 工具 | 描述 |
|---|---|
unesco_search_sites | 按关键词、国家、类别、地区、标准、列入年份、濒危名录或跨境状态,或距某点的距离搜索世界遗产地 |
unesco_get_site | 获取遗产地的完整记录:突出的普遍价值声明、标准及其含义、组成部分、坐标和图片署名 |
unesco_search_intangible_heritage | 按关键词、国家、名录、列入年份、跨国状态或关联的世界遗产地搜索三份非物质遗产名录 |
unesco_get_intangible_heritage_element | 获取某项遗产的完整记录:描述、名录、国家、概念术语、关联遗产地和图片署名 |
unesco_search_biosphere_reserves | 按关键词、国家、地区、MAB 区域网络、指定年份、跨境或 SIDS 状态,或距某点的距离搜索生物圈保护区 |
unesco_get_biosphere_reserve | 获取保护区的完整记录:生态和社会经济概况、分区面积及人口、审查年份和坐标 |
unesco_search_geoparks | 按关键词、国家、指定年份、跨国状态或距某点的距离搜索 UNESCO 世界地质公园 |
unesco_get_geopark | 获取地质公园的完整记录:简介、描述、关于支持当地社区的说明、记录的面积和人口,以及坐标 |
unesco_list_reference | 解读标准、国家(名称转为 ISO 代码)、地区、非物质遗产名录和 MAB 网络;报告数据集覆盖范围和数据日期 |
资源
| 资源 | 描述 |
|---|---|
unesco://site/{id_no} | 一条世界遗产地记录 |
unesco://intangible-heritage/{ich_ref} | 一条非物质遗产项目记录 |
unesco://biosphere-reserve/{mab_id} | 一条生物圈保护区记录 |
unesco://geopark/{ugg_id} | 一条 UNESCO 世界地质公园记录 |
每项资源都与对应的获取工具相对应。
功能参考
unesco_search_sites 工具
- 筛选条件:
query、country(ISO 3166-1 alpha-2 或 alpha-3)、category、region、criteria(必须满足列出的每项标准)、in_danger、transboundary、inscribed_from/inscribed_to,以及near(latitude、longitude、radius_km,上限为 5000,默认值为 100);通过遗产地的代表点或其任一组成部分进行匹配 - 每页最多返回 50 个遗产地(默认值为 20;如果
limit值较大且不超过 10,000,则按 50 个返回,并在notice中说明),使用next_cursor获取后续结果;sort可取relevance、name、inscribed_newest、inscribed_oldest、area_largest、danger_listed_newest或distance;设置include_description: false可省略行描述 in_danger: true表示《濒危世界遗产名录》;totalCount和facets(类别、地区、濒危状态、标准、排名前 10 的国家)涵盖所有匹配结果;设置query时,行中会包含matched_in;设置near时,行中会包含到遗产地点中最近一点的distance_km(如果组成部分更近,则还会包含nearest_component)
unesco_get_site 工具
- 按
id_no查询一个遗址:可使用数字、数字字符串或遗址的 whc.unesco.org 页面 URL;max_components列出最多 1000 个组成部分(默认 20;若设置更大的值,最高为 10,000,则实际返回 1000 个,并在notice中说明) - 描述、突出普遍价值声明、带有含义和
source: "recorded" | "inferred"的criteria[]、附 ISO 代码的缔约国、坐标、面积、secondary_years、濒危名录年份、六种语言的名称,以及附有署名的主image description_language(en、fr、es、ru、ar、zh)会以该语言返回 UNESCO 的描述,并在description_language中标明该语言;若 UNESCO 未发布该语言的描述,则返回英文描述,description_language为en,并附带notice。突出普遍价值声明仅提供英文版components_total是 UNESCO 统计的组成部分数量,components_unparsed是无法读取的条目;未知 ID 会报错site_not_found
unesco_search_intangible_heritage 工具
- 筛选条件:
query、country、list(代表作名录、急需保护的非物质文化遗产名录、优秀保护实践名册;也接受RL/USL/Art18)、multinational、world_heritage_site(一个id_no),以及inscribed_from/inscribed_to - 每页最多 50 个项目(默认 20;若
limit设置为更大的值,最高为 10,000,则实际返回 50 个,并在notice中说明);使用next_cursor获取后续结果;结果行不包含描述,但会提供主要concepts和关联的world_heritage_sites facets包含名录、多国状态、排名前 10 的国家和排名前 10 的概念词
unesco_get_intangible_heritage_element 工具
- 按
ich_ref查询一个项目:可使用数字、数字字符串或项目的 ich.unesco.org 页面 URL - 描述、名录、国家、列入年份、主要和次要
concepts、关联的world_heritage_sites、UNESCO 页面,以及附有说明文字和署名的主image;未知引用编号会报错element_not_found description_language: "fr"会返回 UNESCO 的法文描述(UNESCO 仅发布英文和法文版本),若无法提供法文,则会像unesco_get_site一样回退到英文并附带notice
unesco_search_biosphere_reserves 工具
- 筛选条件:
query(名称、简介以及生态或社会经济相关文本;没有生物群系字段,因此请搜索栖息地相关词语)、country、region、regional_network(名称或缩写)、transboundary、sids、designated_from/designated_to,以及near - 每页最多 50 个保护区(默认 20;若
limit设置为更大的值,最高为 10,000,则实际返回 50 个,并在notice中说明);使用next_cursor获取后续结果;sort可设为relevance、name、designated_newest、designated_oldest、area_largest或distance;设为include_description: false时,结果行不包含简介 - 跨境保护区会按参与国各显示一次,每个条目都有自己的
mab_id;facets包含地区、区域网络、跨境和 SIDS 状态,以及排名前 10 的国家
unesco_get_biosphere_reserve 工具
- 按
mab_id查询一个保护区,匹配时不区分大小写或重音符号 - 简介、生态和社会经济特征、各分区的陆地和海洋面积、各分区人口、指定年份、扩展、改名和定期审查年份、坐标、网站以及 UNESCO 页面
- 面积(公顷)和人口数据按记录原样返回:各分区面积之和可能与总面积不同;人口值
0可能表示无人居住,也可能表示未报告;未知 ID 会报错biosphere_reserve_not_found
unesco_search_geoparks 工具
- 筛选条件:
query(名称、简介、描述和社区账号;可搜索 volcanic 或 karst 等地貌词)、country、transnational、designated_from/designated_to,以及near(按各地质公园的一个坐标点测量距离) - 每页最多 50 个地质公园(默认 20;若
limit更大、最高为 10,000,则仍按 50 个返回,并在notice中说明);使用next_cursor继续翻页;sort可设为relevance、name、designated_newest、designated_oldest、area_largest或distance;include_description: false会省略列表项简介 - 跨国地质公园在一行中列出其所有国家;
facets涵盖跨国状态和排名前 10 的国家;若年份范围的起始年份不晚于 2015 年,则会添加一条notice,说明在该认定制度设立前获得认定的地质公园均标注为 2015 年
unesco_get_geopark 工具
- 按
ugg_id获取一个地质公园(例如EUFR10),大小写不限 - 返回记录中的国家、认定年份、跨国状态、面积和人口(若 UNESCO 未记录人口,则不返回
population)、坐标、简介、描述、支持当地社区的相关说明、网站和 UNESCO 页面;未知 ID 会报错geopark_not_found
unesco_list_reference 工具
topic:criteria、countries、regions、intangible_lists、biosphere_networks或datasetsfilter保留匹配的行;对于countries,输入国家名称、ISO 代码或常见的旧称,会返回每个country输入可接受的代码,以及该国的遗产地、非物质文化遗产项目、生物圈保护区和地质公园数量datasets会报告各数据集的记录数、data_as_of、许可证、署名说明和覆盖范围备注
unesco://site/{id_no} 资源
- 以
application/json格式返回unesco_get_site记录(最多包含 20 个组成部分;完整数量由components_total提供)和英文描述,以及sources;id_no来自unesco_search_sites
unesco://intangible-heritage/{ich_ref} 资源
- 以
application/json格式返回unesco_get_intangible_heritage_element记录和英文描述,以及sources;ich_ref来自unesco_search_intangible_heritage
unesco://biosphere-reserve/{mab_id} 资源
- 以
application/json格式返回unesco_get_biosphere_reserve记录和sources;mab_id来自unesco_search_biosphere_reserves,包含非 ASCII 字母时需进行百分号编码
unesco://geopark/{ugg_id} 资源
- 以
application/json格式返回unesco_get_geopark记录和sources;ugg_id来自unesco_search_geoparks
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及结构化日志和可选的 OpenTelemetry 跟踪。
UNESCO 专属功能:
- 数据集
whc001(世界遗产名录)、ich001(非物质文化遗产名录)、mab001(人与生物圈计划)和eg0001(UNESCO 世界地质公园)均会在首次使用时加载为内存快照(需要两次上游请求),并每隔 24 小时刷新一次;搜索、分面和距离计算均在本地执行,刷新失败时会继续提供上一个快照 - 上游流量限制为最多两个并发请求、每天最多 200 次请求;收到 429 响应后会进入冷却期,并遵循
Retry-After - UNESCO 的标准字段未涵盖标准(vi),因此会根据每个遗产地的突出普遍价值声明推断该标准,并在其出现的所有位置标注为推断值
- 国家输入接受任意大小写的 ISO 3166-1 alpha-2 或 alpha-3 代码,并匹配该国参与的所有跨国遗产地、多国共同申报项目或跨国地质公园;遗产地和项目 ID 也接受对应的 UNESCO 页面 URL
适合 Agent 使用的输出:
- 每个响应均包含来源信息:
sources会列出各数据集的data_as_of日期、许可证和署名信息 - 搜索结果会报告完整匹配信息:
totalCount、facets,以及服务器实际使用的筛选条件和排序方式回显applied_filters - 关键词匹配采用词前缀匹配,要求所有词均匹配(最多 16 个不重复的词);
matched_in会说明匹配到的字段层级;若无匹配结果,notice会指出移除哪个筛选条件可匹配最多记录 - 类型化错误(
unknown_country、invalid_year_range、sort_needs_input、cursor_mismatch、invalid_cursor、*_not_found、snapshot_unavailable)会附带恢复提示,指出下一步应调用的工具;若无法连接 Data Hub,snapshot_unavailable会标记为可重试(retryable),并提供retryAfter;若 Data Hub 拒绝请求,或返回服务器无法使用的数据,则会标记为不可重试
数据与许可
所有四个数据集均来自 UNESCO Data Hub,并采用 CC BY-SA 4.0 许可。重用数据时请注明 UNESCO;每个响应中的 sources 块都包含可直接使用的署名信息。在相同方式共享条款下,改编后的数据必须采用相同许可证共享。
图片不受该许可证涵盖。每张世界遗产和非物质文化遗产图片均保留其自身版权,版权方和摄影师信息会随图片记录一同提供。该服务会返回图片链接,但绝不会获取或代理图片。
本服务是独立项目,与 UNESCO 无关联,也未获其认可。
开始使用
公共托管实例
公共实例已开放,地址为 https://unesco-heritage.caseyjhand.com/mcp,无需安装。通过 Streamable HTTP 将任意 MCP 客户端连接到该实例:
{
"mcpServers": {
"unesco-heritage-mcp-server": {
"type": "streamable-http",
"url": "https://unesco-heritage.caseyjhand.com/mcp"
}
}
}
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"unesco-heritage-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/unesco-heritage-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可以使用 npx(无需 Bun):
{
"mcpServers": {
"unesco-heritage-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/unesco-heritage-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可以使用 Docker:
{
"mcpServers": {
"unesco-heritage-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/unesco-heritage-mcp-server:latest"]
}
}
}
对于 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 无需 API 密钥或账户:UNESCO Data Hub 开放使用。
安装
- 克隆代码库:
git clone https://github.com/cyanheads/unesco-heritage-mcp-server.git
- 进入目录:
cd unesco-heritage-mcp-server
- 安装依赖:
bun install
- 配置环境(可选):
cp .env.example .env
# edit .env to change the transport, port, or log level
配置
该服务没有自己的设置;此处适用这些框架变量。
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_HTTP_HOST | HTTP 服务主机。 | 127.0.0.1 |
MCP_SESSION_MODE | HTTP 会话模式:stateless、stateful 或 auto。.env.example 和 Docker 镜像设置为 stateless。 | auto |
MCP_AUTH_MODE | 身份验证:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <app-root>/logs |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
常见的框架覆盖项请参阅 .env.example。
运行服务
本地开发
-
构建并运行生产版本:
# 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
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册工具和资源,提供来自 src/mcp-server/instructions.ts 的服务说明,并启动和停止服务。 |
src/mcp-server/tools | 工具定义(*.tool.ts)。 |
src/mcp-server/resources | 每个数据集对应一个记录资源。 |
src/mcp-server/shared | 工具和资源共用的输入架构与规范化器、丰富化字段和 Markdown 辅助工具。 |
src/services/unesco-datahub | UNESCO Data Hub 服务:快照加载与刷新、行验证与修复、搜索与分面、ISO 3166 表以及词汇表。 |
tests/ | 基于合成夹具的单元测试,结构与 src/ 相对应。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要说明:
- 处理器抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录日志,使用ctx.enrich提供归属信息、总数和提示 - 在
src/index.ts的createApp()数组中注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不捏造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
本项目采用 Apache 2.0 许可证。详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。