关于 LLM Provider MCP
LLM Provider MCP 是 Go 库及可选的本地 stdio MCP 服务,用于统一调用托管模型 API 与本地编码 Agent。其 MCP 部分可将异步编码任务委派给其他 CLI Agent,并通过 SQLite 保存任务状态。
主要功能
- 01统一的 Go 模型接口
- 02支持托管 API 与本地编码 Agent
- 03异步任务委派与状态查询
- 04SQLite 持久化任务
- 05管理任务取消与输出
适用场景
- 01在 Go 应用中切换模型 API 与本地 Agent
- 02让一个编码 Agent 委派任务给另一个 CLI
- 03稍后查看异步编码任务进度与结果
MCP 相关
可选的 llm-provider-mcp 以本地 stdio MCP 服务形式运行,提供列出 Agent 与模型、启动异步任务、查询任务和取消任务的工具。任务通过 tmux 会话执行,并保存在 SQLite 中。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Go 多 LLM 提供商
multi-llm-provider-go 是一个 Go 库,可通过一组统一的提供商接口使用托管 LLM API 和本地编码 Agent。
它支持两种互补的模型运行方式:
- API 提供商通过常规 SDK 或 HTTP 传输方式调用托管模型,包括 OpenAI、Anthropic、Bedrock、Vertex AI、Azure 和 OpenRouter。
- 编码 Agent 提供商通过原生 SDK 或协议会话运行 Claude Code、Codex CLI、Cursor Agent 或 Pi,同时保留其原生工具、订阅、项目上下文和已认证会话。
此代码库还包含 llm-provider-mcp,这是一个可选的 MCP 服务,用于在编码 Agent 之间委派异步工作。它是使用提供商库的一种方式,而不是该库唯一的使用场景。
为什么要构建此项目
应用应该能够为每项任务选择合适的模型和传输方式,而无需重建其编排层。
如果你想要常规的请求/响应集成、可预测的基础设施,或结构化输出、嵌入和媒体生成等模型级功能,请使用直接 API。如果你希望 Agent 能检查代码库、编辑文件、运行命令并复用现有的本地订阅,请使用编码 Agent CLI。两者都可以通过同一个 Go 模型抽象来使用。
flowchart LR
App[Go application] --> Provider[Shared provider interfaces]
Provider --> API[API and cloud adapters]
Provider --> CLI[Local coding-agent adapters]
API --> Hosted[Hosted models]
CLI --> Native[SDK / app-server / RPC]
CLI --> Tmux[Optional tmux sessions]
Native --> Agents[Claude Code / Codex / Cursor / Pi]
Tmux --> Agents
MCP[Optional MCP server] --> CLI
支持的提供商
核心工厂 InitializeLLM 会为文本和编码 Agent 提供商返回相同的 llmtypes.Model 接口:
| 提供商 ID | 集成 | 传输方式 |
|---|---|---|
openai | OpenAI | OpenAI Go SDK |
anthropic | Anthropic | Anthropic Go SDK |
openrouter | OpenRouter | 兼容 OpenAI 的 API |
bedrock | AWS Bedrock | AWS SDK |
vertex | Google Vertex AI 和 Gemini | Google Gen AI SDK |
azure | Azure AI | 兼容 Azure/OpenAI 的 API |
z-ai | Z.AI | 兼容 OpenAI 的 API |
kimi | Kimi/Moonshot | 兼容 OpenAI 的 API |
minimax、minimax-coding-plan | MiniMax | 提供商 API |
claude-code | Claude Code | Agent SDK;可选 tmux |
codex-cli | Codex CLI | app-server;可选 tmux |
cursor-cli | Cursor Agent | Cursor SDK;可选 ACP 或 tmux |
pi-cli | Pi | RPC |
专用工厂提供文本模型接口无法涵盖的能力:
| 能力 | 提供商 |
|---|---|
| 嵌入 | OpenAI、OpenRouter、Vertex AI、Bedrock |
| 图像生成 | Vertex AI、MiniMax Coding Plan、Codex CLI |
| 视频生成 | Vertex AI(Veo 和 Gemini Omni) |
| 文本转语音 | Vertex AI、MiniMax、ElevenLabs、Deepgram |
| 音频转录 | Deepgram |
| 音乐生成 | ElevenLabs、MiniMax |
可通过 Vertex AI 使用 Gemini 模型,以直接访问 API;也可通过 Pi 将其作为编码 Agent 使用。旧版 Gemini CLI 适配器已移除。
常见能力
各提供商的支持情况不同,但统一接口涵盖:
- 文本生成和流式传输
- 工具调用和结构化输出
- Token 用量、模型元数据、日志记录和事件发出
- 嵌入
- 图像输入和生成
- 视频生成和对话式视频编辑
- 音频生成和转录
- 音乐生成
- 有状态的编码 Agent 会话、续接和终端进度
快速入门:Go 库
安装模块:
go get github.com/manishiitg/multi-llm-provider-go@latest
当前模块要求 Go 1.25.12 或更高版本。
初始化提供方,并使用返回的 llmtypes.Model:
package main
import (
"context"
"fmt"
"log"
llmproviders "github.com/manishiitg/multi-llm-provider-go"
"github.com/manishiitg/multi-llm-provider-go/llmtypes"
)
func main() {
model, err := llmproviders.InitializeLLM(llmproviders.Config{
Provider: llmproviders.ProviderOpenAI,
ModelID: "gpt-4.1-mini",
})
if err != nil {
log.Fatal(err)
}
response, err := model.GenerateContent(
context.Background(),
[]llmtypes.MessageContent{
llmtypes.TextParts(llmtypes.ChatMessageTypeHuman, "Explain tmux in one sentence."),
},
)
if err != nil {
log.Fatal(err)
}
if len(response.Choices) == 0 {
log.Fatal("provider returned no choices")
}
fmt.Println(response.Choices[0].Content)
}
设置所选提供方所需的凭据,例如 OpenAI 使用 OPENAI_API_KEY。也可以通过 Config.APIKeys 显式提供凭据。有关流式处理、工具调用、自定义日志记录、Bedrock 和 Vertex AI,请参阅示例。
配置
llmproviders.Config 用于控制提供方初始化:
| 字段 | 用途 |
|---|---|
Provider | 选择 API、云平台或编码 CLI |
ModelID | 选择模型;支持时将使用提供方默认值 |
Temperature | 设置支持此项的提供方的采样温度 |
APIKeys | 显式提供凭据,而非使用环境变量 |
MaxRetries | 配置所选模型的重试次数 |
Logger / EventEmitter | 接入宿主日志记录、跟踪和模型事件 |
Context | 控制初始化生命周期和取消 |
常见凭据来源包括:
| 提供方 | 环境变量或原生身份验证 |
|---|---|
| OpenAI | OPENAI_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
| OpenRouter | OPENROUTER_API_KEY |
| AWS Bedrock | 标准 AWS 凭据链和 AWS_REGION |
| Vertex AI | VERTEX_API_KEY、GOOGLE_API_KEY 或 Google 应用凭据 |
| Azure AI | AZURE_AI_ENDPOINT 和 AZURE_AI_API_KEY |
| Z.AI / Kimi | ZAI_API_KEY、KIMI_API_KEY |
| MiniMax | MINIMAX_API_KEY 或 MINIMAX_CODING_PLAN_API_KEY |
| ElevenLabs / Deepgram | ELEVENLABS_API_KEY、DEEPGRAM_API_KEY |
| 编码 Agent CLI | 现有的原生 CLI 登录信息或提供方配置 |
常见提供方凭据请参阅 .env.example。模型、端点、回退和测试专用变量的文档,位于使用这些变量的提供方适配器和测试旁。
更改传输方式时,从更改提供方开始:
config.Provider = llmproviders.ProviderAnthropic // direct API
config.Provider = llmproviders.ProviderBedrock // cloud API
config.Provider = llmproviders.ProviderCodexCLI // local coding agent
config.Provider = llmproviders.ProviderCursorCLI // local coding agent
有界的编码 Agent 调用可以自动使用进程工作目录和临时会话。长期运行的宿主应用应显式传入 CodingAgentWorkingDirOption、CodingAgentInteractiveSessionOption 和 CodingAgentPersistentInteractiveOption。提供方专用选项还可控制模型、审批策略、恢复 ID、工具和流式处理行为。
编码 Agent 传输方式
编码 Agent 适配器可将原生编码 CLI 转换为提供方,而无需重新实现其 Agent 循环。它们使用各 CLI 现有的登录和模型访问方式,并在本地项目中通过该 CLI 的原生文件和 Shell 工具运行。
原生 SDK 和协议传输方式是默认选项。需要终端会话时,请显式使用 tmux:
| 提供方 | 默认值 | 环境变量覆盖项 |
|---|---|---|
| Claude Code | SDK | CLAUDE_CODE_TRANSPORT=sdk 或 tmux |
| Codex | app-server | CODEX_CLI_TRANSPORT=app-server 或 tmux |
| Cursor | SDK | CURSOR_CLI_TRANSPORT=sdk、acp 或 tmux |
| Pi | RPC | 无终端传输方式 |
在后端设置这些变量,然后重启后端。原生启动失败时,不会自动切换到 tmux。SDK 模式需要 Node.js 和对应的 @anthropic-ai/claude-agent-sdk 或 @cursor/sdk 包。适配器会先在受管理的 CLI 安装前缀中查找,再查找全局 npm 前缀;也支持显式设置 CLAUDE_AGENT_SDK_PATH 和 CURSOR_SDK_PATH 覆盖路径。
| CLI | 提供方 ID | 身份验证 |
|---|---|---|
| Claude Code | claude-code | 现有 Claude Code 登录或限定范围的 OAuth 令牌 |
| Codex CLI | codex-cli | 现有 Codex 登录 |
| Cursor Agent | cursor-cli | 现有 Cursor 登录 |
| Pi CLI | pi-cli | 现有 Pi/提供方配置 |
可选 tmux 传输方式的要求:
- macOS 或 Linux
- tmux 3.x 或更高版本
- 至少安装并完成身份验证的一个编码 CLI
该库提供会话生命周期、恢复、输入、中断、窗格捕获和清理辅助函数,方便宿主应用将编码 Agent 纳入自身工作流进行管理。
模块布局
multi-llm-provider-go/
├── providers.go # Provider IDs, configuration, initialization
├── provider_*.go # Shared provider behavior and media factories
├── interfaces/ # Logging, events, and public support contracts
├── llmtypes/ # Messages, responses, tools, streams, options
├── pkg/adapters/ # API, cloud, media, and coding-CLI adapters
├── pkg/codingagentjob/ # Durable asynchronous job execution
├── pkg/codingagentmcp/ # Optional MCP tool surface
├── pkg/tmuxcapture/ # Terminal progress capture and cleanup
├── cmd/llm-chat/ # Local provider chat client
├── cmd/llm-test/ # Manual provider contract runner
└── cmd/llm-provider-mcp/ # Optional delegation MCP server
llmtypes.Model 是文本请求/响应的核心接口。其他接口涵盖嵌入、图像生成、视频生成、音频生成与转录,以及音乐生成。
可选:通过 MCP 进行异步委派
llm-provider-mcp 将编码 Agent 提供方打包为本地 stdio MCP 服务。Codex 或 Claude Code 宿主可以在另一个编码 CLI 中排入任务,继续工作,之后再获取结果。任务会持久化到 SQLite 中,并在分离的 tmux 会话中执行。
在需要进行委派的项目中安装:
curl -fsSL https://raw.githubusercontent.com/manishiitg/llm-provider-mcp/main/scripts/install-mcp.sh | sh
设置过程会检测已安装的 CLI,为当前项目注册所选的宿主和目标,验证身份验证,并安装委派技能。该服务也已发布在官方 MCP Registry,名称为 io.github.manishiitg/llm-provider-mcp。
它提供五个工具:
| 工具 | 用途 |
|---|---|
list_coding_agents | 列出已启用的目标及其功能 |
list_coding_agent_models | 探测可用的模型选择器 |
delegate_coding_agent | 启动异步编码任务 |
get_coding_agent_job | 查看进度、终端输出或最终结果 |
cancel_coding_agent_job | 停止已排队或正在运行的任务 |
安全与信任
- 直接 API 凭据保留在宿主进程中,或由提供方的常规凭据链管理。
- 编码 Agent 凭据由原生 CLI 管理。
- 由 tmux 承载的 Agent 拥有本地用户的文件系统和进程权限;tmux 是一种传输方式,并非沙盒。
- 编码 Agent 可以修改工作树并运行命令。接受委派的更改前,请先审查并测试。
LLM_PROVIDER_MCP_WORKSPACE_ROOTS可以限制 MCP 服务接受的目录,但不会创建操作系统沙盒。
在敏感代码仓库中启用无人值守的编码 Agent 执行之前,请阅读安全与信任。在共享 Linux 主机上,请使用每个用户自己的 Linux 账户运行其 CLI:Slot launches。
测试与覆盖率
由于托管 API 和终端 TUI 的故障方式各不相同,仓库采用了多层测试:
| 层级 | 验证内容 | 常规 CI |
|---|---|---|
| 单元测试和适配器测试 | 请求转换、事件解析、元数据、定价、选项、清理 | 是 |
| 回放和固定数据测试 | 无需网络访问即可测试提供商响应和终端记录 | 是 |
| 契约测试 | API 提供商和编码 Agent 之间的共享行为 | 是 |
| 真实 API 测试 | 身份验证、实时响应格式、流式传输、工具、媒体 | 选择性启用 |
| 真实编码 Agent 端到端测试 | tmux 启动、提示词、工具、恢复、实时输入、取消、隔离 | 选择性启用 |
| 下游编译检查 | 与 MCP Agent 和 MCP Agent Builder 的公共 API 兼容性 | 是 |
API 提供商的覆盖情况并不一致。以下清单反映了仓库中目前已有的测试和手动命令:
| 提供商 | 确定性或回放覆盖 | 选择性启用的实时 Go 测试 | 手动 llm-test 命令 |
|---|---|---|---|
| OpenAI | 是 | 是 | 是 |
| Anthropic | 是 | 是 | 是 |
| Bedrock | 是 | 是 | 是 |
| Vertex AI | 是 | 是 | 是 |
| Azure AI | 回放 | 尚未提供 | 是 |
| OpenRouter | 回放 | 尚未提供 | 是 |
| Z.AI | 有限 | 是 | 是 |
| Kimi | 模型元数据 | 是 | 尚未提供 |
| MiniMax | 是 | 需提供凭据 | 是 |
| ElevenLabs / Deepgram | 尚未提供 | 尚未提供 | 尚未提供 |
“是”并不表示已覆盖所有功能。 API 提供商测试契约 按功能区分了自动化 Go 测试、回放/手动冒烟测试覆盖、部分覆盖和已知缺口。
编码 Agent 认证套件覆盖了所有四个活跃的 CLI 提供商:
| 契约领域 | Claude Code | Codex CLI | Cursor Agent | Pi CLI |
|---|---|---|---|---|
| tmux 启动和工作目录 | ✓ | ✓ | ✓ | ✓ |
| 原生系统指令和提示词粘贴 | ✓ | ✓ | ✓ | ✓ |
| 终端进度和完成检测 | ✓ | ✓ | ✓ | ✓ |
| MCP 桥接和工具策略 | ✓ | ✓ | ✓ | ✓ |
| 持久会话和续接 | ✓ | ✓ | ✓ | ✓ |
| 实时输入、取消和清理 | ✓ | ✓ | ✓ | ✓ |
| 并行/会话隔离 | ✓ | ✓ | ✓ | ✓ |
编码 Agent 矩阵列出了会阻止发布的契约领域。更广泛的非 P0 认证缺口仍会在 knownCertificationGaps 中明确跟踪。这些检查并不保证所有上游 CLI 版本的行为都一致。真实测试需要通过明确的环境变量启用,并要求登录相应的 CLI 或提供商凭据。
运行离线测试套件并构建手动测试客户端:
go test -p 1 ./...
make build
./bin/llm-test --help
各提供商的详细覆盖情况和真实测试命令见:
代码质量与密钥扫描
项目使用 golangci-lint 进行静态分析,并使用 gitleaks 扫描密钥:
make lint
make scan-secrets
文档
开发
make build
make build-mcp
go test -p 1 ./...
golangci-lint run --timeout=5m ./...
CI 还会针对当前检出版本对 MCP Agent 和 MCP Agent Builder 进行编译检查,以防意外破坏公共 API。
提交拉取请求前,请参阅 CONTRIBUTING.md。安全问题请通过 SECURITY.md 报告,不要提交公开问题。
许可证
multi-llm-provider-go 自 2026-10-09 起依据 Business Source License 1.1 提供源代码。你可以将其用于个人项目、开发、测试、评估、教育和研究,并阅读、修改和运行它。将其用于企业运营或向他人提供,需要商业许可证:请通过 agentworkshq.com/about 联系我们。每个版本都会在许可证中规定的变更日期转换为 Apache License 2.0。2026-10-09 之前发布的版本仍依据 MIT License 提供。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。