@critical-path/mcp 0.1.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/README.md +180 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +75 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +160 -0
- package/dist/index.test.js.map +1 -0
- package/dist/server/index.d.ts +13 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +212 -0
- package/dist/server/index.js.map +1 -0
- package/dist/tools/definitions.d.ts +86 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +360 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/web/index.d.ts +42 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +117 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +53 -0
- package/src/bin/cli.ts +78 -0
- package/src/index.test.ts +211 -0
- package/src/index.ts +3 -0
- package/src/server/index.ts +255 -0
- package/src/tools/definitions.ts +423 -0
- package/src/web/index.ts +162 -0
- package/tsconfig.json +8 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CriticalPathClient } from '@critical-path/client';
|
|
2
|
+
export interface WebMcpToolRegistration {
|
|
3
|
+
name: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: Record<string, unknown>;
|
|
7
|
+
annotations?: {
|
|
8
|
+
readOnlyHint?: boolean;
|
|
9
|
+
};
|
|
10
|
+
execute: (input: any) => Promise<any>;
|
|
11
|
+
}
|
|
12
|
+
export interface ModelContextInterface {
|
|
13
|
+
registerTool: (tool: WebMcpToolRegistration, options?: {
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}) => Promise<void> | void;
|
|
16
|
+
unregisterTool?: (toolName: string) => void;
|
|
17
|
+
getTools?: () => Promise<WebMcpToolRegistration[]> | WebMcpToolRegistration[];
|
|
18
|
+
executeTool?: (name: string, input?: any) => Promise<any>;
|
|
19
|
+
}
|
|
20
|
+
export interface RegisterWebMcpOptions {
|
|
21
|
+
client: CriticalPathClient;
|
|
22
|
+
projectId?: string;
|
|
23
|
+
tools?: string[];
|
|
24
|
+
signal?: AbortSignal;
|
|
25
|
+
document?: any;
|
|
26
|
+
navigator?: any;
|
|
27
|
+
window?: any;
|
|
28
|
+
onToolExecuted?: (toolName: string, input: any, result: any) => void;
|
|
29
|
+
}
|
|
30
|
+
export interface WebMcpRegistryHandle {
|
|
31
|
+
unregister: () => void;
|
|
32
|
+
getRegisteredTools: () => WebMcpToolRegistration[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Polyfill/shim a minimal ModelContextInterface onto the document/window if not natively present.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ensureModelContextShim(doc?: any): ModelContextInterface | null;
|
|
38
|
+
/**
|
|
39
|
+
* Registers Critical Path tools with the browser's WebMCP modelContext.
|
|
40
|
+
*/
|
|
41
|
+
export declare function registerWebMcpTools(options: RegisterWebMcpOptions): WebMcpRegistryHandle;
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzG,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC;IAC9E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,kBAAkB,EAAE,MAAM,sBAAsB,EAAE,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,GAAuD,GAAG,qBAAqB,GAAG,IAAI,CAkCjI;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAkFxF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ALL_TOOLS } from '../tools/definitions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Polyfill/shim a minimal ModelContextInterface onto the document/window if not natively present.
|
|
4
|
+
*/
|
|
5
|
+
export function ensureModelContextShim(doc = typeof document !== 'undefined' ? document : null) {
|
|
6
|
+
if (!doc)
|
|
7
|
+
return null;
|
|
8
|
+
if (!doc.modelContext) {
|
|
9
|
+
const registeredTools = new Map();
|
|
10
|
+
const shim = {
|
|
11
|
+
registerTool(tool, options) {
|
|
12
|
+
registeredTools.set(tool.name, tool);
|
|
13
|
+
if (options?.signal) {
|
|
14
|
+
options.signal.addEventListener('abort', () => {
|
|
15
|
+
registeredTools.delete(tool.name);
|
|
16
|
+
}, { once: true });
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
unregisterTool(toolName) {
|
|
20
|
+
registeredTools.delete(toolName);
|
|
21
|
+
},
|
|
22
|
+
async getTools() {
|
|
23
|
+
return Array.from(registeredTools.values());
|
|
24
|
+
},
|
|
25
|
+
async executeTool(name, input) {
|
|
26
|
+
const tool = registeredTools.get(name);
|
|
27
|
+
if (!tool) {
|
|
28
|
+
throw new Error(`Tool "${name}" is not registered on modelContext.`);
|
|
29
|
+
}
|
|
30
|
+
return tool.execute(input || {});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
doc.modelContext = shim;
|
|
34
|
+
}
|
|
35
|
+
return doc.modelContext;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Registers Critical Path tools with the browser's WebMCP modelContext.
|
|
39
|
+
*/
|
|
40
|
+
export function registerWebMcpTools(options) {
|
|
41
|
+
const doc = options.document ?? (typeof document !== 'undefined' ? document : null);
|
|
42
|
+
const nav = options.navigator ?? (typeof navigator !== 'undefined' ? navigator : null);
|
|
43
|
+
const win = options.window ?? (typeof window !== 'undefined' ? window : null);
|
|
44
|
+
// Target modelContext: document.modelContext (W3C standard draft) -> navigator.modelContext -> document shim
|
|
45
|
+
let modelContext;
|
|
46
|
+
if (doc?.modelContext) {
|
|
47
|
+
modelContext = doc.modelContext;
|
|
48
|
+
}
|
|
49
|
+
else if (nav?.modelContext) {
|
|
50
|
+
modelContext = nav.modelContext;
|
|
51
|
+
}
|
|
52
|
+
else if (doc) {
|
|
53
|
+
modelContext = ensureModelContextShim(doc) ?? undefined;
|
|
54
|
+
}
|
|
55
|
+
const selectedTools = options.tools
|
|
56
|
+
? ALL_TOOLS.filter((t) => options.tools.includes(t.name))
|
|
57
|
+
: ALL_TOOLS;
|
|
58
|
+
const registeredTools = [];
|
|
59
|
+
const abortController = new AbortController();
|
|
60
|
+
// Combine caller signal with our internal abort controller
|
|
61
|
+
if (options.signal) {
|
|
62
|
+
options.signal.addEventListener('abort', () => abortController.abort(), { once: true });
|
|
63
|
+
}
|
|
64
|
+
for (const toolDef of selectedTools) {
|
|
65
|
+
const webTool = {
|
|
66
|
+
name: toolDef.name,
|
|
67
|
+
title: toolDef.title,
|
|
68
|
+
description: toolDef.description,
|
|
69
|
+
inputSchema: toolDef.inputSchema,
|
|
70
|
+
annotations: toolDef.annotations,
|
|
71
|
+
execute: async (input) => {
|
|
72
|
+
const ambientContext = options.projectId ? { projectId: options.projectId } : undefined;
|
|
73
|
+
const result = await toolDef.execute(input, options.client, ambientContext);
|
|
74
|
+
options.onToolExecuted?.(toolDef.name, input, result);
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
registeredTools.push(webTool);
|
|
79
|
+
if (modelContext?.registerTool) {
|
|
80
|
+
try {
|
|
81
|
+
modelContext.registerTool(webTool, { signal: abortController.signal });
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.warn(`[Critical Path WebMCP] Failed to register tool "${webTool.name}":`, err);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Also publish to window fallback registry for browser extensions & DevTools
|
|
89
|
+
if (win) {
|
|
90
|
+
win.__CRITICAL_PATH_WEBMCP__ = {
|
|
91
|
+
projectId: options.projectId,
|
|
92
|
+
tools: registeredTools,
|
|
93
|
+
execute: async (name, input) => {
|
|
94
|
+
const tool = registeredTools.find((t) => t.name === name);
|
|
95
|
+
if (!tool)
|
|
96
|
+
throw new Error(`WebMCP tool "${name}" not found in Critical Path registry.`);
|
|
97
|
+
return tool.execute(input);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const unregister = () => {
|
|
102
|
+
abortController.abort();
|
|
103
|
+
if (modelContext?.unregisterTool) {
|
|
104
|
+
for (const t of registeredTools) {
|
|
105
|
+
modelContext.unregisterTool(t.name);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (win && win.__CRITICAL_PATH_WEBMCP__?.tools === registeredTools) {
|
|
109
|
+
delete win.__CRITICAL_PATH_WEBMCP__;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
unregister,
|
|
114
|
+
getRegisteredTools: () => registeredTools
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@critical-path/mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Standard Model Context Protocol (MCP) server and client-side WebMCP support for Critical Path",
|
|
5
|
+
"author": "Jack James",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Pixerate/critical-path.git"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"bin": {
|
|
18
|
+
"critical-path-mcp": "./dist/bin/cli.js"
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./server": {
|
|
26
|
+
"import": "./dist/server/index.js",
|
|
27
|
+
"types": "./dist/server/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./web": {
|
|
30
|
+
"import": "./dist/web/index.js",
|
|
31
|
+
"types": "./dist/web/index.d.ts"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc --build",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@critical-path/client": "workspace:*",
|
|
41
|
+
"@critical-path/core": "workspace:*",
|
|
42
|
+
"@modelcontextprotocol/sdk": "^1.6.0",
|
|
43
|
+
"zod": "^3.24.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^24.0.0",
|
|
47
|
+
"typescript": "^5.7.0",
|
|
48
|
+
"vitest": "^3.0.0"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=24.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/bin/cli.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { CriticalPathEngine, SQLiteStore, InMemoryStore } from '@critical-path/core';
|
|
3
|
+
import { CriticalPathClient } from '@critical-path/client';
|
|
4
|
+
import { createCriticalPathMcpServer, startStdioServer } from '../server/index.js';
|
|
5
|
+
|
|
6
|
+
function parseArgs(args: string[]) {
|
|
7
|
+
const options: { db?: string; api?: string; help?: boolean } = {};
|
|
8
|
+
for (let i = 0; i < args.length; i++) {
|
|
9
|
+
const arg = args[i];
|
|
10
|
+
if (arg === '--help' || arg === '-h') {
|
|
11
|
+
options.help = true;
|
|
12
|
+
} else if (arg === '--db' && args[i + 1]) {
|
|
13
|
+
options.db = args[++i];
|
|
14
|
+
} else if (arg === '--api' && args[i + 1]) {
|
|
15
|
+
options.api = args[++i];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return options;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function showHelp() {
|
|
22
|
+
console.log(`
|
|
23
|
+
Critical Path MCP Server (Stdio)
|
|
24
|
+
|
|
25
|
+
Usage:
|
|
26
|
+
npx @critical-path/mcp [options]
|
|
27
|
+
|
|
28
|
+
Options:
|
|
29
|
+
--db <path> Path to SQLite database file (uses SQLiteStore)
|
|
30
|
+
--api <url> Base URL of remote Critical Path server (uses CriticalPathClient)
|
|
31
|
+
--help, -h Display this help message
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
# Run against local SQLite database
|
|
35
|
+
npx @critical-path/mcp --db ./critical-path.db
|
|
36
|
+
|
|
37
|
+
# Run against remote Next.js or SvelteKit route handler
|
|
38
|
+
npx @critical-path/mcp --api http://localhost:3000/api/critical-path
|
|
39
|
+
|
|
40
|
+
# Run with in-memory store (for testing)
|
|
41
|
+
npx @critical-path/mcp
|
|
42
|
+
`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function main() {
|
|
46
|
+
const args = process.argv.slice(2);
|
|
47
|
+
const options = parseArgs(args);
|
|
48
|
+
|
|
49
|
+
if (options.help) {
|
|
50
|
+
showHelp();
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let server;
|
|
55
|
+
|
|
56
|
+
if (options.api) {
|
|
57
|
+
const client = new CriticalPathClient({ baseUrl: options.api });
|
|
58
|
+
server = createCriticalPathMcpServer({ client, name: 'critical-path-api-mcp' });
|
|
59
|
+
console.error(`[Critical Path MCP] Connecting to remote API at ${options.api} over stdio...`);
|
|
60
|
+
} else if (options.db) {
|
|
61
|
+
const store = new SQLiteStore({ filename: options.db });
|
|
62
|
+
const engine = new CriticalPathEngine({ store });
|
|
63
|
+
server = createCriticalPathMcpServer({ engine, name: 'critical-path-sqlite-mcp' });
|
|
64
|
+
console.error(`[Critical Path MCP] Loaded SQLite database from "${options.db}" over stdio...`);
|
|
65
|
+
} else {
|
|
66
|
+
const store = new InMemoryStore();
|
|
67
|
+
const engine = new CriticalPathEngine({ store });
|
|
68
|
+
server = createCriticalPathMcpServer({ engine, name: 'critical-path-inmemory-mcp' });
|
|
69
|
+
console.error('[Critical Path MCP] Initialized in-memory store over stdio...');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
await startStdioServer(server);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
main().catch((err) => {
|
|
76
|
+
console.error('[Critical Path MCP] Fatal error:', err);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
});
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { CriticalPathEngine, InMemoryStore } from '@critical-path/core';
|
|
3
|
+
import {
|
|
4
|
+
ALL_TOOLS,
|
|
5
|
+
TOOL_MAP,
|
|
6
|
+
createCriticalPathMcpServer,
|
|
7
|
+
registerWebMcpTools,
|
|
8
|
+
ensureModelContextShim
|
|
9
|
+
} from './index.js';
|
|
10
|
+
|
|
11
|
+
describe('@critical-path/mcp', () => {
|
|
12
|
+
let engine: CriticalPathEngine;
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
engine = new CriticalPathEngine({ store: new InMemoryStore() });
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe('Tool Definitions', () => {
|
|
19
|
+
it('registers all core project management tools', () => {
|
|
20
|
+
const toolNames = ALL_TOOLS.map((t) => t.name);
|
|
21
|
+
expect(toolNames).toContain('list_projects');
|
|
22
|
+
expect(toolNames).toContain('get_project');
|
|
23
|
+
expect(toolNames).toContain('create_project');
|
|
24
|
+
expect(toolNames).toContain('list_tasks');
|
|
25
|
+
expect(toolNames).toContain('get_task');
|
|
26
|
+
expect(toolNames).toContain('create_task');
|
|
27
|
+
expect(toolNames).toContain('update_task');
|
|
28
|
+
expect(toolNames).toContain('delete_task');
|
|
29
|
+
expect(toolNames).toContain('list_deliverables');
|
|
30
|
+
expect(toolNames).toContain('create_deliverable');
|
|
31
|
+
expect(toolNames).toContain('list_comments');
|
|
32
|
+
expect(toolNames).toContain('add_comment');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('executes project and task workflows through tool definitions', async () => {
|
|
36
|
+
// 1. Create project
|
|
37
|
+
const createProjTool = TOOL_MAP.get('create_project')!;
|
|
38
|
+
const project = await createProjTool.execute(
|
|
39
|
+
{ name: 'Core Engine Dev', key: 'CED' },
|
|
40
|
+
engine
|
|
41
|
+
);
|
|
42
|
+
expect(project.id).toBeDefined();
|
|
43
|
+
expect(project.name).toBe('Core Engine Dev');
|
|
44
|
+
|
|
45
|
+
// 2. List projects
|
|
46
|
+
const listProjTool = TOOL_MAP.get('list_projects')!;
|
|
47
|
+
const projects = await listProjTool.execute({}, engine);
|
|
48
|
+
expect(projects).toHaveLength(1);
|
|
49
|
+
expect(projects[0].id).toBe(project.id);
|
|
50
|
+
|
|
51
|
+
// 3. Create task
|
|
52
|
+
const createTaskTool = TOOL_MAP.get('create_task')!;
|
|
53
|
+
const task = await createTaskTool.execute(
|
|
54
|
+
{
|
|
55
|
+
projectId: project.id,
|
|
56
|
+
title: 'Implement WebMCP Spec',
|
|
57
|
+
priority: 'urgent',
|
|
58
|
+
tags: ['agent', 'mcp']
|
|
59
|
+
},
|
|
60
|
+
engine
|
|
61
|
+
);
|
|
62
|
+
expect(task.id).toBeDefined();
|
|
63
|
+
expect(task.title).toBe('Implement WebMCP Spec');
|
|
64
|
+
expect(task.priority).toBe('urgent');
|
|
65
|
+
|
|
66
|
+
// 4. Update task
|
|
67
|
+
const updateTaskTool = TOOL_MAP.get('update_task')!;
|
|
68
|
+
const updated = await updateTaskTool.execute(
|
|
69
|
+
{
|
|
70
|
+
id: task.id,
|
|
71
|
+
status: 'in_progress',
|
|
72
|
+
estimatedHours: 5
|
|
73
|
+
},
|
|
74
|
+
engine
|
|
75
|
+
);
|
|
76
|
+
expect(updated.status).toBe('in_progress');
|
|
77
|
+
expect(updated.estimatedHours).toBe(5);
|
|
78
|
+
|
|
79
|
+
// 5. Add comment
|
|
80
|
+
const addCommentTool = TOOL_MAP.get('add_comment')!;
|
|
81
|
+
const comment = await addCommentTool.execute(
|
|
82
|
+
{
|
|
83
|
+
taskId: task.id,
|
|
84
|
+
content: 'Started drafting the WebMCP handler',
|
|
85
|
+
authorId: 'agent-1'
|
|
86
|
+
},
|
|
87
|
+
engine
|
|
88
|
+
);
|
|
89
|
+
expect(comment.content).toBe('Started drafting the WebMCP handler');
|
|
90
|
+
|
|
91
|
+
// 6. List tasks with filter
|
|
92
|
+
const listTasksTool = TOOL_MAP.get('list_tasks')!;
|
|
93
|
+
const filtered = await listTasksTool.execute(
|
|
94
|
+
{ projectId: project.id, status: 'in_progress' },
|
|
95
|
+
engine
|
|
96
|
+
);
|
|
97
|
+
expect(filtered).toHaveLength(1);
|
|
98
|
+
|
|
99
|
+
// 7. Delete task
|
|
100
|
+
const deleteTaskTool = TOOL_MAP.get('delete_task')!;
|
|
101
|
+
const delRes = await deleteTaskTool.execute({ id: task.id }, engine);
|
|
102
|
+
expect(delRes.success).toBe(true);
|
|
103
|
+
|
|
104
|
+
const afterDelete = await listTasksTool.execute({ projectId: project.id }, engine);
|
|
105
|
+
expect(afterDelete).toHaveLength(0);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
describe('Standard MCP Server Creation', () => {
|
|
110
|
+
it('creates an MCP Server instance with capabilities', () => {
|
|
111
|
+
const server = createCriticalPathMcpServer({
|
|
112
|
+
engine,
|
|
113
|
+
name: 'test-mcp-server',
|
|
114
|
+
version: '1.0.0'
|
|
115
|
+
});
|
|
116
|
+
expect(server).toBeDefined();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('throws if neither engine nor client is provided', () => {
|
|
120
|
+
expect(() => createCriticalPathMcpServer({} as any)).toThrow(
|
|
121
|
+
'Either engine or client must be provided'
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('WebMCP Client Layer', () => {
|
|
127
|
+
let mockDoc: any;
|
|
128
|
+
let mockWin: any;
|
|
129
|
+
|
|
130
|
+
beforeEach(() => {
|
|
131
|
+
mockDoc = {};
|
|
132
|
+
mockWin = {};
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('creates a modelContext shim if document.modelContext is not natively present', () => {
|
|
136
|
+
const shim = ensureModelContextShim(mockDoc);
|
|
137
|
+
expect(shim).toBeDefined();
|
|
138
|
+
expect(mockDoc.modelContext).toBe(shim);
|
|
139
|
+
expect(typeof shim!.registerTool).toBe('function');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('registers tools into modelContext and allows execution', async () => {
|
|
143
|
+
const project = await engine.createProject({ name: 'WebMCP Test Project' });
|
|
144
|
+
|
|
145
|
+
// Mock client that delegates to engine
|
|
146
|
+
const mockClient: any = {
|
|
147
|
+
getProjects: () => engine.getProjects(),
|
|
148
|
+
getProject: (id: string) => engine.getProject(id),
|
|
149
|
+
createProject: (d: any) => engine.createProject(d),
|
|
150
|
+
getTasks: (pId?: string) => engine.getTasks(pId),
|
|
151
|
+
getTask: (id: string) => engine.getTask(id),
|
|
152
|
+
createTask: (d: any) => engine.createTask(d),
|
|
153
|
+
updateTask: (id: string, u: any) => engine.updateTask(id, u),
|
|
154
|
+
deleteTask: (id: string) => engine.deleteTask(id)
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const handle = registerWebMcpTools({
|
|
158
|
+
client: mockClient,
|
|
159
|
+
projectId: project.id,
|
|
160
|
+
document: mockDoc,
|
|
161
|
+
window: mockWin
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
expect(handle.getRegisteredTools().length).toBeGreaterThan(0);
|
|
165
|
+
expect(mockDoc.modelContext).toBeDefined();
|
|
166
|
+
|
|
167
|
+
const registered = await mockDoc.modelContext.getTools();
|
|
168
|
+
expect(registered.length).toBe(handle.getRegisteredTools().length);
|
|
169
|
+
|
|
170
|
+
// Execute create_task via WebMCP modelContext, inheriting ambient projectId
|
|
171
|
+
const createdTask = await mockDoc.modelContext.executeTool('create_task', {
|
|
172
|
+
title: 'Task Created via WebMCP'
|
|
173
|
+
});
|
|
174
|
+
expect(createdTask.id).toBeDefined();
|
|
175
|
+
expect(createdTask.projectId).toBe(project.id);
|
|
176
|
+
expect(createdTask.title).toBe('Task Created via WebMCP');
|
|
177
|
+
|
|
178
|
+
// Verify window fallback
|
|
179
|
+
expect(mockWin.__CRITICAL_PATH_WEBMCP__).toBeDefined();
|
|
180
|
+
expect(mockWin.__CRITICAL_PATH_WEBMCP__.projectId).toBe(project.id);
|
|
181
|
+
|
|
182
|
+
// Cleanup
|
|
183
|
+
handle.unregister();
|
|
184
|
+
const afterUnregister = await mockDoc.modelContext.getTools();
|
|
185
|
+
expect(afterUnregister).toHaveLength(0);
|
|
186
|
+
expect(mockWin.__CRITICAL_PATH_WEBMCP__).toBeUndefined();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('supports AbortSignal unregistration lifecycle', async () => {
|
|
190
|
+
const controller = new AbortController();
|
|
191
|
+
const mockClient: any = {
|
|
192
|
+
getTasks: () => Promise.resolve([])
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
registerWebMcpTools({
|
|
196
|
+
client: mockClient,
|
|
197
|
+
signal: controller.signal,
|
|
198
|
+
document: mockDoc,
|
|
199
|
+
window: mockWin
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
let tools = await mockDoc.modelContext.getTools();
|
|
203
|
+
expect(tools.length).toBeGreaterThan(0);
|
|
204
|
+
|
|
205
|
+
controller.abort();
|
|
206
|
+
|
|
207
|
+
tools = await mockDoc.modelContext.getTools();
|
|
208
|
+
expect(tools).toHaveLength(0);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
});
|
package/src/index.ts
ADDED