跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

ACP server 与客户端集成

选择 stdio 或 TCP,管理会话初始配置并动态发现支持的命令。

Agent Client Protocol(ACP)为编辑器或其他客户端与智能体提供标准通信方式。Copilot CLI 的 ACP server 当前为 public preview,可用于 IDE、自定义界面和程序编排。

启动与认证

copilot --acp --stdio

不写传输参数时默认 stdio。客户端通常把它作为子进程启动,通过 stdin / stdout 交换逐行 JSON(NDJSON);输入流关闭后服务退出。stdout 专用于协议,不能混入日志或普通输出。

需要 socket 连接时:

copilot --acp --port 3000

TCP 默认绑定 127.0.0.1,可接受独立客户端连接,不随单一客户端断开而退出。--stdio 与 --port 互斥。

CLI 需要已登录 GitHub,或已配置 BYOK;ACP 的 BYOK 会话与普通模式一致,可不登录 GitHub。

在服务启动时决定初始配置

session/new 可指定工作目录和 MCP servers 等参数,不携带工具过滤和 reasoning 设置。应由服务启动者设置:

copilot --acp --port 3000 --effort=max --available-tools="bash,view"

--available-tools 限制可见工具,--excluded-tools 排除工具;--effort / --reasoning-effort 接受 low、medium、high、xhigh、max。服务创建或加载的每个会话都继承这些初始值,连接客户端不能通过 session/new 任意改写。

客户端基本流程

客户端启动或连接服务后先 initialize,再 newSession,传入 cwd 和 mcpServers,然后用 sessionId 发送 prompt。实现 sessionUpdate 处理流式消息;实现 requestPermission 处理批准请求,而不是忽略协议中的权限环节。

官方 TypeScript 示例使用 @agentclientprotocol/sdk 的 ndJsonStream 和 ClientSideConnection。它演示的是客户端接入,不改变 npm 方式安装 Copilot CLI 的运行环境前提。

发现可执行命令

服务在创建或加载会话后发送 available_commands_update,Skills 加载等情况发生时也会再次发送。通知中的列表是完整快照,每次替换缓存,不是增量追加。

条目包含不带前导斜杠的 name、description 和可选 input.hint。当前列表才是可执行命令的依据,没有按需查询列表的方法;客户端要处理 session/update 通知。

执行时将命令作为单个 text content block 发送,例如 /context。信息命令直接返回结果,不调用模型;/plan、/review 等工作命令启动对应任务。

不支持终端界面命令

依赖 picker、弹窗或全屏 UI 的 /diff、/resume、/settings、/login、/help、/tasks、/undo 等不由 ACP 执行。不在通知列表里的命令文本可能被当成普通提示发给模型,不能据此认为设置已生效。

没有交互选择器时,应显式传子命令,例如 /session info、/mcp list。可调用的 Skills 会以 /SKILL-NAME 出现在通知中,但客户端自身注册的命令不会回传给它。