﻿---
title: "MCP OAuth 令牌另有一份仓库，不是 auth.json"
summary: "mcp_oauth_credentials_store 管 MCP 登录。默认 auto 走钥匙串，回退 ~/.codex/.credentials.json。没有 ephemeral。不要和 CLI 登录缓存抄成一把钥匙。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["mcp_oauth_credentials_store", "OAuth", "keyring"]
canonical: /tips/mcp-oauth-credentials-store/
---

# MCP OAuth 令牌另有一份仓库，不是 auth.json

mcp_oauth_credentials_store 管 MCP 登录。默认 auto 走钥匙串，回退 ~/.codex/.credentials.json。没有 ephemeral。不要和 CLI 登录缓存抄成一把钥匙。

MCP 登录令牌不走 `auth.json`。单独设顶层键：

```toml
mcp_oauth_credentials_store = "keyring"
```

三种值，默认 `auto`：

- `auto`：优先操作系统凭据库，失败才写 `CODEX_HOME/.credentials.json`
- `file`：强制写 `.credentials.json`
- `keyring`：只要钥匙串，读不到就登录失败

这里**没有** `ephemeral`。把 `cli_auth_credentials_store = "ephemeral"` 当成 MCP 令牌也只在内存，是抄错键。

`.credentials.json` 和 `auth.json` 是两份文件。拷登录缓存不会带上 MCP OAuth；反过来，清掉 MCP 令牌也不会登出 ChatGPT。dotfiles、同步盘、CI 日志两边都不要带。

回调地址和监听端口仍由 `mcp_oauth_callback_url` / `mcp_oauth_callback_port` 管，和这份存储无关。改存储后端之后，对每个要 OAuth 的服务器重新 `codex mcp login`。

## 来源

- [OpenAI · Configuration reference](https://developers.openai.com/codex/config-reference)
- [OpenAI · Sample configuration](https://developers.openai.com/codex/config-sample)
