第五章:Codex的MCP工作流
App 中的 MCP 工作流
▫️
在 App Settings 或集成入口启用 / 配置 MCP。
回到线程。
用 /mcp 查看当前可见工具。
用自然语言要求 Codex 使用工具。
观察工具调用和权限提示。
Review 结果。
从 0 配一个 MCP 前先确认什么
#QzDBAZzboIOT text { white-space: pre; }#QzDBAZzboIOT .fb0 { stroke: var(--N900-FG, 0.15); }#QzDBAZzboIOT .fb0 {stroke: rgba(31,35,41, 0.15)}#QzDBAZzboIOT .fx0 { stroke-miterlimit: 10; }#QzDBAZzboIOT .fx0 {stroke-miterlimit: 10}#QzDBAZzboIOT .fa1 { fill: rgb(187, 191, 196); }#QzDBAZzboIOT .fa1 {fill: rgb(187, 191, 196)}#QzDBAZzboIOT .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#QzDBAZzboIOT .fx1 {font-style: normal}#QzDBAZzboIOT .fx2 { text-anchor: middle; }#QzDBAZzboIOT .fx2 {text-anchor: middle}#QzDBAZzboIOT .fx3 { dominant-baseline: central; }#QzDBAZzboIOT .fx3 {dominant-baseline: central}#QzDBAZzboIOT .fx4 { stroke: none; }#QzDBAZzboIOT .fx4 {stroke: none}#QzDBAZzboIOT .fc0 { fill: var(--text-caption); }#QzDBAZzboIOT .fc0 {fill: #646a73}#QzDBAZzboIOT .fa2 { fill: var(--text-link-disabled); }#QzDBAZzboIOT .fa2 {fill: rgb(187, 191, 196)}#QzDBAZzboIOT .fa3 { fill: rgb(225, 234, 255); }#QzDBAZzboIOT .fa3 {fill: rgb(225, 234, 255)}#QzDBAZzboIOT .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#QzDBAZzboIOT .fx5 {font-style: normal}#QzDBAZzboIOT .fx6 { text-anchor: start; }#QzDBAZzboIOT .fx6 {text-anchor: start}#QzDBAZzboIOT .fx7 { dominant-baseline: alphabetic; }#QzDBAZzboIOT .fx7 {dominant-baseline: alphabetic}#QzDBAZzboIOT .fc1 { fill: rgb(0, 0, 0); }#QzDBAZzboIOT .fc1 {fill: rgb(0, 0, 0)}#QzDBAZzboIOT .fb1 { fill: var(--N900-FG, 0.15); }#QzDBAZzboIOT .fb1 {fill: rgba(31,35,41, 0.15)}#QzDBAZzboIOT .fb2 { fill: rgb(209, 217, 224); }#QzDBAZzboIOT .fb2 {fill: rgb(209, 217, 224)}#QzDBAZzboIOT .fa4 { fill: var(--bg-body); }#QzDBAZzboIOT .fa4 {fill: #fff}AB12345问题这个工具是本地命令还是远程服务?需要什么账号或 token?它默认能读写什么?App 里是否已经有连接器或插件?为什么重要决定是 stdio、HTTP 还是插件/连接器提供决定密钥放哪里,不能写进仓库决定是否只读、是否需要审批有现成入口时不要重复手写 MCP
App 用户常见场景
#XTmZkbPzaQwI text { white-space: pre; }#XTmZkbPzaQwI .fb0 { stroke: var(--N900-FG, 0.15); }#XTmZkbPzaQwI .fb0 {stroke: rgba(31,35,41, 0.15)}#XTmZkbPzaQwI .fx0 { stroke-miterlimit: 10; }#XTmZkbPzaQwI .fx0 {stroke-miterlimit: 10}#XTmZkbPzaQwI .fa1 { fill: rgb(187, 191, 196); }#XTmZkbPzaQwI .fa1 {fill: rgb(187, 191, 196)}#XTmZkbPzaQwI .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#XTmZkbPzaQwI .fx1 {font-style: normal}#XTmZkbPzaQwI .fx2 { text-anchor: middle; }#XTmZkbPzaQwI .fx2 {text-anchor: middle}#XTmZkbPzaQwI .fx3 { dominant-baseline: central; }#XTmZkbPzaQwI .fx3 {dominant-baseline: central}#XTmZkbPzaQwI .fx4 { stroke: none; }#XTmZkbPzaQwI .fx4 {stroke: none}#XTmZkbPzaQwI .fc0 { fill: var(--text-caption); }#XTmZkbPzaQwI .fc0 {fill: #646a73}#XTmZkbPzaQwI .fa2 { fill: var(--text-link-disabled); }#XTmZkbPzaQwI .fa2 {fill: rgb(187, 191, 196)}#XTmZkbPzaQwI .fa3 { fill: rgb(225, 234, 255); }#XTmZkbPzaQwI .fa3 {fill: rgb(225, 234, 255)}#XTmZkbPzaQwI .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#XTmZkbPzaQwI .fx5 {font-style: normal}#XTmZkbPzaQwI .fx6 { text-anchor: start; }#XTmZkbPzaQwI .fx6 {text-anchor: start}#XTmZkbPzaQwI .fx7 { dominant-baseline: alphabetic; }#XTmZkbPzaQwI .fx7 {dominant-baseline: alphabetic}#XTmZkbPzaQwI .fc1 { fill: rgb(0, 0, 0); }#XTmZkbPzaQwI .fc1 {fill: rgb(0, 0, 0)}#XTmZkbPzaQwI .fb1 { fill: var(--N900-FG, 0.15); }#XTmZkbPzaQwI .fb1 {fill: rgba(31,35,41, 0.15)}#XTmZkbPzaQwI .fb2 { fill: rgb(209, 217, 224); }#XTmZkbPzaQwI .fb2 {fill: rgb(209, 217, 224)}#XTmZkbPzaQwI .fa4 { fill: var(--bg-body); }#XTmZkbPzaQwI .fa4 {fill: #fff}ABC123456场景查官方文档查数据库浏览器验证设计稿核对内部 APIMCP 怎么帮忙连接文档搜索工具只读查询 schema / 样例数据打开本地页面,点按钮,截图读取 Figma 等设计上下文调用公司内部服务注意事项优先一手来源不要给生产写权限需要明确目标 URL注意账号授权最小权限和审计
CLI 管理 MCP 是辅助路径
MCP Server 类型
#pkmikWwNerQk text { white-space: pre; }#pkmikWwNerQk .fb0 { stroke: var(--N900-FG, 0.15); }#pkmikWwNerQk .fb0 {stroke: rgba(31,35,41, 0.15)}#pkmikWwNerQk .fx0 { stroke-miterlimit: 10; }#pkmikWwNerQk .fx0 {stroke-miterlimit: 10}#pkmikWwNerQk .fa1 { fill: rgb(187, 191, 196); }#pkmikWwNerQk .fa1 {fill: rgb(187, 191, 196)}#pkmikWwNerQk .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#pkmikWwNerQk .fx1 {font-style: normal}#pkmikWwNerQk .fx2 { text-anchor: middle; }#pkmikWwNerQk .fx2 {text-anchor: middle}#pkmikWwNerQk .fx3 { dominant-baseline: central; }#pkmikWwNerQk .fx3 {dominant-baseline: central}#pkmikWwNerQk .fx4 { stroke: none; }#pkmikWwNerQk .fx4 {stroke: none}#pkmikWwNerQk .fc0 { fill: var(--text-caption); }#pkmikWwNerQk .fc0 {fill: #646a73}#pkmikWwNerQk .fa2 { fill: var(--text-link-disabled); }#pkmikWwNerQk .fa2 {fill: rgb(187, 191, 196)}#pkmikWwNerQk .fa3 { fill: rgb(222, 224, 227); }#pkmikWwNerQk .fa3 {fill: rgb(222, 224, 227)}#pkmikWwNerQk .fx5 { font: 400 13px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#pkmikWwNerQk .fx5 {font-style: normal}#pkmikWwNerQk .fx6 { text-anchor: start; }#pkmikWwNerQk .fx6 {text-anchor: start}#pkmikWwNerQk .fx7 { dominant-baseline: alphabetic; }#pkmikWwNerQk .fx7 {dominant-baseline: alphabetic}#pkmikWwNerQk .fc1 { fill: rgb(0, 0, 0); }#pkmikWwNerQk .fc1 {fill: rgb(0, 0, 0)}#pkmikWwNerQk .fb1 { fill: var(--N900-FG, 0.15); }#pkmikWwNerQk .fb1 {fill: rgba(31,35,41, 0.15)}#pkmikWwNerQk .fb2 { fill: rgb(209, 217, 224); }#pkmikWwNerQk .fb2 {fill: rgb(209, 217, 224)}#pkmikWwNerQk .fa4 { fill: var(--bg-body); }#pkmikWwNerQk .fa4 {fill: #fff}AB1234类型stdioHTTP / SSE插件携带说明本地命令启动,适合本机工具远程服务,适合团队或云服务Plugin 安装后提供 MCP server
App 用户重点不是协议,而是知道工具从哪里来、权限是什么、结果能否验证。
MCP、Plugins、Connectors、Skills 的区别
不要把 MCP 当万能插件系统。如果只是写固定流程,用 Skill;如果要连接外部工具,用 MCP 或 Connector。
验收清单
一个 MCP 配置写完后,必须过这张表:
常见错误
常见问题
Q1:App 里一定能管理所有 MCP 吗?
不一定。部分配置可能需要 CLI 或 config.toml。但 App 仍是使用主线。
Q2:MCP 工具会不会自动运行?
Codex 会根据任务调用工具,但是否需要审批取决于工具、权限和设置。
Q3:MCP 和 Web search 一样吗?
不一样。Web search 是搜索网页;MCP 是连接具体工具或服务。