小贴士:按下Ctrl+D 或 ⌘+D,一键收藏本站,方便下次快速访问!
ISC License
17
最近更新:1个月前

NASA API 的模型上下文协议(MCP)服务器,为AI模型与NASA海量数据源的交互提供标准化接口。

NASA MCP 服务器

一个为NASA API实现模型上下文协议(Model Context Protocol, MCP)的服务器,为AI模型提供标准化接口来访问NASA海量数据源。本服务器实现了官方Model Context Protocol规范。

特别感谢MCP社区的支持与指导!

功能特性

  • 通过统一接口访问20+个NASA数据源
  • 专为AI优化的标准化数据格式
  • 自动参数校验与错误处理
  • NASA API密钥的速率限制管理
  • 完备的文档与示例
  • 支持多种NASA图像格式
  • 为LLM优化的数据转换与格式化
  • 跨平台支持(Windows, macOS, Linux)

免责声明

本项目与NASA(美国国家航空航天局)及其附属机构无任何隶属、背书或关联关系。 这是一个独立实现,仅访问NASA公开API。所有使用的NASA数据均为公开数据并遵守NASA数据使用政策。

安装指南

通过npx运行

bash 复制代码
env NASA_API_KEY=您的API密钥 npx -y @programcomputer/nasa-mcp-server@latest

也可通过命令行参数传递API密钥:

bash 复制代码
npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=您的API密钥

使用SuperGateway实现服务器推送事件(SSE)

可使用SuperGateway实现服务器推送事件功能。

NASA-MCP-server开发者不对SuperGateway仓库进行背书。此信息仅供需要自主实现SSE功能的用户参考。

手动安装

bash 复制代码
# 克隆仓库
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# 安装依赖
cd NASA-MCP-server
npm install

# 使用API密钥运行
NASA_API_KEY=您的API密钥 npm start

在Cursor中运行

配置Cursor 🖥️ 注意: 需要Cursor 0.45.6+版本

在Cursor配置目录创建或编辑mcp.json文件:

json 复制代码
{
  "mcpServers": {
    "nasa-mcp": {
      "command": "npx",
      "args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
      "env": {
        "NASA_API_KEY": "您的API密钥"
      }
    }
  }
}

替换your-api-key为从https://api.nasa.gov/获取的NASA API密钥。

配置完成后重启Cursor即可使用新的NASA工具。Composer Agent将在处理太空相关查询时自动调用NASA MCP。

环境变量

可通过以下环境变量配置服务器:

变量名 说明
NASA_API_KEY NASA API密钥(从api.nasa.gov获取)

集成的NASA API

本MCP服务器整合了以下NASA API:

  1. NASA开放API(api.nasa.gov):

    • APOD(每日天文图)
    • EPIC(地球多色成像相机)
    • DONKI(空间天气数据库)
    • Insight(火星气象服务)
    • 火星探测器照片
    • NEO(近地天体服务)
    • EONET(地球观测自然事件追踪器)
    • TLE(两行轨道元素)
    • NASA图像视频库
    • 系外行星档案
    • NASA声音API(测试版)
    • POWER(全球能源资源预测)
  2. JPL太阳系动力学API(ssd-api.jpl.nasa.gov):

    • SBDB(小天体数据库)
    • SBDB近距离接近数据
    • 火流星数据
    • Scout API
  3. 地球数据API:

    • GIBS(全球图像浏览服务)
    • CMR(通用元数据存储库)-增强版搜索功能
    • EPIC(地球多色成像相机)
    • FIRMS(资源管理系统火情信息)

API方法

每个NASA API都通过标准化MCP方法暴露:

APOD(每日天文图)

json 复制代码
{
  "method": "nasa/apod",
  "params": {
    "date": "2023-01-01", // 可选: YYYY-MM-DD格式
    "count": 5, // 可选: 返回指定数量的随机图片
    "thumbs": true // 可选: 返回视频缩略图URL
  }
}

火星探测器照片

json 复制代码
{
  "method": "nasa/mars-rover",
  "params": {
    "rover": "curiosity", // 必填: "curiosity", "opportunity", 或 "spirit"
    "sol": 1000, // 需填写sol或earth_date
    "earth_date": "2023-01-01", // YYYY-MM-DD格式
    "camera": "FHAZ" // 可选: 按相机类型过滤
  }
}

近地天体

