MCP 教程(下):AI 运作、意图转化与部署实战

1. AI 如何操作:从意图到执行的标准路径

步骤 1:建立会话与能力协商
客户端先 initialize 完成协议版本与能力协商,随后发送 notifications/initialized 进入运行阶段。

步骤 2:能力发现
客户端通过 tools/listresources/listprompts/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:安装依赖
选择其一即可:

  • 使用 uvuv init 后执行 uv add "mcp[cli]"
  • 使用 pippip install "mcp[cli]"

步骤 2:运行服务器

  • 直接运行:python server.py
  • 若用 uvuv 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_clickbrowser_hoverbrowser_navigatebrowser_navigate_backbrowser_network_requestsbrowser_press_keybrowser_snapshotbrowser_take_screenshotbrowser_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_navigatepuppeteer_screenshotpuppeteer_clickpuppeteer_hoverpuppeteer_fillpuppeteer_selectpuppeteer_evaluate
资源:console://logsscreenshot://<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_navigatebrowserbase_stagehand_actbrowserbase_stagehand_extractbrowserbase_stagehand_observebrowserbase_screenshotbrowserbase_stagehand_get_urlbrowserbase_session_createbrowserbase_session_closemulti_browserbase_stagehand_session_createmulti_browserbase_stagehand_session_listmulti_browserbase_stagehand_session_closemulti_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 的工具分类):
输入类:clickdragfillfill_formhandle_dialoghoverpress_keyupload_file
导航类:navigate_pagenew_pagelist_pagesselect_pageclose_pagewait_for
仿真类:emulateresize_page
性能类:performance_start_traceperformance_stop_traceperformance_analyze_insighttake_memory_snapshot
调试类:evaluate_scriptlist_console_messagesget_console_message
网络类:get_network_requestlist_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_navigatePlaywright_screenshotPlaywright_clickPlaywright_hoverPlaywright_fillPlaywright_selectPlaywright_evaluatePlaywright_console_logsPlaywright_resize
(该项目还提供 codegen 工具,如 start_codegen_sessionend_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. 客户端到服务端的连接与通信(关键细节)

生命周期握手(必须步骤)

  1. Client 发送 initialize 请求,带协议版本与能力。
  2. Server 返回自身能力与信息。
  3. 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. 自测清单(跑通即成功)

  1. 启动 server.py 并确认 http://127.0.0.1:8000/mcp 可访问。
  2. 用 Codex 配置该 URL,并执行 codex mcp list
  3. 在 Codex 中输入:
    “请使用 MCP 的 add 工具计算 2 + 3”。
  4. 若看到工具调用结果返回,则部署成功。

通俗解释:
能让 Codex 真正调用你的工具,并得到结果,就是 MCP Server 的“毕业考试”。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