Sooua
登录
返回文章列表
Codex··4 分钟阅读

MCP 集成:扩展 Codex 的能力边界

MCP(Model Context Protocol)是 OpenAI 推出的标准化工具集成协议,允许 Codex 调用外部系统(数据库、浏览器、文档平台、GitHub 等)。

官方原文索引: Model Context Protocol (MCP) / MCP Servers


1. 核心架构与原理解析

MCP(Model Context Protocol)是 OpenAI 推出的标准化工具集成协议,允许 Codex 调用外部系统(数据库、浏览器、文档平台、GitHub 等)。

MCP vs 传统工具调用的区别:

维度传统 Function CallMCP
协议各平台私有标准化 JSON-RPC
发现硬编码运行时自动发现工具列表
上下文单次调用可维护跨调用状态
生态孤立跨平台复用(Claude、Codex 等)

MCP 架构拓扑:

MCP 传输方式:

方式适用场景启动方式
stdio本地工具(文件系统、数据库客户端)Codex 启动子进程
HTTP/SSE远程服务(文档平台、云 API)独立运行,Codex 连接

2. 工程落地与代码示例

安装 MCP 服务器

# 列出已配置的 MCP
codex mcp list
 
# 添加 Context7 文档 MCP
codex mcp add context7 npx -y @upstash/context7-mcp
 
# 查看特定 MCP 配置
codex mcp get context7
 
# 在交互会话中查看可用工具
> /mcp

配置 MCP(config.toml)

# 全局 MCP 配置
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
 
[mcp_servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_PERSONAL_ACCESS_TOKEN = "${GITHUB_TOKEN}" }
 
[mcp_servers.postgres]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-postgres"]
env = { DATABASE_URL = "${DATABASE_URL}" }
 
# HTTP 模式 MCP
[mcp_servers.docs]
url = "https://developers.openai.com/mcp"

实战:文档查询 MCP

# 启动会话
> use context7
> React 19 的 use API 和 Suspense 的最佳实践是什么?
 
# Codex 会自动调用 context7 MCP 查询最新文档
# 然后基于查询结果给出建议

实战:GitHub MCP 代码审查

# 查询 PR 详情
> use github
> 查看 openai/codex 仓库最近的 5 个 PR,分析它们的代码质量趋势
 
# Codex 调用 GitHub MCP 获取数据,然后生成分析报告

实战:数据库 Schema 分析

# 连接数据库分析表结构
> use postgres
> 分析 users 表和 orders 表的关联关系,生成 ERD 描述
 
# Codex 调用 PostgreSQL MCP 查询 information_schema
# 然后输出表关系分析

自定义 MCP Server(开发示例)

// 简单的 MCP Server 示例(stdio 模式)
// my-mcp-server.ts
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
 
const server = new Server(
  { name: 'my-api-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
);
 
server.setRequestHandler('tools/list', async () => {
  return {
    tools: [
      {
        name: 'query_internal_api',
        description: '查询内部 API 的状态',
        inputSchema: {
          type: 'object',
          properties: {
            endpoint: { type: 'string', description: 'API 端点' },
          },
          required: ['endpoint'],
        },
      },
    ],
  };
});
 
server.setRequestHandler('tools/call', async (request) => {
  if (request.params.name === 'query_internal_api') {
    const { endpoint } = request.params.arguments;
    // 调用内部 API...
    return { content: [{ type: 'text', text: `API ${endpoint} 状态正常` }] };
  }
  throw new Error('Unknown tool');
});
 
const transport = new StdioServerTransport();
await server.connect(transport);

3. 场景深入:MCP 在团队中的落地

场景:技术文档自动同步

场景:内部工具链集成


4. 💡 核心避坑与最佳实践 (Takeaways)

  • 优先配置文档类 MCP:如 Context7、官方文档 MCP,让 Codex 获取最新 API 信息而非依赖训练数据
  • stdio MCP 会占用进程:每个 stdio MCP 是独立进程,过多会导致资源占用上升
  • 敏感 Token 用环境变量:不要在 config.toml 中硬写密钥,使用 ${ENV_VAR} 引用
  • MCP 不是万能药:本地文件操作、代码编辑仍由 Codex 原生处理,MCP 解决的是"外部活数据"问题
  • 自定义 MCP 遵循协议规范:确保实现 tools/listtools/call 两个核心接口
  • 监控 MCP 调用延迟:慢速 MCP 会拖慢 Agent 响应,必要时加缓存或超时控制
分享

评论

登录 后参与讨论。

加载中…

相关文章