项目简介
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管理,使得项目结构清晰,易于开发、维护和扩展。
安装步骤
- 克隆仓库及子模块:
打开终端或PowerShell,执行以下命令克隆项目,并确保包含所有子模块:
git clone --recursive https://github.com/Ruixiaoke/ASimpleStarGazer.git cd ASimpleStarGazer - 启动基础设施服务:
项目依赖Redis和MySQL数据库。通过Docker Compose可以快速启动这些服务:
docker compose up -d - 选择并启动MCP服务器(推荐Python版本):
- Python MCP服务器:
- 进入Python服务器目录:'cd MCP_servers/ASimpleStargGazer_python'
- 安装依赖:'pip install -r requirements.txt'
- 配置环境变量:在当前目录下创建 '.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 - 启动服务:'python ASimpleStarGazer.py'
- .NET MCP服务器:
- 进入.NET服务器目录:'cd MCP_servers/ASimpleStargGazer_dotnet'
- 执行数据库迁移(需要根据实际数据库配置修改连接字符串):
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 - 构建项目:'dotnet build ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj -c Debug'
- 启动服务:'dotnet run --no-build --project ASimpleStarGazer_dotNet/ASimpleStarGazer_dotNet.csproj'
- Node.js MCP服务器:
- 进入Node.js服务器目录:'cd MCP_servers/ASimpleStargGazer_node'
- 安装依赖:'npm install'
- 构建项目:'npm run build'
- 启动服务:'node build/index.js'
- Python MCP服务器:
服务器配置(供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