@prmichaelsen/eventbrite-mcp 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,12 +18,6 @@ An MCP (Model Context Protocol) server that provides event management and ticket
18
18
  npx @prmichaelsen/eventbrite-mcp
19
19
  ```
20
20
 
21
- ### Using npm
22
-
23
- ```bash
24
- npm install -g @prmichaelsen/eventbrite-mcp
25
- ```
26
-
27
21
  ## Configuration
28
22
 
29
23
  ### Environment Variables
@@ -51,7 +45,7 @@ EVENTBRITE_RETRIES=3 # Number of retry attempts
51
45
 
52
46
  ### MCP Client Configuration
53
47
 
54
- Add to your MCP client configuration (e.g., Claude Desktop):
48
+ Add to your MCP client configuration (e.g., Claude Desktop, Kilo Code):
55
49
 
56
50
  ```json
57
51
  {
@@ -67,21 +61,6 @@ Add to your MCP client configuration (e.g., Claude Desktop):
67
61
  }
68
62
  ```
69
63
 
70
- Or if installed globally:
71
-
72
- ```json
73
- {
74
- "mcpServers": {
75
- "eventbrite": {
76
- "command": "eventbrite-mcp",
77
- "env": {
78
- "EVENTBRITE_API_TOKEN": "your_eventbrite_api_token"
79
- }
80
- }
81
- }
82
- }
83
- ```
84
-
85
64
  ## Available Tools
86
65
 
87
66
  ### list_events
package/dist/server.js CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- #!/usr/bin/env node
3
2
  var __defProp = Object.defineProperty;
4
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
4
 
@@ -520,6 +519,41 @@ var CreateTicketClassTool = class {
520
519
  }
521
520
  };
522
521
 
522
+ // src/tools/list-organizations.ts
523
+ var ListOrganizationsTool = class {
524
+ constructor(client) {
525
+ this.client = client;
526
+ }
527
+ static {
528
+ __name(this, "ListOrganizationsTool");
529
+ }
530
+ getToolDefinition() {
531
+ return {
532
+ name: "list_organizations",
533
+ description: "List organizations for the authenticated user. Returns organization IDs needed for other operations like listing events.",
534
+ inputSchema: {
535
+ type: "object",
536
+ properties: {}
537
+ }
538
+ };
539
+ }
540
+ async execute() {
541
+ try {
542
+ const response = await this.client.get("/users/me/organizations/");
543
+ return {
544
+ success: true,
545
+ organizations: response.organizations || [],
546
+ pagination: response.pagination
547
+ };
548
+ } catch (error) {
549
+ return {
550
+ success: false,
551
+ error: error instanceof Error ? error.message : "Unknown error occurred"
552
+ };
553
+ }
554
+ }
555
+ };
556
+
523
557
  // src/utils/logger.ts
524
558
  var Logger = class {
525
559
  static {
@@ -597,6 +631,7 @@ var EventbriteMCPServer = class {
597
631
  this.setupHandlers();
598
632
  }
599
633
  registerTools() {
634
+ this.tools.set("list_organizations", new ListOrganizationsTool(this.eventbriteClient));
600
635
  this.tools.set("list_events", new ListEventsTool(this.eventbriteClient));
601
636
  this.tools.set("get_event", new GetEventTool(this.eventbriteClient));
602
637
  this.tools.set("create_event", new CreateEventTool(this.eventbriteClient));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/server.ts", "../src/eventbrite/client.ts", "../src/tools/list-events.ts", "../src/tools/get-event.ts", "../src/tools/create-event.ts", "../src/tools/list-attendees.ts", "../src/tools/create-ticket-class.ts", "../src/utils/logger.ts", "../src/utils/mcp-error-handler.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { config } from 'dotenv';\nimport { EventbriteClient } from './eventbrite/client.js';\nimport { EventbriteConfig } from './types/eventbrite.js';\nimport { ListEventsTool } from './tools/list-events.js';\nimport { GetEventTool } from './tools/get-event.js';\nimport { CreateEventTool } from './tools/create-event.js';\nimport { ListAttendeesTool } from './tools/list-attendees.js';\nimport { CreateTicketClassTool } from './tools/create-ticket-class.js';\nimport { logger } from './utils/logger.js';\nimport { isMCPErrorResponse, formatErrorForDisplay } from './utils/mcp-error-handler.js';\n\n// Load environment variables\nconfig();\n\n// Tool interface for type safety\ninterface MCPTool {\n getToolDefinition(): any;\n execute(args: any): Promise<any>;\n}\n\nclass EventbriteMCPServer {\n private server: Server;\n private eventbriteClient: EventbriteClient;\n private tools: Map<string, MCPTool>;\n\n constructor() {\n // Initialize server\n this.server = new Server(\n {\n name: 'eventbrite-mcp-server',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Initialize Eventbrite client\n const apiToken = process.env.EVENTBRITE_API_TOKEN;\n if (!apiToken) {\n throw new Error('EVENTBRITE_API_TOKEN environment variable is required');\n }\n\n const eventbriteConfig: EventbriteConfig = {\n apiToken,\n apiUrl: process.env.EVENTBRITE_API_URL || 'https://www.eventbriteapi.com/v3',\n timeout: parseInt(process.env.EVENTBRITE_TIMEOUT || '30000'),\n retries: parseInt(process.env.EVENTBRITE_RETRIES || '3')\n };\n\n this.eventbriteClient = new EventbriteClient(eventbriteConfig);\n \n // Initialize tool registry\n this.tools = new Map();\n this.registerTools();\n\n this.setupHandlers();\n }\n\n private registerTools(): void {\n // Register all tools in the registry\n // This makes it easy to add new tools without modifying the handler\n this.tools.set('list_events', new ListEventsTool(this.eventbriteClient));\n this.tools.set('get_event', new GetEventTool(this.eventbriteClient));\n this.tools.set('create_event', new CreateEventTool(this.eventbriteClient));\n this.tools.set('list_attendees', new ListAttendeesTool(this.eventbriteClient));\n this.tools.set('create_ticket_class', new CreateTicketClassTool(this.eventbriteClient));\n }\n\n private setupHandlers(): void {\n // List available tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n const toolDefinitions = Array.from(this.tools.values()).map(tool => \n tool.getToolDefinition()\n );\n \n return {\n tools: toolDefinitions,\n };\n });\n\n // Handle tool calls with automatic error handling\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n try {\n // Get tool from registry\n const tool = this.tools.get(name);\n if (!tool) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n // Execute tool\n const result = await tool.execute(args as any);\n\n // Check if the result is an MCP error response\n if (isMCPErrorResponse(result)) {\n return {\n content: [\n {\n type: 'text',\n text: formatErrorForDisplay(result),\n },\n ],\n isError: true,\n };\n }\n\n // Check if the tool returned an error response (legacy format)\n if (result.error || !result.success) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n isError: true,\n };\n }\n\n // Normal successful response\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n logger.error(`Tool execution failed for ${name}:`, error);\n \n // Format error for MCP client\n const errorMessage = error instanceof Error \n ? `\u274C ${name} failed\\n\\nError: ${error.name}\\nMessage: ${error.message}\\n\\n${error.stack || ''}`\n : `\u274C ${name} failed\\n\\nUnknown error: ${String(error)}`;\n \n return {\n content: [\n {\n type: 'text',\n text: errorMessage,\n },\n ],\n isError: true,\n };\n }\n });\n }\n\n async start(): Promise<void> {\n try {\n logger.info('Starting Eventbrite MCP Server...');\n\n // Start MCP server with stdio transport\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n\n // Don't log to stdout/stderr when using stdio transport - it interferes with MCP JSON\n // logger.info('Eventbrite MCP Server started successfully');\n\n } catch (error) {\n // Don't log to stderr when using stdio transport\n // logger.error('Failed to start server:', error);\n process.exit(1);\n }\n }\n\n async stop(): Promise<void> {\n // Don't log when using stdio transport\n // logger.info('Stopping Eventbrite MCP Server...');\n await this.server.close();\n // logger.info('Server stopped');\n }\n}\n\n// Handle graceful shutdown\nconst server = new EventbriteMCPServer();\n\nprocess.on('SIGINT', async () => {\n await server.stop();\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n await server.stop();\n process.exit(0);\n});\n\n// Start the server\nserver.start().catch((error) => {\n // Don't log to stderr when using stdio transport\n // logger.error('Server startup failed:', error);\n process.exit(1);\n});\n", "import { EventbriteConfig } from '../types/eventbrite.js';\nimport { logger } from '../utils/logger.js';\n\nexport class EventbriteClient {\n private config: EventbriteConfig;\n private baseUrl: string;\n\n constructor(config: EventbriteConfig) {\n this.config = {\n apiUrl: 'https://www.eventbriteapi.com/v3',\n timeout: 30000,\n retries: 3,\n ...config\n };\n this.baseUrl = this.config.apiUrl!;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers = {\n 'Authorization': `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n ...options.headers\n };\n\n let lastError: Error | null = null;\n const retries = this.config.retries || 3;\n\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new Error(\n `Eventbrite API error: ${response.status} ${response.statusText} - ${errorBody}`\n );\n }\n\n return await response.json() as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n \n if (attempt < retries) {\n const delay = Math.pow(2, attempt) * 1000;\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError || new Error('Request failed after retries');\n }\n\n async get<T>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'GET' });\n }\n\n async post<T>(endpoint: string, body: any): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'POST',\n body: JSON.stringify(body)\n });\n }\n\n async patch<T>(endpoint: string, body: any): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'PATCH',\n body: JSON.stringify(body)\n });\n }\n\n async delete<T>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'DELETE' });\n }\n\n // Event operations\n async listEvents(params: {\n organizationId?: string;\n status?: string;\n orderBy?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.orderBy) queryParams.append('order_by', params.orderBy);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n const endpoint = params.organizationId\n ? `/organizations/${params.organizationId}/events/?${queryParams}`\n : `/users/me/events/?${queryParams}`;\n\n return this.get<any>(endpoint);\n }\n\n async getEvent(eventId: string) {\n return this.get<any>(`/events/${eventId}/`);\n }\n\n async createEvent(data: any) {\n return this.post<any>('/events/', {\n event: data\n });\n }\n\n async updateEvent(eventId: string, data: any) {\n return this.post<any>(`/events/${eventId}/`, {\n event: data\n });\n }\n\n async publishEvent(eventId: string) {\n return this.post<any>(`/events/${eventId}/publish/`, {});\n }\n\n async cancelEvent(eventId: string) {\n return this.post<any>(`/events/${eventId}/cancel/`, {});\n }\n\n // Ticket class operations\n async listTicketClasses(eventId: string) {\n return this.get<any>(`/events/${eventId}/ticket_classes/`);\n }\n\n async createTicketClass(eventId: string, data: any) {\n return this.post<any>(`/events/${eventId}/ticket_classes/`, {\n ticket_class: data\n });\n }\n\n // Attendee operations\n async listAttendees(eventId: string, params: {\n status?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n return this.get<any>(`/events/${eventId}/attendees/?${queryParams}`);\n }\n\n async getAttendee(eventId: string, attendeeId: string) {\n return this.get<any>(`/events/${eventId}/attendees/${attendeeId}/`);\n }\n\n // Order operations\n async listOrders(eventId: string, params: {\n status?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n return this.get<any>(`/events/${eventId}/orders/?${queryParams}`);\n }\n\n // Venue operations\n async getVenue(venueId: string) {\n return this.get<any>(`/venues/${venueId}/`);\n }\n\n async createVenue(organizationId: string, data: any) {\n return this.post<any>(`/organizations/${organizationId}/venues/`, {\n venue: data\n });\n }\n\n // Organization operations\n async getOrganization(organizationId: string) {\n return this.get<any>(`/organizations/${organizationId}/`);\n }\n\n async getCurrentUser() {\n return this.get<any>('/users/me/');\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { ListEventsArgs, EventListResult } from '../types/mcp.js';\n\nexport class ListEventsTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'list_events',\n description: 'List events from Eventbrite. Can filter by organization, status, and ordering.',\n inputSchema: {\n type: 'object',\n properties: {\n organizationId: {\n type: 'string',\n description: 'Filter events by organization ID'\n },\n status: {\n type: 'string',\n enum: ['draft', 'live', 'started', 'ended', 'completed', 'canceled', 'all'],\n description: 'Filter events by status'\n },\n orderBy: {\n type: 'string',\n enum: ['start_asc', 'start_desc', 'created_asc', 'created_desc'],\n description: 'Order events by field'\n },\n pageSize: {\n type: 'number',\n description: 'Number of events to return per page (default: 50, max: 50)',\n minimum: 1,\n maximum: 50\n },\n continuation: {\n type: 'string',\n description: 'Continuation token for pagination'\n }\n }\n }\n };\n }\n\n async execute(args: ListEventsArgs): Promise<EventListResult> {\n try {\n const response = await this.client.listEvents({\n organizationId: args.organizationId,\n status: args.status,\n orderBy: args.orderBy,\n pageSize: args.pageSize || 50,\n continuation: args.continuation\n });\n\n return {\n success: true,\n events: response.events || [],\n pagination: response.pagination\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { GetEventArgs, EventResult } from '../types/mcp.js';\n\nexport class GetEventTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'get_event',\n description: 'Get detailed information about a specific event by ID',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event to retrieve'\n }\n },\n required: ['eventId']\n }\n };\n }\n\n async execute(args: GetEventArgs): Promise<EventResult> {\n try {\n const event = await this.client.getEvent(args.eventId);\n\n return {\n success: true,\n event\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { CreateEventArgs, EventResult } from '../types/mcp.js';\n\nexport class CreateEventTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'create_event',\n description: 'Create a new event on Eventbrite',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the event'\n },\n description: {\n type: 'string',\n description: 'The description of the event (supports HTML)'\n },\n startTime: {\n type: 'string',\n description: 'Event start time in ISO 8601 format (e.g., 2024-12-31T20:00:00)'\n },\n endTime: {\n type: 'string',\n description: 'Event end time in ISO 8601 format (e.g., 2024-12-31T23:00:00)'\n },\n timezone: {\n type: 'string',\n description: 'Timezone for the event (e.g., America/New_York)'\n },\n currency: {\n type: 'string',\n description: 'Currency code (e.g., USD, EUR, GBP)'\n },\n online: {\n type: 'boolean',\n description: 'Whether this is an online event'\n },\n listed: {\n type: 'boolean',\n description: 'Whether the event should be publicly listed'\n },\n capacity: {\n type: 'number',\n description: 'Maximum capacity for the event'\n },\n organizationId: {\n type: 'string',\n description: 'Organization ID to create the event under'\n }\n },\n required: ['name', 'startTime', 'endTime', 'timezone', 'currency']\n }\n };\n }\n\n async execute(args: CreateEventArgs): Promise<EventResult> {\n try {\n const eventData: any = {\n name: {\n html: args.name\n },\n start: {\n timezone: args.timezone,\n utc: new Date(args.startTime).toISOString()\n },\n end: {\n timezone: args.timezone,\n utc: new Date(args.endTime).toISOString()\n },\n currency: args.currency\n };\n\n if (args.description) {\n eventData.description = {\n html: args.description\n };\n }\n\n if (args.online !== undefined) {\n eventData.online_event = args.online;\n }\n\n if (args.listed !== undefined) {\n eventData.listed = args.listed;\n }\n\n if (args.capacity !== undefined) {\n eventData.capacity = args.capacity;\n }\n\n const event = await this.client.createEvent(eventData);\n\n return {\n success: true,\n event\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { ListAttendeesArgs, AttendeeListResult } from '../types/mcp.js';\n\nexport class ListAttendeesTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'list_attendees',\n description: 'List attendees for a specific event',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event'\n },\n status: {\n type: 'string',\n enum: ['attending', 'not_attending', 'unpaid'],\n description: 'Filter attendees by status'\n },\n pageSize: {\n type: 'number',\n description: 'Number of attendees to return per page (default: 50, max: 50)',\n minimum: 1,\n maximum: 50\n },\n continuation: {\n type: 'string',\n description: 'Continuation token for pagination'\n }\n },\n required: ['eventId']\n }\n };\n }\n\n async execute(args: ListAttendeesArgs): Promise<AttendeeListResult> {\n try {\n const response = await this.client.listAttendees(args.eventId, {\n status: args.status,\n pageSize: args.pageSize || 50,\n continuation: args.continuation\n });\n\n return {\n success: true,\n attendees: response.attendees || [],\n pagination: response.pagination\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { CreateTicketClassArgs, TicketClassResult } from '../types/mcp.js';\n\nexport class CreateTicketClassTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'create_ticket_class',\n description: 'Create a new ticket class for an event',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event'\n },\n name: {\n type: 'string',\n description: 'The name of the ticket class'\n },\n quantityTotal: {\n type: 'number',\n description: 'Total quantity of tickets available'\n },\n free: {\n type: 'boolean',\n description: 'Whether the ticket is free'\n },\n cost: {\n type: 'number',\n description: 'Cost of the ticket (in minor currency units, e.g., cents)'\n },\n currency: {\n type: 'string',\n description: 'Currency code (e.g., USD, EUR, GBP)'\n },\n description: {\n type: 'string',\n description: 'Description of the ticket class'\n },\n salesStart: {\n type: 'string',\n description: 'When ticket sales start (ISO 8601 format)'\n },\n salesEnd: {\n type: 'string',\n description: 'When ticket sales end (ISO 8601 format)'\n }\n },\n required: ['eventId', 'name', 'quantityTotal']\n }\n };\n }\n\n async execute(args: CreateTicketClassArgs): Promise<TicketClassResult> {\n try {\n const ticketData: any = {\n name: args.name,\n quantity_total: args.quantityTotal,\n free: args.free !== undefined ? args.free : true\n };\n\n if (args.cost !== undefined && args.currency) {\n ticketData.cost = {\n currency: args.currency,\n value: args.cost\n };\n ticketData.free = false;\n }\n\n if (args.description) {\n ticketData.description = args.description;\n }\n\n if (args.salesStart) {\n ticketData.sales_start = args.salesStart;\n }\n\n if (args.salesEnd) {\n ticketData.sales_end = args.salesEnd;\n }\n\n const ticketClass = await this.client.createTicketClass(args.eventId, ticketData);\n\n return {\n success: true,\n ticketClass\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "export enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3\n}\n\nclass Logger {\n // No-op logger to avoid interfering with stdio MCP transport\n // All logging methods do nothing to prevent JSON corruption\n\n error(message: string, ...args: any[]): void {\n // No-op\n }\n\n warn(message: string, ...args: any[]): void {\n // No-op\n }\n\n info(message: string, ...args: any[]): void {\n // No-op\n }\n\n debug(message: string, ...args: any[]): void {\n // No-op\n }\n}\n\nexport const logger = new Logger();\n", "import { serializeError } from './error-serializer.js';\nimport { logger } from './logger.js';\n\n/**\n * Eventbrite API Error\n * Represents an error from the Eventbrite API with structured error information\n */\nexport class EventbriteAPIError extends Error {\n constructor(\n public readonly errorCode: string,\n public readonly errorDescription: string,\n public readonly statusCode: number,\n public readonly details?: any\n ) {\n super(errorDescription);\n this.name = 'EventbriteAPIError';\n }\n\n toJSON() {\n return {\n name: this.name,\n errorCode: this.errorCode,\n errorDescription: this.errorDescription,\n statusCode: this.statusCode,\n details: this.details,\n message: this.message\n };\n }\n}\n\n/**\n * MCP Tool Error Response\n * Standardized error response format for MCP tools\n */\nexport interface MCPErrorResponse {\n success: false;\n error: {\n code: string;\n message: string;\n statusCode?: number;\n details?: any;\n stack?: string;\n };\n tool: string;\n timestamp: string;\n}\n\n/**\n * Create an MCP-compatible error response\n */\nexport function createMCPErrorResponse(\n toolName: string,\n error: unknown\n): MCPErrorResponse {\n logger.error(`Tool ${toolName} failed:`, error);\n\n // Handle Eventbrite API errors\n if (error instanceof EventbriteAPIError) {\n return {\n success: false,\n error: {\n code: error.errorCode,\n message: error.errorDescription,\n statusCode: error.statusCode,\n details: error.details\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n }\n\n // Handle standard errors\n if (error instanceof Error) {\n return {\n success: false,\n error: {\n code: error.name || 'UNKNOWN_ERROR',\n message: error.message,\n stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,\n details: serializeError(error)\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n }\n\n // Handle unknown errors\n return {\n success: false,\n error: {\n code: 'UNKNOWN_ERROR',\n message: String(error),\n details: error\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n}\n\n/**\n * Parse Eventbrite API error from response\n */\nexport function parseEventbriteError(\n statusCode: number,\n responseData: any\n): EventbriteAPIError {\n // Eventbrite API error format:\n // {\n // \"error\": \"ERROR_CODE\",\n // \"error_description\": \"Human readable description\",\n // \"status_code\": 400\n // }\n \n const errorCode = responseData?.error || 'UNKNOWN_ERROR';\n const errorDescription = responseData?.error_description || responseData?.message || 'An unknown error occurred';\n const apiStatusCode = responseData?.status_code || statusCode;\n \n return new EventbriteAPIError(\n errorCode,\n errorDescription,\n apiStatusCode,\n responseData\n );\n}\n\n/**\n * Handle tool execution with proper error propagation\n */\nexport async function handleToolExecution<T>(\n toolName: string,\n executor: () => Promise<T>\n): Promise<T | MCPErrorResponse> {\n try {\n const result = await executor();\n return result;\n } catch (error) {\n return createMCPErrorResponse(toolName, error);\n }\n}\n\n/**\n * Check if a value is an MCP error response\n */\nexport function isMCPErrorResponse(value: any): value is MCPErrorResponse {\n return (\n value &&\n typeof value === 'object' &&\n value.success === false &&\n value.error &&\n typeof value.error === 'object' &&\n value.tool &&\n typeof value.tool === 'string'\n );\n}\n\n/**\n * Format error for user-friendly display\n */\nexport function formatErrorForDisplay(error: MCPErrorResponse): string {\n const lines: string[] = [\n `\u274C ${error.tool} failed`,\n '',\n `Error: ${error.error.code}`,\n `Message: ${error.error.message}`\n ];\n\n if (error.error.statusCode) {\n lines.push(`Status Code: ${error.error.statusCode}`);\n }\n\n if (error.error.details) {\n lines.push('', 'Details:', JSON.stringify(error.error.details, null, 2));\n }\n\n return lines.join('\\n');\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/server.ts", "../src/eventbrite/client.ts", "../src/tools/list-events.ts", "../src/tools/get-event.ts", "../src/tools/create-event.ts", "../src/tools/list-attendees.ts", "../src/tools/create-ticket-class.ts", "../src/tools/list-organizations.ts", "../src/utils/logger.ts", "../src/utils/mcp-error-handler.ts"],
