宝可梦数据资源与战斗模拟工具

一个提供宝可梦全面数据资源和战斗模拟功能的MCP服务器,支持AI模型获取宝可梦信息并进行交互式战斗模拟。

  • by TaifAlsadoon
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 TaifAlsadoon/pokemon-mcp-server

使用说明

宝可梦MCP服务器——数据资源+作战模拟工具

概述

该项目实现了一个MCP(模型上下文协议)服务器,该服务器为AI模型提供了两个关键功能:

1-Pokémon数据资源-公开来自公共PokéAPI(https://pokeapi.co/ ).

2-战斗模拟工具-一种模拟任何两个宝可梦之间战斗的工具,包括类型效果、基于统计的伤害、回合顺序和基本状态效果。

该服务器充当人工智能和口袋妖怪世界之间的桥梁,使LLM能够检索知识并交互式模拟战斗。

第1部分:口袋妖怪数据资源

实施

  • 连接到公共PokéAPI(https://pokeapi.co/ )

  • 公开全面的口袋妖怪信息,包括:

  • 基本统计数据:生命值、攻击、防御、特殊攻击、特殊防御、速度

  • 类型(例如,火、水、草)

  • 能力

  • 可用移动及其效果(力量、精度、类型、效果文本)

  • 进化信息

MCP资源

  • 资源:口袋妖怪://{name}
  • 返回JSON,包括统计数据、类型、能力、移动(带效果)和进化链。
  • 实现MCP资源设计模式,使LLM可以访问此数据。

交付物

  • 带有口袋妖怪数据资源的MCP服务器的代码。
  • 描述资源如何公开数据的文档(此README)。
  • 示例查询(examples/llm_examples.md)。

第2部分:作战模拟工具

实施

  • 工具:simulate_battle(pokemon_a,pokemon_b,max_turns=100,seed=None)

  • 使用以下方式模拟任意两个宝可梦之间的战斗:

  • 类型有效性计算(例如,水>火)

  • 基于属性和移动力的伤害计算

  • 基于速度统计的转弯顺序

状态影响:

  • 瘫痪——有机会跳过一个转弯
  • 烧伤——经常性HP损失
  • 毒药——反复出现的生命值损失
  • 详细的战斗日志,显示每个回合的行动和结果
  • 获胜者决定(第一个Pokemon晕倒,或在最大回合后获得更高的生命值)

MCP工具

  • 通过MCP作为可调用工具公开:simulate_battle
  • 返回JSON对象,例如:
{
  "winner": "blastoise",
  "log": [
    "--- Turn 1 ---",
    "charizard used fire-punch → blastoise lost 14 HP!",
    "blastoise is now affected by burn!",
    ...
  ]
}

交付物

  • 遵循MCP工具规范的作战模拟工具代码
  • examples/llm_examples.md中的示例用法

项目包装

提交内容包括一个ZIP文件,其中包含:

  • 所有代码(pkmon_core/server.py,pkmon_core/战斗.py)
  • 支持文件(requirements.txt、README.md、示例/)
  • 测试脚本(test_part1.py)
  • 清晰的设置和使用说明

安装和设置

需求

  • Python 3.10+
  • 推荐虚拟环境

设置


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

python -m venv .venv
source .venv/bin/activate  

pip install -r requirements.txt

运行和测试

运行MCP服务器

python -m pkmon_core.server

注意:服务器在stdio模式下运行,将显示为空闲,等待MCP客户端。按Ctrl+C停止。

Python快速测试

python - << 'PY'
from pkmon_core.server import get_pokemon, simulate_battle

print("Resource sample (pikachu) ->")
print(get_pokemon("pikachu")[:200], "...\n")

print("Battle sample ->")
res = simulate_battle("charizard", "blastoise", seed=42, max_turns=20)
print("Winner:", res["winner"])
print("\n".join(res["log"][:10]))
PY

预期产量:

  • 皮卡丘的JSON数据(类型、统计、移动、进化链)
  • 战斗日志,包括回合行动和获胜者(例如Blastoise)

LLM使用示例

有关提示示例,请参见examples/llm_examples.md,例如:

  • 总结宝可梦的属性、动作和进化
  • 模拟战斗并解释获胜者获胜的原因

看 examples/llm_examples.md 以获取快速示例。

备注

  • 简化机制:忽略PP、物品、天气等。
  • 专注于清晰度和教育性战斗模拟
  • 易于扩展以添加更多机制