@critical-path/mcp 0.18.1 → 0.20.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.
Files changed (51) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +70 -25
  3. package/dist/bin/args.d.ts +8 -0
  4. package/dist/bin/args.d.ts.map +1 -1
  5. package/dist/bin/args.js +20 -0
  6. package/dist/bin/args.js.map +1 -1
  7. package/dist/bin/cli.js +37 -3
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/skills.d.ts +15 -0
  10. package/dist/bin/skills.d.ts.map +1 -0
  11. package/dist/bin/skills.js +28 -0
  12. package/dist/bin/skills.js.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/server/index.d.ts +6 -0
  18. package/dist/server/index.d.ts.map +1 -1
  19. package/dist/server/index.js +27 -13
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/skills/catalog.generated.d.ts +3 -0
  22. package/dist/skills/catalog.generated.d.ts.map +1 -0
  23. package/dist/skills/catalog.generated.js +33 -0
  24. package/dist/skills/catalog.generated.js.map +1 -0
  25. package/dist/skills/index.d.ts +13 -0
  26. package/dist/skills/index.d.ts.map +1 -0
  27. package/dist/skills/index.js +7 -0
  28. package/dist/skills/index.js.map +1 -0
  29. package/dist/tools/definitions.d.ts +86 -8
  30. package/dist/tools/definitions.d.ts.map +1 -1
  31. package/dist/tools/definitions.js +302 -52
  32. package/dist/tools/definitions.js.map +1 -1
  33. package/dist/tools/instructions.d.ts +10 -0
  34. package/dist/tools/instructions.d.ts.map +1 -0
  35. package/dist/tools/instructions.js +48 -0
  36. package/dist/tools/instructions.js.map +1 -0
  37. package/dist/tools/outputs.d.ts +2443 -0
  38. package/dist/tools/outputs.d.ts.map +1 -0
  39. package/dist/tools/outputs.js +190 -0
  40. package/dist/tools/outputs.js.map +1 -0
  41. package/dist/web/index.d.ts +16 -0
  42. package/dist/web/index.d.ts.map +1 -1
  43. package/dist/web/index.js +13 -12
  44. package/dist/web/index.js.map +1 -1
  45. package/package.json +13 -8
  46. package/skills/analyze-schedule/SKILL.md +44 -0
  47. package/skills/investigate-task/SKILL.md +41 -0
  48. package/skills/plan-capacity/SKILL.md +32 -0
  49. package/skills/plan-project/SKILL.md +46 -0
  50. package/skills/report-status/SKILL.md +46 -0
  51. package/skills/triage-tasks/SKILL.md +41 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @critical-path/mcp
2
2
 
