从零开始自建 MCP Server:让大模型连接你的数据和工具

举报
搞点薯条 发表于 2026/09/04 09:43:45 2026/09/04
【摘要】 下面是一篇偏技术博客风格的文章,面向有一定开发经验、想了解 MCP(Model Context Protocol)并尝试自建 MCP Server 的读者。随着大模型应用的发展,AI Agent 正逐渐从“聊天机器人”走向“任务执行助手”。但传统的大语言模型存在一个天然限制:它不知道你的私有数据,也无法直接调用你的业务系统。例如:ChatGPT 不知道你的数据库里的订单信息;Claude 无...

下面是一篇偏技术博客风格的文章,面向有一定开发经验、想了解 MCP(Model Context Protocol)并尝试自建 MCP Server 的读者。


随着大模型应用的发展,AI Agent 正逐渐从“聊天机器人”走向“任务执行助手”。但传统的大语言模型存在一个天然限制:它不知道你的私有数据,也无法直接调用你的业务系统。

例如:

  • ChatGPT 不知道你的数据库里的订单信息;

  • Claude 无法直接访问你的内部知识库;

  • 企业 Agent 不能直接操作 Jira、GitHub、CRM 等系统。

为了解决这个问题,Anthropic 提出了 MCP(Model Context Protocol,模型上下文协议)。它提供了一套标准化协议,让大模型能够安全、统一地访问外部数据源和工具。

本文将介绍如何从零开始搭建一个 MCP Server,让你的 AI Agent 能够调用自己的服务。


一、什么是 MCP?

MCP 全称 Model Context Protocol,是一种用于连接 AI 模型和外部系统的开放协议。

简单理解:

MCP 就像 AI 世界里的 USB 接口。

过去,每接入一个外部服务,都需要单独开发插件:

AI模型
  |
  |-- GitHub Plugin
  |
  |-- Database Plugin
  |
  |-- Slack Plugin

每个插件都有自己的协议。

而 MCP 希望统一成:

             MCP Protocol

                 |
        -------------------
        |        |        |
     数据库    API服务    文件系统

                 |
              AI模型

只要服务支持 MCP,任何兼容 MCP 的 AI 客户端都可以调用。


二、MCP 的核心架构

一个完整的 MCP 系统通常包含三个角色:

1. MCP Host

也就是 AI 应用。

例如:

  • Claude Desktop

  • Cursor

  • 自研 Agent 平台

它负责:

  • 与模型交互;

  • 管理 MCP Server;

  • 将工具能力暴露给模型。


2. MCP Client

Host 内部的 MCP 客户端。

负责:

  • 建立连接;

  • 发送 MCP 请求;

  • 获取工具列表。


3. MCP Server

我们今天重点构建的部分。

它负责向 AI 提供:

  • Tools(工具)

  • Resources(资源)

  • Prompts(提示模板)

例如:

你的 MCP Server 可以提供:

工具:

query_user()
create_order()
search_document()

资源:

customer_database
company_wiki

Prompt:

generate_report

三、自建 MCP Server 的基本流程

整体流程:

创建项目
   |
安装 MCP SDK
   |
实现 Server
   |
定义 Tools
   |
启动服务
   |
连接 Claude/Cursor
   |
测试调用

下面以 Python 为例。


四、环境准备

首先创建项目:

mkdir my-mcp-server

cd my-mcp-server

创建 Python 环境:

python -m venv venv

source venv/bin/activate

安装 MCP SDK:

pip install mcp

项目结构:

my-mcp-server/

├── server.py
├── requirements.txt
└── README.md

五、实现第一个 MCP Server

创建:

server.py

写入:

from mcp.server.fastmcp import FastMCP


mcp = FastMCP(
    "My First MCP Server"
)


@mcp.tool()
def hello(name: str) -> str:
    """
    返回欢迎信息
    """

    return f"Hello {name}"


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

代码非常简单。

这里:

mcp = FastMCP()

创建 MCP 服务。


然后:

@mcp.tool()

表示注册一个工具。

AI 模型看到之后,会知道:

工具名称:

hello

参数:

name:string

作用:

返回欢迎信息

启动:

python server.py

你的第一个 MCP Server 就运行起来了。


