臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速7.Google 搜索收录排查:为什么关键词搜得到别人,却搜不到我的网站?Obsidian、双向链接与知识图谱
架构设计
分布式分布式事务RPC原理
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
数据库
mysql01.MySQL基础语法与约束02.MySQL数据库类型03.MySQL多表查询04.MySQL 索引05.MySQL 事务06.MySQL 隔离级别07.MySQL MVCC08.MySQL 锁09.EXPLAIN10.慢查询与 SQL 优化
mysql面试题01.索引问题02.事务与隔离级别03.锁机制04.存储引擎与性能优化05.用户权限、字符集与备份恢复
mysql实战01.EXPLAIN实战02.测试环境菜单误删排查与恢复03.MySQL IN 详解
网络
网络安全1.无线监听网卡苹果M系列虚拟机安装Kali Linux教程3.kali怎么使用RTL8812AU4.kali基础命令
网络基础进程之间怎样通过网络传递数据
网址常用网址
中间键
esElasticsearch 入门
mq
RabbitMQRabbitMQ高级RabbitMQ基础
1. MQ 基础2. MQ 核心角色与代码对应3. MQ Consumer Group 与消费模式4. SOFAMQ 账户变更代码实践5. MQ 可靠性问题6. 消息幂等
redis缓存击穿、穿透与雪崩Redis 分布式锁Redis 缓存问题Redis 数据结构
AI
使用说明
第三方插件&技能简介Archify使用与安装指南geekgeekRun使用OfferFlow使用指南Ponytail使用指南Skills Manager使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发0-学习路线1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.*完成可运行聊天接口11.Function Calling、Tool Calling 原理12.用 Java 方法定义 Tool13.工具参数设计和校验14.实现订单查询工具15.实现物流查询工具16.实现库存查询工具17.多个工具自动选择18.工具异常、超时、重试
diy主机
主机零件学习1.CPU2.主板3.内存4.显卡5.硬盘6.散热7.风扇8.机箱热门型号价格表
捡垃圾diy-13600kf+5060diy-14600kf+5070
English高频词汇英文基础语法简单句子音标
GitGit常用命令Sublime Merge 使用指南
Java
工具库Caffeine本地缓存Reactor教程
工作实践如何使用@Async线程池使用与排查线上服务 CPU 使用率过高排查压测下RPC接口大量失败排查记录
基础1.HashMap2.ConcurrentHashMap3.HashSet4.final5.static6.volatile7.AtomicInteger8.String动态代理反射锁与线程同步线程注解
面试题1.HashMap 存储在方法内是线程安全的吗2.ArrayList参数传递与引用重新赋值3.== 和 equals 的区别、hashcode4.重载和重写的区别5.String、StringBuffer、StringBuilder区别及使用场景6.接口和抽象类7.ArrayList 与 LinkedList 的区别和扩容机制8.HashMap 和 Hashtable 的区别及底层实现9.Object 和 Objects 的区别10.ThreadLocal的原理和使用场景11.字节码是什么及作用12.Java类加载器有哪些13.双亲委派模型14.Java异常体系15.GC是什么16.GC如何判断对象可以被回收
面试总结0.HR面试模板1.面试一2.面试二3.面试三笔试
网络与 IO(黑马程序员-纯理论)01-网络编程基础02-IO模型与零拷贝03-BIO04-NIO基础与缓冲区05-NIO通道与选择器06-AIO
juc00-目录01-进程与线程02-线程同步与通信03-并发设计模式04-Java内存模型05-CAS与原子类06-ThreadLocal07-阻塞队列08-线程池使用与原理09-任务调度10-ForkJoin与享元模式11-AQS12-ReentrantLock13-读写锁14-并发协作工具15-ConcurrentHashMap16-CopyOnWrite与同步容器17-SkipListMap18-非阻塞队列
juc(工作常见)Java并发编程三个重点拆解
jvm1. JVM运行时数据区
Spring1.Spring IoC、DI与构造方法注入CGLIB、Byte Buddy 与 Spring AOPSpring 常用注解详解Spring Bean 生命周期
Spring MVC异常处理机制
linux常用命令
mac快捷键终端常用操作
python
基础01.Python是什么,为什么要安装Python02.Python项目中.venv是什么03.Python基础语法
基础实战sql替换
HTTPXHRMS员工详情接口调用(Python HTTPX)
windowswindows激活

