直接结论:OpenCode LSP 把代码智能服务接入编码 agent,让会话可以使用语言相关的诊断、定义、引用、符号和悬停信息。LSP 不是 MCP,也不能代替格式化工具或测试。应先按官方 LSP 配置说明确认命令、文件扩展名和项目目录,再用低风险任务验证,保留清晰的回滚路径。
搜索 OpenCode 中的 LSP 是什么 的用户通常还想知道:LSP 会改变什么、为什么没有诊断、配置文件在哪里,以及如何处理被禁用的服务器。本指南把这些问题放在同一条路径中回答,并把安装、Provider 和 MCP 的页面意图分开。
截至 2026 年 8 月 10 日,OpenCode 官方 LSP 页面标题为 LSP Servers,并说明 OpenCode 可以接入 LSP 服务器。页面记录了 lsp 配置对象、命令与扩展名、初始化参数、全部禁用、单个服务器禁用和自定义服务器示例。命令与语言包仍应以服务器维护者的官方文档为准。

OpenCode 中的 LSP 是什么?让代码具备语言上下文
LSP 是 Language Server Protocol,即语言服务器协议。语言服务器会在项目旁运行,提供诊断、符号、定义、引用、悬停信息等结构化数据。OpenCode 因此可以把代码当作具有语言关系的项目来理解,而不是只读取孤立的文本。
它真正带来的价值是更好的上下文。如果 TypeScript 服务器知道某个符号来自哪个模块,agent 在解释类型错误或重命名时就有更多证据。但 LSP 不保证答案一定正确:服务器可能没有启动,项目可能没有正确加载,语言包也可能有自己的配置要求。它补充工作流信息,不能代替审查、测试和 Git diff。
一个好用的理解方式
把 OpenCode 看作消费者,把 LSP 服务器看作语言专家,把仓库看作共同的事实来源。出现问题时先判断是哪一层失败,不要一开始就放宽权限或更换模型。
| 层 | 提供什么 | 不能代替什么 |
|---|---|---|
| LSP | 语言诊断、符号、定义和引用 | 测试、格式化和代码审查 |
| MCP | 外部工具和数据服务 | 项目语言服务器 |
| 格式化工具 | 代码风格和排版 | 类型或语义诊断 |
| Provider/模型 | 推理与代码生成 | 可用的项目工具链 |
OpenCode 如何找到合适的 LSP 服务器
LSP 条目需要可执行命令,并需要和文件扩展名建立明确关系。命令负责启动服务器,扩展名列表告诉 OpenCode 哪些文件应该使用它。具体可执行文件、参数、安装方法和项目要求取决于语言服务器的文档,不要根据搜索结果猜包名。
先在小仓库中验证一种语言。打开目标扩展名的文件,必要时在同一终端中确认服务器可以启动,再让 OpenCode 做只读摘要或诊断检查。如果扩展名没有匹配,即使服务器本身有效,OpenCode 也没有理由把它连接到当前文件。

| 检查点 | 证据 | 失败时先查 |
|---|---|---|
| 命令 | 可执行文件能以预期参数启动 | PATH、运行时、包和 stderr |
| 扩展名 | 文件扩展名匹配 LSP 条目 | .ts、.tsx 或服务器文档列出的扩展名 |
| 工作区 | 服务器打开正确的项目根目录 | Git 根目录和项目配置 |
| 结果 | 返回诊断或符号 | 服务器日志和 OpenCode 配置 |
先添加最小的 lsp 配置,再逐步调整
整个仓库都需要的 LSP 决策可以放在经过审查的项目配置中。个人实验先放在全局配置,等命令、扩展名和项目根目录都确认后再共享。已有的 OpenCode JSONC 指南适合处理配置层级和 Schema 校验;本页聚焦语言服务器行为。
最小条目比一次加入很多服务器更容易排错。给服务器一个可读的名称,明确写出命令数组,只填写服务器真正支持的扩展名。基础进程正常后再添加初始化参数。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。记录系统、服务器命令、扩展名、项目根目录和测试提示词。这份小记录比一句“安装成功”更有用,也能帮助下一次故障定位。
- 清理从分支和工作树状态明确的仓库开始。
- 匹配打开 LSP 条目列出的扩展名文件。
- 读取请求符号、定义、引用或诊断解释。
- 修改做一次小而可回滚的修改并查看 diff。
- 记录保存命令、模型、服务器和回滚方式。
排查 opencode lsps are disabled 与没有诊断
当 OpenCode 提示 LSP 被禁用时,先检查配置层级,不要马上重装。更高优先级的文件可能设置了 lsp: false,项目可能没有写服务器名称,或者某个服务器带有 disabled 标记。把最终生效的项目路径和配置文件实际所在目录对照起来。
服务器已启用但没有诊断时,再检查命令和扩展名。尽量在相同 shell 中直接运行服务器,确认运行时和 PATH,并检查项目是否需要 lockfile、编译器配置或工作区根目录。第一次结果较慢,可能只是服务器正在索引大型仓库。
权限调整要保持最小范围。LSP 需要进程和项目上下文,但这不自动意味着可以开放宽泛的 shell、更多 MCP 工具或自动批准模式。权限页负责 ask/allow/deny,MCP 页负责外部工具服务器;跨层排错时再链接它们。

| 症状 | 最可能的层 | 第一步修复 |
|---|---|---|
| 所有 LSP 都被禁用 | 配置层级或 lsp: false | 找出最终配置并移除误关闭 |
| 单个服务器被禁用 | 服务器开关 | 检查名称和 disabled 值 |
| 没有诊断 | 扩展名或进程 | 匹配扩展名并直接运行命令 |
| 首次结果很慢 | 索引或工作区 | 换小仓库并查看服务器日志 |
| 编辑器有结果,OpenCode 没有 | 项目根或配置不同 | 对比编辑器根目录、Git 根目录和 OpenCode 路径 |
LSP、MCP、格式化工具和 VS Code 是不同层
LSP 负责仓库里的语言智能;MCP 连接外部工具或数据;格式化工具改变样式;测试运行器提供可执行证据。VS Code 可以有自己的语言集成,但编辑器显示诊断,并不能证明 OpenCode 使用了同一个服务器或项目根目录。
症状属于其他层时应回到对应指南:MCP 页处理本地和远程工具服务器,VS Code 页处理编辑器上下文和终端集成,权限页处理审批边界。把这些意图分开,也能让 OpenCode LSP 页面保持聚焦。
opencode.jsonc 配置指南:先确定配置范围并校验 Schema。
OpenCode VS Code 使用指南:对比编辑器上下文、终端路径和快捷键。
OpenCode 权限指南:保持进程和仓库权限收窄。
OpenCode MCP 指南:区分外部工具服务器和语言服务器。
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 日核查;服务器命令、支持扩展名和配置字段可能变化。