使用说明
📘(这是一本打开的书的图标,可翻译为“书”或保持原样作为符号使用) 宝可梦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(一个用于托管机器学习模型和应用的平台)