OpenCode LSP 指南

OpenCode LSP 指南:作用、启用方法与禁用排错

直接结论:OpenCode LSP 把代码智能服务接入编码 agent,让会话可以使用语言相关的诊断、定义、引用、符号和悬停信息。LSP 不是 MCP,也不能代替格式化工具或测试。应先按官方 LSP 配置说明确认命令、文件扩展名和项目目录,再用低风险任务验证,保留清晰的回滚路径。

直接结论:OpenCode LSP 把代码智能服务接入编码 agent,让会话可以使用语言相关的诊断、定义、引用、符号和悬停信息。LSP 不是 MCP,也不能代替格式化工具或测试。应先按官方 LSP 配置说明确认命令、文件扩展名和项目目录,再用低风险任务验证,保留清晰的回滚路径。

搜索 OpenCode 中的 LSP 是什么 的用户通常还想知道:LSP 会改变什么、为什么没有诊断、配置文件在哪里,以及如何处理被禁用的服务器。本指南把这些问题放在同一条路径中回答,并把安装、Provider 和 MCP 的页面意图分开。

截至 2026 年 8 月 10 日,OpenCode 官方 LSP 页面标题为 LSP Servers,并说明 OpenCode 可以接入 LSP 服务器。页面记录了 lsp 配置对象、命令与扩展名、初始化参数、全部禁用、单个服务器禁用和自定义服务器示例。命令与语言包仍应以服务器维护者的官方文档为准。

OpenCode LSP 将代码工作区连接到语言服务器和诊断结果
LSP 让语言服务器提供的诊断和代码关系进入 OpenCode 工作流。

OpenCode 中的 LSP 是什么?让代码具备语言上下文

LSP 是 Language Server Protocol,即语言服务器协议。语言服务器会在项目旁运行,提供诊断、符号、定义、引用、悬停信息等结构化数据。OpenCode 因此可以把代码当作具有语言关系的项目来理解,而不是只读取孤立的文本。

它真正带来的价值是更好的上下文。如果 TypeScript 服务器知道某个符号来自哪个模块,agent 在解释类型错误或重命名时就有更多证据。但 LSP 不保证答案一定正确:服务器可能没有启动,项目可能没有正确加载,语言包也可能有自己的配置要求。它补充工作流信息,不能代替审查、测试和 Git diff。

一个好用的理解方式

把 OpenCode 看作消费者,把 LSP 服务器看作语言专家,把仓库看作共同的事实来源。出现问题时先判断是哪一层失败,不要一开始就放宽权限或更换模型。

提供什么不能代替什么
LSP语言诊断、符号、定义和引用测试、格式化和代码审查
MCP外部工具和数据服务项目语言服务器
格式化工具代码风格和排版类型或语义诊断
Provider/模型推理与代码生成可用的项目工具链

OpenCode 如何找到合适的 LSP 服务器

LSP 条目需要可执行命令,并需要和文件扩展名建立明确关系。命令负责启动服务器,扩展名列表告诉 OpenCode 哪些文件应该使用它。具体可执行文件、参数、安装方法和项目要求取决于语言服务器的文档,不要根据搜索结果猜包名。

先在小仓库中验证一种语言。打开目标扩展名的文件,必要时在同一终端中确认服务器可以启动,再让 OpenCode 做只读摘要或诊断检查。如果扩展名没有匹配,即使服务器本身有效,OpenCode 也没有理由把它连接到当前文件。

OpenCode LSP 配置从 opencode.json 流向语言服务器和诊断结果
配置链路可以拆成三步:匹配扩展名、启动服务器、检查语言相关结果。
检查点证据失败时先查
命令可执行文件能以预期参数启动PATH、运行时、包和 stderr
扩展名文件扩展名匹配 LSP 条目.ts.tsx 或服务器文档列出的扩展名
工作区服务器打开正确的项目根目录Git 根目录和项目配置
结果返回诊断或符号服务器日志和 OpenCode 配置

先添加最小的 lsp 配置,再逐步调整

整个仓库都需要的 LSP 决策可以放在经过审查的项目配置中。个人实验先放在全局配置,等命令、扩展名和项目根目录都确认后再共享。已有的 OpenCode JSONC 指南适合处理配置层级和 Schema 校验;本页聚焦语言服务器行为。

最小条目比一次加入很多服务器更容易排错。给服务器一个可读的名称,明确写出命令数组,只填写服务器真正支持的扩展名。基础进程正常后再添加初始化参数。JSON 有效不代表运行时一定成功,因为可执行文件、工作区和语言包仍可能不匹配。

opencode.json 示例
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "command": ["typescript-language-server", "--stdio"],
      "extensions": [".ts", ".tsx"]
    }
  }
}

这是符合 Schema 形状的示例,不代表所有语言服务器使用同一个可执行文件。命令与扩展名必须核对官方文档。

启用、禁用或自定义 LSP 服务器

当前官方文档说明:如果省略 lsp,所有 LSP 服务器都会被禁用。如果其他配置已经启用服务器,可以把 lsp 设为 false 来全部关闭;也可以把某个服务器的 disabled 设为 true。服务器慢、输出噪声过多或不适合某个仓库时,这些开关很有用。

