@cleocode/mcp-server 0.86.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.
- package/LICENSE +21 -0
- package/README.md +306 -0
- package/dist/domains/index.d.ts +16 -0
- package/dist/domains/index.d.ts.map +1 -0
- package/dist/domains/index.js +16 -0
- package/dist/domains/index.js.map +1 -0
- package/dist/domains/lifecycle.d.ts +147 -0
- package/dist/domains/lifecycle.d.ts.map +1 -0
- package/dist/domains/lifecycle.js +452 -0
- package/dist/domains/lifecycle.js.map +1 -0
- package/dist/domains/orchestrate.d.ts +133 -0
- package/dist/domains/orchestrate.d.ts.map +1 -0
- package/dist/domains/orchestrate.js +465 -0
- package/dist/domains/orchestrate.js.map +1 -0
- package/dist/domains/release.d.ts +109 -0
- package/dist/domains/release.d.ts.map +1 -0
- package/dist/domains/release.js +400 -0
- package/dist/domains/release.js.map +1 -0
- package/dist/domains/research.d.ts +139 -0
- package/dist/domains/research.d.ts.map +1 -0
- package/dist/domains/research.js +606 -0
- package/dist/domains/research.js.map +1 -0
- package/dist/domains/session.d.ts +129 -0
- package/dist/domains/session.d.ts.map +1 -0
- package/dist/domains/session.js +433 -0
- package/dist/domains/session.js.map +1 -0
- package/dist/domains/system.d.ts +92 -0
- package/dist/domains/system.d.ts.map +1 -0
- package/dist/domains/system.js +473 -0
- package/dist/domains/system.js.map +1 -0
- package/dist/domains/tasks.d.ts +180 -0
- package/dist/domains/tasks.d.ts.map +1 -0
- package/dist/domains/tasks.js +704 -0
- package/dist/domains/tasks.js.map +1 -0
- package/dist/domains/validate.d.ts +150 -0
- package/dist/domains/validate.d.ts.map +1 -0
- package/dist/domains/validate.js +568 -0
- package/dist/domains/validate.js.map +1 -0
- package/dist/gateways/mutate.d.ts +100 -0
- package/dist/gateways/mutate.d.ts.map +1 -0
- package/dist/gateways/mutate.js +937 -0
- package/dist/gateways/mutate.js.map +1 -0
- package/dist/gateways/query.d.ts +91 -0
- package/dist/gateways/query.d.ts.map +1 -0
- package/dist/gateways/query.js +245 -0
- package/dist/gateways/query.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/audit.d.ts +118 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +311 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/background-jobs.d.ts +86 -0
- package/dist/lib/background-jobs.d.ts.map +1 -0
- package/dist/lib/background-jobs.js +183 -0
- package/dist/lib/background-jobs.js.map +1 -0
- package/dist/lib/cache.d.ts +78 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +204 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/command-builder.d.ts +52 -0
- package/dist/lib/command-builder.d.ts.map +1 -0
- package/dist/lib/command-builder.js +280 -0
- package/dist/lib/command-builder.js.map +1 -0
- package/dist/lib/config.d.ts +42 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +248 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/defaults.d.ts +115 -0
- package/dist/lib/defaults.d.ts.map +1 -0
- package/dist/lib/defaults.js +61 -0
- package/dist/lib/defaults.js.map +1 -0
- package/dist/lib/error-handler.d.ts +101 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +277 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/executor.d.ts +110 -0
- package/dist/lib/executor.d.ts.map +1 -0
- package/dist/lib/executor.js +362 -0
- package/dist/lib/executor.js.map +1 -0
- package/dist/lib/exit-codes.d.ts +190 -0
- package/dist/lib/exit-codes.d.ts.map +1 -0
- package/dist/lib/exit-codes.js +1027 -0
- package/dist/lib/exit-codes.js.map +1 -0
- package/dist/lib/formatter.d.ts +196 -0
- package/dist/lib/formatter.d.ts.map +1 -0
- package/dist/lib/formatter.js +260 -0
- package/dist/lib/formatter.js.map +1 -0
- package/dist/lib/gate-validators.d.ts +103 -0
- package/dist/lib/gate-validators.d.ts.map +1 -0
- package/dist/lib/gate-validators.js +689 -0
- package/dist/lib/gate-validators.js.map +1 -0
- package/dist/lib/manifest-parser.d.ts +61 -0
- package/dist/lib/manifest-parser.d.ts.map +1 -0
- package/dist/lib/manifest-parser.js +338 -0
- package/dist/lib/manifest-parser.js.map +1 -0
- package/dist/lib/manifest.d.ts +177 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +301 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/protocol-enforcement.d.ts +105 -0
- package/dist/lib/protocol-enforcement.d.ts.map +1 -0
- package/dist/lib/protocol-enforcement.js +331 -0
- package/dist/lib/protocol-enforcement.js.map +1 -0
- package/dist/lib/protocol-rules.d.ts +55 -0
- package/dist/lib/protocol-rules.d.ts.map +1 -0
- package/dist/lib/protocol-rules.js +760 -0
- package/dist/lib/protocol-rules.js.map +1 -0
- package/dist/lib/rate-limiter.d.ts +110 -0
- package/dist/lib/rate-limiter.d.ts.map +1 -0
- package/dist/lib/rate-limiter.js +208 -0
- package/dist/lib/rate-limiter.js.map +1 -0
- package/dist/lib/router.d.ts +126 -0
- package/dist/lib/router.d.ts.map +1 -0
- package/dist/lib/router.js +276 -0
- package/dist/lib/router.js.map +1 -0
- package/dist/lib/schema.d.ts +55 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +70 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/security.d.ts +156 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +347 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/verification-gates.d.ts +287 -0
- package/dist/lib/verification-gates.d.ts.map +1 -0
- package/dist/lib/verification-gates.js +548 -0
- package/dist/lib/verification-gates.js.map +1 -0
- package/dist/types/domain.d.ts +29 -0
- package/dist/types/domain.d.ts.map +1 -0
- package/dist/types/domain.js +7 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/error.d.ts +101 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +61 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/gateway.d.ts +78 -0
- package/dist/types/gateway.d.ts.map +1 -0
- package/dist/types/gateway.js +7 -0
- package/dist/types/gateway.js.map +1 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/operations/lifecycle.d.ts +140 -0
- package/dist/types/operations/lifecycle.d.ts.map +1 -0
- package/dist/types/operations/lifecycle.js +8 -0
- package/dist/types/operations/lifecycle.js.map +1 -0
- package/dist/types/operations/orchestrate.d.ts +140 -0
- package/dist/types/operations/orchestrate.d.ts.map +1 -0
- package/dist/types/operations/orchestrate.js +8 -0
- package/dist/types/operations/orchestrate.js.map +1 -0
- package/dist/types/operations/release.d.ts +97 -0
- package/dist/types/operations/release.d.ts.map +1 -0
- package/dist/types/operations/release.js +7 -0
- package/dist/types/operations/release.js.map +1 -0
- package/dist/types/operations/research.d.ts +122 -0
- package/dist/types/operations/research.d.ts.map +1 -0
- package/dist/types/operations/research.js +8 -0
- package/dist/types/operations/research.js.map +1 -0
- package/dist/types/operations/session.d.ts +108 -0
- package/dist/types/operations/session.d.ts.map +1 -0
- package/dist/types/operations/session.js +8 -0
- package/dist/types/operations/session.js.map +1 -0
- package/dist/types/operations/system.d.ts +147 -0
- package/dist/types/operations/system.d.ts.map +1 -0
- package/dist/types/operations/system.js +8 -0
- package/dist/types/operations/system.js.map +1 -0
- package/dist/types/operations/tasks.d.ts +186 -0
- package/dist/types/operations/tasks.d.ts.map +1 -0
- package/dist/types/operations/tasks.js +8 -0
- package/dist/types/operations/tasks.js.map +1 -0
- package/dist/types/operations/validate.d.ts +170 -0
- package/dist/types/operations/validate.d.ts.map +1 -0
- package/dist/types/operations/validate.js +8 -0
- package/dist/types/operations/validate.js.map +1 -0
- package/package.json +67 -0
- package/schemas/IMPLEMENTATION-SUMMARY.md +250 -0
- package/schemas/README.md +284 -0
- package/schemas/common/error.schema.json +54 -0
- package/schemas/common/meta.schema.json +39 -0
- package/schemas/common/pagination.schema.json +32 -0
- package/schemas/index.json +159 -0
- package/schemas/requests/lifecycle/check.schema.json +20 -0
- package/schemas/requests/lifecycle/gate.fail.schema.json +25 -0
- package/schemas/requests/lifecycle/gate.pass.schema.json +28 -0
- package/schemas/requests/lifecycle/gates.schema.json +15 -0
- package/schemas/requests/lifecycle/history.schema.json +15 -0
- package/schemas/requests/lifecycle/prerequisites.schema.json +15 -0
- package/schemas/requests/lifecycle/progress.schema.json +29 -0
- package/schemas/requests/lifecycle/reset.schema.json +25 -0
- package/schemas/requests/lifecycle/skip.schema.json +25 -0
- package/schemas/requests/lifecycle/status.schema.json +23 -0
- package/schemas/requests/orchestrate/analyze.schema.json +15 -0
- package/schemas/requests/orchestrate/context.schema.json +13 -0
- package/schemas/requests/orchestrate/next.schema.json +15 -0
- package/schemas/requests/orchestrate/parallel.end.schema.json +20 -0
- package/schemas/requests/orchestrate/parallel.start.schema.json +20 -0
- package/schemas/requests/orchestrate/ready.schema.json +15 -0
- package/schemas/requests/orchestrate/skill.list.schema.json +13 -0
- package/schemas/requests/orchestrate/spawn.schema.json +25 -0
- package/schemas/requests/orchestrate/startup.schema.json +15 -0
- package/schemas/requests/orchestrate/status.schema.json +15 -0
- package/schemas/requests/orchestrate/validate.schema.json +15 -0
- package/schemas/requests/orchestrate/waves.schema.json +15 -0
- package/schemas/requests/release/changelog.schema.json +23 -0
- package/schemas/requests/release/commit.schema.json +22 -0
- package/schemas/requests/release/gates.run.schema.json +17 -0
- package/schemas/requests/release/prepare.schema.json +20 -0
- package/schemas/requests/release/push.schema.json +20 -0
- package/schemas/requests/release/rollback.schema.json +20 -0
- package/schemas/requests/release/tag.schema.json +19 -0
- package/schemas/requests/research/inject.schema.json +24 -0
- package/schemas/requests/research/link.schema.json +25 -0
- package/schemas/requests/research/list.schema.json +19 -0
- package/schemas/requests/research/manifest.append.schema.json +20 -0
- package/schemas/requests/research/manifest.archive.schema.json +19 -0
- package/schemas/requests/research/manifest.read.schema.json +21 -0
- package/schemas/requests/research/pending.schema.json +14 -0
- package/schemas/requests/research/query.schema.json +21 -0
- package/schemas/requests/research/show.schema.json +14 -0
- package/schemas/requests/research/stats.schema.json +14 -0
- package/schemas/requests/session/end.schema.json +13 -0
- package/schemas/requests/session/focus.clear.schema.json +7 -0
- package/schemas/requests/session/focus.get.schema.json +7 -0
- package/schemas/requests/session/focus.set.schema.json +15 -0
- package/schemas/requests/session/gc.schema.json +14 -0
- package/schemas/requests/session/history.schema.json +16 -0
- package/schemas/requests/session/list.schema.json +13 -0
- package/schemas/requests/session/resume.schema.json +14 -0
- package/schemas/requests/session/show.schema.json +14 -0
- package/schemas/requests/session/start.schema.json +23 -0
- package/schemas/requests/session/status.schema.json +7 -0
- package/schemas/requests/session/suspend.schema.json +13 -0
- package/schemas/requests/system/backup.schema.json +19 -0
- package/schemas/requests/system/cleanup.schema.json +20 -0
- package/schemas/requests/system/config.get.schema.json +14 -0
- package/schemas/requests/system/config.set.schema.json +24 -0
- package/schemas/requests/system/context.schema.json +7 -0
- package/schemas/requests/system/doctor.schema.json +7 -0
- package/schemas/requests/system/init.schema.json +18 -0
- package/schemas/requests/system/migrate.schema.json +19 -0
- package/schemas/requests/system/restore.schema.json +14 -0
- package/schemas/requests/system/stats.schema.json +7 -0
- package/schemas/requests/system/sync.schema.json +15 -0
- package/schemas/requests/system/version.schema.json +7 -0
- package/schemas/requests/tasks/analyze.schema.json +14 -0
- package/schemas/requests/tasks/archive.schema.json +19 -0
- package/schemas/requests/tasks/blockers.schema.json +15 -0
- package/schemas/requests/tasks/complete.schema.json +24 -0
- package/schemas/requests/tasks/create.schema.json +48 -0
- package/schemas/requests/tasks/delete.schema.json +20 -0
- package/schemas/requests/tasks/deps.schema.json +21 -0
- package/schemas/requests/tasks/exists.schema.json +15 -0
- package/schemas/requests/tasks/find.schema.json +22 -0
- package/schemas/requests/tasks/get.schema.json +15 -0
- package/schemas/requests/tasks/list.schema.json +26 -0
- package/schemas/requests/tasks/next.schema.json +21 -0
- package/schemas/requests/tasks/promote.schema.json +15 -0
- package/schemas/requests/tasks/reopen.schema.json +15 -0
- package/schemas/requests/tasks/reorder.schema.json +20 -0
- package/schemas/requests/tasks/reparent.schema.json +20 -0
- package/schemas/requests/tasks/tree.schema.json +21 -0
- package/schemas/requests/tasks/unarchive.schema.json +15 -0
- package/schemas/requests/tasks/update.schema.json +41 -0
- package/schemas/requests/validate/compliance.record.schema.json +20 -0
- package/schemas/requests/validate/compliance.summary.schema.json +18 -0
- package/schemas/requests/validate/compliance.violations.schema.json +19 -0
- package/schemas/requests/validate/manifest.schema.json +23 -0
- package/schemas/requests/validate/output.schema.json +19 -0
- package/schemas/requests/validate/protocol.schema.json +20 -0
- package/schemas/requests/validate/schema.schema.json +19 -0
- package/schemas/requests/validate/task.schema.json +21 -0
- package/schemas/requests/validate/test.coverage.schema.json +14 -0
- package/schemas/requests/validate/test.run.schema.json +22 -0
- package/schemas/requests/validate/test.status.schema.json +14 -0
- package/schemas/responses/common-error.schema.json +20 -0
- package/schemas/responses/common-success.schema.json +21 -0
- package/schemas/responses/lifecycle/check.schema.json +18 -0
- package/schemas/responses/lifecycle/gate.fail.schema.json +18 -0
- package/schemas/responses/lifecycle/gate.pass.schema.json +18 -0
- package/schemas/responses/lifecycle/gates.schema.json +18 -0
- package/schemas/responses/lifecycle/history.schema.json +18 -0
- package/schemas/responses/lifecycle/prerequisites.schema.json +18 -0
- package/schemas/responses/lifecycle/progress.schema.json +18 -0
- package/schemas/responses/lifecycle/reset.schema.json +18 -0
- package/schemas/responses/lifecycle/skip.schema.json +18 -0
- package/schemas/responses/lifecycle/status.schema.json +18 -0
- package/schemas/responses/orchestrate/analyze.schema.json +18 -0
- package/schemas/responses/orchestrate/context.schema.json +18 -0
- package/schemas/responses/orchestrate/next.schema.json +18 -0
- package/schemas/responses/orchestrate/parallel.end.schema.json +18 -0
- package/schemas/responses/orchestrate/parallel.start.schema.json +18 -0
- package/schemas/responses/orchestrate/ready.schema.json +18 -0
- package/schemas/responses/orchestrate/skill.list.schema.json +18 -0
- package/schemas/responses/orchestrate/spawn.schema.json +18 -0
- package/schemas/responses/orchestrate/startup.schema.json +18 -0
- package/schemas/responses/orchestrate/status.schema.json +18 -0
- package/schemas/responses/orchestrate/validate.schema.json +18 -0
- package/schemas/responses/orchestrate/waves.schema.json +18 -0
- package/schemas/responses/release/changelog.schema.json +18 -0
- package/schemas/responses/release/commit.schema.json +18 -0
- package/schemas/responses/release/gates.run.schema.json +18 -0
- package/schemas/responses/release/prepare.schema.json +18 -0
- package/schemas/responses/release/push.schema.json +18 -0
- package/schemas/responses/release/rollback.schema.json +18 -0
- package/schemas/responses/release/tag.schema.json +18 -0
- package/schemas/responses/research/inject.schema.json +18 -0
- package/schemas/responses/research/link.schema.json +18 -0
- package/schemas/responses/research/list.schema.json +18 -0
- package/schemas/responses/research/manifest.append.schema.json +18 -0
- package/schemas/responses/research/manifest.archive.schema.json +18 -0
- package/schemas/responses/research/manifest.read.schema.json +18 -0
- package/schemas/responses/research/pending.schema.json +18 -0
- package/schemas/responses/research/query.schema.json +18 -0
- package/schemas/responses/research/show.schema.json +18 -0
- package/schemas/responses/research/stats.schema.json +18 -0
- package/schemas/responses/session/end.schema.json +18 -0
- package/schemas/responses/session/focus.clear.schema.json +18 -0
- package/schemas/responses/session/focus.get.schema.json +18 -0
- package/schemas/responses/session/focus.set.schema.json +18 -0
- package/schemas/responses/session/gc.schema.json +18 -0
- package/schemas/responses/session/history.schema.json +18 -0
- package/schemas/responses/session/list.schema.json +18 -0
- package/schemas/responses/session/resume.schema.json +18 -0
- package/schemas/responses/session/show.schema.json +18 -0
- package/schemas/responses/session/start.schema.json +18 -0
- package/schemas/responses/session/status.schema.json +18 -0
- package/schemas/responses/session/suspend.schema.json +18 -0
- package/schemas/responses/system/backup.schema.json +18 -0
- package/schemas/responses/system/cleanup.schema.json +18 -0
- package/schemas/responses/system/config.get.schema.json +18 -0
- package/schemas/responses/system/config.set.schema.json +18 -0
- package/schemas/responses/system/context.schema.json +18 -0
- package/schemas/responses/system/doctor.schema.json +18 -0
- package/schemas/responses/system/init.schema.json +18 -0
- package/schemas/responses/system/migrate.schema.json +18 -0
- package/schemas/responses/system/restore.schema.json +18 -0
- package/schemas/responses/system/stats.schema.json +18 -0
- package/schemas/responses/system/sync.schema.json +18 -0
- package/schemas/responses/system/version.schema.json +18 -0
- package/schemas/responses/tasks/analyze.schema.json +18 -0
- package/schemas/responses/tasks/archive.schema.json +18 -0
- package/schemas/responses/tasks/blockers.schema.json +18 -0
- package/schemas/responses/tasks/complete.schema.json +18 -0
- package/schemas/responses/tasks/create.schema.json +18 -0
- package/schemas/responses/tasks/delete.schema.json +18 -0
- package/schemas/responses/tasks/deps.schema.json +18 -0
- package/schemas/responses/tasks/exists.schema.json +18 -0
- package/schemas/responses/tasks/find.schema.json +18 -0
- package/schemas/responses/tasks/get.schema.json +87 -0
- package/schemas/responses/tasks/list.schema.json +18 -0
- package/schemas/responses/tasks/next.schema.json +18 -0
- package/schemas/responses/tasks/promote.schema.json +18 -0
- package/schemas/responses/tasks/reopen.schema.json +18 -0
- package/schemas/responses/tasks/reorder.schema.json +18 -0
- package/schemas/responses/tasks/reparent.schema.json +18 -0
- package/schemas/responses/tasks/tree.schema.json +18 -0
- package/schemas/responses/tasks/unarchive.schema.json +18 -0
- package/schemas/responses/tasks/update.schema.json +18 -0
- package/schemas/responses/validate/compliance.record.schema.json +18 -0
- package/schemas/responses/validate/compliance.summary.schema.json +18 -0
- package/schemas/responses/validate/compliance.violations.schema.json +18 -0
- package/schemas/responses/validate/manifest.schema.json +18 -0
- package/schemas/responses/validate/output.schema.json +18 -0
- package/schemas/responses/validate/protocol.schema.json +18 -0
- package/schemas/responses/validate/schema.schema.json +18 -0
- package/schemas/responses/validate/task.schema.json +18 -0
- package/schemas/responses/validate/test.coverage.schema.json +18 -0
- package/schemas/responses/validate/test.run.schema.json +18 -0
- package/schemas/responses/validate/test.status.schema.json +18 -0
- package/server.json +53 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLEO MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Exposes CLEO's 65 CLI commands and 280+ library functions through
|
|
6
|
+
* two gateway tools using CQRS pattern:
|
|
7
|
+
* - cleo_query: 45 read operations (never modifies state)
|
|
8
|
+
* - cleo_mutate: 53 write operations (validated, logged, atomic)
|
|
9
|
+
*
|
|
10
|
+
* Wires together:
|
|
11
|
+
* 1. Configuration loader
|
|
12
|
+
* 2. CLI executor wrapper
|
|
13
|
+
* 3. Domain router
|
|
14
|
+
* 4. Gateway tools (query + mutate)
|
|
15
|
+
* 5. MCP SDK server with stdio transport
|
|
16
|
+
*
|
|
17
|
+
* @task T2926
|
|
18
|
+
* @see MCP-SERVER-SPECIFICATION.md for complete API documentation
|
|
19
|
+
*/
|
|
20
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
21
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
22
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
23
|
+
import { loadConfig } from './lib/config.js';
|
|
24
|
+
import { DomainRouter } from './lib/router.js';
|
|
25
|
+
import { createExecutor } from './lib/executor.js';
|
|
26
|
+
import { registerQueryTool } from './gateways/query.js';
|
|
27
|
+
import { registerMutateTool } from './gateways/mutate.js';
|
|
28
|
+
import { QueryCache } from './lib/cache.js';
|
|
29
|
+
import { BackgroundJobManager } from './lib/background-jobs.js';
|
|
30
|
+
let serverState = null;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize and start MCP server
|
|
33
|
+
*/
|
|
34
|
+
async function main() {
|
|
35
|
+
try {
|
|
36
|
+
// Load configuration
|
|
37
|
+
console.error('[CLEO MCP] Loading configuration...');
|
|
38
|
+
const config = loadConfig();
|
|
39
|
+
// Log startup info (to stderr, not stdout which is used by MCP)
|
|
40
|
+
console.error('[CLEO MCP] Starting server...');
|
|
41
|
+
console.error(`[CLEO MCP] CLI path: ${config.cliPath}`);
|
|
42
|
+
console.error(`[CLEO MCP] Timeout: ${config.timeout}ms`);
|
|
43
|
+
console.error(`[CLEO MCP] Log level: ${config.logLevel}`);
|
|
44
|
+
console.error(`[CLEO MCP] Metrics: ${config.enableMetrics ? 'enabled' : 'disabled'}`);
|
|
45
|
+
console.error(`[CLEO MCP] Max retries: ${config.maxRetries}`);
|
|
46
|
+
// Create CLI executor
|
|
47
|
+
console.error('[CLEO MCP] Creating CLI executor...');
|
|
48
|
+
const executor = createExecutor(config.cliPath, config.timeout, config.maxRetries);
|
|
49
|
+
// Test CLI connection
|
|
50
|
+
console.error('[CLEO MCP] Testing CLI connection...');
|
|
51
|
+
const connected = await executor.testConnection();
|
|
52
|
+
if (!connected) {
|
|
53
|
+
throw new Error(`Failed to connect to CLEO CLI at ${config.cliPath}`);
|
|
54
|
+
}
|
|
55
|
+
console.error('[CLEO MCP] CLI connection successful');
|
|
56
|
+
// Get CLI version
|
|
57
|
+
const cliVersion = await executor.getVersion();
|
|
58
|
+
console.error(`[CLEO MCP] CLI version: ${cliVersion}`);
|
|
59
|
+
// Initialize domain router with executor and rate limiting config
|
|
60
|
+
console.error('[CLEO MCP] Initializing domain router...');
|
|
61
|
+
const router = new DomainRouter(executor, true, config.rateLimiting);
|
|
62
|
+
console.error('[CLEO MCP] Domain router initialized');
|
|
63
|
+
console.error(`[CLEO MCP] Rate limiting: ${config.rateLimiting.enabled ? 'enabled' : 'disabled'} (query: ${config.rateLimiting.query.maxRequests}/min, mutate: ${config.rateLimiting.mutate.maxRequests}/min, spawn: ${config.rateLimiting.spawn.maxRequests}/min)`);
|
|
64
|
+
console.error(`[CLEO MCP] Registered domains: ${router.getDomains().join(', ')}`);
|
|
65
|
+
// Initialize background job manager
|
|
66
|
+
const jobManager = new BackgroundJobManager({ maxJobs: 10, retentionMs: 3600000 });
|
|
67
|
+
console.error('[CLEO MCP] Background job manager initialized (max: 10, retention: 1h)');
|
|
68
|
+
// Wire job manager into system handler via router
|
|
69
|
+
const systemOps = router.getDomainOperations('system');
|
|
70
|
+
if (systemOps) {
|
|
71
|
+
// Access the system handler through the router to inject job manager
|
|
72
|
+
// The SystemHandler.setJobManager method allows post-construction injection
|
|
73
|
+
const systemHandler = router.handlers.get('system');
|
|
74
|
+
if (systemHandler && typeof systemHandler.setJobManager === 'function') {
|
|
75
|
+
systemHandler.setJobManager(jobManager);
|
|
76
|
+
console.error('[CLEO MCP] Background job manager wired to system handler');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Initialize query cache
|
|
80
|
+
const cache = new QueryCache(config.queryCacheTtl, config.queryCache);
|
|
81
|
+
console.error(`[CLEO MCP] Query cache: ${config.queryCache ? 'enabled' : 'disabled'} (TTL: ${config.queryCacheTtl}ms)`);
|
|
82
|
+
// Create MCP server
|
|
83
|
+
const server = new Server({
|
|
84
|
+
name: 'cleo-server',
|
|
85
|
+
version: '1.0.0',
|
|
86
|
+
}, {
|
|
87
|
+
capabilities: {
|
|
88
|
+
tools: {},
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
// Register tools (ListTools handler)
|
|
92
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
93
|
+
return {
|
|
94
|
+
tools: [
|
|
95
|
+
registerQueryTool(),
|
|
96
|
+
registerMutateTool(),
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
// Handle tool calls (CallTool handler)
|
|
101
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
102
|
+
const { name, arguments: args } = request.params;
|
|
103
|
+
console.error(`[CLEO MCP] Tool call: ${name}`);
|
|
104
|
+
if (config.logLevel === 'debug') {
|
|
105
|
+
console.error(`[CLEO MCP] Arguments:`, JSON.stringify(args, null, 2));
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
// Validate gateway name
|
|
109
|
+
if (name !== 'cleo_query' && name !== 'cleo_mutate') {
|
|
110
|
+
return {
|
|
111
|
+
content: [
|
|
112
|
+
{
|
|
113
|
+
type: 'text',
|
|
114
|
+
text: JSON.stringify({
|
|
115
|
+
_meta: {
|
|
116
|
+
gateway: name,
|
|
117
|
+
version: '1.0.0',
|
|
118
|
+
timestamp: new Date().toISOString(),
|
|
119
|
+
},
|
|
120
|
+
success: false,
|
|
121
|
+
error: {
|
|
122
|
+
code: 'E_INVALID_GATEWAY',
|
|
123
|
+
exitCode: 2,
|
|
124
|
+
message: `Unknown gateway: ${name}. Use 'cleo_query' or 'cleo_mutate'.`,
|
|
125
|
+
},
|
|
126
|
+
}),
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Validate required parameters
|
|
132
|
+
if (!args?.domain || !args?.operation) {
|
|
133
|
+
return {
|
|
134
|
+
content: [
|
|
135
|
+
{
|
|
136
|
+
type: 'text',
|
|
137
|
+
text: JSON.stringify({
|
|
138
|
+
_meta: {
|
|
139
|
+
gateway: name,
|
|
140
|
+
version: '1.0.0',
|
|
141
|
+
timestamp: new Date().toISOString(),
|
|
142
|
+
},
|
|
143
|
+
success: false,
|
|
144
|
+
error: {
|
|
145
|
+
code: 'E_INVALID_INPUT',
|
|
146
|
+
exitCode: 2,
|
|
147
|
+
message: 'Missing required parameters: domain and operation',
|
|
148
|
+
},
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Build domain request
|
|
155
|
+
const domainRequest = {
|
|
156
|
+
gateway: name,
|
|
157
|
+
domain: args.domain,
|
|
158
|
+
operation: args.operation,
|
|
159
|
+
params: args.params,
|
|
160
|
+
};
|
|
161
|
+
// Check cache bypass flag
|
|
162
|
+
const bypassCache = !!args.params?.bypassCache;
|
|
163
|
+
// For query operations, check cache first
|
|
164
|
+
if (name === 'cleo_query' && !bypassCache) {
|
|
165
|
+
const domain = args.domain;
|
|
166
|
+
const operation = args.operation;
|
|
167
|
+
const params = args.params;
|
|
168
|
+
const cached = cache.get(domain, operation, params);
|
|
169
|
+
if (cached !== undefined) {
|
|
170
|
+
if (config.logLevel === 'debug') {
|
|
171
|
+
console.error(`[CLEO MCP] Cache hit: ${domain}.${operation}`);
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
content: [
|
|
175
|
+
{
|
|
176
|
+
type: 'text',
|
|
177
|
+
text: JSON.stringify(cached, null, 2),
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Route to domain handler
|
|
184
|
+
const result = await router.routeOperation(domainRequest);
|
|
185
|
+
if (config.logLevel === 'debug') {
|
|
186
|
+
console.error(`[CLEO MCP] Result:`, JSON.stringify(result, null, 2));
|
|
187
|
+
}
|
|
188
|
+
// Cache successful query results
|
|
189
|
+
if (name === 'cleo_query' && result.success && !bypassCache) {
|
|
190
|
+
cache.set(args.domain, args.operation, args.params, result);
|
|
191
|
+
}
|
|
192
|
+
// Invalidate domain cache on mutate operations
|
|
193
|
+
if (name === 'cleo_mutate') {
|
|
194
|
+
const invalidated = cache.invalidateDomain(args.domain);
|
|
195
|
+
if (invalidated > 0 && config.logLevel === 'debug') {
|
|
196
|
+
console.error(`[CLEO MCP] Cache invalidated ${invalidated} entries for domain: ${args.domain}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
type: 'text',
|
|
203
|
+
text: JSON.stringify(result, null, 2),
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error(`[CLEO MCP] Error:`, error);
|
|
210
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
211
|
+
return {
|
|
212
|
+
content: [
|
|
213
|
+
{
|
|
214
|
+
type: 'text',
|
|
215
|
+
text: JSON.stringify({
|
|
216
|
+
_meta: {
|
|
217
|
+
gateway: name,
|
|
218
|
+
version: '1.0.0',
|
|
219
|
+
timestamp: new Date().toISOString(),
|
|
220
|
+
},
|
|
221
|
+
success: false,
|
|
222
|
+
error: {
|
|
223
|
+
code: 'E_INTERNAL_ERROR',
|
|
224
|
+
message: errorMessage,
|
|
225
|
+
},
|
|
226
|
+
}, null, 2),
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
isError: true,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
// Store server state for cleanup
|
|
234
|
+
serverState = {
|
|
235
|
+
router,
|
|
236
|
+
server,
|
|
237
|
+
cache,
|
|
238
|
+
jobManager,
|
|
239
|
+
};
|
|
240
|
+
// Create transport and connect
|
|
241
|
+
console.error('[CLEO MCP] Connecting to stdio transport...');
|
|
242
|
+
const transport = new StdioServerTransport();
|
|
243
|
+
await server.connect(transport);
|
|
244
|
+
console.error('[CLEO MCP] Server started successfully');
|
|
245
|
+
console.error('[CLEO MCP] Ready for requests');
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error('[CLEO MCP] Failed to start server:', error);
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Graceful shutdown handler
|
|
254
|
+
*/
|
|
255
|
+
async function shutdown(signal) {
|
|
256
|
+
console.error(`[CLEO MCP] Received ${signal}, shutting down...`);
|
|
257
|
+
if (serverState) {
|
|
258
|
+
try {
|
|
259
|
+
// Destroy background job manager
|
|
260
|
+
serverState.jobManager.destroy();
|
|
261
|
+
// Destroy cache
|
|
262
|
+
serverState.cache.destroy();
|
|
263
|
+
// Close server
|
|
264
|
+
await serverState.server.close();
|
|
265
|
+
console.error('[CLEO MCP] Server closed');
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error('[CLEO MCP] Error during shutdown:', error);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
process.exit(0);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Error handler for uncaught exceptions
|
|
275
|
+
*/
|
|
276
|
+
function handleUncaughtError(error, type) {
|
|
277
|
+
console.error(`[CLEO MCP] ${type}:`, error);
|
|
278
|
+
// Attempt graceful shutdown
|
|
279
|
+
if (serverState) {
|
|
280
|
+
shutdown('ERROR').catch(() => {
|
|
281
|
+
process.exit(1);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Register signal handlers for graceful shutdown
|
|
289
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
290
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
291
|
+
// Register error handlers
|
|
292
|
+
process.on('uncaughtException', (error) => handleUncaughtError(error, 'Uncaught Exception'));
|
|
293
|
+
process.on('unhandledRejection', (reason) => handleUncaughtError(reason instanceof Error ? reason : new Error(String(reason)), 'Unhandled Rejection'));
|
|
294
|
+
// Start server
|
|
295
|
+
main().catch((error) => {
|
|
296
|
+
console.error('[CLEO MCP] Fatal error:', error);
|
|
297
|
+
process.exit(1);
|
|
298
|
+
});
|
|
299
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Trail for MCP Server Mutations
|
|
3
|
+
*
|
|
4
|
+
* Logs all write operations to .cleo/audit-log.json for compliance
|
|
5
|
+
* and debugging purposes.
|
|
6
|
+
*
|
|
7
|
+
* @task T2920
|
|
8
|
+
* @task T2929
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Audit entry interface
|
|
12
|
+
*/
|
|
13
|
+
export interface AuditEntry {
|
|
14
|
+
timestamp: string;
|
|
15
|
+
sessionId: string | null;
|
|
16
|
+
domain: string;
|
|
17
|
+
operation: string;
|
|
18
|
+
params: Record<string, unknown>;
|
|
19
|
+
result: {
|
|
20
|
+
success: boolean;
|
|
21
|
+
exitCode: number;
|
|
22
|
+
duration: number;
|
|
23
|
+
};
|
|
24
|
+
metadata: {
|
|
25
|
+
taskId?: string;
|
|
26
|
+
userId?: string;
|
|
27
|
+
source: "mcp";
|
|
28
|
+
gateway?: 'cleo_mutate' | 'cleo_query';
|
|
29
|
+
};
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Log mutation to audit trail
|
|
34
|
+
*
|
|
35
|
+
* Appends a single-line JSON entry to .cleo/audit-log.json
|
|
36
|
+
* Non-blocking - errors are logged but not thrown
|
|
37
|
+
* Automatically rotates log if size exceeds limit
|
|
38
|
+
*
|
|
39
|
+
* @param entry Audit entry to log
|
|
40
|
+
*/
|
|
41
|
+
export declare function logMutation(entry: AuditEntry): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Log error to audit trail
|
|
44
|
+
*
|
|
45
|
+
* Convenience function for logging errors with full context
|
|
46
|
+
*
|
|
47
|
+
* @param domain Domain where error occurred
|
|
48
|
+
* @param operation Operation that failed
|
|
49
|
+
* @param error Error object or message
|
|
50
|
+
* @param params Operation parameters
|
|
51
|
+
* @param exitCode Exit code (default: 1)
|
|
52
|
+
*/
|
|
53
|
+
export declare function logError(domain: string, operation: string, error: Error | string, params?: Record<string, unknown>, exitCode?: number): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Read audit log entries
|
|
56
|
+
*
|
|
57
|
+
* @param options Filter options
|
|
58
|
+
* @returns Array of audit entries
|
|
59
|
+
*/
|
|
60
|
+
export declare function readAuditLog(options?: {
|
|
61
|
+
since?: string;
|
|
62
|
+
domain?: string;
|
|
63
|
+
operation?: string;
|
|
64
|
+
success?: boolean;
|
|
65
|
+
limit?: number;
|
|
66
|
+
}): Promise<AuditEntry[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Get audit statistics
|
|
69
|
+
*
|
|
70
|
+
* @returns Audit statistics
|
|
71
|
+
*/
|
|
72
|
+
export declare function getAuditStats(): Promise<{
|
|
73
|
+
totalEntries: number;
|
|
74
|
+
successCount: number;
|
|
75
|
+
failureCount: number;
|
|
76
|
+
byDomain: Record<string, number>;
|
|
77
|
+
byOperation: Record<string, number>;
|
|
78
|
+
avgDuration: number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Clear audit log (use with caution)
|
|
82
|
+
*
|
|
83
|
+
* @returns Number of entries cleared
|
|
84
|
+
*/
|
|
85
|
+
export declare function clearAuditLog(): Promise<number>;
|
|
86
|
+
/**
|
|
87
|
+
* Manually rotate audit log
|
|
88
|
+
*
|
|
89
|
+
* Forces rotation regardless of size
|
|
90
|
+
*
|
|
91
|
+
* @returns Path to rotated log file
|
|
92
|
+
*/
|
|
93
|
+
export declare function rotateLog(): Promise<string | null>;
|
|
94
|
+
/**
|
|
95
|
+
* Archive old audit entries
|
|
96
|
+
*
|
|
97
|
+
* Moves entries older than specified date to archive file
|
|
98
|
+
*
|
|
99
|
+
* @param beforeDate ISO date string
|
|
100
|
+
* @returns Number of entries archived
|
|
101
|
+
*/
|
|
102
|
+
export declare function archiveAuditLog(beforeDate: string): Promise<number>;
|
|
103
|
+
/**
|
|
104
|
+
* Query audit log entries with filters
|
|
105
|
+
*
|
|
106
|
+
* @param options Query options
|
|
107
|
+
* @returns Filtered audit entries
|
|
108
|
+
*/
|
|
109
|
+
export declare function queryAudit(options?: {
|
|
110
|
+
since?: string;
|
|
111
|
+
domain?: string;
|
|
112
|
+
operation?: string;
|
|
113
|
+
success?: boolean;
|
|
114
|
+
taskId?: string;
|
|
115
|
+
sessionId?: string;
|
|
116
|
+
limit?: number;
|
|
117
|
+
}): Promise<AuditEntry[]>;
|
|
118
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/lib/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;KACxC,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuCD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,GAAG,MAAM,EACrB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA6CxB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CA0BD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAerD;AAkCD;;;;;;GAMG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxD;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BzE;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAexB"}
|