NASA MCP 中间件

一个用于在AI代理与NASA公共API之间建立中间层的Python MCP服务器,提供数据转换和简化访问。

  • by jonatasvieiracoutinho
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jonatasvieiracoutinho/nasa_mcp

使用说明

NASA MCP - 教学示例

此工程演示如何创建服务器 模型上下文协议(MCP) 在Python中,它作为AI代理和现有REST API之间的中间层 - 在这种情况下,它的公共API是基于 美国国家航空航天局.

重要通知

  • 这个资源库只是一个教育指南。
  • 在生产过程中,仅通过 超文本传输安全协议通过适当的身份验证和授权,保护代理和服务器之间的流量。
  • 永远不要发布API密钥,也不要将其留在不受保护的文件中:使用 密钥库 (Azure Key Vault、AWS Secrets Manager、Hashicorp Vault 等)通过注入环境变量来存储和旋转秘密。这里我们使用一个 .env 仅用于本地测试目的,在实际应用中不推荐。

我们的目标是证明我们可以在现有API上构建MCP层,而无需修改远程后端:MCP接收代理请求,调用NASA官方终端并返回已经解释的响应。

这个项目是为了谁?

  • 想要在公共 REST API 上运行 MCP 的教学示例的开发人员。
  • 教师需要简单的课堂/演示材料。
  • 谁想要学习如何扩展MCP与新的工具/路径。

架构( 快速查看)

代理(IDE、MCP 客户端或自动流)通过 streamable-http地籍工具发票 NasaApiClient验证呼叫在 https://api.nasa.gov 使用 a NASA_API_KEY 并返回已经结构化的JSON以供代理使用。

  • FastMCP 按照MCP标准展示工具。
  • NasaApi客户端 封装 HTTP 调用、身份验证和错误处理。
  • MCPNasaTools 提供具有简单代理类型的高级方法。
  • manual_nasa.md 包含使用的主要端点的注释和示例。

环境Python(conda、venv或uv)

您可以使用您喜欢的虚拟环境。在下面的例子中,我们采用 迷你康达 简单的演示,但 venv e uv 同样运作良好。

Miniconda (主要示例)

  1. Instale o Miniconda(Windows/Linux/macOS): docs.conda.io/en/latest/miniconda.html.
  2. 创建环境:
    conda create -n nasa_mcp python=3.11
    conda activate nasa_mcp
    
  3. 安装依赖关系 :
    pip install -r requirements.txt
    

venv (Python 原生选项)

python -m venv .venv
.\.venv\Scripts\activate      # Windows
source .venv/bin/activate     # Linux/macOS
pip install -r requirements.txt

UV(喜欢UV)

uv venv .venv
.\.venv\Scripts\activate      # Windows
source .venv/bin/activate     # Linux/macOS
uv pip install -r requirements.txt

在任何选项中,以下步骤(配置 .env 服务器是相同的。

快速配置 (.env)

  1. 复制 env.example 段落 .env e配置:
    NASA_API_KEY=SUA_CHAVE_AQUI
    NASA_BASE_URL=https://api.nasa.gov
    NASA_HTTP_TIMEOUT=15
    
  2. 在真实环境中,注入 NASA_API_KEY 通过密钥库/秘密管理器e 没有 保持 .env 版本。

运行 MCP 服务器

python run_mcp_server.py

默认设置( D)nasa_mcp/config_mcp.json):

  • 主机: 127.0.0.1
  • porta: 8787

脚本prontos

  • 窗户: 执行 start_mcp_server.bat它激活Conda环境 nasa_mcp 然后启动服务器。如有必要,通过编辑文件来调整环境名称。
  • Linux/macOS: 请允许并骑 start_mcp_server.sh:
    chmod +x start_mcp_server.sh
    ./start_mcp_server.sh
    
    定义 NASA_MCP_ENV_NAME=<nome> 切换自动激活的 Conda 环境。如果您不使用 Conda,请在运行脚本前启用 venv/uv。

在客户端注册 MCP

HTTP 传输( 此工程的默认值)

  1. 执行 python run_mcp_server.py服务器显示 streamable-http 嗯 http://127.0.0.1:8787/ (将主机/端口设置为 config_mcp.json).
  2. 在支持 HTTP 的 MCP 客户端(例如:VS Code、Cursor)上,请根据客户端文档注册 URL。有些人使用根(http://127.0.0.1:8787/)其他方式如 /mcp 查看客户手册。
  3. 此示例未实现身份验证;在公开曝光之前,请将服务器置于 HTTPS/Proxy 身后进行身份验证。

光标配置示例 :

"nasa-mcp": {
  "url": "http://localhost:8787/mcp",
  "description": "Um servidor de MCP usado para consultar a api da nasa.",
  "transport": "streamable-http"
}

在生产过程中,MCP 托管在 HTTPS、身份验证以及(如果可能)集中式速率限制/日志机制之后。这个项目不考虑这些层。

STDIO传输(可选)

要使用 stdio,请更改 nasa_mcp/server.py 对位:

server.run()

然后注册命令 python run_mcp_server.py 使用 stdio 的客户端。一次只使用一次运输。

暴露的工具

定义为 nasa_mcp/config_mcp.json.

工具 描述
apod_info 当日天文图片(APOD)详情:标题,日期,描述和网址。
mars_rover_photos 带太阳/日期/相机滤镜的漫游车照片(Curiosity、Opportunity、Spirit、Perseverance)。
epic_images 图像EPIC(地球多色成像摄像机)与直接链接下载。
neo_feed_summary 在长达7天内整合NeoWs饲料中的小行星,包括平均直径和接近数据。
donki_geomagnetic_storms查看 DONKI/GST 地磁风暴与 Kp 指数及相关事件。
insight_weather_summary InSight探测器在火星上观测到的最近太阳的天气(温度,压力,风)摘要。

提示示例

  • “2024-01-01的天文照片是什么?”
  • “列出好奇号车的最新照片,并详细说明所使用的相机。
  • “本周寻找Kp >= 6的地磁风暴。

项目结构

├── env.example
├── manual_nasa.md
├── run_mcp_server.py
├── requirements.txt
├── start_mcp_server.bat
├── mcp.json
└── nasa_mcp/
    ├── config.py
    ├── config_mcp.json
    ├── nasa_client.py
    ├── server.py
    └── tools.py

添加新端点

  1. 咨询 manual_nasa.md NASA的官方文件。
  2. 将方法应用到 NasaApiClient 封装所选的端点。
  3. 在创建匹配的工具 MCPNasaTools保持简单的参数。
  4. 注册一个工具 server.py 并列出它在 config_mcp.json.
  5. 如果工具相关,请更新 README 并提供说明和示例。

通过遵循这一流程,我们展示了 MCP 如何在不改变原始后端的情况下在现有 REST 代理和 API 之间充当集成层。

补充文档

  • docs/arquitetura_mcp.md架构视图和模块之间的关系。
  • docs/fluxo_de_requisicao.md例如:工具调用的端到端。
  • docs/tools_mcp.md工具目录,包含参数和返回。
  • manual_nasa.md:这里使用的NASA终端的详细信息。
  • docs/guia_rapido_mcp.md一步一步地运行和测试。
  • docs/extendendo_o_projeto.md如何创建新的工具/端点
  • docs/operacao_e_monitoracao.md操作提示和读取日志。
  • docs/contribuindo.md:DocStrings风格、编码和文档清单。

作者: 乔纳塔斯·维埃拉·库蒂尼奥jonatasvieiracoutinho@gmail.com