NASA图像MCP服务器
使用MCP服务器搜索NASA图像库并在交互式UI中显示图像的项目。
🌟 特征:
- 双重运输支持:支持stdio和流式HTTP传输
- 图像搜索:使用NASA的Images API按关键字搜索
- 交互式用户界面:使用MCP应用程序模式的美丽图像查看器
- 图像导航:按顺序显示搜索结果
- 会话管理:状态会话管理
需求
- Node.js 18或更高版本
- npm或纱线
- NASA API密钥(免费获取 Nasebov/api)
安装
- 克隆存储库:
cd nasa-images-mcp-server- 安装依赖项:
npm install- 设置环境变量:
cp .env.example .env编辑 .env 文件以配置您的NASA API密钥:
NASA_API_KEY=your_api_key_here
PORT=3000- 构建:
npm run build获取NASA API密钥
- 访问 https://api.nasa.gov/
- 在表格中输入您的姓名和电子邮件地址
- API密钥将立即发送到您的电子邮件
- 将其添加到您的
.env文件
费率限制:
- DEMO_KEY:30个请求/小时,50个请求/天
- 注册密钥:1000个请求/小时
用法
stdio模式(建议用于Claude Desktop等MCP客户端)
在stdio模式下,服务器通过stdin/stdout进行通信——没有启动HTTP服务器。日志被写入stderr。
使用npx运行(无需安装)
npx @kaitoy/nasa-images-mcp-server --stdio从本地构建运行
通过 --stdio 使用stdio传输的标志:
node build/index.js --stdioClaude桌面配置
使用npx (推荐):
{
"mcpServers": {
"nasa-images": {
"command": "npx",
"args": ["-y", "@kaitoy/nasa-images-mcp-server", "--stdio"],
"env": {
"NASA_API_KEY": "your_api_key_here"
}
}
}
}使用本地构建:
{
"mcpServers": {
"nasa-images": {
"command": "node",
"args": ["/path/to/nasa-images-mcp-server/build/index.js", "--stdio"],
"env": {
"NASA_API_KEY": "your_api_key_here"
}
}
}
}HTTP服务器模式
npm start服务器将在以下时间启动 http://localhost:3000.
从其他端口开始
PORT=3001 npm start关于交通
stdio运输
适用于作为子进程启动服务器的本地MCP客户端(例如Claude Desktop)。
- 通过stdin/stdout进行通信
- 每个进程一个会话
- 无需网络配置
可流式HTTP传输
最新的MCP HTTP传输协议,适用于远程或多客户端场景。
主要特点:
- ✅ 有意义的会议:为每个客户端颁发唯一的会话ID
- ✅ SSE支持:支持通过服务器发送事件从服务器推送通知
- ✅ 基于HTTP的JSON-RPC:通过标准HTTP请求/响应进行通信
- ✅ 会话管理:自动会话生命周期管理
与MCP客户端集成
与MCP检查器连接(HTTP模式)
您可以使用以下命令测试服务器 MCP检查员:
npx @modelcontextprotocol/inspector http://localhost:3000/mcp与MCP检查器连接(stdio模式)
npx @modelcontextprotocol/inspector node /path/to/nasa-images-mcp-server/build/index.js --stdio与自定义MCP客户端一起使用
从自定义客户端连接的步骤:
- 初始化请求 (POST/mcp):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
}
}
}'响应标头将包括 mcp-session-id.
- 后续请求:
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: " \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'- SSE流 (GET/mcp):
curl -X GET "http://localhost:3000/mcp" \
-H "mcp-session-id: " \
-H "Accept: text/event-stream"端点
| 端点 | 方法 | 描述 |
|---|---|---|
/ | GET | 服务器信息和端点列表 |
/health | GET | 健康检查(包括活动会话计数) |
/mcp | POST | JSON-RPC请求(初始化、工具调用等) |
/mcp | GET | SSE流(用于服务器通知) |
/mcp | DELETE | 关闭会话 |
可用工具
1. search_nasa_images
搜索美国国家航空航天局的图像库。
参数:
query(字符串,必填):搜索查询(例如,“阿波罗11号”、“火星漫游者”)
使用示例(JSON-RPC):
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_nasa_images",
"arguments": {
"query": "apollo 11 moon landing"
}
}
}2. get_next_image
显示当前搜索结果中的下一个图像。
参数: 无
使用示例(JSON-RPC):
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "get_next_image",
"arguments": {}
}
}可用资源
nasa-image://current
获取当前显示图像的URL。
MIME类型: text/uri-list
ui://nasa-images/viewer
图像查看器的HTML UI资源。
MIME类型: text/html;profile=mcp-app
建筑
stdio模式
┌─────────────────────────────────────────────┐
│ MCP Client (Claude Desktop, etc.) │
│ ↕ stdin/stdout │
└───────────────────┼─────────────────────────┘
│
┌───────────────────┼─────────────────────────┐
│ NASA Images MCP Server │
│ ┌────────────────┴──────────────────────┐ │
│ │ StdioServerTransport │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ McpServer (MCP Apps Pattern) │ │
│ │ - registerAppTool(search_nasa...) │ │
│ │ - registerAppTool(get_next_image) │ │
│ │ - registerAppResource(viewer UI) │ │
│ │ - registerResource(image URL) │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ Session Manager │ │
│ │ - Manage search state per user │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ NASA API Client │ │
│ │ - Image search │ │
│ │ - Image URL retrieval │ │
│ └───────────────────────────────────────┘ │
└───────────────────┼─────────────────────────┘
│ HTTPS
┌───────────────────┼─────────────────────────┐
│ NASA Images API │
│ https://images-api.nasa.gov/search │
└─────────────────────────────────────────────┘HTTP模式
┌─────────────────────────────────────────────┐
│ MCP Client (Inspector, Custom App) │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ HTTP Client │ │
│ │ - POST /mcp (JSON-RPC requests) │ │
│ │ - GET /mcp (SSE stream) │ │
│ └────────────────────────────────────────┘ │
│ ↕ │
└───────────────────┼─────────────────────────┘
│ HTTP/SSE
┌───────────────────┼─────────────────────────┐
│ NASA Images MCP Server (Express) │
│ ┌────────────────┴──────────────────────┐ │
│ │ StreamableHTTPServerTransport │ │
│ │ - Session management │ │
│ │ - JSON-RPC over HTTP │ │
│ │ - SSE for notifications │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ McpServer (MCP Apps Pattern) │ │
│ │ - registerAppTool(search_nasa...) │ │
│ │ - registerAppTool(get_next_image) │ │
│ │ - registerAppResource(viewer UI) │ │
│ │ - registerResource(image URL) │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ Session Manager │ │
│ │ - Manage search state per user │ │
│ └───────────────────────────────────────┘ │
│ ┌───────────────────────────────────────┐ │
│ │ NASA API Client │ │
│ │ - Image search │ │
│ │ - Image URL retrieval │ │
│ └───────────────────────────────────────┘ │
└───────────────────┼─────────────────────────┘
│ HTTPS
┌───────────────────┼─────────────────────────┐
│ NASA Images API │
│ https://images-api.nasa.gov/search │
└─────────────────────────────────────────────┘主要组件
- src/index.ts:快递服务器和运输管理
- src/mcp-server.ts:MCP服务器逻辑(工具和资源注册)
- src/session-manager.ts:会话管理(搜索状态持久化)
- src/nasa-api.ts:NASA API客户
- src/types.ts:TypeScript类型定义
发展
观看模式
npm run watch文件更改时自动重建。
开发模式
npm run dev构建并立即启动服务器。
故障排除
端口已在使用中
Error: listen EADDRINUSE: address already in use解决方案:指定其他端口:
PORT=3001 npm start“找不到模块”错误
运行:
npm run build编译TypeScript。
API速率限制错误
- 如果使用
DEMO_KEY,从获取您自己的API密钥 api.nasa.gov - 每小时仅限30个请求
“不可接受”错误
客户端必须接受以下两种MIME类型:
application/jsontext/event-stream
curl -H "Accept: application/json, text/event-stream" ...未找到会话
保存 mcp-session-id 初始化请求后返回的标头,并将其作为 mcp-session-id 后续请求中的标头。
安全须知
- 此服务器已启用CORS(用于开发)
- 在生产中,实施适当的CORS设置和速率限制
- 通过环境变量管理NASA API密钥;不要硬编码它们
许可证
麻省理工学院
参考文献
贡献
欢迎拉取请求!通过Issues接受错误报告和功能请求。
支持
如果遇到问题,请创建问题或参阅NASA API支持页面。