3
+ ## 0.20.0
4
+
5
+ ### Minor Changes
6
+
7
+ - da622c9: Milestones and deadlines.
8
+
9
+ - Tasks take `isMilestone` (a zero-duration checkpoint: no duration or effort whatever its estimate) and `deadline` (latest acceptable finish; a date-only value means the end of that working day).
10
+ - Critical path analysis caps each task's late finish at its `deadline`, so a missed deadline shows as negative slack on the task and every task driving it. Schedules report `isMilestone`, `deadlineDate` and `deadlineVarianceHours` per task, and the analysis lists `missedDeadlineTaskIds`. In project-calendar mode, deadlines need a project start date and are ignored without one.
11
+ - Deadlines also feed levelling: work behind a tight deadline gets less slack, so it is placed first under the default `'slack'` rule.
12
+ - **BREAKING:** `CriticalPathAnalysis.missedDeadlineTaskIds` is a required field; code that builds analysis objects (for example test fixtures) must add it.
13
+ - **BREAKING:** on assignee calendars, a zero-duration task (a milestone, or a finished task) now sits at the moment its predecessors finish (for example 17:00) instead of the next working morning.
14
+ - `Iteration.type` no longer suggests `'milestone'`: iterations are time boxes, and dated checkpoints are milestone tasks. Existing values still load.
15
+ - MCP: `create_task` and `update_task` accept `deadline` and `isMilestone`; task and schedule outputs describe them. Deliverables are no longer described as milestones.
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [da622c9]
20
+ - @critical-path/core@0.52.0
21
+ - @critical-path/client@0.25.2
22
+
23
+ ## 0.19.0
24
+
25
+ ### Minor Changes
26
+
27
+ - e2f997c: Help agents find and use the right tools.
28
+
29
+ - **Toolsets:** tools are grouped into `core`, `collaboration`, `scheduling`, `analytics` and `guidance`. `createCriticalPathMcpServer`, `registerWebMcpTools`, `useWebMCP` and `createWebMcpState` accept `toolsets` and `readOnly` alongside `tools`; the CLI takes `--toolsets`, `--tools` and `--read-only`. `selectTools()` and `TOOLSETS` are exported.
30
+ - **Server instructions:** the MCP server sends `instructions` on connect (data model, id flow, which tool fits which request, skill index), built from the exposed tools by `buildAgentInstructions()`. WebMCP returns them as `handle.instructions`; `useWebMCP` and `WebMcpState` expose `instructions`.
31
+ - **Agent skills:** six bundled playbooks (`plan-project`, `triage-tasks`, `analyze-schedule`, `report-status`, `plan-capacity`, `investigate-task`) in the Agent Skills `SKILL.md` format. Agents load them with the new `get_skill` tool or the `criticalpath://skills/{name}` resources; `npx @critical-path/mcp skills install` writes them to `.claude/skills`. `SKILLS` and `getSkill()` are exported and the files ship in the package.
32
+ - **Descriptions** for every tool say when to use it, what it returns and which sibling to use instead; every argument is described. Unit tests lint descriptions and skills, and `pnpm --filter @critical-path/mcp eval:tools` measures tool choice with Claude.
33
+ - **Structured results:** every tool declares an `outputSchema` and returns `structuredContent`. Errors carry recovery hints (for example, find valid ids with `list_tasks`).
34
+ - **Annotations:** tools send `readOnlyHint`, `destructiveHint`, `idempotentHint` and `openWorldHint`.
35
+ - `useWebMCP` no longer re-registers its tools on every render when `tools` is passed as an inline array.
36
+
37
+ **BREAKING:** `list_projects`, `list_deliverables` and `list_comments` return `{ projects }`, `{ deliverables }` and `{ comments }` instead of arrays. Lookups that find nothing throw instead of returning `null`. Unknown names in `tools` throw. `ToolDefinition.annotations` uses the standard MCP names (`requiresConfirmation` is now `destructiveHint`), and `defineTool` requires `toolset` and `outputZodSchema`. See UPGRADING.md.
38
+ - 202a61d: Agents can now order work. New `add_dependency` and `remove_dependency` tools (core toolset) make a task wait for another, identified by the two task ids; adding an existing link returns it, a link that would form a loop is refused with a recovery hint, and removing a missing link returns `{ removed: 0 }`. `get_task` takes `includeDependencies: true` to return `dependencies: { dependsOn, dependents }` with each linked task's id, title, status and link type. The `plan-project` skill now creates the dependencies in its plan instead of asking the user to add them, and `analyze-schedule` and `investigate-task` read them from `get_task`. Hosts that expose the `core` toolset get the two new tools.
39
+
3
40
  ## 0.18.1
4
41
 
5
42
  ### Patch Changes
package/README.md CHANGED
@@ -44,6 +44,12 @@ npx @critical-path/mcp --api http://localhost:3000/api/critical-path
44
44
 
45
45
  # Temporary in-memory store (for testing)
