前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MCP详解及手把手实战

MCP详解及手把手实战

原创
作者头像
知识浅谈
修改于 2025-04-20 14:03:08
修改于 2025-04-20 14:03:08
87900
代码可运行
举报
运行总次数:0
代码可运行

MCP详解及手把手实战

Model Context Protocol(MCP)是一个开放协议,旨在标准化大型语言模型(LLM)与外部数据源和工具之间的集成方式。它为 AI 应用程序提供了一种统一的接口,使得不同的系统和服务能够高效、安全地协同工作。

什么是 MCP?

MCP 可以被视为 AI 应用程序的“USB-C 接口”。正如 USB-C 提供了连接各种设备的标准化方式,MCP 为 LLM 提供了访问多种数据源和工具的统一协议。这使得开发者能够构建更强大、灵活的 AI 驱动应用,如智能 IDE聊天机器人和定制化的工作流程。

MCP 的核心架构

MCP 采用客户端-服务器架构,包括以下主要组件:

  • 主机(Host):如 Claude Desktop、IDE 或其他 AI 工具,负责发起连接。
  • 客户端(Client):在主机应用中与服务器保持一对一的连接。
  • 服务器(Server):提供上下文、工具和提示等功能。

这种架构允许主机应用程序连接到多个服务器,从而访问本地或远程的数据源和服务。

为什么选择 MCP?

MCP 提供了多项优势:

  • 标准化集成:通过统一的协议,简化了 LLM 与外部资源的连接过程。
  • 灵活性:支持在不同的 LLM 提供商和工具之间切换,增强了系统的可扩展性。
  • 安全性:通过在本地或受控环境中运行服务器,确保数据的安全访问。

如何开始使用 MCP?

MCP 提供了多种入门路径:

  • 快速入门:通过示例服务器连接到 Claude Desktop,快速体验 MCP 的功能。
  • 构建服务器:使用 PythonTypeScript 创建自定义的 MCP 服务器。
  • 开发客户端:构建与 MCP 服务器集成的客户端应用程序。

此外,MCP 还提供了调试工具和交互式检查器,帮助开发者测试和优化他们的集成方案。

开发一个MCP服务端

该服务端包含功能:

  • 查询数据库用户信息
  • 新增用户信息到数据库
MCP服务端数据表

MCP服务端代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from mcp.server import FastMCP
from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import mysql.connector
from mysql.connector import errorcode

mcp = FastMCP("server")
@mcp.tool()
def get_user_info(name: str):
    """
    根据用户名查询用户信息
    
    Args:
        name (str): 用户名
        
    Returns:
        dict: 用户信息,包含id, name, age, address字段
        None: 如果未找到用户
    """
    # 数据库连接参数
    db_config = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",  # 默认用户名,根据实际情况修改
        "password": "password",  # 根据实际情况修改
        "database": "test"
    }
    
    # 初始化连接变量
    conn = None
    cursor = None
    try:
        # 创建数据库连接
        conn = mysql.connector.connect(**db_config)
        # 创建游标
        cursor = conn.cursor(dictionary=True)
        # 查询SQL
        sql = "SELECT id, name, age, address FROM user WHERE name = %s"
        # 执行查询
        cursor.execute(sql, (name,))
        # 获取结果
        result = cursor.fetchone()
        return result
    except Exception as e:
        print(f"查询MySQL数据库出错: {e}")
        return None
    finally:
        # 关闭游标和连接
        if cursor:
            cursor.close()
        if conn:
            conn.close()
@mcp.tool()
def create_user(name: str, age: int, address: str):
    """
    创建新用户
    
    Args:
        name (str): 用户名
        age (int): 年龄
        address (str): 地址
        
    Returns:
        dict: 包含操作结果的字典
            - success (bool): 操作是否成功
            - message (str): 操作结果消息
            - user_id (int, 可选): 成功时返回的用户ID
    """
    # 数据库连接参数
    db_config = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "password",
        "database": "test"
    }
    
    # 初始化连接变量
    conn = None
    cursor = None
    try:
        # 创建数据库连接
        conn = mysql.connector.connect(**db_config)
        # 创建游标
        cursor = conn.cursor()
        # 检查用户名是否已存在
        check_sql = "SELECT COUNT(*) FROM user WHERE name = %s"
        cursor.execute(check_sql, (name,))
        count = cursor.fetchone()[0]
        if count > 0:
            return {
                "success": False,
                "message": f"用户名'{name}'已经存在"
            }
        
        # 插入新用户
        insert_sql = "INSERT INTO user (name, age, address) VALUES (%s, %s, %s)"
        cursor.execute(insert_sql, (name, age, address))
        # 提交事务
        conn.commit()
        # 获取新用户ID
        user_id = cursor.lastrowid
        return {
            "success": True,
            "message": "用户创建成功",
            "user_id": user_id
        }
    except Exception as e:
        print(f"创建用户出错: {e}")
        return {
            "success": False,
            "message": f"创建用户错误: {str(e)}"
        }
    finally:
        # 关闭游标和连接
        if cursor:
            cursor.close()
        if conn:
            conn.close()

if __name__ == "__main__":
    mcp.run()

编写代码之后运行

MCP客户端

使用vscode中的cline作为MCP客户端在进行模型对话的时候调用MCP服务端

  1. 安装cline插件
  1. 编辑cline中MCP服务端的配置文件
  1. 使用查询用户信息的询问
  1. 使用新增用户信息的询问

结语

MCP 为 AI 应用程序提供了一个强大、灵活且安全的集成框架,使得 LLM 能够更高效地与各种数据源和工具协同工作。无论是构建智能助手、自动化工作流程,还是开发复杂的 AI 系统,MCP 都是一个值得考虑的解决方案。

参考资料:

保存为主题

全局属性

自定义样式

行数:216

字数:1355

字符数:5089

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MCP详解及手把手实战
    • 什么是 MCP?
    • MCP 的核心架构
    • 为什么选择 MCP?
    • 如何开始使用 MCP?
    • 开发一个MCP服务端
    • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档