返回市场
MCP服务器

MCP服务器

作者:IO-Aerospace-software-engineering11 星标更新:2025-10-20

项目介绍

IO Aerospace MCP Server

立即使用

生产环境托管(无需设置):https://mcp.io-aerospace.org/

传输协议:

注意:使用基础URL与现代MCP客户端 - 它们会自动使用流式HTTP传输。只有在使用需要SSE协议的旧版客户端时才使用/sse端点。

这是一个用于航空航天和航天动力学计算的模型上下文协议(MCP)服务器,提供天体星历、轨道力学和空间任务分析工具。

概览

此MCP服务器提供了两种传输选项:

  • STDIO传输:标准输入/输出通信(推荐用于本地MCP客户端)
  • HTTP传输:支持现代流式HTTP和遗留SSE协议以进行基于Web的集成
    • 流式HTTP(默认,推荐):基础URL上的现代MCP协议
    • SSE(遗留):仅在/sse端点上可用,用于向后兼容性

该服务器包括全面的工具:

  • 天体星历和状态向量计算
  • 轨道力学和几何计算
  • 深空网络(DSN)地面站操作
  • 太阳系物体属性和特征
  • 航空航天计算的数学转换
  • 时间系统转换和实用工具

航天动力学框架

此服务器由IO Aerospace航天动力学框架驱动,该框架提供了星历、轨道力学、几何和时间系统的内核算法。

使用托管服务器(推荐)

您可以立即开始针对生产实例进行集成:

重要:现代MCP客户端(2024+)应使用基础URL和流式HTTP传输。SSE端点仅为了与旧实现的向后兼容性而维护。

示例(遗留SSE - 浏览器/Node):

// 仅当您有需要SSE的旧版客户端时才使用此方法
const eventSource = new EventSource('https://mcp.io-aerospace.org/sse');

eventSource.onmessage = (event) => {
  console.log('消息', event.data);
};

eventSource.onerror = (err) => {
  console.error('SSE错误', err);
};

自托管是可选的;请参阅以下Docker和.NET指令。

项目结构

mcp-server/
├── AI/                           # AI工具和模型
│   ├── Tools/                    # 核心计算工具
│   ├── Models/                   # 数据模型和类型
│   └── Converters/              # 类型转换器
├── Data/                         # 数据提供者和太阳系内核
│   ├── SolarSystem/             # SPICE内核文件
│   └── SolarSystemObjects/      # 天体定义
├── Server.Http/                 # HTTP传输服务器(流式HTTP + 遗留SSE)
├── Server.Stdio/                # STDIO传输服务器
├── docker-compose.yml           # 开发Docker配置
├── docker-compose.prod.example.yml  # 生产模板
└── deploy-production.sh         # 生产部署脚本

先决条件

  • .NET 9.0 SDK或运行时
  • Docker(用于容器化部署)
  • 太阳系内核数据(SPICE内核)

可用工具

CelestialBodyTools

  • GetEphemerisAsStateVectors:计算天体的状态向量(位置和速度)
  • GetCelestialBodyProperties:检索行星和卫星的地球物理属性

OrbitalParametersTools

  • ConvertStateVectorToKeplerianElements:将状态向量转换为开普勒轨道元素
  • ConvertStateVectorToEquinoctialElements:将状态向量转换为春分点元素
  • ConvertStateVectorToEquatorialCoordinates:将状态向量转换为赤道坐标
  • ConvertKeplerianElementsToStateVector:将开普勒轨道元素转换回状态向量
  • ConvertEquinoctialElementsToStateVector:将春分点元素转换回状态向量
  • ConvertStateVectorToTheGivenFrame:在参考帧之间转换状态向量

GeometryFinderTools

  • FindCoordinateConstraint:查找满足坐标约束的时间窗口
  • FindDistanceConstraint:查找满足距离约束的时间窗口
  • FindOccultingConstraint:查找遮蔽和日食事件

SiteTools

  • GetDeepSpaceStationPlanetodeticCoordinates:获取深空站的纬度、经度和海拔
  • GetDeepSpaceStationStateVector:计算地面站的状态向量
  • GetHorizontalCoordinates:从地面站获取方位角和仰角
  • GetDSSFrame:检索深空站的参考帧信息

TimeTools

  • ConvertDateTime:在不同的时间系统(UTC、TDB、TAI、TDT、GPS)之间转换日期时间
  • CurrentDateTime:获取当前UTC日期时间

MathTools

  • DegreesToRadians / RadiansToDegrees:角度单位转换
  • ConvertDegreesToHours / ConvertHoursToDegrees:时间-角度转换
  • DegreesToArcseconds / ArcsecondsToDegrees:角度精度转换
  • RadiansToArcseconds / ArcsecondsToRadians:角度单位转换
  • MetersToMiles / MilesToMeters:距离单位转换
  • MetersToFeet FeetToMeters:距离单位转换
  • MetersToKilometers / KilometersToMeters:公制距离转换
  • MetersToAstronomicalUnits / AstronomicalUnitsToMeters:天文距离转换
  • MetersToParsec / ParsecToMeters:恒星距离转换
  • MetersToLightYears / LightYearsToMeters:宇宙距离转换

快速启动(自托管)

Docker部署

开发

git clone https://github.com/IO-Aerospace-software-engineering/mcp-server
cd mcp-server
docker-compose up

HTTP服务器将在http://localhost:8080上可用。

生产

  1. docker-compose.prod.example.yml复制到docker-compose.prod.yml
  2. 更新生产文件中的域名
  3. 确保内核数据存在于./data/solarsystem/
  4. 使用自动化脚本部署:
./deploy-production.sh

原生.NET部署

1. 克隆并构建