json 复制代码
{
  "method": "nasa/neo",
  "params": {
    "start_date": "2023-01-01", // 必填: YYYY-MM-DD格式
    "end_date": "2023-01-07" // 必填: YYYY-MM-DD格式(与开始日期最多间隔7天)
  }
}

GIBS(全球图像浏览服务)

json 复制代码
{
  "method": "nasa/gibs",
  "params": {
    "layer": "MODIS_Terra_CorrectedReflectance_TrueColor", // 必填: 图层ID
    "date": "2023-01-01", // 必填: YYYY-MM-DD格式
    "format": "png" // 可选: "png"或"jpg"
  }
}

POWER(全球能源资源预测)

json 复制代码
{
  "method": "nasa/power",
  "params": {
    "parameters": "T2M,PRECTOTCORR,WS10M", // 必填: 逗号分隔的参数列表
    "community": "re", // 必填: 社区标识符
    "latitude": 40.7128, // 必填: 纬度
    "longitude": -74.0060, // 必填: 经度
    "start": "20220101", // 必填: 开始日期(YYYYMMDD)
    "end": "20220107" // 必填: 结束日期(YYYYMMDD)
  }
}

完整API方法及参数文档请参考/docs目录中的API参考手册。

日志系统

服务器包含全面的日志功能:

  • 操作状态与进度
  • 性能指标
  • 速率限制跟踪
  • 错误情况
  • 请求验证

示例日志消息:

复制代码
[信息] NASA MCP服务器初始化成功
[信息] 正在处理2023-01-01的APOD请求
[信息] 获取Curiosity探测器第1000个火星日的照片数据
[警告] 达到速率限制阈值(80%)
[错误] 无效参数: 'date'必须为YYYY-MM-DD格式

安全考量

本MCP服务器遵循Model Context Protocol规范实施安全最佳实践:

  • 使用Zod模式进行输入验证与清理
  • 不执行任意代码
  • 防止命令注入
  • 适当的错误处理以避免信息泄露
  • API请求的速率限制与超时控制
  • 不存在跨会话可利用的持久状态

开发

bash 复制代码
# 克隆仓库
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# 安装依赖
npm install

# 复制示例环境文件并更新API密钥
cp .env.example .env

# 编译TypeScript代码
npm run build

# 启动开发服务器
npm run dev

# 运行测试
npm test

使用MCP Inspector测试

NASA MCP服务器包含用于通过MCP Inspector测试API的脚本:

bash 复制代码
# 运行提供的测试脚本
./scripts/test-with-inspector.sh

该脚本将:

  1. 构建项目以确保包含最新更改
  2. 启动带NASA MCP服务器的MCP Inspector
  3. 允许交互式测试所有NASA API

示例测试请求

仓库包含每个API的示例测试请求:

bash 复制代码
# 查看示例测试请求
cat docs/inspector-test-examples.md

详细示例请参阅Inspector测试示例文档。

MCP客户端用法

本服务器遵循官方Model Context Protocol。以下是使用MCP SDK的示例:

typescript 复制代码
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { HttpClientTransport } from "@modelcontextprotocol/sdk/client/http.js";

const transport = new HttpClientTransport({
  url: "http://localhost:3000",
});

const client = new Client({
  name: "mcp-client",
  version: "1.0.0",
});

await client.connect(transport);

// 示例: 获取今日天文图
const apodResult = await client.request({
  method: "nasa/apod", 
  params: {}
});

// 示例: 获取火星探测器照片
const marsRoverResult = await client.request({
  method: "nasa/mars-rover",
  params: { rover: "curiosity", sol: 1000 }
});

// 示例: 搜索近地天体
const neoResults = await client.request({
  method: "nasa/neo",
  params: {
    start_date: '2023-01-01',
    end_date: '2023-01-07'
  }
});

// 示例: 从GIBS获取卫星图像
const satelliteImage = await client.request({
  method: "nasa/gibs",
  params: {
    layer: 'MODIS_Terra_CorrectedReflectance_TrueColor',
    date: '2023-01-01'
  }
});

// 示例: 使用POWER API
const powerData = await client.request({
  method: "nasa/power",
  params: {
    parameters: "T2M,PRECTOTCORR,WS10M",
    community: "re",
    latitude: 40.7128,
    longitude: -74.0060,
    start: "20220101",
    end: "20220107"
  }
});

贡献指南

  1. Fork代码仓库
  2. 创建特性分支
  3. 运行测试: npm test
  4. 提交Pull Request

许可证

ISC许可证 - 详见LICENSE文件