mcpField
N
nasa-images

nasa-images

本地服务
github.com/kaitoy搜索与检索132 周前更新

关于 nasa-images

nasa-images 是用于搜索 NASA 图像库并在交互式界面中浏览结果的 MCP 服务,面向需要检索和查看 NASA 图像的 MCP 客户端。它支持 stdio 和 Streamable HTTP 传输,并提供有状态会话。

主要功能

  1. 01按关键词搜索 NASA 图像
  2. 02交互式图像查看器
  3. 03逐张浏览搜索结果
  4. 04stdio 与 Streamable HTTP 传输
  5. 05有状态会话管理

适用场景

  1. 01查找阿波罗任务相关图像
  2. 02浏览火星探测器图像结果
  3. 03在 MCP 客户端中查看 NASA 图像

MCP 相关

该服务向 MCP 客户端提供图像搜索、下一张图像等工具,以及当前图像 URL 和查看器 UI 资源。可通过 stdio 或 Streamable HTTP 连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kaitoy-nasa-images": {
"command": "npx",
"args": [
"-y",
"@kaitoy/nasa-images-mcp-server"
],
"env": {
"NASA_API_KEY": "<NASA_API_KEY>"
}
}
}
}
启动命令npx -y @kaitoy/nasa-images-mcp-server
需要配置的环境变量
NASA_API_KEY密钥Your API key for the NASA Images API

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@kaitoy/nasa-images-mcp-server1.1.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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 免费获取)

安装

  1. 克隆代码库:
cd nasa-images-mcp-server
  1. 安装依赖项:
npm install
  1. 设置环境变量:
cp .env.example .env

编辑 .env 文件以配置 NASA API 密钥:

NASA_API_KEY=your_api_key_here
PORT=3000
  1. 构建:
npm run build

获取 NASA API 密钥

  1. 访问 https://api.nasa.gov/
  2. 在表单中输入姓名和电子邮件地址
  3. API 密钥会立即发送到你的电子邮箱
  4. 将密钥添加到 .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 客户端搭配使用

从自定义客户端连接的步骤:

  1. 初始化请求(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。

  1. 后续请求:
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"
  }'
  1. SSE 流(GET /mcp):
curl -X GET "http://localhost:3000/mcp" \
  -H "mcp-session-id: <your-session-id>" \
  -H "Accept: text/event-stream"

端点

端点方法描述
/GET服务信息和端点列表
/healthGET健康检查(包含活动会话数)
/mcpPOSTJSON-RPC 请求(初始化、工具调用等)
/mcpGETSSE 流(用于服务通知)
/mcpDELETE关闭会话

可用工具

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/json
  • text/event-stream
curl -H "Accept: application/json, text/event-stream" ...
未找到会话

保存初始化请求后返回的 mcp-session-id 标头,并在后续请求中将其作为 mcp-session-id 标头发送。

安全说明

  • 此服务已启用 CORS(用于开发)
  • 在生产环境中,请实施适当的 CORS 设置和速率限制
  • 通过环境变量管理 NASA API 密钥;不要将其硬编码

许可证

MIT

参考资料

贡献

欢迎提交拉取请求!可通过 Issues 提交错误报告和功能请求。

支持

如果遇到问题,请创建 Issue 或参阅 NASA API 支持页面。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。