4
+ "sourcesContent": ["import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { config } from 'dotenv';\nimport { EventbriteClient } from './eventbrite/client.js';\nimport { EventbriteConfig } from './types/eventbrite.js';\nimport { ListEventsTool } from './tools/list-events.js';\nimport { GetEventTool } from './tools/get-event.js';\nimport { CreateEventTool } from './tools/create-event.js';\nimport { ListAttendeesTool } from './tools/list-attendees.js';\nimport { CreateTicketClassTool } from './tools/create-ticket-class.js';\nimport { ListOrganizationsTool } from './tools/list-organizations.js';\nimport { logger } from './utils/logger.js';\nimport { isMCPErrorResponse, formatErrorForDisplay } from './utils/mcp-error-handler.js';\n\n// Load environment variables\nconfig();\n\n// Tool interface for type safety\ninterface MCPTool {\n getToolDefinition(): any;\n execute(args: any): Promise<any>;\n}\n\nclass EventbriteMCPServer {\n private server: Server;\n private eventbriteClient: EventbriteClient;\n private tools: Map<string, MCPTool>;\n\n constructor() {\n // Initialize server\n this.server = new Server(\n {\n name: 'eventbrite-mcp-server',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Initialize Eventbrite client\n const apiToken = process.env.EVENTBRITE_API_TOKEN;\n if (!apiToken) {\n throw new Error('EVENTBRITE_API_TOKEN environment variable is required');\n }\n\n const eventbriteConfig: EventbriteConfig = {\n apiToken,\n apiUrl: process.env.EVENTBRITE_API_URL || 'https://www.eventbriteapi.com/v3',\n timeout: parseInt(process.env.EVENTBRITE_TIMEOUT || '30000'),\n retries: parseInt(process.env.EVENTBRITE_RETRIES || '3')\n };\n\n this.eventbriteClient = new EventbriteClient(eventbriteConfig);\n \n // Initialize tool registry\n this.tools = new Map();\n this.registerTools();\n\n this.setupHandlers();\n }\n\n private registerTools(): void {\n // Register all tools in the registry\n // This makes it easy to add new tools without modifying the handler\n this.tools.set('list_organizations', new ListOrganizationsTool(this.eventbriteClient));\n this.tools.set('list_events', new ListEventsTool(this.eventbriteClient));\n this.tools.set('get_event', new GetEventTool(this.eventbriteClient));\n this.tools.set('create_event', new CreateEventTool(this.eventbriteClient));\n this.tools.set('list_attendees', new ListAttendeesTool(this.eventbriteClient));\n this.tools.set('create_ticket_class', new CreateTicketClassTool(this.eventbriteClient));\n }\n\n private setupHandlers(): void {\n // List available tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n const toolDefinitions = Array.from(this.tools.values()).map(tool => \n tool.getToolDefinition()\n );\n \n return {\n tools: toolDefinitions,\n };\n });\n\n // Handle tool calls with automatic error handling\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n try {\n // Get tool from registry\n const tool = this.tools.get(name);\n if (!tool) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n // Execute tool\n const result = await tool.execute(args as any);\n\n // Check if the result is an MCP error response\n if (isMCPErrorResponse(result)) {\n return {\n content: [\n {\n type: 'text',\n text: formatErrorForDisplay(result),\n },\n ],\n isError: true,\n };\n }\n\n // Check if the tool returned an error response (legacy format)\n if (result.error || !result.success) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n isError: true,\n };\n }\n\n // Normal successful response\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n logger.error(`Tool execution failed for ${name}:`, error);\n \n // Format error for MCP client\n const errorMessage = error instanceof Error \n ? `\u274C ${name} failed\\n\\nError: ${error.name}\\nMessage: ${error.message}\\n\\n${error.stack || ''}`\n : `\u274C ${name} failed\\n\\nUnknown error: ${String(error)}`;\n \n return {\n content: [\n {\n type: 'text',\n text: errorMessage,\n },\n ],\n isError: true,\n };\n }\n });\n }\n\n async start(): Promise<void> {\n try {\n logger.info('Starting Eventbrite MCP Server...');\n\n // Start MCP server with stdio transport\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n\n // Don't log to stdout/stderr when using stdio transport - it interferes with MCP JSON\n // logger.info('Eventbrite MCP Server started successfully');\n\n } catch (error) {\n // Don't log to stderr when using stdio transport\n // logger.error('Failed to start server:', error);\n process.exit(1);\n }\n }\n\n async stop(): Promise<void> {\n // Don't log when using stdio transport\n // logger.info('Stopping Eventbrite MCP Server...');\n await this.server.close();\n // logger.info('Server stopped');\n }\n}\n\n// Handle graceful shutdown\nconst server = new EventbriteMCPServer();\n\nprocess.on('SIGINT', async () => {\n await server.stop();\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n await server.stop();\n process.exit(0);\n});\n\n// Start the server\nserver.start().catch((error) => {\n // Don't log to stderr when using stdio transport\n // logger.error('Server startup failed:', error);\n process.exit(1);\n});\n", "import { EventbriteConfig } from '../types/eventbrite.js';\nimport { logger } from '../utils/logger.js';\n\nexport class EventbriteClient {\n private config: EventbriteConfig;\n private baseUrl: string;\n\n constructor(config: EventbriteConfig) {\n this.config = {\n apiUrl: 'https://www.eventbriteapi.com/v3',\n timeout: 30000,\n retries: 3,\n ...config\n };\n this.baseUrl = this.config.apiUrl!;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers = {\n 'Authorization': `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n ...options.headers\n };\n\n let lastError: Error | null = null;\n const retries = this.config.retries || 3;\n\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new Error(\n `Eventbrite API error: ${response.status} ${response.statusText} - ${errorBody}`\n );\n }\n\n return await response.json() as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n \n if (attempt < retries) {\n const delay = Math.pow(2, attempt) * 1000;\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError || new Error('Request failed after retries');\n }\n\n async get<T>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'GET' });\n }\n\n async post<T>(endpoint: string, body: any): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'POST',\n body: JSON.stringify(body)\n });\n }\n\n async patch<T>(endpoint: string, body: any): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'PATCH',\n body: JSON.stringify(body)\n });\n }\n\n async delete<T>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'DELETE' });\n }\n\n // Event operations\n async listEvents(params: {\n organizationId?: string;\n status?: string;\n orderBy?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.orderBy) queryParams.append('order_by', params.orderBy);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n const endpoint = params.organizationId\n ? `/organizations/${params.organizationId}/events/?${queryParams}`\n : `/users/me/events/?${queryParams}`;\n\n return this.get<any>(endpoint);\n }\n\n async getEvent(eventId: string) {\n return this.get<any>(`/events/${eventId}/`);\n }\n\n async createEvent(data: any) {\n return this.post<any>('/events/', {\n event: data\n });\n }\n\n async updateEvent(eventId: string, data: any) {\n return this.post<any>(`/events/${eventId}/`, {\n event: data\n });\n }\n\n async publishEvent(eventId: string) {\n return this.post<any>(`/events/${eventId}/publish/`, {});\n }\n\n async cancelEvent(eventId: string) {\n return this.post<any>(`/events/${eventId}/cancel/`, {});\n }\n\n // Ticket class operations\n async listTicketClasses(eventId: string) {\n return this.get<any>(`/events/${eventId}/ticket_classes/`);\n }\n\n async createTicketClass(eventId: string, data: any) {\n return this.post<any>(`/events/${eventId}/ticket_classes/`, {\n ticket_class: data\n });\n }\n\n // Attendee operations\n async listAttendees(eventId: string, params: {\n status?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n return this.get<any>(`/events/${eventId}/attendees/?${queryParams}`);\n }\n\n async getAttendee(eventId: string, attendeeId: string) {\n return this.get<any>(`/events/${eventId}/attendees/${attendeeId}/`);\n }\n\n // Order operations\n async listOrders(eventId: string, params: {\n status?: string;\n pageSize?: number;\n continuation?: string;\n }) {\n const queryParams = new URLSearchParams();\n \n if (params.status) queryParams.append('status', params.status);\n if (params.pageSize) queryParams.append('page_size', params.pageSize.toString());\n if (params.continuation) queryParams.append('continuation', params.continuation);\n\n return this.get<any>(`/events/${eventId}/orders/?${queryParams}`);\n }\n\n // Venue operations\n async getVenue(venueId: string) {\n return this.get<any>(`/venues/${venueId}/`);\n }\n\n async createVenue(organizationId: string, data: any) {\n return this.post<any>(`/organizations/${organizationId}/venues/`, {\n venue: data\n });\n }\n\n // Organization operations\n async getOrganization(organizationId: string) {\n return this.get<any>(`/organizations/${organizationId}/`);\n }\n\n async getCurrentUser() {\n return this.get<any>('/users/me/');\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { ListEventsArgs, EventListResult } from '../types/mcp.js';\n\nexport class ListEventsTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'list_events',\n description: 'List events from Eventbrite. Can filter by organization, status, and ordering.',\n inputSchema: {\n type: 'object',\n properties: {\n organizationId: {\n type: 'string',\n description: 'Filter events by organization ID'\n },\n status: {\n type: 'string',\n enum: ['draft', 'live', 'started', 'ended', 'completed', 'canceled', 'all'],\n description: 'Filter events by status'\n },\n orderBy: {\n type: 'string',\n enum: ['start_asc', 'start_desc', 'created_asc', 'created_desc'],\n description: 'Order events by field'\n },\n pageSize: {\n type: 'number',\n description: 'Number of events to return per page (default: 50, max: 50)',\n minimum: 1,\n maximum: 50\n },\n continuation: {\n type: 'string',\n description: 'Continuation token for pagination'\n }\n }\n }\n };\n }\n\n async execute(args: ListEventsArgs): Promise<EventListResult> {\n try {\n const response = await this.client.listEvents({\n organizationId: args.organizationId,\n status: args.status,\n orderBy: args.orderBy,\n pageSize: args.pageSize || 50,\n continuation: args.continuation\n });\n\n return {\n success: true,\n events: response.events || [],\n pagination: response.pagination\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { GetEventArgs, EventResult } from '../types/mcp.js';\n\nexport class GetEventTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'get_event',\n description: 'Get detailed information about a specific event by ID',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event to retrieve'\n }\n },\n required: ['eventId']\n }\n };\n }\n\n async execute(args: GetEventArgs): Promise<EventResult> {\n try {\n const event = await this.client.getEvent(args.eventId);\n\n return {\n success: true,\n event\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { CreateEventArgs, EventResult } from '../types/mcp.js';\n\nexport class CreateEventTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'create_event',\n description: 'Create a new event on Eventbrite',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the event'\n },\n description: {\n type: 'string',\n description: 'The description of the event (supports HTML)'\n },\n startTime: {\n type: 'string',\n description: 'Event start time in ISO 8601 format (e.g., 2024-12-31T20:00:00)'\n },\n endTime: {\n type: 'string',\n description: 'Event end time in ISO 8601 format (e.g., 2024-12-31T23:00:00)'\n },\n timezone: {\n type: 'string',\n description: 'Timezone for the event (e.g., America/New_York)'\n },\n currency: {\n type: 'string',\n description: 'Currency code (e.g., USD, EUR, GBP)'\n },\n online: {\n type: 'boolean',\n description: 'Whether this is an online event'\n },\n listed: {\n type: 'boolean',\n description: 'Whether the event should be publicly listed'\n },\n capacity: {\n type: 'number',\n description: 'Maximum capacity for the event'\n },\n organizationId: {\n type: 'string',\n description: 'Organization ID to create the event under'\n }\n },\n required: ['name', 'startTime', 'endTime', 'timezone', 'currency']\n }\n };\n }\n\n async execute(args: CreateEventArgs): Promise<EventResult> {\n try {\n const eventData: any = {\n name: {\n html: args.name\n },\n start: {\n timezone: args.timezone,\n utc: new Date(args.startTime).toISOString()\n },\n end: {\n timezone: args.timezone,\n utc: new Date(args.endTime).toISOString()\n },\n currency: args.currency\n };\n\n if (args.description) {\n eventData.description = {\n html: args.description\n };\n }\n\n if (args.online !== undefined) {\n eventData.online_event = args.online;\n }\n\n if (args.listed !== undefined) {\n eventData.listed = args.listed;\n }\n\n if (args.capacity !== undefined) {\n eventData.capacity = args.capacity;\n }\n\n const event = await this.client.createEvent(eventData);\n\n return {\n success: true,\n event\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { ListAttendeesArgs, AttendeeListResult } from '../types/mcp.js';\n\nexport class ListAttendeesTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'list_attendees',\n description: 'List attendees for a specific event',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event'\n },\n status: {\n type: 'string',\n enum: ['attending', 'not_attending', 'unpaid'],\n description: 'Filter attendees by status'\n },\n pageSize: {\n type: 'number',\n description: 'Number of attendees to return per page (default: 50, max: 50)',\n minimum: 1,\n maximum: 50\n },\n continuation: {\n type: 'string',\n description: 'Continuation token for pagination'\n }\n },\n required: ['eventId']\n }\n };\n }\n\n async execute(args: ListAttendeesArgs): Promise<AttendeeListResult> {\n try {\n const response = await this.client.listAttendees(args.eventId, {\n status: args.status,\n pageSize: args.pageSize || 50,\n continuation: args.continuation\n });\n\n return {\n success: true,\n attendees: response.attendees || [],\n pagination: response.pagination\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\nimport { CreateTicketClassArgs, TicketClassResult } from '../types/mcp.js';\n\nexport class CreateTicketClassTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'create_ticket_class',\n description: 'Create a new ticket class for an event',\n inputSchema: {\n type: 'object',\n properties: {\n eventId: {\n type: 'string',\n description: 'The ID of the event'\n },\n name: {\n type: 'string',\n description: 'The name of the ticket class'\n },\n quantityTotal: {\n type: 'number',\n description: 'Total quantity of tickets available'\n },\n free: {\n type: 'boolean',\n description: 'Whether the ticket is free'\n },\n cost: {\n type: 'number',\n description: 'Cost of the ticket (in minor currency units, e.g., cents)'\n },\n currency: {\n type: 'string',\n description: 'Currency code (e.g., USD, EUR, GBP)'\n },\n description: {\n type: 'string',\n description: 'Description of the ticket class'\n },\n salesStart: {\n type: 'string',\n description: 'When ticket sales start (ISO 8601 format)'\n },\n salesEnd: {\n type: 'string',\n description: 'When ticket sales end (ISO 8601 format)'\n }\n },\n required: ['eventId', 'name', 'quantityTotal']\n }\n };\n }\n\n async execute(args: CreateTicketClassArgs): Promise<TicketClassResult> {\n try {\n const ticketData: any = {\n name: args.name,\n quantity_total: args.quantityTotal,\n free: args.free !== undefined ? args.free : true\n };\n\n if (args.cost !== undefined && args.currency) {\n ticketData.cost = {\n currency: args.currency,\n value: args.cost\n };\n ticketData.free = false;\n }\n\n if (args.description) {\n ticketData.description = args.description;\n }\n\n if (args.salesStart) {\n ticketData.sales_start = args.salesStart;\n }\n\n if (args.salesEnd) {\n ticketData.sales_end = args.salesEnd;\n }\n\n const ticketClass = await this.client.createTicketClass(args.eventId, ticketData);\n\n return {\n success: true,\n ticketClass\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "import { EventbriteClient } from '../eventbrite/client.js';\n\nexport class ListOrganizationsTool {\n constructor(private client: EventbriteClient) {}\n\n getToolDefinition() {\n return {\n name: 'list_organizations',\n description: 'List organizations for the authenticated user. Returns organization IDs needed for other operations like listing events.',\n inputSchema: {\n type: 'object',\n properties: {}\n }\n };\n }\n\n async execute(): Promise<any> {\n try {\n const response = await this.client.get<any>('/users/me/organizations/');\n\n return {\n success: true,\n organizations: response.organizations || [],\n pagination: response.pagination\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n}\n", "export enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3\n}\n\nclass Logger {\n // No-op logger to avoid interfering with stdio MCP transport\n // All logging methods do nothing to prevent JSON corruption\n\n error(message: string, ...args: any[]): void {\n // No-op\n }\n\n warn(message: string, ...args: any[]): void {\n // No-op\n }\n\n info(message: string, ...args: any[]): void {\n // No-op\n }\n\n debug(message: string, ...args: any[]): void {\n // No-op\n }\n}\n\nexport const logger = new Logger();\n", "import { serializeError } from './error-serializer.js';\nimport { logger } from './logger.js';\n\n/**\n * Eventbrite API Error\n * Represents an error from the Eventbrite API with structured error information\n */\nexport class EventbriteAPIError extends Error {\n constructor(\n public readonly errorCode: string,\n public readonly errorDescription: string,\n public readonly statusCode: number,\n public readonly details?: any\n ) {\n super(errorDescription);\n this.name = 'EventbriteAPIError';\n }\n\n toJSON() {\n return {\n name: this.name,\n errorCode: this.errorCode,\n errorDescription: this.errorDescription,\n statusCode: this.statusCode,\n details: this.details,\n message: this.message\n };\n }\n}\n\n/**\n * MCP Tool Error Response\n * Standardized error response format for MCP tools\n */\nexport interface MCPErrorResponse {\n success: false;\n error: {\n code: string;\n message: string;\n statusCode?: number;\n details?: any;\n stack?: string;\n };\n tool: string;\n timestamp: string;\n}\n\n/**\n * Create an MCP-compatible error response\n */\nexport function createMCPErrorResponse(\n toolName: string,\n error: unknown\n): MCPErrorResponse {\n logger.error(`Tool ${toolName} failed:`, error);\n\n // Handle Eventbrite API errors\n if (error instanceof EventbriteAPIError) {\n return {\n success: false,\n error: {\n code: error.errorCode,\n message: error.errorDescription,\n statusCode: error.statusCode,\n details: error.details\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n }\n\n // Handle standard errors\n if (error instanceof Error) {\n return {\n success: false,\n error: {\n code: error.name || 'UNKNOWN_ERROR',\n message: error.message,\n stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,\n details: serializeError(error)\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n }\n\n // Handle unknown errors\n return {\n success: false,\n error: {\n code: 'UNKNOWN_ERROR',\n message: String(error),\n details: error\n },\n tool: toolName,\n timestamp: new Date().toISOString()\n };\n}\n\n/**\n * Parse Eventbrite API error from response\n */\nexport function parseEventbriteError(\n statusCode: number,\n responseData: any\n): EventbriteAPIError {\n // Eventbrite API error format:\n // {\n // \"error\": \"ERROR_CODE\",\n // \"error_description\": \"Human readable description\",\n // \"status_code\": 400\n // }\n \n const errorCode = responseData?.error || 'UNKNOWN_ERROR';\n const errorDescription = responseData?.error_description || responseData?.message || 'An unknown error occurred';\n const apiStatusCode = responseData?.status_code || statusCode;\n \n return new EventbriteAPIError(\n errorCode,\n errorDescription,\n apiStatusCode,\n responseData\n );\n}\n\n/**\n * Handle tool execution with proper error propagation\n */\nexport async function handleToolExecution<T>(\n toolName: string,\n executor: () => Promise<T>\n): Promise<T | MCPErrorResponse> {\n try {\n const result = await executor();\n return result;\n } catch (error) {\n return createMCPErrorResponse(toolName, error);\n }\n}\n\n/**\n * Check if a value is an MCP error response\n */\nexport function isMCPErrorResponse(value: any): value is MCPErrorResponse {\n return (\n value &&\n typeof value === 'object' &&\n value.success === false &&\n value.error &&\n typeof value.error === 'object' &&\n value.tool &&\n typeof value.tool === 'string'\n );\n}\n\n/**\n * Format error for user-friendly display\n */\nexport function formatErrorForDisplay(error: MCPErrorResponse): string {\n const lines: string[] = [\n `\u274C ${error.tool} failed`,\n '',\n `Error: ${error.error.code}`,\n `Message: ${error.error.message}`\n ];\n\n if (error.error.statusCode) {\n lines.push(`Status Code: ${error.error.statusCode}`);\n }\n\n if (error.error.details) {\n lines.push('', 'Details:', JSON.stringify(error.error.details, null, 2));\n }\n\n return lines.join('\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["config"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prmichaelsen/eventbrite-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Eventbrite MCP server providing event management and ticketing capabilities",
5
5
  "main": "dist/server.js",
6
6
  "type": "module",