Codex MCP 安装与使用指南

1. MCP 是什么

MCP 可以理解成 Codex 的“外接工具”。

例如,安装 MySQL MCP 后,Codex 就能通过它查看数据库表结构、执行查询。Codex 本身不会直接连接 MySQL,必须先安装一个支持 MySQL 的 MCP Server。

2. 用你的 MySQL 数据库举例

你的数据库信息:

地址:47.99.178.186
端口:3306
数据库:personal
用户名:未提供,需要自己补上
密码:已提供,但不要写进 Git 或笔记

下面使用 mysql-mcp-server,通过环境变量传递数据库配置。这个 MCP Server 支持通过 STDIO 连接,适合在本机给 Codex 使用。

3. 配置 MCP

3.1 配置 MySQL MCP

打开 Codex 配置文件:

~/.codex/config.toml

加入下面内容:

[mcp_servers.personal_mysql]
command = "uvx"
args = ["--from", "mysql-mcp-server", "mysql_mcp_server"]
 
[mcp_servers.personal_mysql.env]
MYSQL_HOST = "47.99.178.186"
MYSQL_PORT = "3306"
MYSQL_USER = "替换成你的数据库用户名"
MYSQL_PASSWORD = "替换成你提供的数据库密码"
MYSQL_DATABASE = "personal"

说明:

  • uvx 是 Python 工具 uv 提供的临时运行命令,会自动下载并运行 mysql-mcp-server,不需要手动执行 pip install。

  • 你的 Mac 是 Apple Silicon,Homebrew 默认安装在 /opt/homebrew。先执行 brew install uv,然后建议将启动命令写成绝对路径:

    command = "/opt/homebrew/bin/uvx"
  • MYSQL_USER 必须换成真实数据库用户名。只知道密码还不能连接数据库。

  • 密码只放在本机的 config.toml 中,不要提交到 Git,也不要发到群聊或截图中。

  • 如果本机没有 uvx,先安装 uv,然后再重启 Codex。

3.2 配置其他 MCP

以后安装其他 MCP,先查看该项目 README 中的安装方式、启动命令和环境变量,再在 ~/.codex/config.toml 中新增一个配置块。每个 MCP 使用不同的名称。

Python MCP:

[mcp_servers.example]
command = "uvx"
args = ["--from", "Python包名", "启动入口"]

Node.js MCP:

[mcp_servers.example]
command = "npx"
args = ["-y", "npm包名"]

本地程序:

[mcp_servers.example]
command = "/绝对路径/程序名"
args = []

远程 HTTP MCP:

[mcp_servers.example]
url = "https://example.com/mcp"

配置后重启 Codex,输入 /mcp 检查连接状态。

4. 检查是否连接成功

重启 Codex,在输入框执行:

/mcp

看到 personal_mysql 已连接后,输入:

使用 personal_mysql 查询 personal 数据库有哪些表,只做只读操作。

再进一步查询:

使用 personal_mysql 查看 users 表的表结构,并查询 5 条数据。不要执行 INSERT、UPDATE、DELETE、DROP 或 ALTER。

5. 连接失败时检查

按这个顺序排查:

  1. 数据库用户名和密码是否正确。
  2. MySQL 是否允许你的电脑访问 47.99.178.186:3306。
  3. 云服务器安全组、防火墙是否放行 3306 端口。
  4. 在终端执行 uvx --version,确认 uvx 可用。
  5. 修改配置后是否重启 Codex。
  6. 在 Codex 中重新执行 /mcp 查看状态。

5.1 公司内网场景:让 zhps_mysql 使用 ATrust SOCKS5

如果 MySQL 地址是公司内网域名,例如:

obproxy-testdb.ob.testcloud.cic.inter

而 ATrust 在本机提供了 SOCKS5 服务:

127.0.0.1:1080

那么 Codex 的 MCP 进程不能只依赖 ATrust 的域名规则。MCP 进程需要明确通过本机 SOCKS5 端口访问,否则可能出现内网域名无法解析或连接失败。

当前 ATrust 规则的含义是:

