告别"玩具项目":用 MCP 协议让你的 AI Agent 真正干活

一、MCP 是什么?一句话说清楚

MCP 是 Anthropic 在 2024 年底开源的一套协议标准,定义了AI 模型和外部工具之间如何通信

你可以把它理解成一个标准化的"插座":

复制代码
AI 模型 ←→ MCP 协议层 ←→ 各种工具(数据库 / 文件系统 / API / 浏览器)

在 MCP 出现之前,每个 AI 应用要集成工具,都要自己写一套 function calling 的胶水代码,格式各异,难以复用。

MCP 之后,工具变成了可复用的MCP Server ,模型变成了标准化的MCP Client,协议负责中间的握手与通信。就像 HTTP 统一了 Web 通信一样。


二、三个概念搞懂 MCP 架构

1. Resources(资源)

MCP Server 向模型暴露的可读数据,类似 REST 里的 GET 端点。

json 复制代码
{
  "uri": "file:///home/user/project/README.md",
  "name": "项目说明文档",
  "mimeType": "text/markdown"
}

模型可以请求读取这个资源,Server 把内容返回给它。文件、数据库记录、API 响应------都可以包装成 Resource。

2. Tools(工具)

模型可以调用执行的函数,类似 REST 里的 POST 端点。这是 MCP 最核心的能力。

python 复制代码
@server.call_tool()
async def handle_tool(name: str, arguments: dict):
    if name == "query_database":
        sql = arguments["sql"]
        result = await db.execute(sql)
        return [TextContent(type="text", text=str(result))]

模型决定"我需要查数据库"→ 调用这个 Tool → 拿到真实数据 → 继续推理。

3. Prompts(提示模板)

可复用的提示词片段,让模型以一致的方式完成特定任务。适合封装团队内部的最佳实践。


三、动手:15 分钟写一个能查数据库的 MCP Server

环境:Python 3.11+,SQLite

bash 复制代码
pip install mcp
python 复制代码
# sqlite_server.py
import asyncio
import sqlite3
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent

app = Server("sqlite-assistant")

DB_PATH = "mydata.db"

@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="query",
            description="执行 SQL 查询并返回结果",
            inputSchema={
                "type": "object",
                "properties": {
                    "sql": {
                        "type": "string",
                        "description": "要执行的 SELECT 语句"
                    }
                },
                "required": ["sql"]
            }
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    if name != "query":
        raise ValueError(f"未知工具: {name}")
    
    sql = arguments["sql"]
    
    # 安全起见,只允许 SELECT
    if not sql.strip().upper().startswith("SELECT"):
        return [TextContent(type="text", text="错误:只允许 SELECT 查询")]
    
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.execute(sql)
    rows = cursor.fetchall()
    columns = [desc[0] for desc in cursor.description]
    conn.close()
    
    # 格式化输出
    result = [" | ".join(columns)]
    result.append("-" * 40)
    for row in rows:
        result.append(" | ".join(str(v) for v in row))
    
    return [TextContent(type="text", text="\n".join(result))]

async def main():
    async with stdio_server() as (read, write):
        await app.run(read, write, app.create_initialization_options())

if __name__ == "__main__":
    asyncio.run(main())

把这个 Server 注册到 Claude Desktop 的配置文件:

json 复制代码
{
  "mcpServers": {
    "sqlite-assistant": {
      "command": "python",
      "args": ["/path/to/sqlite_server.py"]
    }
  }
}

重启 Claude Desktop,现在对话框里直接说:

"查一下 users 表里注册时间在本月的用户有多少个"

模型会自动调用你的 Tool,拿到真实数据,给你完整的分析结果。这才是真正干活的 AI Agent。


四、生产环境要注意的四个坑

1. 权限边界要明确

Tool 的 description 写清楚能做什么、不能做什么。模型会认真读这段描述来决定是否调用。上例中只允许 SELECT 是防御第一层,description 里也应该写明"只支持读操作"。

2. 错误信息要对模型友好

返回的错误信息是给模型看的,不是给人看的。要描述清楚"是什么错、为什么错、可以怎么修正",让模型能够自我修复重试。

3. 长上下文的 Resource 要分页

一次性把整个数据库 dump 给模型是典型的反模式。设计 Resource 时要支持分页参数,让模型按需取数据。

4. 本地 stdio vs 远程 HTTP

本地开发用 stdio transport 简单直接。生产部署多用户场景下,用 HTTP+SSE transport,加上认证层(JWT 或 API Key)。


五、MCP 的真正价值:生态

截至 2025 年,Anthropic 官方和社区已经有数百个开箱即用的 MCP Server:

  • 文件系统:读写本地/云端文件
  • 数据库:PostgreSQL、MySQL、MongoDB、Redis
  • 开发工具:GitHub、Jira、Linear
  • 浏览器控制:Playwright、Puppeteer
  • 搜索:Brave Search、Exa
  • 通讯:Slack、Email

这意味着你不需要从零写 Tool,组合现有 Server 就能快速搭出强大的 AI 工作流。

MCP 正在做的事,就是把碎片化的 AI 工具整合成一个可互操作的生态系统。这不是玩具,这是基础设施。


想系统学 MCP?

上面这些只是 MCP 的冰山一角。Resources 的订阅机制、Sampling(让 Server 反过来调用模型)、多 Server 的组合编排、与 LangChain / LlamaIndex 的集成......每一块展开都有不少细节。

推荐去 古法编程 gufacode.com 看 MCP 系列教程------从协议原理到 Server 开发、Client 实现、生产部署,10 章完整覆盖,配套可运行的代码示例。

网站上还有 54 门技术教程,涵盖 AI Agent、RAG、Kubernetes、Rust、鸿蒙开发等热门方向,全部免费。适合想在 AI 时代保持技术竞争力的开发者。

古法编程,传承那些 AI 还无法替代的编程技艺。


本文代码已在 Python 3.11 + mcp 1.x 环境下验证。

相关推荐
AINative软件工程2 小时前
MCP Server 权限边界工程实践:OAuth、最小权限与工具沙箱,别让 Agent 拿到整台机器
架构·llm·ai编程
深念Y2 小时前
AI编程Agent工具定义对比分析
agent·ai编程·开源项目·工具·tool·hermes·ccsiwtch
东小西11 小时前
第8篇:《白嫖社区生态:一行配置接入GitHub的MCP Server,AI直接读我的代码仓库》
openai·ai编程
雨辰AI11 小时前
全集实战:企业级大模型服务化部署全栈指南|FastAPI 封装 + Nginx 负载均衡 + 高可用架构 从单机到生产一步到位
人工智能·ai·负载均衡·fastapi·ai编程
chaors14 小时前
DeepResearchSystem 0x01:Agent 基础
langchain·aigc·ai编程
sweet丶15 小时前
移动端轻量级AI Agent自动化UI验证:sim-use
ai编程
东小西15 小时前
第7篇:《工具的USB接口:我把Function Calling升级成了MCP》
openai·ai编程
腻害兔16 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
大数据点灯人17 小时前
【AI编程】Vibe Coding 模型选型:越贵越好吗?效果/速度/成本平衡指南
编程·ai编程·claude·codex·vibe coding
oort12317 小时前
吃上了自家的细糠,还挺丝滑,用起来手感还行,OortCloud发布新版AI编程平台,下载 OortCodex,Token多,免费薅
大数据·开发语言·人工智能·ai编程