太阳系MCP服务器
通过MCP服务器探索太阳系数据 API太阳能系统.查询天体,计算天空位置,检索天文数据。
实时服务器: https://giant-plum-rabbit.fastmcp.app/mcp (需要Okta身份验证)
快速开始
添加到您的Claude桌面配置(~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"solar-system": {
"url": "https://giant-plum-rabbit.fastmcp.app/mcp"
}
}
}在第一次连接时,您将被重定向到Okta进行身份验证。
工具
浏览正文
| 工具 | 说明 |
|---|---|
solar_list_bodies | 通过过滤和分页列出天体 |
solar_get_body | 通过ID获取特定身体的详细信息 |
solar_search_bodies | 按名称搜索尸体 |
solar_filter_bodies | 按物理特性(半径、重力、密度)过滤 |
具体查询
| 工具 | 说明 |
|---|---|
solar_get_planets | 按距离太阳的距离排列所有8颗行星 |
solar_get_dwarf_planets | 获取矮行星(冥王星、谷神星、厄里斯等) |
solar_get_moons | 让所有的卫星围绕一颗特定的行星运行 |
统计与计数
| 工具 | 说明 |
|---|---|
solar_list_known_counts | 按类别获取已知对象的计数 |
solar_get_known_count | 获取特定类别的计数 |
位置计算
| 工具 | 说明 |
|---|---|
solar_calculate_positions | 根据观察者位置计算实时天空位置 |
示例
获取所有行星:
solar_get_planets(response_format="markdown")搜索尸体:
solar_search_bodies(query="Europa")获取木星的卫星:
solar_get_moons(planet_id="jupiter", response_format="markdown")寻找有卫星的大型天体:
solar_filter_bodies(min_radius=1000, has_moons=True)从纽约计算今晚的天空位置:
solar_calculate_positions(
latitude=40.7128,
longitude=-74.0060,
elevation=10,
datetime_utc="2025-01-17T22:00:00"
)列出小行星:
solar_list_bodies(body_type="Asteroid", limit=50)主体ID
通用主体ID solar_get_body:
| 正文 | ID |
|---|---|
星期日 soleil | |
水星 mercure | |
| 金星 | venus |
| 地球 | terre |
| 月亮 | lune |
| 火星 | mars |
木星 jupiter | |
| 土星 | saturne |
| 天王星 | uranus |
| 海王星 | neptune |
| 冥王星 | pluton |
响应格式
所有工具都支持两种响应格式:
json(默认)-用于编程的结构化数据markdown-人类可读的格式化输出
自我寄宿
本地开发
git clone https://github.com/yourusername/solar-mcp-server
cd solar-mcp-server
# Create virtual environment
uv venv
source .venv/bin/activate
# Install dependencies
uv pip install -e .
# Optional: Set API token
export SOLAR_API_TOKEN=your-bearer-token
# Run server
python server.py部署到FastMCP云
- 分叉/克隆此存储库
- 访问 fastmcp.cloud 并使用GitHub登录
- 创建新项目并选择存储库
- 将入口点设置为
server.py - 添加所需的Okta环境变量(见下文)
- 部署——fastmcp.cloud在推送到主时自动部署
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
OKTA_CLIENT_ID | Okta OAuth2客户端ID | 是(用于身份验证) |
OKTA_CLIENT_SECRET | Okta OAuth2客户端机密 | 是(用于身份验证) |
OKTA_DOMAIN | Okta实例域(例如。 https://mycompany.okta.com) | 是(用于身份验证) |
MCP_BASE_URL | 已部署服务器的公共URL | 是(用于身份验证) |
OKTA_ISSUER | OAuth2发行者(默认为 {OKTA_DOMAIN}/oauth2/default) | 没有 |
JWT_SIGNING_KEY | 用于签名MCP JWT的固定密钥(在Linux上是必需的——自动生成的密钥是短暂的) | 生产 |
REDIS_URL | Redis连接字符串(rediss://...)用于冷启动时的持久OAuth状态 | 生产 |
STORAGE_ENCRYPTION_KEY | 用于静态加密OAuth令牌的Fernet密钥。在以下情况下需要 REDIS_URL 已设置。生成方式 python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" | 何时 REDIS_URL set |
SOLAR_API_TOKEN | 上游太阳能系统API的承载令牌 | 否 |
授权是选择加入的——当 OKTA_CLIENT_SECRET 如果未设置,服务器将在没有身份验证的情况下运行。
持久OAuth状态
fastmcp.cloud在空闲时将容器缩放到零。如果没有持久存储,每次冷启动都会擦除OAuth状态,并强制每个用户重新进行身份验证。有两个设置可以防止这种情况:
- 服务器请求
offline_accessOkta发行刷新令牌。 - 设置
REDIS_URL+STORAGE_ENCRYPTION_KEY启用加密的、命名空间的Redis支持client_storage所以JTI→ 上游令牌映射在冷启动中幸存下来。
单个Redis数据库可以在多个MCP服务器之间共享——每个服务器都通过一个唯一的前缀(这里, solar-mcp-server).
认证
服务器支持两种身份验证方法:
- 交互式OAuth --用于基于浏览器的MCP客户端(Claude Desktop、Claude Code、Claude Web)。用户完成Okta登录流程。
- 持有者代币 --用于机器对机器访问(MCP市场、代理、计划任务)。客户端通过以下方式发送Okta颁发的访问令牌
Authorization: Bearer头球
API 参考
此服务器包装 系统解决方案REST API:
/bodies-所有具有过滤功能的天体/bodies/{id}-单体细节/knowncount-对象计数统计/positions-星历计算
许可证
麻省理工学院