DOMAIN-SUFFIX,cic.inter,公司代理
IP-CIDR,10.197.0.0/16,公司代理,no-resolve

这些规则由 ATrust 代理客户端负责处理,不会自动注入到 Codex 启动的 MCP 子进程中。

推荐方案:使用 proxychains-ng 包装单个 MCP

先安装:

brew install proxychains-ng

创建专用配置文件,例如:

# /Users/chenweili/.codex/proxychains-zhps.conf
dynamic_chain
proxy_dns
 
[ProxyList]
socks5 127.0.0.1 1080

然后将 zhps_mysql 的启动命令改为:

[mcp_servers.zhps_mysql]
command = "/opt/homebrew/bin/proxychains4"
args = [
  "-q",
  "-f", "/Users/chenweili/.codex/proxychains-zhps.conf",
  "/opt/homebrew/bin/uvx",
  "--from", "mysql-mcp-server",
  "mysql_mcp_server"
]
startup_timeout_sec = 120
tool_timeout_sec = 120
 
[mcp_servers.zhps_mysql.env]
MYSQL_HOST = "公司内网 MySQL 地址"
MYSQL_PORT = "3306"
MYSQL_USER = "公司数据库用户名"
MYSQL_PASSWORD = "公司数据库密码"
MYSQL_DATABASE = "aboss_sso_ps"
MYSQL_SQL_MODE = ""

说明:

  • proxychains4 只包装 zhps_mysql,其他 MCP 不会改变网络路径。
  • proxy_dns 很重要,可以避免内网域名仍由本机 DNS 直接解析失败。
  • 数据库地址继续使用公司内网域名,不要改成公网地址。
  • ALL_PROXY、HTTPS_PROXY 等环境变量不一定被 MySQL 客户端识别,因此不能保证仅靠环境变量生效。
  • 修改后重启 Codex,再通过 /mcp 检查 zhps_mysql 状态。

如果公司 VPN 已连接但仍无法解析 cic.inter 域名,通常需要使用上述 SOCKS5 包装方式,或者让公司网络提供跳板机/端口转发方案。Codex 的 experimental_environment = "remote" 是将 MCP 放到远程执行环境中运行,不等于让本机 MCP 自动连接公司的 VPN。

sql_mode 不兼容问题

sql_mode 是 MySQL 连接建立时的行为设置。mysql-mcp-server 默认使用:

sql_mode = "TRADITIONAL"

TRADITIONAL 会启用较严格的数据校验规则,但公司的 Obproxy/数据库兼容层不支持这个连接初始化设置,因此会返回:

Not supported feature or function

在 zhps_mysql.env 中增加:

MYSQL_SQL_MODE = ""

表示不额外要求当前 MCP 连接启用 TRADITIONAL。该配置只影响当前连接,不会修改数据库的全局配置。验证结果显示,设置为空后,SELECT 1 可以正常执行。主要进行只读查询时通常没有问题;如果以后执行写入,需要额外注意数据校验行为。

6. 安全建议

  • 最好新建一个只读 MySQL 用户给 MCP 使用,不要使用 root。
  • 只允许这个用户访问 personal 数据库。
  • 第一次只执行查询,不要让 MCP 具备写入权限。
  • 你的数据库地址和密码已经在聊天中出现过,正式使用前建议更换密码。

7. MCP 查询和统计网站

网站适合查看什么统计信息
官方 MCP Registry官方收录、版本、安装方式、环境变量基本没有使用量排名
PulseMCP搜索和比较 MCP预计访问量、热门排名、GitHub Star
Smithery搜索、安装和托管 MCPuseCount,自建服务还可查看调用分析
Glama搜索、在线测试、安全和质量检查质量评分、工具数量、生态规模
MCP.so按分类浏览 MCP适合发现,使用量统计较少
GitHub、PyPI、npm查看源码和软件包Star、Fork、Issue、下载量

说明:

  • 官方 Registry 主要保存 MCP 元数据,不负责托管安装包。
  • PulseMCP 的访问量属于估算值,不是精确安装量。
  • 使用 uvx 在本机运行 MCP 时,网站通常看不到你的实际调用次数。
  • 查找 MySQL MCP 时,应同时核对作者、GitHub 仓库和安装包名称,避免安装同名但不同项目的 MCP。

参考: