使用 MCP 帮助大模型解决24点问题

大语言模型非常非常强大,但也有一些弱点。例如,需要精确推理与计算的场景、实时数据(如天气)获取等。MCP则是对这类外部能力扩展的一个接口,让大模型/Agent都能够便捷的接入外部工具解决此类问题。

本文通过演示创建一个外部计算24点的程序(MCP Server),让Cursor Agent访问LLM时具备快速的24点计算能力,从而帮助开发者快速了解如何构建一个MCP Server。该24点计算的MCP Server也已经在🤗 Hugging Face对外发布,你也可以接入你的Cursor(或其他MCP Host)进行测试(参考本文小结:在Cursor中配置MCP工具)[1]

创建 MCP Server

现在各种工具框架已经把MCP入门构建的门槛降低非常低了,这里将使用Gradio构建一个24点计算的程序,并以MCP Server的方式提供给各MCP Host(本文是Cursor)使用,同时将该MCP Server发布在🤗 Hugging FaceSpace上,以供其他人测试和使用。

创建24点计算的MCP Server

使用Gradio创建MCP的代码如下:

#
# A project for mcp learning by orczhou
#
from solve_24_game import solve_24_game
import gradio as gr

def gradio_interface(a, b, c, d):
    return solve_24_game([a, b, c, d])

# Create the Gradio interface
demo = gr.Interface(
    fn=gradio_interface,
    title="solve the 24 game/puzzle",
    inputs=[
        gr.Number(label="Number 1", value=1),
        gr.Number(label="Number 2", value=2),
        gr.Number(label="Number 3", value=3),
        gr.Number(label="Number 4", value=4),
    ],
    outputs="text",
    flagging_mode="never",
    description="Solves the 24-point game. Given a list of four numbers, it attempts to find a mathematical expression using addition, subtraction, multiplication, and division that evaluates to 24. Each number must be used exactly once.",
    theme=gr.themes.Ocean()
)

# Launch the interface and MCP server
if __name__ == "__main__":
    demo.launch(mcp_server=True)

Gradio 不仅可以快速构建可视化的交互界面(通常用于机器学习领域),还可以非常简单的构建起MCP Server,并将其托管于🤗 Hugging Face

    demo.launch(mcp_server=True)

在启动时,新增mcp_server=True即可以同时启动一个与此界面“相同”的MCP Server

左侧的代码首先创建了一个如下Web服务:

在创建了上述的Web服务的同时,Gradio还会同时创建了一个如下Endpoint的MCP Server:

https://orczhou-solve-24-game.hf.space/gradio_api/mcp/sse

如果是本地运行,Endpoint则可能是:

http://127.0.0.1:7860/gradio_api/mcp/

这里解决24点问题的代码存储在文件solve_24_game.py中,代码参考:solve_24_game.py。如何解决24点问题并不是本文的重点,这里不做详述。

本地运行该MCP Server

在本地,则只需要使用python3 app.py命令即可运行:

 python3 app.py
* Running on local URL:  http://127.0.0.1:7860
* To create a public link, set `share=True` in `launch()`.

🔨 Launching MCP server:
** Streamable HTTP URL: http://127.0.0.1:7860/gradio_api/mcp/
* [Deprecated] SSE URL: http://127.0.0.1:7860/gradio_api/mcp/sse

在Hugging Face上发布 MCP Server

🤗 Hugging Face上可以非常方便的创建并托管简单的MCP Server。详细的介绍可以参考:Spaces as MCP servers。这里演示如何进行操作。

前提要求

  1. 首先,你要有一个🤗 Hugging Face的账号,注册即可
  2. (可选)可能还需要进行充值与信用卡绑定
  3. 准备好🤗 Hugging FaceToken,并配置好权限

通常,Hugging Face运行程序的资源是需要付费的。但是也有部分免费资源,例如MCP托管的时候,提供了一个免费的CPU Basic(2 vCPU 16 GB RAM)的免费资源(当前免费,未来也可能是计费的)。

