@atoms-tech/atoms-mcp 0.1.1 → 0.2.1

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 ADDED
@@ -0,0 +1,136 @@
1
+ # @atoms-tech/atoms-mcp
2
+
3
+ MCP server for [ATOMS.tech](https://atoms.tech) — connect AI agents to your requirements management workspace.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@atoms-tech/atoms-mcp)](https://www.npmjs.com/package/@atoms-tech/atoms-mcp)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## Quick Start
9
+
10
+ ```bash
11
+ # 1. Login to your ATOMS account
12
+ npx @atoms-tech/atoms-mcp login
13
+
14
+ # 2. Add to Claude Code
15
+ claude mcp add atoms-mcp -- npx @atoms-tech/atoms-mcp
16
+ ```
17
+
18
+ That's it. Claude can now read, create, and manage requirements in your ATOMS projects.
19
+
20
+ ## What It Does
21
+
22
+ ATOMS MCP gives AI agents direct access to your requirements, test cases, and traceability data through the [Model Context Protocol](https://modelcontextprotocol.io). Agents can:
23
+
24
+ - Browse projects, search requirements, and inspect items
25
+ - Create and update requirements, test cases, and notes
26
+ - Bulk import 100 items at a time
27
+ - Link items with parent/child and verification relationships
28
+ - Record test results and check coverage gaps
29
+ - Export traceability diagrams as Mermaid graphs
30
+
31
+ Every action is logged with AI actor attribution (`mcp_claude`) and enforces your organization's role-based permissions.
32
+
33
+ ## Available Tools
34
+
35
+ | Tool | Description | Access |
36
+ |------|-------------|--------|
37
+ | `atoms_list_projects` | List all accessible projects | Read |
38
+ | `atoms_list_items` | Browse items with type/domain/level filters | Read |
39
+ | `atoms_get_item` | Get full item details with relationships | Read |
40
+ | `atoms_search` | Full-text search across items | Read |
41
+ | `atoms_get_coverage` | Find requirements without test cases | Read |
42
+ | `atoms_get_history` | Audit trail for an item | Read |
43
+ | `atoms_export_mermaid` | Generate traceability diagram | Read |
44
+ | `atoms_create_item` | Create a requirement, test case, or note | Write |
45
+ | `atoms_update_item` | Update item fields | Write |
46
+ | `atoms_delete_item` | Soft-delete an item | Write |
47
+ | `atoms_link_items` | Add/remove relationships between items | Write |
48
+ | `atoms_bulk_import` | Bulk create up to 100 items at once | Write |
49
+ | `atoms_record_test_result` | Record pass/fail for a test case | Write |
50
+ | `atoms_trace` | Walk traceability graph (upstream/downstream) | Read |
51
+ | `atoms_project_summary` | Project compliance dashboard (counts, coverage, status) | Read |
52
+
53
+ ## Authentication
54
+
55
+ ATOMS MCP uses **OAuth 2.1 with PKCE** — the same flow used by GitHub CLI and Supabase CLI.
56
+
57
+ ```bash
58
+ # Interactive login (opens browser)
59
+ npx @atoms-tech/atoms-mcp login
60
+
61
+ # Check current session
62
+ npx @atoms-tech/atoms-mcp whoami
63
+
64
+ # Clear credentials
65
+ npx @atoms-tech/atoms-mcp logout
66
+ ```
67
+
68
+ **How it works:**
69
+
70
+ 1. `login` opens your browser to the ATOMS consent page
71
+ 2. You approve the MCP connection with your ATOMS account
72
+ 3. Tokens are stored locally at `~/.atoms-mcp/credentials.json`
73
+ 4. Tokens auto-refresh — you only need to login once
74
+
75
+ You can also set `ATOMS_ACCESS_TOKEN` as an environment variable for CI/headless use.
76
+
77
+ ## CLI Commands
78
+
79
+ ```
80
+ npx @atoms-tech/atoms-mcp login # Authenticate with ATOMS
81
+ npx @atoms-tech/atoms-mcp logout # Clear stored credentials
82
+ npx @atoms-tech/atoms-mcp whoami # Show current user
83
+ npx @atoms-tech/atoms-mcp --help # Show all commands
84
+ ```
85
+
86
+ Running without a subcommand starts the MCP server on stdio.
87
+
88
+ ## Setup
89
+
90
+ ### Claude Code
91
+
92
+ ```bash
93
+ claude mcp add atoms-mcp -- npx @atoms-tech/atoms-mcp
94
+ ```
95
+
96
+ ### Claude Desktop
97
+
98
+ Add to your `claude_desktop_config.json`:
99
+
100
+ ```json
101
+ {
102
+ "mcpServers": {
103
+ "atoms-mcp": {
104
+ "command": "npx",
105
+ "args": ["@atoms-tech/atoms-mcp"]
106
+ }
107
+ }
108
+ }
109
+ ```
110
+
111
+ ### Cursor / Windsurf
112
+
113
+ Add to your MCP configuration with `command: "npx"` and `args: ["@atoms-tech/atoms-mcp"]`. Refer to your editor's MCP documentation for the exact config file location.
114
+
115
+ ## Security
116
+
117
+ - **Row Level Security (RLS)** — All queries run with the user's JWT. The server never uses a service role key. You can only access projects your organization has granted you access to.
118
+ - **Role enforcement** — Write tools check your org role (viewer, editor, admin) before making changes. Viewers are blocked from mutations.
119
+ - **Audit logging** — Every tool call is logged with tool name, parameters, duration, and session ID. Write operations log to `change_history` with `actor: "mcp_claude"`.
120
+ - **Rate limiting** — Built-in per-user rate limiter prevents abuse.
121
+ - **No secrets in the package** — The Supabase anon key is a publishable client key (like a Firebase API key). It grants zero data access without a valid user JWT.
122
+
123
+ ## Requirements
124
+
125
+ - Node.js >= 18
126
+ - An [ATOMS.tech](https://atoms.tech) account with at least one project
127
+
128
+ ## Links
129
+
130
+ - [ATOMS.tech](https://atoms.tech) — Requirements management platform
131
+ - [Model Context Protocol](https://modelcontextprotocol.io) — Open standard for AI tool integration
132
+ - [GitHub](https://github.com/support-atoms-tech/atoms-mvp-v2) — Source code
133
+
134
+ ## License
135
+
136
+ MIT
@@ -12,10 +12,12 @@
12
12
  * Run the interactive login flow.
13
13
  * Opens browser, waits for callback, stores tokens.
14
14
  *
15
- * Uses OAuth 2.1 PKCE flow:
16
- * 1. Redirect to Supabase with code_challenge
17
- * 2. Supabase returns authorization code to localhost callback
18
- * 3. Exchange code + code_verifier for session tokens
15
+ * Uses OAuth 2.1 PKCE flow with hosted consent page:
16
+ * 1. Open browser to ATOMS consent page with code_challenge
17
+ * 2. User reviews permissions and clicks "Authorize"
18
+ * 3. Consent page redirects to Supabase OAuth with PKCE params
19
+ * 4. Supabase returns authorization code to localhost callback
20
+ * 5. Exchange code + code_verifier for session tokens
19
21
  */
20
22
  export declare function login(): Promise<{
21
23
  email: string;
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH;;;;;;;;GAQG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyLxD"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAkMxD"}
@@ -12,17 +12,19 @@ import { createServer } from "node:http";
12
12
  import { randomBytes, createHash } from "node:crypto";
13
13
  import { URL } from "node:url";
14
14
  import { writeCredentials } from "./token-store.js";
15
- import { ATOMS_SUPABASE_URL, ATOMS_SUPABASE_ANON_KEY } from "../config.js";
15
+ import { ATOMS_SUPABASE_URL, ATOMS_SUPABASE_ANON_KEY, ATOMS_APP_URL } from "../config.js";
16
16
  const CALLBACK_PORT = 19275;
17
17
  const CALLBACK_PATH = "/callback";
18
18
  /**
19
19
  * Run the interactive login flow.
20
20
  * Opens browser, waits for callback, stores tokens.
21
21
  *
22
- * Uses OAuth 2.1 PKCE flow:
23
- * 1. Redirect to Supabase with code_challenge
24
- * 2. Supabase returns authorization code to localhost callback
25
- * 3. Exchange code + code_verifier for session tokens
22
+ * Uses OAuth 2.1 PKCE flow with hosted consent page:
23
+ * 1. Open browser to ATOMS consent page with code_challenge
24
+ * 2. User reviews permissions and clicks "Authorize"
25
+ * 3. Consent page redirects to Supabase OAuth with PKCE params
26
+ * 4. Supabase returns authorization code to localhost callback
27
+ * 5. Exchange code + code_verifier for session tokens
26
28
  */
27
29
  export async function login() {
28
30
  // Generate PKCE challenge
@@ -31,10 +33,9 @@ export async function login() {
31
33
  .update(codeVerifier)
32
34
  .digest("base64url");
33
35
  const redirectTo = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
34
- // Build auth URL
35
- const authUrl = new URL(`${ATOMS_SUPABASE_URL}/auth/v1/authorize`);
36
- authUrl.searchParams.set("provider", "google");
37
- authUrl.searchParams.set("redirect_to", redirectTo);
36
+ // Build consent page URL — hosted on ATOMS web app
37
+ const authUrl = new URL(`${ATOMS_APP_URL}/auth/mcp-consent`);
38
+ authUrl.searchParams.set("redirect_uri", redirectTo);
38
39
  authUrl.searchParams.set("code_challenge", codeChallenge);
39
40
  authUrl.searchParams.set("code_challenge_method", "S256");
40
41
  return new Promise((resolve, reject) => {
@@ -46,6 +47,15 @@ export async function login() {
46
47
  return;
47
48
  }
48
49
  try {
50
+ // Check for user cancellation from consent page
51
+ const error = url.searchParams.get("error");
52
+ if (error === "access_denied") {
53
+ res.writeHead(200, { "Content-Type": "text/html" });
54
+ res.end(failurePage("Authorization was cancelled."));
55
+ server.close();
56
+ reject(new Error("Authorization cancelled by user."));
57
+ return;
58
+ }
49
59
  // PKCE flow: Supabase redirects with ?code=xxx in query params
50
60
  const code = url.searchParams.get("code");
51
61
  if (code) {
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -14,4 +14,6 @@
14
14
  */
15
15
  export declare const ATOMS_SUPABASE_URL = "https://gmebjyhomsbvhrxffzre.supabase.co";
16
16
  export declare const ATOMS_SUPABASE_ANON_KEY = "sb_publishable_b49MUAB8XCrQiF7x5b9lUA_w1aplSBH";
17
+ /** ATOMS web app URL — hosts the MCP consent page */
18
+ export declare const ATOMS_APP_URL: string;
17
19
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,kBAAkB,6CAA6C,CAAC;AAC7E,eAAO,MAAM,uBAAuB,mDACc,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,kBAAkB,6CAA6C,CAAC;AAC7E,eAAO,MAAM,uBAAuB,mDACc,CAAC;AAEnD,qDAAqD;AACrD,eAAO,MAAM,aAAa,QAAsD,CAAC"}
package/dist/config.js CHANGED
@@ -14,4 +14,6 @@
14
14
  */
15
15
  export const ATOMS_SUPABASE_URL = "https://gmebjyhomsbvhrxffzre.supabase.co";
16
16
  export const ATOMS_SUPABASE_ANON_KEY = "sb_publishable_b49MUAB8XCrQiF7x5b9lUA_w1aplSBH";
17
+ /** ATOMS web app URL — hosts the MCP consent page */
18
+ export const ATOMS_APP_URL = process.env.ATOMS_APP_URL ?? "https://x.atoms.tech";
17
19
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAClC,gDAAgD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,0CAA0C,CAAC;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAClC,gDAAgD,CAAC;AAEnD,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,sBAAsB,CAAC"}
package/dist/server.js CHANGED
@@ -472,6 +472,57 @@ Returns:
472
472
  const { linkItemsHandler } = await import("./tools/link-items.js");
473
473
  return linkItemsHandler(params);
474
474
  }));
475
+ server.registerTool("atoms_bulk_import", {
476
+ title: "Bulk Import ATOMS Items",
477
+ description: `Bulk create multiple items in a single tool call. Essential for AI agents
478
+ that generate 20+ requirements at once.
479
+
480
+ Checks write access once, generates sequential IDs, batch inserts all items,
481
+ and reports per-item errors without aborting the entire batch.
482
+
483
+ Args:
484
+ - project_id (string, UUID): Target project
485
+ - items (array): Up to 100 items to create, each with:
486
+ - type (string): requirement|test-case|note
487
+ - title (string): Item title (max 500 chars)
488
+ - body (string, optional): Rich text body
489
+ - summary (string, optional): Brief summary
490
+ - domains (string[], optional): Domain tags
491
+ - level (string, optional): System|Subsystem|Component
492
+ - parent_id (string, optional): Parent item ID to link
493
+
494
+ Returns:
495
+ { created: number, items: [{ id, title, type }], errors: [] }
496
+
497
+ Limits:
498
+ - Maximum 100 items per call
499
+ - If any item fails, others still succeed — errors reported separately
500
+
501
+ Side effects:
502
+ - Logs to change_history with actor='mcp_claude' for each created item
503
+ - Creates parent relationships for items with parent_id`,
504
+ inputSchema: {
505
+ project_id: z.string().uuid().describe("UUID of the target project"),
506
+ items: z.array(z.object({
507
+ type: z.enum(["requirement", "test-case", "note"]).describe("Item type"),
508
+ title: z.string().min(1).max(500).describe("Item title"),
509
+ body: z.string().optional().describe("Rich text body"),
510
+ summary: z.string().optional().describe("Brief summary"),
511
+ domains: z.array(z.string()).optional().describe("Domain tags"),
512
+ level: z.string().optional().describe("System|Subsystem|Component"),
513
+ parent_id: z.string().optional().describe("Parent item ID to link"),
514
+ })).min(1).max(100).describe("Items to create (1-100)"),
515
+ },
516
+ annotations: {
517
+ readOnlyHint: false,
518
+ destructiveHint: false,
519
+ idempotentHint: false,
520
+ openWorldHint: false,
521
+ },
522
+ }, withMiddleware("atoms_bulk_import", async (params) => {
523
+ const { bulkImportHandler } = await import("./tools/bulk-import.js");
524
+ return bulkImportHandler(params);
525
+ }));
475
526
  server.registerTool("atoms_record_test_result", {
476
527
  title: "Record Test Result",
477
528
  description: `Record a pass/fail/blocked result for a test case.
@@ -508,4 +559,79 @@ Side effects:
508
559
  const { recordTestResultHandler } = await import("./tools/record-test-result.js");
509
560
  return recordTestResultHandler(params);
510
561
  }));
562
+ // ---------------------------------------------------------------------------
563
+ // Tool Registration — Phase 4 (Advanced Tools)
564
+ // ---------------------------------------------------------------------------
565
+ server.registerTool("atoms_trace", {
566
+ title: "Trace Item Relationships",
567
+ description: `Walk the traceability graph from a starting item.
568
+
569
+ Answers questions like "which requirements does TC-00003 verify?" or
570
+ "if I change REQ-00001, what's affected downstream?"
571
+
572
+ Args:
573
+ - project_id (string, UUID): Project containing the item
574
+ - item_id (string): Starting item ID
575
+ - direction (string): upstream|downstream|both
576
+ - upstream: follow parent/verifies links (dependencies)
577
+ - downstream: follow child/verified_by links (dependents)
578
+ - both: trace in both directions
579
+ - depth (number, optional): Max traversal depth (default 5, max 10)
580
+ - relationship_types (string[], optional): Filter to specific types (parent, child, related, verifies, verified_by)
581
+
582
+ Returns:
583
+ { root, direction, items: [{ id, title, type, relationship, depth }], total_count }
584
+
585
+ Examples:
586
+ - "What does TC-00003 verify?" → atoms_trace(project_id, "TC-00003", "upstream")
587
+ - "What's affected by REQ-00001?" → atoms_trace(project_id, "REQ-00001", "downstream")`,
588
+ inputSchema: {
589
+ project_id: z.string().uuid().describe("UUID of the project"),
590
+ item_id: z.string().min(1).max(20).describe("Starting item ID"),
591
+ direction: z.enum(["upstream", "downstream", "both"])
592
+ .describe("Traversal direction"),
593
+ depth: z.number().int().min(1).max(10).default(5)
594
+ .describe("Max traversal depth (default 5)"),
595
+ relationship_types: z.array(z.enum(["parent", "child", "related", "verifies", "verified_by"])).optional()
596
+ .describe("Filter to specific relationship types"),
597
+ },
598
+ annotations: {
599
+ readOnlyHint: true,
600
+ destructiveHint: false,
601
+ idempotentHint: true,
602
+ openWorldHint: false,
603
+ },
604
+ }, withMiddleware("atoms_trace", async (params) => {
605
+ const { traceHandler } = await import("./tools/trace.js");
606
+ return traceHandler(params);
607
+ }));
608
+ server.registerTool("atoms_project_summary", {
609
+ title: "Project Compliance Summary",
610
+ description: `One-call project health and compliance dashboard.
611
+
612
+ Returns item counts by type, test execution status, requirement coverage
613
+ (overall and by domain), and recent change activity.
614
+
615
+ Args:
616
+ - project_id (string, UUID): Project to summarize
617
+
618
+ Returns:
619
+ { project_name, counts, test_status, coverage, coverage_by_domain, recent_changes, last_updated }
620
+
621
+ Examples:
622
+ - "Give me a compliance snapshot" → atoms_project_summary(project_id)
623
+ - "How's our test coverage?" → atoms_project_summary(project_id)`,
624
+ inputSchema: {
625
+ project_id: z.string().uuid().describe("UUID of the project"),
626
+ },
627
+ annotations: {
628
+ readOnlyHint: true,
629
+ destructiveHint: false,
630
+ idempotentHint: true,
631
+ openWorldHint: false,
632
+ },
633
+ }, withMiddleware("atoms_project_summary", async (params) => {
634
+ const { projectSummaryHandler } = await import("./tools/project-summary.js");
635
+ return projectSummaryHandler(params);
636
+ }));
511
637
  //# sourceMappingURL=server.js.map
@@ -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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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * atoms_bulk_import — Bulk create multiple items in a single tool call.
3
+ * Essential for AI agents that generate 20+ requirements at once.
4
+ *
5
+ * Checks write access once, generates sequential IDs, batch inserts,
6
+ * and reports per-item errors without aborting the entire batch.
7
+ */
8
+ interface BulkImportItem {
9
+ type: "requirement" | "test-case" | "note";
10
+ title: string;
11
+ body?: string;
12
+ summary?: string;
13
+ domains?: string[];
14
+ level?: string;
15
+ parent_id?: string;
16
+ }
17
+ interface CreatedItem {
18
+ id: string;
19
+ title: string;
20
+ type: string;
21
+ }
22
+ interface BulkImportError {
23
+ index: number;
24
+ title: string;
25
+ error: string;
26
+ }
27
+ export declare function bulkImportHandler(params: {
28
+ project_id: string;
29
+ items: BulkImportItem[];
30
+ }): Promise<{
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ structuredContent: {
36
+ data: any[];
37
+ meta: {
38
+ truncated: boolean;
39
+ truncation_message: string;
40
+ total_count?: number | undefined;
41
+ limit?: number | undefined;
42
+ offset?: number | undefined;
43
+ has_more?: boolean | undefined;
44
+ };
45
+ status: "success";
46
+ };
47
+ } | {
48
+ content: {
49
+ type: "text";
50
+ text: string;
51
+ }[];
52
+ structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
53
+ created: number;
54
+ items: never[];
55
+ errors: BulkImportError[];
56
+ }>;
57
+ } | {
58
+ content: {
59
+ type: "text";
60
+ text: string;
61
+ }[];
62
+ structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
63
+ created: number;
64
+ items: CreatedItem[];
65
+ errors: BulkImportError[];
66
+ project_id: string;
67
+ }>;
68
+ }>;
69
+ export {};
70
+ //# sourceMappingURL=bulk-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-import.d.ts","sourceRoot":"","sources":["../../src/tools/bulk-import.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6NA"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * atoms_bulk_import — Bulk create multiple items in a single tool call.
3
+ * Essential for AI agents that generate 20+ requirements at once.
4
+ *
5
+ * Checks write access once, generates sequential IDs, batch inserts,
6
+ * and reports per-item errors without aborting the entire batch.
7
+ */
8
+ import { getClient, getUserId, requireWriteAccess } from "../db/client.js";
9
+ import { generateItemId } from "../db/queries.js";
10
+ import { getMcpSessionId } from "../server.js";
11
+ import { formatToolResult, formatErrorResult, success, accessDeniedError, validationError, dbError, authError, } from "./_base.js";
12
+ export async function bulkImportHandler(params) {
13
+ try {
14
+ // Validate item count
15
+ if (!params.items || params.items.length === 0) {
16
+ return formatErrorResult(validationError("items array must contain at least 1 item"));
17
+ }
18
+ if (params.items.length > 100) {
19
+ return formatErrorResult(validationError(`Maximum 100 items per call (received ${params.items.length}). Split into multiple calls.`));
20
+ }
21
+ const client = await getClient();
22
+ const userId = getUserId();
23
+ // Check write access once for the entire batch
24
+ try {
25
+ await requireWriteAccess(client, params.project_id);
26
+ }
27
+ catch (err) {
28
+ if (err instanceof Error && err.message === "VIEWER_ROLE") {
29
+ return formatErrorResult(accessDeniedError("Viewer"));
30
+ }
31
+ throw err;
32
+ }
33
+ const now = new Date().toISOString();
34
+ const sessionId = getMcpSessionId();
35
+ const created = [];
36
+ const errors = [];
37
+ // Generate all IDs sequentially (each call increments the counter)
38
+ const itemsWithIds = [];
39
+ for (let i = 0; i < params.items.length; i++) {
40
+ const input = params.items[i];
41
+ try {
42
+ const itemId = await generateItemId(client, params.project_id, input.type);
43
+ itemsWithIds.push({ itemId, input, index: i });
44
+ }
45
+ catch (err) {
46
+ errors.push({
47
+ index: i,
48
+ title: input.title,
49
+ error: `ID generation failed: ${err instanceof Error ? err.message : String(err)}`,
50
+ });
51
+ }
52
+ }
53
+ if (itemsWithIds.length === 0) {
54
+ return formatToolResult(success({
55
+ created: 0,
56
+ items: [],
57
+ errors,
58
+ }));
59
+ }
60
+ // Build insert rows and WorkItem data blobs
61
+ const insertRows = [];
62
+ const workItemMap = new Map();
63
+ for (const { itemId, input } of itemsWithIds) {
64
+ const workItem = {
65
+ id: itemId,
66
+ type: input.type,
67
+ title: input.title,
68
+ summary: input.summary,
69
+ body: input.body,
70
+ tags: {
71
+ domains: input.domains ?? [],
72
+ level: input.level,
73
+ },
74
+ ownership: {
75
+ primary: null,
76
+ additional: [],
77
+ },
78
+ relationships: {
79
+ parents: input.parent_id ? [input.parent_id] : [],
80
+ children: [],
81
+ related: [],
82
+ },
83
+ links: [],
84
+ metadata: {
85
+ created_at: now,
86
+ created_by: userId,
87
+ updated_at: now,
88
+ updated_by: userId,
89
+ },
90
+ };
91
+ workItemMap.set(itemId, workItem);
92
+ insertRows.push({
93
+ id: itemId,
94
+ project_id: params.project_id,
95
+ type: input.type,
96
+ title: input.title,
97
+ data: workItem,
98
+ created_by: userId,
99
+ updated_by: userId,
100
+ });
101
+ }
102
+ // Batch insert all items
103
+ const { error: insertErr } = await client
104
+ .from("items")
105
+ .insert(insertRows);
106
+ if (insertErr) {
107
+ // If batch insert fails, fall back to individual inserts
108
+ for (const { itemId, input, index } of itemsWithIds) {
109
+ const row = insertRows.find((r) => r.id === itemId);
110
+ if (!row)
111
+ continue;
112
+ const { error: singleErr } = await client
113
+ .from("items")
114
+ .insert(row);
115
+ if (singleErr) {
116
+ errors.push({
117
+ index,
118
+ title: input.title,
119
+ error: singleErr.message,
120
+ });
121
+ }
122
+ else {
123
+ created.push({ id: itemId, title: input.title, type: input.type });
124
+ }
125
+ }
126
+ }
127
+ else {
128
+ // Batch succeeded — all items created
129
+ for (const { itemId, input } of itemsWithIds) {
130
+ created.push({ id: itemId, title: input.title, type: input.type });
131
+ }
132
+ }
133
+ // Create relationships for items with parent_id (fire-and-forget)
134
+ const relRows = itemsWithIds
135
+ .filter(({ input }) => input.parent_id)
136
+ .filter(({ itemId }) => created.some((c) => c.id === itemId))
137
+ .map(({ itemId, input }) => ({
138
+ from_id: itemId,
139
+ to_id: input.parent_id,
140
+ type: "parent",
141
+ project_id: params.project_id,
142
+ }));
143
+ if (relRows.length > 0) {
144
+ await client
145
+ .from("item_relationships")
146
+ .insert(relRows)
147
+ .then(({ error }) => {
148
+ if (error) {
149
+ process.stderr.write(`[atoms-mcp] Warning: bulk relationship sync failed: ${error.message}\n`);
150
+ }
151
+ });
152
+ }
153
+ // Audit: log one change_history entry per created item (fire-and-forget)
154
+ const historyRows = created.map((item) => ({
155
+ item_id: item.id,
156
+ project_id: params.project_id,
157
+ changed_by: userId,
158
+ event_type: "created",
159
+ old_data: null,
160
+ new_data: workItemMap.get(item.id) ?? null,
161
+ actor: "mcp_claude",
162
+ session_id: sessionId,
163
+ }));
164
+ if (historyRows.length > 0) {
165
+ await client
166
+ .from("change_history")
167
+ .insert(historyRows)
168
+ .then(({ error }) => {
169
+ if (error) {
170
+ process.stderr.write(`[atoms-mcp] Warning: bulk change_history log failed: ${error.message}\n`);
171
+ }
172
+ });
173
+ }
174
+ return formatToolResult(success({
175
+ created: created.length,
176
+ items: created,
177
+ errors: errors.length > 0 ? errors : [],
178
+ project_id: params.project_id,
179
+ }));
180
+ }
181
+ catch (err) {
182
+ if (err instanceof Error && err.message.includes("Not authenticated")) {
183
+ return formatErrorResult(authError());
184
+ }
185
+ return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
186
+ }
187
+ }
188
+ //# sourceMappingURL=bulk-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-import.js","sourceRoot":"","sources":["../../src/tools/bulk-import.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,SAAS,GACV,MAAM,YAAY,CAAC;AAyBpB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAGvC;IACC,IAAI,CAAC;QACH,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,iBAAiB,CACtB,eAAe,CAAC,0CAA0C,CAAC,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9B,OAAO,iBAAiB,CACtB,eAAe,CACb,wCAAwC,MAAM,CAAC,KAAK,CAAC,MAAM,+BAA+B,CAC3F,CACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC1D,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QACpC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,mEAAmE;QACnE,MAAM,YAAY,GAIb,EAAE,CAAC;QAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,EACN,MAAM,CAAC,UAAU,EACjB,KAAK,CAAC,IAAI,CACX,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,gBAAgB,CACrB,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,EAAE;gBACT,MAAM;aACP,CAAC,CACH,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAQX,EAAE,CAAC;QAER,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEhD,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAa;gBACzB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACD,SAAS,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,EAAE;iBACf;gBACD,aAAa,EAAE;oBACb,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBACjD,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,EAAE;iBACZ;gBACD,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE;oBACR,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,MAAM;iBACnB;aACF,CAAC;YAEF,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElC,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,MAAM;gBACV,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM;aACtC,IAAI,CAAC,OAAO,CAAC;aACb,MAAM,CAAC,UAAU,CAAC,CAAC;QAEtB,IAAI,SAAS,EAAE,CAAC;YACd,yDAAyD;YACzD,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;gBACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG;oBAAE,SAAS;gBAEnB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM;qBACtC,IAAI,CAAC,OAAO,CAAC;qBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEf,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,KAAK,EAAE,SAAS,CAAC,OAAO;qBACzB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,MAAM,OAAO,GAAG,YAAY;aACzB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;aACtC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;aAC5D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,KAAK,CAAC,SAAU;YACvB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC,CAAC;QAEN,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM;iBACT,IAAI,CAAC,oBAAoB,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uDAAuD,KAAK,CAAC,OAAO,IAAI,CACzE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAED,yEAAyE;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI;YAC1C,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC,CAAC;QAEJ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM;iBACT,IAAI,CAAC,gBAAgB,CAAC;iBACtB,MAAM,CAAC,WAAW,CAAC;iBACnB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,KAAK,CAAC,OAAO,IAAI,CAC1E,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,gBAAgB,CACrB,OAAO,CAAC;YACN,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtE,OAAO,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,iBAAiB,CACtB,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * atoms_project_summary — One-call compliance/health dashboard for a project.
3
+ *
4
+ * Returns item counts by type, test status breakdown, coverage stats
5
+ * (overall + per domain), and recent change activity.
6
+ */
7
+ interface DomainCoverage {
8
+ domain: string;
9
+ covered: number;
10
+ total: number;
11
+ percent: number;
12
+ }
13
+ interface ProjectSummaryData {
14
+ project_id: string;
15
+ project_name: string;
16
+ counts: {
17
+ requirements: number;
18
+ test_cases: number;
19
+ notes: number;
20
+ };
21
+ test_status: {
22
+ passed: number;
23
+ failed: number;
24
+ blocked: number;
25
+ not_run: number;
26
+ };
27
+ coverage: {
28
+ covered: number;
29
+ uncovered: number;
30
+ total: number;
31
+ percent: number;
32
+ };
33
+ coverage_by_domain: DomainCoverage[];
34
+ recent_changes: number;
35
+ last_updated: string;
36
+ }
37
+ export declare function projectSummaryHandler(params: {
38
+ project_id: string;
39
+ }): Promise<{
40
+ content: {
41
+ type: "text";
42
+ text: string;
43
+ }[];
44
+ structuredContent: {
45
+ data: any[];
46
+ meta: {
47
+ truncated: boolean;
48
+ truncation_message: string;
49
+ total_count?: number | undefined;
50
+ limit?: number | undefined;
51
+ offset?: number | undefined;
52
+ has_more?: boolean | undefined;
53
+ };
54
+ status: "success";
55
+ };
56
+ } | {
57
+ content: {
58
+ type: "text";
59
+ text: string;
60
+ }[];
61
+ structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<ProjectSummaryData>;
62
+ }>;
63
+ export {};
64
+ //# sourceMappingURL=project-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-summary.d.ts","sourceRoot":"","sources":["../../src/tools/project-summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;;;;;;;;;;;;;;GA6KA"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * atoms_project_summary — One-call compliance/health dashboard for a project.
3
+ *
4
+ * Returns item counts by type, test status breakdown, coverage stats
5
+ * (overall + per domain), and recent change activity.
6
+ */
7
+ import { getClient } from "../db/client.js";
8
+ import { formatToolResult, formatErrorResult, success, dbError, authError, notFoundError, } from "./_base.js";
9
+ export async function projectSummaryHandler(params) {
10
+ try {
11
+ const client = await getClient();
12
+ // 1. Verify project exists and get its name
13
+ const { data: project, error: projErr } = await client
14
+ .from("projects")
15
+ .select("id, name")
16
+ .eq("id", params.project_id)
17
+ .is("deleted_at", null)
18
+ .maybeSingle();
19
+ if (projErr)
20
+ throw new Error(projErr.message);
21
+ if (!project) {
22
+ return formatErrorResult(notFoundError("Project", params.project_id));
23
+ }
24
+ // 2. Get all items grouped by type
25
+ const { data: items, error: itemsErr } = await client
26
+ .from("items")
27
+ .select("id, type, data")
28
+ .eq("project_id", params.project_id)
29
+ .is("deleted_at", null);
30
+ if (itemsErr)
31
+ throw new Error(itemsErr.message);
32
+ const allItems = items ?? [];
33
+ const counts = {
34
+ requirements: 0,
35
+ test_cases: 0,
36
+ notes: 0,
37
+ };
38
+ const testCaseIds = [];
39
+ const requirementItems = [];
40
+ for (const item of allItems) {
41
+ if (item.type === "requirement") {
42
+ counts.requirements++;
43
+ const domains = item.data?.tags?.domains ?? [];
44
+ requirementItems.push({ id: item.id, domains });
45
+ }
46
+ else if (item.type === "test-case") {
47
+ counts.test_cases++;
48
+ testCaseIds.push(item.id);
49
+ }
50
+ else if (item.type === "note") {
51
+ counts.notes++;
52
+ }
53
+ }
54
+ // 3. Get latest test result per test case from test_results shadow table
55
+ const testStatus = {
56
+ passed: 0,
57
+ failed: 0,
58
+ blocked: 0,
59
+ not_run: 0,
60
+ };
61
+ if (testCaseIds.length > 0) {
62
+ // Fetch all test results for this project, ordered by run_at desc
63
+ const { data: results, error: resultsErr } = await client
64
+ .from("test_results")
65
+ .select("item_id, result, run_at")
66
+ .eq("project_id", params.project_id)
67
+ .order("run_at", { ascending: false });
68
+ if (resultsErr)
69
+ throw new Error(resultsErr.message);
70
+ // Deduplicate to latest result per test case
71
+ const latestByItem = new Map();
72
+ for (const r of results ?? []) {
73
+ if (!latestByItem.has(r.item_id)) {
74
+ latestByItem.set(r.item_id, r.result);
75
+ }
76
+ }
77
+ // Count statuses — test cases without any result are "not_run"
78
+ for (const tcId of testCaseIds) {
79
+ const result = latestByItem.get(tcId);
80
+ if (!result || result === "not-run") {
81
+ testStatus.not_run++;
82
+ }
83
+ else if (result === "passed") {
84
+ testStatus.passed++;
85
+ }
86
+ else if (result === "failed") {
87
+ testStatus.failed++;
88
+ }
89
+ else if (result === "blocked") {
90
+ testStatus.blocked++;
91
+ }
92
+ else {
93
+ testStatus.not_run++;
94
+ }
95
+ }
96
+ }
97
+ // 4. Coverage: requirements with at least one verified_by relationship
98
+ const { data: verifiedRels, error: relErr } = await client
99
+ .from("item_relationships")
100
+ .select("from_id")
101
+ .eq("project_id", params.project_id)
102
+ .eq("type", "verified_by");
103
+ if (relErr)
104
+ throw new Error(relErr.message);
105
+ const coveredIds = new Set((verifiedRels ?? []).map((r) => r.from_id));
106
+ const coveredCount = requirementItems.filter((r) => coveredIds.has(r.id)).length;
107
+ const totalReqs = requirementItems.length;
108
+ const coverage = {
109
+ covered: coveredCount,
110
+ uncovered: totalReqs - coveredCount,
111
+ total: totalReqs,
112
+ percent: totalReqs > 0
113
+ ? Math.round((coveredCount / totalReqs) * 1000) / 10
114
+ : 100,
115
+ };
116
+ // 5. Coverage by domain
117
+ const domainMap = new Map();
118
+ for (const req of requirementItems) {
119
+ const domains = req.domains.length > 0 ? req.domains : ["(untagged)"];
120
+ const isCovered = coveredIds.has(req.id);
121
+ for (const domain of domains) {
122
+ if (!domainMap.has(domain)) {
123
+ domainMap.set(domain, { covered: 0, total: 0 });
124
+ }
125
+ const entry = domainMap.get(domain);
126
+ entry.total++;
127
+ if (isCovered)
128
+ entry.covered++;
129
+ }
130
+ }
131
+ const coverageByDomain = Array.from(domainMap.entries())
132
+ .sort((a, b) => a[0].localeCompare(b[0]))
133
+ .map(([domain, stats]) => ({
134
+ domain,
135
+ covered: stats.covered,
136
+ total: stats.total,
137
+ percent: stats.total > 0
138
+ ? Math.round((stats.covered / stats.total) * 1000) / 10
139
+ : 100,
140
+ }));
141
+ // 6. Recent changes (last 7 days)
142
+ const sevenDaysAgo = new Date();
143
+ sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
144
+ const { count: recentChanges, error: histErr } = await client
145
+ .from("change_history")
146
+ .select("id", { count: "exact", head: true })
147
+ .eq("project_id", params.project_id)
148
+ .gte("changed_at", sevenDaysAgo.toISOString());
149
+ if (histErr)
150
+ throw new Error(histErr.message);
151
+ const data = {
152
+ project_id: params.project_id,
153
+ project_name: project.name,
154
+ counts,
155
+ test_status: testStatus,
156
+ coverage,
157
+ coverage_by_domain: coverageByDomain,
158
+ recent_changes: recentChanges ?? 0,
159
+ last_updated: new Date().toISOString(),
160
+ };
161
+ return formatToolResult(success(data));
162
+ }
163
+ catch (err) {
164
+ if (err instanceof Error && err.message.includes("Not authenticated")) {
165
+ return formatErrorResult(authError());
166
+ }
167
+ return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
168
+ }
169
+ }
170
+ //# sourceMappingURL=project-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-summary.js","sourceRoot":"","sources":["../../src/tools/project-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * atoms_trace — Graph traversal for traceability queries.
3
+ *
4
+ * Answers questions like "which requirements does TC-00003 verify?"
5
+ * or "what's affected if I change REQ-00001?"
6
+ */
7
+ interface TraceNode {
8
+ id: string;
9
+ title: string;
10
+ type: string;
11
+ relationship: string;
12
+ depth: number;
13
+ }
14
+ export declare function traceHandler(params: {
15
+ project_id: string;
16
+ item_id: string;
17
+ direction: "upstream" | "downstream" | "both";
18
+ depth: number;
19
+ relationship_types?: string[];
20
+ }): Promise<{
21
+ content: {
22
+ type: "text";
23
+ text: string;
24
+ }[];
25
+ structuredContent: {
26
+ data: any[];
27
+ meta: {
28
+ truncated: boolean;
29
+ truncation_message: string;
30
+ total_count?: number | undefined;
31
+ limit?: number | undefined;
32
+ offset?: number | undefined;
33
+ has_more?: boolean | undefined;
34
+ };
35
+ status: "success";
36
+ };
37
+ } | {
38
+ content: {
39
+ type: "text";
40
+ text: string;
41
+ }[];
42
+ structuredContent: import("../types/responses.js").ToolError | import("../types/responses.js").ToolSuccess<{
43
+ truncated?: boolean | undefined;
44
+ truncation_message?: string | undefined;
45
+ root: string;
46
+ direction: "upstream" | "downstream" | "both";
47
+ depth_limit: number;
48
+ items: TraceNode[];
49
+ total_count: number;
50
+ }>;
51
+ }>;
52
+ export {};
53
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/tools/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKA"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * atoms_trace — Graph traversal for traceability queries.
3
+ *
4
+ * Answers questions like "which requirements does TC-00003 verify?"
5
+ * or "what's affected if I change REQ-00001?"
6
+ */
7
+ import { getClient } from "../db/client.js";
8
+ import { getItemById } from "../db/queries.js";
9
+ import { formatToolResult, formatErrorResult, success, notFoundError, dbError, authError, } from "./_base.js";
10
+ /** Maximum items returned to prevent huge responses. */
11
+ const MAX_ITEMS = 200;
12
+ /** Relationship types that point "upstream" (toward parents / dependencies). */
13
+ const UPSTREAM_TYPES = ["parent", "verifies"];
14
+ /** Relationship types that point "downstream" (toward dependents). */
15
+ const DOWNSTREAM_TYPES = ["child", "verified_by"];
16
+ /**
17
+ * Inverse mapping: when traversing an incoming edge we need
18
+ * to know what the outgoing type means for the other side.
19
+ */
20
+ const INVERSE_TYPE = {
21
+ parent: "child",
22
+ child: "parent",
23
+ verifies: "verified_by",
24
+ verified_by: "verifies",
25
+ related: "related",
26
+ };
27
+ export async function traceHandler(params) {
28
+ try {
29
+ const maxDepth = Math.min(Math.max(params.depth ?? 5, 1), 10);
30
+ const client = await getClient();
31
+ // Verify root item exists
32
+ const rootItem = await getItemById(client, params.project_id, params.item_id);
33
+ if (!rootItem) {
34
+ return formatErrorResult(notFoundError("Item", params.item_id));
35
+ }
36
+ // Fetch all relationships in the project once (same pattern as export-mermaid)
37
+ const { data: rels, error: relsErr } = await client
38
+ .from("item_relationships")
39
+ .select("from_id, to_id, type")
40
+ .eq("project_id", params.project_id);
41
+ if (relsErr)
42
+ throw new Error(relsErr.message);
43
+ // Fetch all non-deleted items for title/type lookup
44
+ const { data: items, error: itemsErr } = await client
45
+ .from("items")
46
+ .select("id, title, type")
47
+ .eq("project_id", params.project_id)
48
+ .is("deleted_at", null);
49
+ if (itemsErr)
50
+ throw new Error(itemsErr.message);
51
+ const itemMap = new Map();
52
+ for (const item of items ?? []) {
53
+ itemMap.set(item.id, { title: item.title, type: item.type });
54
+ }
55
+ // Build adjacency lists based on direction
56
+ // For each item, we store { neighbor, relType, direction }
57
+ const adjacency = new Map();
58
+ const addEdge = (from, to, relType) => {
59
+ if (!adjacency.has(from))
60
+ adjacency.set(from, []);
61
+ adjacency.get(from).push({ neighbor: to, relType });
62
+ };
63
+ const allowedTypes = params.relationship_types
64
+ ? new Set(params.relationship_types)
65
+ : null;
66
+ for (const rel of rels ?? []) {
67
+ const relType = rel.type;
68
+ // Upstream: follow edges where the item is the source and the rel points upstream
69
+ // i.e., from_id -> to_id with type "parent" or "verifies"
70
+ if (params.direction === "upstream" || params.direction === "both") {
71
+ if (UPSTREAM_TYPES.includes(relType)) {
72
+ if (!allowedTypes || allowedTypes.has(relType)) {
73
+ addEdge(rel.from_id, rel.to_id, relType);
74
+ }
75
+ }
76
+ // Also follow inverse: if from_id has a "child" pointing to to_id,
77
+ // then to_id is upstream of from_id — but we model it as:
78
+ // from_id's downstream is to_id via "child". For upstream from to_id,
79
+ // we'd follow to_id -> from_id via inverse of "child" = "parent".
80
+ if (DOWNSTREAM_TYPES.includes(relType)) {
81
+ const inverseType = INVERSE_TYPE[relType] ?? relType;
82
+ if (!allowedTypes || allowedTypes.has(inverseType)) {
83
+ addEdge(rel.to_id, rel.from_id, inverseType);
84
+ }
85
+ }
86
+ }
87
+ if (params.direction === "downstream" || params.direction === "both") {
88
+ if (DOWNSTREAM_TYPES.includes(relType)) {
89
+ if (!allowedTypes || allowedTypes.has(relType)) {
90
+ addEdge(rel.from_id, rel.to_id, relType);
91
+ }
92
+ }
93
+ // Inverse: upstream type from the other side means downstream for us
94
+ if (UPSTREAM_TYPES.includes(relType)) {
95
+ const inverseType = INVERSE_TYPE[relType] ?? relType;
96
+ if (!allowedTypes || allowedTypes.has(inverseType)) {
97
+ addEdge(rel.to_id, rel.from_id, inverseType);
98
+ }
99
+ }
100
+ }
101
+ // "related" is bidirectional — add both directions if allowed
102
+ if (relType === "related") {
103
+ if (!allowedTypes || allowedTypes.has("related")) {
104
+ addEdge(rel.from_id, rel.to_id, "related");
105
+ addEdge(rel.to_id, rel.from_id, "related");
106
+ }
107
+ }
108
+ }
109
+ // BFS traversal from root
110
+ const visited = new Set();
111
+ visited.add(params.item_id);
112
+ const result = [];
113
+ const queue = [];
114
+ // Seed queue with direct neighbors of the root
115
+ const rootNeighbors = adjacency.get(params.item_id) ?? [];
116
+ for (const edge of rootNeighbors) {
117
+ queue.push({ id: edge.neighbor, depth: 1, relType: edge.relType });
118
+ }
119
+ while (queue.length > 0 && result.length < MAX_ITEMS) {
120
+ const { id, depth, relType } = queue.shift();
121
+ if (visited.has(id) || depth > maxDepth)
122
+ continue;
123
+ visited.add(id);
124
+ const info = itemMap.get(id);
125
+ if (!info)
126
+ continue; // skip deleted items
127
+ result.push({
128
+ id,
129
+ title: info.title,
130
+ type: info.type,
131
+ relationship: relType,
132
+ depth,
133
+ });
134
+ // Enqueue neighbors at next depth
135
+ if (depth < maxDepth) {
136
+ const neighbors = adjacency.get(id) ?? [];
137
+ for (const edge of neighbors) {
138
+ if (!visited.has(edge.neighbor)) {
139
+ queue.push({
140
+ id: edge.neighbor,
141
+ depth: depth + 1,
142
+ relType: edge.relType,
143
+ });
144
+ }
145
+ }
146
+ }
147
+ }
148
+ return formatToolResult(success({
149
+ root: params.item_id,
150
+ direction: params.direction,
151
+ depth_limit: maxDepth,
152
+ items: result,
153
+ total_count: result.length,
154
+ ...(result.length >= MAX_ITEMS
155
+ ? { truncated: true, truncation_message: `Results capped at ${MAX_ITEMS} items. Use a smaller depth or filter by relationship_types.` }
156
+ : {}),
157
+ }));
158
+ }
159
+ catch (err) {
160
+ if (err instanceof Error && err.message.includes("Not authenticated")) {
161
+ return formatErrorResult(authError());
162
+ }
163
+ return formatErrorResult(dbError(err instanceof Error ? err.message : String(err)));
164
+ }
165
+ }
166
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/tools/trace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atoms-tech/atoms-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "MCP server for ATOMS.tech — AI agent integration for requirements management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",