From 63efe4ca1c2ee652cc3edeba30ae117e852d5368 Mon Sep 17 00:00:00 2001 From: masnwilliams <43387599+masnwilliams@users.noreply.github.com> Date: Mon, 31 Aug 2026 21:21:23 +0000 Subject: [PATCH] Reduce noisy missing capability reports --- src/lib/mcp/analytics.test.ts | 15 ++++++++++++++- src/lib/mcp/analytics.ts | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/mcp/analytics.test.ts b/src/lib/mcp/analytics.test.ts index be1f5a78..5fabe2f8 100644 --- a/src/lib/mcp/analytics.test.ts +++ b/src/lib/mcp/analytics.test.ts @@ -615,7 +615,7 @@ describe("captureMcpFeedback", () => { describe("instrumentMcpAnalytics (SDK integration)", () => { const ORG = "org_integration"; - test("keeps the feedback tool schema stable when analytics is disabled", async () => { + test("keeps analytics tool contracts stable", async () => { const disabled = await connectTestMcp( (server) => instrumentMcpAnalytics(server, null), {}, @@ -639,6 +639,19 @@ describe("instrumentMcpAnalytics (SDK integration)", () => { expect(disabledTool?.inputSchema).toEqual(enabledTool?.inputSchema); expect(disabledTool?.inputSchema.required).toContain("context"); + const missingCapabilityTool = ( + await enabled.client.listTools() + ).tools.find(({ name }) => name === "get_more_tools"); + expect(missingCapabilityTool?.description).toContain( + "only after checking the available tools", + ); + expect(missingCapabilityTool?.description).toContain( + "transient failure or capacity limit", + ); + expect(missingCapabilityTool?.description).toContain( + "client-side permission restriction", + ); + const result = await disabled.client.callTool({ name: KERNEL_FEEDBACK_TOOL_NAME, arguments: { diff --git a/src/lib/mcp/analytics.ts b/src/lib/mcp/analytics.ts index a2dad933..6a3eaffb 100644 --- a/src/lib/mcp/analytics.ts +++ b/src/lib/mcp/analytics.ts @@ -311,7 +311,7 @@ const MISSING_CAPABILITY_CONTEXT_DESCRIPTION = function registerMissingCapabilityTool(server: McpServer) { server.tool( MISSING_CAPABILITY_TOOL_NAME, - "Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.", + "Report a genuine server capability gap only after checking the available tools and confirming none can complete the task. Do not call this for an existing fallback, a transient failure or capacity limit, or a client-side permission restriction; use the available tool or submit_feedback instead.", { context: z.string().describe(MISSING_CAPABILITY_CONTEXT_DESCRIPTION), },