@sixseven-ai/cli 0.1.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.
@@ -0,0 +1,561 @@
1
+ import { setTimeout as sleep } from 'node:timers/promises';
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { z } from 'zod';
6
+ import { SixSevenApi, TERMINAL_RUN_STATUSES } from '../api.js';
7
+ import { loadContext } from '../config.js';
8
+ import { SourceReader } from '../source-reader.js';
9
+ const tools = [
10
+ // ---------- Whitebox: source code ----------
11
+ {
12
+ name: 'sixseven.read_code',
13
+ description: 'Read a text file from the developer repo. Path is relative to repo root and must fall within configured codeRoots. Use to understand routes, components, validators, and fixtures before generating a testcase.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: { path: { type: 'string' } },
17
+ required: ['path'],
18
+ },
19
+ zod: z.object({ path: z.string().min(1) }),
20
+ handler: async ({ path }, { reader }) => reader.readFile(path),
21
+ },
22
+ {
23
+ name: 'sixseven.list_dir',
24
+ description: 'List entries of a directory inside the developer repo. Path is relative to repo root.',
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: { path: { type: 'string', default: '.' } },
28
+ },
29
+ zod: z.object({ path: z.string().default('.') }),
30
+ handler: async ({ path }, { reader }) => reader.listDir(path),
31
+ },
32
+ {
33
+ name: 'sixseven.search_code',
34
+ description: 'Search developer repo (within codeRoots) for a substring or regex. Returns up to 200 matches with file + line + preview. Use to locate routes, handlers, components by name.',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ query: { type: 'string' },
39
+ regex: { type: 'boolean', default: false },
40
+ caseSensitive: { type: 'boolean', default: false },
41
+ maxResults: { type: 'number', default: 200 },
42
+ },
43
+ required: ['query'],
44
+ },
45
+ zod: z.object({
46
+ query: z.string().min(1),
47
+ regex: z.boolean().optional(),
48
+ caseSensitive: z.boolean().optional(),
49
+ maxResults: z.number().int().positive().max(1000).optional(),
50
+ }),
51
+ handler: async (args, { reader }) => reader.search(args.query, args),
52
+ },
53
+ // ---------- SixSeven: features ----------
54
+ {
55
+ name: 'sixseven.list_features',
56
+ description: 'List features (groups of testcases) for the bound SixSeven project. Each feature has an id and a name. Pick the most relevant feature id before creating a testcase.',
57
+ inputSchema: { type: 'object', properties: {} },
58
+ zod: z.object({}).passthrough(),
59
+ handler: async (_args, { api, projectId }) => api.listFeatures(projectId),
60
+ },
61
+ {
62
+ name: 'sixseven.create_feature',
63
+ description: 'Create a new feature in the bound SixSeven project. Use when no existing feature fits the testcase you are about to create.',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ name: { type: 'string' },
68
+ path: { type: 'string' },
69
+ description: { type: 'string' },
70
+ prdContent: { type: 'string' },
71
+ },
72
+ required: ['name'],
73
+ },
74
+ zod: z.object({
75
+ name: z.string().min(1),
76
+ path: z.string().optional(),
77
+ description: z.string().optional(),
78
+ prdContent: z.string().optional(),
79
+ }),
80
+ handler: async (args, { api, projectId }) => api.createFeature(projectId, args),
81
+ },
82
+ // ---------- SixSeven: testcases ----------
83
+ {
84
+ name: 'sixseven.list_testcases',
85
+ description: 'List testcases for the bound SixSeven project, optionally filtered by platform (web/android/ios).',
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ platform: { type: 'string', enum: ['web', 'android', 'ios'] },
90
+ },
91
+ },
92
+ zod: z.object({ platform: z.enum(['web', 'android', 'ios']).optional() }),
93
+ handler: async (args, { api, projectId }) => api.listTestCasesByProject(projectId, args.platform),
94
+ },
95
+ {
96
+ name: 'sixseven.get_testcase',
97
+ description: 'Fetch a single testcase by id, including full steps array.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: { id: { type: 'string' } },
101
+ required: ['id'],
102
+ },
103
+ zod: z.object({ id: z.string().min(1) }),
104
+ handler: async ({ id }, { api }) => api.getTestCase(id),
105
+ },
106
+ {
107
+ name: 'sixseven.create_testcase',
108
+ description: 'Create a new testcase under a SixSeven feature. Steps follow Midscene action grammar (tap, input, assert, scroll, mailTmInbox, mailTmWaitOtp, mailTmWaitLink). If featureId is omitted, the project default from .sixseven/config.json is used.',
109
+ inputSchema: {
110
+ type: 'object',
111
+ properties: {
112
+ featureId: { type: 'string' },
113
+ name: { type: 'string' },
114
+ steps: { type: 'array', items: { type: 'object' } },
115
+ priority: {
116
+ type: 'string',
117
+ enum: ['low', 'medium', 'high', 'critical'],
118
+ default: 'medium',
119
+ },
120
+ category: { type: 'string', default: 'positive' },
121
+ reason: { type: 'string' },
122
+ description: { type: 'string' },
123
+ expectedResult: { type: 'string' },
124
+ platforms: { type: 'array', items: { type: 'string' } },
125
+ coveredScenarios: { type: 'array', items: { type: 'string' } },
126
+ tags: { type: 'array', items: { type: 'string' } },
127
+ },
128
+ required: ['name', 'steps'],
129
+ },
130
+ zod: z.object({
131
+ featureId: z.string().optional(),
132
+ name: z.string().min(1),
133
+ steps: z.array(z.record(z.any())).min(1),
134
+ priority: z.enum(['low', 'medium', 'high', 'critical']).optional(),
135
+ category: z.string().optional(),
136
+ reason: z.string().optional(),
137
+ description: z.string().optional(),
138
+ expectedResult: z.string().optional(),
139
+ platforms: z.array(z.string()).optional(),
140
+ coveredScenarios: z.array(z.string()).optional(),
141
+ tags: z.array(z.string()).optional(),
142
+ }),
143
+ handler: async (args, { api, defaultFeatureId }) => {
144
+ const featureId = args.featureId ?? defaultFeatureId;
145
+ if (!featureId) {
146
+ throw new Error('No featureId provided and no defaultFeatureId in .sixseven/config.json. Call sixseven.list_features or sixseven.create_feature first.');
147
+ }
148
+ const { featureId: _ignore, ...payload } = args;
149
+ return api.createTestCase(featureId, payload);
150
+ },
151
+ },
152
+ {
153
+ name: 'sixseven.update_testcase',
154
+ description: 'Patch an existing testcase. Useful in the auto-fix loop after reading evidence from a failed run.',
155
+ inputSchema: {
156
+ type: 'object',
157
+ properties: {
158
+ id: { type: 'string' },
159
+ patch: { type: 'object' },
160
+ },
161
+ required: ['id', 'patch'],
162
+ },
163
+ zod: z.object({ id: z.string().min(1), patch: z.record(z.any()) }),
164
+ handler: async ({ id, patch }, { api }) => api.updateTestCase(id, patch),
165
+ },
166
+ // ---------- SixSeven: runs ----------
167
+ {
168
+ name: 'sixseven.list_runs',
169
+ description: 'List recent runs for the bound SixSeven project, optionally filtered by platform.',
170
+ inputSchema: {
171
+ type: 'object',
172
+ properties: {
173
+ platform: { type: 'string', enum: ['web', 'android', 'ios'] },
174
+ },
175
+ },
176
+ zod: z.object({ platform: z.enum(['web', 'android', 'ios']).optional() }),
177
+ handler: async (args, { api, projectId }) => api.listRuns(projectId, args.platform),
178
+ },
179
+ {
180
+ name: 'sixseven.get_run',
181
+ description: 'Fetch a single run by id including current status, started/completed timestamps, and reportUrl when available.',
182
+ inputSchema: {
183
+ type: 'object',
184
+ properties: { runId: { type: 'string' } },
185
+ required: ['runId'],
186
+ },
187
+ zod: z.object({ runId: z.string().min(1) }),
188
+ handler: async ({ runId }, { api }) => api.getRun(runId),
189
+ },
190
+ {
191
+ name: 'sixseven.create_run',
192
+ description: 'Create a new run for one or more testcases. Defaults: caseSelectionMode="select", platform from .sixseven/config.json. Returns the created run object including its id.',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ name: { type: 'string' },
197
+ testCaseIds: { type: 'array', items: { type: 'string' } },
198
+ featureIds: { type: 'array', items: { type: 'string' } },
199
+ platform: { type: 'string', enum: ['web', 'android', 'ios'] },
200
+ caseSelectionMode: { type: 'string', enum: ['all', 'select'] },
201
+ configurationId: { type: 'string' },
202
+ milestoneId: { type: 'string' },
203
+ tags: { type: 'array', items: { type: 'string' } },
204
+ notes: { type: 'string' },
205
+ browserEngine: { type: 'string', enum: ['chrome', 'edge'] },
206
+ },
207
+ required: ['name'],
208
+ },
209
+ zod: z.object({
210
+ name: z.string().min(1),
211
+ testCaseIds: z.array(z.string()).optional(),
212
+ featureIds: z.array(z.string()).optional(),
213
+ platform: z.enum(['web', 'android', 'ios']).optional(),
214
+ caseSelectionMode: z.enum(['all', 'select']).optional(),
215
+ configurationId: z.string().optional(),
216
+ milestoneId: z.string().optional(),
217
+ tags: z.array(z.string()).optional(),
218
+ notes: z.string().optional(),
219
+ browserEngine: z.enum(['chrome', 'edge']).optional(),
220
+ }),
221
+ handler: async (args, { api, projectId, defaultPlatform }) => {
222
+ const body = {
223
+ ...args,
224
+ platform: args.platform ?? defaultPlatform,
225
+ caseSelectionMode: args.caseSelectionMode ??
226
+ (args.testCaseIds?.length ? 'select' : 'all'),
227
+ };
228
+ return api.createRun(projectId, body);
229
+ },
230
+ },
231
+ {
232
+ name: 'sixseven.execute_run',
233
+ description: 'Trigger execution of an existing run. Fire-and-forget (202): the runner state lives in SixSeven. Use sixseven.wait_for_run to await terminal status.',
234
+ inputSchema: {
235
+ type: 'object',
236
+ properties: {
237
+ runId: { type: 'string' },
238
+ manualOtp: { type: 'boolean', default: false },
239
+ },
240
+ required: ['runId'],
241
+ },
242
+ zod: z.object({
243
+ runId: z.string().min(1),
244
+ manualOtp: z.boolean().optional(),
245
+ }),
246
+ handler: async ({ runId, manualOtp }, { api }) => api.executeRun(runId, { manualOtp }),
247
+ },
248
+ {
249
+ name: 'sixseven.cancel_run',
250
+ description: 'Cancel an in-flight run. Idempotent for queued runs; for inline runs the cancel may take effect at the next case boundary.',
251
+ inputSchema: {
252
+ type: 'object',
253
+ properties: { runId: { type: 'string' } },
254
+ required: ['runId'],
255
+ },
256
+ zod: z.object({ runId: z.string().min(1) }),
257
+ handler: async ({ runId }, { api }) => api.cancelRun(runId),
258
+ },
259
+ {
260
+ name: 'sixseven.wait_for_run',
261
+ description: 'Poll a run until it reaches a terminal status (passed/failed/cancelled/error) or the timeout elapses. Returns the final run object plus a summary of per-case statuses. Default timeout 300 s, poll interval 3 s.',
262
+ inputSchema: {
263
+ type: 'object',
264
+ properties: {
265
+ runId: { type: 'string' },
266
+ timeoutSec: { type: 'number', default: 300 },
267
+ pollMs: { type: 'number', default: 3000 },
268
+ },
269
+ required: ['runId'],
270
+ },
271
+ zod: z.object({
272
+ runId: z.string().min(1),
273
+ timeoutSec: z.number().int().positive().max(3600).optional(),
274
+ pollMs: z.number().int().positive().max(30_000).optional(),
275
+ }),
276
+ handler: async (args, { api, baseUrl }) => {
277
+ const timeoutMs = (args.timeoutSec ?? 300) * 1000;
278
+ const pollMs = args.pollMs ?? 3000;
279
+ const start = Date.now();
280
+ let last = await api.getRun(args.runId);
281
+ while (!TERMINAL_RUN_STATUSES.has(last.status) &&
282
+ Date.now() - start < timeoutMs) {
283
+ await sleep(pollMs);
284
+ last = await api.getRun(args.runId);
285
+ }
286
+ const terminal = TERMINAL_RUN_STATUSES.has(last.status);
287
+ const attempts = await api
288
+ .listRunCaseAttempts(args.runId)
289
+ .catch(() => ({ attempts: [] }));
290
+ const summary = attempts.attempts.reduce((acc, a) => {
291
+ acc[a.status] = (acc[a.status] ?? 0) + 1;
292
+ return acc;
293
+ }, {});
294
+ return {
295
+ terminal,
296
+ elapsedMs: Date.now() - start,
297
+ runId: args.runId,
298
+ status: last.status,
299
+ reportUrl: last.reportUrl ?? null,
300
+ viewUrl: `${baseUrl}/runs/${args.runId}`,
301
+ completedAt: last.completedAt ?? null,
302
+ caseStatusSummary: summary,
303
+ run: last,
304
+ };
305
+ },
306
+ },
307
+ {
308
+ name: 'sixseven.list_run_testcases',
309
+ description: 'List the testcases attached to a specific run.',
310
+ inputSchema: {
311
+ type: 'object',
312
+ properties: { runId: { type: 'string' } },
313
+ required: ['runId'],
314
+ },
315
+ zod: z.object({ runId: z.string().min(1) }),
316
+ handler: async ({ runId }, { api }) => api.listRunTestCases(runId),
317
+ },
318
+ {
319
+ name: 'sixseven.get_evidence',
320
+ description: 'Aggregate evidence for a finished (or in-progress) run: per-case attempts, latest step events, failed-step screenshots and error messages, and the SixSeven report URL. Filter by caseId to narrow scope. Use after sixseven.wait_for_run to diagnose failures.',
321
+ inputSchema: {
322
+ type: 'object',
323
+ properties: {
324
+ runId: { type: 'string' },
325
+ caseId: { type: 'string' },
326
+ maxEventsPerCase: { type: 'number', default: 20 },
327
+ },
328
+ required: ['runId'],
329
+ },
330
+ zod: z.object({
331
+ runId: z.string().min(1),
332
+ caseId: z.string().optional(),
333
+ maxEventsPerCase: z.number().int().positive().max(200).optional(),
334
+ }),
335
+ handler: async (args, { api, baseUrl }) => {
336
+ const max = args.maxEventsPerCase ?? 20;
337
+ const [run, attemptsResp, eventsResp, runCases] = await Promise.all([
338
+ api.getRun(args.runId),
339
+ api.listRunCaseAttempts(args.runId),
340
+ api.listRunStepEvents(args.runId, args.caseId),
341
+ api.listRunTestCases(args.runId).catch(() => []),
342
+ ]);
343
+ const caseNameById = new Map(runCases.map((c) => [c.id, c.name]));
344
+ const allEvents = eventsResp.events ?? [];
345
+ const eventsByCase = new Map();
346
+ for (const e of allEvents) {
347
+ const key = e.testCaseId ?? '__unbound__';
348
+ if (args.caseId && key !== args.caseId)
349
+ continue;
350
+ const arr = eventsByCase.get(key) ?? [];
351
+ arr.push(e);
352
+ eventsByCase.set(key, arr);
353
+ }
354
+ const attempts = (attemptsResp.attempts ?? []).filter((a) => !args.caseId || a.testCaseId === args.caseId);
355
+ const cases = attempts.map((attempt) => {
356
+ const events = (eventsByCase.get(attempt.testCaseId) ?? [])
357
+ .slice()
358
+ .sort((a, b) => (a.stepIndex ?? 0) - (b.stepIndex ?? 0))
359
+ .slice(0, max);
360
+ const failedSteps = events.filter((e) => e.status === 'failed' || e.error);
361
+ return {
362
+ testCaseId: attempt.testCaseId,
363
+ testCaseName: caseNameById.get(attempt.testCaseId) ?? null,
364
+ attemptId: attempt.id,
365
+ attemptStatus: attempt.status,
366
+ attemptReportUrl: attempt.reportUrl ?? null,
367
+ startedAt: attempt.startedAt,
368
+ completedAt: attempt.completedAt,
369
+ stepEvents: events.map((e) => ({
370
+ stepIndex: e.stepIndex,
371
+ stepType: e.stepType,
372
+ stepPrompt: e.stepPrompt,
373
+ status: e.status,
374
+ durationMs: e.durationMs,
375
+ error: e.error,
376
+ screenshotUrl: e.screenshotUrl,
377
+ notes: e.notes,
378
+ })),
379
+ failedSteps: failedSteps.map((e) => ({
380
+ stepIndex: e.stepIndex,
381
+ stepType: e.stepType,
382
+ error: e.error,
383
+ screenshotUrl: e.screenshotUrl,
384
+ })),
385
+ };
386
+ });
387
+ return {
388
+ runId: args.runId,
389
+ status: run.status,
390
+ platform: run.platform,
391
+ reportUrl: run.reportUrl ?? null,
392
+ viewUrl: `${baseUrl}/runs/${args.runId}`,
393
+ cases,
394
+ totals: {
395
+ caseCount: cases.length,
396
+ failedCaseCount: cases.filter((c) => c.attemptStatus === 'failed')
397
+ .length,
398
+ failedStepCount: cases.reduce((n, c) => n + c.failedSteps.length, 0),
399
+ },
400
+ };
401
+ },
402
+ },
403
+ // ---------- SixSeven: auto-explore ----------
404
+ {
405
+ name: 'sixseven.start_exploration',
406
+ description: "Trigger SixSeven's BFS crawler (Puppeteer-based, runs server-side) on a set of seed URLs for the bound project. Login via EXPLORER_USERNAME/PASSWORD is automatic when configured. Returns a snapshot immediately (job runs in background); poll with sixseven.get_exploration. One job per project at a time — calling this while a job is already running returns the live snapshot.",
407
+ inputSchema: {
408
+ type: 'object',
409
+ properties: {
410
+ seedUrls: { type: 'array', items: { type: 'string' }, minItems: 1 },
411
+ configurationId: { type: 'string' },
412
+ maxDepth: { type: 'number' },
413
+ maxPages: { type: 'number' },
414
+ },
415
+ required: ['seedUrls'],
416
+ },
417
+ zod: z.object({
418
+ seedUrls: z.array(z.string().url()).min(1),
419
+ configurationId: z.string().optional(),
420
+ maxDepth: z.number().int().positive().max(20).optional(),
421
+ maxPages: z.number().int().positive().max(500).optional(),
422
+ }),
423
+ handler: async (args, { api, projectId }) => api.startExploration(projectId, args),
424
+ },
425
+ {
426
+ name: 'sixseven.get_exploration',
427
+ description: 'Return the latest exploration snapshot for the bound project (or null if none has ever run). Shape: { jobId, status, visited, anchorsUpserted, loggedIn, errors[] }. Use to await completion before generating testcases that depend on discovered routes/anchors.',
428
+ inputSchema: { type: 'object', properties: {} },
429
+ zod: z.object({}).passthrough(),
430
+ handler: async (_args, { api, projectId }) => api.getExploration(projectId),
431
+ },
432
+ // ---------- SixSeven: bug filing ----------
433
+ {
434
+ name: 'sixseven.file_bug',
435
+ description: "Open an issue report (bug) against the bound SixSeven project. Use this only after the auto-fix loop has identified a real application defect (not a flaky testcase). Severity must be 'critical', 'high', 'medium', or 'low'. Pass evidence URLs (screenshotUrl from sixseven.get_evidence) in evidences[].",
436
+ inputSchema: {
437
+ type: 'object',
438
+ properties: {
439
+ title: { type: 'string' },
440
+ severity: {
441
+ type: 'string',
442
+ enum: ['critical', 'high', 'medium', 'low'],
443
+ },
444
+ description: { type: 'string' },
445
+ pageUrl: { type: 'string' },
446
+ evidences: { type: 'array', items: { type: 'string' } },
447
+ },
448
+ required: ['title', 'severity'],
449
+ },
450
+ zod: z.object({
451
+ title: z.string().min(1).max(200),
452
+ severity: z.enum(['critical', 'high', 'medium', 'low']),
453
+ description: z.string().optional(),
454
+ pageUrl: z.string().optional(),
455
+ evidences: z.array(z.string()).optional(),
456
+ }),
457
+ handler: async (args, { api, projectId }) => api.createIssueReport({ ...args, projectId }),
458
+ },
459
+ {
460
+ name: 'sixseven.list_bugs',
461
+ description: 'List issue reports (bugs) for the bound SixSeven project. Use to check whether a defect has already been reported before filing a new one.',
462
+ inputSchema: { type: 'object', properties: {} },
463
+ zod: z.object({}).passthrough(),
464
+ handler: async (_args, { api, projectId }) => api.listIssueReports(projectId),
465
+ },
466
+ {
467
+ name: 'sixseven.get_bug',
468
+ description: 'Fetch a single issue report by id.',
469
+ inputSchema: {
470
+ type: 'object',
471
+ properties: { id: { type: 'string' } },
472
+ required: ['id'],
473
+ },
474
+ zod: z.object({ id: z.string().min(1) }),
475
+ handler: async ({ id }, { api }) => api.getIssueReport(id),
476
+ },
477
+ // ---------- SixSeven: project context ----------
478
+ {
479
+ name: 'sixseven.whoami',
480
+ description: 'Return the authenticated SixSeven user and the project this MCP session is bound to.',
481
+ inputSchema: { type: 'object', properties: {} },
482
+ zod: z.object({}).passthrough(),
483
+ handler: async (_args, { api, projectId }) => {
484
+ const [user, project] = await Promise.all([
485
+ api.me(),
486
+ api.getProject(projectId).catch(() => null),
487
+ ]);
488
+ return { user, projectId, project };
489
+ },
490
+ },
491
+ ];
492
+ function logErr(msg) {
493
+ process.stderr.write(`[sixseven-mcp] ${msg}\n`);
494
+ }
495
+ export async function runMcpServer() {
496
+ // Bootstrap: must have config + token before accepting tool calls.
497
+ const ctx = await loadContext(process.cwd());
498
+ const api = new SixSevenApi({
499
+ baseUrl: ctx.config.baseUrl,
500
+ token: ctx.token,
501
+ });
502
+ const reader = new SourceReader({
503
+ repoRoot: ctx.repoRoot,
504
+ config: ctx.config,
505
+ });
506
+ const defaultFeatureId = ctx.config.defaultFeatureId ?? null;
507
+ // Sanity check token early. Fail fast if invalid; surface to stderr only.
508
+ try {
509
+ await api.me();
510
+ }
511
+ catch (err) {
512
+ logErr(`token check failed: ${err.message}`);
513
+ throw err;
514
+ }
515
+ const server = new Server({ name: 'sixseven', version: '0.1.0' }, { capabilities: { tools: {} } });
516
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
517
+ tools: tools.map((t) => ({
518
+ name: t.name,
519
+ description: t.description,
520
+ inputSchema: t.inputSchema,
521
+ })),
522
+ }));
523
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
524
+ const tool = tools.find((t) => t.name === req.params.name);
525
+ if (!tool) {
526
+ return {
527
+ isError: true,
528
+ content: [{ type: 'text', text: `Unknown tool: ${req.params.name}` }],
529
+ };
530
+ }
531
+ try {
532
+ const parsed = tool.zod.parse(req.params.arguments ?? {});
533
+ const result = await tool.handler(parsed, {
534
+ api,
535
+ reader,
536
+ projectId: ctx.config.projectId,
537
+ defaultFeatureId,
538
+ defaultPlatform: ctx.config.platform,
539
+ baseUrl: ctx.config.baseUrl,
540
+ });
541
+ return {
542
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
543
+ };
544
+ }
545
+ catch (err) {
546
+ return {
547
+ isError: true,
548
+ content: [
549
+ {
550
+ type: 'text',
551
+ text: err?.message ?? String(err),
552
+ },
553
+ ],
554
+ };
555
+ }
556
+ });
557
+ const transport = new StdioServerTransport();
558
+ await server.connect(transport);
559
+ logErr(`ready. project=${ctx.config.projectId} baseUrl=${ctx.config.baseUrl} repo=${ctx.repoRoot}`);
560
+ }
561
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}