• 自部署
  • CLI
  • Skills
  • Apps
  • 价格
GitHub 开始使用
  • 自部署
  • CLI
  • Skills
  • Apps
  • 价格
  • GitHub
  • 开始使用

OOMOL OpenConnector 自部署指南

OOMOL OpenConnector 是开源、可自部署的应用连接服务。适合需要让 Agent 或内部工具调用真实外部服务,同时把 provider 凭据、权限和执行记录留在自己环境里的场景。它通过 MCP、HTTP 暴露 GitHub、Gmail、Notion、Hacker News、Ably、Abstract、A-Leads 等服务的类型化 action。

Agent 只能看到 schema、scope、执行状态和安全的账号标签;原始 provider token、action 权限和执行记录由你的部署边界管理。

它提供什么

  • 一个 runtime,通过 MCP、HTTP、OpenAPI 和 Web 控制台暴露 provider actions。
  • 凭据存储,支持 API key、自定义凭据、OAuth2 连接和无需认证的 provider。
  • 类型化 action schema,让 Agent 在调用前先知道自己能调用什么。
  • 连接身份和 scope,让用户和 Agent 都能看到 action 会以哪个账号执行。
  • 临时文件中转,供需要文件 URL 的 action 使用。
  • 最近运行记录,包含脱敏后的输入摘要和 provider 错误。
  • provider catalog 和本地 executor;executor 只在 action 被使用时才加载。

先选择 runtime 的运行位置,再配置存储、访问控制、provider 连接,以及提供给 Agent 使用的 MCP 或 HTTP 入口。

选择部署方式

方式适用场景存储
Docker Compose需要最快完成本地或单服务器部署。Docker volume 挂载到 /app/data,SQLite 位于 /app/data/connect.sqlite。
源码运行你正在开发 OOMOL OpenConnector 或 provider executor。默认使用本地 ./data/connect.sqlite;也可设置 OOMOL_CONNECT_DATA_DIR。
Cloudflare Workers需要由 Cloudflare 托管 runtime state 和 metadata。D1 保存运行时记录,R2 保存临时中转文件。

准备 runtime

部署前先确定这些值:

值用途
OOMOL_CONNECT_ADMIN_TOKEN当 Web 控制台、/api 或本地 API 文档可被你的 shell 之外访问时,用它保护管理面。
OOMOL_CONNECT_ENCRYPTION_KEY加密保存 provider 凭据和 OAuth client secret。请放在你的密钥管理系统中。
OOMOL_CONNECT_ORIGIN设置 OAuth callback URL 使用的公开 origin。浏览器通过 tunnel、域名或 Worker URL 访问 runtime 时需要设置。
Runtime tokens让 Agent 和 client 调用 /v1 与 /mcp。可在 Web 控制台 Access 页面或管理 API 中创建。
Action policy限制哪些 actions 可以通过 /v1 和 MCP 执行。使用 OOMOL_CONNECT_ALLOWED_ACTIONS 和 OOMOL_CONNECT_BLOCKED_ACTIONS。

Runtime 数据库需要按敏感文件处理。未设置 OOMOL_CONNECT_ENCRYPTION_KEY 时,OOMOL OpenConnector 仍可运行,但 provider secret 会存放在敏感的本地 SQLite 文件中。

使用 Docker Compose 运行

先克隆 OOMOL OpenConnector 仓库,进入项目目录,再启动 runtime:

git clone https://github.com/oomol-lab/open-connector.git
cd open-connector
docker compose up --build

打开 Web 控制台:

http://localhost:3000

打开生成的 API 文档:

http://localhost:3000/docs

用一个无需认证的 action 验证 runtime:

curl -s -X POST http://localhost:3000/v1/actions/hackernews.get_top_stories \
  -H 'content-type: application/json' \
  -d '{"input":{}}'

Docker Compose 会把运行时状态保存到 connector-data volume。容器内的 SQLite 路径是:

/app/data/connect.sqlite

私有服务器部署时,至少在启动前设置 admin token 和 encryption key:

OOMOL_CONNECT_ADMIN_TOKEN="replace-with-an-admin-token" \
OOMOL_CONNECT_ENCRYPTION_KEY="replace-with-a-long-random-secret" \
docker compose up --build

如果 runtime 通过公开域名或 tunnel 暴露,还要设置公开 origin:

OOMOL_CONNECT_ORIGIN="https://connect.example.com" \
OOMOL_CONNECT_ADMIN_TOKEN="replace-with-an-admin-token" \
OOMOL_CONNECT_ENCRYPTION_KEY="replace-with-a-long-random-secret" \
docker compose up --build

Docker 镜像会在容器内绑定 0.0.0.0。外部访问范围由宿主机防火墙、反向代理或容器平台控制。

保护管理面和运行面

管理端 HTTP client 调用 /api、/docs 或 Web 控制台时发送:

