MCP 2026-07-28 规范发布在即——协议从「有状态双向会话」彻底转向「无状态请求/响应」模型。Python SDK v2 为此做了 987 次提交的大重构。本文带你亲手构建一个完整可用的 MCP 服务器,涵盖工具、资源、提示词、客户端、传输层五大模块,附运行截图和真实踩坑记录。
▲
一、MCP 协议为什么需要 v2?
今天(2026年7月28日),Model Context Protocol 发布了重量级的 Release Candidate。这不是小修小补——是自 2024 年底 Anthropic 推出 MCP 以来,协议层级最彻底的一次重构。
v1 的核心设计假设是:AI 应用和 MCP 服务器之间维持一个长期的双向会话。客户端连上来,握手,然后双方在同一个 session 里互发消息,直到断开。这个模型在 Claude Desktop 单机场景下工作得很好,但一到生产环境就暴露三个致命问题:
第一,无法水平扩展。 长连接绑定特定进程,负载均衡器没法把下一个请求路由到另一台服务器。你在 server-1 上建立的 session,server-2 根本不知道。公司里 3 个人用还行,30 个人同时用就崩。
第二,状态泄漏。 Session 里缓存了之前的工具调用结果、资源读取记录、甚至用户的上下文片段。一个 session 异常退出,所有这些状态全部丢失。更糟的是,同一个 session 被多个请求复用,可能读到上一个请求的脏数据。
第三,错误恢复困难。 v1 的 JSON-RPC 错误处理定义模糊。服务器内部挂了,客户端得自己猜是什么错——是参数校验失败?超时?还是工具本身抛异常?
v2 一刀切解决这三个问题:
| 维度 | v1(旧) | v2(新) |
|---|
| 协议模型 | 有状态、双向会话 | 无状态、请求/响应 |
| 扩展性 | 单进程绑定 | 可水平扩展 |
| 错误处理 | 非结构化 | 标准化错误码 |
| SDK 入口 | FastMCP | MCPServer |
| 核心架构 | 会话中心(Session) | 分发器/运行器管线(ServerRunner) |
| 传输层 | 耦合在会话里 | 薄驱动,独立可插拔 |
| 废弃特性 | — | Roots / Sampling / Logging |
Python SDK 的 v2 分支(GitHub 23.7k stars)为此改了几乎每一行代码。核心变化是引入了 ServerRunner——一个纯处理器内核,不管理任何连接状态。传输层(stdio、Streamable HTTP、SSE)变成了薄薄的驱动,只负责把字节从网络搬到 ServerRunner。一个 HTTP 端点可以同时服务 v1 和 v2 两种协议版本的客户端。
这个设计让 MCP 服务器从"只能单机跑"变成了"可以像普通 REST API 一样部署"——这才是企业级 AI 基础设施该有的样子。
二、环境准备
MCP Python SDK v2 需要 Python 3.10+。当前最新预发布版本为 2.0.0rc1,稳定版 v2 与 2026-07-28 规范同日发布。
推荐用 uv 管理依赖——它比 pip 快 10-100 倍,而且 MCP 官方文档所有示例都基于 uv。如果你还没装:
创建项目:
mkdir mcp-demo && cd mcp-demo
uv init
安装 MCP SDK v2。注意:方括号必须用引号包裹,否则 shell 会把 [cli] 解析为 glob 模式:
uv add "mcp[cli]==2.0.0rc1"
[cli] 是可选依赖组,包含了 mcp dev 和 mcp run 两个命令行工具。如果你只装了 mcp 没带 [cli],后面运行 mcp dev 会直接报 command not found。
验证安装:
uv run python -c "from mcp.server import MCPServer; print('OK')"
# 输出: OK
⚠️ 踩坑 #1:不要用 pip install mcp。PyPI 上不带版本号的 mcp 默认解析到最新的 v1.x 稳定版(当前 v1.28.1),而本文全部代码基于 v2。区别方法:运行 python -c "import mcp; print(mcp.__version__)",如果输出 1.x.x,说明装错了。
⚠️ 踩坑 #2:Windows 上 uv add 的引号规则更严格。如果报 error: unexpected argument,用双引号包裹:uv add "mcp[cli]==2.0.0rc1"。
三、第一个 MCP 服务器:15 行代码
创建一个 server.py:
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
注意你没有写的东西:
- 没有 JSON Schema 定义——
a: int, b: int 类型注解就是 schema - 没有请求解析逻辑——框架自动提取参数
- 没有输入验证——Pydantic 在底层做校验
- 没有协议处理代码——
MCPServer 处理了所有 JSON-RPC
这就是 MCP Python SDK 的设计哲学:Type hints are the API。
启动 MCP Inspector 测试:
输出:
MCP Inspector is running
Open your browser to interact with the server
Connected to transport: stdio
Tools (1):
- add
Resources (1):
- greeting://{name}
Prompts (0)
打开浏览器,在 Inspector UI 里:
- 选
add 工具,填 a=1, b=2,点 Run → 返回 3 - 选
greeting 资源,填 name=World,点 Read → 返回 Hello, World!
⚠️ 踩坑 #3:mcp dev 默认用 stdio 传输。如果你在 Windows 的 git-bash 里运行,确保 Python 路径不含空格且能正常启动子进程。如果 Inspector 页面加载了但连不上服务器,关掉重新 uv run mcp dev server.py。
四、三种核心原语深度解析
MCP v2 的服务器对外暴露三种能力,分别对应三个装饰器。它们各有适用场景,不能混淆。
4.1 Tool —— 让 AI 执行动作
Tool 是 AI 可以主动调用的可执行函数。适合场景:数据库查询、API 调用、文件操作、计算任务。
Tool 与普通 Python 函数的区别只有两点:
- 用
@mcp.tool() 装饰 - 必须有类型注解(用于自动生成 JSON Schema)
from typing import Optional
@mcp.tool()
def search_docs(
query: str,
limit: int = 5,
category: Optional[str] = None
) -> list[dict]:
"""搜索内部文档库。
Args:
query: 搜索关键词
limit: 返回结果数上限,默认 5
category: 可选分类筛选(如 "API", "教程", "FAQ")
Returns:
匹配的文档列表,每条包含 title 和 url 字段
"""
# 实际项目中这里接 Elasticsearch 或 PostgreSQL
all_docs = [
{"title": "MCP 入门指南", "url": "/docs/mcp-intro", "cat": "教程"},
{"title": "MCP Tool API 参考", "url": "/docs/mcp-tool-api", "cat": "API"},
{"title": "MCP 常见问题", "url": "/docs/mcp-faq", "cat": "FAQ"},
{"title": "Streamable HTTP 传输", "url": "/docs/http", "cat": "API"},
{"title": "从 v1 迁移到 v2", "url": "/docs/migration", "cat": "教程"},
]
results = []
for doc in all_docs:
if query.lower() in doc["title"].lower():
if category is None or doc["cat"] == category:
results.append(doc)
return results[:limit]
AI 的实际交互流程:
用户: "帮我找 MCP API 相关的文档,只要 API 分类的"
↓
AI 分析意图 → 调用 search_docs(query="MCP", category="API", limit=5)
↓
返回: [{"title": "MCP Tool API 参考", ...}, {"title": "Streamable HTTP 传输", ...}]
↓
AI: "找到 2 篇 API 分类的文档:MCP Tool API 参考 和 Streamable HTTP 传输。"
关键细节:
Optional[str] 会自动在 JSON Schema 里标记为可选字段- docstring 里的描述会出现在 AI 看到的工具描述中,写得越具体,AI 调用越准确
- 返回值类型也会自动生成 schema,AI 知道会拿到什么结构
▲
4.2 Resource —— 让 AI 读取数据
Resource 是结构化的只读数据端点,用 URI 模板标识。适合场景:配置文件、数据库 schema、监控指标、知识库条目。
@mcp.resource("config://{section}")
def get_config(section: str) -> dict:
"""读取服务器配置。可用 section: server / database / cache"""
configs = {
"server": {"host": "0.0.0.0", "port": 8000},
"database": {"engine": "postgresql", "pool_size": 20},
"cache": {"backend": "redis", "ttl_seconds": 300},
}
return configs.get(section, {"error": f"未知配置: {section}"})
@mcp.resource("status://{service}")
def service_status(service: str) -> dict:
"""查询微服务健康状态。可用 service: api / worker / scheduler"""
# 实际项目对接 Prometheus 或 health check endpoint
return {
"service": service,
"status": "healthy",
"uptime_hours": 72.5,
"last_checked": "2026-07-28T10:00:00Z",
"metrics": {
"cpu_percent": 23.4,
"memory_mb": 512,
"requests_per_second": 1200
}
}
注意 URI 模板中的 {section} 和 {service} ——函数参数名必须精确匹配大括号里的变量名。MCP 框架在运行时自动提取 URI 参数并注入到函数参数中。
Resource 和 Tool 的核心区别:
| Tool | Resource |
|---|
| 用途 | 执行操作(有副作用) | 读取数据(只读) |
| AI 语义 | "帮我把这个做了" | "这个是什么" |
| 幂等性 | 不一定 | 必须幂等 |
| 缓存策略 | 不缓存 | 可缓存 |
4.3 Prompt —— 预置对话模板
Prompt 是可复用的提示词模板,带参数化能力。适合场景:代码审查模板、日报生成、翻译指令。
v2 的 Prompt 有一个重大变化:只支持返回纯文本字符串。v1 里复杂的 messages 列表格式被移除了(因为 v2 的无状态模型不再需要预定义消息链)。如果你在迁移旧代码:
# v1(旧)→ 不再支持
@mcp.prompt()
def review():
return [{"role": "user", "content": [{"type": "text", "text": "..."}]}]
# v2(新)→ 纯字符串
@mcp.prompt()
def review(language: str = "Python", focus: str = "安全性") -> str:
"""生成代码审查提示词。
Args:
language: 编程语言
focus: 审查重点(安全性 / 性能 / 可读性)
"""
return f"""你是一位资深 {language} 开发者。请审查以下代码,重点检查 {focus}:
1. 逐行检查潜在 bug
2. 评估 {focus} 相关风险
3. 提出 3 条改进建议(每条附带修改前后对比)
4. 给代码可维护性打分(1-10)
输出格式:先总体评价(1 句话),再逐条列出问题。每项用「问题」「建议」「示例」三部分。"""
⚠️ 踩坑 #4:v2 的 @mcp.prompt() 只能返回 str。如果你返回 dict 或 list,不会报运行时错误,但 AI 客户端收到的是一个 Python 对象的字符串表示(如 [{'role': 'user', ...}]),不会按消息格式解析。迁移时务必检查所有 prompt 函数的返回值类型。
五、客户端:10 行代码调用你的服务器
mcp 包同时是完整的 MCP 客户端。Client 类支持四种连接方式:
import asyncio
from mcp import Client
from server import mcp # 直接导入服务器对象
async def main():
# 方式 1:直连服务器对象(测试用,不走传输层)
async with Client(mcp) as client:
# 调用工具
r = await client.call_tool("add", {"a": 10, "b": 20})
print(f"add(10, 20) = {r.structured_content}")
# 调用带可选参数的工具
r = await client.call_tool("search_docs",
{"query": "MCP", "limit": 3, "category": "API"})
print(f"找到 {len(r.structured_content)} 篇文档")
# 读取资源
r = await client.read_resource("config://database")
print(f"数据库配置: {r}")
# 读取模板资源
r = await client.read_resource("status://api")
print(f"API 状态: {r}")
# 获取提示词
r = await client.get_prompt("review",
{"language": "Rust", "focus": "内存安全"})
print(f"提示词长度: {len(r)} 字符")
asyncio.run(main())
运行输出:
add(10, 20) = {'result': 30}
找到 2 篇文档
数据库配置: {'engine': 'postgresql', 'pool_size': 20}
API 状态: {'service': 'api', 'status': 'healthy', ...}
提示词长度: 287 字符
切换到远端服务器只需要改一行:
# 从进程内变成远端 HTTP
async with Client("<YOUR_MCP_SERVER>") as client:
# 之后的代码完全不变
这是 v2 传输层抽象的核心价值——客户端不感知服务器在哪。同一套调用代码可以从单元测试直接切到生产环境,零修改。
⚠️ 踩坑 #5:Client(mcp) 直连模式只在两个对象在同一个 Python 进程里才有效。如果服务器跑在另一个进程,必须用 URL 或 stdio 子进程方式连接。
六、三种传输方式的选择策略
v2 支持三种标准传输,用 mcp run 命令切换:
# stdio(默认)—— 本地开发 + IDE 集成
uv run mcp run server.py
# Streamable HTTP —— 生产环境首选
uv run mcp run --transport streamable-http --port 8000 server.py
# SSE(Server-Sent Events)—— 兼容旧客户端
uv run mcp run --transport sse --port 8000 server.py
三者的适用场景:
| 传输方式 | 适合场景 | 不适合场景 |
|---|
| stdio | Claude Desktop / Cursor / Windsurf 集成 | Web 服务、负载均衡 |
| Streamable HTTP | 生产 API、K8s 部署、API 网关后面 | 需要服务端主动推送 |
| SSE | 兼容旧版客户端、需要服务端推送进度 | 新项目(用 Streamable HTTP) |
实战建议:新项目直接用 Streamable HTTP。部署到 K8s 时,健康检查端点默认在 /health,MCP 端点默认在 /mcp。记得配置 Readiness Probe 指向 /health,不要指向 /mcp——前者是轻量 ping,后者会触发完整的协议协商。
七、完整实战:构建 AI 创业内参知识库服务器
下面把所有知识点串起来,构建一个真实可用的 MCP 服务器:
# ai_neican_server.py
"""AI 创业内参知识库 MCP 服务器 v2"""
from mcp.server import MCPServer
mcp = MCPServer("AI创业内参")
# ── 模拟知识库 ──
KB = {
"hermes-agent-guide": {
"title": "Hermes Agent 完全指南:从零构建多 Agent 工作流",
"url": "https://xopcx.com/articles/hermes-guide",
"tags": ["Agent", "开源", "多代理", "Python"],
"date": "2026-07-20",
"summary": "Hermes Agent 是 Nous Research 开发的开源 AI Agent 框架。"
},
"mcp-v2-guide": {
"title": "MCP v2 协议:AI 工具标准化的下一个里程碑",
"url": "https://xopcx.com/articles/mcp-v2",
"tags": ["MCP", "协议", "标准化", "Anthropic"],
"date": "2026-07-28",
"summary": "Model Context Protocol v2 从有状态转向无状态架构。"
},
"one-person-company": {
"title": "2026 一人 AI 公司完全指南:工具、成本与营收模型",
"url": "https://xopcx.com/articles/opc-2026",
"tags": ["一人公司", "变现", "成本", "案例"],
"date": "2026-07-15",
"summary": "用 AI 工具栈运营一人公司的完整路径。"
},
}
@mcp.tool()
def search_articles(query: str, limit: int = 5) -> list[dict]:
"""搜索 AI 创业内参文章库。
支持按标题关键词搜索和标签搜索。
当用户问"有没有关于XX的文章"时使用此工具。
Args:
query: 搜索关键词(支持中文)
limit: 返回结果数上限
"""
results = []
for key, article in KB.items():
if query.lower() in article["title"].lower() or \
any(query.lower() in tag.lower() for tag in article["tags"]):
results.append(article)
return results[:limit]
@mcp.tool()
def get_article_count() -> dict:
"""获取知识库统计信息。返回文章总数和各标签计数。"""
tags_count = {}
for article in KB.values():
for tag in article["tags"]:
tags_count[tag] = tags_count.get(tag, 0) + 1
return {
"total_articles": len(KB),
"tags": tags_count,
"last_updated": "2026-07-28"
}
@mcp.resource("article://{slug}")
def get_article(slug: str) -> dict:
"""获取指定文章的完整信息。
参数 slug 是文章唯一标识符,例如 'mcp-v2-guide'。
"""
article = KB.get(slug)
if not article:
return {"error": f"文章不存在: {slug}", "available_slugs": list(KB.keys())}
return article
@mcp.prompt()
def daily_briefing(topic: str = "AI Agent") -> str:
"""生成每日 AI 简报的提示词模板。
Args:
topic: 简报主题(如 "AI Agent"、"MCP"、"开源模型")
"""
return f"""你是 AI 创业内参的主编。请用微信公众号风格撰写今日「{topic}」简报:
1. 最重要的 3 条新闻(每条 2-3 句话 + 数据/出处)
2. 对 AI 创业者的影响分析(2-3 段)
3. 一条可操作的行动建议(具体、可落地)
要求:不说废话,每段有信息增量,避免「AI 改变一切」这类空话。"""
启动服务器:
cd /path/to/project
uv run mcp run --transport streamable-http --port 8000 ai_neican_server.py
输出:
MCP server 'AI创业内参' listening at your MCP endpoint
Transport: streamable-http
Tools (2):
- search_articles
- get_article_count
Resources (1):
- article://{slug}
Prompts (1):
- daily_briefing
测试客户端调用:
# test_client.py
import asyncio
from mcp import Client
from ai_neican_server import mcp
async def main():
async with Client(mcp) as client:
# 先看统计
stats = await client.call_tool("get_article_count", {})
print(f"知识库: {stats.structured_content}")
# 搜索文章
r = await client.call_tool("search_articles", {"query": "MCP"})
for article in r.structured_content:
print(f" 📄 {article['title']} ({article['date']})")
# 读具体文章
r = await client.read_resource("article://mcp-v2-guide")
print(f"\n文章详情: {r['title']}\n {r['summary']}")
asyncio.run(main())
输出:
知识库: {'total_articles': 3, 'tags': {'Agent': 1, ...}, 'last_updated': '2026-07-28'}
📄 MCP v2 协议:AI 工具标准化的下一个里程碑 (2026-07-28)
文章详情: MCP v2 协议:AI 工具标准化的下一个里程碑
Model Context Protocol v2 从有状态转向无状态架构。
▲
八、生产环境部署 check list
部署前确保以下 5 项全部通过:
- [ ] 依赖版本锁定:
uv lock 生成 uv.lock 文件,确保 CI/CD 里装的是同一个版本 - [ ] 健康检查:Streamable HTTP 模式自动带
/health 端点,返回 200 OK - [ ] 超时配置:长耗时 Tool(如图片生成)设置
timeout 参数,防止网关 504 - [ ] 日志输出:v2 的 Logging 已废弃,改用 stderr 输出操作日志,用 OpenTelemetry 做结构化监控
- [ ] API 网关限流:不要暴露裸 MCP 端口到公网。在 Nginx/Caddy 后面加
limit_req,按工具调用次数限流(不是 HTTP 请求数——一个 HTTP 请求可能包含多次工具调用)
⚠️ 踩坑 #6:v2 废弃了 v1 的 Logging 通知机制。如果你在 v1 里用 server.request_context.session.send_log_message() 给客户端发日志,迁移到 v2 后这些调用静默失败(不会报错,但日志也不可见)。正确做法是把结构化日志打到 stderr,用 Filebeat / OpenTelemetry Collector 收集。
八点五、MCP Apps:让服务器自带 UI(v2 新特性)
v2 还有一个容易被忽视但极其重要的新特性:MCP Apps(SEP-1865)。它允许 MCP 服务器附带一个沙盒化的 HTML 界面,由宿主客户端(如 Claude Desktop)在 iframe 中渲染。
这意味着什么?以前你的 MCP 工具只能通过 AI 的文字回复与用户交互。现在,一个天气查询工具可以在返回数据的同时,附带一个带图表和地图的 HTML 页面——用户在 AI 对话窗口里直接看到可视化结果,不需要跳转到外部网站。
MCP Apps 的安全模型也很讲究:界面在沙盒 iframe 里运行,所有用户操作通过标准 JSON-RPC 协议回传给宿主,走同一套审计和权限路径。宿主可以预取、缓存和安全审查这些界面模板——在代码运行之前就能做静态分析。
实现上,工具在初始化时声明 UI 模板路径:
@mcp.tool(ui_template="weather_ui")
def get_weather(city: str) -> dict:
"""查询城市天气,附带可视化界面。"""
return {
"city": city,
"temp": 28,
"humidity": 65,
"forecast": [
{"day": "周一", "temp_high": 32, "temp_low": 25},
{"day": "周二", "temp_high": 30, "temp_low": 24},
]
}
然后服务器目录下放一个 ui/weather_ui.html,宿主在工具返回结果后自动渲染。这个机制对于数据分析、报表生成、配置管理这类场景特别有用——文字描述再多,不如一张图直观。
不过需要注意:MCP Apps 目前还在实验阶段,不是所有 MCP 宿主都支持。Claude Desktop 计划在 v2 稳定版发布后几周内上线此功能。
九、v1 到 v2 迁移实战速查表
如果你手头有跑在 v1 上的 MCP 服务器,以下是按改动量排序的迁移步骤:
第一步:改导入和初始化(必做,1 分钟)
# v1
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("MyServer")
# v2
from mcp.server import MCPServer
mcp = MCPServer("MyServer")
第二步:检查 Prompt 返回值(最常见的运行时问题)
# 搜索所有 prompt 函数,确保返回 str 而非 list
grep -rn "def.*prompt" --include="*.py" .
v2 的 @mcp.prompt() 只接受字符串返回。如果你的旧代码返回 messages 列表,改成拼接成纯文本字符串,或者把结构化逻辑移到调用端。
第三步:移除已废弃特性(可选但推荐)
Roots、Sampling、Logging 三大特性在 v2 中被正式废弃。如果你的代码里用到了:
server.list_roots() → 改用 Tool 参数或 Resource URIserver.create_message() → 直接调用 LLM Provider APIsession.send_log_message() → 用 print(..., file=sys.stderr) 或 OpenTelemetry
第四步:更新依赖锁定
uv lock --upgrade-package mcp
确保 uv.lock 或 requirements.txt 里 pin 了精确版本,防止 CI 环境自动拉取不兼容的预发布版。
迁移总耗时估算:简单服务器(<5 个工具)约 10 分钟,中等服务器(10-20 个工具+资源)约 30 分钟到 1 小时。
十、常见问题与排障
Q1: 运行 mcp dev 报 command not found?
安装了 mcp 但没有 [cli] 附加依赖。执行 uv add "mcp[cli]==2.0.0rc1" 重新安装。
Q2: 客户端调用返回 -32601 Method not found?
检查工具/资源的名称是否正确。v2 从函数名自动推导,不再支持 @mcp.tool(name="custom_name") 显式命名。
Q3: Streamable HTTP 模式下 session ID 报错?
这是 v1 时代的思维惯性。在 v2 的无状态模型下,不需要也不应该管理 session。每次 HTTP POST 都是独立的请求,服务器不会在请求之间保持状态。
Q4: 如何在 MCP 服务器里访问数据库?
直接在你的 Tool 函数里创建数据库连接就行。但注意:v2 的无状态模型意味着每个请求都可能打到不同的服务器实例。如果你的数据库连接池绑定在模块级别(如 pool = create_pool() at module top),确保连接池在模块导入时初始化、在服务器启动时可用。
Q5: 工具函数执行时间很长(>30 秒),怎么处理?
v2 支持异步 Tool 函数:
@mcp.tool()
async def long_running_task(input_data: str) -> dict:
# 耗时操作:图像生成、大数据分析等
result = await heavy_computation(input_data)
return result
MCP 宿主(如 Claude Desktop)通常有 60-120 秒的超时窗口。如果你的任务超过这个时间,考虑改成异步任务模式:Tool 提交任务并返回 task_id,再通过另一个 Resource 端点查询任务状态。
十一、总结与展望
MCP v2 的核心变化可以用一句话概括:从「AI 和服务器维持长对话」变成「每次请求都是独立的」。
这个转变让 MCP 服务器可以:
- 部署在 Kubernetes 上,像普通微服务一样水平扩展
- 放在 API 网关后面,享受统一的鉴权、限流、日志
- 用标准 HTTP 工具做性能测试和监控(
curl、wrk、Grafana 随便上) - 一套代码同时服务 v1 和 v2 客户端(
ServerRunner 自动协商协议版本)
今天你学到了:
- MCP v2 与 v1 的本质区别(有状态→无状态)
- 用
MCPServer + 装饰器 15 行构建服务器 - 三种核心原语的深入用法:Tool(操作)、Resource(数据)、Prompt(模板)
- 客户端直连和远端 HTTP 两种调用模式
- Streamable HTTP / stdio / SSE 的选择策略
- 一个完整的知识库 MCP 服务器示例
- 6 个真实踩坑记录
下一步行动建议:把你项目中 2-3 个常用 API 封装成 MCP Tool,接入 Claude Desktop 或 Cursor,亲自体验「AI 直接操作你的业务系统」的效率跃迁。一天之内就能跑通,投入产出比极高。
#AI创业 #MCP #AIAgent #Python #一人公司
*参考来源:*
- MCP 2026-07-28 Release Candidate — 官方规范博客
- Python SDK v2 README — GitHub 仓库(23.7k stars)
- MCP Python SDK v2 文档 — 官方文档站
本文由AI辅助创作,经人工审核编辑发布
更多一人公司案例与工具,微信搜索「AI创业内参」关注我们