harness - LSP 服务接入
2026年10月8日 上午9:13:12
马具可以接入 LSP(Language Server Protocol)服务,让 Agent 具备更深入的代码理解能力,例如定义跳转、引用查找、诊断等。MCP 第三方工具网关接入见 《harness - MCP 服务接入》,OpenAPI 业务接口接入见 《harness - OpenAPI 业务接口接入》。
1、开启 LSP 工具权限
lsp 已经在 *(全部公域)与 **(全部完整)的展开列表中(见《harness - 工具名映射与权限解析参考》),使用 * / ** 时无需再单独配置;若 Agent 使用具名工具列表,则需要显式加入 lsp:
HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
.sessionProvider(sessionProvider)
.toolsAdd(ToolName.TOOL_LSP) // 开启 lsp 工具权限
.build();
也可以在运行时动态授权:
engine.allowTool("lsp");
2、构建期静态注册
LspServerParameters 有两个必填项:启动命令 command 与关联扩展名 extensions,缺少任一项时该服务器会被跳过(只打印警告日志):
LspServerParameters javaLsp = new LspServerParameters(
Arrays.asList("jdtls", "-data", ".solon/lsp/java-workspace"),
Arrays.asList(".java"));
HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
.sessionProvider(sessionProvider)
.toolsAdd(ToolName.TOOL_LSP)
.lspServerAdd("java", javaLsp)
.build();
如果项目需要多种语言服务,可以按名称分别注册:
HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
.sessionProvider(sessionProvider)
.toolsAdd(ToolName.TOOL_LSP)
.lspServerAdd("java", javaLspServer)
.lspServerAdd("typescript", tsLspServer)
.build();
LspServerParameters 字段:
| 字段 | 说明 |
|---|---|
command | 启动命令(必填),如 ["jdtls", "-data", "…"] |
extensions | 关联文件扩展名(必填),如 [".java", ".kt"] |
enabled | 是否启用,默认 true;禁用的服务器仍会登记配置,但路由时跳过 |
initialization | 服务器初始化参数(可选) |
env | 额外环境变量(可选) |
3、运行时动态管理
引擎启动后,仍可动态添加或移除 LSP 服务:
engine.addLspServer("java", lspServerParameters);
engine.removeLspServer("java");
LSP 服务增删后,会触发主代理重建以刷新工具集,并对后续会话生效。
4、说明
| 配置 / 权限 | 说明 |
|---|---|
ToolName.TOOL_LSP | 开启 LSP 工具权限 |
lsp | 工具名,已包含在 * / ** 展开列表中;运行时可通过 allowTool("lsp") 授权 |
lspServers | LSP 服务配置集合 |
LSP 能力更偏向“代码理解”,适合和
read、grep、glob、code等工具一起使用。授权方式见 《harness - 配置参考》。