在本地代码向Space上推送的时候,则需要通过Token的方式进行认证和权限管理。

创建 Space

进入🤗 Hugging Face,进入Space,点击“+ New Space”创建新的Space,则进入右侧的创建表单。

注意到,在Space Hardware选项中,这里的CPU Basic 2 vCPU 16GB是免费规格,这里用作个人测试故选择免费。

此外,这里选择了Gradio模板进行创建。

可以看到,这里🤗 Hugging Face把相关操作的入门门槛降到了非常低的程度,对初学者非常友好。

提交代码

在完成创建后,可以使用 git想仓库中提交代码,Space则会根据代码架构,完全自动化的构建一个MCP Server向公网提供服务。

代码提交可以参考如下命令:

git clone https://huggingface.co/spaces/orczhou/solve_24_game
cd solve_24_game
git add solve_24_game.py app.py
git commit -m "mcp for 24 point game"
git remote add origin https://huggingface.co/spaces/orczhou/solve_24_game
git push -u origin main

补充说明:首先在Hugging Face托管则需要把程序命名为app.py,此外,还需要编写一个requirements.txt文件说明Pythone程序需要的一些模块,这里仅需要gradio[mcp]

cat requirements.txt
gradio[mcp]

调试

这里使用Hugging FaceGradio构建的MCP服务,可以非常方便的使用可视化的界面进行查看服务,例如,在这里可以通过,如下的URL来进行查看该服务是否正常:solve the 24 game/puzzle

此外,可以通过curl命令进行调试,以确认MCP服务是否正常:

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }' \
  -L \
  https://orczhou-solve-24-game.hf.space/gradio_api/mcp/
data: {
  "jsonrpc":"2.0",
  "id":1,
  "result":{
    "tools":[{
      "name":"solve_24_game_gradio_interface",
      "description":"",
      "inputSchema":{
        "type":"object",
        "properties":{
          "a":{"type":"number", "default":1 },
          "b":{"type":"number", "default":2 },
          "c":{"type":"number", "default":3 },
          "d":{"type":"number", "default":4 }
        }
      }
}]}}

在Cursor中配置该MCP服务

配置新的MCP服务

CursorSettings->Tools & Integrations中找到MCP Tools,就可以通过New MCP Server处编辑mcp.json,从而增加MCP Tools

具体的配置,参考如下:

{
  "mcpServers": {
    "solve_24_game": {
      "type": "sse",
      "url": "https://orczhou-solve-24-game.hf.space/gradio_api/mcp/sse"
    }
  }
} 

查看Cursor中MCP配置状态

首次测试和使用MCP时,还是比较容易出错的。可以通过上述的MCP Tools处(右图)可以查看MCP的状态,已经该MCP中可用的工具。

在Cursor中使用该MCP服务

Agent模式下进行对话,Cursor背后的大模型就可以使用该MCP的能力。为了避免Agent生成代码(Cursor的Agent总是倾向于生成代码解决问题),故使用如下提示词提问:

不要生成任何代码,使用工具计算如下24点问题: 2 5 5 10”。

返回的结果如右图。可以看到,大模型拿到返回的结果(5-(2/10))*5后,进行了必要的解释与回答。MCP详细的调用过程如下,包括了使用的参数、返回的结果:

在我的Cursor上使用该MCP

因为这里创建的MCP Server是运行在公网环境,故在你本地的Cursor或者其他MCP Host上也可以配置和使用该MCP服务,配置的方法参考上述小结“配置新的MCP服务”,这里不再赘述。

其他

更换Gradio的默认配色主题

可以使用 theme=gr.themes.Ocean()选项更改主题选项:

# Create the Gradio interface
demo = gr.Interface(
    ...
    theme=gr.themes.Ocean()
)

更多的配色主题可以参考:Theming Guide

最后

大模型说:“我不需要帮助,愚蠢的人类!”

Leave a Reply

Your email address will not be published. Required fields are marked *