MCP服务,阿里云百炼,Cline,mysql-mcp-server,MCP通信原理
简介
MCP(Model Context Protocol),模型上下文协议,是一种开放标准,用于将AI模型与外部数据源和工具建立安全的双向连接,它就像AI领域的USB-C接口,为AI模型提供了一种标准化方式来连接不同的数据源和服务,实现自动化工作流。MCP 由 Anthropic 与2024年底提出并开源。
MCP 让 AI 模型不再孤单,可以轻松访问本地文件、数据库,甚至远程的在线服务。
MCP 文档:https://modelcontextprotocol.io/introduction
MCP虽然说是服务,其实它只是连接大模型与下游服务的中间层,以阿里云百炼的 MySql MCP 为例,它是由nodejs开发,使用node运行,你需要配置mysql服务器的地址,而mysql mcp提供有限的几个工具来访问mysql。
因为大模型的不确定性,这导致MCP存在安全性问题,所以MCP一般只提供有限的能力,比如上面说的mysql mcp只提供read-only的操作。
MCP client 充当 LLM 和 MCP server 之间的桥梁,MCP client 的工作流程如下:
- MCP client 首先从 MCP server 获取可用的工具列表。
- 将用户的查询连同工具描述通过 function calling 一起发送给 LLM。
- LLM 决定是否需要使用工具以及使用哪些工具。
- 如果需要使用工具,MCP client 会通过 MCP server 执行相应的工具调用。
- 工具调用的结果会被发送回 LLM。
- LLM 基于所有信息生成自然语言响应。
- 最后将响应展示给用户。
- 我们可以在:https://modelcontextprotocol.io/clients,找到当前支持 MCP 协议的客户端程序。
使用 TypeScript 编写的 MCP server 可以通过 npx 命令来运行,使用 Python 编写的 MCP server 可以通过 uvx 命令来运行。
开源项目
MCP 客户端 awesome-mcp-clients 以及 https://glama.ai/mcp/clients,列出了很多MCP客户端。
MCP 服务端 awesome-mcp-servers 以及 https://glama.ai/mcp/servers,https://github.com/modelcontextprotocol/servers
其他:https://www.pulsemcp.com/servers
Cline
https://github.com/cline/cline
https://docs.cline.bot/mcp-servers/mcp
它是基于 VSCode 的 AI 助手插件,提供了对MCP的深度支持。Cline 会调用某一个 LLM 来对你的任务进行拆解,然后调用MCP服务完成任务。
环境要求:
-
Node.js 18.x or newer
- Check by running:
node --version
- Install from: https://nodejs.org/
- Required for JavaScript/TypeScript implementations
- Check by running:
-
Python 3.10 or newer
- Check by running:
python --version
- Install from: https://python.org/
- Note: Some specialized implementations may require Python 3.11+
- Check by running:
-
UV Package Manager
-
Modern Python package manager for dependency isolation
-
Install using:
curl -LsSf https://astral.sh/uv/install.sh | sh
Or:
pip install uv
-
Verify with:
uv --version
-
Cline有一个MCP Server Marketplace,在Cline中可以安装这些MCP服务。
作为一个AI助手,Cline能做的事情很多,比如让它生成一个网站,它会拆解任务并一步步执行。比如如下任务
任务:按照以下界面描述,使用 vue+vite+tailwind css 创建一个 web UI。这个 Web UI 可以用来搜索顾客的信息,搜到顾客信息以后点击各个部分对应的按钮可以看到顾客各个部分的详细情况。
界面描述:
图中的内容是一个顾客信息搜索界面,界面标题为“Patron Search”。界面包含以下元素:1. 搜索栏- 标签:Patron NO.- 输入框:用于输入顾客编号- 搜索按钮:按钮上有放大镜图标2. 状态标签- 四个状态标签:AC、IN、SU、BA3. 信息折叠面板- 八个可折叠的面板,右侧有三角形图标展开/折叠- 面板标题:Member Detail, Active on floor status, Tier Change, Point Bucket, Gaming Details, Itinerary, Offers, Comments
在Cline执行命令的时候老是出现提示 Shell Integration Unavailable
官方说明 https://github.com/cline/cline/wiki/Troubleshooting-%E2%80%90-Shell-Integration-Unavailable
windows系统需要将默认的终端设置为 Git Bash。如果使用 PowerShell 其版本要求在v7+
关于npx,我的系统已经安装了npx,可能是在安装npm的时候自动安装的。
npx --help
Run a command from a local or remote npm packageUsage:
npm exec -- <pkg>[@<version>] [args...]
npm exec --package=<pkg>[@<version>] -- <cmd> [args...]
npm exec -c '<cmd> [args...]'
npm exec --package=foo -c '<cmd> [args...]'Options:
[--package <package-spec> [--package <package-spec> ...]] [-c|--call <call>]
[-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
[-ws|--workspaces] [--include-workspace-root]alias: xRun "npm help exec" for more info
npx 可以从github下载并运行MCP,它对应的配置为,以 filesystem MCP为例
{"mcpServers": {"filesystem": {"command": "npx","args": ["-y","@modelcontextprotocol/server-filesystem","/Users/username/Desktop","/path/to/other/allowed/dir"]}}}
阿里云百炼
在阿里云百炼平台创建应用可以它的MCP服务,创建的应用可直接访问,整个过程中只有调用千问模型需要消耗费用,而MCP服务以及发布应用都是免费的。
官网:https://bailian.console.aliyun.com/?tab=app#/app-center
Cline实践
在 vscode 中使用 cline 调用一个本地运行的 Mysql MCP,其 README.md 已经说明了如何使用。
cd mcp
git clone https://github.com/dpflucas/mysql-mcp-server.git
cd mysql-mcp-server
npm install
npm run build
set MYSQL_HOST=xxxx
set MYSQL_PORT=3306
set MYSQL_USER=xxxx
set MYSQL_PASSWORD=xxxx
set MYSQL_DATABASE=xxxx
# 创建测试库和测试表
npm run test:setup# 测试定义的工具
npm run test:tools
以上命令可以正常输出。
查看MCP的配置文件 mcp-settings-example.json
{"mcpServers": {"mysql": {"command": "node","args": ["/absolute/path/to/mysql-mcp-server/build/index.js"],"env": {"MYSQL_HOST": "localhost","MYSQL_PORT": "3306","MYSQL_USER": "your-mysql-user","MYSQL_PASSWORD": "your-mysql-password","MYSQL_DATABASE": "your-default-database"},"disabled": false,"autoApprove": []}}
}
可以知道,运行此MCP的命令为node /absolute/path/to/mysql-mcp-server/build/index.js
,且mysql的配置是在环境变量中,由于前面我们已经设置了环境变量,于是可以轻松启动MCP服务
> node D:/dev/php/magook/trunk/server/mcp/mysql-mcp-server/build/index.js
[Setup] MySQL configuration: {host: 'xxxx',port: 3306,user: 'xxxx',database: 'xxxx'
}
[Setup] Creating MySQL connection pool
[Setup] Starting MySQL MCP server
[Setup] MySQL MCP server running on stdio
ctrl+c 退出。
接下来,将这个MCP集成到Cline中去。
首先在vscode中安装Cline,打开Cline界面,点击右上角的MCP Server图标,点击Installed标签,点击Configure MCP Servers,将上面的mcp-settings-example.json
内容粘贴进去,修改一下参数,保存即可,它会自动启动此MCP服务。
现在还需要配置一下大模型,点击Cline右上角的Settings图标,我们设置为阿里云百炼的qwen,注意,API Provider 选择OpenAI Compatible
,然后Base URL为https://dashscope.aliyuncs.com/compatible-mode/v1
,API Key自己去申请,有免费额度,Model ID 输入 qwen-max,点击 Done 保存。
点击 New Task 创建任务,勾选 Auto-approve 全部
统计一下mcp_test_db数据库有几张表,并列出表名
因为上面测试的时候我们已经创建了数据库和表。
我想查看Cline调用大模型的日志,但是还不知道怎么看。
阿里云百炼实践
在阿里云百炼平台创建一个应用并调用平台的MCP服务。
网址 https://bailian.console.aliyun.com/?tab=app#/app-market
应用 --> 应用管理 --> 新增应用,选择智能体应用
选择一个大模型,输入提示词
# 角色
你是一位专业的气象数据分析师,能够查询任意城市的未来4天天气,并生成可视化图表。## 技能
### 技能 1: 查询天气数据
- 使用Amap Maps这个MCP服务,查询任意城市未来7天的天气数据。
- 获取的数据应包括但不限于温度、湿度、风速、降水量等关键气象指标。### 技能 2: 生成可视化图表
- 将查询到的天气数据用QuickChart这个MCP服务转换为易于理解的可视化图表。
- 可视化图表可以是折线图、柱状图或热力图等形式,具体取决于用户的需求和数据特性。
- 确保图表清晰、美观且易于解读。### 技能 3: 提供天气分析报告
- 根据查询到的天气数据,提供简要的天气分析报告。
- 报告应包括对未来4天天气趋势的总结,以及可能对用户活动产生影响的建议。## 限制
- 仅提供与天气相关的数据和分析。
- 生成的图表必须基于查询到的实际天气数据。
- 如果需要调用外部工具或API,请明确说明并提供相应的调用方法。
- 所有输出的内容必须准确无误,不得包含任何误导性信息。
在技能那里添加MCP服务,勾选 Amap Maps 和 QuickChart
直接在右边的对话框输入“武汉”,即可看到效果
点击右上角的发布,切换到发布渠道,选择官方分享渠道,这样就可以为你的应用生成一个分享链接。
在百炼部署的 MCP 服务目前仅支持接入百炼应用,暂不支持在其他 MCP 客户端使用。
阿里云百炼平台计费说明:https://help.aliyun.com/zh/model-studio/new-free-quota#c67a9367f4z6f
MCP通信原理
https://docs.cline.bot/mcp-servers/mcp-transport-mechanisms
目前 MCP 支持 STDIO 模式(本地运行)和 SSE 模式(远程服务)2 种模式。
还是以 mysql-mcp-server 为例,此处以 stdio 为通信模式。
build/index.js
为服务程序,其中定义了两个路由
列出所有工具:ListToolsRequestSchema --> tools/listtools 会被追加到 prompte 后面,这是典型的 Fuction Call模板调用具体工具:CallToolRequestSchema -->tools/call
test-tools.js
文件实现了启动服务,调用tool,处理数据的整个过程。
在stdio模式下,MCP 服务就是一个子进程,在子进程中运行node build/index.js
,
const server = spawn('node', [SERVER_PATH], { env });
在调用tool的时候,向子进程的stdin写入数据,格式为json,以\n
为结束,
server.stdin.write(requestStr + '\n');
子进程处理完将结果接入stdout,调用者需要监听stdout事件
server.stdout.on('data', onData);
返回的结果也是字符串,用\n
分割,每一行为一个消息。
使用标准输入输出进行通信有一些好处:
- Locality: Runs on the same machine as Cline
- Performance: Very low latency and overhead (no network stack involved)
- Simplicity: Direct process communication without network configuration
- Relationship: One-to-one relationship between client and server
- Security: Inherently more secure as no network exposure