Authorization: Bearer replace-with-an-admin-token

在 Web 控制台 Access 页面为 Agent 和 SDK 类 client 创建 runtime token。token 只显示一次,SQLite 中只保存 hash。

也可以通过管理 API 创建:

curl -s -X POST http://localhost:3000/api/runtime-tokens \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"name":"Claude Desktop"}'

之后 runtime client 调用 /v1 或 /mcp 时发送:

Authorization: Bearer oct_...

为了启动脚本和向后兼容,仍然可以使用 OOMOL_CONNECT_RUNTIME_TOKEN:

OOMOL_CONNECT_ADMIN_TOKEN="replace-with-an-admin-token" \
OOMOL_CONNECT_RUNTIME_TOKEN="replace-with-a-runtime-token" \
docker compose up --build

限制 Agent 可以执行的 actions:

OOMOL_CONNECT_ALLOWED_ACTIONS="hackernews.*,github.get_current_user" docker compose up --build

即使较大的 allowlist 包含某些 actions,也可以单独阻止它们:

OOMOL_CONNECT_ALLOWED_ACTIONS="github.*" \
OOMOL_CONNECT_BLOCKED_ACTIONS="github.delete_repository" \
docker compose up --build

连接 API-key provider

GitHub 是一个简单的 API-key 示例,因为它可以使用 personal access token。

查看 provider 契约:

curl -s http://localhost:3000/api/providers/github \
  -H 'authorization: Bearer replace-with-an-admin-token'

保存默认 GitHub 连接:

curl -s -X PUT http://localhost:3000/api/connections/github \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"authType":"api_key","values":{"apiKey":"github_pat_..."}}'

通过 runtime 调用 GitHub:

curl -s -X POST http://localhost:3000/v1/actions/github.get_current_user \
  -H 'authorization: Bearer oct_...' \
  -H 'content-type: application/json' \
  -d '{"input":{}}'

查看已配置的连接,以及会暴露给 Agent 的安全账号身份:

curl -s http://localhost:3000/api/connections \
  -H 'authorization: Bearer replace-with-an-admin-token'

命名连接

同一个 provider 需要多个账号时,添加 connectionName:

curl -s -X PUT http://localhost:3000/api/connections/github \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"authType":"api_key","connectionName":"work","values":{"apiKey":"github_pat_..."}}'

执行时选择该账号:

curl -s -X POST http://localhost:3000/v1/actions/github.get_current_user \
  -H 'authorization: Bearer oct_...' \
  -H 'x-oo-connector-alias: work' \
  -H 'content-type: application/json' \
  -d '{"input":{}}'

也可以使用 alias query 参数。

连接 OAuth provider

OAuth provider 使用你自己的 provider OAuth app。先列出支持 OAuth 的 provider,并复制目标服务的 expectedRedirectUri:

curl -s http://localhost:3000/api/oauth/configs \
  -H 'authorization: Bearer replace-with-an-admin-token'

使用默认端口时,GitHub 使用这个 callback URL:

http://localhost:3000/oauth/callback

把 /api/oauth/configs 返回的准确 callback URL 填入 provider OAuth app。如果修改了 PORT、HOST,或通过其他 origin 暴露 runtime,请先设置 OOMOL_CONNECT_ORIGIN,重启 runtime 后重新读取 callback URL。

在本地保存 OAuth client:

curl -s -X PUT http://localhost:3000/api/oauth/configs/github \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"clientId":"...","clientSecret":"..."}'

开始授权:

curl -s -X POST http://localhost:3000/api/oauth/authorizations \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"service":"github"}'

在浏览器中打开返回的 authorizationUrl。Provider 重定向回 callback URL 后,OOMOL OpenConnector 会把 OAuth 凭据保存为默认连接。

如需把 OAuth 结果保存为命名连接,传入 connectionName:

curl -s -X POST http://localhost:3000/api/oauth/authorizations \
  -H 'authorization: Bearer replace-with-an-admin-token' \
  -H 'content-type: application/json' \
  -d '{"service":"github","connectionName":"work"}'

给 Agent 使用工具

支持 MCP 的 client 可以连接到:

http://localhost:3000/mcp

MCP server 暴露一组面向发现流程的工具:

  • list_apps
  • search_actions
  • get_action_guide
  • execute_action

预览 MCP tool metadata:

curl -s http://localhost:3000/mcp/tools \
  -H 'authorization: Bearer oct_...'

HTTP client 使用 /v1 runtime API:

curl -s http://localhost:3000/v1/actions \
  -H 'authorization: Bearer oct_...'

每个 action 都有一份本地 Markdown guide,包含输入 schema、scope、provider 权限、当前连接身份和请求示例:

curl -s http://localhost:3000/api/actions/github.get_current_user/agent.md \
  -H 'authorization: Bearer replace-with-an-admin-token'

