Codex CLI 完全指南:第七章·扩展能力——MCP 协议与技能系统

Codex 的内置能力有限,但通过 MCP(Model Context Protocol)协议和 Skills 技能系统,你可以将任意工具、API 和自定义工作流接入 AI 编程助手,实现真正意义上的"AI 指挥一切"。

MCP 协议概述

MCP 是 Anthropic 提出的开放协议,标准化的方式让 LLM 与外部工具通信。类比 USB 协议统一了外设接口,MCP 统一了 AI 工具的连接方式。

Codex ←→ MCP Client ←→ MCP Server ←→ 外部服务/工具
                           ├── 文件系统工具
                           ├── 数据库工具
                           ├── Web API 工具
                           └── 自定义工具

为什么需要 MCP

在没有 MCP 之前,想让 AI 访问数据库,你需要把整个 schema 粘贴到提示词里。用 MCP 后,AI 可以直接查询数据库,实时获取结果。这彻底改变了 AI 与外部世界交互的方式。

MCP 服务器配置

配置文件方式

mcp:
  servers:
    filesystem:
      command: npx
      args:
        - "@anthropic/mcp-server-filesystem"
        - /path/to/allowed/dir

    github:
      command: npx
      args:
        - "@anthropic/mcp-server-github"
      env:
        GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}

    postgres:
      command: npx
      args:
        - "@anthropic/mcp-server-postgres"
        - postgresql://user:pass@localhost:5432/mydb

    slack:
      command: npx
      args:
        - "@anthropic/mcp-server-slack"
      env:
        SLACK_BOT_TOKEN: ${SLACK_TOKEN}

常用 MCP 服务器

| MCP Server | 功能 | 安装命令 |
|------------|------|---------|
| filesystem | 文件系统读写 | @anthropic/mcp-server-filesystem |
| github | GitHub API 操作 | @anthropic/mcp-server-github |
| postgres | PostgreSQL 查询 | @anthropic/mcp-server-postgres |
| sqlite | SQLite 查询 | @anthropic/mcp-server-sqlite |
| puppeteer | 浏览器自动化 | @anthropic/mcp-server-puppeteer |
| slack | Slack 消息 | @anthropic/mcp-server-slack |
| memory | 持久化记忆 | @anthropic/mcp-server-memory |
| brave-search | Web 搜索 | @anthropic/mcp-server-brave-search |

实战:自动查询数据库

配置好 PostgreSQL MCP 后,直接在对话中说:

> 查询上周注册的用户数量,按日分组展示

Codex 会直接运行 SQL 查询并返回格式化结果。

自定义 MCP 服务器

任何实现了 MCP 协议的服务都可以接入。以 Python 为例:

# my_mcp_server.py
from mcp.server import Server, stdio_server
from mcp.types import Tool

server = Server("my-tools")

@server.tool()
async def weather(city: str) -> str:
    """获取指定城市的天气"""
    # 调用天气 API
    return f"{city}: 25°C, 晴"

@server.tool()
async def deploy(service: str, env: str) -> str:
    """部署服务到指定环境"""
    return f"已部署 {service} 到 {env}"

if __name__ == "__main__":
    stdio_server.run(server)

配置接入:

mcp:
  servers:
    custom:
      command: python
      args:
        - ./tools/my_mcp_server.py

Skills 技能系统

Skills 是可复用的 AI 工作流模块——预定义的提示词、工具链和逻辑组合,形成一个"AI 技能包"。

内置 Skills

Codex 自带一些常用 Skills,可在 .opencode/skills/ 找到:

ls .opencode/skills/
# blog-publish/
# code-review/
# test-generator/

创建自定义 Skill

Skills 由 SKILL.md 文件定义:

# deploy-to-vercel

触发:用户说"部署"、"发布到 Vercel"

## 流程
1. 检查 git 状态,确保没有未提交的变更
2. 运行 `npm run build`,检查构建是否成功
3. 运行测试套件
4. 执行 `vercel --prod`
5. 返回部署后的 URL

## 注意事项
- 部署前必须通过全部测试
- 不部署 main/master 以外的分支

使用:

codex "用 deploy-to-vercel skill 部署当前项目"

Skill 的结构

.opencode/skills/my-skill/
├── SKILL.md           # 技能定义文件(必需)
├── prompts/           # 提示词模板
│   └── analyze.md
├── scripts/           # 辅助脚本
│   └── pre-check.sh
└── examples/          # 使用示例
    └── usage.md

Skill 的触发方式

关键词触发:Skill 定义中指定触发短语

显式调用codex run skill-name

上下文匹配:Codex 根据对话内容自动推荐

实战 Skill:代码审查工作流

# code-review-pro

触发:用户说 "review"、"code review"

## 流程
1. 获取当前分支与 main 的 diff
2. 分析变更的文件类型(后端/前端/配置)
3. 对每个变更文件执行对应检查:
   - 后端: 类型安全、SQL注入、异常处理
   - 前端: 可访问性、响应式、性能
   - 配置: 安全敏感字段检查
4. 生成 Markdown 格式的审查报告
5. 自动在 GitHub 上创建 Review 评论

实战 Skill:数据库迁移检查

# db-migration-check

触发:检测到新的数据库迁移文件

## 流程
1. 发现 prisma/schema.prisma 或 migrations/ 的变更
2. 检查迁移是否向后兼容
3. 检查是否有未使用的表/字段
4. 检查外键约束完整性
5. 输出迁移风险评估(低/中/高)

MCP + Skills 的协同

将 MCP 工具和 Skill 工作流结合,能实现端到端的自动化:

Skill 定义流程:做什么

MCP 提供工具:用什么做

Codex 协调执行:怎么做

例如"自动 PR 审查" Skill:

  • Skill 定义:获取 PR diff → 审查 → 评论 → 合并
  • MCP 工具:github (获取 PR)、filesystem (读文件)
  • Codex:理解 diff、生成审查意见

小结

MCP 打通了 AI 与外部工具的连接,Skills 封装了可复用的 AI 工作流。两者结合,Codex 从一个代码编辑器助手升级为一个全栈自动化平台。下一章将学习 VS Code 和版本控制集成。