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
  • Python 3.10 or newer

    • Check by running: python --version
    • Install from: https://python.org/
    • Note: Some specialized implementations may require Python 3.11+
  • 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、BA

3. 信息折叠面板
  - 八个可折叠的面板,右侧有三角形图标展开/折叠
  - 面板标题: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 package

Usage:
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: x

Run "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/list
	tools 会被追加到 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
### 配置 ClineMCP 的集成及参数设置 Cline 是一种用于简化智能体开发的工具,而 MCP(Multi-Agent Communication Protocol)协议则提供了多代理通信的标准框架。两者的结合可以显著提升智能体的安全性和灵活性[^1]。 以下是关于如何配置 ClineMCP 的集成及相关参数设置的具体方法: #### 1. 安装依赖环境 在开始之前,需确保已安装必要的软件包和库文件。通常情况下,可以通过以下命令完成基础环境搭建: ```bash pip install cline-sdk mcp-protocol ``` 此操作会自动下载并安装 `cline-sdk` 和 `mcp-protocol` 所需的核心组件。 #### 2. 初始化项目结构 创建一个新的工作目录,并初始化基本的项目结构。推荐按照如下方式组织文件夹: ``` project/ │ ├── config.yaml # 参数配置文件 ├── main.py # 主程序入口 └── agents/ # 存放各个智能体模块 └── agent_1.py ``` 其中,`config.yaml` 文件将用来定义全局性的参数设定。 #### 3. 编写配置文件 (`config.yaml`) 为了实现 ClineMCP 的无缝对接,需要精心设计配置项。下面是一个典型的例子: ```yaml # config.yaml cline: api_key: "your_api_key_here" endpoint: "https://api.cline.com/v1" mcp: protocol_version: "1.0" timeout_seconds: 30 encryption_enabled: true communication_channels: - name: channel_one address: tcp://localhost:8080 - name: channel_two address: udp://remote-server:9090 ``` 上述片段展示了如何指定 API 密钥、服务端地址以及启用加密功能等内容。 #### 4. 实现核心逻辑 (Python 示例) 接下来,在主脚本中加载这些配置并将它们应用到实际运行过程中。这里给出一段示范代码: ```python import yaml from cline import ClineClient from mcp import MultiAgentProtocol def load_config(file_path): with open(file_path, 'r') as file: return yaml.safe_load(file) if __name__ == "__main__": config = load_config('config.yaml') # Initialize Cline client cline_client = ClineClient( api_key=config['cline']['api_key'], endpoint=config['cline']['endpoint'] ) # Setup MCP instance mcp_instance = MultiAgentProtocol( version=config['mcp']['protocol_version'], timeout=config['mcp']['timeout_seconds'], encrypted_communication=config['mcp']['encryption_enabled'] ) for channel in config['mcp']['communication_channels']: mcp_instance.add_channel(channel['address'], channel['name']) print("Cline and MCP integration successfully configured!") ``` 该脚本读取 YAML 格式的配置数据,并据此实例化相应的客户端对象。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值