如何创建MCP

创建属于自己的 MCP (Model Context Protocol) Server 主要有两种主流途径:本地开发部署和云端托管部署。你可以根据自身的技术储备和业务需求选择合适的方案。

方案一:本地开发部署(以 Python 为例)

这种方式适合个人开发者或希望在本地进行开发调试的场景。

1. 准备运行环境

确保你的电脑已安装 Python 环境,且版本要求 >=3.10。

2. 安装依赖包

在终端中运行以下命令安装 MCP 核心库及你需要的第三方库(例如连接数据库的 pymysql):

python 复制代码
python -m pip install mcp pymysql

(注:如果 mcp 包安装遇到问题,也可以尝试使用 fastmcp 替代)

3. 编写 MCP Server 代码

创建一个 Python 文件(例如 server.py),导入 FastMCP 并使用装饰器定义你的自定义工具。例如,定义一个查询数据库表结构的工具:

python 复制代码
import os
import pymysql
from pymysql.cursors import DictCursor
from mcp.server.fastmcp import FastMCP

# 初始化 MCP 服务
mcp = FastMCP("MySQL MCP Server")

# 1. 获取数据库连接配置(优先从环境变量读取)
def get_db_config():
    return {
        "host": os.getenv("MYSQL_HOST", "localhost"),
        "port": int(os.getenv("MYSQL_PORT", "3306")),
        "user": os.getenv("MYSQL_USER", "root"),
        "password": os.getenv("MYSQL_PASSWORD", ""),
        "database": os.getenv("MYSQL_DATABASE", ""),
        "charset": os.getenv("MYSQL_CHARSET", "utf8mb4"),
        "cursorclass": DictCursor,
    }

# 2. 获取数据库连接
def get_connection():
    return pymysql.connect(**get_db_config())

# 3. 工具:列出当前数据库中的所有表
@mcp.tool()
def list_tables() -> str:
    """列出当前数据库中的所有表名"""
    conn = get_connection()
    try:
        with conn.cursor() as cursor:
            cursor.execute("SHOW TABLES")
            rows = cursor.fetchall()
            if not rows:
                return "当前数据库中没有表。"
            table_key = list(rows[0].keys())[0]
            tables = [row[table_key] for row in rows]
            return "数据库中的表:\n" + "\n".join(f"  - {t}" for t in tables)
    finally:
        conn.close()

# 4. 工具:查询指定表的结构信息
@mcp.tool()
def query_table_structure(table_name: str) -> str:
    """查询指定表的结构信息,包括字段名、类型、是否为空、键、默认值、额外信息等。
    Args:
        table_name: 要查询的表名
    """
    conn = get_connection()
    try:
        with conn.cursor() as cursor:
            # 查询表字段信息
            cursor.execute(f"DESCRIBE `{table_name}`")
            columns = cursor.fetchall()
            
            # 查询建表语句
            cursor.execute(f"SHOW CREATE TABLE `{table_name}`")
            create_info = cursor.fetchone()
            create_sql = list(create_info.values())[1] if create_info else ""
            
            # 格式化输出
            lines = [f"表 `{table_name}` 的结构:\n"]
            lines.append(f"{'字段名':<20} {'类型':<20} {'允许为空':<10} {'键':<10} {'默认值':<15} {'额外':<20}")
            lines.append("-" * 95)
            
            for col in columns:
                lines.append(
                    f"{col['Field']:<20} {col['Type']:<20} {col['Null']:<10} "
                    f"{col['Key']:<10} {str(col['Default']):<15} {col['Extra']:<20}"
                )
            lines.append(f"\n建表语句:\n{create_sql}")
            return "\n".join(lines)
    finally:
        conn.close()

# 5. 工具:执行 SELECT 查询
@mcp.tool()
def run_sql(query: str, limit: int = 1000) -> list:
    """执行 SELECT SQL 查询并返回结果。
    Args:
        query: 要执行的 SQL 语句
        limit: 返回的最大行数,默认 1000
    """
    if not query.strip().lower().startswith("select"):
        return {"error": "出于安全考虑,仅支持 SELECT 查询语句。"}
        
    conn = get_connection()
    try:
        with conn.cursor() as cursor:
            cursor.execute(f"{query} LIMIT {limit}")
            return cursor.fetchall()
    except Exception as e:
        return {"error": str(e)}
    finally:
        conn.close()

# 启动 MCP 服务
if __name__ == "__main__":
    mcp.run(transport="stdio")

4. 配置 MCP 客户端

本地开发的 MCP 通常使用 stdio 模式,不能直接在终端运行,需要配置到支持 MCP 的客户端(如 Trae、Claude Desktop)中。在客户端的配置文件(如 mcp.json)中添加:

复制代码
1{
2  "mcpServers": {
3    "my-custom-mcp": {
4      "command": "你的python路径/python.exe",
5      "args": ["你的项目路径/server.py"],
6      "env": {
7        "MYSQL_HOST": "localhost",
8        "MYSQL_PORT": "3306"
9      }
10    }
11  }
12}

效果图:

方案二:云端托管部署(以腾讯云轻量服务器为例)

如果你希望 MCP Server 能够 7×24 小时在线,或者不想在本地配置复杂的运行环境,可以使用云服务商提供的一键部署方案。

1. 选择镜像并创建服务器

在腾讯云轻量应用服务器控制台新建服务器时,直接选择 MCP Server 镜像,或者对已有服务器重装系统选择该镜像。

2. 添加并配置 MCP 服务

服务器启动后,在控制台找到"MCP Server管理"面板。你可以选择官方预设的模板(如高德地图),或者点击"添加自定义MCP服务器"。

3. 获取连接地址

配置完成(如填入相关的 API Key)后,云端会自动帮你完成环境和服务的创建。复制生成的连接地址(URL),然后在你的 AI 客户端(如 Cherry Studio、Trae 等)中添加 MCP 服务器,类型选择 SSE 并粘贴该 URL 即可使用。

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui