common-qa-mcp 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +6 -0
  2. package/dist/adapters/factory.d.ts +17 -7
  3. package/dist/adapters/factory.d.ts.map +1 -1
  4. package/dist/adapters/factory.js +61 -7
  5. package/dist/adapters/factory.js.map +1 -1
  6. package/dist/adapters/http.d.ts +50 -0
  7. package/dist/adapters/http.d.ts.map +1 -0
  8. package/dist/adapters/http.js +109 -0
  9. package/dist/adapters/http.js.map +1 -0
  10. package/dist/adapters/remoteMcp/adapter.d.ts +10 -1
  11. package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -1
  12. package/dist/adapters/remoteMcp/adapter.js +26 -3
  13. package/dist/adapters/remoteMcp/adapter.js.map +1 -1
  14. package/dist/adapters/simplifyqa/adapter.d.ts +154 -0
  15. package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -0
  16. package/dist/adapters/simplifyqa/adapter.js +1150 -0
  17. package/dist/adapters/simplifyqa/adapter.js.map +1 -0
  18. package/dist/adapters/simplifyqa/mapper.d.ts +63 -0
  19. package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -0
  20. package/dist/adapters/simplifyqa/mapper.js +409 -0
  21. package/dist/adapters/simplifyqa/mapper.js.map +1 -0
  22. package/dist/adapters/types.d.ts +48 -1
  23. package/dist/adapters/types.d.ts.map +1 -1
  24. package/dist/adapters/walnut/adapter.d.ts +231 -0
  25. package/dist/adapters/walnut/adapter.d.ts.map +1 -0
  26. package/dist/adapters/walnut/adapter.js +1083 -0
  27. package/dist/adapters/walnut/adapter.js.map +1 -0
  28. package/dist/adapters/walnut/mapper.d.ts +29 -9
  29. package/dist/adapters/walnut/mapper.d.ts.map +1 -1
  30. package/dist/adapters/walnut/mapper.js +136 -24
  31. package/dist/adapters/walnut/mapper.js.map +1 -1
  32. package/dist/config.d.ts +28 -14
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +37 -19
  35. package/dist/config.js.map +1 -1
  36. package/dist/connection.d.ts +3 -2
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +36 -15
  39. package/dist/connection.js.map +1 -1
  40. package/dist/domain/types.d.ts +195 -1
  41. package/dist/domain/types.d.ts.map +1 -1
  42. package/dist/drafts/store.d.ts +4 -1
  43. package/dist/drafts/store.d.ts.map +1 -1
  44. package/dist/drafts/store.js +7 -2
  45. package/dist/drafts/store.js.map +1 -1
  46. package/dist/initAgents.d.ts.map +1 -1
  47. package/dist/initAgents.js +29 -12
  48. package/dist/initAgents.js.map +1 -1
  49. package/dist/requestConnection.d.ts +5 -3
  50. package/dist/requestConnection.d.ts.map +1 -1
  51. package/dist/requestConnection.js +11 -5
  52. package/dist/requestConnection.js.map +1 -1
  53. package/dist/server.d.ts.map +1 -1
  54. package/dist/server.js +25 -1
  55. package/dist/server.js.map +1 -1
  56. package/dist/tools/connection.tools.js +5 -5
  57. package/dist/tools/connection.tools.js.map +1 -1
  58. package/dist/tools/discovery.tools.d.ts.map +1 -1
  59. package/dist/tools/discovery.tools.js +93 -1
  60. package/dist/tools/discovery.tools.js.map +1 -1
  61. package/dist/tools/formulas.tools.d.ts +7 -0
  62. package/dist/tools/formulas.tools.d.ts.map +1 -0
  63. package/dist/tools/formulas.tools.js +56 -0
  64. package/dist/tools/formulas.tools.js.map +1 -0
  65. package/dist/tools/heal.tools.d.ts +17 -0
  66. package/dist/tools/heal.tools.d.ts.map +1 -0
  67. package/dist/tools/heal.tools.js +76 -0
  68. package/dist/tools/heal.tools.js.map +1 -0
  69. package/dist/tools/recording.tools.d.ts.map +1 -1
  70. package/dist/tools/recording.tools.js +28 -7
  71. package/dist/tools/recording.tools.js.map +1 -1
  72. package/dist/tools/run.tools.d.ts.map +1 -1
  73. package/dist/tools/run.tools.js +378 -37
  74. package/dist/tools/run.tools.js.map +1 -1
  75. package/dist/tools/storySync.tools.d.ts +66 -0
  76. package/dist/tools/storySync.tools.d.ts.map +1 -0
  77. package/dist/tools/storySync.tools.js +213 -0
  78. package/dist/tools/storySync.tools.js.map +1 -0
  79. package/dist/tools/testcase.tools.d.ts.map +1 -1
  80. package/dist/tools/testcase.tools.js +17 -2
  81. package/dist/tools/testcase.tools.js.map +1 -1
  82. package/dist/tools/testdata.tools.d.ts +7 -0
  83. package/dist/tools/testdata.tools.d.ts.map +1 -0
  84. package/dist/tools/testdata.tools.js +161 -0
  85. package/dist/tools/testdata.tools.js.map +1 -0
  86. package/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ProviderAdapter } from '../adapters/types.js';
