diff --git a/package-lock.json b/package-lock.json index 0e09563ea..0e0462e2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tableau/mcp-server", - "version": "3.5.3", + "version": "3.5.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tableau/mcp-server", - "version": "3.5.3", + "version": "3.5.4", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "^1.7.2", diff --git a/package.json b/package.json index 1e24d2130..d1a1edc18 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@tableau/mcp-server", "description": "Helping agents see and understand data.", - "version": "3.5.3", + "version": "3.5.4", "repository": { "type": "git", "url": "git+https://github.com/tableau/tableau-mcp.git" diff --git a/src/tools/web/recordEvent/recordEvent.test.ts b/src/tools/web/recordEvent/recordEvent.test.ts index c05f0f5c7..2d67993a9 100644 --- a/src/tools/web/recordEvent/recordEvent.test.ts +++ b/src/tools/web/recordEvent/recordEvent.test.ts @@ -88,17 +88,6 @@ describe('getRecordEventTool', () => { } }); - it('rejects event_type that is too long or not SCREAMING_SNAKE_CASE', async () => { - const schema = z.object( - await Provider.from(getRecordEventTool(new WebMcpServer()).paramsSchema), - ); - expect(schema.safeParse({ event_type: 'A'.repeat(65) }).success).toBe(false); // too long - expect(schema.safeParse({ event_type: 'tool_error' }).success).toBe(false); // lowercase - expect(schema.safeParse({ event_type: 'TOOL ERROR' }).success).toBe(false); // spaces - expect(schema.safeParse({ event_type: '1TOOL_ERROR' }).success).toBe(false); // leading digit - expect(schema.safeParse({ event_type: '_TOOL_ERROR' }).success).toBe(false); // leading underscore - }); - it('truncates message longer than 1024 characters in the forwarded event', async () => { const extra = getMockRequestHandlerExtra(); const longMessage = 'x'.repeat(2000); diff --git a/src/tools/web/recordEvent/recordEvent.ts b/src/tools/web/recordEvent/recordEvent.ts index 693a58e6b..0e45c3fff 100644 --- a/src/tools/web/recordEvent/recordEvent.ts +++ b/src/tools/web/recordEvent/recordEvent.ts @@ -9,12 +9,10 @@ import { WebTool } from '../tool.js'; // Starting field set — the final app-supplied schema is expected to grow later. const paramsSchema = { - // Bounded free-form string rather than a hard enum: the event-type set is intentionally - // app-extensible (see above), so we reject malformed values but not unknown-yet-valid ones. + // Free-form string rather than a hard enum: the event-type set is intentionally + // app-extensible (see above), so we accept any value rather than reject unknown-yet-valid ones. event_type: z .string() - .max(64) - .regex(/^[A-Z][A-Z0-9_]*$/, 'event_type must be SCREAMING_SNAKE_CASE (e.g. TOOL_ERROR).') .describe( 'The event type for product telemetry, e.g. TOOL_ERROR, PARSE_ERROR, AUTH_ERROR, EMBED_LOAD_ERROR, MCP_APP_CLICKED.', ),