自定义服务器适合内置配置没有覆盖的语言或文件类型。先定义命令和扩展名,再根据服务器文档添加初始化参数。保留一份最后可用的配置,每次只改一个点,避免把自定义条目故障误判为模型或 MCP 故障。

禁用与自定义
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": false
}

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "custom-lsp": {
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"],
      "initialization": { "preferences": { "mode": "strict" } }
    }
  }
}

自定义命令和初始化对象是占位示例。请替换为服务器维护者提供的值,不要提交凭据或私有地址。

用低风险任务验证 OpenCode LSP

不要一开始就让 agent 重写大模块。使用 Git 状态清晰的仓库,打开一个确定的文件,先发起只读请求:让 OpenCode 识别符号、解释诊断或定位定义。结果应当足够具体,能够与编辑器、编译器或你信任的语言服务器输出对照。

只读路径稳定后,再做一次可回滚的小修改并检查 diff。记录系统、服务器命令、扩展名、项目根目录和测试提示词。这份小记录比一句“安装成功”更有用,也能帮助下一次故障定位。

  1. 清理从分支和工作树状态明确的仓库开始。
  2. 匹配打开 LSP 条目列出的扩展名文件。
  3. 读取请求符号、定义、引用或诊断解释。
  4. 修改做一次小而可回滚的修改并查看 diff。
  5. 记录保存命令、模型、服务器和回滚方式。

排查 opencode lsps are disabled 与没有诊断

当 OpenCode 提示 LSP 被禁用时,先检查配置层级,不要马上重装。更高优先级的文件可能设置了 lsp: false,项目可能没有写服务器名称,或者某个服务器带有 disabled 标记。把最终生效的项目路径和配置文件实际所在目录对照起来。

服务器已启用但没有诊断时,再检查命令和扩展名。尽量在相同 shell 中直接运行服务器,确认运行时和 PATH,并检查项目是否需要 lockfile、编译器配置或工作区根目录。第一次结果较慢,可能只是服务器正在索引大型仓库。

权限调整要保持最小范围。LSP 需要进程和项目上下文,但这不自动意味着可以开放宽泛的 shell、更多 MCP 工具或自动批准模式。权限页负责 ask/allow/deny,MCP 页负责外部工具服务器;跨层排错时再链接它们。

OpenCode LSP 排错的四个检查点:命令、扩展名、启用状态和诊断
按命令、文件扩展名、启用状态、返回诊断的顺序检查,定位会更快。
症状最可能的层第一步修复
所有 LSP 都被禁用配置层级或 lsp: false找出最终配置并移除误关闭
单个服务器被禁用服务器开关检查名称和 disabled
没有诊断扩展名或进程匹配扩展名并直接运行命令
首次结果很慢索引或工作区换小仓库并查看服务器日志
编辑器有结果,OpenCode 没有项目根或配置不同对比编辑器根目录、Git 根目录和 OpenCode 路径

LSP、MCP、格式化工具和 VS Code 是不同层

LSP 负责仓库里的语言智能;MCP 连接外部工具或数据;格式化工具改变样式;测试运行器提供可执行证据。VS Code 可以有自己的语言集成,但编辑器显示诊断,并不能证明 OpenCode 使用了同一个服务器或项目根目录。

症状属于其他层时应回到对应指南:MCP 页处理本地和远程工具服务器,VS Code 页处理编辑器上下文和终端集成,权限页处理审批边界。把这些意图分开,也能让 OpenCode LSP 页面保持聚焦。

OpenCode LSP 常见问题

OpenCode 中的 LSP 是什么?

LSP 是 Language Server Protocol 层,让 OpenCode 使用语言服务器提供的诊断、符号、定义和引用等语言相关信息。

如何在 OpenCode 中启用 LSP?

在合适的 OpenCode 配置中加入 lsp 条目,填写服务器命令和支持的文件扩展名,再用只读请求验证命令与项目根目录。

为什么 OpenCode LSP 被禁用了?

当前官方文档说明省略 lsp 会禁用所有服务器;最终生效的配置也可能把 lsp 设为 false,或者单个服务器设为 disabled: true。先查配置层级。

LSP 可以代替 MCP 吗?

不能。LSP 提供仓库语言智能,MCP 连接外部工具和数据。两者可以共存,但配置、故障和权限边界不同。

可以添加自定义 LSP 服务器吗?

可以。在 lsp 下定义命令和文件扩展名,只有服务器文档要求时才加入初始化参数,并先在小仓库里验证。

为什么 VS Code 有 LSP 结果,OpenCode 没有?

两者可能使用不同的项目根目录、命令、扩展名、运行时或配置文件。应逐项对比输入,而不是把编辑器结果当作 OpenCode 配置有效的证明。

已核查的官方来源

OpenCode LSP 参考

官方 LSP 页面于 2026 年 8 月 10 日核查;服务器命令、支持扩展名和配置字段可能变化。