@kaddo/mcp 3.100.0 → 3.102.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,7 +34,7 @@ directory set via the `KADDO_PROJECT_DIR` environment variable).
34
34
  }
35
35
  ```
36
36
 
37
- `cwd` must point to the project that contains `.kaddo/`, `knowledge/` and (optionally) `external/`.
37
+ `cwd` must point to the project that contains `.kaddo/` and `knowledge/`.
38
38
 
39
39
  ## Resources
40
40
 
@@ -47,7 +47,7 @@ directory set via the `KADDO_PROJECT_DIR` environment variable).
47
47
  | `kaddo://graph-hints` | `.kaddo/graph-hints.md` + `.json` | weak/missing relationships |
48
48
  | `kaddo://work-items` | `knowledge/delivery/work-items/` | summarized Work Items |
49
49
  | `kaddo://roadmap` | `knowledge/delivery/roadmap.md` | delivery roadmap |
50
- | `kaddo://capsules` | `.kaddo/external.yml` + `external/` | external Knowledge Capsules |
50
+ | `kaddo://capsules` | `.kaddo/external.yml` + `knowledge/external/` | external Knowledge Capsules |
51
51
  | `kaddo://agents` | `knowledge/agents/` | installed agent prompts |
52
52
  | `kaddo://skills` | `knowledge/skills/` | installed reusable skills (empty if none) |
53
53
  | `kaddo://skills/<id>` | `knowledge/skills/<id>/skill.md` | one reusable skill |
@@ -66,7 +66,7 @@ directory set via the `KADDO_PROJECT_DIR` environment variable).
66
66
 
67
67
  When a derived artifact is missing or stale, these tools regenerate it in place using the same core
68
68
  logic as the CLI — so the agent never has to leave the flow. They are deterministic (no LLM) and
69
- **only write under `.kaddo/`**; they never touch `knowledge/`, `src/`, `external/`,
69
+ **only write under `.kaddo/`**; they never touch `knowledge/`, `src/`,
70
70
  `.kaddo/external.yml` or git.
71
71
 
72
72
  | Tool | Writes | CLI equivalent |
@@ -78,7 +78,7 @@ logic as the CLI — so the agent never has to leave the flow. They are determin
78
78
  | `kaddo_generate_capsule_draft` | `.kaddo/exports/<project>.capsule.md` + `.json` | `kaddo capsule export` |
79
79
 
80
80
  `kaddo_generate_capsule_draft` writes a **draft only** — it never registers/imports a capsule
81
- (`external/`, `.kaddo/external.yml` stay untouched; use the CLI `kaddo capsule add` for that).
81
+ (`knowledge/external/`, `.kaddo/external.yml` stay untouched; use the CLI `kaddo capsule add` for that).
82
82
 
83
83
  Each tool returns `{ status, files_written, summary, warnings, next_suggested_resources }`. All
84
84
  writes pass through a central allowlist (`assertMcpDerivedWritePath`) that blocks any path outside
@@ -103,7 +103,7 @@ regenerate artifacts **only under `.kaddo/`**; everything else is read-only.
103
103
 
104
104
  ## Security
105
105
 
106
- The server only reads `.kaddo/`, `knowledge/` and `external/`. It never reads `src/`, `.git/`,
106
+ The server only reads `.kaddo/` and `knowledge/`. It never reads `src/`, `.git/`,
107
107
  `node_modules/`, `dist/`, `build/` or `coverage/`, blocks path traversal, and never exposes
108
108
  secrets, tokens, env values, source code or PII.
109
109
 
package/dist/index.js CHANGED
@@ -96,7 +96,7 @@ import matter from "gray-matter";
96
96
  import fs from "fs";
97
97
  import path from "path";
98
98
  import { parse as parseYaml } from "yaml";
99
- var ALLOWED_ROOTS = [".kaddo", "knowledge", "external"];
99
+ var ALLOWED_ROOTS = [".kaddo", "knowledge"];
100
100
  var KaddoMcpError = class extends Error {
101
101
  };