3
+ import type { Story, TestCase } from '../domain/types.js';
4
+ /**
5
+ * story_sync_testcases — detect drift between a user story and its linked MANUAL test cases,
6
+ * return structured signals + proposed draft ops. Report-only: the caller (agent) applies edits
7
+ * via tc_draft_open → tc_draft_update → tc_save. Automation TCs are reported as skipped so the
8
+ * agent can surface them without touching them (v1 scope).
9
+ */
10
+ export type StorySyncToolsDeps = {
11
+ getAdapter: () => ProviderAdapter | null;
12
+ };
13
+ type Sensitivity = 'strict' | 'normal' | 'loose';
14
+ type DriftSignal = {
15
+ kind: 'story_title_changed';
16
+ to: string;
17
+ } | {
18
+ kind: 'ac_added';
19
+ text: string;
20
+ likelyInsertAt?: number;
21
+ } | {
22
+ kind: 'ac_removed';
23
+ text: string;
24
+ matchingSteps: number[];
25
+ } | {
26
+ kind: 'ac_reworded';
27
+ from: string;
28
+ to: string;
29
+ matchingSteps: number[];
30
+ } | {
31
+ kind: 'step_stale';
32
+ n: number;
33
+ reason: string;
34
+ };
35
+ type ProposedOp = {
36
+ op: 'add_step';
37
+ at?: number;
38
+ step: {
39
+ description: string;
40
+ actionType: string;
41
+ stepType: 'web';
42
+ expectedResult?: string;
43
+ };
44
+ } | {
45
+ op: 'update_step';
46
+ n: number;
47
+ patch: {
48
+ description?: string;
49
+ expectedResult?: string;
50
+ };
51
+ } | {
52
+ op: 'remove_step';
53
+ n: number;
54
+ };
55
+ type TCDrift = {
56
+ testCaseId: string;
57
+ title: string;
58
+ driftScore: 'none' | 'minor' | 'major';
59
+ signals: DriftSignal[];
60
+ proposedOps: ProposedOp[];
61
+ unresolved: string[];
62
+ };
63
+ export declare function computeDrift(story: Story, tc: TestCase, sensitivity?: Sensitivity): TCDrift;
64
+ export declare function registerStorySyncTools(server: McpServer, deps: StorySyncToolsDeps): void;
65
+ export {};
66
+ //# sourceMappingURL=storySync.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storySync.tools.d.ts","sourceRoot":"","sources":["../../src/tools/storySync.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAQ,MAAM,oBAAoB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;CAC1C,CAAC;AAMF,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAiDjD,KAAK,WAAW,GACZ;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,KAAK,UAAU,GACX;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC5H;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1F;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAQF,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAE,WAAsB,GAAG,OAAO,CAiFrG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAkGxF"}
@@ -0,0 +1,213 @@
1
+ import { z } from 'zod';
2
+ import { ok, err } from '../mcpResult.js';
3
+ const NOT_CONNECTED = 'Not connected to a product. Use qa_connect first — story-sync needs a live backend to read ' +
4
+ 'the story and its linked test cases.';
5
+ // Jaccard thresholds by sensitivity. T_HIGH = "clearly the same AC as this step".
6
+ // T_LOW = "possible match, likely reworded". Below T_LOW = no match (AC is new / step is stale).
7
+ const THRESHOLDS = {
8
+ strict: { high: 0.5, low: 0.15 },
9
+ normal: { high: 0.6, low: 0.25 },
10
+ loose: { high: 0.7, low: 0.35 },
11
+ };
12
+ // Small stopword set — enough to stop "the/and/a" from dominating token overlap on short ACs.
13
+ // ponytail: hand-picked list, swap for a stemmer if false-positive rate warrants it.
14
+ const STOP = new Set([
15
+ 'the', 'and', 'for', 'with', 'that', 'this', 'from', 'into', 'onto', 'when', 'then',
16
+ 'should', 'shall', 'must', 'will', 'can', 'may', 'are', 'was', 'were', 'been', 'being',
17
+ 'has', 'have', 'had', 'not', 'but', 'user', 'system', 'given', 'verify', 'ensure',
18
+ ]);
19
+ function tokenize(s) {
20
+ if (!s)
21
+ return new Set();
22
+ const out = new Set();
23
+ for (const t of s.toLowerCase().split(/[^a-z0-9]+/)) {
24
+ if (t.length >= 3 && !STOP.has(t))
25
+ out.add(t);
26
+ }
27
+ return out;
28
+ }
29
+ function jaccard(a, b) {
30
+ if (a.size === 0 && b.size === 0)
31
+ return 0;
32
+ let inter = 0;
33
+ for (const t of a)
34
+ if (b.has(t))
35
+ inter++;
36
+ const union = a.size + b.size - inter;
37
+ return union === 0 ? 0 : inter / union;
38
+ }
39
+ function stepTokens(step) {
40
+ const a = tokenize(step.description);
41
+ const b = tokenize(step.expectedResult);
42
+ for (const t of b)
43
+ a.add(t);
44
+ return a;
45
+ }
46
+ // A step "looks AC-derived" if it has an expectedResult or a non-trivial description —
47
+ // used to decide whether an unmatched step is genuinely stale (worth proposing remove_step)
48
+ // vs. a mundane setup step we should leave alone.
49
+ function looksAcDerived(step) {
50
+ return !!step.expectedResult && step.expectedResult.trim().length > 0;
51
+ }
52
+ export function computeDrift(story, tc, sensitivity = 'normal') {
53
+ const { high, low } = THRESHOLDS[sensitivity];
54
+ const signals = [];
55
+ const proposedOps = [];
56
+ const unresolved = [];
57
+ const acList = (story.acceptanceCriteria ?? []).map((t) => t.trim()).filter(Boolean);
58
+ const acTokens = acList.map(tokenize);
59
+ const stepTok = tc.steps.map((s) => ({ n: s.n, tokens: stepTokens(s), step: s }));
60
+ // Track which steps got matched by any AC (to detect stale steps).
61
+ const stepMatched = new Set();
62
+ acList.forEach((acText, i) => {
63
+ const acTok = acTokens[i];
64
+ let best = { score: 0, n: -1, stepDesc: '' };
65
+ for (const st of stepTok) {
66
+ const score = jaccard(acTok, st.tokens);
67
+ if (score > best.score)
68
+ best = { score, n: st.n, stepDesc: st.step.description };
69
+ }
70
+ if (best.score >= high) {
71
+ stepMatched.add(best.n);
72
+ return;
73
+ }
74
+ if (best.score >= low && best.n > 0) {
75
+ stepMatched.add(best.n);
76
+ signals.push({ kind: 'ac_reworded', from: best.stepDesc, to: acText, matchingSteps: [best.n] });
77
+ proposedOps.push({
78
+ op: 'update_step',
79
+ n: best.n,
80
+ patch: { description: acText, expectedResult: acText },
81
+ });
82
+ return;
83
+ }
84
+ // No match: AC is new to this TC.
85
+ const insertAt = tc.steps.length + 1;
86
+ signals.push({ kind: 'ac_added', text: acText, likelyInsertAt: insertAt });
87
+ proposedOps.push({
88
+ op: 'add_step',
89
+ at: insertAt,
90
+ step: {
91
+ description: acText,
92
+ actionType: 'manualStep',
93
+ stepType: 'web',
94
+ expectedResult: acText,
95
+ },
96
+ });
97
+ });
98
+ // Stale-step detection: any step never matched, that looks AC-derived, is a candidate remove.
99
+ for (const st of stepTok) {
100
+ if (stepMatched.has(st.n))
101
+ continue;
102
+ if (!looksAcDerived(st.step))
103
+ continue;
104
+ // Second pass: was the best-matching AC still below T_LOW? If so, propose remove; else unresolved.
105
+ let best = 0;
106
+ for (const acTok of acTokens) {
107
+ const s = jaccard(st.tokens, acTok);
108
+ if (s > best)
109
+ best = s;
110
+ }
111
+ if (best < low / 2) {
112
+ signals.push({ kind: 'ac_removed', text: st.step.description, matchingSteps: [st.n] });
113
+ proposedOps.push({ op: 'remove_step', n: st.n });
114
+ }
115
+ else {
116
+ signals.push({ kind: 'step_stale', n: st.n, reason: 'no strong AC match' });
117
+ unresolved.push(`step ${st.n} has weak overlap with all ACs — review whether it's still needed`);
118
+ }
119
+ }
120
+ const hasStructural = signals.some((s) => s.kind === 'ac_added' || s.kind === 'ac_removed');
121
+ const driftScore = signals.length === 0 ? 'none' : hasStructural ? 'major' : 'minor';
122
+ return {
123
+ testCaseId: tc.id ?? '',
124
+ title: tc.title,
125
+ driftScore,
126
+ signals,
127
+ proposedOps,
128
+ unresolved,
129
+ };
130
+ }
131
+ export function registerStorySyncTools(server, deps) {
132
+ server.registerTool('story_sync_testcases', {
133
+ title: 'Detect drift between a user story and its linked manual test cases',
134
+ description: 'Compare a user STORY against every MANUAL test case linked to it (via storyRef) and return ' +
135
+ 'a structured drift report: what changed (ac_added / ac_reworded / ac_removed / step_stale) ' +
136
+ 'and the exact draft ops (add_step / update_step / remove_step) to apply.\n\n' +
137
+ 'HOW TO APPLY THE REPORT (mandatory path — do not deviate):\n' +
138
+ ' For each entry in `results[]`:\n' +
139
+ ' 1. tc_draft_open({ tcId: <testCaseId> }) ← loads the EXISTING TC as a draft, SAME id\n' +
140
+ ' 2. tc_draft_update({ draftId, ops: <proposedOps> })\n' +
141
+ ' 3. tc_save({ draftId }) ← persists back to the SAME TC id\n' +
142
+ 'DO NOT delete the test case and recreate it. DO NOT create a sibling/replacement TC. ' +
143
+ 'In-place edit preserves the TC id, run history, existing parameters, testdata bindings, and ' +
144
+ 'suite membership — all of which are lost on delete+recreate. Even when the drift is large ' +
145
+ '(new AC, restructured flow), the correct action is still edit-in-place via the three steps ' +
146
+ 'above. If the user needs a NEW test case for scope the existing TC does not cover, that is a ' +
147
+ 'separate authoring task (tc_draft_create), NOT part of applying this drift report.\n\n' +
148
+ 'AUTOMATION test cases are reported in `skipped` (v1 scope: manual only — automation drift ' +
149
+ 'needs recording, which is user-driven). Pass `testCaseIds` to limit the scan; otherwise the ' +
150
+ 'tool walks listTestCases and filters by storyRef (bounded by `scanLimit`, default 200). ' +
151
+ 'Report-only: this tool writes nothing itself. Requires a live connection.',
152
+ inputSchema: {
153
+ storyId: z.string().describe('Story id or business key (US_123).'),
154
+ testCaseIds: z.array(z.string()).optional().describe('Restrict comparison to these TC ids/keys. Recommended for large projects; otherwise the ' +
155
+ 'tool walks up to `scanLimit` TCs.'),
156
+ sensitivity: z.enum(['strict', 'normal', 'loose']).optional().describe('Match-strictness for AC↔step overlap. strict=more drift flagged, loose=less. Default normal.'),
157
+ scanLimit: z.number().int().positive().optional().describe('Cap on how many TCs to fetch when `testCaseIds` is omitted. Default 200.'),
158
+ },
159
+ annotations: { readOnlyHint: true },
160
+ }, async ({ storyId, testCaseIds, sensitivity, scanLimit }) => {
161
+ const adapter = deps.getAdapter();
162
+ if (!adapter)
163
+ return err(NOT_CONNECTED);
164
+ if (!adapter.getStory)
165
+ return err('This product does not expose a user-story backlog.');
166
+ try {
167
+ const story = await adapter.getStory(storyId);
168
+ // Resolve candidate TCs.
169
+ let candidates = [];
170
+ if (testCaseIds && testCaseIds.length > 0) {
171
+ candidates = await Promise.all(testCaseIds.map((id) => adapter.getTestCase(id)));
172
+ }
173
+ else {
174
+ const cap = scanLimit ?? 200;
175
+ const summaries = await adapter.listTestCases({ limit: cap });
176
+ const fetched = await Promise.all(summaries.map((s) => adapter.getTestCase(s.id)));
177
+ candidates = fetched.filter((tc) => tc.storyRef === story.id || tc.storyRef === story.key);
178
+ }
179
+ const results = [];
180
+ const skipped = [];
181
+ const sens = sensitivity ?? 'normal';
182
+ for (const tc of candidates) {
183
+ if (!tc.id) {
184
+ skipped.push({ testCaseId: '', title: tc.title, reason: 'no_id' });
185
+ continue;
186
+ }
187
+ if (tc.category !== 'manual') {
188
+ skipped.push({ testCaseId: tc.id, title: tc.title, reason: 'automation_tc_out_of_scope' });
189
+ continue;
190
+ }
191
+ results.push(computeDrift(story, tc, sens));
192
+ }
193
+ const drifted = results.filter((r) => r.driftScore !== 'none');
194
+ const summary = `Story **${story.title}**${story.key ? ` · ${story.key}` : ''}\n\n` +
195
+ `${results.length} manual TC${results.length === 1 ? '' : 's'} compared · ` +
196
+ `${drifted.length} drifted · ${skipped.length} skipped (automation / no-id).\n\n` +
197
+ (drifted.length
198
+ ? drifted
199
+ .map((r) => `- **${r.title}** (${r.testCaseId}) — ${r.driftScore} · ${r.signals.length} signal${r.signals.length === 1 ? '' : 's'} · ${r.proposedOps.length} op${r.proposedOps.length === 1 ? '' : 's'}`)
200
+ .join('\n')
201
+ : '_No drift detected._') +
202
+ (skipped.length
203
+ ? `\n\n_Skipped:_\n` +
204
+ skipped.map((s) => `- ${s.title} (${s.testCaseId || '—'}): ${s.reason}`).join('\n')
205
+ : '');
206
+ return ok(summary, { story, results, skipped });
207
+ }
208
+ catch (e) {
209
+ return err(e instanceof Error ? e.message : String(e));
210
+ }
211
+ });
212
+ }
213
+ //# sourceMappingURL=storySync.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storySync.tools.js","sourceRoot":"","sources":["../../src/tools/storySync.tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA+UtF"}
1
+ {"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAgWtF"}
@@ -135,9 +135,12 @@ export function registerTestcaseTools(server, deps) {
135
135
  description: z.string().optional().describe('Optional test-case description / summary.'),
136
136
  storyRef: z.string().optional().describe('Link this test case to a USER STORY — its id or business key (US_123, from story_list / ' +
137
137
  'story_get). Used when drafting MANUAL test cases for a story so they save linked to it.'),
138
+ folderOrModule: z.string().optional().describe('SimplifyQA-only: id of the MODULE / folder to file this test case under on save (from ' +
139
+ 'list_modules). ASK the user which module before drafting; SimplifyQA files test cases in ' +
140
+ 'a module tree. Walnut ignores this.'),
138
141
  steps: z.array(zNewStep).optional(),
139
142
  },
