使用说明
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 (主要示例)
- Instale o Miniconda(Windows/Linux/macOS): docs.conda.io/en/latest/miniconda.html.
- 创建环境:
conda create -n nasa_mcp python=3.11 conda activate nasa_mcp - 安装依赖关系 :
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)
- 复制
env.example段落.enve配置:NASA_API_KEY=SUA_CHAVE_AQUI NASA_BASE_URL=https://api.nasa.gov NASA_HTTP_TIMEOUT=15 - 在真实环境中,注入
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.shNASA_MCP_ENV_NAME=<nome>切换自动激活的 Conda 环境。如果您不使用 Conda,请在运行脚本前启用 venv/uv。
在客户端注册 MCP
HTTP 传输( 此工程的默认值)
- 执行
python run_mcp_server.py服务器显示streamable-http嗯http://127.0.0.1:8787/(将主机/端口设置为config_mcp.json). - 在支持 HTTP 的 MCP 客户端(例如:VS Code、Cursor)上,请根据客户端文档注册 URL。有些人使用根(
http://127.0.0.1:8787/)其他方式如/mcp查看客户手册。 - 此示例未实现身份验证;在公开曝光之前,请将服务器置于 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
添加新端点
- 咨询
manual_nasa.mdNASA的官方文件。 - 将方法应用到
NasaApiClient封装所选的端点。 - 在创建匹配的工具
MCPNasaTools保持简单的参数。 - 注册一个工具
server.py并列出它在config_mcp.json. - 如果工具相关,请更新 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
