@zt-playground/mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -0
- package/dist/auth.d.ts +6 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +44 -0
- package/dist/auth.js.map +1 -0
- package/dist/context-store.d.ts +42 -0
- package/dist/context-store.d.ts.map +1 -0
- package/dist/context-store.js +119 -0
- package/dist/context-store.js.map +1 -0
- package/dist/http-client.d.ts +17 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +113 -0
- package/dist/http-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/issue.d.ts +3 -0
- package/dist/resources/issue.d.ts.map +1 -0
- package/dist/resources/issue.js +59 -0
- package/dist/resources/issue.js.map +1 -0
- package/dist/resources/project.d.ts +3 -0
- package/dist/resources/project.d.ts.map +1 -0
- package/dist/resources/project.js +51 -0
- package/dist/resources/project.js.map +1 -0
- package/dist/tools/analytics.d.ts +3 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +53 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/attachments.d.ts +3 -0
- package/dist/tools/attachments.d.ts.map +1 -0
- package/dist/tools/attachments.js +30 -0
- package/dist/tools/attachments.js.map +1 -0
- package/dist/tools/auth.d.ts +3 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +68 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/bugs.d.ts +3 -0
- package/dist/tools/bugs.d.ts.map +1 -0
- package/dist/tools/bugs.js +78 -0
- package/dist/tools/bugs.js.map +1 -0
- package/dist/tools/comments.d.ts +3 -0
- package/dist/tools/comments.d.ts.map +1 -0
- package/dist/tools/comments.js +28 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/context.d.ts +3 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +106 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/database.d.ts +3 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +154 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/epics.d.ts +3 -0
- package/dist/tools/epics.d.ts.map +1 -0
- package/dist/tools/epics.js +78 -0
- package/dist/tools/epics.js.map +1 -0
- package/dist/tools/issues.d.ts +3 -0
- package/dist/tools/issues.d.ts.map +1 -0
- package/dist/tools/issues.js +137 -0
- package/dist/tools/issues.js.map +1 -0
- package/dist/tools/labels.d.ts +3 -0
- package/dist/tools/labels.d.ts.map +1 -0
- package/dist/tools/labels.js +39 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/monitor.d.ts +3 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +115 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/projects.d.ts +3 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +39 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/relations.d.ts +3 -0
- package/dist/tools/relations.d.ts.map +1 -0
- package/dist/tools/relations.js +51 -0
- package/dist/tools/relations.js.map +1 -0
- package/dist/tools/repository.d.ts +3 -0
- package/dist/tools/repository.d.ts.map +1 -0
- package/dist/tools/repository.js +176 -0
- package/dist/tools/repository.js.map +1 -0
- package/dist/tools/ssh.d.ts +3 -0
- package/dist/tools/ssh.d.ts.map +1 -0
- package/dist/tools/ssh.js +141 -0
- package/dist/tools/ssh.js.map +1 -0
- package/dist/utils.d.ts +15 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +31 -0
- package/dist/utils.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
export function registerIssueResources(server) {
|
|
4
|
+
server.resource('issue', new ResourceTemplate('issue://{issueId}', { list: undefined }), async (uri, variables) => {
|
|
5
|
+
const issueId = variables.issueId;
|
|
6
|
+
try {
|
|
7
|
+
const issue = await api.get(`/tasks/${issueId}`);
|
|
8
|
+
if (!issue) {
|
|
9
|
+
return { contents: [{ uri: uri.href, text: 'Issue not found', mimeType: 'text/plain' }] };
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
contents: [
|
|
13
|
+
{
|
|
14
|
+
uri: uri.href,
|
|
15
|
+
mimeType: 'application/json',
|
|
16
|
+
text: JSON.stringify({
|
|
17
|
+
id: issue.id,
|
|
18
|
+
title: issue.title,
|
|
19
|
+
description: issue.description,
|
|
20
|
+
type: issue.type,
|
|
21
|
+
status: issue.status,
|
|
22
|
+
priority: issue.priority,
|
|
23
|
+
platform: issue.platform,
|
|
24
|
+
repository: issue.repository,
|
|
25
|
+
affectedArea: issue.affectedArea,
|
|
26
|
+
source: issue.source,
|
|
27
|
+
project: issue.project,
|
|
28
|
+
reporter: issue.reporter,
|
|
29
|
+
assignee: issue.assignee,
|
|
30
|
+
parent: issue.parent,
|
|
31
|
+
labels: issue.labels?.map((l) => ({ name: l.name, color: l.color })) || [],
|
|
32
|
+
comments: issue.comments?.map((c) => ({
|
|
33
|
+
id: c.id,
|
|
34
|
+
content: c.content,
|
|
35
|
+
author: c.author,
|
|
36
|
+
source: c.source,
|
|
37
|
+
createdAt: c.createdAt,
|
|
38
|
+
})) || [],
|
|
39
|
+
attachments: issue.attachments?.map((a) => ({
|
|
40
|
+
id: a.id,
|
|
41
|
+
fileName: a.fileName,
|
|
42
|
+
mimeType: a.mimeType,
|
|
43
|
+
size: a.size,
|
|
44
|
+
})) || [],
|
|
45
|
+
subIssues: issue.subIssues || [],
|
|
46
|
+
createdAt: issue.createdAt,
|
|
47
|
+
updatedAt: issue.updatedAt,
|
|
48
|
+
dueDate: issue.dueDate,
|
|
49
|
+
}, null, 2),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { contents: [{ uri: uri.href, text: 'Issue not found', mimeType: 'text/plain' }] };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/resources/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/resources/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAGtF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAyDzD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
export function registerProjectResources(server) {
|
|
4
|
+
server.resource('project', new ResourceTemplate('project://{projectId}', {
|
|
5
|
+
list: async () => {
|
|
6
|
+
const projects = await api.get('/project');
|
|
7
|
+
return {
|
|
8
|
+
resources: projects.map((p) => ({
|
|
9
|
+
uri: `project://${p.id}`,
|
|
10
|
+
name: p.name,
|
|
11
|
+
description: p.description,
|
|
12
|
+
mimeType: 'application/json',
|
|
13
|
+
})),
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
}), async (uri, variables) => {
|
|
17
|
+
const projectId = variables.projectId;
|
|
18
|
+
try {
|
|
19
|
+
const project = await api.get(`/project/${projectId}`);
|
|
20
|
+
if (!project) {
|
|
21
|
+
return { contents: [{ uri: uri.href, text: 'Project not found', mimeType: 'text/plain' }] };
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
contents: [
|
|
25
|
+
{
|
|
26
|
+
uri: uri.href,
|
|
27
|
+
mimeType: 'application/json',
|
|
28
|
+
text: JSON.stringify({
|
|
29
|
+
id: project.id,
|
|
30
|
+
name: project.name,
|
|
31
|
+
description: project.description,
|
|
32
|
+
platforms: project.platforms?.map((p) => ({
|
|
33
|
+
name: p.name,
|
|
34
|
+
repository: p.repository,
|
|
35
|
+
description: p.description,
|
|
36
|
+
})) || [],
|
|
37
|
+
stats: {
|
|
38
|
+
totalIssues: project._count?.tasks ?? 0,
|
|
39
|
+
},
|
|
40
|
+
createdAt: project.createdAt,
|
|
41
|
+
}, null, 2),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { contents: [{ uri: uri.href, text: 'Project not found', mimeType: 'text/plain' }] };
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/resources/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,QAAQ,CACb,SAAS,EACT,IAAI,gBAAgB,CAAC,uBAAuB,EAAE;QAC5C,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAQ,UAAU,CAAC,CAAC;YAClD,OAAO;gBACL,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACnC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE;oBACxB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,QAAQ,EAAE,kBAAkB;iBAC7B,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC,EACF,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAmB,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAM,YAAY,SAAS,EAAE,CAAC,CAAC;YAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YAC9F,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,EAAE,EAAE,OAAO,CAAC,EAAE;4BACd,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gCAC7C,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,UAAU,EAAE,CAAC,CAAC,UAAU;gCACxB,WAAW,EAAE,CAAC,CAAC,WAAW;6BAC3B,CAAC,CAAC,IAAI,EAAE;4BACT,KAAK,EAAE;gCACL,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;6BACxC;4BACD,SAAS,EAAE,OAAO,CAAC,SAAS;yBAC7B,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QA8DvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
import { jsonResult, errorResult, resolveProjectId } from '../utils.js';
|
|
4
|
+
export function registerAnalyticsTools(server) {
|
|
5
|
+
server.tool('get_project_health', 'Returns project health analytics - bugs, trends, problematic areas, health score', {
|
|
6
|
+
projectId: z.string().describe('Project ID or name'),
|
|
7
|
+
days: z.number().default(30).describe('Analysis period in days'),
|
|
8
|
+
}, async ({ projectId: pid, days }) => {
|
|
9
|
+
try {
|
|
10
|
+
const projectId = await resolveProjectId(pid);
|
|
11
|
+
const health = await api.get(`/issue-analytics/projects/${projectId}/health`, { days });
|
|
12
|
+
return jsonResult(health);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return errorResult(`Failed to get project health: ${err.message}`);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
server.tool('get_area_analysis', 'Detailed analysis of a specific area/module', {
|
|
19
|
+
projectId: z.string().describe('Project ID or name'),
|
|
20
|
+
affectedArea: z.string().describe('Area to analyze (e.g. "auth/login")'),
|
|
21
|
+
days: z.number().default(30).describe('Analysis period'),
|
|
22
|
+
}, async ({ projectId: pid, affectedArea, days }) => {
|
|
23
|
+
try {
|
|
24
|
+
const projectId = await resolveProjectId(pid);
|
|
25
|
+
const analysis = await api.get(`/issue-analytics/projects/${projectId}/by-area`, {
|
|
26
|
+
days,
|
|
27
|
+
affectedArea,
|
|
28
|
+
});
|
|
29
|
+
return jsonResult(analysis);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return errorResult(`Failed to get area analysis: ${err.message}`);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
server.tool('get_repository_report', 'Report of issues grouped by repository', {
|
|
36
|
+
projectId: z.string().describe('Project ID or name'),
|
|
37
|
+
repository: z.string().optional().describe('Filter by specific repository'),
|
|
38
|
+
days: z.number().default(30).describe('Analysis period'),
|
|
39
|
+
}, async ({ projectId: pid, repository, days }) => {
|
|
40
|
+
try {
|
|
41
|
+
const projectId = await resolveProjectId(pid);
|
|
42
|
+
const report = await api.get(`/issue-analytics/projects/${projectId}/by-repository`, {
|
|
43
|
+
days,
|
|
44
|
+
repository,
|
|
45
|
+
});
|
|
46
|
+
return jsonResult(report);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
return errorResult(`Failed to get repository report: ${err.message}`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA8BxD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
import { jsonResult, errorResult } from '../utils.js';
|
|
4
|
+
export function registerAttachmentTools(server) {
|
|
5
|
+
server.tool('add_attachment', 'Attaches a file/image to an issue (base64 encoded)', {
|
|
6
|
+
issueId: z.string().describe('Issue ID'),
|
|
7
|
+
fileName: z.string().describe('File name'),
|
|
8
|
+
content: z.string().describe('Base64 encoded file content'),
|
|
9
|
+
mimeType: z.string().describe('MIME type (e.g. "image/png")'),
|
|
10
|
+
}, async ({ issueId, fileName, content, mimeType }) => {
|
|
11
|
+
try {
|
|
12
|
+
const attachment = await api.post(`/tasks/${issueId}/attachments/base64`, {
|
|
13
|
+
fileName,
|
|
14
|
+
content,
|
|
15
|
+
mimeType,
|
|
16
|
+
});
|
|
17
|
+
return jsonResult({
|
|
18
|
+
id: attachment.id,
|
|
19
|
+
fileName: attachment.fileName,
|
|
20
|
+
mimeType: attachment.mimeType,
|
|
21
|
+
size: attachment.size,
|
|
22
|
+
createdAt: attachment.createdAt,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return errorResult(`Failed to add attachment: ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/tools/attachments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oDAAoD,EACpD;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC9D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAM,UAAU,OAAO,qBAAqB,EAAE;gBAC7E,QAAQ;gBACR,OAAO;gBACP,QAAQ;aACT,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;gBAChB,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,WAAW,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAwElD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { api, saveAuth, loadAuth } from '../http-client.js';
|
|
3
|
+
import { setCachedUser } from '../auth.js';
|
|
4
|
+
import { jsonResult, errorResult } from '../utils.js';
|
|
5
|
+
export function registerAuthTools(server) {
|
|
6
|
+
server.tool('auth_setup', 'Configures API key for ZT Playground authentication. Run this once to authenticate.', {
|
|
7
|
+
apiKey: z.string().describe('Your ZT Playground API key'),
|
|
8
|
+
apiUrl: z.string().optional().describe('API URL (default: https://zt-playground-api.vercel.app)'),
|
|
9
|
+
}, async ({ apiKey, apiUrl }) => {
|
|
10
|
+
// Temporarily set env so the HTTP client can use it for validation
|
|
11
|
+
const prevKey = process.env.ZT_API_KEY;
|
|
12
|
+
const prevUrl = process.env.ZT_API_URL;
|
|
13
|
+
process.env.ZT_API_KEY = apiKey;
|
|
14
|
+
if (apiUrl)
|
|
15
|
+
process.env.ZT_API_URL = apiUrl;
|
|
16
|
+
try {
|
|
17
|
+
const user = await api.get('/auth/me');
|
|
18
|
+
// Save to file for persistence
|
|
19
|
+
saveAuth(apiKey, apiUrl, user.id, user.name);
|
|
20
|
+
setCachedUser(user.id, user.name);
|
|
21
|
+
// Clear env overrides (file will be used going forward)
|
|
22
|
+
delete process.env.ZT_API_KEY;
|
|
23
|
+
delete process.env.ZT_API_URL;
|
|
24
|
+
return jsonResult({
|
|
25
|
+
status: 'authenticated',
|
|
26
|
+
user: { id: user.id, name: user.name, email: user.email },
|
|
27
|
+
message: `Successfully authenticated as ${user.name}. API key saved for future sessions.`,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
// Restore previous env
|
|
32
|
+
if (prevKey)
|
|
33
|
+
process.env.ZT_API_KEY = prevKey;
|
|
34
|
+
else
|
|
35
|
+
delete process.env.ZT_API_KEY;
|
|
36
|
+
if (prevUrl)
|
|
37
|
+
process.env.ZT_API_URL = prevUrl;
|
|
38
|
+
else
|
|
39
|
+
delete process.env.ZT_API_URL;
|
|
40
|
+
return errorResult(`Authentication failed: ${err.message}`);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
server.tool('auth_status', 'Shows current authentication status', {}, async () => {
|
|
44
|
+
const auth = loadAuth();
|
|
45
|
+
if (!auth) {
|
|
46
|
+
return jsonResult({
|
|
47
|
+
authenticated: false,
|
|
48
|
+
message: 'Not authenticated. Use auth_setup to configure your API key.',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const user = await api.get('/auth/me');
|
|
53
|
+
return jsonResult({
|
|
54
|
+
authenticated: true,
|
|
55
|
+
user: { id: user.id, name: user.name, email: user.email },
|
|
56
|
+
apiUrl: auth.apiUrl,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return jsonResult({
|
|
61
|
+
authenticated: false,
|
|
62
|
+
message: 'API key is configured but validation failed. Use auth_setup to reconfigure.',
|
|
63
|
+
apiUrl: auth.apiUrl,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bugs.d.ts","sourceRoot":"","sources":["../../src/tools/bugs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAoFjD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
import { jsonResult, errorResult, resolveProjectId } from '../utils.js';
|
|
4
|
+
import { getUserId } from '../auth.js';
|
|
5
|
+
export function registerBugTools(server) {
|
|
6
|
+
server.tool('report_bug', 'Reports a bug with enriched context (steps to reproduce, expected/actual behavior)', {
|
|
7
|
+
projectId: z.string().describe('Project ID or name'),
|
|
8
|
+
title: z.string().describe('Bug title'),
|
|
9
|
+
description: z.string().describe('Bug description including steps to reproduce'),
|
|
10
|
+
stepsToReproduce: z.array(z.string()).optional().describe('Steps to reproduce'),
|
|
11
|
+
expectedBehavior: z.string().optional().describe('Expected behavior'),
|
|
12
|
+
actualBehavior: z.string().optional().describe('Actual behavior'),
|
|
13
|
+
platform: z.string().describe('Platform where the bug occurs'),
|
|
14
|
+
repository: z.string().optional().describe('Affected repository'),
|
|
15
|
+
affectedArea: z.string().describe('Affected area/flow'),
|
|
16
|
+
priority: z
|
|
17
|
+
.enum(['MUITO_ALTA', 'ALTA', 'MEDIA', 'BAIXA'])
|
|
18
|
+
.default('ALTA')
|
|
19
|
+
.describe('Priority'),
|
|
20
|
+
environment: z.string().optional().describe('Environment (production, staging, etc)'),
|
|
21
|
+
labels: z.array(z.string()).optional().describe('Labels'),
|
|
22
|
+
}, async (args) => {
|
|
23
|
+
try {
|
|
24
|
+
const projectId = await resolveProjectId(args.projectId);
|
|
25
|
+
const userId = getUserId();
|
|
26
|
+
// Build enriched description
|
|
27
|
+
let fullDescription = args.description;
|
|
28
|
+
if (args.stepsToReproduce && args.stepsToReproduce.length > 0) {
|
|
29
|
+
fullDescription += '\n\n## Steps to Reproduce\n';
|
|
30
|
+
args.stepsToReproduce.forEach((step, i) => {
|
|
31
|
+
fullDescription += `${i + 1}. ${step}\n`;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (args.expectedBehavior) {
|
|
35
|
+
fullDescription += `\n## Expected Behavior\n${args.expectedBehavior}\n`;
|
|
36
|
+
}
|
|
37
|
+
if (args.actualBehavior) {
|
|
38
|
+
fullDescription += `\n## Actual Behavior\n${args.actualBehavior}\n`;
|
|
39
|
+
}
|
|
40
|
+
if (args.environment) {
|
|
41
|
+
fullDescription += `\n## Environment\n${args.environment}\n`;
|
|
42
|
+
}
|
|
43
|
+
const allLabels = [...(args.labels || []), 'bug'];
|
|
44
|
+
const uniqueLabels = [...new Set(allLabels)];
|
|
45
|
+
const issue = await api.post('/tasks', {
|
|
46
|
+
projectId,
|
|
47
|
+
reporterId: userId,
|
|
48
|
+
type: 'BUG',
|
|
49
|
+
status: 'TO_DO',
|
|
50
|
+
priority: args.priority,
|
|
51
|
+
title: args.title,
|
|
52
|
+
description: fullDescription,
|
|
53
|
+
platform: args.platform,
|
|
54
|
+
repository: args.repository,
|
|
55
|
+
affectedArea: args.affectedArea,
|
|
56
|
+
source: 'MCP_AGENT',
|
|
57
|
+
labels: uniqueLabels,
|
|
58
|
+
});
|
|
59
|
+
return jsonResult({
|
|
60
|
+
id: issue.id,
|
|
61
|
+
title: issue.title,
|
|
62
|
+
type: issue.type,
|
|
63
|
+
status: issue.status,
|
|
64
|
+
priority: issue.priority,
|
|
65
|
+
platform: issue.platform,
|
|
66
|
+
repository: issue.repository,
|
|
67
|
+
affectedArea: issue.affectedArea,
|
|
68
|
+
source: issue.source,
|
|
69
|
+
labels: issue.labels?.map((l) => l.name) || [],
|
|
70
|
+
createdAt: issue.createdAt,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return errorResult(`Failed to report bug: ${err.message}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=bugs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bugs.js","sourceRoot":"","sources":["../../src/tools/bugs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QA4BrD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { api } from '../http-client.js';
|
|
3
|
+
import { jsonResult, errorResult } from '../utils.js';
|
|
4
|
+
export function registerCommentTools(server) {
|
|
5
|
+
server.tool('add_comment', 'Adds a comment to an issue', {
|
|
6
|
+
issueId: z.string().describe('Issue ID'),
|
|
7
|
+
content: z.string().describe('Comment content in markdown'),
|
|
8
|
+
}, async ({ issueId, content }) => {
|
|
9
|
+
try {
|
|
10
|
+
const comment = await api.post(`/tasks/${issueId}/comments`, {
|
|
11
|
+
content,
|
|
12
|
+
source: 'MCP_AGENT',
|
|
13
|
+
});
|
|
14
|
+
return jsonResult({
|
|
15
|
+
id: comment.id,
|
|
16
|
+
issueId: comment.issueId,
|
|
17
|
+
content: comment.content,
|
|
18
|
+
author: comment.author,
|
|
19
|
+
source: comment.source,
|
|
20
|
+
createdAt: comment.createdAt,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
return errorResult(`Failed to add comment: ${err.message}`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4BAA4B,EAC5B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAM,UAAU,OAAO,WAAW,EAAE;gBAChE,OAAO;gBACP,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;gBAChB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,WAAW,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAkIrD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonResult, errorResult } from '../utils.js';
|
|
3
|
+
import { saveContext, listContexts, removeContext, setActiveContext, getActiveContext, } from '../context-store.js';
|
|
4
|
+
export function registerContextTools(server) {
|
|
5
|
+
server.tool('context_setup', 'Creates or updates a project context configuration (repos, databases, SSH servers). Automatically sets it as active.', {
|
|
6
|
+
projectId: z.string().describe('Project ID in ZT Playground'),
|
|
7
|
+
projectName: z.string().describe('Project name (used as config file name)'),
|
|
8
|
+
repos: z
|
|
9
|
+
.array(z.object({
|
|
10
|
+
name: z.string().describe('Short name for the repo (e.g. "frontend", "api")'),
|
|
11
|
+
path: z.string().describe('Absolute path to the repo on disk'),
|
|
12
|
+
description: z.string().optional().describe('What this repo contains'),
|
|
13
|
+
}))
|
|
14
|
+
.default([])
|
|
15
|
+
.describe('Local repositories'),
|
|
16
|
+
databases: z
|
|
17
|
+
.array(z.object({
|
|
18
|
+
name: z.string().describe('Short name (e.g. "production", "staging")'),
|
|
19
|
+
connectionString: z.string().describe('PostgreSQL connection string'),
|
|
20
|
+
readOnly: z.boolean().default(true).describe('If true, only SELECT queries allowed'),
|
|
21
|
+
}))
|
|
22
|
+
.default([])
|
|
23
|
+
.describe('Database connections'),
|
|
24
|
+
ssh: z
|
|
25
|
+
.array(z.object({
|
|
26
|
+
name: z.string().describe('Short name (e.g. "prod", "staging")'),
|
|
27
|
+
host: z.string().describe('Hostname or IP'),
|
|
28
|
+
user: z.string().describe('SSH username'),
|
|
29
|
+
keyPath: z.string().optional().describe('Path to private key (e.g. ~/.ssh/id_rsa)'),
|
|
30
|
+
password: z.string().optional().describe('Password (prefer keyPath)'),
|
|
31
|
+
port: z.number().default(22).describe('SSH port'),
|
|
32
|
+
}))
|
|
33
|
+
.default([])
|
|
34
|
+
.describe('SSH server connections'),
|
|
35
|
+
}, async (args) => {
|
|
36
|
+
try {
|
|
37
|
+
const ctx = {
|
|
38
|
+
projectId: args.projectId,
|
|
39
|
+
projectName: args.projectName,
|
|
40
|
+
repos: args.repos,
|
|
41
|
+
databases: args.databases,
|
|
42
|
+
ssh: args.ssh,
|
|
43
|
+
};
|
|
44
|
+
saveContext(ctx);
|
|
45
|
+
setActiveContext(ctx.projectName);
|
|
46
|
+
return jsonResult({
|
|
47
|
+
status: 'saved',
|
|
48
|
+
projectName: ctx.projectName,
|
|
49
|
+
repos: ctx.repos.length,
|
|
50
|
+
databases: ctx.databases.length,
|
|
51
|
+
ssh: ctx.ssh.length,
|
|
52
|
+
active: true,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return errorResult(err.message);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
server.tool('context_get', 'Returns the currently active project context with all configured repos, databases, and SSH servers', {}, async () => {
|
|
60
|
+
const ctx = getActiveContext();
|
|
61
|
+
if (!ctx)
|
|
62
|
+
return errorResult('No active context. Use context_set_active or context_setup first.');
|
|
63
|
+
return jsonResult(ctx);
|
|
64
|
+
});
|
|
65
|
+
server.tool('context_list', 'Lists all saved project contexts from ~/.zt-playground/contexts/', {}, async () => {
|
|
66
|
+
try {
|
|
67
|
+
const contexts = listContexts();
|
|
68
|
+
if (contexts.length === 0)
|
|
69
|
+
return jsonResult({ message: 'No contexts configured yet. Use context_setup to create one.' });
|
|
70
|
+
const active = getActiveContext();
|
|
71
|
+
return jsonResult({
|
|
72
|
+
active: active?.projectName ?? null,
|
|
73
|
+
contexts,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return errorResult(err.message);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
server.tool('context_set_active', 'Sets which project context is active for repo/database/SSH tools', {
|
|
81
|
+
name: z.string().describe('Project name to activate'),
|
|
82
|
+
}, async ({ name }) => {
|
|
83
|
+
try {
|
|
84
|
+
const ctx = setActiveContext(name);
|
|
85
|
+
return jsonResult({
|
|
86
|
+
status: 'active',
|
|
87
|
+
projectName: ctx.projectName,
|
|
88
|
+
repos: ctx.repos.map((r) => r.name),
|
|
89
|
+
databases: ctx.databases.map((d) => d.name),
|
|
90
|
+
ssh: ctx.ssh.map((s) => s.name),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
return errorResult(err.message);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
server.tool('context_remove', 'Removes a saved project context configuration', {
|
|
98
|
+
name: z.string().describe('Project name to remove'),
|
|
99
|
+
}, async ({ name }) => {
|
|
100
|
+
const removed = removeContext(name);
|
|
101
|
+
if (!removed)
|
|
102
|
+
return errorResult(`Context "${name}" not found.`);
|
|
103
|
+
return jsonResult({ status: 'removed', name });
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/tools/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqDpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAwJtD"}
|