feat(plugin): Codex 侧改为 OAuth 浏览器登录(v0.2.0)
- .mcp.json 移除 bearer_token_env_var:401 后由 Codex 自动进入 OAuth 2.1 授权流程 (服务端 https://deta.city 提供 discovery/DCR/PKCE/token/refresh/revoke) - 安装流程改为 codex plugin add + codex mcp login deta(浏览器里完成账号登录) - 保留登录助手与 DETA_TOKEN 路径,供 dsh/脚本/CI 使用(README 分节说明) - 插件版本 0.1.0 -> 0.2.0(市场按版本刷新缓存)
This commit is contained in:
@@ -16,10 +16,6 @@ DETA 领域能力在各类 Agent harness 上的分发仓:**一份产物,多
|
||||
## 安装(Codex)
|
||||
|
||||
```bash
|
||||
# 先登录(一次性,需要 deta.city 账号):换取 DETA_TOKEN
|
||||
node ~/Dev/ant/deta-agent-plugins/plugins/deta/bin/deta-login.mjs
|
||||
source ~/.deta/env # 让 DETA_TOKEN 进入当前 shell 环境
|
||||
|
||||
# 从 Git(分发用)
|
||||
codex plugin marketplace add https://git.deta.city/deta/deta-agent-plugins.git
|
||||
|
||||
@@ -28,10 +24,25 @@ codex plugin marketplace add ~/Dev/ant/deta-agent-plugins
|
||||
|
||||
codex plugin list
|
||||
codex plugin add deta@deta
|
||||
|
||||
# 登录(一次性):打开浏览器完成 deta.city 账号登录
|
||||
codex mcp login deta
|
||||
```
|
||||
|
||||
未登录(环境里没有 `DETA_TOKEN`)时,MCP 端点会返回 **401**——含义是
|
||||
「当前环境没有可用的 deta.city 登录态」,重新执行上面的登录两步即可。
|
||||
`codex mcp login deta` 走 OAuth 2.1(授权码 + PKCE S256 + 动态客户端注册):终端给出
|
||||
`https://deta.city/oauth/authorize?...`,在浏览器里用 deta.city 账号登录并授权即可,
|
||||
随后 Codex 自行保管令牌并按 refresh token 自动续期。退出登录用 `codex mcp logout deta`。
|
||||
|
||||
不支持 OAuth 的宿主(dsh / 脚本 / CI)改用登录助手换取 `DETA_TOKEN`:
|
||||
|
||||
```bash
|
||||
node ~/Dev/ant/deta-agent-plugins/plugins/deta/bin/deta-login.mjs
|
||||
source ~/.deta/env # 让 DETA_TOKEN 进入当前 shell 环境
|
||||
```
|
||||
|
||||
未登录时 MCP 端点返回 **401**,并带 OAuth 发现提示头
|
||||
(`WWW-Authenticate: Bearer resource_metadata="https://deta.city/.well-known/oauth-protected-resource/mcp-api/mcp"`)——
|
||||
标准 MCP 客户端据此自动进入浏览器授权流程,含义是「当前环境没有可用的 deta.city 登录态」。
|
||||
|
||||
## 内容
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "deta",
|
||||
"version": "0.1.0+codex.20260910023121",
|
||||
"version": "0.2.0",
|
||||
"description": "DETA \u5efa\u7b51\u6027\u80fd\u8bbe\u8ba1\u63d2\u4ef6\uff1a\u4ee5 AML \u4e3a\u552f\u4e00\u4e8b\u5b9e\u6e90\u7f16\u8f91\u5efa\u7b51\u6a21\u578b\uff0c\u7ecf GSA \u7f16\u8bd1\u4e3a\u5efa\u7b51\u6a21\u578b\u5e76\u505a\u89c4\u5219\u6821\u9a8c\u3002",
|
||||
"author": {
|
||||
"name": "DETA",
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
"mcpServers": {
|
||||
"deta": {
|
||||
"type": "streamable-http",
|
||||
"url": "https://deta.city/mcp-api/mcp",
|
||||
"bearer_token_env_var": "DETA_TOKEN"
|
||||
"url": "https://deta.city/mcp-api/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
-15
@@ -9,40 +9,62 @@ DETA 领域能力(AML 建筑模型读写、编译校验、围护结构统计
|
||||
| 项 | 值 |
|
||||
|----|-----|
|
||||
| 端点 | `https://deta.city/mcp-api/mcp`(MCP Streamable HTTP) |
|
||||
| 凭据来源 | **deta.city 账号**(令牌经 `POST https://deta.city/prod-api/login` 换取) |
|
||||
| 传参方式 | 环境变量 `DETA_TOKEN`(Codex 侧 `bearer_token_env_var`;dsh 侧 `Authorization: Bearer ${DETA_TOKEN}`) |
|
||||
| 凭据来源 | **deta.city 账号**;两种取得方式:OAuth 浏览器登录(推荐)或换令牌后手工传 |
|
||||
| Codex 侧 | OAuth 2.1(授权码 + PKCE S256,动态客户端注册),由 `codex mcp login deta` 发起;令牌由 Codex 保管并自动续期,无需手工配置 |
|
||||
| dsh / 脚本 | 环境变量 `DETA_TOKEN`,作为 `Authorization: Bearer` 或 `X-API-Key` 发送 |
|
||||
|
||||
端点除探活接口(服务端 `GET /health`,经 Nginx 前缀对外为 `/mcp-api/health`)外**全部需要鉴权**:
|
||||
|
||||
- 请求未带凭据、凭据失效/过期 → **401**(响应体为可读提示,不回显凭据)。
|
||||
401 的含义是「当前环境没有可用的 deta.city 登录态」,不是工具或模型出错;
|
||||
重新执行 `node bin/deta-login.mjs` 并 `source ~/.deta/env` 即可。
|
||||
- 无凭据 / 凭据失效 → **401**,且响应带 OAuth 发现提示:
|
||||
`WWW-Authenticate: Bearer resource_metadata="https://deta.city/.well-known/oauth-protected-resource/mcp-api/mcp", scope="mcp"`
|
||||
标准 MCP 客户端据此**自动进入浏览器授权流程**(Codex 走的就是这条),无需手工配令牌。
|
||||
401 的含义是「当前环境没有可用的 deta.city 登录态」,不是工具或模型出错。
|
||||
- 服务端认证服务不可用(`ANT_ADMIN_SERVER` 未配置或不可达)→ 500,同样不放行。
|
||||
|
||||
账号的工作区在服务端按账号隔离(`<工作区根>/<账号 ID>`),
|
||||
不同账号的设计源码互不可见;同一账号的新会话继续使用自己的工作区。
|
||||
|
||||
## 安装(Codex)
|
||||
## 安装与登录(Codex)
|
||||
|
||||
```bash
|
||||
# 1. 先登录(一次性;需要 deta.city 账号)
|
||||
node ~/Dev/ant/deta-agent-plugins/plugins/deta/bin/deta-login.mjs
|
||||
# → 写入 ~/.deta/credentials.json 与 ~/.deta/env(均 0600)
|
||||
|
||||
# 2. 让 DETA_TOKEN 进入当前 shell 环境
|
||||
source ~/.deta/env
|
||||
|
||||
# 3. 安装插件
|
||||
# 1. 添加市场并安装插件
|
||||
codex plugin marketplace add https://git.deta.city/deta/deta-agent-plugins.git
|
||||
codex plugin add deta@deta
|
||||
|
||||
# 2. 登录(一次性):浏览器里完成 deta.city 账号登录
|
||||
codex mcp login deta
|
||||
```
|
||||
|
||||
登录助手选项:
|
||||
`codex mcp login deta` 会打印一条形如
|
||||
`https://deta.city/oauth/authorize?response_type=code&client_id=…&code_challenge=…` 的地址并打开浏览器;
|
||||
页面上用 deta.city 账号登录(支持「账号密码」与「邮箱验证码」两个入口),点「登录并授权」后
|
||||
浏览器提示 `Authentication complete`,终端输出 `Successfully logged in to MCP server 'deta'`。
|
||||
|
||||
登录态由 Codex 保存,access token 有效期 1 小时并用 refresh token 自动续期;
|
||||
换机器或换 `CODEX_HOME` 需重新 `codex mcp login deta`。退出登录:
|
||||
|
||||
```bash
|
||||
codex mcp logout deta # 撤销并删除本地凭据
|
||||
```
|
||||
|
||||
插件默认走 OAuth。若要把令牌固定为环境变量(自动化、容器、CI),装好后改为:
|
||||
|
||||
```bash
|
||||
codex mcp remove deta
|
||||
codex mcp add deta --url https://deta.city/mcp-api/mcp --bearer-token-env-var DETA_TOKEN
|
||||
export DETA_TOKEN=<管理端签发的 API Key 或门户登录令牌>
|
||||
```
|
||||
|
||||
### 登录助手(dsh / 脚本 / 预发环境)
|
||||
|
||||
OAuth 之外仍保留令牌方式,供不支持 OAuth 的宿主与脚本使用:
|
||||
|
||||
```bash
|
||||
node bin/deta-login.mjs # 交互式:读标识与密码,写 ~/.deta/*
|
||||
node bin/deta-login.mjs -u <用户名|已验证邮箱|已验证手机号> # 免交互输入标识
|
||||
node bin/deta-login.mjs --email-code <邮箱> # 邮箱验证码登录(未设密码的账号用)
|
||||
node bin/deta-login.mjs --base-url https://<host> # 自建/预发环境
|
||||
source ~/.deta/env # 导出 DETA_TOKEN
|
||||
```
|
||||
|
||||
**标识(identifier)填门户登录页上用的那一个**:用户名、已验证邮箱、已验证手机号,服务端都会解析到同一账号。
|
||||
|
||||
Reference in New Issue
Block a user