Merge pull request #4129 from code-yeongyu/feature/stage-c-lsp-mcp

Extract LSP tools into Tier-1 MCP server via lsp-tools-mcp submodule
This commit is contained in:
YeonGyu-Kim
2026-05-18 13:39:17 +09:00
committed by GitHub
64 changed files with 290 additions and 3668 deletions
+2 -1
View File
@@ -60,7 +60,6 @@ const lookAt = isMultimodalLookerEnabled ? { look_at: createLookAt(ctx) } : {}
const interactiveBashTool = interactiveBashEnabled ? { interactive_bash } : {}
const allTools = {
...builtinTools, // 6 LSP
...createGrepTools(ctx),
...createGlobTools(ctx),
...createAstGrepTools(ctx),
@@ -74,6 +73,8 @@ const allTools = {
...taskToolsRecord, // +4 conditional
...hashlineToolsRecord, // +1 conditional
}
// lsp_* tools are now supplied by built-in MCP server "lsp"
```
## KEY PATTERNS
-2
View File
@@ -36,7 +36,6 @@ import { extractRetryAttempt, normalizeRetryStatusMessage } from "../shared/retr
import { clearSessionModel, getSessionModel, setSessionModel } from "../shared/session-model-state";
import { clearSessionPromptParams } from "../shared/session-prompt-params-state";
import { deleteSessionTools } from "../shared/session-tools-store";
import { lspManager } from "../tools";
import { dispatchOpenClawEvent } from "../openclaw/runtime-dispatch";
import { createTeamIdleWakeHint } from "../hooks/team-session-events/team-idle-wake-hint";
import { buildTeamIdleWakeHintClient } from "./build-team-idle-wake-hint-client";
@@ -713,7 +712,6 @@ export function createEventHandler(args: {
}
deleteSessionTools(sessionID);
await managers.skillMcpManager.disconnectSession(sessionID);
await lspManager.cleanupTempDirectoryClients();
if (tmuxIntegrationEnabled) {
await managers.tmuxSessionManager.onSessionDeleted({
sessionID,
+5 -3
View File
@@ -1,7 +1,6 @@
const { afterEach, describe, expect, test } = require("bun:test")
const { createToolExecuteBeforeHandler } = require("./tool-execute-before")
const { createToolRegistry } = require("./tool-registry")
const { builtinTools } = require("../tools")
const { resetStorageClient } = require("../tools/session-manager/storage")
describe("createToolExecuteBeforeHandler", () => {
@@ -335,13 +334,16 @@ describe("createToolRegistry", () => {
describe("#given max_tools is lower than or equal to builtin tool count", () => {
describe("#when creating the tool registry", () => {
test("#then it trims to the exact configured cap", () => {
const baseline = createToolRegistry(createRegistryInput())
const baselineToolCount = Object.keys(baseline.filteredTools).length
const result = createToolRegistry(
createRegistryInput({
experimental: { max_tools: Object.keys(builtinTools).length },
experimental: { max_tools: baselineToolCount },
}),
)
expect(Object.keys(result.filteredTools)).toHaveLength(Object.keys(builtinTools).length)
expect(Object.keys(result.filteredTools)).toHaveLength(baselineToolCount)
})
})
})
@@ -157,7 +157,6 @@ describe("team-mode tool registry wiring", () => {
},
availableCategories: [],
toolFactories: {
builtinTools: { bash: fakeTool, read: fakeTool },
createBackgroundTools: mock(() => ({})),
createCallOmoAgent: mock(() => fakeTool),
createLookAt: mock(() => fakeTool),
-1
View File
@@ -46,7 +46,6 @@ const TEAM_TOOL_NAMES = [
const { createToolRegistry, trimToolsToCap } = await import("./tool-registry")
const toolFactories: NonNullable<Parameters<typeof createToolRegistry>[0]["toolFactories"]> = {
builtinTools: { bash: fakeTool, read: fakeTool },
createBackgroundTools: mock(() => ({})),
createCallOmoAgent: mock(() => fakeTool),
createLookAt: mock(() => fakeTool),
-4
View File
@@ -25,7 +25,6 @@ import * as openclawRuntimeDispatch from "../openclaw/runtime-dispatch"
import type { PluginContext, ToolsRecord } from "./types"
import {
builtinTools,
createBackgroundTools,
createCallOmoAgent,
createLookAt,
@@ -53,7 +52,6 @@ import type { SkillContext } from "./skill-context"
import { normalizeToolArgSchemas } from "./normalize-tool-arg-schemas"
type ToolRegistryFactories = {
builtinTools: typeof builtinTools
createBackgroundTools: typeof createBackgroundTools
createCallOmoAgent: typeof createCallOmoAgent
createLookAt: typeof createLookAt
@@ -86,7 +84,6 @@ type ToolRegistryFactories = {
}
const defaultToolRegistryFactories: ToolRegistryFactories = {
builtinTools,
createBackgroundTools,
createCallOmoAgent,
createLookAt,
@@ -339,7 +336,6 @@ export function createToolRegistry(args: {
: {}
const allTools: Record<string, ToolDefinition> = {
...factories.builtinTools,
...factories.createGrepTools(ctx),
...factories.createGlobTools(ctx),
...factories.createAstGrepTools(ctx),