102
102
  function projectRoot() {
@@ -391,7 +391,7 @@ import matter8 from "gray-matter";
391
391
  // ../cli/src/core/config.ts
392
392
  import { z } from "zod";
393
393
  import { parse as parseYaml2 } from "yaml";
394
- var PROJECT_STATES = ["new", "pre-ai", "legacy"];
394
+ var PROJECT_STATES = ["new", "pre-ai", "legacy", "ai-assisted"];
395
395
  var TEAM_SIZES = ["indie", "small", "medium", "enterprise"];
396
396
  var REPOSITORY_STRUCTURES = ["monorepo", "multirepo"];
397
397
  var PROJECT_LANGUAGES = ["en", "es"];
@@ -414,7 +414,7 @@ var ConfigError = class extends Error {
414
414
  this.name = "ConfigError";
415
415
  }
416
416
  };
417
- var projectStateSchema = z.enum(["new", "pre-ai", "legacy"], {
417
+ var projectStateSchema = z.enum(["new", "pre-ai", "legacy", "ai-assisted"], {
418
418
  errorMap: () => ({
419
419
  message: `project.state must be one of: ${PROJECT_STATES.join(", ")}`
420
420
  })
@@ -462,7 +462,10 @@ var configSchema = z.object({
462
462
  }).passthrough().optional(),
463
463
  knowledge: z.unknown().optional(),
464
464
  guard: z.unknown().optional(),
465
- scan: z.unknown().optional()
465
+ scan: z.unknown().optional(),
466
+ telemetry: z.object({
467
+ enabled: z.boolean().default(false)
468
+ }).passthrough().optional()
466
469
  }).passthrough();
467
470
  function configPathFor(dir) {
468
471
  return join(dir, ".kaddo", "config.yml");
@@ -10498,7 +10501,7 @@ var RESOURCES = [
10498
10501
  {
10499
10502
  uri: "kaddo://capsules",
10500
10503
  name: "Kaddo knowledge capsules",
10501
- description: "External Knowledge Capsules from .kaddo/external.yml and external/.",
10504
+ description: "External Knowledge Capsules from .kaddo/external.yml and knowledge/external/.",
10502
10505
  mimeType: "application/json",
10503
10506
  read: (root) => [
10504
10507
  {
@@ -10826,7 +10829,7 @@ function isFile2(p2) {
10826
10829
  function join3(...parts) {
10827
10830
  return path3.join(...parts);
10828
10831
  }
10829
- var PROJECT_STATES2 = ["new", "pre-ai", "legacy"];
10832
+ var PROJECT_STATES2 = ["new", "pre-ai", "legacy", "ai-assisted"];
10830
10833
  var TEAM_SIZES2 = ["indie", "small", "medium", "enterprise"];
10831
10834
  var REPOSITORY_STRUCTURES2 = ["monorepo", "multirepo"];
10832
10835
  var PROJECT_LANGUAGES2 = ["en", "es"];
@@ -10842,7 +10845,7 @@ var ConfigError2 = class extends Error {
10842
10845
  this.name = "ConfigError";
10843
10846
  }
10844
10847
  };
10845
- var projectStateSchema2 = z3.enum(["new", "pre-ai", "legacy"], {
10848
+ var projectStateSchema2 = z3.enum(["new", "pre-ai", "legacy", "ai-assisted"], {
10846
10849
  errorMap: () => ({
10847
10850
  message: `project.state must be one of: ${PROJECT_STATES2.join(", ")}`
10848
10851
  })
@@ -10890,7 +10893,10 @@ var configSchema2 = z3.object({
10890
10893
  }).passthrough().optional(),
10891
10894
  knowledge: z3.unknown().optional(),
10892
10895
  guard: z3.unknown().optional(),
10893
- scan: z3.unknown().optional()
10896
+ scan: z3.unknown().optional(),
10897
+ telemetry: z3.object({
10898
+ enabled: z3.boolean().default(false)
10899
+ }).passthrough().optional()
10894
10900
  }).passthrough();
10895
10901
  function configPathFor2(dir) {
10896
10902
  return join3(dir, ".kaddo", "config.yml");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaddo/mcp",
3
- "version": "3.100.0",
3
+ "version": "3.102.0",
4
4
  "description": "MCP server for Kaddo project knowledge: read-only resources/tools/prompts plus safe derived generation under .kaddo/.",
5
5
  "license": "MIT",
6
6
  "repository": {