Web 控制台也可以为每个 action 复制 cURL、TypeScript 和 agent prompt 示例。

从源码运行

开发 OOMOL OpenConnector 或 provider executor 时使用源码工作流。请使用 Node.js 22 或更新版本。

git clone https://github.com/oomol-lab/open-connector.git
cd open-connector
npm install
npm run build:web
npm run dev

npm install 和 npm run dev 会在生成文件缺失或过期时创建本地文件。

源码运行时,运行时状态保存在:

./data/connect.sqlite

使用其他数据目录:

OOMOL_CONNECT_DATA_DIR=/path/to/data npm run dev

Admin token、encryption key、origin、runtime token 和 action policy 这些环境变量与前面相同。

部署到 Cloudflare Workers

Cloudflare Workers 支持作为 metadata 和 runtime state 的部署目标。

先克隆仓库,再创建 Cloudflare 资源并部署:

git clone https://github.com/oomol-lab/open-connector.git
cd open-connector
cp wrangler.example.jsonc wrangler.local.jsonc
npm run generate:catalog
npm run build:web
npx wrangler d1 create oomol-connect
npx wrangler r2 bucket create oomol-connect-transit-files
npx wrangler d1 migrations apply oomol-connect --remote
npm run deploy:cloudflare

部署前,把 Cloudflare 返回的 D1 database_id 填入被忽略的 wrangler.local.jsonc。

使用 Wrangler 设置 secrets:

npx wrangler secret put OOMOL_CONNECT_ADMIN_TOKEN
npx wrangler secret put OOMOL_CONNECT_ENCRYPTION_KEY

Cloudflare 使用相同的环境变量名配置 origin、auth tokens、action policy、中转文件限制和凭据加密。PORT、HOST 和 OOMOL_CONNECT_DATA_DIR 只适用于本地 Node runtime。

Worker runtime 会提供 catalog metadata、/api 和 /v1 metadata endpoints、连接、runtime tokens、OAuth config/state、基于 R2 的中转文件,以及生成版 provider action executor registry。如果希望自动清理未读取的过期中转文件,请为 transit bucket 配置 R2 lifecycle rule。

运维部署

为支持和恢复保留这些记录:

记录查看位置
Runtime 数据库Docker volume、本地 OOMOL_CONNECT_DATA_DIR 或 Cloudflare D1。
临时中转文件本地 runtime 的 OOMOL_CONNECT_DATA_DIR/files,或 Cloudflare R2。
Admin token 和 encryption key你的密钥管理系统。OOMOL OpenConnector 不会替你保存 encryption key。
Runtime token 前缀Web 控制台 Access 页面或 /api/runtime-tokens。完整 runtime token 只显示一次。
执行历史Web 控制台最近运行记录,或 GET /api/runs。

对于文件上传类 action,本地中转文件保存在 OOMOL_CONNECT_DATA_DIR/files 并按时间清理。使用 OOMOL_CONNECT_TRANSIT_FILE_TTL_SECONDS 和 OOMOL_CONNECT_TRANSIT_FILE_MAX_BYTES 调整生命周期和上传大小。

排查建议

现象检查项
Web 控制台或 /api 返回 unauthorized。发送 Authorization: Bearer <admin-token>,并确认 OOMOL_CONNECT_ADMIN_TOKEN 与当前运行环境一致。
/v1 或 /mcp 返回 unauthorized。使用 Access 页面或 POST /api/runtime-tokens 创建的 runtime token。Admin token 用于管理面,不用于 runtime client。
OAuth 回调到了错误主机。将 OOMOL_CONNECT_ORIGIN 设为用户在浏览器中打开的 origin,重启 runtime,再从 /api/oauth/configs 复制新的 expectedRedirectUri。
Action 找不到凭据。查看 /api/connections、当前 x-oo-connector-alias,以及连接是否仍然 available。
Action 被阻止。检查 OOMOL_CONNECT_ALLOWED_ACTIONS 和 OOMOL_CONNECT_BLOCKED_ACTIONS。Blocked actions 优先于更宽泛的 allowlist。
Provider 凭据之前可用,现在失败。如果 token 已过期且没有 refresh token,请重新连接 provider;同时确认 encryption key 与已存储记录匹配。
X Discord YouTube GitHub
Shaun 的微信二维码

直接联系 CEO

copyright © 2026 oomol contributors. 浙ICP备2023018874号-1

自动
中文
  • English
  • 中文

探索

  • Apps
  • Skills
  • 价格

支持

  • 支持
  • 文档
  • 品牌资产

公司

  • 关于
  • 服务条款
  • 隐私政策

选择你的 Cookie 偏好

我们会使用必要存储保持网站正常运行,也会使用可选存储来记住偏好并了解汇总后的站点使用情况。

Cookie 设置

隐私偏好

管理 OOMOL 可以使用哪些可选存储。你随时可以在页脚重新修改这些选择。