关于 nasa-images
nasa-images 是用于搜索 NASA 图像库并在交互式界面中浏览结果的 MCP 服务,面向需要检索和查看 NASA 图像的 MCP 客户端。它支持 stdio 和 Streamable HTTP 传输,并提供有状态会话。
主要功能
- 01按关键词搜索 NASA 图像
- 02交互式图像查看器
- 03逐张浏览搜索结果
- 04stdio 与 Streamable HTTP 传输
- 05有状态会话管理
适用场景
- 01查找阿波罗任务相关图像
- 02浏览火星探测器图像结果
- 03在 MCP 客户端中查看 NASA 图像
MCP 相关
该服务向 MCP 客户端提供图像搜索、下一张图像等工具,以及当前图像 URL 和查看器 UI 资源。可通过 stdio 或 Streamable HTTP 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
NASA 图像 MCP 服务
一个使用 MCP 服务搜索 NASA 图像库并在交互式 UI 中展示图像的项目。
🌟 功能:
- 双传输支持:同时支持 stdio 和 Streamable HTTP 传输
- 图像搜索:使用 NASA Images API 按关键词搜索
- 交互式 UI:使用 MCP Apps Pattern 打造精美的图像查看器
- 图像导航:按顺序展示搜索结果
- 会话管理:有状态的会话管理

要求
- Node.js 18 或更高版本
- npm 或 yarn
- NASA API 密钥(可在 nasa.gov/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 --stdio
Claude Desktop 配置
使用 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 通信
- 每个进程仅支持一个会话
- 无需网络配置
Streamable HTTP 传输
最新的 MCP HTTP 传输协议,适用于远程或多客户端场景。
主要功能:
- ✅ 有状态会话:为每个客户端分配唯一的会话 ID
- ✅ SSE 支持:支持服务通过 Server-Sent Events 推送通知
- ✅ 基于 HTTP 的 JSON-RPC:通过标准 HTTP 请求/响应进行通信
- ✅ 会话管理:自动管理会话生命周期
与 MCP 客户端集成
使用 MCP Inspector 连接(HTTP 模式)
你可以使用 MCP Inspector 测试服务:
npx @modelcontextprotocol/inspector http://localhost:3000/mcp
使用 MCP Inspector 连接(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: <your-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: <your-session-id>" \
-H "Accept: text/event-stream"
端点
| 端点 | 方法 | 描述 |
|---|---|---|
/ | GET | 服务信息和端点列表 |
/health | GET | 健康检查(包含活动会话数) |
/mcp | POST | JSON-RPC 请求(初始化、工具调用等) |
/mcp | GET | SSE 流(用于服务通知) |
/mcp | DELETE | 关闭会话 |
可用工具
1. search_nasa_images
搜索 NASA 图像库。
参数:
query(string,必填):搜索词(例如 "apollo 11"、"mars rover")
使用示例(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:Express 服务和传输管理
- 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
“Cannot find module”错误
运行:
npm run build
以编译 TypeScript。
API 速率限制错误
- 如果使用
DEMO_KEY,请从 api.nasa.gov 获取自己的 API 密钥 - 每小时最多 30 次请求
“Not Acceptable”错误
客户端必须同时接受两种 MIME 类型:
application/jsontext/event-stream
curl -H "Accept: application/json, text/event-stream" ...
未找到会话
保存初始化请求后返回的 mcp-session-id 标头,并在后续请求中将其作为 mcp-session-id 标头发送。
安全说明
- 此服务已启用 CORS(用于开发)
- 在生产环境中,请实施适当的 CORS 设置和速率限制
- 通过环境变量管理 NASA API 密钥;不要将其硬编码
许可证
MIT
参考资料
- Model Context Protocol 规范
- MCP TypeScript SDK
- MCP Apps 扩展
- Streamable HTTP 传输
- NASA Images API
- NASA Open APIs
贡献
欢迎提交拉取请求!可通过 Issues 提交错误报告和功能请求。
支持
如果遇到问题,请创建 Issue 或参阅 NASA API 支持页面。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。