@gwdn/nexus-mcp 0.10.2 → 0.10.4

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
@@ -48,7 +48,7 @@ Nexus API (nexus.gatewarden.eu)
48
48
  Supabase (PostgreSQL + RLS)
49
49
  ```
50
50
 
51
- ### Layer 1 -- Knowledge Access (5 tools)
51
+ ### Layer 1 -- Knowledge Access (6 tools)
52
52
 
53
53
  | Tool | Description |
54
54
  |------|-------------|
@@ -57,18 +57,19 @@ Supabase (PostgreSQL + RLS)
57
57
  | `kb_get` | Retrieve a specific entity by type and ID |
58
58
  | `kb_related` | Find entities related to a given entity |
59
59
  | `project_list` | List accessible projects |
60
+ | `project_update` | Patch a project's readme and/or description (partial update) |
60
61
 
61
- ### Layer 2 -- Coordination (24 tools)
62
+ ### Layer 2 -- Coordination (48 tools)
62
63
 
63
64
  | Group | Tools |
64
65
  |-------|-------|
65
- | **Projects** | `project_update` |
66
- | **Sessions** | `session_create`, `session_close`, `session_list`, `session_append` |
67
- | **Tasks** | `task_create`, `task_update`, `task_note`, `task_delete`, `task_list` |
68
66
  | **Vault Letters** | `vl_create`, `vl_reply`, `vl_inbox`, `vl_outbox`, `vl_ack` |
67
+ | **Dispatches** | `dispatch_create`, `dispatch_reply`, `dispatch_inbox`, `dispatch_outbox`, `dispatch_ack`, `dispatch_assign`, `dispatch_forward`, `dispatch_resolve`, `dispatch_close`, `dispatch_sweep`, `dispatch_get`, `dispatch_related` |
68
+ | **Tasks** | `task_create`, `task_update`, `task_note`, `task_list`, `task_delete` |
69
69
  | **Documents** | `doc_ingest`, `doc_list`, `doc_classify`, `doc_update`, `doc_delete` |
70
- | **Skills** | `sk_list`, `sk_get`, `sk_create`, `sk_update`, `sk_activate`, `sk_assign`, `sk_unassign`, `sk_export` |
70
+ | **Sessions** | `session_create`, `session_append`, `session_close`, `session_list` |
71
71
  | **Decision Comments** | `dc_add`, `dc_list` |
72
+ | **Skills** | `sk_list`, `sk_get`, `sk_create`, `sk_update`, `sk_activate`, `sk_assign`, `sk_unassign`, `sk_export` |
72
73
  | **Directives** | `pd_list`, `pd_get`, `pd_create`, `pd_update`, `pd_delete`, `pd_toggle`, `directive_export` |
73
74
 
74
75
  ### Layer 3 -- Governance (3 tools)
@@ -108,6 +109,40 @@ identity and enforces project-scoped RBAC.
108
109
 
109
110
  ## Development
110
111
 
112
+ ### Recommended: Devbox
113
+
114
+ We recommend using [Devbox](https://www.jetify.com/devbox) to get a fully reproducible, isolated development environment with all required tools pre-installed (Node.js 22, git, ripgrep, tmux, lazygit, and more).
115
+
116
+ **Install Devbox** (once, system-wide):
117
+
118
+ ```bash
119
+ curl -fsSL https://get.jetify.com/devbox | bash
120
+ ```
121
+
122
+ **Enter the dev shell:**
123
+
124
+ ```bash
125
+ devbox shell
126
+ ```
127
+
128
+ This drops you into a Nix-managed shell with every tool pinned to the versions declared in `devbox.json`. No global installs, no version drift.
129
+
130
+ **Available Devbox scripts:**
131
+
132
+ | Script | Command | Description |
133
+ |--------|---------|-------------|
134
+ | `dev` | `devbox run dev` | Start MCP server via tsx (watch mode) |
135
+ | `build` | `devbox run build` | Compile TypeScript to `dist/` |
136
+ | `test` | `devbox run test` | Run full test suite |
137
+ | `typecheck` | `devbox run typecheck` | TypeScript type-check only |
138
+ | `validate` | `devbox run validate` | Full pre-commit validation (typecheck + tests) |
139
+ | `check-local` | `devbox run check-local` | Local environment health check |
140
+ | `sec-scan` | `devbox run sec-scan` | Security scan (gitleaks + audit) |
141
+ | `tmux-2w` | `devbox run tmux-2w` | Open 2-window tmux workspace |
142
+ | `tmux-3w` | `devbox run tmux-3w` | Open 3-window tmux workspace |
143
+
144
+ > **Without Devbox**, you can still run commands directly:
145
+
111
146
  ```bash
112
147
  npm install
113
148
  npm run typecheck # TypeScript check
