diff --git a/DECISIONS.md b/DECISIONS.md index dfbcdd41..f50d1088 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -1247,3 +1247,4 @@ One line per decision: `[YYYY-MM-DD] : `. Appended by agents and [2026-08-25] Woo bulk revenue template = per-rate account choice, no hardcoded varor/tjanster preset: BAS 2026 has no standard 30xx goods/services subdivision (3040-series is company-specific), so presets would invent accounts; chosen accounts are validated against the company chart instead, and only diffs from the 3001-series default are sent. [2026-08-26] RFC 9728 protected-resource metadata is served at THREE locations (root, path-based /.well-known/oauth-protected-resource/, and /.well-known/oauth-protected-resource): Claude.ai's connector setup derives the metadata URL from the server URL and fetches it before any 401, so the root document our WWW-Authenticate header points at was not enough ('Authorization with Accounted failed' with only 404s in the logs). One builder, three routes; the path-based route answers 404 for any path other than the MCP endpoint so no phantom resource is advertised. [2026-08-20] The swedish-e-invoicing skill now names Upphandlingsmyndigheten as Sweden Peppol Authority across all eight files, not just the one that was flagged: the handover completed 1 July 2026 (regeringsbeslut Fi2025/01826) and the skill was written in future tense, so a partial fix would have left the atom internally contradictory and still pointed agents at peppol@digg.se. Four digg.se URLs were repointed to their verified 301 targets on upphandlingsmyndigheten.se; the fifth, DIGG Peppol testbadd, is a hard 404 with no redirect and no successor page at the new authority, so it was replaced with the SFTI Validex verification service (https://sfti.validex.net/) rather than left dead or guessed at. Historical attributions (Q4 2025 traffic statistics, the 0007:2021006883 Peppol-ID example) deliberately still say DIGG because they were accurate when published. +[2026-08-26] gnubok_connect_bank / gnubok_connect_skatteverket moved from catalogVisibility 'search' to the default catalog: Claude.ai can only invoke tools present in tools/list, so search-only tools are discover-only there and the onboarding skill's steps 3-4 dead-ended on client-side tool-not-found (verified via event_log: the server never received the calls). Search-only visibility remains fine for tools an agent reads about before asking the user, but anything a skill instructs the agent to CALL must be in the default catalog. diff --git a/extensions/general/mcp-server/__tests__/payload-size.bench.test.ts b/extensions/general/mcp-server/__tests__/payload-size.bench.test.ts index f13b8ba3..7c3f353a 100644 --- a/extensions/general/mcp-server/__tests__/payload-size.bench.test.ts +++ b/extensions/general/mcp-server/__tests__/payload-size.bench.test.ts @@ -216,9 +216,14 @@ describe('tools/list payload size guard', () => { // trimmed to bare property names first (the two connect-link tools // are search-only); headroom before the change was ~0 after the skatteverket_connection bump, so even the // bare contract crossed by ~420. + // * 60.7K to 61.2K with the two connect-link tools moved into the default + // catalog (issue #1814): Claude.ai can only CALL tools present in + // tools/list, so catalogVisibility 'search' means discover-only there; + // the onboarding flow dead-ended on client-side tool-not-found when + // the skill pointed at them (SilverPark session, 2026-08-26). // Long-term answer to growth is leaning harder on gnubok_search_tools: if this // fires again, prefer trimming descriptions or making a tool opt-in via search // before bumping further. - expect(approxTokens).toBeLessThan(60_700) + expect(approxTokens).toBeLessThan(61_200) }) }) diff --git a/extensions/general/mcp-server/server.ts b/extensions/general/mcp-server/server.ts index f817f71e..68d16e14 100644 --- a/extensions/general/mcp-server/server.ts +++ b/extensions/general/mcp-server/server.ts @@ -3121,7 +3121,7 @@ export const tools: McpTool[] = [ }, required: ['connected', 'connections', 'connect_url', 'instructions'], }, - catalogVisibility: 'search', + annotations: { readOnlyHint: true, destructiveHint: false, @@ -3177,7 +3177,7 @@ export const tools: McpTool[] = [ }, required: ['available', 'connected', 'token_expires_at', 'connect_url', 'instructions'], }, - catalogVisibility: 'search', + annotations: { readOnlyHint: true, destructiveHint: false,