2026年最被低估的AI技术:MCP(Model Context Protocol)——它不是又一个API框架,而是给AI Agent装上"手和脚"的操作系统级协议。Anthropic开源半年,已有2000+社区工具,今天带你从零接入。
你为什么必须学会MCP
先说一个场景,看你是否熟悉:
你用Claude Code写了个自动化脚本,想让Agent帮你部署到服务器。Agent说:"我可以用SSH连接服务器,但我没有SSH工具。"你用OpenClaw搭了内容工厂,想让Agent把文章发到Notion知识库。Agent说:"我看到你的Notion链接了,但我无法写入Notion。"
这就是2026年AI Agent最大的短板:它很聪明,但手被绑在沙箱里。
MCP就是来解决这个问题的。它是一套开放协议(Anthropic开源,MIT许可),定义了AI模型如何安全地调用外部工具、访问外部数据。你可以理解为USB-C for AI——标准化接口,插上任何工具都能用。
已经有2000+社区贡献的MCP工具:飞书、Notion、PostgreSQL、GitHub、Slack、微信企业号、Puppeteer浏览器控制...覆盖了几乎你能想到的所有业务系统。
更关键的是:写一个MCP工具只需要10行Python代码。
MCP的底层逻辑(3分钟理解)
MCP架构只有三个角色:
┌──────────────┐ stdio/SSE ┌──────────────┐
│ MCP Client │ ←───────────────→ │ MCP Server │
│ (Claude Code │ │ (你写的工具) │
│ Hermes Agent│ │ │
│ OpenClaw等) │ │ │
└──────────────┘ └──────┬───────┘
│
┌─────┴──────┐
│ 外部系统 │
│ DB/API/文件 │
└────────────┘
- MCP Client:AI Agent本身(Claude Code、Hermes Agent、OpenClaw、Cursor等)。它发起工具调用请求。
- MCP Server:你写的Python/Node.js/Go程序,实现具体功能(查数据库、发消息、操作文件)。
- Transport:通信方式。本地用stdio(标准输入输出,最简单),远程用SSE(Server-Sent Events,适合微服务架构)。
工作流程极其简单:
1. Agent决定"我需要查一下数据库里的用户订单"
2. Client通过MCP协议调用 query_database 工具
3. 你的MCP Server接收请求、执行SQL、返回结果
4. Agent拿到数据,继续推理
实战一:5分钟写一个"网站健康检查"工具
下面是最简单的MCP Server——让Agent能检查任意URL是否可以访问。
第一步:安装依赖
pip install mcp
第二步:写10行核心代码
# check_url_server.py
import asyncio
import urllib.request
from mcp.server import Server, stdio_server
from mcp.types import Tool, TextContent
app = Server("url-checker")
@app.list_tools()
async def list_tools():
return [
Tool(
name="check_url",
description="检查一个URL是否可以正常访问,返回HTTP状态码和响应时间",
inputSchema={
"type": "object",
"properties": {
"url": {"type": "string", "description": "要检查的URL(含https://)"}
},
"required": ["url"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "check_url":
import time
start = time.time()
try:
req = urllib.request.Request(
arguments["url"],
headers={"User-Agent": "Mozilla/5.0"}
)
resp = urllib.request.urlopen(req, timeout=10)
elapsed = round((time.time() - start) * 1000)
return [TextContent(
type="text",
text=f"✅ {arguments['url']}\n状态码: {resp.status}\n响应时间: {elapsed}ms\n服务器: {resp.headers.get('Server', 'unknown')}"
)]
except Exception as e:
elapsed = round((time.time() - start) * 1000)
return [TextContent(
type="text",
text=f"❌ {arguments['url']}\n错误: {str(e)}\n超时时间: {elapsed}ms"
)]
async def main():
async with stdio_server() as (read, write):
await app.run(read, write, app.create_initialization_options())
asyncio.run(main())
第三步:接入Claude Code
在项目根目录创建 .claude/mcp.json:
{
"mcpServers": {
"url-checker": {
"command": "python3",
"args": ["check_url_server.py"],
"env": {}
}
}
}
第四步:让Agent干活
启动Claude Code,直接说:
帮我检查这三个网站是否可以访问:
1. https://www.xopcx.com
2. https://github.com
3. https://api.openai.com
Claude会自动发现 check_url 工具,依次调用,然后把结果汇总给你。
这就是MCP的核心价值:你写一次工具,所有兼容MCP的Agent都能用。
实战二:进阶——让Agent操控你的数据库
上面是入门级。对一人公司来说,真正有价值的是让Agent能读写你的业务数据。
# db_server.py —— 让Agent操作PostgreSQL
import asyncio, os
import asyncpg
from mcp.server import Server, stdio_server
from mcp.types import Tool, TextContent
app = Server("postgres-tools")
pool = None
@app.list_tools()
async def list_tools():
return [
Tool(
name="query_db",
description="执行只读SQL查询(SELECT),返回JSON结果",
inputSchema={
"type": "object",
"properties": {
"sql": {"type": "string", "description": "SELECT查询语句"}
},
"required": ["sql"]
}
),
Tool(
name="get_table_schema",
description="获取某个表的字段结构",
inputSchema={
"type": "object",
"properties": {
"table_name": {"type": "string"}
},
"required": ["table_name"]
}
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
global pool
if pool is None:
pool = await asyncpg.create_pool(os.environ["DATABASE_URL"])
async with pool.acquire() as conn:
if name == "query_db":
sql = arguments["sql"].strip()
if not sql.upper().startswith("SELECT"):
return [TextContent(type="text", text="❌ 仅允许SELECT查询")]
rows = await conn.fetch(sql)
result = [dict(r) for r in rows]
return [TextContent(
type="text",
text=f"查询结果({len(result)}行):\n" +
"\n".join(str(r) for r in result[:50])
)]
elif name == "get_table_schema":
rows = await conn.fetch(
"SELECT column_name, data_type FROM information_schema.columns WHERE table_name=$1",
arguments["table_name"]
)
return [TextContent(
type="text",
text="\n".join(f"{r['column_name']}: {r['data_type']}" for r in rows)
)]
asyncio.run(main())
然后你可以对Agent说:
查一下上周新增了多少付费用户,按天分组统计,如果趋势下降就提醒我。
Agent会先调 get_table_schema 了解表结构,再调 query_db 执行查询,最后分析数据给你结论。
实战三:一人公司的MCP工具箱(拿来即用)
你不用从零写所有工具。以下是2026年最实用的社区MCP Server:
| 工具 | 安装命令 | 用途 |
|---|---|---|
| GitHub | npx @anthropic/mcp-server-github |
管理Issue/PR/Release |
| Notion | npx @notionhq/mcp-server-notion |
读写Notion数据库 |
| 飞书 | npx @feishu/mcp-server |
发消息、读文档、管理日历 |
| PostgreSQL | npx @anthropic/mcp-server-postgres |
数据库查询 |
| Puppeteer | npx @anthropic/mcp-server-puppeteer |
浏览器自动化(截图/点击/填表) |
| Slack | npx @slack/mcp-server |
发消息、读频道 |
| 文件系统 | npx @anthropic/mcp-server-filesystem |
安全的文件读写 |
| Brave Search | npx @anthropic/mcp-server-brave-search |
网络搜索 |
一键接入Hermes Agent
Hermes Agent从v0.18开始原生支持MCP。在 ~/.hermes/mcp.json 中配置:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-filesystem", "/home/agent/projects"],
"env": {}
},
"github": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
},
"notion": {
"command": "npx",
"args": ["-y", "@notionhq/mcp-server-notion"],
"env": {
"NOTION_API_TOKEN": "${NOTION_TOKEN}"
}
}
}
}
重启Hermes,Agent就能看到这些工具了。
避坑指南:4个新手最容易踩的坑
坑1:Transport选错
- stdio(标准输入输出):适合本地开发,Agent和工具在同一台机器上。99%的场景用这个。
- SSE(Server-Sent Events):适合远程部署,工具跑在另一台服务器上。需要额外处理认证和网络。
别在本地用SSE,别在远程用stdio。
坑2:权限过度开放
MCP工具可以做任何事——查数据库、发消息、删文件。永远不要给Agent root权限。
# ❌ 危险:允许任意SQL
async def call_tool(name, arguments):
await conn.execute(arguments["sql"]) # DROP TABLE也能执行!
# ✅ 安全:只允许SELECT
async def call_tool(name, arguments):
if not arguments["sql"].upper().startswith("SELECT"):
return [TextContent(type="text", text="❌ 仅允许查询操作")]
坑3:忽略错误处理
Agent调用工具时如果报错,它可能会反复重试或给出错误结论。
# ✅ 永远返回结构化错误,不要让异常逃逸
try:
result = do_something()
return [TextContent(type="text", text=f"✅ {result}")]
except Exception as e:
return [TextContent(type="text", text=f"❌ 操作失败: {str(e)}")]
坑4:环境变量泄露
MCP Server的 env 字段会在Agent的上下文中可见。不要在工具描述里暴露Token。
// ❌ 危险
"env": {
"DATABASE_URL": "postgres://admin:MyP@ssword123@db.host.com/prod"
}
// ✅ 安全:用环境变量引用
"env": {
"DATABASE_URL": "${DATABASE_URL}"
}
一人公司的MCP终极方案
把上面所有内容串起来,这就是一个AI创业者一天的工作流:
早上8:00
Hermes Agent 通过 MCP-BraveSearch 扫描热点
→ MCP-Notion 写入选题库
→ MCP-Slack 通知你审核
上午10:00
Claude Code 通过 MCP-Filesystem 读取草稿
→ MCP-Puppeteer 截图数据图表
→ MCP-GitHub 提交到仓库
下午2:00
OpenClaw 通过 MCP-Feishu 发布到飞书群
→ MCP-PostgreSQL 记录发布数据
→ MCP-GitHub 同步到网站
晚上8:00
Agent 通过 MCP-PostgreSQL 生成日报
→ MCP-Slack 发送数据总结
→ 你只需要看一眼
核心逻辑:Agent负责执行,MCP负责连接,你负责决策。
总结
MCP不是又一个需要学习的框架——它是AI Agent生态的"操作系统接口"。2026年,写MCP工具将成为AI创业者的基本功,就像2015年的REST API一样。
三个可以立刻行动的点:
- 今天:跑通"网站健康检查"例子,感受MCP的工作方式
- 本周:接入一个社区MCP Server(推荐从GitHub或文件系统开始)
- 本月:写一个连接你自己业务系统的MCP Server
记住一句话:AI Agent的边界,就是你能用MCP连接到的世界的边界。
AI创业 #MCP协议 #Agent工坊 #一人公司 #AI工具
参考来源:
- MCP官方规范:https://modelcontextprotocol.io
- MCP Python SDK:https://github.com/modelcontextprotocol/python-sdk
- 社区MCP Server汇总:https://github.com/modelcontextprotocol/servers
