#5102·openwork

[错误] MCP 应用程序主机不应应用 opencode 的 {env:} 配置替换,导致正确配置的 MCP 服务器无法访问

作者: juancarlosm创建于 2026年9月17日更新于 2026年9月17日

□ 总结

mcp-app-host.js'直接读取开口编码配置文件,并通过逐字记录通过MCPheaders'。 使用前的 opencode 替代 {env: VAR}; Apps 主机没有 。 任何远程的MCP服务器,其头部使用所记录的\ env:\ syntax,因此接收了文字模板作为证书,Apps主机永远无法与之连接.

工具调用工作(opencode makes those),所以服务器看起来很健康. 只有交互视图失败 。

□ 环境

  • OpenWork桌面 0.18.48,公开发行,Linux x86 64 AppImage
  • 开口码侧车1.18.30(捆绑)

□ 重现

  1. 在工作空间opencode.json'中,配置一个远程的MCP服务器,其认证信头使用 env:}-语法开口码本身的docs使用:

贾森 { "mcp": {(中文(简体) ). "我的服务器":{ "类型":"相去相去","相去相去". "url":"https://gateway.example.com/mcp/my-server","http". "头":{"克""克""克""克":"克""克""克":"克""克""克""克""克""克""克""克""克""克""克". "被启用":真实 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


2. 将`MY API KEY'导出后,开口编码即可解决。
3. 调用服务器上的任何工具。

** 预期:** 工具的结果;如果工具广告没有`ui://'资源,则不显示额外内容。

** 实际:** 工具结果正确,其次是:

交互视图不可用 。 通常的工具结果仍然可用. 可流式 HTTP POST: HTTP 401 代码:MCP APP resource RESOLUTION FAILED 原因代码: mcp 无法获取 阶段:资源解决 检查站:已启动 - >已启动的1+566ms - >已启动的2+1657ms - >已启动的3+4893ms


网关登录它实际得到的东西:`401:虚拟密钥预期。 Acceptéenv******KEY}, 期望从'sk-'开始——字面模板, 不是空值或错误值 。

□因缘.

`服务器/dist/mcp-app-host.js:12 ' ——意图表述正确:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
aync 函数列表Mcp( 服务器连接、 工作空间Id、 工作空间Root) {
// 账户范围网关活在引擎- 全球运行时层. 决定
// Apps针对生成工具调用的同一种有效配置.
返回列表McpFromRuntimeSnapshot(工作空间 Root,等待读取有效的Runtime Opencode Config(服务器Config,工作空间Id));
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

`服务器/dist/mcp.js:387'读取原始文件并存储未修改的条目:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? const {数据: config } = 正在等待读取 JsoncFile(opencode ConfigPath (workspace Root)), {允许 Invalid: true};


`服务器/dist/mcp-app-host.js:225'和`:102'然后将其直接交给运输:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
const requestInit = {标题:字符串标题(配置.标题)};

函数字符串标题( 值) {
如果 (! 记录( 值) ) 返回 Q;
返回对象。来自 Entries(Object.intries (value).filter ((enter) QQ 类型条目 [1] QQ"字符串");
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

`字符串头'是一种类型的过滤器。 这是相同的配置 * 文件 *,但不是相同的 * 分辨率 *。

optioncode 在“ ConfigVariable. 替代” 中解决它, 在解析前应用于整个配置文本 :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? r = o.text.取而代之 (/{env: ([)+)}/克, (D,n)=>(o.env??????? process.env[n]?)||"".


注意```:a
. . . . . . .

内容来源: different-ai/openwork