pcl-mcp 0.1.4 → 0.2.3

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 CHANGED
@@ -4,6 +4,36 @@
4
4
 
5
5
  Instead of re-explaining your personas, journeys, and architecture decisions every session, PCL serves them via MCP on demand. Any agent (Claude Code, Cursor, Windsurf) queries exactly what it needs, when it needs it.
6
6
 
7
+ ## Quick Start
8
+
9
+ ```bash
10
+ npm install pcl-mcp
11
+ npx pcl init
12
+ # add MCP config (see Agent Configuration below), then start a new agent session
13
+ ```
14
+
15
+ ## Why PCL?
16
+
17
+ **Without PCL**, every coding session starts from scratch:
18
+ - Agents can't find your product docs unless you paste them into the prompt
19
+ - Context windows get bloated with irrelevant information
20
+ - You re-explain personas, business rules, and specs every single time
21
+ - No guardrails — agents make assumptions that violate your business rules
22
+
23
+ **With PCL**, agents load product knowledge on demand:
24
+ - Progressive disclosure — session start costs ~600 tokens (product summary + critical rules)
25
+ - Hybrid search (BM25 + semantic) finds the right context without you guiding it
26
+ - Live reindex on file save — edit a spec, agent sees it immediately
27
+ - Structured Zod schemas — agents get predictable, parseable frontmatter every time
28
+
29
+ ### Concrete use case
30
+
31
+ You ask your agent: *"Build the checkout flow"*
32
+
33
+ **Without PCL:** You paste your billing rules doc, the persona file, the journey map, and the spec into the chat. 4,000 tokens before the agent writes a line of code. Next session, you do it again.
34
+
35
+ **With PCL:** The agent auto-loads critical billing rules at session start (~200 tokens). When it starts the checkout feature, it pulls the relevant persona, fetches the journey steps, and checks the spec's acceptance criteria — all on-demand, only what's needed. Every session, automatically.
36
+
7
37
  ## Stack
8
38
 
9
39
  | Layer | Technology | Why |
@@ -16,14 +46,37 @@ Instead of re-explaining your personas, journeys, and architecture decisions eve
16
46
  | Validation | Zod schemas | Agents rely on predictable frontmatter |
17
47
  | File watching | Chokidar v4 | Live reindex on save |
18
48
 
49
+ ## Prerequisites
50
+
51
+ - **Node.js >= 22** (required — PCL uses modern Node APIs)
52
+
19
53
  ## Install
20
54
 
21
55
  ```bash
22
56
  npm install pcl-mcp
23
- npx pcl init # scaffold /product folder
24
- npm run serve # start MCP server
57
+ npx pcl init # creates ./product with templates
58
+ ```
59
+
60
+ Also available on GitHub Packages as `@michaelgorski/pcl-mcp`.
61
+
62
+ ## Import existing docs
63
+
64
+ If you already have markdown documentation in your repo, PCL can scan, classify, and import it automatically:
65
+
66
+ ```bash
67
+ npx pcl init --scan # scan + import existing docs, then scaffold remaining templates
68
+ npx pcl init --scan-only # scan + import only, skip template scaffolding
25
69
  ```
26
70
 
71
+ The scanner:
72
+ - Walks your repo for `.md` files (skips `node_modules`, `dist`, `.git`, etc.)
73
+ - Classifies each file by directory name, filename, frontmatter keys, and content patterns
74
+ - Transforms matching files into PCL format with proper frontmatter
75
+ - Copies them into the `product/` folder under the correct category
76
+ - Skips categories that already have imported files (no duplicate templates)
77
+
78
+ Supported classifications: **persona**, **journey**, **spec**, **decision**, **domain**, **product**
79
+
27
80
  ## Agent configuration
28
81
 
29
82
  ### Claude Code — `.claude/mcp.json`
@@ -48,6 +101,18 @@ npm run serve # start MCP server
48
101
  }
49
102
  ```
50
103
 
104
+ ### Windsurf — MCP config
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "pcl": {
109
+ "command": "npx",
110
+ "args": ["pcl-mcp", "serve"]
111
+ }
112
+ }
113
+ }
114
+ ```
115
+
51
116
  ## File structure
52
117
 