git clone https://github.com/IO-Aerospace-software-engineering/mcp-server
cd mcp-server
dotnet build

2. 太阳系数据设置

服务器需要SPICE内核进行太阳系计算。

  • STDIO服务器配置(无appsettings):
    • 通过CLI或环境变量提供内核路径
    • 优先级:CLI标志 > IO_DATA_DIR环境变量
    • CLI标志:-k <path>--kernels <path>,或--kernels-path <path>

示例:

# 使用CLI标志
./Server.Stdio -k /path/to/your/spice/kernels

# 使用环境变量(Linux/macOS)
export IO_DATA_DIR="/path/to/your/spice/kernels"
./Server.Stdio

# Windows(PowerShell)
$env:IO_DATA_DIR="C:\path\to\your\spice\kernels"
./Server.Stdio.exe
  • HTTP服务器配置:可以像以前一样使用appsettings.json。

所需内核文件:

kernels/
├── de440s.bsp              # 行星星历
├── latest_leapseconds.tls  # 秒差距
├── pck00011.tpc           # 行星常数
├── earth_latest_high_prec.bpc  # 地球定向
└── ...                    # 其他内核文件

3. 选择传输方式

STDIO传输(用于MCP客户端)
  • 发布资产是每个操作系统/运行时标识符的原生可执行文件(无ZIP)。文件名:
    • mcp-server-stdio-<tag>-linux-x64
    • mcp-server-stdio-<tag>-win-x64.exe
    • mcp-server-stdio-<tag>-osx-arm64
  • 在macOS上,可能会提供一个侧车原生库(例如,libIO.Astrodynamics.so)。将其放置在可执行文件所在的同一目录中。
# 在发布或下载适用于您的操作系统的发布资产之后
./Server.Stdio -k /path/to/kernels
HTTP传输(用于Web/HTTP)
cd Server.Http
dotnet run
# 服务器在http://localhost:8080上可用

Docker配置

开发环境

  • 文件docker-compose.yml
  • 端口:8080(HTTP),8081(HTTPS)
  • 数据:挂载自./Data/SolarSystem
  • 使用docker-compose up

生产环境

  • 文件docker-compose.prod.yml(从示例创建)
  • 特性:Traefik反向代理,优化的镜像
  • 数据:主机挂载自./data/solarsystem
  • 部署:通过deploy-production.sh自动化

MCP客户端集成

注意:许多MCP客户端使用基于JSON的配置文件,但模式因客户端而异。下面的JSON示例使用Claude Desktop的模式;根据您的客户端格式调整键。

Claude Desktop配置(STDIO)

添加到您的Claude Desktop配置:

{
  "mcpServers": {
    "astrodynamics": {
      "command": "/path/to/Server.Stdio",
      "args": ["-k", "/path/to/kernels"]
    }
  }
}

或者,如果您的客户端支持,设置环境变量:

{
  "mcpServers": {
    "astrodynamics": {
      "command": "/path/to/Server.Stdio",
      "args": [],
      "env": {
        "IO_DATA_DIR": "/path/to/kernels"
      }
    }
  }
}

Claude Desktop配置(HTTP传输到托管服务器)

通过指定基础URL使用您的生产服务器。现代MCP客户端将使用流式HTTP:

{
  "mcpServers": {
    "astrodynamics": {
      "transport": {
        "type": "http",
        "url": "https://mcp.io-aerospace.org"
      }
    }
  }
}
  • 基础URL使用现代流式HTTP传输协议
  • 不要追加/sse - 这仅适用于需要SSE协议的旧版客户端
  • 此模式适用于Claude Desktop;其他客户端可能使用不同的键

其他MCP客户端

  • 提供基础URL:https://mcp.io-aerospace.org
  • 如果您的部署需要,添加头部(例如,Authorization)
  • 除非您的客户端文档要求,否则不要追加/sse;大多数客户端会发现SSE路径
  • 查看您的客户端文档以获取确切的JSON模式或设置UI

Node.js MCP客户端(流式HTTP)

使用MCP SDK连接到托管服务器,使用现代流式HTTP传输:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { HttpClientTransport } from "@modelcontextprotocol/sdk/client/transport/http.js";

// 现代流式HTTP传输(推荐)
const transport = new HttpClientTransport(new URL("https://mcp.io-aerospace.org"));
const client = new Client(
  { name: "example-client", version: "1.0.0" },
  { capabilities: { tools: {}, prompts: {}, resources: {} } },
  transport
);

await client.connect();
const tools = await client.listTools();
console.log("工具:", tools);

// 示例:调用工具
// const result = await client.callTool({ name: "GetEphemerisAsStateVectors", arguments: { /* ... */ } });
// console.log(result);

赞助

如果这个项目对您的工作有帮助,请考虑赞助持续开发、托管和数据更新。

您的支持有助于保持托管服务器在线,并使SPICE数据保持最新。

故障排除

常见问题

  1. "内核目录不存在":验证通过-k(或IO_DATA_DIR)传递的路径存在且包含SPICE文件
  2. "加载内核失败":确保所有必需的内核文件都在并且可访问
  3. 连接错误:检查防火墙设置和端口可用性

日志监控

# 开发
docker-compose logs -f

# 生产
docker logs -f container-name

贡献

  1. 分叉仓库
  2. 创建您的功能分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m '添加惊人的功能'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 打开拉取请求

许可证

此项目采用MIT许可证 - 详情请参阅LICENSE文件。

支持

对于支持和问题:

  • 在GitHub上创建一个问题
  • 查看上面的故障排除部分
  • 查看DEPLOYMENT_GUIDE.md中的部署指南

Sylvain

新:现在有一个逐步的如何做指南: