@topgunbuild/mcp-server 0.9.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas.ts","../src/tools/query.ts","../src/tools/mutate.ts","../src/tools/search.ts","../src/tools/subscribe.ts","../src/tools/schema.ts","../src/tools/stats.ts","../src/tools/explain.ts","../src/tools/listMaps.ts","../src/tools/index.ts","../src/logger.ts","../src/TopGunMCPServer.ts","../src/transport/http.ts"],"names":["z","pino","TopGunClient","Server","ListToolsRequestSchema","CallToolRequestSchema","StdioServerTransport","createServer","randomUUID","SSEServerTransport"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Zod Schemas for MCP Tools\n *\n * Provides type-safe validation for all MCP tool inputs.\n * JSON schemas are defined manually for MCP tool registration.\n */\n\nimport { z } from 'zod';\n\n// ============================================\n// Query Tool Schema\n// ============================================\n\nexport const QueryArgsSchema = z.object({\n map: z.string().describe(\"Name of the map to query (e.g., 'tasks', 'users', 'products')\"),\n filter: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Filter criteria as key-value pairs. Example: { \"status\": \"active\", \"priority\": \"high\" }'),\n sort: z\n .object({\n field: z.string().describe('Field name to sort by'),\n order: z.enum(['asc', 'desc']).describe('Sort order: ascending or descending'),\n })\n .optional()\n .describe('Sort configuration'),\n limit: z.number().optional().default(10).describe('Maximum number of results to return'),\n offset: z.number().optional().default(0).describe('Number of results to skip (for pagination)'),\n});\n\nexport type QueryArgs = z.infer<typeof QueryArgsSchema>;\n\n// ============================================\n// Mutate Tool Schema\n// ============================================\n\nexport const MutateArgsSchema = z.object({\n map: z.string().describe(\"Name of the map to modify (e.g., 'tasks', 'users')\"),\n operation: z.enum(['set', 'remove']).describe('\"set\" creates or updates a record, \"remove\" deletes it'),\n key: z.string().describe('Unique key for the record'),\n data: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Data to write (required for \"set\" operation)'),\n});\n\nexport type MutateArgs = z.infer<typeof MutateArgsSchema>;\n\n// ============================================\n// Search Tool Schema\n// ============================================\n\nexport const SearchArgsSchema = z.object({\n map: z.string().describe(\"Name of the map to search (e.g., 'articles', 'documents', 'tasks')\"),\n query: z.string().describe('Search query (keywords or phrases to find)'),\n methods: z\n .array(z.enum(['exact', 'fulltext', 'range']))\n .optional()\n .default(['exact', 'fulltext'])\n .describe('Search methods to use. Default: [\"exact\", \"fulltext\"]'),\n limit: z.number().optional().default(10).describe('Maximum number of results to return'),\n minScore: z.number().optional().default(0).describe('Minimum relevance score (0-1) for results'),\n});\n\nexport type SearchArgs = z.infer<typeof SearchArgsSchema>;\n\n// ============================================\n// Subscribe Tool Schema\n// ============================================\n\nexport const SubscribeArgsSchema = z.object({\n map: z.string().describe(\"Name of the map to watch (e.g., 'tasks', 'notifications')\"),\n filter: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Filter criteria - only report changes matching these conditions'),\n timeout: z\n .number()\n .optional()\n .default(60)\n .describe('How long to watch for changes (in seconds)'),\n});\n\nexport type SubscribeArgs = z.infer<typeof SubscribeArgsSchema>;\n\n// ============================================\n// Schema Tool Schema\n// ============================================\n\nexport const SchemaArgsSchema = z.object({\n map: z.string().describe('Name of the map to get schema for'),\n});\n\nexport type SchemaArgs = z.infer<typeof SchemaArgsSchema>;\n\n// ============================================\n// Stats Tool Schema\n// ============================================\n\nexport const StatsArgsSchema = z.object({\n map: z\n .string()\n .optional()\n .describe('Specific map to get stats for (optional, returns all maps if not specified)'),\n});\n\nexport type StatsArgs = z.infer<typeof StatsArgsSchema>;\n\n// ============================================\n// Explain Tool Schema\n// ============================================\n\nexport const ExplainArgsSchema = z.object({\n map: z.string().describe('Name of the map to query'),\n filter: z.record(z.string(), z.unknown()).optional().describe('Filter criteria to analyze'),\n});\n\nexport type ExplainArgs = z.infer<typeof ExplainArgsSchema>;\n\n// ============================================\n// List Maps Tool Schema\n// ============================================\n\nexport const ListMapsArgsSchema = z.object({});\n\nexport type ListMapsArgs = z.infer<typeof ListMapsArgsSchema>;\n\n// ============================================\n// JSON Schemas for MCP Tool Registration\n// ============================================\n\n/**\n * Manual JSON schemas for MCP tool registration.\n * These match the Zod schemas above and are used for MCP protocol.\n * We don't use zod-to-json-schema because it doesn't support Zod v4 yet.\n */\nexport const toolSchemas = {\n query: {\n type: 'object',\n properties: {\n map: {\n type: 'string',\n description: \"Name of the map to query (e.g., 'tasks', 'users', 'products')\",\n },\n filter: {\n type: 'object',\n description: 'Filter criteria as key-value pairs. Example: { \"status\": \"active\", \"priority\": \"high\" }',\n additionalProperties: true,\n },\n sort: {\n type: 'object',\n properties: {\n field: { type: 'string', description: 'Field name to sort by' },\n order: { type: 'string', enum: ['asc', 'desc'], description: 'Sort order: ascending or descending' },\n },\n required: ['field', 'order'],\n description: 'Sort configuration',\n },\n limit: { type: 'number', description: 'Maximum number of results to return', default: 10 },\n offset: { type: 'number', description: 'Number of results to skip (for pagination)', default: 0 },\n },\n required: ['map'],\n },\n mutate: {\n type: 'object',\n properties: {\n map: { type: 'string', description: \"Name of the map to modify (e.g., 'tasks', 'users')\" },\n operation: {\n type: 'string',\n enum: ['set', 'remove'],\n description: '\"set\" creates or updates a record, \"remove\" deletes it',\n },\n key: { type: 'string', description: 'Unique key for the record' },\n data: {\n type: 'object',\n description: 'Data to write (required for \"set\" operation)',\n additionalProperties: true,\n },\n },\n required: ['map', 'operation', 'key'],\n },\n search: {\n type: 'object',\n properties: {\n map: { type: 'string', description: \"Name of the map to search (e.g., 'articles', 'documents', 'tasks')\" },\n query: { type: 'string', description: 'Search query (keywords or phrases to find)' },\n methods: {\n type: 'array',\n items: { type: 'string', enum: ['exact', 'fulltext', 'range'] },\n description: 'Search methods to use. Default: [\"exact\", \"fulltext\"]',\n default: ['exact', 'fulltext'],\n },\n limit: { type: 'number', description: 'Maximum number of results to return', default: 10 },\n minScore: { type: 'number', description: 'Minimum relevance score (0-1) for results', default: 0 },\n },\n required: ['map', 'query'],\n },\n subscribe: {\n type: 'object',\n properties: {\n map: { type: 'string', description: \"Name of the map to watch (e.g., 'tasks', 'notifications')\" },\n filter: {\n type: 'object',\n description: 'Filter criteria - only report changes matching these conditions',\n additionalProperties: true,\n },\n timeout: { type: 'number', description: 'How long to watch for changes (in seconds)', default: 60 },\n },\n required: ['map'],\n },\n schema: {\n type: 'object',\n properties: {\n map: { type: 'string', description: 'Name of the map to get schema for' },\n },\n required: ['map'],\n },\n stats: {\n type: 'object',\n properties: {\n map: {\n type: 'string',\n description: 'Specific map to get stats for (optional, returns all maps if not specified)',\n },\n },\n required: [],\n },\n explain: {\n type: 'object',\n properties: {\n map: { type: 'string', description: 'Name of the map to query' },\n filter: {\n type: 'object',\n description: 'Filter criteria to analyze',\n additionalProperties: true,\n },\n },\n required: ['map'],\n },\n listMaps: {\n type: 'object',\n properties: {},\n required: [],\n },\n};\n","/**\n * topgun_query - Query data from a TopGun map with filters\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { QueryArgsSchema, toolSchemas, type QueryArgs } from '../schemas';\n\nexport const queryTool: MCPTool = {\n name: 'topgun_query',\n description:\n 'Query data from a TopGun map with filters and sorting. ' +\n 'Use this to read data from the database. ' +\n 'Supports filtering by field values and sorting by any field.',\n inputSchema: toolSchemas.query as MCPTool['inputSchema'],\n};\n\nexport async function handleQuery(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate and parse args with Zod\n const parseResult = QueryArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const { map, filter, sort, limit, offset } = parseResult.data;\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n // Apply limits\n const effectiveLimit = Math.min(limit ?? ctx.config.defaultLimit, ctx.config.maxLimit);\n const effectiveOffset = offset ?? 0;\n\n try {\n // Get the map and query\n const lwwMap = ctx.client.getMap<string, Record<string, unknown>>(map);\n\n // Get all entries and apply filter/sort/pagination client-side\n // Note: In production, this should use server-side indexing\n const allEntries: Array<{ key: string; value: Record<string, unknown> }> = [];\n\n // For now, we iterate over the map's entries\n // This is a simplified implementation - real implementation would use QueryHandle\n for (const [key, value] of lwwMap.entries()) {\n if (value !== null && typeof value === 'object') {\n // Apply filter\n let matches = true;\n if (filter) {\n for (const [filterKey, filterValue] of Object.entries(filter)) {\n if ((value as Record<string, unknown>)[filterKey] !== filterValue) {\n matches = false;\n break;\n }\n }\n }\n if (matches) {\n allEntries.push({ key: String(key), value: value as Record<string, unknown> });\n }\n }\n }\n\n // Apply sort\n if (sort?.field) {\n allEntries.sort((a, b) => {\n const aVal = a.value[sort.field];\n const bVal = b.value[sort.field];\n\n if (aVal === bVal) return 0;\n if (aVal === undefined || aVal === null) return 1;\n if (bVal === undefined || bVal === null) return -1;\n\n const comparison = aVal < bVal ? -1 : 1;\n return sort.order === 'desc' ? -comparison : comparison;\n });\n }\n\n // Apply pagination\n const paginatedEntries = allEntries.slice(effectiveOffset, effectiveOffset + effectiveLimit);\n\n // Format results\n if (paginatedEntries.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: `No results found in map '${map}'${filter ? ' matching the filter' : ''}.`,\n },\n ],\n };\n }\n\n const formatted = paginatedEntries\n .map((entry, idx) => `${idx + 1 + effectiveOffset}. [${entry.key}]: ${JSON.stringify(entry.value, null, 2)}`)\n .join('\\n\\n');\n\n const totalInfo =\n allEntries.length > effectiveLimit\n ? `\\n\\n(Showing ${effectiveOffset + 1}-${effectiveOffset + paginatedEntries.length} of ${allEntries.length} total)`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${paginatedEntries.length} result(s) in map '${map}':\\n\\n${formatted}${totalInfo}`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error querying map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_mutate - Create, update, or delete data in a TopGun map\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { MutateArgsSchema, toolSchemas } from '../schemas';\n\nexport const mutateTool: MCPTool = {\n name: 'topgun_mutate',\n description:\n 'Create, update, or delete data in a TopGun map. ' +\n 'Use \"set\" operation to create or update a record. ' +\n 'Use \"remove\" operation to delete a record.',\n inputSchema: toolSchemas.mutate as MCPTool['inputSchema'],\n};\n\nexport async function handleMutate(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate and parse args with Zod\n const parseResult = MutateArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const { map, operation, key, data } = parseResult.data;\n\n // Check if mutations are enabled\n if (!ctx.config.enableMutations) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: Mutation operations are disabled on this MCP server.',\n },\n ],\n isError: true,\n };\n }\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n try {\n const lwwMap = ctx.client.getMap<string, Record<string, unknown>>(map);\n\n if (operation === 'set') {\n if (!data) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: \"data\" is required for \"set\" operation.',\n },\n ],\n isError: true,\n };\n }\n\n // Add timestamp if not present\n const recordData = {\n ...data,\n _updatedAt: new Date().toISOString(),\n };\n\n // Check if record exists for logging\n const existingValue = lwwMap.get(key);\n const isCreate = existingValue === undefined;\n\n lwwMap.set(key, recordData);\n\n return {\n content: [\n {\n type: 'text',\n text: isCreate\n ? `Successfully created record '${key}' in map '${map}':\\n${JSON.stringify(recordData, null, 2)}`\n : `Successfully updated record '${key}' in map '${map}':\\n${JSON.stringify(recordData, null, 2)}`,\n },\n ],\n };\n } else if (operation === 'remove') {\n // Check if record exists\n const existingValue = lwwMap.get(key);\n if (existingValue === undefined) {\n return {\n content: [\n {\n type: 'text',\n text: `Warning: Record '${key}' does not exist in map '${map}'. No action taken.`,\n },\n ],\n };\n }\n\n lwwMap.remove(key);\n\n return {\n content: [\n {\n type: 'text',\n text: `Successfully removed record '${key}' from map '${map}'.`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Error: Invalid operation '${operation}'. Use 'set' or 'remove'.`,\n },\n ],\n isError: true,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error performing ${operation} on map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_search - Perform hybrid search (exact + full-text) across a map\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { SearchArgsSchema, toolSchemas, type SearchArgs } from '../schemas';\n\nexport const searchTool: MCPTool = {\n name: 'topgun_search',\n description:\n 'Perform hybrid search across a TopGun map using BM25 full-text search. ' +\n 'Returns results ranked by relevance score. ' +\n 'Use this when searching for text content or when the exact field values are unknown.',\n inputSchema: toolSchemas.search as MCPTool['inputSchema'],\n};\n\nexport async function handleSearch(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate arguments with Zod\n const parseResult = SearchArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const args: SearchArgs = parseResult.data;\n const { map, query, limit, minScore } = args;\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n const effectiveLimit = Math.min(limit ?? ctx.config.defaultLimit, ctx.config.maxLimit);\n const effectiveMinScore = minScore ?? 0;\n\n try {\n // Use the client's search API (Phase 11)\n const results = await ctx.client.search<Record<string, unknown>>(map, query, {\n limit: effectiveLimit,\n minScore: effectiveMinScore,\n });\n\n if (results.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: `No results found in map '${map}' for query \"${query}\".`,\n },\n ],\n };\n }\n\n const formatted = results\n .map(\n (result, idx) =>\n `${idx + 1}. [Score: ${result.score.toFixed(3)}] [${result.key}]\\n` +\n ` Matched: ${result.matchedTerms.join(', ')}\\n` +\n ` Data: ${JSON.stringify(result.value, null, 2).split('\\n').join('\\n ')}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${results.length} result(s) in map '${map}' for query \"${query}\":\\n\\n${formatted}`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n // Handle case where FTS is not enabled for the map\n if (message.includes('not enabled') || message.includes('FTS')) {\n return {\n content: [\n {\n type: 'text',\n text:\n `Full-text search is not enabled for map '${map}'. ` +\n `Use topgun_query instead for exact matching, or enable FTS on the server.`,\n },\n ],\n isError: true,\n };\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Error searching map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_subscribe - Watch a map for real-time changes\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { SubscribeArgsSchema, toolSchemas, type SubscribeArgs } from '../schemas';\n\nexport const subscribeTool: MCPTool = {\n name: 'topgun_subscribe',\n description:\n 'Subscribe to real-time changes in a TopGun map. ' +\n 'Returns changes that occur within the timeout period. ' +\n 'Use this to watch for new or updated data.',\n inputSchema: toolSchemas.subscribe as MCPTool['inputSchema'],\n};\n\nexport async function handleSubscribe(\n rawArgs: unknown,\n ctx: ToolContext\n): Promise<MCPToolResult> {\n // Validate arguments with Zod\n const parseResult = SubscribeArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const args: SubscribeArgs = parseResult.data;\n const { map, filter, timeout } = args;\n\n // Check if subscriptions are enabled\n if (!ctx.config.enableSubscriptions) {\n return {\n content: [\n {\n type: 'text',\n text: 'Error: Subscription operations are disabled on this MCP server.',\n },\n ],\n isError: true,\n };\n }\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n const effectiveTimeout = Math.min(\n timeout ?? ctx.config.subscriptionTimeoutSeconds,\n ctx.config.subscriptionTimeoutSeconds\n );\n\n try {\n // Create a query handle with the filter\n const queryHandle = ctx.client.query<Record<string, unknown>>(map, filter ?? {});\n\n // Collect changes\n const changes: Array<{\n type: 'add' | 'update' | 'remove';\n key: string;\n value?: Record<string, unknown>;\n timestamp: string;\n }> = [];\n\n let isInitialLoad = true;\n\n // Subscribe to changes\n const unsubscribe = queryHandle.subscribe((results: Array<Record<string, unknown> & { _key: string }>) => {\n // Skip initial load\n if (isInitialLoad) {\n isInitialLoad = false;\n return;\n }\n\n // Record the change\n for (const result of results) {\n changes.push({\n type: 'update',\n key: result._key ?? 'unknown',\n value: result,\n timestamp: new Date().toISOString(),\n });\n }\n });\n\n // Wait for the timeout period\n await new Promise((resolve) => setTimeout(resolve, effectiveTimeout * 1000));\n\n // Cleanup\n unsubscribe();\n\n // Format results\n if (changes.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: `No changes detected in map '${map}' during the ${effectiveTimeout} second watch period.`,\n },\n ],\n };\n }\n\n const formatted = changes\n .map(\n (change, idx) =>\n `${idx + 1}. [${change.timestamp}] ${change.type.toUpperCase()} - ${change.key}\\n` +\n (change.value ? ` ${JSON.stringify(change.value, null, 2).split('\\n').join('\\n ')}` : '')\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Detected ${changes.length} change(s) in map '${map}' during ${effectiveTimeout} seconds:\\n\\n${formatted}`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error subscribing to map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_schema - Get schema information about a map\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { SchemaArgsSchema, toolSchemas, type SchemaArgs } from '../schemas';\n\nexport const schemaTool: MCPTool = {\n name: 'topgun_schema',\n description:\n 'Get schema information about a TopGun map. ' +\n 'Returns inferred field types and indexes. ' +\n 'Use this to understand the structure of data in a map.',\n inputSchema: toolSchemas.schema as MCPTool['inputSchema'],\n};\n\n/**\n * Infer the type of a value for schema display\n */\nfunction inferType(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) {\n if (value.length === 0) return 'array';\n const itemTypes = [...new Set(value.map((v) => inferType(v)))];\n return `array<${itemTypes.join(' | ')}>`;\n }\n if (value instanceof Date) return 'date';\n if (typeof value === 'object') return 'object';\n return typeof value;\n}\n\n/**\n * Check if a value looks like a timestamp\n */\nfunction isTimestamp(value: unknown): boolean {\n if (typeof value === 'string') {\n // ISO date format\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(value)) return true;\n // Date only\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return true;\n }\n if (typeof value === 'number') {\n // Unix timestamp (reasonable range: 2000-2100)\n if (value > 946684800000 && value < 4102444800000) return true;\n }\n return false;\n}\n\n/**\n * Infer enum values from a sample\n */\nfunction inferEnum(values: unknown[]): string[] | null {\n const uniqueValues = [...new Set(values.filter((v) => typeof v === 'string'))];\n // Only infer enum if we have 2-10 unique string values\n if (uniqueValues.length >= 2 && uniqueValues.length <= 10) {\n return uniqueValues as string[];\n }\n return null;\n}\n\nexport async function handleSchema(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate arguments with Zod\n const parseResult = SchemaArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const args: SchemaArgs = parseResult.data;\n const { map } = args;\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n try {\n const lwwMap = ctx.client.getMap<string, Record<string, unknown>>(map);\n\n // Collect field information from all entries\n const fieldTypes: Map<string, Set<string>> = new Map();\n const fieldValues: Map<string, unknown[]> = new Map();\n let recordCount = 0;\n\n for (const [, value] of lwwMap.entries()) {\n if (value !== null && typeof value === 'object') {\n recordCount++;\n for (const [fieldName, fieldValue] of Object.entries(value)) {\n // Track types\n if (!fieldTypes.has(fieldName)) {\n fieldTypes.set(fieldName, new Set());\n }\n\n let inferredType = inferType(fieldValue);\n if (isTimestamp(fieldValue)) {\n inferredType = 'timestamp';\n }\n fieldTypes.get(fieldName)!.add(inferredType);\n\n // Track values for enum inference\n if (!fieldValues.has(fieldName)) {\n fieldValues.set(fieldName, []);\n }\n fieldValues.get(fieldName)!.push(fieldValue);\n }\n }\n }\n\n if (recordCount === 0) {\n return {\n content: [\n {\n type: 'text',\n text: `Map '${map}' is empty. No schema information available.\\n\\nTip: Add some data to the map to infer its schema.`,\n },\n ],\n };\n }\n\n // Build schema output\n const fields: Record<string, string> = {};\n for (const [fieldName, types] of fieldTypes.entries()) {\n const typeArray = [...types];\n\n // Check for enum\n const values = fieldValues.get(fieldName) ?? [];\n const enumValues = inferEnum(values);\n if (enumValues && typeArray.length === 1 && typeArray[0] === 'string') {\n fields[fieldName] = `enum(${enumValues.join(', ')})`;\n } else if (typeArray.length === 1) {\n fields[fieldName] = typeArray[0];\n } else {\n fields[fieldName] = typeArray.join(' | ');\n }\n }\n\n // Format schema output\n const schemaOutput = {\n map,\n recordCount,\n fields,\n // Note: Index information would come from server metadata in a full implementation\n indexes: [],\n };\n\n const fieldsFormatted = Object.entries(fields)\n .map(([name, type]) => ` - ${name}: ${type}`)\n .join('\\n');\n\n return {\n content: [\n {\n type: 'text',\n text:\n `Schema for map '${map}':\\n\\n` +\n `Records: ${recordCount}\\n\\n` +\n `Fields:\\n${fieldsFormatted}\\n\\n` +\n `Raw schema:\\n${JSON.stringify(schemaOutput, null, 2)}`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error getting schema for map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_stats - Get statistics about TopGun maps\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { StatsArgsSchema, toolSchemas, type StatsArgs } from '../schemas';\n\nexport const statsTool: MCPTool = {\n name: 'topgun_stats',\n description:\n 'Get statistics about TopGun maps. ' +\n 'Returns record counts, connection status, and sync state. ' +\n 'Use this to understand the health and size of your data.',\n inputSchema: toolSchemas.stats as MCPTool['inputSchema'],\n};\n\nexport async function handleStats(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate arguments with Zod\n const parseResult = StatsArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const args: StatsArgs = parseResult.data;\n const { map } = args;\n\n // Validate map access if specific map requested\n if (map && ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n try {\n // Collect stats\n const stats: {\n connection: {\n state: string;\n isCluster: boolean;\n pendingOps: number;\n backpressurePaused: boolean;\n };\n maps: Array<{\n name: string;\n recordCount: number;\n tombstoneCount: number;\n }>;\n cluster?: {\n nodes: string[];\n partitionMapVersion: number;\n routingActive: boolean;\n };\n } = {\n connection: {\n state: ctx.client.getConnectionState(),\n isCluster: ctx.client.isCluster(),\n pendingOps: ctx.client.getPendingOpsCount(),\n backpressurePaused: ctx.client.isBackpressurePaused(),\n },\n maps: [],\n };\n\n // Add cluster info if in cluster mode\n if (ctx.client.isCluster()) {\n stats.cluster = {\n nodes: ctx.client.getConnectedNodes(),\n partitionMapVersion: ctx.client.getPartitionMapVersion(),\n routingActive: ctx.client.isRoutingActive(),\n };\n }\n\n // Get map stats\n if (map) {\n // Single map stats\n const lwwMap = ctx.client.getMap<string, unknown>(map);\n let recordCount = 0;\n let tombstoneCount = 0;\n\n for (const [, value] of lwwMap.entries()) {\n if (value === null || value === undefined) {\n tombstoneCount++;\n } else {\n recordCount++;\n }\n }\n\n stats.maps.push({\n name: map,\n recordCount,\n tombstoneCount,\n });\n }\n\n // Format output\n const connectionInfo =\n `Connection Status:\\n` +\n ` - State: ${stats.connection.state}\\n` +\n ` - Mode: ${stats.connection.isCluster ? 'Cluster' : 'Single Server'}\\n` +\n ` - Pending Operations: ${stats.connection.pendingOps}\\n` +\n ` - Backpressure Paused: ${stats.connection.backpressurePaused}`;\n\n const clusterInfo = stats.cluster\n ? `\\n\\nCluster Info:\\n` +\n ` - Connected Nodes: ${stats.cluster.nodes.length > 0 ? stats.cluster.nodes.join(', ') : 'none'}\\n` +\n ` - Partition Map Version: ${stats.cluster.partitionMapVersion}\\n` +\n ` - Routing Active: ${stats.cluster.routingActive}`\n : '';\n\n const mapInfo =\n stats.maps.length > 0\n ? `\\n\\nMap Statistics:\\n` +\n stats.maps\n .map(\n (m) =>\n ` ${m.name}:\\n` +\n ` - Records: ${m.recordCount}\\n` +\n ` - Tombstones: ${m.tombstoneCount}`\n )\n .join('\\n')\n : map\n ? `\\n\\nMap '${map}' has no data yet.`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `TopGun Statistics:\\n\\n${connectionInfo}${clusterInfo}${mapInfo}`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error getting stats: ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_explain - Explain how a query would be executed\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { ExplainArgsSchema, toolSchemas, type ExplainArgs } from '../schemas';\n\nexport const explainTool: MCPTool = {\n name: 'topgun_explain',\n description:\n 'Explain how a query would be executed against a TopGun map. ' +\n 'Returns the query plan, estimated result count, and execution strategy. ' +\n 'Use this to understand and optimize queries.',\n inputSchema: toolSchemas.explain as MCPTool['inputSchema'],\n};\n\nexport async function handleExplain(rawArgs: unknown, ctx: ToolContext): Promise<MCPToolResult> {\n // Validate arguments with Zod\n const parseResult = ExplainArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n\n const args: ExplainArgs = parseResult.data;\n const { map, filter } = args;\n\n // Validate map access\n if (ctx.config.allowedMaps && !ctx.config.allowedMaps.includes(map)) {\n return {\n content: [\n {\n type: 'text',\n text: `Error: Access to map '${map}' is not allowed. Available maps: ${ctx.config.allowedMaps.join(', ')}`,\n },\n ],\n isError: true,\n };\n }\n\n try {\n const lwwMap = ctx.client.getMap<string, Record<string, unknown>>(map);\n\n // Count total records\n let totalRecords = 0;\n let matchingRecords = 0;\n\n for (const [, value] of lwwMap.entries()) {\n if (value !== null && typeof value === 'object') {\n totalRecords++;\n\n // Check if matches filter\n if (filter) {\n let matches = true;\n for (const [filterKey, filterValue] of Object.entries(filter)) {\n if ((value as Record<string, unknown>)[filterKey] !== filterValue) {\n matches = false;\n break;\n }\n }\n if (matches) matchingRecords++;\n } else {\n matchingRecords++;\n }\n }\n }\n\n // Build query plan\n const plan: {\n strategy: string;\n steps: string[];\n estimatedResults: number;\n totalRecords: number;\n selectivity: number;\n recommendations: string[];\n } = {\n strategy: filter ? 'FILTER_SCAN' : 'FULL_SCAN',\n steps: [],\n estimatedResults: matchingRecords,\n totalRecords,\n selectivity: totalRecords > 0 ? matchingRecords / totalRecords : 0,\n recommendations: [],\n };\n\n // Add steps\n plan.steps.push(`1. Scan map '${map}' (${totalRecords} records)`);\n\n if (filter) {\n const filterFields = Object.keys(filter);\n plan.steps.push(`2. Apply filter on fields: ${filterFields.join(', ')}`);\n plan.steps.push(`3. Return matching records (estimated: ${matchingRecords})`);\n\n // Add recommendations based on selectivity\n if (plan.selectivity < 0.1) {\n plan.recommendations.push(\n `Consider creating an index on ${filterFields.join(', ')} for better performance.`\n );\n }\n if (totalRecords > 1000 && plan.selectivity > 0.5) {\n plan.recommendations.push(\n `Query is not selective (${(plan.selectivity * 100).toFixed(1)}% of records match). ` +\n `Consider adding more filter criteria.`\n );\n }\n } else {\n plan.steps.push(`2. Return all records`);\n if (totalRecords > 100) {\n plan.recommendations.push(\n `No filter applied. Consider adding filter criteria to reduce result size.`\n );\n }\n }\n\n // Check for potential FTS usage\n if (filter) {\n const stringFilters = Object.entries(filter).filter(\n ([, v]) => typeof v === 'string' && String(v).length > 3\n );\n if (stringFilters.length > 0) {\n plan.recommendations.push(\n `For text search on fields [${stringFilters.map(([k]) => k).join(', ')}], ` +\n `consider using topgun_search instead for better relevance ranking.`\n );\n }\n }\n\n // Format output\n const stepsFormatted = plan.steps.join('\\n');\n const recommendationsFormatted =\n plan.recommendations.length > 0\n ? `\\n\\nRecommendations:\\n${plan.recommendations.map((r) => ` - ${r}`).join('\\n')}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text:\n `Query Plan for map '${map}':\\n\\n` +\n `Strategy: ${plan.strategy}\\n\\n` +\n `Execution Steps:\\n${stepsFormatted}\\n\\n` +\n `Statistics:\\n` +\n ` - Total Records: ${plan.totalRecords}\\n` +\n ` - Estimated Results: ${plan.estimatedResults}\\n` +\n ` - Selectivity: ${(plan.selectivity * 100).toFixed(1)}%` +\n recommendationsFormatted,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error explaining query on map '${map}': ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * topgun_list_maps - List all available maps\n */\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { ListMapsArgsSchema, toolSchemas } from '../schemas';\n\nexport const listMapsTool: MCPTool = {\n name: 'topgun_list_maps',\n description:\n 'List all available TopGun maps that can be queried. ' +\n 'Returns the names of maps you have access to. ' +\n 'Use this first to discover what data is available.',\n inputSchema: toolSchemas.listMaps as MCPTool['inputSchema'],\n};\n\nexport async function handleListMaps(\n rawArgs: unknown,\n ctx: ToolContext\n): Promise<MCPToolResult> {\n // Validate arguments with Zod (no required fields, but validates structure)\n const parseResult = ListMapsArgsSchema.safeParse(rawArgs);\n if (!parseResult.success) {\n const errors = parseResult.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return {\n content: [{ type: 'text', text: `Invalid arguments: ${errors}` }],\n isError: true,\n };\n }\n try {\n // If allowedMaps is configured, return those\n if (ctx.config.allowedMaps && ctx.config.allowedMaps.length > 0) {\n const mapList = ctx.config.allowedMaps.map((name) => ` - ${name}`).join('\\n');\n\n return {\n content: [\n {\n type: 'text',\n text:\n `Available maps (${ctx.config.allowedMaps.length}):\\n${mapList}\\n\\n` +\n `Use topgun_schema to get field information for a specific map.\\n` +\n `Use topgun_query to read data from a map.`,\n },\n ],\n };\n }\n\n // Otherwise, indicate that all maps are accessible but we don't have a directory\n return {\n content: [\n {\n type: 'text',\n text:\n `This MCP server allows access to all maps (no restrictions configured).\\n\\n` +\n `To query a map, use topgun_query with the map name.\\n` +\n `To get schema information, use topgun_schema.\\n` +\n `To search, use topgun_search.\\n\\n` +\n `Common map patterns:\\n` +\n ` - 'users' - User accounts\\n` +\n ` - 'tasks' - Task items\\n` +\n ` - 'posts' - Blog posts or messages\\n` +\n ` - 'products' - E-commerce products\\n\\n` +\n `Tip: Ask the user what maps are available in their application.`,\n },\n ],\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error listing maps: ${message}`,\n },\n ],\n isError: true,\n };\n }\n}\n","/**\n * MCP Tools Index\n * Exports all tool definitions and handlers\n */\n\nexport { queryTool, handleQuery } from './query';\nexport { mutateTool, handleMutate } from './mutate';\nexport { searchTool, handleSearch } from './search';\nexport { subscribeTool, handleSubscribe } from './subscribe';\nexport { schemaTool, handleSchema } from './schema';\nexport { statsTool, handleStats } from './stats';\nexport { explainTool, handleExplain } from './explain';\nexport { listMapsTool, handleListMaps } from './listMaps';\n\nimport type { MCPTool, MCPToolResult, ToolContext } from '../types';\nimport { queryTool, handleQuery } from './query';\nimport { mutateTool, handleMutate } from './mutate';\nimport { searchTool, handleSearch } from './search';\nimport { subscribeTool, handleSubscribe } from './subscribe';\nimport { schemaTool, handleSchema } from './schema';\nimport { statsTool, handleStats } from './stats';\nimport { explainTool, handleExplain } from './explain';\nimport { listMapsTool, handleListMaps } from './listMaps';\n\n/**\n * All available tools\n */\nexport const allTools: MCPTool[] = [\n listMapsTool,\n queryTool,\n mutateTool,\n searchTool,\n subscribeTool,\n schemaTool,\n statsTool,\n explainTool,\n];\n\n/**\n * Tool handlers map\n */\nexport const toolHandlers: Record<\n string,\n (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>\n> = {\n topgun_list_maps: handleListMaps as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_query: handleQuery as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_mutate: handleMutate as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_search: handleSearch as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_subscribe: handleSubscribe as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_schema: handleSchema as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_stats: handleStats as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n topgun_explain: handleExplain as (args: unknown, ctx: ToolContext) => Promise<MCPToolResult>,\n};\n","/**\n * Structured Logger for MCP Server\n *\n * Uses pino for JSON-structured logging.\n * Logs to stderr to not interfere with MCP protocol on stdout.\n */\n\nimport pino from 'pino';\n\n/**\n * Create a logger instance for MCP server\n */\nexport function createLogger(options: { debug?: boolean; name?: string } = {}) {\n const { debug = false, name = 'topgun-mcp' } = options;\n\n return pino({\n name,\n level: debug ? 'debug' : 'info',\n // Always use stderr to not interfere with MCP stdio protocol\n transport: undefined,\n }, pino.destination(2)); // fd 2 = stderr\n}\n\n/**\n * Default logger instance\n */\nexport const logger = createLogger();\n\n/**\n * Logger type for type annotations\n */\nexport type Logger = ReturnType<typeof createLogger>;\n","/**\n * TopGun MCP Server\n *\n * Model Context Protocol server for TopGun database.\n * Enables AI assistants (Claude, Cursor) to interact with TopGun data.\n */\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 { TopGunClient } from '@topgunbuild/client';\nimport type { IStorageAdapter, OpLogEntry } from '@topgunbuild/client';\nimport type { MCPServerConfig, ResolvedMCPServerConfig, ToolContext } from './types';\nimport { allTools, toolHandlers } from './tools';\nimport { createLogger, type Logger } from './logger';\n\n/**\n * Default configuration values\n */\nconst DEFAULT_CONFIG: ResolvedMCPServerConfig = {\n name: 'topgun-mcp-server',\n version: '1.0.0',\n topgunUrl: 'ws://localhost:8080',\n enableMutations: true,\n enableSubscriptions: true,\n defaultLimit: 10,\n maxLimit: 100,\n subscriptionTimeoutSeconds: 60,\n debug: false,\n};\n\n/**\n * TopGun MCP Server\n *\n * Provides MCP protocol interface for AI assistants to interact\n * with TopGun databases.\n *\n * @example\n * ```typescript\n * const server = new TopGunMCPServer({\n * topgunUrl: 'ws://localhost:8080',\n * allowedMaps: ['tasks', 'users'],\n * });\n *\n * await server.start();\n * ```\n */\nexport class TopGunMCPServer {\n private readonly server: Server;\n private readonly client: TopGunClient;\n private readonly config: ResolvedMCPServerConfig;\n private readonly toolContext: ToolContext;\n private readonly logger: Logger;\n private isStarted = false;\n private externalClient = false;\n\n constructor(config: MCPServerConfig = {}) {\n // Resolve configuration with defaults\n this.config = {\n name: config.name ?? DEFAULT_CONFIG.name,\n version: config.version ?? DEFAULT_CONFIG.version,\n topgunUrl: config.topgunUrl ?? DEFAULT_CONFIG.topgunUrl,\n authToken: config.authToken,\n allowedMaps: config.allowedMaps,\n enableMutations: config.enableMutations ?? DEFAULT_CONFIG.enableMutations,\n enableSubscriptions: config.enableSubscriptions ?? DEFAULT_CONFIG.enableSubscriptions,\n defaultLimit: config.defaultLimit ?? DEFAULT_CONFIG.defaultLimit,\n maxLimit: config.maxLimit ?? DEFAULT_CONFIG.maxLimit,\n subscriptionTimeoutSeconds:\n config.subscriptionTimeoutSeconds ?? DEFAULT_CONFIG.subscriptionTimeoutSeconds,\n debug: config.debug ?? DEFAULT_CONFIG.debug,\n };\n\n // Use provided client or create new one\n if (config.client) {\n this.client = config.client;\n this.externalClient = true;\n } else {\n // Create in-memory storage adapter for MCP server\n // Note: In production, you might want to use actual IDBAdapter or custom storage\n this.client = new TopGunClient({\n serverUrl: this.config.topgunUrl,\n storage: new InMemoryStorageAdapter(),\n });\n\n if (this.config.authToken) {\n this.client.setAuthToken(this.config.authToken);\n }\n }\n\n // Create tool context\n this.toolContext = {\n client: this.client,\n config: this.config,\n };\n\n // Initialize logger\n this.logger = createLogger({\n debug: this.config.debug,\n name: this.config.name,\n });\n\n // Initialize MCP server\n this.server = new Server(\n {\n name: this.config.name,\n version: this.config.version,\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Register handlers\n this.registerHandlers();\n\n this.logger.info({\n topgunUrl: this.config.topgunUrl,\n allowedMaps: this.config.allowedMaps,\n enableMutations: this.config.enableMutations,\n }, 'TopGunMCPServer initialized');\n }\n\n /**\n * Register MCP protocol handlers\n */\n private registerHandlers(): void {\n // List available tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n // Filter tools based on config\n let availableTools = [...allTools];\n\n if (!this.config.enableMutations) {\n availableTools = availableTools.filter((t) => t.name !== 'topgun_mutate');\n }\n\n if (!this.config.enableSubscriptions) {\n availableTools = availableTools.filter((t) => t.name !== 'topgun_subscribe');\n }\n\n this.logger.debug({ count: availableTools.length }, 'tools/list called');\n\n return {\n tools: availableTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n })),\n };\n });\n\n // Handle tool calls\n this.server.setRequestHandler(CallToolRequestSchema, async (request): Promise<{\n content: Array<{ type: 'text'; text: string }>;\n isError?: boolean;\n }> => {\n const { name, arguments: args } = request.params;\n\n this.logger.debug({ name, args }, 'tools/call');\n\n const handler = toolHandlers[name];\n if (!handler) {\n return {\n content: [\n {\n type: 'text',\n text: `Unknown tool: ${name}. Use tools/list to see available tools.`,\n },\n ],\n isError: true,\n };\n }\n\n try {\n const result = await handler(args ?? {}, this.toolContext);\n this.logger.debug({ name, isError: result.isError }, 'Tool result');\n return {\n content: result.content.map((c) => ({\n type: 'text' as const,\n text: c.text ?? '',\n })),\n isError: result.isError,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error({ name, error: message }, 'Tool error');\n return {\n content: [\n {\n type: 'text',\n text: `Error executing ${name}: ${message}`,\n },\n ],\n isError: true,\n };\n }\n });\n }\n\n /**\n * Start the MCP server with stdio transport\n */\n async start(): Promise<void> {\n if (this.isStarted) {\n throw new Error('Server is already started');\n }\n\n // Initialize client storage\n await this.client.start();\n\n // Connect via stdio transport\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n\n this.isStarted = true;\n this.logger.info('TopGun MCP Server started on stdio');\n }\n\n /**\n * Start the MCP server with a custom transport\n */\n async startWithTransport(transport: { start(): Promise<void> }): Promise<void> {\n if (this.isStarted) {\n throw new Error('Server is already started');\n }\n\n // Initialize client storage\n await this.client.start();\n\n // Connect via provided transport\n await this.server.connect(transport as any);\n\n this.isStarted = true;\n this.logger.info('TopGun MCP Server started with custom transport');\n }\n\n /**\n * Stop the server and cleanup resources\n */\n async stop(): Promise<void> {\n if (!this.isStarted) return;\n\n await this.server.close();\n\n if (!this.externalClient) {\n this.client.close();\n }\n\n this.isStarted = false;\n this.logger.info('TopGun MCP Server stopped');\n }\n\n /**\n * Execute a tool directly (for testing)\n */\n async callTool(name: string, args: unknown): Promise<unknown> {\n const handler = toolHandlers[name];\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n return handler(args, this.toolContext);\n }\n\n /**\n * Get the underlying MCP server instance\n */\n getServer(): Server {\n return this.server;\n }\n\n /**\n * Get the TopGun client instance\n */\n getClient(): TopGunClient {\n return this.client;\n }\n\n /**\n * Get resolved configuration\n */\n getConfig(): ResolvedMCPServerConfig {\n return { ...this.config };\n }\n}\n\n/**\n * Simple in-memory storage adapter for MCP server use\n * Implements IStorageAdapter interface from @topgunbuild/client\n */\nclass InMemoryStorageAdapter implements IStorageAdapter {\n private data = new Map<string, unknown>();\n private meta = new Map<string, unknown>();\n private opLog: OpLogEntry[] = [];\n private opLogIdCounter = 0;\n\n async initialize(_name: string): Promise<void> {\n // No-op\n }\n\n async close(): Promise<void> {\n this.data.clear();\n this.meta.clear();\n this.opLog = [];\n }\n\n async get(key: string): Promise<unknown | undefined> {\n return this.data.get(key);\n }\n\n async put(key: string, value: unknown): Promise<void> {\n this.data.set(key, value);\n }\n\n async remove(key: string): Promise<void> {\n this.data.delete(key);\n }\n\n async getAllKeys(): Promise<string[]> {\n return Array.from(this.data.keys());\n }\n\n async getMeta(key: string): Promise<unknown | undefined> {\n return this.meta.get(key);\n }\n\n async setMeta(key: string, value: unknown): Promise<void> {\n this.meta.set(key, value);\n }\n\n async batchPut(entries: Map<string, unknown>): Promise<void> {\n for (const [key, value] of entries) {\n this.data.set(key, value);\n }\n }\n\n async appendOpLog(entry: Omit<OpLogEntry, 'id'>): Promise<number> {\n const id = ++this.opLogIdCounter;\n this.opLog.push({ ...entry, id });\n return id;\n }\n\n async getPendingOps(): Promise<OpLogEntry[]> {\n return this.opLog.filter((e) => e.synced === 0);\n }\n\n async markOpsSynced(lastId: number): Promise<void> {\n for (const op of this.opLog) {\n if (op.id !== undefined && op.id <= lastId) {\n op.synced = 1;\n }\n }\n }\n}\n","/**\n * HTTP/SSE Transport for MCP Server\n *\n * Provides HTTP-based transport for web MCP clients\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { createServer, type Server as HTTPServer } from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport type { TopGunMCPServer } from '../TopGunMCPServer';\n\n/**\n * HTTP Server configuration\n */\nexport interface HTTPServerConfig {\n /**\n * Port to listen on\n * @default 3000\n */\n port?: number;\n\n /**\n * Host to bind to\n * @default '0.0.0.0'\n */\n host?: string;\n\n /**\n * CORS allowed origins\n * @default ['*']\n */\n corsOrigins?: string[];\n\n /**\n * Path for MCP endpoint\n * @default '/mcp'\n */\n mcpPath?: string;\n\n /**\n * Path for SSE events\n * @default '/mcp/events'\n */\n eventPath?: string;\n\n /**\n * Enable debug logging\n * @default false\n */\n debug?: boolean;\n}\n\n/**\n * Resolved HTTP server configuration\n */\ninterface ResolvedHTTPConfig {\n port: number;\n host: string;\n corsOrigins: string[];\n mcpPath: string;\n eventPath: string;\n debug: boolean;\n}\n\nconst DEFAULT_HTTP_CONFIG: ResolvedHTTPConfig = {\n port: 3000,\n host: '0.0.0.0',\n corsOrigins: ['*'],\n mcpPath: '/mcp',\n eventPath: '/mcp/events',\n debug: false,\n};\n\n/**\n * HTTP Transport wrapper for MCP Server\n */\nexport class HTTPTransport {\n private readonly config: ResolvedHTTPConfig;\n private httpServer?: HTTPServer;\n private isRunning = false;\n private activeSessions = new Map<string, SSEServerTransport>();\n\n constructor(config: HTTPServerConfig = {}) {\n this.config = {\n port: config.port ?? DEFAULT_HTTP_CONFIG.port,\n host: config.host ?? DEFAULT_HTTP_CONFIG.host,\n corsOrigins: config.corsOrigins ?? DEFAULT_HTTP_CONFIG.corsOrigins,\n mcpPath: config.mcpPath ?? DEFAULT_HTTP_CONFIG.mcpPath,\n eventPath: config.eventPath ?? DEFAULT_HTTP_CONFIG.eventPath,\n debug: config.debug ?? DEFAULT_HTTP_CONFIG.debug,\n };\n }\n\n /**\n * Start HTTP server with MCP transport\n */\n async start(mcpServer: TopGunMCPServer): Promise<void> {\n if (this.isRunning) {\n throw new Error('HTTP transport is already running');\n }\n\n this.httpServer = createServer((req, res) => {\n this.handleRequest(req, res, mcpServer);\n });\n\n return new Promise((resolve, reject) => {\n this.httpServer!.on('error', reject);\n\n this.httpServer!.listen(this.config.port, this.config.host, () => {\n this.isRunning = true;\n this.log(`HTTP transport listening on ${this.config.host}:${this.config.port}`);\n resolve();\n });\n });\n }\n\n /**\n * Stop HTTP server\n */\n async stop(): Promise<void> {\n if (!this.isRunning || !this.httpServer) return;\n\n // Close all active sessions\n for (const [sessionId, transport] of this.activeSessions) {\n try {\n await transport.close();\n } catch {\n // Ignore errors during cleanup\n }\n this.activeSessions.delete(sessionId);\n }\n\n return new Promise((resolve) => {\n this.httpServer!.close(() => {\n this.isRunning = false;\n this.log('HTTP transport stopped');\n resolve();\n });\n });\n }\n\n /**\n * Handle incoming HTTP request\n */\n private async handleRequest(\n req: IncomingMessage,\n res: ServerResponse,\n mcpServer: TopGunMCPServer\n ): Promise<void> {\n // Set CORS headers\n this.setCorsHeaders(req, res);\n\n // Handle preflight\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://${req.headers.host}`);\n const pathname = url.pathname;\n\n this.log(`${req.method} ${pathname}`);\n\n // Health check endpoint\n if (pathname === '/health') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ status: 'ok', timestamp: new Date().toISOString() }));\n return;\n }\n\n // MCP info endpoint\n if (pathname === this.config.mcpPath && req.method === 'GET') {\n const config = mcpServer.getConfig();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n name: config.name,\n version: config.version,\n transport: 'http+sse',\n mcpPath: this.config.mcpPath,\n eventPath: this.config.eventPath,\n })\n );\n return;\n }\n\n // SSE connection for MCP\n if (pathname === this.config.eventPath && req.method === 'GET') {\n await this.handleSSEConnection(req, res, mcpServer);\n return;\n }\n\n // MCP POST request (for clients that don't support SSE)\n if (pathname === this.config.mcpPath && req.method === 'POST') {\n await this.handleMCPRequest(req, res, mcpServer);\n return;\n }\n\n // Not found\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Not found' }));\n }\n\n /**\n * Handle SSE connection for real-time MCP\n */\n private async handleSSEConnection(\n _req: IncomingMessage,\n res: ServerResponse,\n mcpServer: TopGunMCPServer\n ): Promise<void> {\n const sessionId = randomUUID();\n\n this.log(`New SSE session: ${sessionId}`);\n\n // Create SSE transport\n const transport = new SSEServerTransport(this.config.mcpPath, res);\n this.activeSessions.set(sessionId, transport);\n\n try {\n // Connect to MCP server\n await mcpServer.getServer().connect(transport);\n\n // Wait for connection to close\n await new Promise<void>((resolve) => {\n res.on('close', () => {\n this.log(`SSE session closed: ${sessionId}`);\n this.activeSessions.delete(sessionId);\n resolve();\n });\n });\n } catch (error) {\n this.log(`SSE session error: ${sessionId}`, error);\n this.activeSessions.delete(sessionId);\n }\n }\n\n /**\n * Handle stateless MCP POST request\n */\n private async handleMCPRequest(\n req: IncomingMessage,\n res: ServerResponse,\n mcpServer: TopGunMCPServer\n ): Promise<void> {\n try {\n // Read body\n const body = await this.readBody(req);\n const request = JSON.parse(body);\n\n this.log('MCP request', request);\n\n // Extract tool call from request\n if (request.method === 'tools/call') {\n const { name, arguments: args } = request.params || {};\n\n if (!name) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Missing tool name' }));\n return;\n }\n\n const result = await mcpServer.callTool(name, args);\n\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ result }));\n } else {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n error: 'Unsupported method. Use SSE transport for full MCP support.',\n })\n );\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.log('MCP request error', error);\n\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: message }));\n }\n }\n\n /**\n * Read request body\n */\n private readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n let body = '';\n req.on('data', (chunk) => (body += chunk));\n req.on('end', () => resolve(body));\n req.on('error', reject);\n });\n }\n\n /**\n * Set CORS headers\n */\n private setCorsHeaders(req: IncomingMessage, res: ServerResponse): void {\n const origin = req.headers.origin || '*';\n const allowedOrigin = this.config.corsOrigins.includes('*')\n ? '*'\n : this.config.corsOrigins.includes(origin)\n ? origin\n : this.config.corsOrigins[0];\n\n res.setHeader('Access-Control-Allow-Origin', allowedOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n res.setHeader('Access-Control-Max-Age', '86400');\n }\n\n /**\n * Debug logging\n */\n private log(message: string, data?: unknown): void {\n if (this.config.debug) {\n console.error(`[HTTPTransport] ${message}`, data ? JSON.stringify(data) : '');\n }\n }\n\n /**\n * Get current session count\n */\n getSessionCount(): number {\n return this.activeSessions.size;\n }\n\n /**\n * Check if running\n */\n isActive(): boolean {\n return this.isRunning;\n }\n}\n\n/**\n * Create and start an HTTP transport\n */\nexport async function createHTTPServer(\n mcpServer: TopGunMCPServer,\n config?: HTTPServerConfig\n): Promise<HTTPTransport> {\n const transport = new HTTPTransport(config);\n await transport.start(mcpServer);\n return transport;\n}\n"]}