53
118
  ```
@@ -68,17 +133,25 @@ npm run serve # start MCP server
68
133
 
69
134
  ## Tools available to agents
70
135
 
71
- | Tool | When to use |
72
- |---|---|
73
- | `pcl_product_summary` | Always call at session start |
74
- | `pcl_get_domain("*critical")` | Always load hard business rules |
75
- | `pcl_get_persona(id)` | Before any user-facing feature |
76
- | `pcl_get_journey(id)` | Before any user flow code |
77
- | `pcl_get_spec(id)` | Before implementing a feature |
78
- | `pcl_get_decision(id)` | Before architectural decisions |
79
- | `pcl_list(type)` | Discover what exists |
80
- | `pcl_search(query)` | When you don't know the ID |
81
- | `pcl_related(id)` | Discover connected context |
136
+ | Tool | Params | Description |
137
+ |---|---|---|
138
+ | `pcl_product_summary` | — | Load the product north-star document. Call at session start. |
139
+ | `pcl_get_persona(id)` | `id`: persona ID | Get a user persona by ID. Call before any user-facing feature. |
140
+ | `pcl_get_journey(id)` | `id`: journey ID | Get a user journey by ID including step-by-step detail. |
141
+ | `pcl_get_spec(id)` | `id`: spec ID | Get a feature spec by ID including acceptance criteria. |
142
+ | `pcl_get_decision(id)` | `id`: decision ID | Get an architecture decision record (ADR) by ID. |
143
+ | `pcl_get_domain(id)` | `id`: domain ID or `"*critical"` | Get domain rules by ID. Pass `"*critical"` to load all critical rules. |
144
+ | `pcl_list({ type })` | `type`: `"personas"` \| `"journeys"` \| `"specs"` \| `"decisions"` \| `"domain"` | List all files of a given type with IDs, titles, and summaries. |
145
+ | `pcl_search({ query })` | `query`, `mode?` (`"hybrid"` \| `"semantic"` \| `"keyword"`), `types?`, `top_k?` | Hybrid semantic + keyword search across all product files. |
146
+ | `pcl_related(id)` | `id`: source file ID, `top_k?` | Find files semantically related to a given file ID. |
147
+
148
+ ## Prompts & Resources
149
+
150
+ In addition to tools, PCL exposes MCP prompts and resources:
151
+
152
+ **Prompt: `session-start`** — Returns a product summary + all critical domain rules. Agents can call this at the start of every coding session to orient themselves without loading every file.
153
+
154
+ **Resources: `pcl://files/{type}/{id}`** — Each indexed file is available as an MCP resource. Agents can browse and read individual files directly via the resource URI (e.g., `pcl://files/persona/example-user`).
82
155
 
83
156
  ## How hybrid search works
84
157
 
package/dist/bin/pcl.js CHANGED
@@ -1,9 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  // bin/pcl.ts
3
3
  // CLI: pcl init | pcl serve | pcl status
4
- import { mkdir, writeFile, readFile, access } from "node:fs/promises";
4
+ import { mkdir, writeFile, readFile, readdir, access } from "node:fs/promises";
5
5
  import { join, resolve } from "node:path";
6
- import { constants } from "node:fs";
6
+ import { constants, existsSync } from "node:fs";
7
+ import { createRequire } from "node:module";
8
+ const require = createRequire(import.meta.url);
9
+ const { version } = (() => {
10
+ try {
11
+ return require("../package.json");
12
+ }
13
+ catch {
14
+ return require("../../package.json");
15
+ }
16
+ })();
7
17
  const cmd = process.argv[2];
8
18
  const args = process.argv.slice(3);
9
19
  const hasFlag = (flag) => args.includes(flag);
