@critical-path/mcp 0.18.0 → 0.19.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/CHANGELOG.md +671 -0
- package/README.md +73 -25
- package/dist/bin/args.d.ts +8 -0
- package/dist/bin/args.d.ts.map +1 -1
- package/dist/bin/args.js +20 -0
- package/dist/bin/args.js.map +1 -1
- package/dist/bin/cli.js +37 -3
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/skills.d.ts +15 -0
- package/dist/bin/skills.d.ts.map +1 -0
- package/dist/bin/skills.js +28 -0
- package/dist/bin/skills.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +27 -13
- package/dist/server/index.js.map +1 -1
- package/dist/skills/catalog.generated.d.ts +3 -0
- package/dist/skills/catalog.generated.d.ts.map +1 -0
- package/dist/skills/catalog.generated.js +33 -0
- package/dist/skills/catalog.generated.js.map +1 -0
- package/dist/skills/index.d.ts +13 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +7 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/tools/definitions.d.ts +82 -8
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +296 -52
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/instructions.d.ts +10 -0
- package/dist/tools/instructions.d.ts.map +1 -0
- package/dist/tools/instructions.js +48 -0
- package/dist/tools/instructions.js.map +1 -0
- package/dist/tools/outputs.d.ts +2311 -0
- package/dist/tools/outputs.d.ts.map +1 -0
- package/dist/tools/outputs.js +184 -0
- package/dist/tools/outputs.js.map +1 -0
- package/dist/web/index.d.ts +16 -0
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +13 -12
- package/dist/web/index.js.map +1 -1
- package/package.json +14 -8
- package/skills/analyze-schedule/SKILL.md +42 -0
- package/skills/investigate-task/SKILL.md +41 -0
- package/skills/plan-capacity/SKILL.md +32 -0
- package/skills/plan-project/SKILL.md +45 -0
- package/skills/report-status/SKILL.md +46 -0
- package/skills/triage-tasks/SKILL.md +41 -0
package/README.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
> **Model Context Protocol (MCP) and Client-Side WebMCP Integration for Critical Path**
|
|
4
4
|
> Connect AI coding agents, background workers, and in-browser copilots directly to your project management workflows.
|
|
5
5
|
|
|
6
|
+
> **Upgrading?** Upgrade every `@critical-path/*` package together. Coding agents: follow [UPGRADING.md](https://github.com/Pixerate/critical-path/blob/main/UPGRADING.md); breaking changes are marked **BREAKING** in this package's `CHANGELOG.md`.
|
|
7
|
+
|
|
8
|
+
|
|
6
9
|
[](https://opensource.org/licenses/MIT)
|
|
7
10
|
|
|
8
11
|
---
|
|
@@ -41,6 +44,12 @@ npx @critical-path/mcp --api http://localhost:3000/api/critical-path
|
|
|
41
44
|
|
|
42
45
|
# Temporary in-memory store (for testing)
|
|
43
46
|
npx @critical-path/mcp
|
|
47
|
+
|
|
48
|
+
# Expose only some tools: toolsets, exact names, read-only
|
|
49
|
+
npx @critical-path/mcp --db ./critical-path.db --toolsets scheduling,analytics,guidance --read-only
|
|
50
|
+
|
|
51
|
+
# Install the bundled agent skills for coding agents
|
|
52
|
+
npx @critical-path/mcp skills install
|
|
44
53
|
```
|
|
45
54
|
|
|
46
55
|
For APIs protected with `requireAuth`, set `CRITICAL_PATH_API_TOKEN` (sent as `Authorization: Bearer <token>`) or pass `--header "Name: value"` (repeatable). Prefer the environment variable for secrets, since command-line flags are visible in process lists. The CLI warns when credentials would be sent over plain `http` to a non-local host.
|
|
@@ -84,7 +93,8 @@ const engine = new CriticalPathEngine({
|
|
|
84
93
|
|
|
85
94
|
const server = createCriticalPathMcpServer({
|
|
86
95
|
engine,
|
|
87
|
-
name: 'my-project-pm'
|
|
96
|
+
name: 'my-project-pm',
|
|
97
|
+
toolsets: ['core', 'collaboration', 'guidance'] // optional; default: every tool
|
|
88
98
|
});
|
|
89
99
|
|
|
90
100
|
await startStdioServer(server);
|
|
@@ -103,8 +113,9 @@ import { useWebMCP } from '@critical-path/react';
|
|
|
103
113
|
|
|
104
114
|
export function ProjectDashboard({ projectId }: { projectId: string }) {
|
|
105
115
|
// Automatically registers tools scoped to the active project
|
|
106
|
-
// and cleans up on unmount or project change via AbortController
|
|
107
|
-
|
|
116
|
+
// and cleans up on unmount or project change via AbortController.
|
|
117
|
+
// `instructions` briefs the agent; add it to your copilot's system prompt.
|
|
118
|
+
const { registered, tools, instructions } = useWebMCP({
|
|
108
119
|
projectId,
|
|
109
120
|
tools: ['create_task', 'list_tasks', 'update_task', 'add_comment']
|
|
110
121
|
});
|
|
@@ -159,28 +170,64 @@ handle.unregister();
|
|
|
159
170
|
|
|
160
171
|
## 🛠️ Supported Tools
|
|
161
172
|
|
|
162
|
-
| Tool
|
|
163
|
-
| :--- | :--- | :--- |
|
|
164
|
-
| `list_projects` |
|
|
165
|
-
| `get_project` |
|
|
166
|
-
| `create_project` |
|
|
167
|
-
| `list_tasks` |
|
|
168
|
-
| `get_task` |
|
|
169
|
-
| `create_task` |
|
|
170
|
-
| `update_task` |
|
|
171
|
-
| `delete_task` |
|
|
172
|
-
| `
|
|
173
|
-
| `
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
173
|
+
| Tool | Toolset | Use it for | Key Parameters |
|
|
174
|
+
| :--- | :--- | :--- | :--- |
|
|
175
|
+
| `list_projects` | core | Finding project ids; returns `{ projects }` | `{}` |
|
|
176
|
+
| `get_project` | core | Workflow statuses, custom fields and calendar of a project | `{ id }` |
|
|
177
|
+
| `create_project` | core | A new, empty project | `{ name, description?, key? }` |
|
|
178
|
+
| `list_tasks` | core | Finding tasks; returns `{ tasks, nextCursor }` | `{ projectId?, status?, priority?, assigneeId?, iterationId?, deliverableId?, containerId?, parentId? ('none' = top-level), limit?, cursor? }` |
|
|
179
|
+
| `get_task` | core | One task's full record; with `includeDependencies`, what it waits for (`dependsOn`) and what waits for it (`dependents`) | `{ id, includeDependencies? }` |
|
|
180
|
+
| `create_task` | core | Adding work (auto-scoped in WebMCP) | `{ projectId?, title, description?, priority?, status?, estimatedHours?, allocation? }` |
|
|
181
|
+
| `update_task` | core | Changing status, priority, assignee, estimates, logged hours | `{ id, title?, status?, priority?, assigneeId?, allocation?, loggedHours? }` |
|
|
182
|
+
| `delete_task` | core | Permanent deletion (`destructiveHint`) | `{ id }` |
|
|
183
|
+
| `add_dependency` | core | Making a task wait for another, so the critical path orders them; idempotent, refuses loops | `{ taskId, dependsOnTaskId, type? ('blocking' \| 'relates_to') }` |
|
|
184
|
+
| `remove_dependency` | core | Removing that link, by the same two task ids; returns `{ removed, dependencyIds }` | `{ taskId, dependsOnTaskId, type? }` |
|
|
185
|
+
| `list_deliverables` | collaboration | A project's milestones; returns `{ deliverables }` | `{ projectId? }` |
|
|
186
|
+
| `create_deliverable` | collaboration | A dated milestone grouping tasks | `{ projectId?, title, dueDate?, taskIds? }` |
|
|
187
|
+
| `list_comments` | collaboration | A task's discussion; returns `{ comments }` | `{ taskId }` |
|
|
188
|
+
| `add_comment` | collaboration | Recording a decision or note (authored by the server's actor) | `{ taskId, content }` |
|
|
189
|
+
| `calculate_critical_path` | scheduling | Forecast finish, critical tasks, slack (`calendars: 'assignee'` uses each assignee's or team's calendar; `levelResources` limits each assignee to one task at a time) | `{ projectId?, calendars?, levelResources?, levelingPriority?, effort? }` |
|
|
190
|
+
| `calculate_portfolio_critical_path` | scheduling | Several projects (default: all readable), sharing people and teams when levelling | `{ projectIds?, projectOrder?, includeHiddenWork?, calendars?, levelResources?, levelingPriority?, effort? }` |
|
|
191
|
+
| `get_workload_distribution` | scheduling | Hours, capacity and utilization per person, team or category over time | `{ projectId?, startDate?, endDate?, interval?, groupBy?, metric? }` |
|
|
192
|
+
| `get_timeline_ladder` | analytics | Project status: phase health (macro), timeline (standard), evidence (concrete) | `{ projectId?, level?, containerId?, iterationId? }` |
|
|
193
|
+
| `get_task_ladder` | analytics | One task's phase, schedule position and evidence | `{ taskId }` |
|
|
194
|
+
| `get_task_metrics` | analytics | Progress, variance and earned value (CPI, SPI) | `{ taskId }` |
|
|
195
|
+
| `get_task_progress_history` | analytics | Progress over time and curve shape | `{ taskId }` |
|
|
196
|
+
| `get_skill` | guidance | Loading a playbook for a multi-step job | `{ name? }` |
|
|
197
|
+
|
|
198
|
+
Each tool's JSON `inputSchema` and `outputSchema` are generated from its zod schemas with `defineTool`, so what the model sees always matches what is enforced. Tool arguments are validated before execution, on both the standard server and WebMCP. Invalid or undeclared arguments return an `isError` result naming the problem (for example, `projectId` cannot be passed to `update_task`). Results are JSON objects, returned as `structuredContent` and as text; a lookup that finds nothing is an error with a hint on how to find valid ids.
|
|
199
|
+
|
|
200
|
+
**Identity:** with an `engine`, changes are attributed to the server's `actor` option (default `DEFAULT_MCP_ACTOR`, `mcp-agent`); tools never take author or actor arguments. If the engine has an `authorize` policy, the actor is checked like any user: give it project memberships (or `roles: ['admin']`), and a `tenantId` in multi-tenant setups. With a `client`, the API's authentication decides who the caller is. Tools outside the `tools` / `toolsets` selection are neither listed nor callable. Every tool sends the standard MCP annotations `readOnlyHint`, `destructiveHint`, `idempotentHint` and `openWorldHint`.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 🧭 Agent Discovery: Toolsets, Instructions & Skills
|
|
205
|
+
|
|
206
|
+
Agents choose tools from their descriptions. This package helps them choose well:
|
|
207
|
+
|
|
208
|
+
- **Toolsets** keep the list short. Pass `toolsets` (`core`, `collaboration`, `scheduling`, `analytics`, `guidance`), `tools` (exact names, combined with toolsets) and `readOnly` to `createCriticalPathMcpServer`, `registerWebMcpTools`, `useWebMCP` or `createWebMcpState`, or `--toolsets`, `--tools` and `--read-only` to the CLI. Unknown names throw.
|
|
209
|
+
- **Server instructions** are sent on connect: the data model, where ids come from, which tool fits which request, and the skill index. WebMCP returns the same text as `handle.instructions` (also `instructions` from `useWebMCP` and `WebMcpState`) for your copilot's system prompt. `buildAgentInstructions(tools)` builds it for custom hosts.
|
|
210
|
+
- **Skills** are playbooks for multi-step jobs, in the Agent Skills `SKILL.md` format:
|
|
211
|
+
|
|
212
|
+
| Skill | Use it for |
|
|
213
|
+
| :--- | :--- |
|
|
214
|
+
| `plan-project` | Turning a goal into a project with deliverables, estimated, prioritized tasks and their dependencies |
|
|
215
|
+
| `triage-tasks` | Setting priority, estimates, tags and blocked state across a backlog |
|
|
216
|
+
| `analyze-schedule` | Finding what drives the end date and recommending fixes |
|
|
217
|
+
| `report-status` | Writing a project status report |
|
|
218
|
+
| `plan-capacity` | Finding overloaded or idle people and rebalancing work |
|
|
219
|
+
| `investigate-task` | Working out why one task is late, stalled or over budget |
|
|
220
|
+
|
|
221
|
+
Agents load them with the `get_skill` tool, read them as `criticalpath://skills/{name}` resources, or use them as files:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Writes .claude/skills/<name>/SKILL.md (edited files are kept unless you pass --force)
|
|
225
|
+
npx @critical-path/mcp skills install [--dir <path>]
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
The files ship in the package (`@critical-path/mcp/skills/<name>/SKILL.md`), and `SKILLS` / `getSkill()` are exported.
|
|
229
|
+
|
|
230
|
+
**Measuring tool choice:** `pnpm --filter @critical-path/mcp eval:tools` (needs Anthropic credentials) asks Claude to pick a tool for each request in `evals/tool-selection.cases.json` and reports the score. Unit tests lint every description without an API key.
|
|
184
231
|
|
|
185
232
|
---
|
|
186
233
|
|
|
@@ -190,6 +237,7 @@ Each tool's JSON `inputSchema` is generated from its zod schema with `defineTool
|
|
|
190
237
|
- `criticalpath://projects`: Live JSON stream of all projects.
|
|
191
238
|
- `criticalpath://tasks`: Live JSON stream of all tasks.
|
|
192
239
|
- `criticalpath://tasks/{id}`: Detailed JSON payload of a specific task.
|
|
240
|
+
- `criticalpath://skills/{name}`: A bundled agent skill (markdown).
|
|
193
241
|
|
|
194
242
|
### Prompts
|
|
195
243
|
- `summarize_project`: Executive summary of project health, completion rates, and blockers.
|
package/dist/bin/args.d.ts
CHANGED
|
@@ -3,6 +3,14 @@ export interface CliOptions {
|
|
|
3
3
|
api?: string;
|
|
4
4
|
headers: string[];
|
|
5
5
|
help?: boolean;
|
|
6
|
+
tools?: string[];
|
|
7
|
+
toolsets?: string[];
|
|
8
|
+
readOnly?: boolean;
|
|
9
|
+
/** `skills list` / `skills install`. */
|
|
10
|
+
command?: 'skills';
|
|
11
|
+
subcommand?: string;
|
|
12
|
+
dir?: string;
|
|
13
|
+
force?: boolean;
|
|
6
14
|
}
|
|
7
15
|
export declare function parseArgs(args: string[]): CliOptions;
|
|
8
16
|
/**
|
package/dist/bin/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/bin/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/bin/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6BpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAatH;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIxD"}
|
package/dist/bin/args.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
const list = (value) => value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
1
2
|
export function parseArgs(args) {
|
|
2
3
|
const options = { headers: [] };
|
|
4
|
+
if (args[0] === 'skills') {
|
|
5
|
+
options.command = 'skills';
|
|
6
|
+
options.subcommand = args[1] && !args[1].startsWith('-') ? args[1] : 'list';
|
|
7
|
+
}
|
|
3
8
|
for (let i = 0; i < args.length; i++) {
|
|
4
9
|
const arg = args[i];
|
|
5
10
|
if (arg === '--help' || arg === '-h') {
|
|
@@ -14,6 +19,21 @@ export function parseArgs(args) {
|
|
|
14
19
|
else if (arg === '--header' && args[i + 1]) {
|
|
15
20
|
options.headers.push(args[++i]);
|
|
16
21
|
}
|
|
22
|
+
else if (arg === '--tools' && args[i + 1]) {
|
|
23
|
+
options.tools = list(args[++i]);
|
|
24
|
+
}
|
|
25
|
+
else if (arg === '--toolsets' && args[i + 1]) {
|
|
26
|
+
options.toolsets = list(args[++i]);
|
|
27
|
+
}
|
|
28
|
+
else if (arg === '--read-only') {
|
|
29
|
+
options.readOnly = true;
|
|
30
|
+
}
|
|
31
|
+
else if (arg === '--dir' && args[i + 1]) {
|
|
32
|
+
options.dir = args[++i];
|
|
33
|
+
}
|
|
34
|
+
else if (arg === '--force') {
|
|
35
|
+
options.force = true;
|
|
36
|
+
}
|
|
17
37
|
}
|
|
18
38
|
return options;
|
|
19
39
|
}
|
package/dist/bin/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/bin/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/bin/args.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/cli.js
CHANGED
|
@@ -3,12 +3,16 @@ import { CriticalPathEngine, SQLiteStore, InMemoryStore } from '@critical-path/c
|
|
|
3
3
|
import { CriticalPathClient } from '@critical-path/client';
|
|
4
4
|
import { createCriticalPathMcpServer, startStdioServer } from '../server/index.js';
|
|
5
5
|
import { parseArgs, buildApiHeaders, isInsecureRemote } from './args.js';
|
|
6
|
+
import { installSkills, DEFAULT_SKILLS_DIR } from './skills.js';
|
|
7
|
+
import { SKILLS } from '../skills/index.js';
|
|
6
8
|
function showHelp() {
|
|
7
9
|
console.log(`
|
|
8
10
|
Critical Path MCP Server (Stdio)
|
|
9
11
|
|
|
10
12
|
Usage:
|
|
11
13
|
npx @critical-path/mcp [options]
|
|
14
|
+
npx @critical-path/mcp skills list
|
|
15
|
+
npx @critical-path/mcp skills install [--dir <path>] [--force]
|
|
12
16
|
|
|
13
17
|
Environment:
|
|
14
18
|
CRITICAL_PATH_API_TOKEN Sent as "Authorization: Bearer <token>" in --api mode
|
|
@@ -17,8 +21,17 @@ Options:
|
|
|
17
21
|
--db <path> Path to SQLite database file (uses SQLiteStore)
|
|
18
22
|
--api <url> Base URL of remote Critical Path server (uses CriticalPathClient)
|
|
19
23
|
--header <h> Extra request header for --api, as "Name: value" (repeatable)
|
|
24
|
+
--toolsets <l> Comma-separated tool groups to expose: core, collaboration,
|
|
25
|
+
scheduling, analytics, guidance (default: all)
|
|
26
|
+
--tools <l> Comma-separated tool names to expose (combined with --toolsets)
|
|
27
|
+
--read-only Expose only tools that change nothing
|
|
20
28
|
--help, -h Display this help message
|
|
21
29
|
|
|
30
|
+
Skills:
|
|
31
|
+
skills list List the bundled agent skills (playbooks for multi-step jobs)
|
|
32
|
+
skills install Write them to <dir>/<name>/SKILL.md (default: ${DEFAULT_SKILLS_DIR});
|
|
33
|
+
--force replaces files you have edited
|
|
34
|
+
|
|
22
35
|
Examples:
|
|
23
36
|
# Run against local SQLite database
|
|
24
37
|
npx @critical-path/mcp --db ./critical-path.db
|
|
@@ -29,6 +42,9 @@ Examples:
|
|
|
29
42
|
# Authenticate against a protected API (token read from the environment)
|
|
30
43
|
CRITICAL_PATH_API_TOKEN=secret npx @critical-path/mcp --api https://app.example.com/api/critical-path
|
|
31
44
|
|
|
45
|
+
# Read-only scheduling and analytics tools for a reporting agent
|
|
46
|
+
npx @critical-path/mcp --db ./critical-path.db --toolsets scheduling,analytics,guidance --read-only
|
|
47
|
+
|
|
32
48
|
# Run with in-memory store (for testing)
|
|
33
49
|
npx @critical-path/mcp
|
|
34
50
|
`);
|
|
@@ -40,6 +56,24 @@ async function main() {
|
|
|
40
56
|
showHelp();
|
|
41
57
|
process.exit(0);
|
|
42
58
|
}
|
|
59
|
+
if (options.command === 'skills') {
|
|
60
|
+
if (options.subcommand === 'install') {
|
|
61
|
+
for (const result of installSkills(options.dir ?? DEFAULT_SKILLS_DIR, { force: options.force })) {
|
|
62
|
+
const note = result.status === 'skipped' ? ' (edited locally; pass --force to replace)' : '';
|
|
63
|
+
console.log(`${result.status.padEnd(9)} ${result.path}${note}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (options.subcommand === 'list') {
|
|
67
|
+
for (const skill of SKILLS)
|
|
68
|
+
console.log(`${skill.name}\n ${skill.description}\n`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.error(`Unknown skills command "${options.subcommand}". Use "skills list" or "skills install".`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const selection = { tools: options.tools, toolsets: options.toolsets, readOnly: options.readOnly };
|
|
43
77
|
let server;
|
|
44
78
|
if (options.api) {
|
|
45
79
|
const headers = buildApiHeaders(options.headers, process.env);
|
|
@@ -47,19 +81,19 @@ async function main() {
|
|
|
47
81
|
console.error('[Critical Path MCP] Warning: sending credentials over plain http to a remote host.');
|
|
48
82
|
}
|
|
49
83
|
const client = new CriticalPathClient({ baseUrl: options.api, headers });
|
|
50
|
-
server = createCriticalPathMcpServer({ client, name: 'critical-path-api-mcp' });
|
|
84
|
+
server = createCriticalPathMcpServer({ client, name: 'critical-path-api-mcp', ...selection });
|
|
51
85
|
console.error(`[Critical Path MCP] Connecting to remote API at ${options.api} over stdio...`);
|
|
52
86
|
}
|
|
53
87
|
else if (options.db) {
|
|
54
88
|
const store = new SQLiteStore({ filename: options.db });
|
|
55
89
|
const engine = new CriticalPathEngine({ store });
|
|
56
|
-
server = createCriticalPathMcpServer({ engine, name: 'critical-path-sqlite-mcp' });
|
|
90
|
+
server = createCriticalPathMcpServer({ engine, name: 'critical-path-sqlite-mcp', ...selection });
|
|
57
91
|
console.error(`[Critical Path MCP] Loaded SQLite database from "${options.db}" over stdio...`);
|
|
58
92
|
}
|
|
59
93
|
else {
|
|
60
94
|
const store = new InMemoryStore();
|
|
61
95
|
const engine = new CriticalPathEngine({ store });
|
|
62
|
-
server = createCriticalPathMcpServer({ engine, name: 'critical-path-inmemory-mcp' });
|
|
96
|
+
server = createCriticalPathMcpServer({ engine, name: 'critical-path-inmemory-mcp', ...selection });
|
|
63
97
|
console.error('[Critical Path MCP] Initialized in-memory store over stdio...');
|
|
64
98
|
}
|
|
65
99
|
await startStdioServer(server);
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;mEAuBqD,kBAAkB;;;;;;;;;;;;;;;;;;CAkBpF,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBAChG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,CAAC,UAAU,2CAA2C,CAAC,CAAC;YACxG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAqC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IAChI,IAAI,MAAM,CAAC;IAEX,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,MAAM,GAAG,2BAA2B,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,mDAAmD,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAChG,CAAC;SAAM,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,2BAA2B,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,KAAK,CAAC,oDAAoD,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACjG,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,2BAA2B,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const DEFAULT_SKILLS_DIR = ".claude/skills";
|
|
2
|
+
export interface InstalledSkill {
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
status: 'created' | 'updated' | 'unchanged' | 'skipped';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Writes each bundled skill to `<dir>/<name>/SKILL.md` (the Agent Skills layout used by Claude Code
|
|
9
|
+
* and other agents). A file that differs from the bundled version is only replaced with `force`,
|
|
10
|
+
* so local edits are not lost.
|
|
11
|
+
*/
|
|
12
|
+
export declare function installSkills(dir?: string, options?: {
|
|
13
|
+
force?: boolean;
|
|
14
|
+
}): InstalledSkill[];
|
|
15
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/bin/skills.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;CACzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAA2B,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,EAAE,CAenH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { SKILLS } from '../skills/index.js';
|
|
4
|
+
export const DEFAULT_SKILLS_DIR = '.claude/skills';
|
|
5
|
+
/**
|
|
6
|
+
* Writes each bundled skill to `<dir>/<name>/SKILL.md` (the Agent Skills layout used by Claude Code
|
|
7
|
+
* and other agents). A file that differs from the bundled version is only replaced with `force`,
|
|
8
|
+
* so local edits are not lost.
|
|
9
|
+
*/
|
|
10
|
+
export function installSkills(dir = DEFAULT_SKILLS_DIR, options = {}) {
|
|
11
|
+
return SKILLS.map((skill) => {
|
|
12
|
+
const folder = join(dir, skill.name);
|
|
13
|
+
const path = join(folder, 'SKILL.md');
|
|
14
|
+
if (existsSync(path)) {
|
|
15
|
+
const current = readFileSync(path, 'utf8');
|
|
16
|
+
if (current === skill.content)
|
|
17
|
+
return { name: skill.name, path, status: 'unchanged' };
|
|
18
|
+
if (!options.force)
|
|
19
|
+
return { name: skill.name, path, status: 'skipped' };
|
|
20
|
+
writeFileSync(path, skill.content);
|
|
21
|
+
return { name: skill.name, path, status: 'updated' };
|
|
22
|
+
}
|
|
23
|
+
mkdirSync(folder, { recursive: true });
|
|
24
|
+
writeFileSync(path, skill.content);
|
|
25
|
+
return { name: skill.name, path, status: 'created' };
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/bin/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAQnD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,kBAAkB,EAAE,UAA+B,EAAE;IAC/F,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACtF,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACvD,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import type { Actor, CriticalPathEngine } from '@critical-path/core';
|
|
3
3
|
import type { CriticalPathClient } from '@critical-path/client';
|
|
4
|
+
import { type ToolsetName } from '../tools/definitions.js';
|
|
4
5
|
export interface CriticalPathMcpServerOptions {
|
|
5
6
|
engine?: CriticalPathEngine;
|
|
6
7
|
client?: CriticalPathClient;
|
|
7
8
|
name?: string;
|
|
8
9
|
version?: string;
|
|
10
|
+
/** Exact tool names to expose. Combined with `toolsets`; unknown names throw. */
|
|
9
11
|
tools?: string[];
|
|
12
|
+
/** Tool groups to expose (`core`, `collaboration`, `scheduling`, `analytics`, `guidance`). Default: all. */
|
|
13
|
+
toolsets?: ToolsetName[];
|
|
14
|
+
/** Expose only tools that change nothing. */
|
|
15
|
+
readOnly?: boolean;
|
|
10
16
|
/**
|
|
11
17
|
* Identity that changes made through an `engine` are attributed to (activity log, comment
|
|
12
18
|
* authors, ...). Defaults to `DEFAULT_MCP_ACTOR`. With a `client`, identity comes from the API's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAYnE,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAYnE,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOtG,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAyF,CAAC;AAE1H,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAmQzF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
import {
|
|
4
|
+
import { selectTools, runTool } from '../tools/definitions.js';
|
|
5
|
+
import { buildAgentInstructions } from '../tools/instructions.js';
|
|
6
|
+
import { SKILLS, getSkill } from '../skills/index.js';
|
|
5
7
|
/** Most tasks a resource or prompt puts into the model's context. */
|
|
6
8
|
const MAX_TASKS_IN_CONTEXT = 200;
|
|
7
9
|
export const DEFAULT_MCP_ACTOR = Object.freeze({ userId: 'mcp-agent', username: 'MCP Agent', actorType: 'agent' });
|
|
@@ -14,9 +16,7 @@ export function createCriticalPathMcpServer(options) {
|
|
|
14
16
|
}
|
|
15
17
|
const serverName = options.name || 'critical-path-mcp';
|
|
16
18
|
const serverVersion = options.version || '0.1.0';
|
|
17
|
-
const activeTools = options.tools
|
|
18
|
-
? ALL_TOOLS.filter((t) => options.tools.includes(t.name))
|
|
19
|
-
: ALL_TOOLS;
|
|
19
|
+
const activeTools = selectTools({ tools: options.tools, toolsets: options.toolsets, readOnly: options.readOnly });
|
|
20
20
|
const activeToolMap = new Map(activeTools.map((tool) => [tool.name, tool]));
|
|
21
21
|
const server = new Server({
|
|
22
22
|
name: serverName,
|
|
@@ -26,7 +26,9 @@ export function createCriticalPathMcpServer(options) {
|
|
|
26
26
|
tools: {},
|
|
27
27
|
resources: {},
|
|
28
28
|
prompts: {}
|
|
29
|
-
}
|
|
29
|
+
},
|
|
30
|
+
// Sent on connect; clients add it to the agent's context as orientation.
|
|
31
|
+
instructions: buildAgentInstructions(activeTools)
|
|
30
32
|
});
|
|
31
33
|
// 1. Tool Listing
|
|
32
34
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
@@ -36,11 +38,8 @@ export function createCriticalPathMcpServer(options) {
|
|
|
36
38
|
title: tool.title,
|
|
37
39
|
description: tool.description,
|
|
38
40
|
inputSchema: tool.inputSchema,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
readOnlyHint: tool.annotations?.readOnlyHint ?? false,
|
|
42
|
-
destructiveHint: tool.annotations?.requiresConfirmation ?? false
|
|
43
|
-
}
|
|
41
|
+
outputSchema: tool.outputSchema,
|
|
42
|
+
annotations: { title: tool.title, ...tool.annotations }
|
|
44
43
|
}))
|
|
45
44
|
};
|
|
46
45
|
});
|
|
@@ -56,14 +55,15 @@ export function createCriticalPathMcpServer(options) {
|
|
|
56
55
|
// Plugin init and seeding must finish before tools touch the engine.
|
|
57
56
|
if (options.engine)
|
|
58
57
|
await options.engine.ready;
|
|
59
|
-
const result = await
|
|
58
|
+
const result = await runTool(tool, args, target);
|
|
60
59
|
return {
|
|
61
60
|
content: [
|
|
62
61
|
{
|
|
63
62
|
type: 'text',
|
|
64
63
|
text: JSON.stringify(result, null, 2)
|
|
65
64
|
}
|
|
66
|
-
]
|
|
65
|
+
],
|
|
66
|
+
structuredContent: result
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
catch (err) {
|
|
@@ -93,7 +93,13 @@ export function createCriticalPathMcpServer(options) {
|
|
|
93
93
|
name: 'Critical Path Tasks',
|
|
94
94
|
mimeType: 'application/json',
|
|
95
95
|
description: 'Live list of all tasks across projects'
|
|
96
|
-
}
|
|
96
|
+
},
|
|
97
|
+
...SKILLS.map((skill) => ({
|
|
98
|
+
uri: `criticalpath://skills/${skill.name}`,
|
|
99
|
+
name: `Skill: ${skill.name}`,
|
|
100
|
+
mimeType: 'text/markdown',
|
|
101
|
+
description: skill.description
|
|
102
|
+
}))
|
|
97
103
|
]
|
|
98
104
|
};
|
|
99
105
|
});
|
|
@@ -127,6 +133,14 @@ export function createCriticalPathMcpServer(options) {
|
|
|
127
133
|
]
|
|
128
134
|
};
|
|
129
135
|
}
|
|
136
|
+
const skillMatch = uri.match(/^criticalpath:\/\/skills\/([^/]+)$/);
|
|
137
|
+
if (skillMatch) {
|
|
138
|
+
const skill = getSkill(skillMatch[1]);
|
|
139
|
+
if (!skill) {
|
|
140
|
+
throw new McpError(ErrorCode.InvalidRequest, `Skill "${skillMatch[1]}" not found.`);
|
|
141
|
+
}
|
|
142
|
+
return { contents: [{ uri, mimeType: 'text/markdown', text: skill.content }] };
|
|
143
|
+
}
|
|
130
144
|
const taskMatch = uri.match(/^criticalpath:\/\/tasks\/([^/]+)$/);
|
|
131
145
|
if (taskMatch) {
|
|
132
146
|
const taskId = taskMatch[1];
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACT,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.generated.d.ts","sourceRoot":"","sources":["../../src/skills/catalog.generated.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,EAAE,KAAK,EA+BhC,CAAC"}
|