项目简介

ASimpleStarGazer 是一个创新的星空观测应用后端,它遵循 Model Context Protocol (MCP) 协议,旨在为大型语言模型(LLM)客户端提供标准化的天文信息上下文。项目采用微服务架构,包含Python、.NET和Node.js三种语言的MCP服务器实现,可提供实时的天气、月相、行星位置、光污染和云量等详细天文数据。

主要功能点

  • 多语言MCP服务器: 提供Python、.NET和Node.js三种灵活的MCP服务器实现,满足不同开发环境的需求。
  • 天文信息服务: 支持获取指定地点的天气、月相、行星位置、光污染和云量等详细天文数据。
  • 缓存与数据库管理: 集成Redis实现数据缓存,并通过MySQL管理持久化数据,确保数据高效可靠。
  • 标准化工具接口: 通过JSON-RPC协议提供统一的工具接口,如'get_weather'、'get_moon_phase'等,方便LLM客户端调用和集成。
  • 模块化设计: 采用微服务架构和Git Submodule管理,使得项目结构清晰,易于开发、维护和扩展。

安装步骤

  1. 克隆仓库及子模块: 打开终端或PowerShell,执行以下命令克隆项目,并确保包含所有子模块:
    git clone --recursive https://github.com/Ruixiaoke/ASimpleStarGazer.git
    cd ASimpleStarGazer
  2. 启动基础设施服务: 项目依赖Redis和MySQL数据库。通过Docker Compose可以快速启动这些服务:
    docker compose up -d
  3. 选择并启动MCP服务器(推荐Python版本):
    • Python MCP服务器:
      1. 进入Python服务器目录:'cd MCP_servers/ASimpleStargGazer_python'
      2. 安装依赖:'pip install -r requirements.txt'
      3. 配置环境变量:在当前目录下创建 '.env' 文件,填入您的API密钥和数据库连接信息,例如:
        AstronomyAPI_key=您的天文学API密钥
        Meteosource_Api_Key=您的Meteosource API密钥
        REDIS_URL=redis://localhost:6379/0
        MYSQL_HOST=localhost
        MYSQL_USER=root
        MYSQL_PASSWORD=your_mysql_password
        MYSQL_DATABASE=stargazer_db
      4. 启动服务:'python ASimpleStarGazer.py'
    • .NET MCP服务器:
      1. 进入.NET服务器目录:'cd MCP_servers/ASimpleStargGazer_dotnet'
      2. 执行数据库迁移(需要根据实际数据库配置修改连接字符串):
        dotnet ef migrations add InitialCreate -p ASimpleStarGazer.Model/ASimpleStarGazer.Model.csproj -s ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj
        dotnet ef database update -p ASimpleStarGazer.Model/ASimpleStarGazer.Model.csproj -s ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj
      3. 构建项目:'dotnet build ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj -c Debug'
      4. 启动服务:'dotnet run --no-build --project ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj'
    • Node.js MCP服务器:
      1. 进入Node.js服务器目录:'cd MCP_servers/ASimpleStargGazer_node'
      2. 安装依赖:'npm install'
      3. 构建项目:'npm run build'
      4. 启动服务:'node build/index.js'

服务器配置(供MCP客户端使用)

以下是MCP客户端连接到不同语言服务器的典型配置示例。请根据您实际启动的服务器类型选择对应的JSON配置。这些配置定义了MCP客户端如何启动和连接MCP服务器进程。

Python MCP 服务器配置示例:

{
  "name": "ASimpleStarGazer Python Server",
  "command": "python",
  "args": [
    "MCP_servers/ASimpleStargGazer_python/ASimpleStarGazer.py"
  ],
  "description": "连接到基于Python实现的MCP星空观测服务,提供天气、月相、行星位置等功能。",
  "capabilities": {
    "tools": [
      "get_weather",
      "get_light_pollution",
      "get_moon_phase",
      "get_planet_positions",
      "get_cloud_data",
      "cache_set",
      "cache_get",
      "db_ping"
    ]
  }
}

.NET MCP 服务器配置示例:

{
  "name": "ASimpleStarGazer .NET Server",
  "command": "dotnet",
  "args": [
    "run",
    "--no-build",
    "--project",
    "MCP_servers/ASimpleStargGazer_dotnet/ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj"
  ],
  "description": "连接到基于.NET实现的MCP星空观测服务,提供天气、月相、行星位置等功能。",
  "capabilities": {
    "tools": [
      "get_weather",
      "get_light_pollution",
      "get_moon_phase",
      "get_planet_positions",
      "get_cloud_data",
      "cache_set",
      "cache_get",
      "db_ping"
    ]
  }
}

Node.js MCP 服务器配置示例:

{
  "name": "ASimpleStarGazer Node.js Server",
  "command": "node",
  "args": [
    "MCP_servers/ASimpleStargGazer_node/build/index.js"
  ],
  "description": "连接到基于Node.js实现的MCP星空观测服务,提供天气、月相、行星位置等功能。",
  "capabilities": {
    "tools": [
      "get_weather",
      "get_light_pollution",
      "get_moon_phase",
      "get_planet_positions",
      "get_cloud_data",
      "cache_set",
      "cache_get",
      "db_ping"
    ]
  }
}
  • 注意: 上述 'command' 和 'args' 中的路径是相对于您克隆 'ASimpleStarGazer' 仓库的根目录而言。如果您在MCP客户端中指定的工作目录不同,请相应调整这些路径。'capabilities.tools' 字段列出了该服务器支持的所有工具函数,MCP客户端可根据此信息进行功能发现。

基本使用方法

一旦MCP服务器成功启动并被MCP客户端(例如,使用'@modelcontextprotocol/inspector'工具或其他支持MCP协议的LLM集成应用)连接,LLM即可通过MCP协议调用服务器提供的各种工具。例如,LLM可以请求'get_weather("北京")'来获取北京的天气信息,或者请求'get_moon_phase("纽约")'来获取纽约的月相数据。具体调用方式取决于LLM客户端的实现和交互模式。您可以使用 'npx @modelcontextprotocol/inspector' 工具连接到已启动的MCP服务器进行测试和调试,验证其功能。

信息

分类

网页与API