@codemoot/mcp-server 0.2.8 → 0.2.10

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/dist/index.js CHANGED
File without changes
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/tools/review.ts","../src/tools/plan.ts","../src/tools/debate.ts","../src/tools/memory.ts","../src/tools/cost.ts","../src/index.ts"],"sourcesContent":["// packages/mcp-server/src/server.ts — MCP server setup with 5 tool handlers\r\n\r\nimport { join } from 'node:path';\r\nimport {\r\n CancellationToken,\r\n CostStore,\r\n MemoryStore,\r\n ModelRegistry,\r\n Orchestrator,\r\n MCP_CONTENT_MAX_LENGTH,\r\n MCP_TASK_MAX_LENGTH,\r\n loadConfig,\r\n openDatabase,\r\n} from '@codemoot/core';\r\nimport type { ProjectConfig } from '@codemoot/core';\r\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\r\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\r\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\r\nimport { handleCost, handleDebate, handleMemory, handlePlan, handleReview } from './tools/index.js';\r\n\r\nconst TOOL_DEFINITIONS = [\r\n {\r\n name: 'codemoot_review',\r\n description:\r\n 'Review code or content with a configured AI model. Returns score, verdict, and feedback.',\r\n inputSchema: {\r\n type: 'object' as const,\r\n properties: {\r\n content: {\r\n type: 'string',\r\n description: 'Content to review',\r\n minLength: 1,\r\n maxLength: MCP_CONTENT_MAX_LENGTH,\r\n },\r\n criteria: { type: 'array', items: { type: 'string' }, description: 'Review criteria' },\r\n model: { type: 'string', description: 'Model alias override' },\r\n strict: { type: 'boolean', description: 'Enable strict DLP mode', default: true },\r\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\r\n },\r\n required: ['content'],\r\n },\r\n },\r\n {\r\n name: 'codemoot_plan',\r\n description:\r\n 'Generate and iterate on a plan using multi-model review loops. Returns the refined plan.',\r\n inputSchema: {\r\n type: 'object' as const,\r\n properties: {\r\n task: { type: 'string', description: 'Task to plan', minLength: 1, maxLength: MCP_TASK_MAX_LENGTH },\r\n maxRounds: { type: 'integer', description: 'Max review rounds', default: 3 },\r\n stream: { type: 'boolean', description: 'Enable streaming', default: false },\r\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\r\n },\r\n required: ['task'],\r\n },\r\n },\r\n {\r\n name: 'codemoot_debate',\r\n description:\r\n 'Debate a question across multiple AI models concurrently. Returns per-model responses and optional synthesis.',\r\n inputSchema: {\r\n type: 'object' as const,\r\n properties: {\r\n question: {\r\n type: 'string',\r\n description: 'Question to debate',\r\n minLength: 1,\r\n maxLength: MCP_TASK_MAX_LENGTH,\r\n },\r\n models: {\r\n type: 'array',\r\n items: { type: 'string' },\r\n minItems: 1,\r\n maxItems: 5,\r\n description: 'Model aliases',\r\n },\r\n synthesize: { type: 'boolean', description: 'Synthesize responses', default: false },\r\n maxRounds: {\r\n type: 'integer',\r\n description: 'Max review rounds',\r\n default: 3,\r\n minimum: 1,\r\n maximum: 10,\r\n },\r\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\r\n },\r\n required: ['question'],\r\n },\r\n },\r\n {\r\n name: 'codemoot_memory',\r\n description:\r\n 'Save, search, retrieve, or delete project memories (decisions, conventions, patterns).',\r\n inputSchema: {\r\n type: 'object' as const,\r\n properties: {\r\n action: {\r\n type: 'string',\r\n enum: ['save', 'search', 'get', 'delete'],\r\n description: 'Memory operation',\r\n },\r\n content: { type: 'string', description: 'Content to save' },\r\n query: { type: 'string', description: 'Search query' },\r\n memoryId: { type: 'integer', description: 'Memory record ID' },\r\n category: {\r\n type: 'string',\r\n enum: ['decision', 'convention', 'pattern', 'issue', 'preference'],\r\n description: 'Memory category',\r\n },\r\n importance: { type: 'number', description: 'Importance 0-1', default: 0.5 },\r\n timeout: { type: 'number', description: 'Timeout in seconds', default: 5 },\r\n },\r\n required: ['action'],\r\n },\r\n },\r\n {\r\n name: 'codemoot_cost',\r\n description: 'Query cost and token usage data. Supports session, daily, and all-time scopes.',\r\n inputSchema: {\r\n type: 'object' as const,\r\n properties: {\r\n scope: {\r\n type: 'string',\r\n enum: ['session', 'daily', 'all'],\r\n description: 'Cost scope',\r\n default: 'session',\r\n },\r\n sessionId: { type: 'string', description: 'Session ID for session scope' },\r\n days: { type: 'integer', description: 'Number of days for daily scope', default: 30 },\r\n timeout: { type: 'number', description: 'Timeout in seconds', default: 5 },\r\n },\r\n },\r\n },\r\n];\r\n\r\nexport async function startServer(): Promise<void> {\r\n // Load config\r\n const projectDir = process.env.CODEMOOT_PROJECT_DIR ?? process.cwd();\r\n const config: ProjectConfig = loadConfig({ projectDir });\r\n\r\n // Open SQLite (WAL mode + busy_timeout set by openDatabase)\r\n const dbPath = process.env.CODEMOOT_DB_PATH ?? join(projectDir, '.cowork', 'db', 'cowork.db');\r\n const db = openDatabase(dbPath);\r\n\r\n // Create model registry and resolve auto mode (pass projectDir for CLI repo awareness)\r\n const registry = ModelRegistry.fromConfig(config, projectDir);\r\n await registry.resolveAutoMode();\r\n\r\n // Create orchestrator and stores (pass projectDir for context building)\r\n const orchestrator = new Orchestrator({ registry, db, config, projectDir });\r\n const memoryStore = new MemoryStore(db);\r\n const costStore = new CostStore(db);\r\n const projectId = config.project.name || 'default';\r\n\r\n // Create MCP server\r\n const server = new Server(\r\n { name: 'codemoot', version: '0.2.0' },\r\n { capabilities: { tools: {} } },\r\n );\r\n\r\n // Register tool listing handler\r\n server.setRequestHandler(ListToolsRequestSchema, async () => {\r\n return { tools: TOOL_DEFINITIONS };\r\n });\r\n\r\n // Register tool call handler\r\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\r\n const toolName = request.params.name;\r\n const args = request.params.arguments ?? {};\r\n\r\n try {\r\n switch (toolName) {\r\n case 'codemoot_review': {\r\n const token = new CancellationToken();\r\n return await handleReview(orchestrator, args, token);\r\n }\r\n case 'codemoot_plan': {\r\n return await handlePlan(orchestrator, args);\r\n }\r\n case 'codemoot_debate': {\r\n return await handleDebate(orchestrator, args);\r\n }\r\n case 'codemoot_memory': {\r\n return await handleMemory(memoryStore, projectId, args);\r\n }\r\n case 'codemoot_cost': {\r\n return await handleCost(costStore, args);\r\n }\r\n default: {\r\n return {\r\n content: [{ type: 'text', text: `Unknown tool: ${toolName}` }],\r\n isError: true,\r\n };\r\n }\r\n }\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n return {\r\n content: [{ type: 'text', text: `Error: ${message}` }],\r\n isError: true,\r\n };\r\n }\r\n });\r\n\r\n // Connect via stdio transport\r\n const transport = new StdioServerTransport();\r\n await server.connect(transport);\r\n\r\n // Graceful shutdown: close db and server on termination signals\r\n const shutdown = () => {\r\n try {\r\n db.close();\r\n } catch {\r\n // db may already be closed\r\n }\r\n process.exit(0);\r\n };\r\n process.on('SIGTERM', shutdown);\r\n process.on('SIGINT', shutdown);\r\n\r\n // Log to stderr so it does not interfere with stdio MCP transport\r\n console.error('CodeMoot MCP server started');\r\n}\r\n","// packages/mcp-server/src/tools/review.ts — codemoot_review tool handler\n\nimport { reviewInputSchema } from '@codemoot/core';\nimport type { CancellationToken, Orchestrator } from '@codemoot/core';\n\nexport async function handleReview(\n orchestrator: Orchestrator,\n args: unknown,\n cancellationToken?: CancellationToken,\n) {\n const input = reviewInputSchema.parse(args);\n const result = await orchestrator.review(\n input.content,\n {\n criteria: input.criteria,\n strict: input.strict,\n timeout: input.timeout,\n },\n cancellationToken,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/plan.ts — codemoot_plan tool handler\n\nimport { planInputSchema } from '@codemoot/core';\nimport type { Orchestrator } from '@codemoot/core';\n\nexport async function handlePlan(orchestrator: Orchestrator, args: unknown) {\n const input = planInputSchema.parse(args);\n const result = await orchestrator.plan(input.task, {\n maxRounds: input.maxRounds,\n stream: input.stream,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/debate.ts — codemoot_debate tool handler\n\nimport { debateInputSchema } from '@codemoot/core';\nimport type { Orchestrator } from '@codemoot/core';\n\nexport async function handleDebate(orchestrator: Orchestrator, args: unknown) {\n const input = debateInputSchema.parse(args);\n const result = await orchestrator.debateMultiRound(input.question, {\n modelAliases: input.models,\n maxRounds: input.maxRounds,\n timeout: input.timeout,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/memory.ts — codemoot_memory tool handler\n\nimport { memoryInputSchema } from '@codemoot/core';\nimport type { MemoryStore } from '@codemoot/core';\n\nexport async function handleMemory(memoryStore: MemoryStore, projectId: string, args: unknown) {\n const input = memoryInputSchema.parse(args);\n let result: unknown;\n\n switch (input.action) {\n case 'save': {\n if (!input.content) {\n throw new Error('content is required for save action');\n }\n const id = memoryStore.save({\n projectId,\n category: input.category ?? 'convention',\n content: input.content,\n sourceSessionId: null,\n importance: input.importance,\n });\n result = { id, saved: true };\n break;\n }\n case 'search': {\n if (!input.query) {\n throw new Error('query is required for search action');\n }\n const records = memoryStore.search(input.query, projectId);\n result = { records, count: records.length };\n break;\n }\n case 'get': {\n if (input.memoryId === undefined) {\n throw new Error('memoryId is required for get action');\n }\n const record = memoryStore.getById(input.memoryId);\n if (record) {\n memoryStore.recordAccess(input.memoryId);\n }\n result = record ?? { error: 'Not found' };\n break;\n }\n case 'delete': {\n if (input.memoryId === undefined) {\n throw new Error('memoryId is required for delete action');\n }\n memoryStore.delete(input.memoryId);\n result = { deleted: true, memoryId: input.memoryId };\n break;\n }\n default: {\n throw new Error(`Unknown memory action: ${String(input.action)}`);\n }\n }\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/cost.ts — codemoot_cost tool handler\n\nimport { DAYS_PER_YEAR, costInputSchema } from '@codemoot/core';\nimport type { CostStore } from '@codemoot/core';\n\nexport async function handleCost(costStore: CostStore, args: unknown) {\n const input = costInputSchema.parse(args);\n let result: unknown;\n\n switch (input.scope) {\n case 'session': {\n const sessionId = input.sessionId ?? '';\n result = costStore.getSessionSummary(sessionId);\n break;\n }\n case 'daily': {\n result = costStore.getDailySummary(input.days);\n break;\n }\n case 'all': {\n result = costStore.getDailySummary(DAYS_PER_YEAR);\n break;\n }\n default: {\n throw new Error(`Unknown cost scope: ${String(input.scope)}`);\n }\n }\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","import { startServer } from './server.js';\n\nstartServer().catch((err) => {\n console.error('Failed to start CodeMoot MCP server:', err);\n process.exit(1);\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/server.ts","../src/tools/review.ts","../src/tools/plan.ts","../src/tools/debate.ts","../src/tools/memory.ts","../src/tools/cost.ts","../src/index.ts"],"sourcesContent":["// packages/mcp-server/src/server.ts — MCP server setup with 5 tool handlers\n\nimport { join } from 'node:path';\nimport {\n CancellationToken,\n CostStore,\n MemoryStore,\n ModelRegistry,\n Orchestrator,\n MCP_CONTENT_MAX_LENGTH,\n MCP_TASK_MAX_LENGTH,\n loadConfig,\n openDatabase,\n} from '@codemoot/core';\nimport type { ProjectConfig } from '@codemoot/core';\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\nimport { handleCost, handleDebate, handleMemory, handlePlan, handleReview } from './tools/index.js';\n\nconst TOOL_DEFINITIONS = [\n {\n name: 'codemoot_review',\n description:\n 'Review code or content with a configured AI model. Returns score, verdict, and feedback.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n content: {\n type: 'string',\n description: 'Content to review',\n minLength: 1,\n maxLength: MCP_CONTENT_MAX_LENGTH,\n },\n criteria: { type: 'array', items: { type: 'string' }, description: 'Review criteria' },\n model: { type: 'string', description: 'Model alias override' },\n strict: { type: 'boolean', description: 'Enable strict DLP mode', default: true },\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\n },\n required: ['content'],\n },\n },\n {\n name: 'codemoot_plan',\n description:\n 'Generate and iterate on a plan using multi-model review loops. Returns the refined plan.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task: { type: 'string', description: 'Task to plan', minLength: 1, maxLength: MCP_TASK_MAX_LENGTH },\n maxRounds: { type: 'integer', description: 'Max review rounds', default: 3 },\n stream: { type: 'boolean', description: 'Enable streaming', default: false },\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\n },\n required: ['task'],\n },\n },\n {\n name: 'codemoot_debate',\n description:\n 'Debate a question across multiple AI models concurrently. Returns per-model responses and optional synthesis.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n question: {\n type: 'string',\n description: 'Question to debate',\n minLength: 1,\n maxLength: MCP_TASK_MAX_LENGTH,\n },\n models: {\n type: 'array',\n items: { type: 'string' },\n minItems: 1,\n maxItems: 5,\n description: 'Model aliases',\n },\n synthesize: { type: 'boolean', description: 'Synthesize responses', default: false },\n maxRounds: {\n type: 'integer',\n description: 'Max review rounds',\n default: 3,\n minimum: 1,\n maximum: 10,\n },\n timeout: { type: 'number', description: 'Timeout in seconds', default: 600 },\n },\n required: ['question'],\n },\n },\n {\n name: 'codemoot_memory',\n description:\n 'Save, search, retrieve, or delete project memories (decisions, conventions, patterns).',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: {\n type: 'string',\n enum: ['save', 'search', 'get', 'delete'],\n description: 'Memory operation',\n },\n content: { type: 'string', description: 'Content to save' },\n query: { type: 'string', description: 'Search query' },\n memoryId: { type: 'integer', description: 'Memory record ID' },\n category: {\n type: 'string',\n enum: ['decision', 'convention', 'pattern', 'issue', 'preference'],\n description: 'Memory category',\n },\n importance: { type: 'number', description: 'Importance 0-1', default: 0.5 },\n timeout: { type: 'number', description: 'Timeout in seconds', default: 5 },\n },\n required: ['action'],\n },\n },\n {\n name: 'codemoot_cost',\n description: 'Query cost and token usage data. Supports session, daily, and all-time scopes.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n scope: {\n type: 'string',\n enum: ['session', 'daily', 'all'],\n description: 'Cost scope',\n default: 'session',\n },\n sessionId: { type: 'string', description: 'Session ID for session scope' },\n days: { type: 'integer', description: 'Number of days for daily scope', default: 30 },\n timeout: { type: 'number', description: 'Timeout in seconds', default: 5 },\n },\n },\n },\n];\n\nexport async function startServer(): Promise<void> {\n // Load config\n const projectDir = process.env.CODEMOOT_PROJECT_DIR ?? process.cwd();\n const config: ProjectConfig = loadConfig({ projectDir });\n\n // Open SQLite (WAL mode + busy_timeout set by openDatabase)\n const dbPath = process.env.CODEMOOT_DB_PATH ?? join(projectDir, '.cowork', 'db', 'cowork.db');\n const db = openDatabase(dbPath);\n\n // Create model registry and resolve auto mode (pass projectDir for CLI repo awareness)\n const registry = ModelRegistry.fromConfig(config, projectDir);\n await registry.resolveAutoMode();\n\n // Create orchestrator and stores (pass projectDir for context building)\n const orchestrator = new Orchestrator({ registry, db, config, projectDir });\n const memoryStore = new MemoryStore(db);\n const costStore = new CostStore(db);\n const projectId = config.project.name || 'default';\n\n // Create MCP server\n const server = new Server(\n { name: 'codemoot', version: '0.2.0' },\n { capabilities: { tools: {} } },\n );\n\n // Register tool listing handler\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n return { tools: TOOL_DEFINITIONS };\n });\n\n // Register tool call handler\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const toolName = request.params.name;\n const args = request.params.arguments ?? {};\n\n try {\n switch (toolName) {\n case 'codemoot_review': {\n const token = new CancellationToken();\n return await handleReview(orchestrator, args, token);\n }\n case 'codemoot_plan': {\n return await handlePlan(orchestrator, args);\n }\n case 'codemoot_debate': {\n return await handleDebate(orchestrator, args);\n }\n case 'codemoot_memory': {\n return await handleMemory(memoryStore, projectId, args);\n }\n case 'codemoot_cost': {\n return await handleCost(costStore, args);\n }\n default: {\n return {\n content: [{ type: 'text', text: `Unknown tool: ${toolName}` }],\n isError: true,\n };\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n };\n }\n });\n\n // Connect via stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n // Graceful shutdown: close db and server on termination signals\n const shutdown = () => {\n try {\n db.close();\n } catch {\n // db may already be closed\n }\n process.exit(0);\n };\n process.on('SIGTERM', shutdown);\n process.on('SIGINT', shutdown);\n\n // Log to stderr so it does not interfere with stdio MCP transport\n console.error('CodeMoot MCP server started');\n}\n","// packages/mcp-server/src/tools/review.ts — codemoot_review tool handler\n\nimport { reviewInputSchema } from '@codemoot/core';\nimport type { CancellationToken, Orchestrator } from '@codemoot/core';\n\nexport async function handleReview(\n orchestrator: Orchestrator,\n args: unknown,\n cancellationToken?: CancellationToken,\n) {\n const input = reviewInputSchema.parse(args);\n const result = await orchestrator.review(\n input.content,\n {\n criteria: input.criteria,\n strict: input.strict,\n timeout: input.timeout,\n },\n cancellationToken,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/plan.ts — codemoot_plan tool handler\n\nimport { planInputSchema } from '@codemoot/core';\nimport type { Orchestrator } from '@codemoot/core';\n\nexport async function handlePlan(orchestrator: Orchestrator, args: unknown) {\n const input = planInputSchema.parse(args);\n const result = await orchestrator.plan(input.task, {\n maxRounds: input.maxRounds,\n stream: input.stream,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/debate.ts — codemoot_debate tool handler\n\nimport { debateInputSchema } from '@codemoot/core';\nimport type { Orchestrator } from '@codemoot/core';\n\nexport async function handleDebate(orchestrator: Orchestrator, args: unknown) {\n const input = debateInputSchema.parse(args);\n const result = await orchestrator.debateMultiRound(input.question, {\n modelAliases: input.models,\n maxRounds: input.maxRounds,\n timeout: input.timeout,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/memory.ts — codemoot_memory tool handler\n\nimport { memoryInputSchema } from '@codemoot/core';\nimport type { MemoryStore } from '@codemoot/core';\n\nexport async function handleMemory(memoryStore: MemoryStore, projectId: string, args: unknown) {\n const input = memoryInputSchema.parse(args);\n let result: unknown;\n\n switch (input.action) {\n case 'save': {\n if (!input.content) {\n throw new Error('content is required for save action');\n }\n const id = memoryStore.save({\n projectId,\n category: input.category ?? 'convention',\n content: input.content,\n sourceSessionId: null,\n importance: input.importance,\n });\n result = { id, saved: true };\n break;\n }\n case 'search': {\n if (!input.query) {\n throw new Error('query is required for search action');\n }\n const records = memoryStore.search(input.query, projectId);\n result = { records, count: records.length };\n break;\n }\n case 'get': {\n if (input.memoryId === undefined) {\n throw new Error('memoryId is required for get action');\n }\n const record = memoryStore.getById(input.memoryId);\n if (record) {\n memoryStore.recordAccess(input.memoryId);\n }\n result = record ?? { error: 'Not found' };\n break;\n }\n case 'delete': {\n if (input.memoryId === undefined) {\n throw new Error('memoryId is required for delete action');\n }\n memoryStore.delete(input.memoryId);\n result = { deleted: true, memoryId: input.memoryId };\n break;\n }\n default: {\n throw new Error(`Unknown memory action: ${String(input.action)}`);\n }\n }\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","// packages/mcp-server/src/tools/cost.ts — codemoot_cost tool handler\n\nimport { DAYS_PER_YEAR, costInputSchema } from '@codemoot/core';\nimport type { CostStore } from '@codemoot/core';\n\nexport async function handleCost(costStore: CostStore, args: unknown) {\n const input = costInputSchema.parse(args);\n let result: unknown;\n\n switch (input.scope) {\n case 'session': {\n const sessionId = input.sessionId ?? '';\n result = costStore.getSessionSummary(sessionId);\n break;\n }\n case 'daily': {\n result = costStore.getDailySummary(input.days);\n break;\n }\n case 'all': {\n result = costStore.getDailySummary(DAYS_PER_YEAR);\n break;\n }\n default: {\n throw new Error(`Unknown cost scope: ${String(input.scope)}`);\n }\n }\n\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n}\n","import { startServer } from './server.js';\n\nstartServer().catch((err) => {\n console.error('Failed to start CodeMoot MCP server:', err);\n process.exit(1);\n});\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemoot/mcp-server",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "MCP server for multi-model AI code review, planning, debate, and memory (experimental)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -36,7 +36,7 @@
36
36
  "clean": "rm -rf dist"
37
37
  },
38
38
  "dependencies": {
39
- "@codemoot/core": "workspace:*",
39
+ "@codemoot/core": "^0.2.9",
40
40
  "@modelcontextprotocol/sdk": "^1.26.0",
41
41
  "zod": "^3.24.0"
42
42
  },