@manhq/localmcp 1.0.0 → 1.0.2
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 +177 -66
- package/README.vi.md +176 -65
- package/dist/api/openapi.d.ts +21 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +74 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/playground.d.ts +2 -0
- package/dist/api/playground.d.ts.map +1 -0
- package/dist/api/playground.js +24 -0
- package/dist/api/playground.js.map +1 -0
- package/dist/api/registry.d.ts +19 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +20 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/rest.d.ts +3 -0
- package/dist/api/rest.d.ts.map +1 -0
- package/dist/api/rest.js +84 -0
- package/dist/api/rest.js.map +1 -0
- package/dist/api/server-with-registry.d.ts +8 -0
- package/dist/api/server-with-registry.d.ts.map +1 -0
- package/dist/api/server-with-registry.js +43 -0
- package/dist/api/server-with-registry.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +82 -19
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -48
- package/dist/index.js.map +1 -1
- package/dist/services/atlassian/index.d.ts +1 -1
- package/dist/services/atlassian/index.d.ts.map +1 -1
- package/dist/services/atlassian/index.js +3 -3
- package/dist/services/atlassian/index.js.map +1 -1
- package/dist/services/atlassian/tools/confluence.d.ts +1 -1
- package/dist/services/atlassian/tools/confluence.d.ts.map +1 -1
- package/dist/services/atlassian/tools/confluence.js +14 -13
- package/dist/services/atlassian/tools/confluence.js.map +1 -1
- package/dist/services/atlassian/tools/jira.d.ts +1 -1
- package/dist/services/atlassian/tools/jira.d.ts.map +1 -1
- package/dist/services/atlassian/tools/jira.js +16 -15
- package/dist/services/atlassian/tools/jira.js.map +1 -1
- package/dist/services/figma/index.d.ts +1 -1
- package/dist/services/figma/index.d.ts.map +1 -1
- package/dist/services/figma/index.js +6 -6
- package/dist/services/figma/index.js.map +1 -1
- package/dist/services/figma/tools/comments.d.ts +1 -1
- package/dist/services/figma/tools/comments.d.ts.map +1 -1
- package/dist/services/figma/tools/comments.js +4 -3
- package/dist/services/figma/tools/comments.js.map +1 -1
- package/dist/services/figma/tools/components.d.ts +1 -1
- package/dist/services/figma/tools/components.d.ts.map +1 -1
- package/dist/services/figma/tools/components.js +7 -6
- package/dist/services/figma/tools/components.js.map +1 -1
- package/dist/services/figma/tools/files.d.ts +1 -1
- package/dist/services/figma/tools/files.d.ts.map +1 -1
- package/dist/services/figma/tools/files.js +4 -3
- package/dist/services/figma/tools/files.js.map +1 -1
- package/dist/services/figma/tools/images.d.ts +1 -1
- package/dist/services/figma/tools/images.d.ts.map +1 -1
- package/dist/services/figma/tools/images.js +4 -3
- package/dist/services/figma/tools/images.js.map +1 -1
- package/dist/services/figma/tools/variables.d.ts +1 -1
- package/dist/services/figma/tools/variables.d.ts.map +1 -1
- package/dist/services/figma/tools/variables.js +4 -3
- package/dist/services/figma/tools/variables.js.map +1 -1
- package/dist/services/google-chat/index.d.ts +1 -1
- package/dist/services/google-chat/index.d.ts.map +1 -1
- package/dist/services/google-chat/index.js +2 -2
- package/dist/services/google-chat/index.js.map +1 -1
- package/dist/services/google-chat/tools/messages.d.ts +1 -1
- package/dist/services/google-chat/tools/messages.d.ts.map +1 -1
- package/dist/services/google-chat/tools/messages.js +6 -5
- package/dist/services/google-chat/tools/messages.js.map +1 -1
- package/docs/atlassian.md +145 -6
- package/docs/figma.md +145 -6
- package/docs/google-chat.md +145 -6
- package/docs/vi/atlassian.md +145 -6
- package/docs/vi/figma.md +145 -6
- package/docs/vi/google-chat.md +145 -6
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -1,87 +1,147 @@
|
|
|
1
1
|
import express from "express";
|
|
2
|
-
import { randomUUID } from "node:crypto";
|
|
3
2
|
import { fileURLToPath } from "node:url";
|
|
4
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
4
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
5
|
+
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
7
|
import { env } from "./shared/env.js";
|
|
7
8
|
import { registerFigmaTools } from "./services/figma/index.js";
|
|
8
9
|
import { registerAtlassianTools } from "./services/atlassian/index.js";
|
|
9
10
|
import { registerGChatTools } from "./services/google-chat/index.js";
|
|
11
|
+
import { createMcpServerWithRegistry } from "./api/server-with-registry.js";
|
|
12
|
+
import { mountRestApi } from "./api/rest.js";
|
|
10
13
|
const SERVICE_REGISTRY = {
|
|
11
|
-
figma: { register: registerFigmaTools, enabled: !!env.figma },
|
|
12
|
-
atlassian: { register: registerAtlassianTools, enabled: !!env.atlassian },
|
|
13
|
-
"google-chat": { register: registerGChatTools, enabled: !!env.gchat },
|
|
14
|
+
figma: { register: registerFigmaTools, combinedPrefix: "figma", enabled: !!env.figma },
|
|
15
|
+
atlassian: { register: registerAtlassianTools, combinedPrefix: "atlassian", enabled: !!env.atlassian },
|
|
16
|
+
"google-chat": { register: registerGChatTools, combinedPrefix: "gchat", enabled: !!env.gchat },
|
|
14
17
|
};
|
|
15
18
|
const activeServices = Object.entries(SERVICE_REGISTRY)
|
|
16
19
|
.filter(([, s]) => s.enabled)
|
|
17
20
|
.map(([name]) => name);
|
|
21
|
+
// Populates REST registry AND returns a connected McpServer — used for warm-up and stdio.
|
|
18
22
|
function createServiceServer(name) {
|
|
23
|
+
const server = createMcpServerWithRegistry(name, { name, version: "1.0.0" });
|
|
24
|
+
SERVICE_REGISTRY[name].register(server);
|
|
25
|
+
return server;
|
|
26
|
+
}
|
|
27
|
+
// Returns a plain McpServer without touching the REST registry — used per HTTP request
|
|
28
|
+
// so the global registry is not re-populated on every MCP call.
|
|
29
|
+
function createServiceServerOnly(name) {
|
|
19
30
|
const server = new McpServer({ name, version: "1.0.0" });
|
|
20
31
|
SERVICE_REGISTRY[name].register(server);
|
|
21
32
|
return server;
|
|
22
33
|
}
|
|
23
|
-
function mountMcpHandler(app, path,
|
|
24
|
-
|
|
34
|
+
function mountMcpHandler(app, path, makeServer) {
|
|
35
|
+
// POST: stateless JSON-RPC handler — each request is a self-contained cycle.
|
|
36
|
+
// sessionIdGenerator=undefined tells the SDK not to issue Mcp-Session-Id,
|
|
37
|
+
// which is required for clients like Claude Code that don't persist session headers.
|
|
38
|
+
app.post(path, async (req, res) => {
|
|
25
39
|
try {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
if (req.method === "POST" && !sessionId) {
|
|
33
|
-
const transport = new StreamableHTTPServerTransport({
|
|
34
|
-
sessionIdGenerator: () => randomUUID(),
|
|
35
|
-
onsessioninitialized: (sid) => {
|
|
36
|
-
transports.set(sid, transport);
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
transport.onclose = () => {
|
|
40
|
-
if (transport.sessionId)
|
|
41
|
-
transports.delete(transport.sessionId);
|
|
42
|
-
};
|
|
43
|
-
await makeServer().connect(transport);
|
|
44
|
-
await transport.handleRequest(req, res, req.body);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
res.status(400).json({ error: "Bad request" });
|
|
40
|
+
const transport = new StreamableHTTPServerTransport({
|
|
41
|
+
sessionIdGenerator: undefined,
|
|
42
|
+
});
|
|
43
|
+
await makeServer().connect(transport);
|
|
44
|
+
await transport.handleRequest(req, res, req.body);
|
|
48
45
|
}
|
|
49
46
|
catch (err) {
|
|
50
|
-
console.error(`[${path}]
|
|
47
|
+
console.error(`[${path}] POST error:`, err);
|
|
51
48
|
if (!res.headersSent)
|
|
52
49
|
res.status(500).json({ error: "Internal server error" });
|
|
53
50
|
}
|
|
54
51
|
});
|
|
52
|
+
// GET: spec requires 200+SSE or 405. Stateless servers don't push server-initiated
|
|
53
|
+
// messages, so we return 405 rather than 404 — clients treat 404 as "not found"
|
|
54
|
+
// and may abort entirely, while 405 signals "endpoint exists, feature unsupported".
|
|
55
|
+
app.get(path, (_req, res) => {
|
|
56
|
+
res.status(405).set("Allow", "POST").json({ error: "Method Not Allowed" });
|
|
57
|
+
});
|
|
58
|
+
// DELETE: clients (Cursor, Windsurf, Claude Desktop) send DELETE to close sessions.
|
|
59
|
+
// We have no sessions to delete, so 405 is the correct spec-compliant response.
|
|
60
|
+
app.delete(path, (_req, res) => {
|
|
61
|
+
res.status(405).set("Allow", "POST").json({ error: "Method Not Allowed" });
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Legacy SSE transport (MCP spec 2024-11-05) for older clients.
|
|
65
|
+
// Clients connecting via old transport do GET /sse → open SSE stream,
|
|
66
|
+
// then POST /messages?sessionId=... → send JSON-RPC messages.
|
|
67
|
+
function mountLegacySseHandler(app, ssePath, postPath, makeServer) {
|
|
68
|
+
const sessions = new Map();
|
|
69
|
+
app.get(ssePath, async (req, res) => {
|
|
70
|
+
try {
|
|
71
|
+
const transport = new SSEServerTransport(`${postPath}`, res);
|
|
72
|
+
sessions.set(transport.sessionId, transport);
|
|
73
|
+
transport.onclose = () => sessions.delete(transport.sessionId);
|
|
74
|
+
await makeServer().connect(transport);
|
|
75
|
+
await transport.start();
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.error(`[${ssePath}] SSE error:`, err);
|
|
79
|
+
if (!res.headersSent)
|
|
80
|
+
res.status(500).json({ error: "Internal server error" });
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
app.post(postPath, async (req, res) => {
|
|
84
|
+
const sessionId = req.query["sessionId"];
|
|
85
|
+
const transport = sessionId ? sessions.get(sessionId) : undefined;
|
|
86
|
+
if (!transport) {
|
|
87
|
+
res.status(400).json({ error: "Unknown or missing sessionId" });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
await transport.handlePostMessage(req, res, req.body);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function makeCombinedServer() {
|
|
94
|
+
const server = new McpServer({ name: "localmcp", version: "1.0.0" });
|
|
95
|
+
for (const name of activeServices) {
|
|
96
|
+
const svc = SERVICE_REGISTRY[name];
|
|
97
|
+
// Combined path: pass prefix so tools are namespaced by service
|
|
98
|
+
svc.register(server, svc.combinedPrefix);
|
|
99
|
+
}
|
|
100
|
+
return server;
|
|
55
101
|
}
|
|
56
102
|
export function createApp() {
|
|
57
103
|
const app = express();
|
|
58
104
|
app.use(express.json());
|
|
59
|
-
//
|
|
60
|
-
const transportsByService = new Map();
|
|
105
|
+
// Warm up registry by creating all service servers once (no transport needed)
|
|
61
106
|
for (const name of activeServices) {
|
|
62
|
-
|
|
107
|
+
createServiceServer(name);
|
|
63
108
|
}
|
|
64
|
-
//
|
|
109
|
+
// Streamable HTTP — combined
|
|
110
|
+
mountMcpHandler(app, "/mcp", makeCombinedServer);
|
|
111
|
+
// Streamable HTTP — per-service: /mcp/figma, /mcp/atlassian, /mcp/google-chat
|
|
65
112
|
for (const name of activeServices) {
|
|
66
113
|
const service = name;
|
|
67
|
-
mountMcpHandler(app, `/mcp/${service}`, () =>
|
|
114
|
+
mountMcpHandler(app, `/mcp/${service}`, () => createServiceServerOnly(service));
|
|
68
115
|
}
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
116
|
+
// Legacy SSE (2024-11-05) — combined: GET /sse → POST /messages?sessionId=...
|
|
117
|
+
mountLegacySseHandler(app, "/sse", "/messages", makeCombinedServer);
|
|
118
|
+
// Legacy SSE — per-service: GET /sse/:service → POST /messages/:service?sessionId=...
|
|
119
|
+
for (const name of activeServices) {
|
|
120
|
+
const service = name;
|
|
121
|
+
mountLegacySseHandler(app, `/sse/${service}`, `/messages/${service}`, () => createServiceServerOnly(service));
|
|
122
|
+
}
|
|
123
|
+
// REST API + Playground
|
|
124
|
+
mountRestApi(app);
|
|
78
125
|
app.get("/health", (_req, res) => {
|
|
79
126
|
res.json({
|
|
80
127
|
status: "ok",
|
|
81
128
|
services: activeServices,
|
|
82
129
|
endpoints: {
|
|
83
|
-
|
|
84
|
-
|
|
130
|
+
streamableHttp: {
|
|
131
|
+
combined: "/mcp",
|
|
132
|
+
...Object.fromEntries(activeServices.map((s) => [s, `/mcp/${s}`])),
|
|
133
|
+
},
|
|
134
|
+
legacySse: {
|
|
135
|
+
combined: "/sse",
|
|
136
|
+
...Object.fromEntries(activeServices.map((s) => [s, `/sse/${s}`])),
|
|
137
|
+
},
|
|
138
|
+
rest: {
|
|
139
|
+
index: "/api",
|
|
140
|
+
service: "/api/:service",
|
|
141
|
+
call: "/api/:service/:tool",
|
|
142
|
+
spec: "/api/openapi.json",
|
|
143
|
+
playground: "/playground",
|
|
144
|
+
},
|
|
85
145
|
},
|
|
86
146
|
});
|
|
87
147
|
});
|
|
@@ -89,13 +149,30 @@ export function createApp() {
|
|
|
89
149
|
}
|
|
90
150
|
export function startServer() {
|
|
91
151
|
createApp().listen(env.PORT, () => {
|
|
92
|
-
|
|
93
|
-
|
|
152
|
+
const base = `http://localhost:${env.PORT}`;
|
|
153
|
+
const cliPath = fileURLToPath(new URL("cli.js", import.meta.url));
|
|
154
|
+
const stdioCmd = `${process.execPath} ${cliPath} stdio`;
|
|
155
|
+
console.log(`Local MCP server running at ${base}`);
|
|
156
|
+
console.log(``);
|
|
157
|
+
console.log(` Streamable HTTP : ${base}/mcp`);
|
|
158
|
+
console.log(` Legacy SSE : ${base}/sse`);
|
|
94
159
|
for (const s of activeServices) {
|
|
95
|
-
console.log(` /mcp/${s
|
|
160
|
+
console.log(` [${s}] ${base}/mcp/${s} | ${base}/sse/${s}`);
|
|
161
|
+
}
|
|
162
|
+
console.log(` REST API : ${base}/api`);
|
|
163
|
+
console.log(` Playground : ${base}/playground`);
|
|
164
|
+
console.log(``);
|
|
165
|
+
console.log(` stdio command : ${stdioCmd}`);
|
|
166
|
+
for (const s of activeServices) {
|
|
167
|
+
console.log(` stdio [${s}] : ${process.execPath} ${cliPath} stdio ${s}`);
|
|
96
168
|
}
|
|
97
169
|
});
|
|
98
170
|
}
|
|
171
|
+
export async function startStdio(service) {
|
|
172
|
+
const server = service ? createServiceServer(service) : makeCombinedServer();
|
|
173
|
+
const transport = new StdioServerTransport();
|
|
174
|
+
await server.connect(transport);
|
|
175
|
+
}
|
|
99
176
|
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
100
177
|
startServer();
|
|
101
178
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQ7C,MAAM,gBAAgB,GAAoC;IACxD,KAAK,EAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAK,cAAc,EAAE,OAAO,EAAK,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;IACnG,SAAS,EAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE;IACzG,aAAa,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAI,cAAc,EAAE,OAAO,EAAK,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;CACpG,CAAC;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;KACpD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAEzB,0FAA0F;AAC1F,SAAS,mBAAmB,CAAC,IAAiB;IAC5C,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uFAAuF;AACvF,gEAAgE;AAChE,SAAS,uBAAuB,CAAC,IAAiB;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,GAAoB,EACpB,IAAY,EACZ,UAA2B;IAE3B,6EAA6E;IAC7E,0EAA0E;IAC1E,qFAAqF;IACrF,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,SAAS;aAC9B,CAAC,CAAC;YACH,MAAM,UAAU,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,eAAe,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,mFAAmF;IACnF,gFAAgF;IAChF,oFAAoF;IACpF,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,oFAAoF;IACpF,gFAAgF;IAChF,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,sEAAsE;AACtE,8DAA8D;AAC9D,SAAS,qBAAqB,CAC5B,GAAoB,EACpB,OAAe,EACf,QAAgB,EAChB,UAA2B;IAE3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEvD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,GAAG,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7D,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAE/D,MAAM,UAAU,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,cAAc,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAuB,CAAC;QAC/D,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACrE,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAmB,CAAC,CAAC;QAClD,gEAAgE;QAChE,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,8EAA8E;IAC9E,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,mBAAmB,CAAC,IAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,6BAA6B;IAC7B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAEjD,8EAA8E;IAC9E,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAmB,CAAC;QACpC,eAAe,CAAC,GAAG,EAAE,QAAQ,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,gFAAgF;IAChF,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAEpE,wFAAwF;IACxF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAmB,CAAC;QACpC,qBAAqB,CACnB,GAAG,EACH,QAAQ,OAAO,EAAE,EACjB,aAAa,OAAO,EAAE,EACtB,GAAG,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CACvC,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,YAAY,CAAC,GAAG,CAAC,CAAC;IAElB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE;gBACT,cAAc,EAAE;oBACd,QAAQ,EAAE,MAAM;oBAChB,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;iBACnE;gBACD,SAAS,EAAE;oBACT,QAAQ,EAAE,MAAM;oBAChB,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;iBACnE;gBACD,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,eAAe;oBACxB,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,mBAAmB;oBACzB,UAAU,EAAE,aAAa;iBAC1B;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,SAAS,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,oBAAoB,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,aAAa,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,OAAO,CAAC,QAAQ,IAAI,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,WAAW,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/atlassian/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/atlassian/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAG/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerJiraTools } from "./tools/jira.js";
|
|
2
2
|
import { registerConfluenceTools } from "./tools/confluence.js";
|
|
3
|
-
export function registerAtlassianTools(server) {
|
|
4
|
-
registerJiraTools(server);
|
|
5
|
-
registerConfluenceTools(server);
|
|
3
|
+
export function registerAtlassianTools(server, prefix) {
|
|
4
|
+
registerJiraTools(server, prefix);
|
|
5
|
+
registerConfluenceTools(server, prefix);
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/atlassian/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/atlassian/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAe;IACvE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
export declare function registerConfluenceTools(server: McpServer): void;
|
|
2
|
+
export declare function registerConfluenceTools(server: McpServer, prefix?: string): void;
|
|
3
3
|
//# sourceMappingURL=confluence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAuPhF"}
|
|
@@ -2,8 +2,9 @@ import { z } from "zod";
|
|
|
2
2
|
import { getConfluenceClient } from "../client.js";
|
|
3
3
|
import { handleToolError } from "../../../shared/errors.js";
|
|
4
4
|
import { toTextResponse } from "../../../shared/response.js";
|
|
5
|
-
export function registerConfluenceTools(server) {
|
|
6
|
-
|
|
5
|
+
export function registerConfluenceTools(server, prefix) {
|
|
6
|
+
const p = (name) => (prefix ? `${prefix}_${name}` : name);
|
|
7
|
+
server.registerTool(p("getConfluencePage"), {
|
|
7
8
|
description: "Fetch a Confluence page or live document by ID. Returns title, space, version, and body content.",
|
|
8
9
|
inputSchema: z.object({
|
|
9
10
|
pageId: z.string().describe("Confluence page ID"),
|
|
@@ -19,7 +20,7 @@ export function registerConfluenceTools(server) {
|
|
|
19
20
|
return handleToolError(error);
|
|
20
21
|
}
|
|
21
22
|
});
|
|
22
|
-
server.registerTool("getConfluencePageDescendants", {
|
|
23
|
+
server.registerTool(p("getConfluencePageDescendants"), {
|
|
23
24
|
description: "List child pages under a Confluence parent page.",
|
|
24
25
|
inputSchema: z.object({
|
|
25
26
|
pageId: z.string().describe("Parent page ID"),
|
|
@@ -36,7 +37,7 @@ export function registerConfluenceTools(server) {
|
|
|
36
37
|
return handleToolError(error);
|
|
37
38
|
}
|
|
38
39
|
});
|
|
39
|
-
server.registerTool("getConfluencePageFooterComments", {
|
|
40
|
+
server.registerTool(p("getConfluencePageFooterComments"), {
|
|
40
41
|
description: "Retrieve footer-level comments on a Confluence page.",
|
|
41
42
|
inputSchema: z.object({
|
|
42
43
|
pageId: z.string().describe("Page ID"),
|
|
@@ -50,7 +51,7 @@ export function registerConfluenceTools(server) {
|
|
|
50
51
|
return handleToolError(error);
|
|
51
52
|
}
|
|
52
53
|
});
|
|
53
|
-
server.registerTool("getConfluencePageInlineComments", {
|
|
54
|
+
server.registerTool(p("getConfluencePageInlineComments"), {
|
|
54
55
|
description: "Get inline comments tied to specific text in a Confluence page.",
|
|
55
56
|
inputSchema: z.object({
|
|
56
57
|
pageId: z.string().describe("Page ID"),
|
|
@@ -64,7 +65,7 @@ export function registerConfluenceTools(server) {
|
|
|
64
65
|
return handleToolError(error);
|
|
65
66
|
}
|
|
66
67
|
});
|
|
67
|
-
server.registerTool("getConfluenceCommentChildren", {
|
|
68
|
+
server.registerTool(p("getConfluenceCommentChildren"), {
|
|
68
69
|
description: "View reply threads to a Confluence comment.",
|
|
69
70
|
inputSchema: z.object({
|
|
70
71
|
commentId: z.string().describe("Comment ID"),
|
|
@@ -78,7 +79,7 @@ export function registerConfluenceTools(server) {
|
|
|
78
79
|
return handleToolError(error);
|
|
79
80
|
}
|
|
80
81
|
});
|
|
81
|
-
server.registerTool("getConfluenceSpaces", {
|
|
82
|
+
server.registerTool(p("getConfluenceSpaces"), {
|
|
82
83
|
description: "List all Confluence spaces the current user has access to.",
|
|
83
84
|
inputSchema: z.object({
|
|
84
85
|
limit: z.number().int().min(1).max(100).default(25).describe("Max results (default 25)"),
|
|
@@ -94,7 +95,7 @@ export function registerConfluenceTools(server) {
|
|
|
94
95
|
return handleToolError(error);
|
|
95
96
|
}
|
|
96
97
|
});
|
|
97
|
-
server.registerTool("getPagesInConfluenceSpace", {
|
|
98
|
+
server.registerTool(p("getPagesInConfluenceSpace"), {
|
|
98
99
|
description: "Enumerate pages within a Confluence space.",
|
|
99
100
|
inputSchema: z.object({
|
|
100
101
|
spaceId: z.string().describe("Space ID"),
|
|
@@ -109,7 +110,7 @@ export function registerConfluenceTools(server) {
|
|
|
109
110
|
return handleToolError(error);
|
|
110
111
|
}
|
|
111
112
|
});
|
|
112
|
-
server.registerTool("createConfluencePage", {
|
|
113
|
+
server.registerTool(p("createConfluencePage"), {
|
|
113
114
|
description: "Create a new Confluence page in a space.",
|
|
114
115
|
inputSchema: z.object({
|
|
115
116
|
spaceId: z.string().describe("Space ID to create the page in"),
|
|
@@ -133,7 +134,7 @@ export function registerConfluenceTools(server) {
|
|
|
133
134
|
return handleToolError(error);
|
|
134
135
|
}
|
|
135
136
|
});
|
|
136
|
-
server.registerTool("updateConfluencePage", {
|
|
137
|
+
server.registerTool(p("updateConfluencePage"), {
|
|
137
138
|
description: "Edit the content or title of an existing Confluence page. Requires the current version number.",
|
|
138
139
|
inputSchema: z.object({
|
|
139
140
|
pageId: z.string().describe("Page ID"),
|
|
@@ -155,7 +156,7 @@ export function registerConfluenceTools(server) {
|
|
|
155
156
|
return handleToolError(error);
|
|
156
157
|
}
|
|
157
158
|
});
|
|
158
|
-
server.registerTool("createConfluenceFooterComment", {
|
|
159
|
+
server.registerTool(p("createConfluenceFooterComment"), {
|
|
159
160
|
description: "Add a footer comment to a Confluence page, or reply to an existing footer comment.",
|
|
160
161
|
inputSchema: z.object({
|
|
161
162
|
pageId: z.string().describe("Page ID"),
|
|
@@ -177,7 +178,7 @@ export function registerConfluenceTools(server) {
|
|
|
177
178
|
return handleToolError(error);
|
|
178
179
|
}
|
|
179
180
|
});
|
|
180
|
-
server.registerTool("createConfluenceInlineComment", {
|
|
181
|
+
server.registerTool(p("createConfluenceInlineComment"), {
|
|
181
182
|
description: "Create a text-anchored inline comment on a Confluence page.",
|
|
182
183
|
inputSchema: z.object({
|
|
183
184
|
pageId: z.string().describe("Page ID"),
|
|
@@ -201,7 +202,7 @@ export function registerConfluenceTools(server) {
|
|
|
201
202
|
return handleToolError(error);
|
|
202
203
|
}
|
|
203
204
|
});
|
|
204
|
-
server.registerTool("searchConfluenceUsingCql", {
|
|
205
|
+
server.registerTool(p("searchConfluenceUsingCql"), {
|
|
205
206
|
description: "Search Confluence content using CQL (Confluence Query Language). Example: 'space = \"DEV\" AND title ~ \"API\"'.",
|
|
206
207
|
inputSchema: z.object({
|
|
207
208
|
cql: z.string().describe("CQL query string"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/confluence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,uBAAuB,CAAC,MAAiB;
|
|
1
|
+
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/confluence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAe;IACxE,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElE,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,mBAAmB,CAAC,EACtB;QACE,WAAW,EAAE,kGAAkG;QAC/G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACjD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;SAC9F,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAiB,iBAAiB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACxG,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,8BAA8B,CAAC,EACjC;QACE,WAAW,EAAE,kDAAkD;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzF,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,iBAAiB,MAAM,WAAW,EAAE;gBACnF,MAAM,EAAE,EAAE,KAAK,EAAE;aAClB,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,iCAAiC,CAAC,EACpC;QACE,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;SACvC,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAC9C,iBAAiB,MAAM,kBAAkB,CAC1C,CAAC;YACF,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,iCAAiC,CAAC,EACpC;QACE,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;SACvC,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAC9C,iBAAiB,MAAM,kBAAkB,CAC1C,CAAC;YACF,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,8BAA8B,CAAC,EACjC;QACE,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC7C,CAAC;KACH,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,oBAAoB,SAAS,WAAW,CAAC,CAAC;YAC3F,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,qBAAqB,CAAC,EACxB;QACE,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzF,CAAC;KACH,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAiC,gBAAgB,EAAE;gBACjG,MAAM,EAAE,EAAE,KAAK,EAAE;aAClB,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,2BAA2B,CAAC,EAC9B;QACE,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzF,CAAC;KACH,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAC9C,kBAAkB,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CACzD,CAAC;YACF,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,sBAAsB,CAAC,EACzB;QACE,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACtE,CAAC;KACH,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B;gBACpC,OAAO;gBACP,KAAK;gBACL,IAAI,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;aACpD,CAAC;YACF,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,IAAI,CAAiB,eAAe,EAAE,IAAI,CAAC,CAAC;YACzF,OAAO,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,sBAAsB,CAAC,EACzB;QACE,WAAW,EAAE,gGAAgG;QAC7G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SACzE,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAiB,iBAAiB,MAAM,EAAE,EAAE;gBAC1F,EAAE,EAAE,MAAM;gBACV,KAAK;gBACL,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE;gBAChC,IAAI,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;aACpD,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,+BAA+B,CAAC,EAClC;QACE,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SACjF,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B;gBACpC,MAAM;gBACN,IAAI,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;aACpD,CAAC;YACF,IAAI,eAAe;gBAAE,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;YAE5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;YACnF,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,+BAA+B,CAAC,EAClC;QACE,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5C,uBAAuB,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;gBACvE,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;gBAC1G,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;aAC3G,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SACjE,CAAC;KACH,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC3E,MAAM;gBACN,IAAI,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;gBACnD,uBAAuB;aACxB,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,CAAC,CAAC,0BAA0B,CAAC,EAC7B;QACE,WAAW,EAAE,kHAAkH;QAC/H,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzF,CAAC;KACH,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE;gBACnE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpD,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/jira.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../../src/services/atlassian/tools/jira.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAqS1E"}
|
|
@@ -2,8 +2,9 @@ import { z } from "zod";
|
|
|
2
2
|
import { getJiraClient } from "../client.js";
|
|
3
3
|
import { handleToolError } from "../../../shared/errors.js";
|
|
4
4
|
import { toTextResponse } from "../../../shared/response.js";
|
|
5
|
-
export function registerJiraTools(server) {
|
|
6
|
-
|
|
5
|
+
export function registerJiraTools(server, prefix) {
|
|
6
|
+
const p = (name) => (prefix ? `${prefix}_${name}` : name);
|
|
7
|
+
server.registerTool(p("getJiraIssue"), {
|
|
7
8
|
description: "Retrieve a Jira issue by its ID or key (e.g. PROJECT-123). Returns summary, status, assignee, priority, and description.",
|
|
8
9
|
inputSchema: z.object({
|
|
9
10
|
issueIdOrKey: z.string().describe("Issue ID or key, e.g. 'PROJECT-123'"),
|
|
@@ -17,7 +18,7 @@ export function registerJiraTools(server) {
|
|
|
17
18
|
return handleToolError(error);
|
|
18
19
|
}
|
|
19
20
|
});
|
|
20
|
-
server.registerTool("searchJiraIssuesUsingJql", {
|
|
21
|
+
server.registerTool(p("searchJiraIssuesUsingJql"), {
|
|
21
22
|
description: "Search Jira issues using JQL (Jira Query Language). Example: 'project = PROJ AND status = \"In Progress\"'.",
|
|
22
23
|
inputSchema: z.object({
|
|
23
24
|
jql: z.string().describe("JQL query string"),
|
|
@@ -35,7 +36,7 @@ export function registerJiraTools(server) {
|
|
|
35
36
|
return handleToolError(error);
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
|
-
server.registerTool("createJiraIssue", {
|
|
39
|
+
server.registerTool(p("createJiraIssue"), {
|
|
39
40
|
description: "Create a new Jira issue in a project. Returns the created issue key and URL.",
|
|
40
41
|
inputSchema: z.object({
|
|
41
42
|
projectKey: z.string().describe("Project key, e.g. 'PROJ'"),
|
|
@@ -66,7 +67,7 @@ export function registerJiraTools(server) {
|
|
|
66
67
|
return handleToolError(error);
|
|
67
68
|
}
|
|
68
69
|
});
|
|
69
|
-
server.registerTool("editJiraIssue", {
|
|
70
|
+
server.registerTool(p("editJiraIssue"), {
|
|
70
71
|
description: "Modify field values of an existing Jira issue: summary, description, assignee, or priority.",
|
|
71
72
|
inputSchema: z.object({
|
|
72
73
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -97,7 +98,7 @@ export function registerJiraTools(server) {
|
|
|
97
98
|
return handleToolError(error);
|
|
98
99
|
}
|
|
99
100
|
});
|
|
100
|
-
server.registerTool("transitionJiraIssue", {
|
|
101
|
+
server.registerTool(p("transitionJiraIssue"), {
|
|
101
102
|
description: "Execute a workflow state change on a Jira issue, e.g. move to 'In Progress' or 'Done'.",
|
|
102
103
|
inputSchema: z.object({
|
|
103
104
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -118,7 +119,7 @@ export function registerJiraTools(server) {
|
|
|
118
119
|
return handleToolError(error);
|
|
119
120
|
}
|
|
120
121
|
});
|
|
121
|
-
server.registerTool("getTransitionsForJiraIssue", {
|
|
122
|
+
server.registerTool(p("getTransitionsForJiraIssue"), {
|
|
122
123
|
description: "List all available workflow transitions for a Jira issue.",
|
|
123
124
|
inputSchema: z.object({
|
|
124
125
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -132,7 +133,7 @@ export function registerJiraTools(server) {
|
|
|
132
133
|
return handleToolError(error);
|
|
133
134
|
}
|
|
134
135
|
});
|
|
135
|
-
server.registerTool("addCommentToJiraIssue", {
|
|
136
|
+
server.registerTool(p("addCommentToJiraIssue"), {
|
|
136
137
|
description: "Post a comment on a Jira issue.",
|
|
137
138
|
inputSchema: z.object({
|
|
138
139
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -152,7 +153,7 @@ export function registerJiraTools(server) {
|
|
|
152
153
|
return handleToolError(error);
|
|
153
154
|
}
|
|
154
155
|
});
|
|
155
|
-
server.registerTool("addWorklogToJiraIssue", {
|
|
156
|
+
server.registerTool(p("addWorklogToJiraIssue"), {
|
|
156
157
|
description: "Record a time tracking entry on a Jira issue.",
|
|
157
158
|
inputSchema: z.object({
|
|
158
159
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -175,7 +176,7 @@ export function registerJiraTools(server) {
|
|
|
175
176
|
return handleToolError(error);
|
|
176
177
|
}
|
|
177
178
|
});
|
|
178
|
-
server.registerTool("getVisibleJiraProjects", {
|
|
179
|
+
server.registerTool(p("getVisibleJiraProjects"), {
|
|
179
180
|
description: "List all Jira projects the current user has access to.",
|
|
180
181
|
inputSchema: z.object({}),
|
|
181
182
|
}, async () => {
|
|
@@ -189,7 +190,7 @@ export function registerJiraTools(server) {
|
|
|
189
190
|
return handleToolError(error);
|
|
190
191
|
}
|
|
191
192
|
});
|
|
192
|
-
server.registerTool("getJiraProjectIssueTypesMetadata", {
|
|
193
|
+
server.registerTool(p("getJiraProjectIssueTypesMetadata"), {
|
|
193
194
|
description: "List all issue types available in a Jira project.",
|
|
194
195
|
inputSchema: z.object({
|
|
195
196
|
projectKey: z.string().describe("Project key"),
|
|
@@ -203,7 +204,7 @@ export function registerJiraTools(server) {
|
|
|
203
204
|
return handleToolError(error);
|
|
204
205
|
}
|
|
205
206
|
});
|
|
206
|
-
server.registerTool("getJiraIssueTypeMetaWithFields", {
|
|
207
|
+
server.registerTool(p("getJiraIssueTypeMetaWithFields"), {
|
|
207
208
|
description: "Get field metadata for creating issues of a specific type in a project.",
|
|
208
209
|
inputSchema: z.object({
|
|
209
210
|
projectKey: z.string().describe("Project key"),
|
|
@@ -218,7 +219,7 @@ export function registerJiraTools(server) {
|
|
|
218
219
|
return handleToolError(error);
|
|
219
220
|
}
|
|
220
221
|
});
|
|
221
|
-
server.registerTool("getIssueLinkTypes", {
|
|
222
|
+
server.registerTool(p("getIssueLinkTypes"), {
|
|
222
223
|
description: "Retrieve all available issue link types (e.g. 'blocks', 'duplicates', 'is cloned by').",
|
|
223
224
|
inputSchema: z.object({}),
|
|
224
225
|
}, async () => {
|
|
@@ -230,7 +231,7 @@ export function registerJiraTools(server) {
|
|
|
230
231
|
return handleToolError(error);
|
|
231
232
|
}
|
|
232
233
|
});
|
|
233
|
-
server.registerTool("getJiraIssueRemoteIssueLinks", {
|
|
234
|
+
server.registerTool(p("getJiraIssueRemoteIssueLinks"), {
|
|
234
235
|
description: "List external links (e.g. Confluence pages) attached to a Jira issue.",
|
|
235
236
|
inputSchema: z.object({
|
|
236
237
|
issueIdOrKey: z.string().describe("Issue ID or key"),
|
|
@@ -244,7 +245,7 @@ export function registerJiraTools(server) {
|
|
|
244
245
|
return handleToolError(error);
|
|
245
246
|
}
|
|
246
247
|
});
|
|
247
|
-
server.registerTool("lookupJiraAccountId", {
|
|
248
|
+
server.registerTool(p("lookupJiraAccountId"), {
|
|
248
249
|
description: "Find Jira user account IDs by display name or email address.",
|
|
249
250
|
inputSchema: z.object({
|
|
250
251
|
query: z.string().describe("Name or email to search for"),
|