内容
# ChatGPT 上下文 MCP
[中文文档](./README.zh-CN.md)
一个本地的stdio MCP服务器,用于将私有的ChatGPT对话上下文导入到Codex、Claude Code和其他MCP客户端。
## 免责声明
本项目为非官方项目,不受OpenAI维护、认可或支持。
本工具使用私有的、非公开的ChatGPT网页后端API。行为推断自网络流量,可能会在任何时候改变、破坏或返回不完整的数据。本项目仅用于技术研究、个人上下文迁移和本地MCP实验。
不保证正确性、可靠性、稳定性、完整性、合法性、合规性或适用性。你负责自己的使用,包括令牌处理、数据隐私、本地法律、组织政策和相关服务条款。Bearer令牌是敏感的临时凭证,应像密码一样处理。风险自负。
## 功能
- 将私有的ChatGPT对话URL导入到MCP客户端。
- 默认情况下刷新远程对话内容,然后返回上下文。
- 缓存JSON、Markdown、消息和元数据到本地。
- 支持仅读取缓存的先前导入的对话。
- 提供MCP工具和缓存支持的资源。
- 为Codex和Claude Code提供设置文档。
## 支持范围
支持:
```text
https://chatgpt.com/c/{conversation_id}
https://chat.openai.com/c/{conversation_id}
```
不支持:
- 共享链接,如 `https://chatgpt.com/share/{share_id}`
- ChatGPT项目
- 历史记录批量导出
- 附件、图像或Canvas下载
- 浏览器自动化或cookie提取
## 工作原理
`import_chatgpt_url` 解析私有的ChatGPT对话URL,通过ChatGPT的网页后端API获取完整的远程对话,将稳定的内容哈希与本地元数据进行比较,在内容更改时更新缓存,并将有界的Markdown/消息/JSON返回给MCP客户端。
`get_chatgpt_context` 仅读取本地缓存,不检查远程对话。
## 从源码安装
要求:
- Node.js 20+
- npm
```bash
git clone https://github.com/OWNER/chatgpt-context-mcp.git
cd chatgpt-context-mcp
npm install
npm run build
```
运行检查:
```bash
npm run check
```
## 令牌设置
从浏览器开发者工具获取新的ChatGPT网页Bearer令牌。不要将令牌粘贴到代理聊天或提交到配置文件中。
你可以通过当前进程环境提供凭证:
```bash
export CHATGPT_BEARER_TOKEN="<chatgpt-bearer-token>"
export CHATGPT_ACCOUNT_ID=""
```
对于桌面应用程序,使用带有私有回退环境文件的包装脚本:
```bash
mkdir -p "$HOME/.config/chatgpt-context-mcp"
chmod 700 "$HOME/.config/chatgpt-context-mcp"
cat > "$HOME/.config/chatgpt-context-mcp/env" <<'EOF'
export CHATGPT_BEARER_TOKEN="<chatgpt-bearer-token>"
export CHATGPT_ACCOUNT_ID=""
EOF
chmod 600 "$HOME/.config/chatgpt-context-mcp/env"
```
包装器使用以下优先级:
1. 现有的进程环境变量。
2. 来自 `$HOME/.config/chatgpt-context-mcp/env` 的值。
设置 `CHATGPT_CODEX_MCP_ENV_FILE` 以指向不同的环境文件。
## Codex 配置
构建模式:
```toml
[mcp_servers.chatgpt_context]
command = "<repo-path>/scripts/start-mcp.sh"
args = []
env_vars = ["CHATGPT_BEARER_TOKEN", "CHATGPT_ACCOUNT_ID", "CHATGPT_CODEX_MCP_CACHE_DIR", "CHATGPT_CODEX_MCP_ENV_FILE"]
startup_timeout_sec = 10
tool_timeout_sec = 120
default_tools_approval_mode = "auto"
```
开发模式:
```toml
[mcp_servers.chatgpt_context]
command = "npm"
args = ["run", "start:mcp", "--prefix", "<repo-path>"]
env_vars = ["CHATGPT_BEARER_TOKEN", "CHATGPT_ACCOUNT_ID", "CHATGPT_CODEX_MCP_CACHE_DIR"]
startup_timeout_sec = 10
tool_timeout_sec = 120
default_tools_approval_mode = "auto"
```
重启Codex或打开新会话后更改MCP配置。
## Claude Code 配置
将此配置为stdio MCP服务器:
```json
{
"mcpServers": {
"chatgpt_context": {
"command": "<repo-path>/scripts/start-mcp.sh",
"args": [],
"env": {
"CHATGPT_CODEX_MCP_ENV_FILE": "$HOME/.config/chatgpt-context-mcp/env"
}
}
}
}
```
客户端特定的UI和配置位置可能会有所不同。服务器本身是一个标准的stdio MCP服务器。
## MCP 工具
- `import_chatgpt_url`:默认情况下从远程API获取私有的ChatGPT对话URL,在内容更改时更新缓存,并返回有界的上下文。
- `get_chatgpt_context`:读取缓存的对话。不访问网络。
- `list_chatgpt_imports`:列出本地缓存的导入。
- `verify_chatgpt_auth`:检查令牌存在、过期、账户ID检测和轻量级API访问。
## MCP 资源
缓存支持的资源:
```text
chatgpt://conversation/{conversation_id}/metadata
chatgpt://conversation/{conversation_id}/markdown
chatgpt://conversation/{conversation_id}/messages
chatgpt://conversation/{conversation_id}/json
```
资源读取仅限于缓存,不会刷新远程内容。
## 缓存和隐私
导入的对话缓存在以下位置以纯文本存储:
```text
$HOME/.cache/chatgpt-context-mcp/
```
覆盖缓存位置:
```bash
export CHATGPT_CODEX_MCP_CACHE_DIR="/path/to/cache"
```
缓存文件可能包含私有的提示、助手回复、代码和其他敏感内容。服务器不会将Bearer令牌写入磁盘。
## 故障排除
如果 `verify_chatgpt_auth` 失败:
- 确认 `CHATGPT_BEARER_TOKEN` 可用于MCP服务器。
- 如果令牌过期,请刷新令牌。
- 对于Team或Enterprise账户,如果自动检测失败,请设置 `CHATGPT_ACCOUNT_ID`。
- 在更改配置或环境变量后,请重启MCP客户端。
如果 `import_chatgpt_url` 返回 `UNSUPPORTED_URL`,请使用私有的 `/c/{conversation_id}` URL而不是 `/share/{share_id}` URL。
如果远程访问失败但缓存存在,则错误包含 `cache_available: true`。仅当陈旧的缓存上下文可接受时,请使用 `get_chatgpt_context`。
## 开发
```bash
npm install
npm test
npm run typecheck
npm run build
npm run check
```
在本地运行服务器:
```bash
npm run start:mcp
```
## 许可证
MIT