MCP 教程(下):AI 运作、意图转化与部署实战
MCP 教程(下):AI 运作、意图转化与部署实战
1. AI 如何操作:从意图到执行的标准路径
步骤 1:建立会话与能力协商
客户端先 initialize 完成协议版本与能力协商,随后发送 notifications/initialized 进入运行阶段。
步骤 2:能力发现
客户端通过 tools/list、resources/list、prompts/list 获取能力目录,必要时监听 list_changed 通知保持目录更新。
步骤 3:模型形成可执行计划
模型根据工具描述与 JSON Schema 生成结构化参数,选择是否调用工具、读取资源或使用提示模板。
步骤 4:执行与回传
客户端执行 tools/call,服务器返回结果;模型据此继续规划或输出最终答复。
通俗解释:
模型不会“直接动系统”,它只会把“要干什么”翻译成“调用哪个工具 + 传什么参数”。
2. 部署路线图:先选传输方式
选择建议
- 本地单机、强调稳定与低延迟:选
stdio。 - 需要远程访问、多人复用、或要接入 Codex:选 Streamable HTTP(有明确 URL)。
为什么需要 Streamable HTTP
Codex 官方说明支持通过 URL 连接 MCP Server(Streamable HTTP),配置可通过 CLI 或 ~/.codex/config.toml 完成。
通俗解释:
stdio 就像“本机插件”,HTTP 就像“远程服务”。要给别的客户端用,就把它变成可访问的 URL。
3. MCP Server 逻辑代码(FastMCP 版本)
下面是一份可直接运行的最小服务器,包含:
- 1 个工具(
add) - 1 个资源(
greeting://{name}) - 1 个提示模板(
greet_user) - 以 Streamable HTTP 暴露在
/mcp
# server.py
from mcp.server.fastmcp import FastMCP
# 推荐:Streamable HTTP + JSON 响应(更适合生产)
# 也可将 stateless_http=False 做有状态会话
mcp = FastMCP(
"Demo MCP",
json_response=True,
stateless_http=True,
streamable_http_path="/mcp",
)
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Get a personalized greeting."""
return f"Hello, {name}!"
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting prompt."""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
if __name__ == "__main__":
# Streamable HTTP 模式
mcp.run(transport="streamable-http", host="127.0.0.1", port=8000)
# 若改为 stdio:
# mcp.run()
以上代码结构与官方 FastMCP Quickstart 一致,工具、资源、提示模板的写法与 Streamable HTTP 的启动方式都能直接对应官方示例。
通俗解释:
这段代码把“能做的事”封装成按钮,把“可读的数据”封装成资料库,把“固定流程”封装成模板。
4. 安装与运行(详细步骤)
步骤 1:安装依赖
选择其一即可:
- 使用
uv:uv init后执行uv add "mcp[cli]"。 - 使用
pip:pip install "mcp[cli]"。
步骤 2:运行服务器
- 直接运行:
python server.py - 若用
uv:uv run server.py
步骤 3:确认服务可访问
官方示例建议通过 MCP Inspector 连接 http://localhost:8000/mcp 检查是否可用。
通俗解释:
能通过 Inspector 打开并看到工具列表,就说明服务“活着”。
5. 目前主流的浏览器 MCP Server 方案(含安装命令、最小启动参数、典型工具)
说明:以下为“当前生态里使用频率较高”的浏览器 MCP Server。你可以把它当作一张“部署速查表”。工具清单以 tools/list 为准,这里给出官方文档中明确列出的常见工具名,便于快速上手。
5.1 Playwright MCP(Microsoft 官方)
安装与启动(stdio):
npx @playwright/mcp@latest
最小配置(stdio,通用 MCP 客户端):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
最小启动参数(HTTP 模式):
npx @playwright/mcp@latest --port 8931
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
典型工具(节选):browser_click、browser_hover、browser_navigate、browser_navigate_back、browser_network_requests、browser_press_key、browser_snapshot、browser_take_screenshot、browser_console_messages。
(工具来自官方 README 的 “Tools” 列表,实际工具可能随版本或 caps 变化)
通俗解释:
Playwright 官方版强调“结构化快照 + 可访问性树”,不依赖视觉模型,适合稳定的自动化。
5.2 Puppeteer MCP(官方参考实现,已弃用)
注意:@modelcontextprotocol/server-puppeteer 在 npm 上已标记 deprecated(不再支持),属于参考实现/非生产维护状态,但包仍可用。
安装与启动(stdio):
npx -y @modelcontextprotocol/server-puppeteer
最小配置(stdio):
{
"mcpServers": {
"puppeteer": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
}
}
}
典型工具(官方文档):puppeteer_navigate、puppeteer_screenshot、puppeteer_click、puppeteer_hover、puppeteer_fill、puppeteer_select、puppeteer_evaluate。
资源:console://logs、screenshot://<name>。
可选配置(自定义浏览器启动参数):
{
"mcpServers": {
"puppeteer": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"],
"env": {
"PUPPETEER_LAUNCH_OPTIONS": "{ \"headless\": false, \"args\": [] }",
"ALLOW_DANGEROUS": "true"
}
}
}
}
通俗解释:
功能上仍是“经典 Puppeteer 浏览器自动化”,但维护已弃用,生产落地需谨慎评估。
5.3 Browserbase MCP(Stagehand 云/本地)
远程托管(SHTTP,推荐):
{
"mcpServers": {
"browserbase": {
"url": "your-smithery-url.com"
}
}
}
本地 STDIO(需要 API Key):
{
"mcpServers": {
"browserbase": {
"command": "npx",
"args": ["@browserbasehq/mcp-server-browserbase"],
"env": {
"BROWSERBASE_API_KEY": "",
"BROWSERBASE_PROJECT_ID": "",
"GEMINI_API_KEY": ""
}
}
}
}
典型工具(节选):browserbase_stagehand_navigate、browserbase_stagehand_act、browserbase_stagehand_extract、browserbase_stagehand_observe、browserbase_screenshot、browserbase_stagehand_get_url、browserbase_session_create、browserbase_session_close、multi_browserbase_stagehand_session_create、multi_browserbase_stagehand_session_list、multi_browserbase_stagehand_session_close、multi_browserbase_stagehand_navigate_session。
资源:screenshot://screenshot-name。
通俗解释:
这是“云端浏览器 + 自然语言动作”的方案,适合并发会话或云端运行。
5.4 Chrome DevTools MCP(社区,CDP)
安装与启动(stdio):
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}
典型工具(节选,官方 README 的工具分类):
输入类:click、drag、fill、fill_form、handle_dialog、hover、press_key、upload_file。
导航类:navigate_page、new_page、list_pages、select_page、close_page、wait_for。
仿真类:emulate、resize_page。
性能类:performance_start_trace、performance_stop_trace、performance_analyze_insight、take_memory_snapshot。
调试类:evaluate_script、list_console_messages、get_console_message。
网络类:get_network_request、list_network_requests。
通俗解释:
更像“调试与分析工具集”,适合性能分析与问题诊断。
5.5 Playwright MCP(ExecuteAutomation 社区)
安装与启动(stdio):
npx @executeautomation/playwright-mcp-server
最小配置(stdio):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@executeautomation/playwright-mcp-server"]
}
}
}
最小启动参数(HTTP/SSE 模式):
playwright-mcp-server --port 8931
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp",
"type": "http"
}
}
}
典型工具(节选,官方 Supported Tools):Playwright_navigate、Playwright_screenshot、Playwright_click、Playwright_hover、Playwright_fill、Playwright_select、Playwright_evaluate、Playwright_console_logs、Playwright_resize。
(该项目还提供 codegen 工具,如 start_codegen_session、end_codegen_session)
通俗解释:
工具覆盖面广、易上手,适合需要“快速把浏览器自动化跑起来”的团队。
6. Codex MCP Client 配置(可直接复制)
Codex 支持在 CLI 或 IDE 扩展中配置 MCP,且配置共享。官方提供两种配置方式:
方式 A:CLI 添加
codex mcp add my-local-mcp --url http://127.0.0.1:8000/mcp
codex mcp list
方式 B:直接改 ~/.codex/config.toml
[mcp_servers.my-local-mcp]
url = "http://127.0.0.1:8000/mcp"
通俗解释:
给 Codex 一个 URL,它就知道“要去哪里找你的 MCP 服务”。
7. 客户端到服务端的连接与通信(关键细节)
生命周期握手(必须步骤)
- Client 发送
initialize请求,带协议版本与能力。 - Server 返回自身能力与信息。
- Client 发送
notifications/initialized,进入正常交互。
简化消息示意
// 1) initialize
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}
// 2) initialize result
{"jsonrpc":"2.0","id":1,"result":{...}}
// 3) initialized notification
{"jsonrpc":"2.0","method":"notifications/initialized"}
stdio 传输要点
- 客户端启动服务器进程,消息走 stdin/stdout。
- 每条 JSON-RPC 消息一行,不能包含内嵌换行。
- stdout 只能输出 MCP 消息,日志应写 stderr。
Streamable HTTP 传输要点
- 服务器提供一个单一 endpoint,支持 GET/POST。
- 可使用 SSE 或流式响应推送多条消息。
- 必须做 Origin 校验、尽量绑定 localhost 并启用认证。
通俗解释:
stdio 是“本地管道”,HTTP 是“网络接口”。两者都用 JSON-RPC 说话,但安全要求不同。
8. 自测清单(跑通即成功)
- 启动
server.py并确认http://127.0.0.1:8000/mcp可访问。 - 用 Codex 配置该 URL,并执行
codex mcp list。 - 在 Codex 中输入:
“请使用 MCP 的 add 工具计算 2 + 3”。 - 若看到工具调用结果返回,则部署成功。
通俗解释:
能让 Codex 真正调用你的工具,并得到结果,就是 MCP Server 的“毕业考试”。
更多推荐


所有评论(0)