下面给你一份macOS 版本完整教程,结构和你那份 Windows 教程一致,直接可落地。
在已安装 Codex 的前提下配置 Serena(macOS + zsh)
本文说明如何在 已经安装 Codex CLI 的情况下,把本地启动的 Serena MCP Server 接入到 Codex 中,使 Codex 可以通过 HTTP 访问:
http://127.0.0.1:9121/mcp
适用环境:
macOS
zsh(macOS 默认)
已安装并可正常使用
Codex CLI通过本地
uvx启动serenaCodex 通过 HTTP MCP 方式连接 Serena
1. 目标
完成配置后,你将得到一套可用流程:
使用
git克隆serena到本地使用
uvx从本地仓库运行serena在终端中使用
serena start/serena stop/serena status在 Codex 配置文件中注册 Serena MCP Server
启动 Codex 后连接本地 Serena 服务
2. 前置条件
2.1 已安装 Git
git --version2.2 已安装 uv / uvx
uv --version
uvx --version说明:
uvx不是独立安装工具,它由uv提供没装的话建议用以下方式安装(任选其一):
brew install uv或
curl -LsSf https://astral.sh/uv/install.sh | sh2.3 已安装 Codex CLI
默认你已经能正常运行 Codex CLI。
3. 克隆 Serena 到固定目录
本文使用固定路径:
~/Projects/serena执行:
git clone https://github.com/oraios/serena.git ~/Projects/serena后续脚本直接引用该路径。若你改了路径,脚本里也要同步改。
4. Serena 的运行方式
采用命令:
uvx --from ~/Projects/serena serena ...其他参数含义:
不依赖全局安装
serena直接从本地仓库运行
仓库更新后,调用始终基于本地最新代码
5. 把 Serena 管理脚本写入 Shell Profile
macOS 默认 zsh,请写入:
~/.zshrc如果你是 bash,则写入 ~/.bashrc(并把后文 reload 命令改成 source ~/.bashrc)。
6. 推荐写入 ~/.zshrc 的完整脚本
# ===== Serena / Codex MCP (macOS) =====
SERENA_REPO="$HOME/Projects/serena"
SERENA_STATE_DIR="$HOME/.serena"
SERENA_PID_FILE="$SERENA_STATE_DIR/mcp-server-codex-9121.pid"
SERENA_LOG_FILE="$SERENA_STATE_DIR/mcp-server-codex-9121.log"
SERENA_PORT="9121"
indexproject() {
uvx --from "$SERENA_REPO" serena project index
}
_get_serena_pid() {
if [ ! -f "$SERENA_PID_FILE" ]; then
return 1
fi
local pid
pid="$(tr -d '[:space:]' < "$SERENA_PID_FILE")"
if ! [[ "$pid" =~ ^[0-9]+$ ]]; then
rm -f "$SERENA_PID_FILE"
return 1
fi
if kill -0 "$pid" 2>/dev/null; then
echo "$pid"
return 0
fi
rm -f "$SERENA_PID_FILE"
return 1
}
_serena_start() {
local existing_pid
if existing_pid="$(_get_serena_pid)"; then
echo "Serena MCP server is already running. PID: $existing_pid"
return 0
fi
mkdir -p "$SERENA_STATE_DIR"
nohup uvx --from "$SERENA_REPO" serena start-mcp-server \
--context codex \
--transport streamable-http \
--port "$SERENA_PORT" \
>"$SERENA_LOG_FILE" 2>&1 &
local new_pid=$!
echo "$new_pid" > "$SERENA_PID_FILE"
sleep 1
if ! kill -0 "$new_pid" 2>/dev/null; then
rm -f "$SERENA_PID_FILE"
echo "Serena MCP server failed to start. Check log: $SERENA_LOG_FILE"
return 1
fi
echo "Serena MCP server started. PID: $new_pid, Port: $SERENA_PORT"
}
_serena_stop() {
local pid
if ! pid="$(_get_serena_pid)"; then
echo "Serena MCP server is not running."
return 0
fi
kill "$pid" 2>/dev/null
sleep 1
# 若未退出则强制结束,保证行为确定
if kill -0 "$pid" 2>/dev/null; then
kill -9 "$pid" 2>/dev/null
fi
rm -f "$SERENA_PID_FILE"
echo "Serena MCP server stopped."
}
_serena_status() {
local pid
if pid="$(_get_serena_pid)"; then
local started
started="$(ps -p "$pid" -o lstart= | sed 's/^ *//')"
echo "Serena MCP server is running. PID: $pid, Started: $started, Port: $SERENA_PORT"
return 0
fi
echo "Serena MCP server is not running."
}
serena() {
local action="$1"
shift || true
case "$action" in
start) _serena_start ;;
stop) _serena_stop ;;
status) _serena_status ;;
"")
uvx --from "$SERENA_REPO" serena
;;
*)
uvx --from "$SERENA_REPO" serena "$action" "$@"
;;
esac
}7. 重载 Profile
source ~/.zshrc8. 验证 Serena 是否能独立启动
serena start
serena status如需停止:
serena stop9. 在 Codex 中配置 Serena MCP Server
在 Codex 配置文件中加入:
[mcp_servers.serena]
url = "http://127.0.0.1:9121/mcp"
startup_timeout_sec = 30含义:
MCP Server 名称:
serenaCodex 不负责启动 Serena
Codex 连接已运行的本地 HTTP MCP 服务
10. 推荐使用顺序
打开终端(zsh)
启动 Serena:
serena start确认状态:
serena status启动 Codex(读取上面的 MCP 配置并连接)
用完后停止 Serena:
serena stop11. indexproject 的作用
indexproject实际执行:
uvx --from ~/Projects/serena serena project index通常在项目目录中执行,用于让 Serena 建立当前项目索引。
12. 常见问题
12.1 uvx: command not found
uv --version
uvx --version如果不通,先修复 uv 安装或 PATH。
12.2 serena start 后立即退出
优先手工验证核心命令:
uvx --from ~/Projects/serena serena start-mcp-server --context codex --transport streamable-http --port 9121如果这条失败,先修 Serena 本身,不要先查 Codex。
12.3 Codex 无法连接 Serena
逐项检查:
Serena 是否运行:
serena statusCodex URL 是否正确:
url = "http://127.0.0.1:9121/mcp"Serena 启动端口是否也是
9121
12.4 9121 端口被占用
lsof -nP -iTCP:9121 -sTCP:LISTEN若有占用,要么停掉占用进程,要么统一改 Serena/Codex 端口配置(两边必须一致)。
13. 最简操作示例
13.1 克隆 Serena
git clone https://github.com/oraios/serena.git ~/Projects/serena13.2 把脚本写入 ~/.zshrc
把第 6 节完整脚本粘进去。
13.3 重载
source ~/.zshrc13.4 启动并检查
serena start
serena status13.5 启动 Codex
确保配置包含:
[mcp_servers.serena]
url = "http://127.0.0.1:9121/mcp"
startup_timeout_sec = 514. 结论
这套 macOS 方案和你 Windows 版的思路完全一致:
uvx --from ~/Projects/serena从本地仓库运行 Serenashell profile 管理 Serena MCP 生命周期
PID 文件机制防重复启动并自清理失效状态
Codex 通过
http://127.0.0.1:9121/mcp连接本地 Serena MCP Server
如果你要,我可以下一步给你一个“可直接复制的一键安装版”(自动检查 git/uv、自动写入 ~/.zshrc、自动追加 Codex 配置并备份原文件)。