From db9aecb1cd0cc11b5b995663560e58d12e6679f9 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Thu, 6 Aug 2026 13:36:45 +0200 Subject: [PATCH] feat: remove MCP exposure for Homarr Assistant Remove the MCP metadata from the assistant router procedures (getAvailability, getContextEntities, getModelCapabilities) so the Homarr Assistant is no longer exposed as MCP tools, and drop the corresponding expectations from the MCP router test. --- packages/api/src/router/assistant.ts | 27 ++------------------------- packages/api/src/test/mcp.spec.ts | 5 ----- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/packages/api/src/router/assistant.ts b/packages/api/src/router/assistant.ts index be3a1c60a..4bab5ce00 100644 --- a/packages/api/src/router/assistant.ts +++ b/packages/api/src/router/assistant.ts @@ -440,15 +440,7 @@ const addFeedbackToMessageContent = (serializedContent: string, type: "positive" }; export const assistantRouter = createTRPCRouter({ - getAvailability: protectedProcedure - .meta({ - mcp: { - enabled: true, - description: - "Check whether Homarr Assistant is enabled and configured, or available in demo mode, for the current user", - }, - }) - .query(async ({ ctx }) => { + getAvailability: protectedProcedure.query(async ({ ctx }) => { if (isDemoMode) { return { enabled: true }; } @@ -461,26 +453,11 @@ export const assistantRouter = createTRPCRouter({ }; }), - getContextEntities: protectedProcedure - .meta({ - mcp: { - enabled: true, - description: - "Lists the apps, integrations, boards, and widgets the signed-in user may reference. Integration entries are permission-filtered. Use returned IDs as inputs for other tools.", - }, - }) - .query(async ({ ctx }) => { + getContextEntities: protectedProcedure.query(async ({ ctx }) => { return await getAssistantContextEntitiesAsync(ctx); }), getModelCapabilities: protectedProcedure - .meta({ - mcp: { - enabled: true, - description: - "Returns the configured assistant model's discovered input modalities and whether image input is supported, unsupported, or unknown.", - }, - }) .input(z.object({ modelId: z.string().trim().min(1).max(256).optional() }).optional()) .query(async ({ ctx, input }) => { const configuration = await getConfigurationAsync(ctx.db); diff --git a/packages/api/src/test/mcp.spec.ts b/packages/api/src/test/mcp.spec.ts index 1a652822d..dadd5393d 100644 --- a/packages/api/src/test/mcp.spec.ts +++ b/packages/api/src/test/mcp.spec.ts @@ -3,7 +3,6 @@ import { expect, test, vi } from "vitest"; import { extractToolsFromProcedures } from "trpc-to-mcp"; -import { assistantRouter } from "../router/assistant"; import { appRouter } from "../router/app"; import { boardRouter } from "../router/board"; import { customWidgetRouter } from "../router/custom-widget/custom-widget-router"; @@ -28,7 +27,6 @@ vi.mock("@homarr/core/infrastructure/db/env", () => ({ })); const mcpTestRouter = createTRPCRouter({ - assistant: assistantRouter, app: appRouter, board: boardRouter, customWidget: customWidgetRouter, @@ -49,9 +47,6 @@ test("MCP tools should contain expected procedures", () => { const toolNames = tools.map((tool) => tool.name); expect(tools.length).toBeGreaterThan(0); - expect(toolNames).toContain("assistant_getAvailability"); - expect(toolNames).toContain("assistant_getContextEntities"); - expect(toolNames).toContain("assistant_getModelCapabilities"); expect(toolNames).toContain("app_all"); expect(toolNames).toContain("app_byId"); expect(toolNames).toContain("app_create");