Pokémon战斗模拟服务器

一个基于Python、FastMCP和LangChain的MCP兼容API服务器,提供Pokémon数据和战斗模拟功能。

  • by Devansh-react
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Devansh-react/Pokemon_MCP_Server

使用说明

📘(这是一本打开的书的图标,可翻译为“书”或保持原样作为符号使用) 宝可梦MCP对战服务器

首次与MCP合作时,我尽全力学习MCP服务器并与其协作,同时借助各种资源来构建它

一个使用Python、FastMCP和LangChain构建的现代MCP(模型上下文协议)演示。


⚡ 概述

这个项目实施了一个 MCP兼容的API服务器 这使得大型语言模型(LLMs)或LangChain代理能够:

  • 通过……访问宝可梦数据 MCP资源
  • 通过(某种方式)模拟宝可梦对战 MCP 工具

使用以下技术构建:

  • 🐍(蛇) Python 3.11及以上版本
  • ⚙️(齿轮图标,常用于表示机械、设置或调整等含义) FastMCP(来自MCP Python SDK)
  • 🧠 代表“大脑”或“思考”的意思,但作为一个单独的表情符号,它通常被用来表示思考、智力或大脑的概念。在中文中,可以直接用“🧠(表示思考/大脑)”来传达这个意思,或者根据上下文翻译为“思考中”、“大脑”等。不过,直接翻译时,我们往往保留其作为表情符号的直观性,所以可能不会直接翻译为文字,而是用其本身来表达。 LangChain + Google Gemini 大语言模型(LLM)
  • 💾 本地JSON宝可梦数据集(用于离线测试)

🧩 特点

  • MCP服务器 揭露宝可梦资源和工具
  • 战斗模拟引擎 (类型修饰符,特性相符攻击(STAB),随机因素,速度顺序)
  • 确定性播种 为了可重复的模拟
  • LangChain 客户端集成 (Gemini LLM可以调用您的MCP工具)
  • 可扩展的 针对状态效果,更多招式,真实PokéAPI集成

🏗️ 项目结构

pokemon_mcp/
├── server/
│   ├── __init__.py
│   ├── main.py                 # FastMCP server (entrypoint)
│   ├── battle_engine.py        # Core battle logic
│   ├── resources.py            # Pokémon data resource
│   ├── tools.py                # Battle simulation tool
│   ├── pokedata.py             # Pokémon data loader
│   └── type_chart.py           # Type effectiveness mapping
│
├── client/
│   ├── __init__.py
│   ├── run_agent.py            # LangChain + Gemini client
│   └── battle_prompt.txt       # Prompt template
│
├── seeds/
│   └── pokemon_seed.json       # Local Pokémon dataset
│
├── tests/
│   └── test_battle_engine.py   # Unit tests
│
├── .env                        # Store your GOOGLE_API_KEY here
├── requirements.txt
└── README.md

🧠 架构图

🔹 ASCII 概述

          +------------------------+
          |     LangChain Agent    |
          |  (Gemini / LLM prompt) |
          +-----------+------------+
                      |
                      v
           +----------+-----------+
           |   MCP Client (HTTP)  |
           |    via MCPAdapter    |
           +----------+-----------+
                      |
                      v
        +-------------+--------------+
        |      FastMCP Server        |
        |----------------------------|
        | Resources: pokemon-data    |
        | Tools: pokemon-battle      |
        +-------------+--------------+
                      |
                      v
        +-------------+--------------+
        |  Battle Engine + Data API  |
        |  (pokedata.py, type_chart) |
        +-------------+--------------+

🔹 人鱼架构图

%% Pokémon MCP Architecture Diagram
graph TD

%% ==== LLM / LangChain Layer ====
subgraph LLM[🤖 LLM & LangChain Layer]
    A[User Prompt] --> B[LangChain Agent]
    B --> C[MCP Adapter]
end

%% ==== MCP Server Layer ====
subgraph MCP[⚙️ FastMCP Server]
    C --> D[MCP Server API]
    D --> E[📘 Pokemon Data Resource]
    D --> F[⚔️ Battle Simulation Tool]
end

%% ==== Backend Logic ====
subgraph Engine[🔥 Battle Engine & Data Layer]
    E --> G[Local JSON Dataset / PokéAPI]
    F --> H[Battle Engine Logic]
    H --> I[(Battle Result JSON)]
end

%% ==== Return Path ====
I --> B
G --> E

%% ==== Styling ====
style LLM fill:#E0F7FA,stroke:#00796B,stroke-width:2px
style MCP fill:#E8EAF6,stroke:#3949AB,stroke-width:2px
style Engine fill:#FFF3E0,stroke:#F57C00,stroke-width:2px


🚀 开始使用

1️⃣ 克隆仓库

git clone https://github.com/yourusername/pokemon-mcp.git
cd pokemon-mcp

2️⃣ 安装依赖项

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt

3️⃣ 设置你的 .env

创建一个 .env 项目根目录下的文件:

GOOGLE_API_KEY=your_gemini_api_key_here

4️⃣ 运行MCP服务器

uvicorn server.main:app --reload

5️⃣ 运行LangChain客户端

在一个新的终端中:

python client/run_agent.py

⚔️ 示例 Curl 请求

curl -X POST http://localhost:8000/mcp/tools/pokemon-battle/run     -H "Content-Type: application/json"     -d '{"pokemon_a":{"name":"Pikachu"},"pokemon_b":{"name":"Charmander"},"seed":42}'

示例输出

{
  "winner": "Pikachu",
  "rounds": 3,
  "battle_log": [
    {"turn":1,"events":["Pikachu used Thunderbolt and dealt 77 damage.","Charmander has 123 HP remaining."]},
    {"turn":2,"events":["Charmander used Ember and dealt 36 damage.","Pikachu has 164 HP remaining."]}
  ]
}

🧰 技术栈

层 技术 目的
框架 FastMCP 基于FastAPI构建的MCP服务器封装器
语言 Python 3.11+ 主要实现
LLM Gemini 1.5(通过LangChain) 处理智能体推理
编曲(或管弦乐编排) LangChain + MCP 适配器 支持 LLM → MCP 调用
数据 本地JSON / PokéAPI 宝可梦信息
测试 pytest 验证和单元测试

🧩 工作原理(工作流程概述)

1️⃣ 大型语言模型(LLM)提示(或指令):
用户向Gemini驱动的代理提问:

“模拟皮卡丘和小火龙之间的宝可梦对战。”

2️⃣ LangChain 代理:
认识到它可以利用 pokemon-battle MCP工具。

3️⃣ MCP适配器:
向本地MCP服务器发送HTTP请求。

4️⃣ MCP服务器:

  • 呼叫 battle_simulation_handler() 工具处理器。
  • 使用本地JSON中的宝可梦数据。
  • 运行战斗引擎逻辑。
  • 返回结果(获胜者+日志)。

5️⃣ 大型语言模型(LLM)格式:
大型语言模型(LLM)解析JSON响应并生成自然语言摘要。


🧪 测试

pytest -v

🧭 未来的改进方向

  • 添加 状态效果 (燃烧、中毒、麻痹)
  • 添加 暴击 并且 准确度机制
  • 集成实时(功能/数据) PokéAPI 用于动态统计
  • 通过[某种方式/工具]可视化战斗场景 LangGraph
  • 部署于 渲染 / AWS(亚马逊网络服务)/ HuggingFace Spaces(一个用于托管机器学习模型和应用的平台)