46
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
47
53
  ```
48
54
 
49
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.
@@ -87,7 +93,8 @@ const engine = new CriticalPathEngine({
87
93
 
88
94
  const server = createCriticalPathMcpServer({
89
95
  engine,
90
- name: 'my-project-pm'
96
+ name: 'my-project-pm',
97
+ toolsets: ['core', 'collaboration', 'guidance'] // optional; default: every tool
91
98
  });
92
99
 
93
100
  await startStdioServer(server);
@@ -106,8 +113,9 @@ import { useWebMCP } from '@critical-path/react';
106
113
 
107
114
  export function ProjectDashboard({ projectId }: { projectId: string }) {
108
115
  // Automatically registers tools scoped to the active project
109
- // and cleans up on unmount or project change via AbortController
110
- const { registered, tools } = useWebMCP({
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({
111
119
  projectId,
112
120
  tools: ['create_task', 'list_tasks', 'update_task', 'add_comment']
113
121
  });
@@ -162,28 +170,64 @@ handle.unregister();
162
170
 
163
171
  ## 🛠️ Supported Tools
164
172
 
165
- | Tool Name | Description | Key Parameters |
166
- | :--- | :--- | :--- |
167
- | `list_projects` | List all projects in the workspace | `{}` |
168
- | `get_project` | Get project details by ID | `{ id }` |
169
- | `create_project` | Create a new project workspace | `{ name, description?, key? }` |
170
- | `list_tasks` | List tasks with filters, paginated (returns `{ tasks, nextCursor }`) | `{ projectId?, status?, priority?, assigneeId?, iterationId?, deliverableId?, containerId?, parentId? ('none' = top-level), limit?, cursor? }` |
171
- | `get_task` | Get single task details | `{ id }` |
172
- | `create_task` | Create a new task (auto-scoped in WebMCP) | `{ projectId?, title, description?, priority?, status?, estimatedHours?, allocation? }` |
173
- | `update_task` | Update task status, priority, or fields | `{ id, title?, status?, priority?, assigneeId?, allocation? }` |
174
- | `delete_task` | Delete a task (requires confirmation) | `{ id }` |
175
- | `list_deliverables` | List project milestone deliverables | `{ projectId? }` |
176
- | `create_deliverable` | Create a milestone deliverable | `{ projectId?, title, dueDate? }` |
177
- | `list_comments` | Retrieve task comments | `{ taskId }` |
178
- | `add_comment` | Post a comment to a task (authored by the server's actor) | `{ taskId, content }` |
179
- | `calculate_critical_path` | Calculate CPM schedule, float/slack & bottleneck tasks (`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? }` |
180
- | `calculate_portfolio_critical_path` | Critical path across several projects (default: all readable), sharing people and teams when levelling | `{ projectIds?, projectOrder?, includeHiddenWork?, calendars?, levelResources?, levelingPriority?, effort? }` |
181
- | `get_timeline_ladder` | Multi-scale Ladder of Abstraction (macro/standard/concrete) | `{ projectId?, level?, containerId?, iterationId? }` |
182
- | `get_task_ladder` | Single-task ladder view connecting phase, CPM Gantt, and concrete evidence | `{ taskId }` |
183
-
184
- Each tool's JSON `inputSchema` is generated from its zod schema with `defineTool`, so what the model sees always matches what is enforced. Tool arguments are validated against each tool's zod schema 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`).
185
-
186
- **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. When you pass `tools: [...]` to `createCriticalPathMcpServer`, tools outside that list are neither listed nor callable. `delete_task` is advertised with the MCP `destructiveHint` annotation.
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?, deadline?, isMilestone? }` |
181
+ | `update_task` | core | Changing status, priority, assignee, estimates, logged hours, deadline | `{ id, title?, status?, priority?, assigneeId?, allocation?, loggedHours?, deadline?, isMilestone? }` |
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 deliverables (outputs that group tasks); returns `{ deliverables }` | `{ projectId? }` |
186
+ | `create_deliverable` | collaboration | An output that several tasks produce | `{ 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.
187
231
 
188
232
  ---
189
233
 
@@ -193,6 +237,7 @@ Each tool's JSON `inputSchema` is generated from its zod schema with `defineTool
193
237
  - `criticalpath://projects`: Live JSON stream of all projects.
194
238
  - `criticalpath://tasks`: Live JSON stream of all tasks.
195
239
  - `criticalpath://tasks/{id}`: Detailed JSON payload of a specific task.
240
+ - `criticalpath://skills/{name}`: A bundled agent skill (markdown).
196
241
 
197
242
  ### Prompts
198
243
  - `summarize_project`: Executive summary of project health, completion rates, and blockers.
@@ -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
  /**
@@ -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;CAChB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAepD;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"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/bin/args.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,OAAO,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,WAAqB,EAAE,GAAuC;IAC5F,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,GAAG,CAAC,uBAAuB,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,CAAC,uBAAuB,EAAE,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,4BAA4B,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAChH,CAAC"}
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);
@@ -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;AAEzE,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bb,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,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,CAAC,CAAC;QAChF,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,CAAC,CAAC;QACnF,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,CAAC,CAAC;QACrF,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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -1,4 +1,6 @@
1
1
  export * from './tools/definitions.js';
2
+ export * from './tools/instructions.js';
3
+ export * from './skills/index.js';
2
4
  export * from './server/index.js';
3
5
  export * from './web/index.js';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,4 +1,6 @@
1
1
  export * from './tools/definitions.js';
2
+ export * from './tools/instructions.js';
3
+ export * from './skills/index.js';
2
4
  export * from './server/index.js';
3
5
  export * from './web/index.js';
4
6
  //# sourceMappingURL=index.js.map
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"}
@@ -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;AAMhE,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,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAyF,CAAC;AAE1H,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,CAsPzF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE"}
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"}
@@ -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 { ALL_TOOLS, parseToolArgs } from '../tools/definitions.js';
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
- annotations: {
40
- title: tool.title,
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 tool.execute(parseToolArgs(tool, args), target);
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];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Skill } from './index.js';
2
+ export declare const SKILL_CATALOG: Skill[];
3
+ //# sourceMappingURL=catalog.generated.d.ts.map
@@ -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"}