open-connector 的一些使用说明与部署 #131
oldman1969
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
open-connector 使用说明与部署
目录
概述
OOMOL 开源生态围绕"AI agent 调用 SaaS 连接器"这个核心需求,由三个 GitHub 仓库组成。核心产品是 open-connector——一个开源的连接器网关运行时(Composio 的替代方案),统一存储第三方凭证,对外暴露 1,000+ providers、10,000+ actions 供 AI agent / 应用调用。
无论你用开源自托管还是 OOMOL SaaS 版本,provider id、action id、schema 契约都是同一套。
一图看懂整体架构
凭证边界:第三方 token(GitHub PAT、Gmail OAuth 等)只存在 open-connector 容器里;oo-cli、SDK、MCP 调用方全程只接触
connectionName(一个 alias 字符串)和执行结果,真正的 token 从不到客户端。认识三个仓库
1. open-connector(连接器网关运行时)
仓库:oomol-lab/open-connector
定位:开源的连接器网关运行时。可以部署在本机 Docker / Podman、Fly.io、Cloudflare Workers,或使用 OOMOL 托管运行时。
技术栈:Node.js 22+ / TypeScript(原生) / Hono(HTTP 框架)/ oxfmt + oxlint
2. oo-cli(本机 agent 中继 CLI)
仓库:oomol-lab/oo-cli
定位:本机 AI agent 的命令行中继工具。在你的 agent 和 open-connector 运行时之间充当智能客户端。
login/auth)connector search/schema)connector run)skills)oollm)file)技术栈:Bun / TypeScript strict ESM / zod / pino
3. connector-sdk(TypeScript 客户端 SDK)
仓库:oomol-lab/connector-sdk
定位:给应用/agent 开发者用的 TypeScript 薄 HTTP 客户端库(npm 包
@oomol-lab/connector)。OpenConnectorConnectorProjectConnector技术栈:TypeScript / npm 包
仓库之间的关系
核心理解:
/v1/actions/*就能用。它是所有接入方式的共同目标后端。/v1REST API,只是面向不同使用者、带不同附加值。open-connector 的协议层与开发者接入层
open-connector 从设计上分为两层:
协议层(2 种协议)
这是 open-connector 服务端 Hono 路由真正区分的网络协议——只有两种:
GET/POST /v1/*+GET/POST/PUT/DELETE /api/*+/openapi.json{ success, data, meta }POST /mcp(Streamable HTTP transport)开发者接入层(5 种方式)
这 5 种是面向不同使用场景的客户端形态。MCP 是独立协议,其余 4 种底层均为 HTTP REST:
/api/*)web/)部署
目标架构
第 0 步:安装 Podman 与拉取源码
0.1 安装 Podman
重开终端后验证:
0.2 初始化并启动 podman machine
0.3 安装 Node.js
重开终端后验证:
0.4 拉取源码
拉取后目录结构:
第 1 步:部署 open-connector(Podman 持久化)
进入目录:
cd D:\software\open_connector\package\open-connector1.1 生成加密密钥
这个密钥用来加密落盘的 provider 凭证。生成后务必保存好,丢了已存的凭证就解不开。
1.2 创建
.env在
open-connector\目录下新建.env(已被 gitignore):1.3 创建
docker-compose.override.yml仓库自带的
docker-compose.yml没有 restart 策略。在同目录新建docker-compose.override.yml(compose 会自动叠加它,不动原文件):1.4 验证配置
应能看到
restart: unless-stopped和你填的OOMOL_CONNECT_ENCRYPTION_KEY。1.5 启动容器
podman compose up -d第一次会拉镜像(
ghcr.io/oomol-lab/open-connector:latest,几百 MB),耐心等。1.6 验证
三项都通过,open-connector 部署完成。数据持久化在 Docker 命名卷
connector-data,删容器不丢数据。第 2 步:配置开机自启(Podman 专有,关键)
Podman 无守护进程,
restart: unless-stopped只在 machine 运行期间生效。Windows 重启后 machine 不会自启,需要登录时自动起 machine + 容器。2.1 创建启动脚本
在
open-connector\目录下新建start-open-connector.bat:2.2 注册登录自启(二选一)
方式 A:任务计划程序(推荐,静默无窗口)
以管理员身份打开 PowerShell:
方式 B:启动文件夹(不需要管理员,但登录时闪一下黑窗)
Win+R→ 输入shell:startup→ 把start-open-connector.bat的快捷方式拖进打开的文件夹。2.3 验证自启
重启电脑、登录 Windows,等十几秒后:
能通就说明自启生效。之后每次开机,open-connector 自动回来。
第 3 步:安装 oo-cli
oo-cli 是按需调用的 CLI,装一次即可,不常驻。
3.1 装 Bun(oo-cli 要求 1.3.x)
重开终端后验证:
bun --version3.2 装 oo-cli 依赖
cd D:\software\open_connector\package\oo-cli bun install3.3 让
oo全局可用新建一个专门放命令的目录(如
D:\software\open_connector\package\oo-cli-path),在里面创建oo.bat:然后把该目录加进用户 PATH(永久生效,不需要管理员):
重开终端后验证:
oo --version第 4 步:把 oo 连到本地 open-connector
这条写进 oo 的
connector.toml(持久配置)。因为.env里 runtime token 留空,不需要--token。验证闭环:
第二条应返回
story_ids数组。通了说明 oo-cli ↔ 本地 open-connector 链路完整。第 5 步(可选):配 GitHub 凭证 + 接入 AI agent
也可以在 Web Console(http://localhost:3000)的 Connections 页面图形化配置。
让本机 AI agent 用上 oo:
之后在 agent 里说
/oo 看一下我的github账户名,agent 会按 skill 状态机走 search → schema → run。接入方式详解
1. HTTP / OpenAPI
是什么:直接调
/v1REST API。无依赖,无需 SDK/CLI。任何语言、任何 HTTP client 都能用。适合:写脚本、一次性调试、非 TS 语言集成、CI/CD pipeline。
核心端点:
/v1/actions?service=过滤/v1/actions/search?q=/v1/actions/:actionId/v1/actions/:actionId/v1/apps/v1/proxy/:service/openapi.json完整调用流程(4 步):
鉴权区分:
/v1/*,/mcpAuthorization: Bearer oct_.../api/*,/docs, Web ConsoleAuthorization: Bearer <admin>本地开发没设 token 就是无鉴权模式。
OpenAPI 附赠:浏览器开
http://localhost:3000/docs(Scalar 交互式文档),或/openapi.json导入 openapi-generator 生成客户端。2. Connector SDK
是什么:npm 包
@oomol-lab/connector,给开发者在自己代码里调 open-connector action 的 TypeScript 客户端。把 URL 拼接、auth 头、序列化全部藏掉。适合:在自己 agent/app 代码里集成 connector 能力,不想手写 HTTP。
调用流程:
和 HTTP 直接调的区别:SDK 省掉 URL 拼接、auth 头、序列化/反序列化,不做额外逻辑。
3. oo CLI
是什么:安装在本地机器上的命令行工具,让本机 AI agent 在 shell 里调 open-connector。oo 先把内置 skill 注入 agent host,skill 再驱动 agent 按状态机走 search → schema → validate → run。
适合:本机已有 agent host,想让 agent 调 Gmail/Slack/GitHub/Notion 等。不需要写代码。
两种配置模式:OOMOL 账号 vs 自托管 connector
oo-cli 有两套独立配置,决定它连哪个后端、解锁哪些能力。两者可并存,不是二选一:
oo loginoo connector login <url> [--token]auth.toml(OOMOL apiKey)connector.toml(URL + 可选 token)oo connector命令打到哪http://localhost:3000)connector 命令的优先级是"自托管优先"。
resolveConnectorTarget()按顺序决定打哪个后端:所以配了自托管 connector 后,
oo connector命令始终走本地,不会被 OOMOL 账号 hijack。配置方法(PowerShell):
凭证安全:自托管模式下,GitHub PAT / Gmail token 全程留在你的本地 open-connector 容器,OOMOL 云碰不到。
oo login不会把已存的本地凭证搬到云端。实例:用 oo 列出 GitHub 仓储(含数据流程)
数据流程:
注意:oo 全程没碰 GitHub token,只传了
connectionName。PAT 的解密、出网调 GitHub 都在 open-connector 容器内完成。4. MCP
是什么:Agent host 通过原生 MCP(Model Context Protocol)协议直接连 open-connector。不走
/v1REST,走POST /mcp(Streamable HTTP JSON-RPC)。适合:MCP-native 的 agent host(Claude Desktop、Claude Code 等)——不用装 CLI,不用引 SDK,标准协议原生支持。
4 个 MCP tool
open-connector 的 MCP server 暴露 4 个"元 tool"(定义在
src/mcp.ts),通过组合它们触达全部 10000+ action:list_appsGET /v1/appssearch_actionsGET /v1/actions/search?q=get_action_guideGET /api/actions/:id/agent.mdexecute_actionPOST /v1/actions/:id配置进 Claude(Claude Code / Claude Desktop)
Claude Code——一条命令:
参数含义:
--transport http(HTTP 传输)/open-connector(服务器名,工具前缀成mcp__open-connector__*)/ URL /-s user(用户级,所有项目可用)。或手写
.mcp.json(项目级,可提交):{ "mcpServers": { "open-connector": { "type": "http", "url": "http://localhost:3000/mcp" } } }设了 runtime token 时加
headers: { "Authorization": "Bearer oct_..." }。Claude Desktop——编辑
%APPDATA%\Claude\claude_desktop_config.json:{ "mcpServers": { "open-connector": { "command": "npx", "args": ["-y", "mcp-remote", "http://localhost:3000/mcp"] } } }保存后完全退出客户端再重开。验证:
claude mcp list(Claude Code)或桌面端左下角工具图标。实例:用 MCP 列出 GitHub 仓储(含数据流程)
Claude 自主按需调用 4 个 tool,你只需要用自然语言说话:
关键点:你不需要指定工具名、参数、调几次——Claude 根据 tool 的 description 匹配你的意图,自主完成多步链式调用。和 oo 路径相比,两者打到同一个 open-connector、用同一份 GitHub 凭证、走同一个
ActionRunner.run(),区别仅在caller标记(httpvsmcp)和接入协议。MCP vs oo CLI 协议区别
/v1/actions/*)ooskill 文本教 agent 用oo searchoo(含 skill 分发)5. Web Console
是什么:open-connector 自带的浏览器管理面板,Docker/Podman 下在
http://localhost:3000/。功能:
Web Console 是唯一走
/api/*管理端点的接入方式,也是唯一供"人"而不是"程序/agent"用的。如何添加自己的 Provider
open-connector 的 provider 都是
src/providers/<service>/下的源码。添加一个完整 provider 只需要三个文件,然后跑生成命令即可注册进 catalog。Provider 文件结构
关键约束:
index.tsbarrel 文件definition.ts不能 importexecutors.ts(保持 definition 可无网络/凭证导入,executor 懒加载)src/core/json-schema.ts的shelper 构建,别复制 catalog JSONcontext.fetcher(SSRF-guarded),不能用 global fetchregistry.generated.ts/catalog/apps/*.json按鉴权类型选样板
hackernews/nasadefineProviderExecutors+context.fetcheravoma/attentiondefineApiKeyProviderExecutorsgithubdefineBearerProviderExecutorsgmaildefineOAuthProviderExecutors+ credential 校验clickhouse/dataforseobaselinker/autotask最小示例:加一个 no_auth 的内部服务
假设要接一个内部 status 页 API(无鉴权,
GET /api/incidents):definition.ts —— 声明 provider 元数据 + action 清单:
actions.ts —— 定义 action 的 schema(用
shelper):executors.ts —— 实现 action 逻辑(用
context.fetcher出网):实现流程
definition.ts/actions.ts/executors.ts(+ 必要的runtime-*.ts)npm run generate:catalog—— 注册进 catalog(生成registry.generated.ts和catalog/apps/*.json,这俩是 gitignore 的)npm run fix-check—— lint + 格式化 + typecheck跑完
generate:catalog后,你的 provider 会出现在:/v1/providers、/v1/actionscatalog 接口search_actions搜索结果oo connector search的结果五种接入方式立刻通用——因为它们共用同一个 catalog。
贡献回上游 vs 私有自托管
日常运维
改了
.env后必须podman compose up -d(或restart)才生效——环境变量在容器启动时注入。常见坑(PowerShell)
curl报 "找不到驱动器 http"curl是Invoke-WebRequest别名curl.exe--data '{}'报 "Single quotes not allowed in JSON"'{}'正常;cmd 里用"{}"Invoke-RestMethod,或--data "@payload.json"从文件读\不识别`oo找不到podman compose打印 "Executing external compose provider"fetch failed(500)文件清单
部署后涉及的文件:
open-connector\.envopen-connector\docker-compose.override.ymlopen-connector\start-open-connector.batoo-cli-path\oo.batconnector.toml总结:如何选择
路径收敛:不管你选哪条接入路径,最终都经过同一套执行管线:
这条管线不关心
caller是"http"/"mcp"/"web"——行为完全一致。这就是"一个运行时,多种接入方式"在代码层的实质。Beta Was this translation helpful? Give feedback.
All reactions