article-8-mcp-tutorial-clean.md

什么是MCP协议

MCP(Model Context Protocol,模型上下文协议)是Anthropic在2024年底发布的开放协议,被称为“AI智能体的HTTP”。它的核心思想很简单:如果HTTP让浏览器能和任何服务器通信,那么MCP让AI模型能和任何工具/数据源通信。

article-8-mcp-tutorial-clean.md封面

在2026年,MCP已成为AI Agent开发的实际标准。OpenAI、Google、Microsoft都已支持MCP,GitHub上MCP Server数量超过1万个。

为什么需要MCP

不用MCP时,每个AI应用如果要接入外部工具(数据库、API、文件系统),都需要写定制集成代码。用MCP后:

一次编写,到处使用:一个MCP Server写好,Claude Desktop、Cursor、Copilot等所有MCP客户端都能调用

标准化通信:JSON-RPC 2.0 + 标准化的工具/资源/Prompt定义

安全隔离:MCP Server运行在独立进程中,权限可控

概念速查

| 概念 | 类比 | 说明 |

|——|——|——|

| MCP Client | 浏览器 | AI应用(Claude Desktop、Cursor等) |

| MCP Server | Web服务器 | 提供工具/数据/能力的服务 |

| Tool | API端点 | LLM可调用的函数 |

| Resource | 文件/数据 | LLM可读取的上下文 |

| Transport | HTTP/stdio | 通信方式 |

实操:用Python搭建第一个MCP Server

### 1. 安装SDK

pip install mcp

### 2. 创建天气查询Server

创建一个文件 `weather_server.py`:

from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationCapabilities
from mcp.server.stdio import stdio_server
import json

# 创建MCP Server实例
server = Server("weather-server")

@server.list_tools()
async def list_tools():
    """告诉LLM我能提供哪些工具"""
    return [
        {
            "name": "get_weather",
            "description": "查询指定城市的天气信息",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如'北京'"
                    }
                },
                "required": ["city"]
            }
        }
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    """当LLM调用工具时执行的逻辑"""
    if name == "get_weather":
        city = arguments["city"]
        # 实际项目替换为真实API调用
        weather_data = {
            "北京": {"temp": 32, "condition": "晴"},
            "上海": {"temp": 35, "condition": "多云"},
            "深圳": {"temp": 30, "condition": "阵雨"}
        }
        result = weather_data.get(city, {"temp": 25, "condition": "未知"})
        return [{"type": "text", "text": json.dumps(result, ensure_ascii=False)}]

async def main():
    async with stdio_server() as (read_stream, write_stream):
        await server.run(
            read_stream,
            write_stream,
            InitializationCapabilities(
                tools=NotificationOptions()
            )
        )

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

### 3. 配置Claude Desktop

编辑Claude Desktop的配置文件(macOS):

# 配置文件路径
code ~/Library/Application\ Support/Claude/claude_desktop_config.json

添加MCP Server配置:

{
  "mcpServers": {
    "weather": {
      "command": "python3",
      "args": ["/path/to/weather_server.py"]
    }
  }
}

### 4. 测试

重启Claude Desktop,输入:

北京今天天气怎么样?

Claude会自动发现并调用 `get_weather` 工具,返回北京天气。你可以看到工具调用的过程——Claude会展示它”决定调用哪个工具、传了什么参数、拿到了什么结果”。

MCP生态现状

截至2026年7月,MCP Server生态已覆盖:

数据库:PostgreSQL、MySQL、SQLite、MongoDB

云服务:AWS、GCP、Azure、Cloudflare

开发工具:GitHub、GitLab、Jira、Linear

搜索与数据:Brave Search、Google Maps、Exa

文件系统:本地文件读写、PDF解析、图片处理

你可以在 [github.com/modelcontextprotocol/servers](https://github.com/modelcontextprotocol/servers) 找到官方维护的Server集合。

进阶:构建RAG MCP Server

如果你想让Claude访问你自己的知识库,只需要把上面的 `get_weather` 替换成向量搜索逻辑:

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "search_knowledge_base":
        query = arguments["query"]
        # 1. 用 embedding 模型将 query 转向量
        # 2. 在向量数据库中搜索相似文档
        # 3. 返回 top-k 结果
        results = search(query)  # 你的向量搜索逻辑
        return [{"type": "text", "text": results}]

这样你的Claude就能”读懂”整个公司的内部文档了。

总结

MCP协议的5分钟理解:

1. MCP是AI应用与外部世界通信的标准协议

2. 你写一个MCP Server → 所有MCP客户端都能用

3. LLM自动发现工具、决定何时调用、解释结果

4. 生态正在爆发:从数据库到云服务,已有1万+ MCP Server

现在就去写你的第一个MCP Server吧——天气查询只要20行代码,但它打开了让AI接入任何系统的大门。

MCP与Function Calling有什么区别

初学者常问:LLM本来就有Function Calling能力,为什么还需要MCP?关键区别在于耦合度与复用性

Function Calling是LLM厂商各自的API规范——你在OpenAI API里定义的工具,Claude不认识;你在Claude里定义的工具,Gemini不认识。MCP解决了这个互操作性问题:写一个MCP Server,所有支持MCP的LLM客户端都能调用

更深层的区别在生产部署上。Function Calling要求你的工具逻辑和LLM调用在同一个请求上下文中——这对简单查询没问题,但如果你需要让LLM访问企业内部数据库(涉及认证、权限、审计),把数据库连接信息放在每次API调用的参数中既不安全也不现实。MCP Server作为独立进程运行,LLM通过标准协议调用它,不直接接触数据库的认证信息——安全边界更清晰,审计日志更完整

这就是为什么越来越多的企业选择MCP而非裸Function Calling来构建生产级AI应用。

🔥 关注LC智趣厅,每周一篇实用技术教程,帮你跟上AI开发的最前沿。

👇 关注不错过


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

滚动至顶部
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