关于 national-parks-mcp-server
national-parks-mcp-server 提供美国国家公园管理局的公园、警报、露营地、活动和事件信息,供规划 NPS 景点行程的 MCP 客户端使用。可通过专用工具查询公园详情和最新通知。
主要功能
- 01按名称、州或查询词查找公园
- 02获取公园详情、费用、开放时间和路线
- 03查看警报与关闭信息
- 04搜索露营地及设施
- 05浏览活动和计划事件
适用场景
- 01按州或活动类型选择行程公园
- 02游览前检查关闭和危险通知
- 03比较露营地设施及预订信息
- 04查找游览期间的活动或事件
MCP 相关
提供 6 个工具,供 MCP 客户端查询 NPS Data API 的行程规划信息。支持 STDIO 和 Streamable HTTP;自托管实例需要 NPS API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://national-parks.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-national-parks https://national-parks.caseyjhand.com/mcp{"mcpServers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-national-parks":{"serverUrl":"https://national-parks.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 返回的公园数量上限(1–50)。完整集合约有 470 处;请使用 query/stateCode 缩小范围,而不要翻页遍历所有结果。 |
| query | string | 否 | 在公园名称和描述中进行自由文本搜索(例如 "yosemite"、"civil war"、"redwood")。完全匹配 parkCode 或名称的结果优先,其次是其他名称匹配项,最后是仅在描述中提及该词的公园——所有匹配结果会先统一排序,再应用 start/limit。省略则按州浏览。建议至少指定 query 或 stateCode;两者均未指定时,返回全部约 470 处 NPS 景点的第一页。 |
| start | integer | 否 | 匹配结果集中的从 0 开始的分页偏移量。与 limit 配合使用以翻页浏览结果。 |
| activity | string | 否 | 筛选提供某项活动的公园,与每个公园的活动列表匹配(例如 "hiking"、"camping"、"stargazing")。不区分大小写的子串匹配,与 query/stateCode 组合,并在应用 start/limit 之前执行,因此 totalCount 统计的是所有匹配公园,而非单页结果。使用 nps_get_park 查看公园的完整活动列表。 |
| stateCode | string | 否 | 两个字母的美国州/领地代码,或以逗号分隔的代码列表(例如 "CA"、"WY,MT,ID")。筛选位于这些州的公园。可与 query 组合以进一步缩小范围。 |
详细介绍
@cyanheads/national-parks-mcp-server
规划美国国家公园管理局行程 — 通过 NPS Data API 查找公园、查看警报和关闭信息、查找露营地、浏览活动和事件。支持 STDIO 或 Streamable HTTP。
概述
规划国家公园管理局行程:查找公园、查看警报和关闭信息,并浏览露营地、活动和事件。涵盖国家公园、纪念地、历史遗址和海岸,不包括州立公园、林务局或土地管理局(BLM)管辖的土地。
工具
| 工具 | 描述 |
|---|---|
nps_find_parks | 根据地点名称、美国州名或自由文本查询查找公园 — 必须首先调用。返回每个公园的 parkCode 和行程规划摘要。 |
nps_get_park | 一次批量调用获取最多十个公园的详细信息:简介、活动、费用与通行证、开放时间、联系方式、路线、天气概况和图片。 |
nps_get_alerts | 获取公园或州的当前警报 — 关闭、危险、注意事项和信息 — 优先显示类别和时效信息。 |
nps_find_campgrounds | 查找公园或州内的露营地:设施、可预订与先到先得营位数量、预订信息、无障碍信息和费用。 |
nps_get_activities | 精选游玩项目和景点:标题、时长、地点、无障碍信息,以及费用/宠物/预订标记。 |
nps_find_events | 查找日期范围内安排的事件:日期/时间、地点、类别、费用和注册链接。 |
能力参考
nps_find_parks 工具
- 自由文本
query、两字母stateCode(或以逗号分隔的列表,例如"WY,MT,ID"),以及可选的activity筛选条件;limit为 1–50(默认 10),并可使用start偏移量 - 每个公园包含其
parkCode,以及指定类别、州、描述、坐标、主要活动、最低门票费和 NPS 页面;完全匹配的parkCode或名称排名靠前,totalCount统计所有匹配项
nps_get_park 工具
- 每次调用最多可查询 10 个
parkCode;可选的fields选择器(activities、topics、fees、hours、contacts、directions、images)可将载荷精简至所需部分 - 始终返回名称、指定类别、州、描述、坐标、天气概况和 NPS 页面;还会返回按类别划分的费用和通行证、按区域和季节划分的开放时间、联系方式,以及最多 5 张图片(若该公园有更多图片,则会显示
imagesTruncated) - 与任何地点都不匹配的代码会列入
missingCodes;只有在没有任何代码匹配时,调用才会失败(no_parks_found)
nps_get_alerts 工具
- 可按
parkCode、stateCode、自由文本query和category(Danger、Caution、Information、Park Closure)筛选;limit为 1–50(默认 20),并可使用start偏移量 - 按最新优先排序;每条警报都包含类别、反映时效性的
lastIndexedDate和详情;categoryBreakdown按严重程度统计返回的警报数量 - 通知会说明该地点一切正常(没有警报),并将其与筛选条件无匹配项以及页码超出范围的情况区分开来
nps_find_campgrounds 工具
- 可按
parkCode、stateCode或自由文本query筛选;limit为 1–50(默认 15),并可使用start偏移量 - 每个营地包含以下设施(饮用水、淋浴、污水倾倒站、厕所、垃圾收集、房车通道),其状态为有、无或未知;还包含可预订、先到先得和营位总数;预订指南和预订 URL;最低费用、无障碍信息、坐标和 NPS 页面
nps_get_activities 工具
- 必须提供单个
parkCode或单个stateCode,并可选择提供query;limit为 1–50(默认 15),并可使用start偏移量 - 每项活动包含标题、简短描述、所需时间、地点、坐标、无障碍信息、季节、是否需要预订和是否允许携带宠物的标记、费用说明及 NPS 页面
nps_find_events 工具
- 在
dateStart/dateEnd日期范围(YYYY-MM-DD)内按parkCode、stateCode或query筛选;使用pageNumber和pageSize(1–50,默认 15)分页,而非使用偏移量 - 每项活动包含标题、日期范围、范围内的
occurrenceDates(isRecurring表示系列活动)、时间段、地点、类别、费用,以及注册和信息 URL - NPS 在结果旁报告的错误会并入通知,而不会导致调用失败
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志记录和可选的 OpenTelemetry 跟踪。
NPS 特有功能:
- 一个服务通过六个行程规划端点封装 NPS Data API(
developer.nps.gov/api/v1,使用X-Api-Key身份验证) - 对 NPS 不一致的负载进行强力规范化——将以字符串形式返回的数值和布尔字段、嵌套值(
campsites.totalSites)、数组类型的设施字段,以及具有不同/events信封和小写字段名的数据,统一转换为清晰的领域类型,再传递给处理程序 nps_get_park可将最多十个公园代码合并到单个上游请求中- 对上游暂时性故障(5xx / 网络)进行轻量重试;缺少或无效的密钥会明确报错,并指出
NPS_API_KEY nps_find_parks/nps_get_park返回的坐标可供天气服务(nws-weather、open-meteo)用于天气预报
便于 Agent 使用的输出:
- 每个响应都包含结果集上下文——
totalCount、截断信息(truncated/shown/cap)、已应用筛选条件的回显,以及无结果提示,并同时呈现在结构化输出和文本输出中 - 许多公园没有露营地、精选活动或事件;无结果时会提示其他查找途径,而不会报错
- 每个工具的描述都采用以
parkCode为先的工作流;nps_get_park会返回missingCodes,帮助自动纠正错误代码 - 保留不确定性,不捏造信息——缺失的坐标、路线、费用和设施值会返回
null,而不是猜测;绝不会为下游天气查询虚构坐标
开始使用
公共托管实例
可使用公共实例:https://national-parks.caseyjhand.com/mcp,无需安装。该实例提供 Streamable HTTP;不同客户端的配置格式各不相同。
对于 Claude Code:
claude mcp add --transport http national-parks-mcp-server https://national-parks.caseyjhand.com/mcp
对于 Cline(cline_mcp_settings.json):
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "streamableHttp",
"url": "https://national-parks.caseyjhand.com/mcp"
}
}
}
对于 Cursor(mcp.json):
{
"mcpServers": {
"national-parks-mcp-server": {
"url": "https://national-parks.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。需要免费的 NPS Data API 密钥——立即注册。
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/national-parks-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NPS_API_KEY": "your-api-key"
}
}
}
}
也可以使用 npx(无需 Bun):
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/national-parks-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NPS_API_KEY": "your-api-key"
}
}
}
}
也可以使用 Docker:
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "NPS_API_KEY=your-api-key",
"ghcr.io/cyanheads/national-parks-mcp-server:latest"
]
}
}
}
对于 Streamable HTTP,设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 NPS_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前置条件
安装
- 克隆代码库:
git clone https://github.com/cyanheads/national-parks-mcp-server.git
- 进入目录:
cd national-parks-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# edit .env and set NPS_API_KEY
配置
所有配置都会在启动时通过 Zod schema 验证。主要环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
NPS_API_KEY | 必需。 NPS Data API 密钥,通过 X-Api-Key 请求头发送。未设置时,服务将无法启动。 | — |
NPS_BASE_URL | NPS Data API 基础 URL 覆盖值(用于测试 / 代理)。 | https://developer.nps.gov/api/v1 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | MCP 服务挂载的路径。 | /mcp |
MCP_SESSION_MODE | 会话处理方式:auto、stateful 或 stateless。schema 默认值 auto 会解析为 stateful;此服务会显式设置为 stateless。无论采用哪种模式,MCP 2026-07-28 均为无会话模式。 | stateless |
MCP_AUTH_MODE | 认证模式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 记录每次失败工具调用的参数和结果,按键名对内容进行脱敏,并将大小限制为 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)。自由格式值中的机密不会被脱敏。 | false |
STORAGE_PROVIDER_TYPE | 存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | 启用 OpenTelemetry instrumentation(跨度、指标、完成日志)。 | false |
完整的可选覆盖项列表请参见 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t national-parks-mcp-server .
docker run --rm -e NPS_API_KEY=your-key -p 3010:3010 national-parks-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/national-parks-mcp-server。默认会安装 OpenTelemetry 对等依赖项;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖项。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点——注册六个工具并初始化 NPS 服务。 |
src/config | 使用 Zod 解析并验证服务专属环境变量。 |
src/mcp-server/tools | 工具定义(*.tool.ts)。 |
src/services/nps | NPS Data API 服务——HTTP 客户端、重试边界、错误封装检测以及所有上游数据规范化处理。 |
tests/ | 与 src/ 结构对应的单元测试和集成测试。 |
开发指南
开发指南和架构规则请参见 AGENTS.md / CLAUDE.md。简要说明:
- 处理器抛出异常,由框架捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log进行请求级日志记录,使用ctx.state进行租户级存储 - 在
createApp()数组中注册新工具 - 封装外部 API:验证原始数据 → 规范化为领域类型 → 返回输出 schema;绝不伪造缺失字段
数据与署名
数据取自美国国家公园管理局运营的 NPS Data API。NPS 员工履行公务时创作的内容属于美国政府作品,处于公有领域(17 U.S.C. §§ 101 and 105)。不对美国政府原创作品主张权利。
API 返回的内容并非全部由政府创作。部分图像和材料受第三方版权或其他限制保护——重复使用前请核查各条目的权利信息。
NPS Arrowhead 标志是受 18 U.S.C. § 701 保护的限制性标志。未经 NPS 局长书面许可,不得复制或重复使用。
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。