天气和时间信息服务

一个基于Rust的微服务,提供特定城市和国家的天气数据及当地时间信息。

  • by sergei-grigorev
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 sergei-grigorev/mcp-server-play

使用说明

MCP服务器:天气和时间信息服务

项目概述

此模型上下文协议(MCP)服务器是一个学习项目,它利用RMCP(Rust模型上下文协议)库来演示:

  • 使用tokio进行异步Rust编程
  • 实现灵活的微服务架构
  • 使用RMCP SDK构建可扩展工具

服务器提供两个主要工具:

  1. 天气信息:检索特定城市和国家的天气数据
  2. 本地时间:获取给定城市和国家的当前当地时间

关于RMCP

RMCP是用于模型上下文协议的现代Rust SDK,提供:

  • 使用tokio实现干净高效的异步运行时
  • 灵活且可扩展的工具实施
  • 与官方SDK相比,改进了数据类型处理
  • 支持各种运输机制
    • 用于实时通信的服务器发送事件(SSE)
    • 轻量级且高效的单向服务器到客户端数据流
    • 内置重新连接支持和事件跟踪

目的

该项目的主要目标是:

  • 学习Rust编程
  • 探索RMCP库功能

特性

  • 气象数据检索
  • 当地时间信息
  • 基于标准的沟通
  • 带跟踪的结构化日志记录

先决条件

  • Rust(最新稳定版本)
  • 货物包装经理
  • 仅仅 命令运行器
    • 使用Homebrew安装: brew install just
    • 与货物一起安装: cargo install just
  • API密钥用于:

配置

可以使用以下环境变量配置服务器:

  • BIND_ADDRESS:将服务器绑定到的IP地址(默认值: 0.0.0.0)
  • PORT:要侦听的端口号(默认值: 8000)

示例用法:

# Bind to localhost on port 3000
BIND_ADDRESS=127.0.0.1 PORT=3000 cargo run

# Use default bind address but change port
PORT=8080 cargo run

环境设置

  1. 复制示例环境文件:

    cp .env.example .env
    
  2. 编辑 .env 文件,并将占位符值替换为实际的API键:

  3. 您还可以选择配置:

    • BIND_ADDRESS:将服务器绑定到的IP地址(默认值: 0.0.0.0)
    • PORT:要侦听的端口号(默认值: 8000)

安装

  1. 克隆存储库:

    git clone https://github.com/sergei-grigorev/mcp-server-play.git
    cd mcp-server-play
    
  2. 构建项目:

    cargo build
    

开发命令

该项目使用 仅仅 作为一名命令执行者。可用命令:

just                # List available commands
just build          # Build release artifact
just check          # Run checks (clippy, fmt, etc.)
just clean          # Clean build artifacts
just format         # Format code using rustfmt
just serve          # Run the server in development mode
just test           # Run tests

运行服务器

只需使用以下命令运行服务器:

just serve

项目结构

  • src/main.rs:入口点和服务器初始化
  • src/api/
    • mod.rs:主服务器实现
    • weather.rs:气象数据检索逻辑
    • weather/response.rs:天气API响应模型
    • time.rs:时间数据检索逻辑
    • time/response.rs:时间API响应模型
  • src/models/
    • mod.rs:模型模块定义
    • weather.rs:天气请求/响应模型
    • time.rs:时间请求/响应模型

工具和端点

天气信息

  • 端点: get_weather
  • 参数:
    • city:城市名称
    • country:国家代码
    • unit:温度单位(可选)
      • 价值观: C (摄氏度)或 F (华氏)
      • 违约: C

本地时间

  • 端点: get_local_time
  • 参数:
    • city:城市名称
    • country:国家代码

许可证

麻省理工学院