六、添加真实业务能力

MCP 的价值不在 Hello World,而在连接真实系统。

例如连接数据库:

用户:

查询订单状态


AI:

调用 MCP Tool


MCP Server:

查询 MySQL


返回结果

例如:

@mcp.tool()
def query_order(order_id:int):

    result = database.query(
        f"""
        select *
        from orders
        where id={order_id}
        """
    )

    return result

然后 AI 就拥有:

query_order()

参数:

order_id

功能:

查询订单

七、连接数据库 MCP 示例

假设企业内部有用户数据库:

MySQL:

users

id
name
email
created_time

可以提供:

@mcp.tool()
def get_user(user_id:int):

    user = mysql.execute(
        """
        SELECT *
        FROM users
        WHERE id=%s
        """,
        (user_id,)
    )

    return user

用户问:

查询张三的信息

模型推理:

需要用户数据

↓

调用 get_user

↓

MCP Server查询数据库

↓

返回结果

八、Resources:给 AI 提供上下文

除了 Tool,MCP 还有 Resource。

例如企业知识库:

/docs

├── company.md
├── product.md
└── api.md

可以暴露:

@mcp.resource(
    "company://docs"
)
def company_docs():

    return open(
        "docs/company.md"
    ).read()

AI 可以读取:

company://docs

获得企业知识。


九、如何接入 Claude Desktop

以 Claude Desktop 为例。

找到配置文件:

macOS:

~/Library/Application Support/
Claude/claude_desktop_config.json

添加:

{
  "mcpServers": {

    "my-server": {

      "command":
      "python",

      "args":[
        "/your/path/server.py"
      ]

    }

  }
}

重新启动 Claude。

如果配置成功:

Claude 会看到:

Available tools:

hello
query_order
get_user

十、MCP Server 开发中的最佳实践

1. 不要把业务逻辑写进 Tool

错误:

@mcp.tool()
def search():

    查询数据库
    处理权限
    格式化结果
    发邮件

应该拆分:

MCP Layer

    |
Service Layer

    |
Database Layer

例如:

server.py

↓

services/order.py

↓

database/mysql.py

2. 做好权限控制

MCP Server 本质是给 AI 开权限。

不要:

@mcp.tool()
def execute_sql(sql):

    return db.execute(sql)

因为模型可能生成:

DROP TABLE users;

更安全:

@mcp.tool()
def search_user(name):

    return query_user(name)

限制能力,而不是开放能力。


3. 返回结构化数据

不要:

return "用户叫张三,今年30岁"

建议:

return {

"user":
{
"name":"张三",
"age":30

}

}

方便模型理解。


4. 做日志记录

建议记录:

时间

调用工具

参数

用户

返回结果

耗时

方便排查:

  • AI 为什么调用错误?

  • 是否存在权限风险?

  • 哪些工具使用频率最高?


十一、MCP 可以应用在哪里?

目前常见场景:

企业知识库

AI Agent

↓

MCP

↓

内部文档

数据分析助手

用户:

分析销售数据


AI:

调用SQL MCP


数据库:

返回结果

DevOps Agent

AI

↓

MCP

↓

Kubernetes

GitHub

Jenkins

自动办公

AI

↓

MCP

↓

邮件

日历

CRM

十二、总结

MCP 的核心价值是:

用统一协议,把 AI 和现实世界的数据、工具连接起来。

自建 MCP Server 的核心步骤:

  1. 安装 MCP SDK;

  2. 创建 MCP Server;

  3. 注册 Tools / Resources;

  4. 连接数据库或业务 API;

  5. 配置 AI Client;

  6. 控制权限和安全。

对于开发者来说,MCP 最大的意义不是“让模型回答更多问题”,而是:

让模型真正拥有执行任务的能力。

未来的 AI Agent,很可能不只是聊天,而是通过 MCP 调用企业内部所有系统,成为真正的智能工作入口。


如果继续深入,可以进一步研究:

  • MCP Server 的 SSE / HTTP 部署方式;

  • 如何用 FastAPI 构建生产级 MCP;

  • 如何给 MCP 增加 OAuth 鉴权;

  • 如何设计企业级 MCP Gateway;

  • 如何让多个 Agent 共享 MCP 能力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。