【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, 不定期推送文章, 一起学习交流

相关推荐
小奏技术6 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
粥里有勺糖6 小时前
用Trae做了个公众号小工具
前端·ai编程·trae
杂雾无尘7 小时前
用 Trae 打造全栈项目魔法师 - 让项目初始化不再是噩梦
aigc·openai·ai编程
量子位8 小时前
Figure 机器人分拣快递新视频曝光,网友:太像人类
llm·ai编程
量子位8 小时前
Gemini 新版蝉联竞技场榜一,但刚发布就被越狱了
ai编程
偶尔的鱼8 小时前
Cursor 1.0 正式发布:AI 编程从「助手」变「队友」,真香预警!
ai编程
志辉AI编程9 小时前
OpenAI深夜放大招!Codex颠覆AI编程
ai编程
皓子10 小时前
海狸IM桌面端:AI辅助开发的技术架构实践
前端·electron·ai编程
柒崽10 小时前
如何搭建一个MCP服务,然后在Cursor中调用,半小时,彻底掌握MCP
mcp
Mapmost10 小时前
【AI技术闲谈】AI一键生成前端代码?实测4款工具后的操作指南
前端·ai编程