【MCP 第二篇】实现一个简易的MCP

大家好, 这里是 CodeAgent.

这一篇我们讲讲如何实现一个简易的 MCP.

────── Prepare ──────

文章基于 windows 环境来讲解, macOS 和 linux 环境配置可以参考 modelcontextprotocol.io

  • 必要的环境配置
  1. www.python.org/downloads/w... 下载python最新版本, 我这里是 3.13.4, python 3.10 或者更高即可

  2. 打开 terminal, 输入下面命令安装 uv, 这是是一个高性能的 Python 包和项目管理器, 关于uv更多内容可以从开源地址 github.com/astral-sh/u... 了解

arduino 复制代码
 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

安装好之后, uv 的路径一般如下所示: (注意反双斜杠)

bash 复制代码
C:\Users\用户名\.local\bin\uv.exe

也可以用 windows 自带的 where (类似 linux 的 which) 来找到 uv 的地址
Ctrl + R 输入 cmd 接着输入:

bash 复制代码
where uv
  1. 安装 FastMCP

    uv pip install fastmcp

安装 之后, 可以通过下面命令看版本

复制代码
fastmcp version

结果如下:

────── Start ──────

接下来, 我们借助一个公开免费的API, 地址是: pokeapi.co/

我们选取里面的 pokeapi.co/api/v2/poke... 来实现 MCP

看到 pokemon 是不是很熟悉, 没错, 就是它

1: 先测试下跑通接口

python 复制代码
import requests

url = "https://pokeapi.co/api/v2/pokemon/pikachu"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print("名称:", data["name"])
    print("编号:", data["id"])
    print("身高:", data["height"] / 10, "米")
    print("体重:", data["weight"] / 10, "千克")
    print("类型:", [t["type"]["name"] for t in data["types"]])
    print("能力:", [a["ability"]["name"] for a in data["abilities"]])
else:
    print("请求失败,状态码:", response.status_code)

可以看到接口可以成功返回

2: 使用 uv 创建文件夹并初始化环境

csharp 复制代码
uv init pokemon
cd pokemon

# 创建虚拟环境并激活
uv venv
.venv\Scripts\activate

# 安装依赖
uv add mcp[cli] httpx

# 创建 server 文件
new-item get-pokemon.py

3: 把接口封装到方法里

python 复制代码
def get_pokemon_info(pokemon_name):
    url = f"https://pokeapi.co/api/v2/pokemon/{pokemon_name.lower()}"
    // ...

4: 导入 FastMCP, 封装成 mcp tool

python 复制代码
import requests
from fastmcp import FastMCP

# 起一个 MCP Server, 名字自定义
mcp = FastMCP("get-pokemon")

def main():
    # 运行 MCP Server, 使用标准 io
    mcp.run(transport='stdio')

# 定义为一个 mcp tool
@mcp.tool()
def get_pokemon_info(pokemon_name):
    url = f"https://pokeapi.co/api/v2/pokemon/{pokemon_name.lower()}"
    try:
        response = requests.get(url)
        if response.status_code == 200:
            data = response.json()
            return {
                "name": data["name"],
                "id": data["id"],
                "height": f"{data['height'] / 10} meters",
                "weight": f"{data['weight'] / 10} kg",
                "types": [t["type"]["name"] for t in data["types"]],
                "abilities": [a["ability"]["name"] for a in data["abilities"]]
            }
        else:
            return {
                "error": f"Request failed with status code: {response.status_code}"
            }
    except requests.exceptions.RequestException as e:
        return {
            "error": f"Request exception: {str(e)}"
        }

if __name__ == "__main__":
    main()

注释都在代码里, 这里解释两个地方

  • mcp.tool() 把方法定义为了一个工具, 这个 tool 可以在上一篇提到的 Agent 的扳手那里看到

  • 推荐使用 from fastmcp import FastMCP 而不是 from mcp.server.fastmcp import FastMCP, 前者使用的是我们通过 uv pip install fastmcp 安装的 sdk, api 比较新并且丰富. 通过下面截图也可以看到有两个位置有 fastmcp sdk, 我们使用的是 Lib\site-packages\fastmcp

5: 配置 mcp json

tool 完成之后, 把 mcp 服务配置到 json 里 我们打开 settings.json, 加入下面配置

json 复制代码
"mcp-server-get-pokemon": {
    "command": "C:\Users\用户名\.local\bin\uv.exe",
     "args": [
        "--directory",
        "Q:\pokemon",
        "run",
        "get-pokemon.py"
     ]
}

接着点击 start, 等待状态变成 Running,

中间可能会报找不到 requests 这个 module, 因为我们开了一个虚拟环境,

所以还需要在 pokemon 下安装 requests

复制代码
uv pip install requests

6: 使用

这里我们使用 github copilot. 点击下扳手

可以看到刚才声明的 mcp tool

接着我们问下: get pokemon info about pikachu

可以看到结果返回如下

────── End ──────

好了, 到此简易的 MCP 已经实现, 代码同时放在了这个仓库: github.com/betaHi/poke..., 有兴趣的可以尝试.

如果还没看过第一篇的, 也欢迎了解下 如何在 VS Code 上导入MCP

💬 欢迎评论区留下你的看法, 下一篇我们继续讲讲 MCP 的 api.

也欢迎关注我的公众号 CodeAgent, 不定期推送文章, 一起学习交流

相关推荐
云起SAAS6 小时前
食材美食火锅三消消消乐小游戏抖音快手微信小程序看广告流量主开源
ai编程·看广告变现轻·食材美食火锅三消消消乐小游戏
疯狂踩坑人6 小时前
MCP理论和实战,然后做个MCP脚手架吧
前端·node.js·mcp
沟通QQ:688238867 小时前
NRBO - Transformer - BiLSTM回归:Matlab实现的数据预测魔法
ai编程
组合缺一9 小时前
Spring Boot 国产化替代方案。Solon v3.7.2, v3.6.5, v3.5.9 发布(支持 LTS)
java·后端·spring·ai·web·solon·mcp
Ericwyn12 小时前
MCP Partner, 一个在线快捷 mcp client 调试工具
mcp
酷柚易汛智推官13 小时前
AI编程不是低代码的“终结者”,而是进化的“催化剂”
低代码·ai编程·酷柚易汛
万少1 天前
我是如何使用 Trae IDE 完成《流碧卡片》项目的完整记录
前端·后端·ai编程
oden1 天前
把常用 Prompt 做成 Skill 之后,我和 Claude Code 的配合效率直接翻了 3 倍
ai编程
Breath571 天前
代码执行 + MCP:AI 代理 token 省 98%!
agent·ai agent·mcp·上下文工程
魁首1 天前
AI Agent 协议演进:从 MCP 到 ACP 的架构对比与未来展望
openai·gemini·mcp