@@ -126,7 +161,7 @@ nexus-mcp/
126
161
  │ ├── auth.ts # Token-based identity resolution via Nexus API
127
162
  │ ├── nexus-api.ts # HTTP client for Nexus API (nexusGet, nexusPost)
128
163
  │ ├── machine-id.ts # Machine identification for session metadata
129
- │ ├── tools/ # 24 tool modules (38 tools total)
164
+ │ ├── tools/ # 27 tool modules (62 tools total)
130
165
  │ └── __tests__/ # 12 test files (127 unit + 34 E2E)
131
166
  ├── LICENSE # Apache-2.0
132
167
  ├── SECURITY.md # Security policy
@@ -14,6 +14,7 @@ export declare const classifyDocumentSchema: {
14
14
  decision_input: "decision_input";
15
15
  reference: "reference";
16
16
  archive: "archive";
17
+ mitigation_report: "mitigation_report";
17
18
  }>;
18
19
  };
19
20
  type ClassifyDocumentArgs = {
@@ -1 +1 @@
1
- {"version":3,"file":"classify-document.d.ts","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,sBAAsB;;;;;;;;;;CAYlC,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;;;;;GAwBhE"}
1
+ {"version":3,"file":"classify-document.d.ts","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,sBAAsB;;;;;;;;;;;CAalC,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;;;;;GAwBhE"}
@@ -16,6 +16,7 @@ export const classifyDocumentSchema = {
16
16
  'decision_input',
17
17
  'reference',
18
18
  'archive',
19
+ 'mitigation_report',
19
20
  ])
20
21
  .describe('New classification for the document'),
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"classify-document.js","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACpE,cAAc,EAAE,CAAC;SACd,IAAI,CAAC;QACJ,cAAc;QACd,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,SAAS;KACV,CAAC;SACD,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAA;AAQD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"classify-document.js","sourceRoot":"","sources":["../../src/tools/classify-document.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACpE,cAAc,EAAE,CAAC;SACd,IAAI,CAAC;QACJ,cAAc;QACd,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,SAAS;QACT,mBAAmB;KACpB,CAAC;SACD,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAA;AAQD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
@@ -13,6 +13,7 @@ export declare const ingestDocumentSchema: {
13
13
  source: z.ZodOptional<z.ZodString>;
14
14
  source_url: z.ZodOptional<z.ZodString>;
15
15
  agent_id: z.ZodOptional<z.ZodString>;
16
+ parent_id: z.ZodOptional<z.ZodString>;
16
17
  };
17
18
  type IngestDocumentArgs = {
18
19
  project_id: string;
@@ -22,6 +23,7 @@ type IngestDocumentArgs = {
22
23
  source_url?: string;
23
24
  user_id: string;
24
25
  agent_id?: string;
26
+ parent_id?: string;
25
27
  };
26
28
  export declare function ingestDocument(args: IngestDocumentArgs): Promise<{
27
29
  content: {
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-document.d.ts","sourceRoot":"","sources":["../../src/tools/ingest-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB;;;;;;;CAahC,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;GA4B5D"}
1
+ {"version":3,"file":"ingest-document.d.ts","sourceRoot":"","sources":["../../src/tools/ingest-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB;;;;;;;;CAoBhC,CAAA;AAED,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;GA6B5D"}
@@ -18,6 +18,11 @@ export const ingestDocumentSchema = {
18
18
  .describe('Source identifier (e.g. "mcp-agent", "research", "session-extract")'),
19
19
  source_url: z.string().url().optional().describe('Source URL if applicable'),
20
20
  agent_id: z.string().max(200).optional().describe('Agent identifier if applicable'),
21
+ parent_id: z
22
+ .string()
23
+ .uuid()
24
+ .optional()
25
+ .describe('UUID of the parent ingest item. Used to create mitigation reports as children of scan reports. Max 1 level of nesting.'),
21
26
  };
22
27
  export async function ingestDocument(args) {
23
28
  const result = await nexusPost('/api/mcp/documents', {
@@ -28,6 +33,7 @@ export async function ingestDocument(args) {
28
33
  source: args.source,
29
34
  source_url: args.source_url,
30
35
  agent_id: args.agent_id,
36
+ parent_id: args.parent_id,
31
37
  });
32
38
  if (!result.ok) {
33
39
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-document.js","sourceRoot":"","sources":["../../src/tools/ingest-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC7E,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACpF,CAAA;AAYD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ingest-document.js","sourceRoot":"","sources":["../../src/tools/ingest-document.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC7E,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE,CACtE;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACnF,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;CACJ,CAAA;AAaD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE;QACnD,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;SACtE;KACF,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gwdn/nexus-mcp",
3
- "version": "0.10.2",
3
+ "version": "0.10.4",
4
4
  "description": "MCP server for the Gatewarden Nexus platform — mediation layer between local agent runtimes and the Nexus HTTP API",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",