Pokemon数据查询服务

一个基于Model Context Protocol (MCP)的服务,提供通过PokeAPI查询Pokemon信息的功能,包括统计数据、类型、精灵图像等。

  • by hollanddd
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 hollanddd/pokemon-mcp-server

使用说明

口袋妖怪MCP服务器

一种模型上下文协议(MCP)服务器实现,通过PokeAPI提供对Pokemon数据的访问。此服务器允许MCP客户端查询口袋妖怪信息,包括统计数据、类型、精灵等。

特性

  • 口袋妖怪查找:按姓名或ID检索详细的口袋妖怪信息
  • 综合数据:访问口袋妖怪统计数据、类型、精灵、身高、体重等
  • 错误处理:对无效口袋妖怪请求的正确错误响应
  • MCP协议:完全符合模型上下文协议标准

建筑

服务器采用模块化架构构建:

  • main.rs:入口点和服务器初始化
  • server.rs:带有工具定义的MCP服务器实现
  • client.rs:用于PokeAPI交互的HTTP客户端
  • models.rs:口袋妖怪API响应的数据结构
  • formatter.rs:口袋妖怪数据的输出格式
  • config.rs:日志记录和配置设置

安装

先决条件

  • Rust 2024版
  • 货物包装经理

从源代码构建

git clone <repository-url>
cd pokemon-mcp-server
cargo build --release

用法

启动服务器

cargo run

服务器在stdio传输上运行,并将启动信息记录到stderr。

可用工具

get_pokemon

按名称或ID检索有关口袋妖怪的详细信息。

参数:

  • name_or_id (字符串):口袋妖怪名称(不区分大小写)或数字ID

示例用法:

get_pokemon("pikachu")
get_pokemon("25")

响应格式:

**Pikachu** (ID: 25)

**Height:** 4 decimeters
**Weight:** 60 hectograms  
**Types:** electric
**Sprite:** https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png

**Base Stats:**
hp: 35
attack: 55
defense: 40
special-attack: 50
special-defense: 50
speed: 90

发展

运行测试

cargo test

代码质量

# Check for compilation errors
cargo check

# Run linter
cargo clippy

# Format code
cargo fmt

环境变量

集 RUST_LOG 控制日志记录级别:

RUST_LOG=debug cargo run

TurboMCP 框架

该项目是使用 TurboMCP,Rust的高性能MCP服务器框架。

使用TurboMCP CLI进行测试

对于测试和开发,您可以使用 TurboMCP命令行界面:

# Install turbomcp-cli
cargo install --git https://github.com/Epistates/turbomcp turbomcp-cli

# Test the server
turbomcp-cli tools-list --command "./target/release/pokemon-mcp" | jq

依赖项

  • 涡轮微型计算机:支持网络和stdio的MCP服务器框架
  • 东京:多线程异步运行时
  • reqwest:API请求的HTTP客户端
  • 塞尔德:序列化/反序列化
  • 无论如何:错误处理
  • 追踪:结构化日志记录

API集成

此服务器与 PokeAPI REST API:

  • 基本URL: https://pokeapi.co/api/v2/
  • 端点: /pokemon/{id or name}
  • 费率限制:遵循PokeAPI合理使用政策

错误处理

服务器提供适当的错误响应:

  • 无效请求:当找不到口袋妖怪时
  • 内部错误:用于网络或解析问题
  • 正确的状态代码:HTTP状态码处理

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 跑 cargo fmt 和 cargo clippy
  6. 提交拉取请求