140
- }, async ({ title, priority, category, description, storyRef, steps }) => {
143
+ }, async ({ title, priority, category, description, storyRef, folderOrModule, steps }) => {
141
144
  try {
142
145
  const tc = {
143
146
  title,
@@ -145,6 +148,7 @@ export function registerTestcaseTools(server, deps) {
145
148
  category: category ?? 'automated',
146
149
  ...(description ? { description } : {}),
147
150
  ...(storyRef ? { storyRef } : {}),
151
+ ...(folderOrModule ? { folderOrModule } : {}),
148
152
  // zod (zNewStep) is the runtime gate on shape; DraftStore.create
149
153
  // assigns real step numbers regardless of what's passed here.
150
154
  steps: (steps ?? []),
@@ -233,7 +237,11 @@ export function registerTestcaseTools(server, deps) {
233
237
  title: 'Save a draft test case to the product',
234
238
  description: 'Validate a draft, then PERSIST it to the connected product — creating a NEW test case, or ' +
235
239
  'UPDATING the one it was opened from (when the draft carries an id). Returns the product id + a ' +
236
- 'deep link. Requires a live connection (qa_connect); the persist is forwarded to the product MCP.',
240
+ 'deep link. Requires a live connection (qa_connect); the persist is forwarded to the product MCP.\n' +
241
+ '⚠️ CALL ONLY ON AN EXPLICIT USER SAVE INSTRUCTION (e.g. "save it", "save this", "persist it"). ' +
242
+ 'RECORDING or AUTHORING a test case is NOT a save instruction; neither is the user approving the ' +
243
+ 'content ("looks good", "nice"). After a recording/draft finishes, SHOW the steps and ASK — do NOT ' +
244
+ 'auto-save. When unsure whether a reply meant save, ASK rather than saving.',
237
245
  inputSchema: { draftId: z.string().describe('The draft id from tc_draft_create / tc_draft_open.') },
238
246
  annotations: { readOnlyHint: false },
239
247
  }, async ({ draftId }) => {
@@ -267,6 +275,13 @@ export function registerTestcaseTools(server, deps) {
267
275
  }
268
276
  catch { /* draft already gone — nothing to bind */ }
269
277
  }
278
+ // Saving a RECORDED draft through the MCP path: close that recording's live-steps window on the
279
+ // agent so it doesn't linger behind the freshly-opened saved-TC window. Best-effort — only when
280
+ // the draft came from a recording (has a sessionId) and an agent hop exists; never fails the save.
281
+ // (A MANUAL save in the FE never reaches here, so those windows are left alone.)
282
+ if (draft.sessionId && adapter.callRaw) {
283
+ await adapter.callRaw('recording_window_close', { sessionId: draft.sessionId }).catch(() => { });
284
+ }
270
285
  const link = saved.productUrl ? `\n${saved.productUrl}` : '';
271
286
  return ok(`${isUpdate ? 'Updated' : 'Created'} test case ${saved.id}.${link}`, { saved, draftId: draft.draftId });
272
287
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testcase.tools.js","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testcase.tools.js","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ProviderAdapter } from '../adapters/types.js';
3
+ export type TestdataToolsDeps = {
4
+ getAdapter?: (() => ProviderAdapter | null) | undefined;
5
+ };
6
+ export declare function registerTestdataTools(server: McpServer, deps: TestdataToolsDeps): void;
7
+ //# sourceMappingURL=testdata.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testdata.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testdata.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA+JtF"}
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ import { ok, err } from '../mcpResult.js';
3
+ function describeError(e) {
4
+ return e instanceof Error ? e.message : String(e);
5
+ }
6
+ export function registerTestdataTools(server, deps) {
7
+ server.registerTool('tc_get_testdata', {
8
+ title: 'Read the current testdata template for a test case',
9
+ description: 'Fetch the default iteration (template row) for TC `tcId` — the parameter list plus the ' +
10
+ 'CURRENT seed values. Call this FIRST when you plan to generate testdata: use the seeds + ' +
11
+ 'the test case\'s steps (from tc_get) to reason about what realistic values look like for ' +
12
+ 'THIS flow, then pass those values to tc_generate_testdata. Example: for a SauceDemo login ' +
13
+ 'flow, seeds tell you the valid usernames and the constant password/product/prices.',
14
+ inputSchema: {
15
+ tcId: z.string().describe('Test case id (or business key like TC_123).'),
16
+ environmentType: z.string().optional()
17
+ .describe('Env key; defaults to the first configured env for the project (falls back to "general").'),
18
+ },
19
+ annotations: { readOnlyHint: true },
20
+ }, async ({ tcId, environmentType }) => {
21
+ const adapter = deps.getAdapter?.();
22
+ if (!adapter)
23
+ return err('Not connected to a product. Use qa_connect first.');
24
+ if (!adapter.getDefaultIteration) {
25
+ return err('This provider does not expose a testdata store.');
26
+ }
27
+ try {
28
+ const tpl = await adapter.getDefaultIteration({
29
+ tcId,
30
+ ...(environmentType !== undefined ? { environmentType } : {}),
31
+ });
32
+ if (!tpl.parameters?.length) {
33
+ return ok(`Test case "${tcId}" has no parameterized fields in env "${tpl.environmentType}" — nothing to generate.`, { tcId, parameters: [] });
34
+ }
35
+ const text = `Testdata template for ${tcId} · env ${tpl.environmentType} · version ${tpl.versionId}\n` +
36
+ `${tpl.parameters.length} parameter(s):\n` +
37
+ tpl.parameters.map((p) => `- ${p.name} = "${p.seed}"`).join('\n');
38
+ return ok(text, {
39
+ tcId,
40
+ versionId: tpl.versionId,
41
+ environmentType: tpl.environmentType,
42
+ parameters: tpl.parameters,
43
+ });
44
+ }
45
+ catch (e) {
46
+ return err(`Could not read testdata for "${tcId}": ${describeError(e)}`);
47
+ }
48
+ });
49
+ server.registerTool('tc_generate_testdata', {
50
+ title: 'Save generated testdata rows to a test case',
51
+ description: 'Persist up to 20 testdata rows for TC `tcId`. Two ways to feed values:\n' +
52
+ ' 1) Model-generated — pass `rows: [{paramName: value}, ...]`. Call tc_get_testdata first ' +
53
+ 'for the parameter names + seeds, tc_get for step context, then produce rows that fit the flow.\n' +
54
+ ' 2) Formula-driven — pass `formulas: {paramName: {name, args?}}` (names from tc_list_formulas). ' +
55
+ 'The adapter evaluates each formula per row via /tm/customFormula and stamps both the value ' +
56
+ 'and the source `=NAME(...)` expression. Use `count` to say how many rows, or provide `rows` ' +
57
+ 'for constant columns; mixing is fine (formulas win over row values for the same param).\n' +
58
+ 'Rows are appended as new iterations; they do not become the default. Hard cap: 20 rows.',
59
+ inputSchema: {
60
+ tcId: z.string().describe('Test case id (or business key like TC_123).'),
61
+ rows: z.array(z.record(z.string(), z.string())).max(20).optional()
62
+ .describe('Rows keyed by param name (from tc_get_testdata). 1..20 rows. Omit when using formulas + count.'),
63
+ count: z.number().int().min(1).max(20).optional()
64
+ .describe('How many rows to generate when using formulas without explicit rows. Ignored if rows is set.'),
65
+ formulas: z.record(z.string(), z.object({
66
+ name: z.string().describe('RAW formula name from tc_list_formulas — the identifier only, no parens, no arg list. Correct: "FIRST_NAME". Wrong: "FIRST_NAME()", "FIRST_NAME(country,sex)".'),
67
+ args: z.record(z.string(), z.string()).optional()
68
+ .describe('Named args. Keys MUST match Formula.parameters[].keyName exactly, no trailing colons or extra whitespace. Correct: {"country name": "United States"}. Wrong: {"country name:": "..."}.'),
69
+ })).optional()
70
+ .describe('Per-column formula assignments applied to every row. Outer keys are param names from tc_get_testdata. Wins over rows[i] for the same key.'),
71
+ environmentType: z.string().optional()
72
+ .describe('Env key; defaults to whatever tc_get_testdata resolved.'),
73
+ },
74
+ annotations: { readOnlyHint: false },
75
+ }, async ({ tcId, rows, count, formulas, environmentType }) => {
76
+ const adapter = deps.getAdapter?.();
77
+ if (!adapter)
78
+ return err('Not connected to a product. Use qa_connect first.');
79
+ if (!adapter.getDefaultIteration || !adapter.saveGeneratedIterations) {
80
+ return err('This provider does not expose a testdata store.');
81
+ }
82
+ const hasFormulas = formulas != null && Object.keys(formulas).length > 0;
83
+ // Reconcile rows vs count. Explicit rows always win; otherwise formulas + count seeds N empty
84
+ // rows that the adapter fills column-by-column via evaluateFormula.
85
+ let baseRows;
86
+ if (rows && rows.length > 0) {
87
+ baseRows = rows;
88
+ }
89
+ else if (hasFormulas && count && count > 0) {
90
+ baseRows = Array.from({ length: count }, () => ({}));
91
+ }
92
+ else {
93
+ return err('Provide either `rows` (1..20) or `formulas` together with `count` (1..20).');
94
+ }
95
+ if (baseRows.length > 20)
96
+ return err('Max 20 rows per call.');
97
+ // Resolve version + env by re-reading the template. Server-side env resolution honors project
98
+ // config; passing rows without this echo would risk saving into the wrong env.
99
+ let tpl;
100
+ try {
101
+ tpl = await adapter.getDefaultIteration({
102
+ tcId,
103
+ ...(environmentType !== undefined ? { environmentType } : {}),
104
+ });
105
+ }
106
+ catch (e) {
107
+ return err(`Could not fetch the default iteration for "${tcId}": ${describeError(e)}`);
108
+ }
109
+ if (!tpl.parameters?.length) {
110
+ return err(`Test case "${tcId}" has no parameterized fields — nothing to save.`);
111
+ }
112
+ const known = new Set(tpl.parameters.map((p) => p.name));
113
+ const unknown = new Set();
114
+ for (const r of baseRows)
115
+ for (const k of Object.keys(r))
116
+ if (!known.has(k))
117
+ unknown.add(k);
118
+ if (hasFormulas)
119
+ for (const k of Object.keys(formulas))
120
+ if (!known.has(k))
121
+ unknown.add(k);
122
+ let result;
123
+ try {
124
+ result = await adapter.saveGeneratedIterations({
125
+ tcId,
126
+ versionId: tpl.versionId,
127
+ environmentType: tpl.environmentType,
128
+ rows: baseRows,
129
+ parameters: tpl.parameters, // reuse the just-fetched template; adapter skips its own re-fetch
130
+ ...(hasFormulas ? { formulas: formulas } : {}),
131
+ });
132
+ }
133
+ catch (e) {
134
+ return err(`Save failed: ${describeError(e)}`);
135
+ }
136
+ const paramNames = tpl.parameters.map((p) => p.name);
137
+ const preview = baseRows.slice(0, 3);
138
+ const formulaNote = hasFormulas
139
+ ? `\nFormula columns: ${Object.keys(formulas).join(', ')} (evaluated per row).`
140
+ : '';
141
+ const warn = unknown.size
142
+ ? `\n(Ignored unknown param name(s): ${[...unknown].join(', ')} — not in the template.)`
143
+ : '';
144
+ const link = result.datasetUrl ? `\n${result.datasetUrl}` : '';
145
+ const text = `Saved ${result.inserted} testdata row(s) for ${tcId} · env ${tpl.environmentType}.${link}${formulaNote}${warn}\n\n` +
146
+ `Preview (first ${preview.length}, formula values shown as their param name):\n` +
147
+ preview
148
+ .map((r, i) => `${i + 1}. ${paramNames.map((n) => `${n}=${r[n] ?? (hasFormulas && (n in formulas) ? `<${formulas[n].name}()>` : '')}`).join(' | ')}`)
149
+ .join('\n');
150
+ return ok(text, {
151
+ tcId,
152
+ generated: result.inserted,
153
+ params: paramNames,
154
+ preview,
155
+ ...(hasFormulas ? { formulasUsed: Object.keys(formulas) } : {}),
156
+ ...(result.datasetUrl ? { datasetUrl: result.datasetUrl } : {}),
157
+ ...(result.iterationIds ? { iterationIds: result.iterationIds } : {}),
158
+ });
159
+ });
160
+ }
161
+ //# sourceMappingURL=testdata.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testdata.tools.js","sourceRoot":"","sources":["../../src/tools/testdata.tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "common-qa-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Common QA MCP — one product-neutral MCP that routes test-case lifecycle requests to Walnut or SimplifyQA for any AI client. Launch over stdio via npx; install the Walnut QA agent with `init-agents`.",
6
6
  "bin": {