@@ -261,23 +271,38 @@ async function init() {
261
271
 
262
272
  This project uses PCL for product knowledge. An MCP server is running (see mcp config).
263
273
 
274
+ **IMPORTANT:** PCL contains ALL product knowledge — personas, journeys, specs, decisions, and domain rules.
275
+ Read ALL categories thoroughly. Do not skip any folder or assume content is irrelevant.
276
+
264
277
  ### At the start of every coding session:
265
- 1. Call \`pcl_product_summary\` — orient yourself
278
+ 1. Call \`pcl_product_summary\` — orient yourself with the product north star
266
279
  2. Call \`pcl_get_domain("*critical")\` — load non-violable business rules
280
+ 3. Call \`pcl_list({ type: "decisions" })\` — review architecture decisions
281
+ 4. Call \`pcl_list({ type: "personas" })\` — know who you are building for
282
+ 5. Call \`pcl_list({ type: "specs" })\` — see what features are defined
267
283
 
268
284
  ### Before working on any user-facing feature:
269
- - Call \`pcl_list({ type: "personas" })\` then \`pcl_get_persona(id)\` for the relevant persona
270
- - Call \`pcl_list({ type: "journeys" })\` then \`pcl_get_journey(id)\` for the relevant journey
271
- - Call \`pcl_list({ type: "specs" })\` then \`pcl_get_spec(id)\` for the feature spec if it exists
285
+ - Call \`pcl_get_persona(id)\` for EVERY relevant persona — read full detail
286
+ - Call \`pcl_get_journey(id)\` for the relevant user journey — follow every step
287
+ - Call \`pcl_get_spec(id)\` for the feature spec check all acceptance criteria
288
+ - Call \`pcl_get_decision(id)\` for any architecture decision that affects the feature
289
+
290
+ ### Before making any architectural or technical choice:
291
+ - Call \`pcl_list({ type: "decisions" })\` then \`pcl_get_decision(id)\` for relevant ADRs
292
+ - Call \`pcl_get_domain("*critical")\` if the change touches billing, auth, or data models
293
+ - Call \`pcl_search({ query: "your topic" })\` to find related product knowledge
272
294
 
273
- ### When unsure about product decisions:
274
- - Call \`pcl_search({ query: "your question here" })\` to find relevant product knowledge
275
- - Call \`pcl_get_decision(id)\` for architecture decisions affecting your current task
295
+ ### When exploring or unsure:
296
+ - Call \`pcl_search({ query: "your question" })\` hybrid semantic + keyword search
297
+ - Call \`pcl_related(id)\` discover connected context
298
+ - Call \`pcl_list({ type: "domain" })\` then \`pcl_get_domain(id)\` — read ALL domain rules
276
299
 
277
300
  ### NEVER:
278
301
  - Make assumptions about who the user is — always load the persona
279
- - Violate any rule in domain/core-rules.md
302
+ - Skip loading decisions before making architectural choices
303
+ - Violate any rule in domain rules (critical or otherwise)
280
304
  - Build features not covered by an accepted spec without asking first
305
+ - Assume you know the product context — always query PCL first
281
306
  `;
282
307
  try {
283
308
  await access(claudeMd, constants.F_OK);
@@ -302,26 +327,123 @@ This project uses PCL for product knowledge. An MCP server is running (see mcp c
302
327
  console.log(" 1. Edit product/product.md with your actual product details");
303
328
  console.log(" 2. Rename and fill in the example persona, journey, and spec files");
304
329
  console.log(" 3. Add your MCP server config (see README)");
305
- console.log(" 4. npm run serve\n");
330
+ console.log(" 4. Start a new agent session — PCL loads automatically\n");
306
331
  }
307
- // ─── Router ───────────────────────────────────────────────────────────────────
308
- switch (cmd) {
309
- case "init":
310
- init().catch(console.error);
311
- break;
312
- case "serve":
313
- // Delegate to the server module
314
- import("../src/server.js").catch(console.error);
315
- break;
316
- default:
317
- console.log(`
318
- pcl — Product Context Layer CLI
332
+ // ─── Status ──────────────────────────────────────────────────────────────────
333
+ /** Count .md files on disk per subdirectory (no DB needed) */
334
+ async function countDiskFiles(productDir) {
335
+ const counts = {
336
+ personas: 0, journeys: 0, specs: 0, decisions: 0, domain: 0,
337
+ };
338
+ const hasProduct = existsSync(join(productDir, "product.md"));
339
+ for (const dir of Object.keys(counts)) {
340
+ const dirPath = join(productDir, dir);
341
+ if (!existsSync(dirPath))
342
+ continue;
343
+ try {
344
+ const entries = await readdir(dirPath);
345
+ counts[dir] = entries.filter((e) => e.endsWith(".md") && !e.startsWith(".")).length;
346
+ }
347
+ catch { /* dir unreadable */ }
348
+ }
349
+ return { product: hasProduct, counts };
350
+ }
351
+ function resolveStatusDir() {
352
+ // Support --product-dir flag (same as serve)
353
+ const dirFlagIdx = args.indexOf("--product-dir");
354
+ if (dirFlagIdx !== -1 && args[dirFlagIdx + 1]) {
355
+ return resolve(args[dirFlagIdx + 1]);
356
+ }
357
+ const candidates = [
358
+ join(process.cwd(), "product"),
359
+ join(process.cwd(), ".product"),
360
+ ];
361
+ return candidates.find((c) => existsSync(c)) ?? candidates[0];
362
+ }
363
+ async function status() {
364
+ const productDir = resolveStatusDir();
365
+ if (!existsSync(productDir)) {
366
+ console.log(`\nNo product directory found at ${productDir}`);
367
+ console.log(`Run 'pcl init' to scaffold the product folder.\n`);
368
+ return;
369
+ }
370
+ // Always show disk file counts (works without server having run)
371
+ const disk = await countDiskFiles(productDir);
372
+ console.log("\nPCL Status");
373
+ console.log(` Product dir: ${productDir}`);
374
+ if (disk.product) {
375
+ console.log(` Product file: ✓ product.md`);
376
+ }
377
+ else {
378
+ console.log(` Product file: ✗ product.md not found`);
379
+ }
380
+ const typeMap = {
381
+ personas: "persona", journeys: "journey", specs: "spec",
382
+ decisions: "decision", domain: "domain",
383
+ };
384
+ // Check if DB exists (server has been run at least once)
385
+ const dbPath = join(productDir, ".pcl.db");
386
+ const hasDB = existsSync(dbPath);
387
+ let totalDisk = disk.product ? 1 : 0;
388
+ let totalIndexed = 0;
389
+ let totalEmbedded = 0;
390
+ // If DB exists, also show indexed/embedded counts
391
+ let dbData = null;
392
+ if (hasDB) {
393
+ const { openDB, closeDB, getProductFile, listByType } = await import("../src/db.js");
394
+ const db = openDB(productDir);
395
+ dbData = {};
396
+ const product = getProductFile(db);
397
+ if (product) {
398
+ totalIndexed++;
399
+ if (product.embedding.length > 0)
400
+ totalEmbedded++;
401
+ }
402
+ for (const [plural, type] of Object.entries(typeMap)) {
403
+ const files = listByType(db, type);
404
+ const embedded = files.filter((f) => f.embedding.length > 0).length;
405
+ dbData[plural] = { indexed: files.length, embedded };
406
+ totalIndexed += files.length;
407
+ totalEmbedded += embedded;
408
+ }
409
+ closeDB();
410
+ }
411
+ console.log("\n Files by type:");
412
+ for (const dir of Object.keys(disk.counts)) {
413
+ const onDisk = disk.counts[dir];
414
+ totalDisk += onDisk;
415
+ const label = dir.padEnd(12);
416
+ if (dbData && dbData[dir]) {
417
+ const { indexed, embedded } = dbData[dir];
418
+ console.log(` ${label} ${onDisk} on disk, ${indexed} indexed, ${embedded} embedded`);
419
+ }
420
+ else {
421
+ console.log(` ${label} ${onDisk} on disk`);
422
+ }
423
+ }
424
+ if (dbData) {
425
+ console.log(`\n Total: ${totalDisk} on disk, ${totalIndexed} indexed, ${totalEmbedded} embedded`);
426
+ }
427
+ else {
428
+ console.log(`\n Total: ${totalDisk} on disk`);
429
+ console.log(`\n Note: No index found. Start the MCP server to index files and generate embeddings.`);
430
+ }
431
+ }
432
+ // ─── Help text ───────────────────────────────────────────────────────────────
433
+ function printHelp() {
434
+ console.log(`
435
+ pcl — Product Context Layer CLI (v${version})
319
436
 
320
437
  Commands:
321
438
  init [dir] Scaffold /product folder with templates (default: ./product)
322
439
  init --scan [dir] Scan repo for existing .md files, import, then scaffold remaining templates
323
440
  init --scan-only [dir] Scan and import only, don't scaffold templates
324
441
  serve Start the MCP server (reads --product-dir flag)
442
+ status Show file counts and embedding coverage (reads --product-dir flag)
443
+
444
+ Options:
445
+ --help, -h Show this help text
446
+ --version, -v Show version number
325
447
 
326
448
  Examples:
327
449
  npx pcl-mcp init
@@ -329,6 +451,28 @@ Examples:
329
451
  npx pcl-mcp init --scan-only
330
452
  npx pcl-mcp init ./my-product-docs
331
453
  npx pcl-mcp serve --product-dir ./product
454
+ npx pcl-mcp status
332
455
  `);
333
456
  }
457
+ // ─── Router ───────────────────────────────────────────────────────────────────
458
+ switch (cmd) {
459
+ case "init":
460
+ init().catch(console.error);
461
+ break;
462
+ case "serve":
463
+ // Delegate to the server module
464
+ import("../src/server.js").catch(console.error);
465
+ break;
466
+ case "status":
467
+ status().catch(console.error);
468
+ break;
469
+ case "--version":
470
+ case "-v":
471
+ console.log(version);
472
+ break;
473
+ case "--help":
474
+ case "-h":
475
+ default:
476
+ printHelp();
477
+ }
334
478
  //# sourceMappingURL=pcl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pcl.js","sourceRoot":"","sources":["../../bin/pcl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pcl.js","sourceRoot":"","sources":["../../bin/pcl.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,19 @@ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mc
15
15
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
16
16
  import { resolve, join } from "node:path";
17
17
  import { existsSync } from "node:fs";
18
+ import { createRequire } from "node:module";
18
19
  import { openDB, closeDB, getProductFile, getCritical, getFileById, listByType } from "./db.js";
19
- import { fullIndex, startWatcher } from "./indexer.js";
20
+ import { fullIndex, startWatcher, backfillEmbeddings } from "./indexer.js";
20
21
  import { handleTool, TOOL_SCHEMAS, renderFile } from "./tools.js";
22
+ const require = createRequire(import.meta.url);
23
+ const { version } = (() => {
24
+ try {
25
+ return require("../package.json");
26
+ }
27
+ catch {
28
+ return require("../../package.json");
29
+ }
30
+ })();
21
31
  // ─── Resolve product dir ───────────────────────────────────────────────────────
22
32
  function resolveProductDir() {
23
33
  const argIdx = process.argv.indexOf("--product-dir");
@@ -53,6 +63,13 @@ async function main() {
53
63
  if (result.errors.length > 0) {
54
64
  log(`Schema errors:\n ${result.errors.join("\n ")}`);
55
65
  }
66
+ if (result.total === 0) {
67
+ log(`⚠ No product files found. Run 'pcl init' to scaffold the product folder.`);
68
+ }
69
+ // Backfill embeddings for files that failed embedding previously
70
+ const backfilled = await backfillEmbeddings(db);
71
+ if (backfilled > 0)
72
+ log(`Backfilled ${backfilled} embeddings`);
56
73
  // Start file watcher for live updates
57
74
  const stopWatcher = await startWatcher(db, productDir, (event, path) => {
58
75
  log(`${event}: ${path}`);
@@ -60,7 +77,7 @@ async function main() {
60
77
  // ─── MCP server ─────────────────────────────────────────────────────────────
61
78
  const server = new McpServer({
62
79
  name: "pcl-mcp",
63
- version: "0.1.0",
80
+ version,
64
81
  });
65
82
  // ─── Tools ──────────────────────────────────────────────────────────────────
66
83
  for (const [name, def] of Object.entries(TOOL_SCHEMAS)) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pcl-mcp",
3
- "version": "0.1.4",
3
+ "version": "0.2.3",
4
4
  "description": "Product Context Layer — MCP server for AI-assisted product development",
5
5
  "type": "module",
6
6
  "main": "./dist/src/server.js",
@@ -19,7 +19,9 @@
19
19
  "serve": "node dist/src/server.js",
20
20
  "init": "tsx bin/pcl.ts init",
21
21
  "typecheck": "tsc --noEmit",
22
- "prepare": "tsc"
22
+ "prepare": "tsc",
23
+ "publish:npm": "npm publish --registry https://registry.npmjs.org",
24
+ "publish:github": "npm pkg set name='@michaelgorski/pcl-mcp' && npm publish --registry https://npm.pkg.github.com && npm pkg set name='pcl-mcp'"
23
25
  },
24
26
  "keywords": [
25
27
  "mcp",
@@ -50,6 +52,10 @@
50
52
  "tsx": "^4.19.0",
51
53
  "typescript": "^5.8.0"
52
54
  },
55
+ "publishConfig": {
56
+ "registry": "https://registry.npmjs.org",
57
+ "access": "public"
58
+ },
53
59
  "engines": {
54
60
  "node": ">=22.0.0"
55
61
  }