Solon v4.1.1

harness - LSP 服务接入

</> markdown
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") 授权
lspServersLSP 服务配置集合

LSP 能力更偏向“代码理解”,适合和 read、grep、glob、code 等工具一起使用。授权方式见 《harness - 配置参考》。