关于 NASA MCP Server
NASA MCP Server 是面向 NASA 公开 API 的 MCP 服务,为 AI 模型提供统一、标准化的数据访问接口。适合希望通过 AI 助手查询天文、空间天气、近地天体和地球观测数据的用户。项目为独立实现,与 NASA 无关联。
主要功能
- 01统一接口访问 20 余个 NASA 数据源
- 02输出格式面向 LLM 处理优化
- 03自动参数校验与错误处理
- 04管理 NASA API 密钥的速率限制
- 05支持 stdio 与 Streamable HTTP 两种传输方式
适用场景
- 01查询每日天文图片(APOD)并生成解读
- 02追踪近地小行星与太阳风暴等空间事件
- 03检索 NASA 卫星影像、地球观测与气象数据
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 NASA APOD、NEO、GIBS、POWER、CMR、JPL 小天体数据等多种工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
32收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| date | string | 否 | 图片日期(YYYY-MM-DD,1995-06-16 或之后)。默认为最新发布的图片。不能与 start_date/end_date 同时使用。 |
| start_date | string | 否 | 日期范围的开始日期(YYYY-MM-DD)。 |
| end_date | string | 否 | 日期范围的结束日期(YYYY-MM-DD);需要提供 start_date。提供 start_date 时,默认为今天(UTC)。 |
| max_images | integer | 否 | 作为图片内容嵌入的图片数量(0-5)。其余条目将以 URL 列出。 |
详细介绍
NASA MCP 服务
一个用于 NASA API 的模型上下文协议(MCP)服务,为 AI 模型提供标准化接口,以便与 NASA 丰富的数据源进行交互。此服务实现了官方的模型上下文协议规范。
特别感谢 MCP 社区的支持与指导!
功能
- 通过单一、一致的接口访问 20 多个 NASA 数据源
- 针对 AI 使用优化的标准化数据格式
- 自动参数验证和错误处理
- 管理 NASA API 密钥的速率限制
- 全面的文档和示例
- 支持各种 NASA 影像格式
- 转换并格式化数据,以兼容大模型
- 支持跨平台(Windows、macOS、Linux)
示例提示词
可以向你的 MCP 客户端提出类似的问题:
- “展示今天的每日天文图片,并解释图片内容。”
- “2026 年 9 月有没有太阳风暴:强耀斑、朝向地球的日冕物质抛射或地磁暴?”
- “今天有哪些小行星飞掠地球?哪颗距离最近?”
- “未来 90 天内,有小行星会从比月球更近的地方飞过地球吗?”
- “根据 JPL Sentry,贝努撞击地球的概率有多大?”
- “查找 1969 年拍摄的 NASA 阿波罗 11 号登月舱照片。”
- “目前有哪些热带风暴和飓风正在活动?”
- “展示 2025-07-15 尼罗河三角洲和西奈半岛的详细卫星视图。”
- “查找 NASA Earthdata 中托管于云端的海冰浓度数据集。”
- “2025 年 7 月第一周,丹佛每天的最高温、最低温和太阳能量是多少?”
- “列出 2020 年以来发现的、大小大致与地球相当且温度适宜的最近系外行星。”
- “2026-09-29 的 00:00 至 00:10 UTC 期间,国际空间站位于地球上空的什么位置?”
- “获取国际空间站最新的两行轨道根数。”
- “展示 Olympus Mons 的 Mars Trek 地图图块。”
- “NASA 的 InSight 着陆器在火星上最后一次报告的一周内,天气如何?”
- “哪些近地小行星在 2030 年发射任务所需的 delta-v 最低?”
- “NASA 哪些技术项目曾研究过太阳帆?”
- “查找可供企业许可的 NASA 太阳能电池板专利。”
- “哪些 TESS 扇区观测过 Pi Mensae?我可以在哪里下载它的 2 分钟光变曲线?”
- “JWST 观测过 TRAPPIST-1 吗?使用了哪些仪器?”
免责声明
本项目与 NASA(美国国家航空航天局)及其任何子公司或关联机构均无关联、未获其认可,也不存在其他关系。 本项目是一个独立实现,通过 NASA 公开提供的 API 获取数据。所用的所有 NASA 数据均为公开数据,并受 NASA 数据使用政策约束。
安装
你无需自行启动 MCP 服务。你的 AI 应用(Claude、Cursor、VS Code、Codex 等)会在后台启动它,因此安装就是将一项配置添加到该应用的 MCP 配置中。唯一的前置条件是安装 Node.js 22 或更高版本;应用首次启动服务时,npx 会下载该服务。
大多数工具不需要 API 密钥。NASA_API_KEY(可在 https://api.nasa.gov/ 免费获取;轻度使用时可用 DEMO_KEY)仅供 nasa_neo、nasa_insight_weather 和 nasa_mars_rover 使用,FIRMS_MAP_KEY 则仅供 nasa_firms 使用。如果不需要这些密钥,可以省略 env 区块。
正在使用 AI 编码 Agent(Claude Code、Codex、Cursor、VS Code Agent 模式)? 将以下内容粘贴进去:
Install the NASA MCP server from https://github.com/ProgramComputer/NASA-MCP-server
for the app you're running in. Follow that app's section under Installation in the
README, add it for all projects, and don't add an API key. Tell me exactly what you
changed and whether I need to restart.
标准配置
大多数客户端使用以下 JSON 格式:
{
"mcpServers": {
"nasa": {
"command": "npx",
"args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
"env": {
"NASA_API_KEY": "YOUR_API_KEY"
}
}
}
}
如果文件中已有 mcpServers 对象,请将 "nasa" 条目添加到其中,而不是再粘贴一个 mcpServers。
Claude Desktop
打开 设置 → 开发者 → 编辑配置。这会打开 claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
粘贴标准配置并保存,然后完全退出并重新打开 Claude Desktop。
Claude Code
claude mcp add --env NASA_API_KEY=YOUR_API_KEY --scope user nasa -- npx -y @programcomputer/nasa-mcp-server@latest
--scope user 会让服务器在每个项目中都可用;省略此参数则只会将其添加到当前项目。在原生 Windows 上,将 npx 替换为 cmd /c npx。
VS Code(GitHub Copilot)
这些按钮会安装服务器,且无需 API 密钥。VS Code 使用顶层 servers 键,而不是 mcpServers。若要手动安装,请将以下内容添加到工作区中的 .vscode/mcp.json;或者,对于所有工作区,请从命令面板运行 MCP: 打开用户配置。服务器首次启动时,VS Code 会提示输入密钥并安全存储;留空即可跳过。
{
"inputs": [
{
"type": "promptString",
"id": "nasa-api-key",
"description": "NASA API key (optional)",
"password": true
}
],
"servers": {
"nasa": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
"env": {
"NASA_API_KEY": "${input:nasa-api-key}"
}
}
}
}
Codex
codex mcp add nasa --env NASA_API_KEY=YOUR_API_KEY -- npx -y @programcomputer/nasa-mcp-server@latest
此操作会将以下内容写入 ~/.codex/config.toml,Codex CLI、IDE 扩展和桌面应用共用此文件。你也可以手动添加:
[mcp_servers.nasa]
command = "npx"
args = ["-y", "@programcomputer/nasa-mcp-server@latest"]
[mcp_servers.nasa.env]
NASA_API_KEY = "YOUR_API_KEY"
Gemini CLI
将标准配置粘贴到 ~/.gemini/settings.json(所有项目)或 .gemini/settings.json(单个项目)。
其他客户端
大多数其他 MCP 客户端都接受标准配置。如果客户端要求分别填写命令和参数,命令为 npx,参数为 -y @programcomputer/nasa-mcp-server@latest。
若要运行本地克隆版本而非 npm 包(请参阅手动安装),请使用 "command": "node" 和 "args": ["/absolute/path/to/NASA-MCP-server/dist/index.js"]。
重启或重新加载客户端,并检查其 MCP 或工具列表中是否出现名为 nasa 的服务。然后询问类似“今天的天文每日一图是什么?”
如果服务没有出现:
- 运行
node --version,并确保输出 v22 或更高版本。 - 检查配置文件是否有 JSON 错误,例如末尾多余的逗号或第二个
mcpServers对象。 - 在终端中运行服务(见下文),查看是否有错误。如果它没有输出任何内容并一直等待,说明运行正常;按 Ctrl+C 停止它。
- 在 Windows 上,如果客户端提示找不到
npx,请使用"command": "cmd"和"args": ["/c", "npx", "-y", "@programcomputer/nasa-mcp-server@latest"]。
从终端运行
仅在测试时需要这样做;MCP 客户端会为你启动服务。
env NASA_API_KEY=YOUR_API_KEY npx -y @programcomputer/nasa-mcp-server@latest
你也可以将 API 密钥作为命令行参数传入:
npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=YOUR_API_KEY
手动安装
# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git
# Install dependencies
cd NASA-MCP-server
npm install
# Build
npm run build
# Run with your API key
NASA_API_KEY=YOUR_API_KEY npm start
将 YOUR_API_KEY 替换为你从 https://api.nasa.gov/ 获取的 NASA API 密钥。需要 Node.js 22 或更高版本。
环境变量
可通过以下环境变量配置服务:
| Variable | Description |
|---|---|
NASA_API_KEY | 你的 NASA API 密钥(从 api.nasa.gov 获取);用于 NEO 和 InSight 天气 |
FIRMS_MAP_KEY | 用于火灾数据的 FIRMS MAP_KEY(从 firms.modaps.eosdis.nasa.gov/api/map_key 获取);与 NASA_API_KEY 相互独立 |
NASA_MCP_CMR_URL | 可选的 CMR 搜索 URL(默认值:https://cmr.earthdata.nasa.gov/search) |
MCP_TRANSPORT | 传输模式:stdio(默认)或用于 Streamable HTTP 的 http |
MCP_HTTP_HOST | Streamable HTTP 模式的主机(默认值:127.0.0.1) |
MCP_HTTP_PORT | Streamable HTTP 模式的端口(默认值:3000) |
MCP_HTTP_PATH | Streamable HTTP 模式的 MCP 端点路径(默认值:/mcp) |
传输模式
默认情况下,服务通过 stdio 运行,供 Cursor 等本地 MCP 客户端使用。
要运行可选的 Streamable HTTP 传输:
MCP_TRANSPORT=http MCP_HTTP_PORT=3000 NASA_API_KEY=YOUR_API_KEY npm start
Streamable HTTP 端点将在以下地址提供:
http://127.0.0.1:3000/mcp
集成的 NASA API
此 MCP 服务集成了以下 NASA API:
-
NASA Open API(api.nasa.gov,需要
NASA_API_KEY):- NEO(近地天体 Web 服务)
- InSight 火星天气服务(历史数据:信息流于 2020 年 10 月停止更新)
-
其他 NASA API(无需密钥):
- APOD(天文每日一图),来自 NASA Science APOD API(science.nasa.gov)
- DONKI(空间天气通知、知识与信息数据库),来自 NASA CCMC(ccmc.gsfc.nasa.gov)
- EONET(地球观测自然事件追踪器)
- TLE(通过 tle.ivanstanojevic.me 获取的 CelesTrak 双行轨道根数)
- 卫星态势中心(航天器位置)
- TechPort(NASA 技术项目)
- 技术转让(专利、软件和衍生公司)
- Mars、Moon 和 Vesta Trek(WMTS 地图图层和切片)
- NASA 图像与视频资料库
- 系外行星档案
- MAST(Mikulski 太空望远镜档案):TESS、Hubble、JWST、Kepler/K2 和其他观测数据及其数据产品,以及 TESS 全帧图像裁剪(TESSCut)。工具返回 FITS 文件的下载链接,而非文件本身,因此客户端可以查找数据,但无法分析这些数据。
- 开放科学数据资料库(OSDR)文件
- POWER(全球能源资源预测)
-
JPL 太阳系动力学 API(ssd-api.jpl.nasa.gov):
- SBDB(小天体数据库)
- SBDB 近距离接近数据
- 火流星数据
- Sentry(撞击风险)
- Scout(NEO 确认页面轨道)
- NHATS(人类可抵达的 NEO)
- 小天体任务设计
- Horizons 星历
- 周期轨道
- 儒略日转换器
-
地球数据 API:
- GIBS(全球影像浏览服务)
- CMR(通用元数据资料库)- 增强了高级搜索功能
- EPIC(地球多色成像相机)
- FIRMS(火灾信息资源管理系统)
API 方法
每个 NASA API 都通过标准化的 MCP 方法提供:
APOD(每日天文图片)
{
"method": "nasa/apod",
"params": {
"date": "2023-01-01", // Optional: YYYY-MM-DD (1995-06-16 or later); defaults to the latest picture
"max_images": 1 // Optional: how many pictures to embed (0-5)
}
}
如需查询日期范围,请发送 start_date 和 end_date(最多 100 天),而不是 date。APOD 现在使用 NASA Science APOD API,无需密钥,也不提供随机 count 或 thumbs 选项。
近地天体
{
"method": "nasa/neo",
"params": {
"start_date": "2023-01-01", // Required: YYYY-MM-DD format
"end_date": "2023-01-07" // Required: YYYY-MM-DD format (max 7 days from start)
}
}
GIBS(全球影像浏览服务)
{
"method": "nasa/gibs",
"params": {
"layer": "MODIS_Terra_CorrectedReflectance_TrueColor", // Required: Layer ID
"date": "2023-01-01", // Required: YYYY-MM-DD format
"format": "png" // Optional: "png" or "jpg"
}
}
POWER(全球能源资源预测)
{
"method": "nasa/power",
"params": {
"parameters": "T2M,PRECTOTCORR,WS10M", // Required: Comma-separated list
"community": "re", // Required: Community identifier
"latitude": 40.7128, // Required: Latitude
"longitude": -74.0060, // Required: Longitude
"start": "20220101", // Required: Start date (YYYYMMDD)
"end": "20220107" // Required: End date (YYYYMMDD)
}
}
CMR(通用元数据存储库)
{
"method": "nasa/cmr",
"params": {
"keyword": "sea surface temperature", // Optional: Collections only
"search_type": "collections", // Optional: "collections" (default) or "granules"
"bounding_box": "-100,10,-60,40", // Optional: west,south,east,north ("bbox" also works)
"temporal": "2024-06-01T00:00:00Z,2024-09-30T23:59:59Z", // Optional: start,end
"limit": 5 // Optional: 1-100, default 10
}
}
默认情况下,结果以精简格式返回("response_mode": "raw" 会返回 CMR 自身的元数据,fields 用于选择要返回的字段)。如需获取下一页,只需在请求中传回响应中的 next_cursor:
{
"method": "nasa/cmr",
"params": {
"cursor": "cmr1..." // Required: next_cursor from the previous response
}
}
FIRMS(资源管理系统火灾信息)
{
"method": "nasa/firms",
"params": {
"bbox": "-125,32,-114,42", // Required: west,south,east,north (or latitude, longitude and radius_km)
"days": 1, // Optional: 1-5
"source": "VIIRS_SNPP_NRT" // Optional: FIRMS data source
}
}
如需查看所有可用方法和参数的完整文档,请参阅 /docs 目录中的 API 参考。
日志系统
该服务包含全面的日志记录:
- 操作状态和进度
- 性能指标
- 速率限制跟踪
- 错误情况
- 请求验证
日志消息示例:
[INFO] NASA MCP Server initialized successfully
[INFO] Processing APOD request for date: 2023-01-01
[WARNING] Rate limit threshold reached (80%)
[ERROR] Invalid parameter: 'date' must be in YYYY-MM-DD format
安全注意事项
此 MCP 服务遵循模型上下文协议规范中的安全最佳实践:
- 使用 Zod 架构验证和清理输入
- 不执行任意代码
- 防范命令注入
- 妥善处理错误,防止信息泄露
- 对 API 请求进行速率限制和超时控制
- 不保留可能在会话间遭到利用的持久状态
开发
# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git
# Install dependencies
npm install
# Copy the example environment file and update with your API keys
cp .env.example .env
# Build the TypeScript code
npm run build
# Start the server
npm start
# Run tests
npm test
使用 MCP Inspector 测试
如需交互式测试工具,请先构建项目,然后启动官方的 MCP Inspector,并连接此服务:
npm run build
npx @modelcontextprotocol/inspector node dist/index.js
该服务会从工作目录中的 .env 文件读取 NASA_API_KEY 和 FIRMS_MAP_KEY(见上文“开发”)。Inspector 会显示一个本地 URL;打开该 URL 即可列出并调用工具。
测试请求示例
仓库为每个 API 都提供了示例测试请求,你可以将其复制并粘贴到 MCP Inspector 中:
# View the example test requests
cat docs/inspector-test-examples.md
详细示例请参阅 Inspector 测试示例文档。
MCP 客户端用法
此服务遵循官方模型上下文协议。对于本地客户端,请使用安装中的 stdio 配置。对于 Streamable HTTP 模式,请使用 MCP_TRANSPORT=http 启动服务,然后通过 MCP SDK 连接:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js";
const transport = new StreamableHTTPClientTransport(
new URL("http://127.0.0.1:3000/mcp")
);
const client = new Client({
name: "mcp-client",
version: "1.0.0",
});
await client.connect(transport);
// Example: Get today's Astronomy Picture of the Day
const apodResult = await client.request({
method: "tools/call",
params: {
name: "nasa/apod",
arguments: {}
}
}, CallToolResultSchema);
// Example: Search for Near Earth Objects
const neoResults = await client.request({
method: "tools/call",
params: {
name: "nasa/neo",
arguments: {
start_date: "2023-01-01",
end_date: "2023-01-07"
}
}
}, CallToolResultSchema);
// Example: Get satellite imagery from GIBS
const satelliteImage = await client.request({
method: "tools/call",
params: {
name: "nasa/gibs",
arguments: {
layer: "MODIS_Terra_CorrectedReflectance_TrueColor",
date: "2023-01-01"
}
}
}, CallToolResultSchema);
// Example: Use the new POWER API
const powerData = await client.request({
method: "tools/call",
params: {
name: "nasa/power",
arguments: {
parameters: "T2M,PRECTOTCORR,WS10M",
community: "re",
latitude: 40.7128,
longitude: -74.0060,
start: "20220101",
end: "20220107"
}
}
}, CallToolResultSchema);
贡献
- Fork 此仓库
- 创建功能分支
- 运行测试:
npm test - 提交拉取请求
许可证
ISC 许可证 — 详情请参阅 LICENSE 文件
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。