@kanbodev/mcp 1.0.4 → 1.1.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 +12 -46
- package/dist/index.js +597 -354
- package/docs/SETUP.md +28 -22
- package/docs/VSCODE.md +11 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -15479,13 +15479,13 @@ function startCallbackServer(port, expectedState, timeoutMs = 120000) {
|
|
|
15479
15479
|
}
|
|
15480
15480
|
if (error2) {
|
|
15481
15481
|
res.writeHead(400, { "Content-Type": "text/html" });
|
|
15482
|
-
res.end(errorHtml(
|
|
15482
|
+
res.end(errorHtml(error2));
|
|
15483
15483
|
if (!resolved) {
|
|
15484
15484
|
resolved = true;
|
|
15485
15485
|
server.close();
|
|
15486
15486
|
resolve({
|
|
15487
15487
|
success: false,
|
|
15488
|
-
error:
|
|
15488
|
+
error: error2
|
|
15489
15489
|
});
|
|
15490
15490
|
}
|
|
15491
15491
|
return;
|
|
@@ -15628,11 +15628,161 @@ var init_config = __esm(() => {
|
|
|
15628
15628
|
CONFIG_PATH = path2.join(CONFIG_DIR, "config.json");
|
|
15629
15629
|
});
|
|
15630
15630
|
|
|
15631
|
+
// src/cli/register.ts
|
|
15632
|
+
import * as fs3 from "node:fs";
|
|
15633
|
+
import * as path3 from "node:path";
|
|
15634
|
+
import * as os3 from "node:os";
|
|
15635
|
+
import { execFileSync } from "node:child_process";
|
|
15636
|
+
function getVscodeMcpPath() {
|
|
15637
|
+
const platform = process.platform;
|
|
15638
|
+
if (platform === "darwin") {
|
|
15639
|
+
return path3.join(os3.homedir(), "Library", "Application Support", "Code", "User", "mcp.json");
|
|
15640
|
+
}
|
|
15641
|
+
if (platform === "win32") {
|
|
15642
|
+
return path3.join(process.env.APPDATA || "", "Code", "User", "mcp.json");
|
|
15643
|
+
}
|
|
15644
|
+
return path3.join(os3.homedir(), ".config", "Code", "User", "mcp.json");
|
|
15645
|
+
}
|
|
15646
|
+
function getCursorMcpPath() {
|
|
15647
|
+
return path3.join(os3.homedir(), ".cursor", "mcp.json");
|
|
15648
|
+
}
|
|
15649
|
+
function getClaudeDesktopMcpPath() {
|
|
15650
|
+
const platform = process.platform;
|
|
15651
|
+
if (platform === "darwin") {
|
|
15652
|
+
return path3.join(os3.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
15653
|
+
}
|
|
15654
|
+
if (platform === "win32") {
|
|
15655
|
+
return path3.join(process.env.APPDATA || "", "Claude", "claude_desktop_config.json");
|
|
15656
|
+
}
|
|
15657
|
+
return path3.join(os3.homedir(), ".config", "Claude", "claude_desktop_config.json");
|
|
15658
|
+
}
|
|
15659
|
+
function registerInConfigFile(configPath, hostName, serversKey = "servers") {
|
|
15660
|
+
try {
|
|
15661
|
+
const parentDir = path3.dirname(configPath);
|
|
15662
|
+
if (!fs3.existsSync(parentDir)) {
|
|
15663
|
+
return { host: hostName, success: false, message: `${hostName} not detected` };
|
|
15664
|
+
}
|
|
15665
|
+
let config3 = {};
|
|
15666
|
+
if (fs3.existsSync(configPath)) {
|
|
15667
|
+
const content = fs3.readFileSync(configPath, "utf-8");
|
|
15668
|
+
config3 = JSON.parse(content);
|
|
15669
|
+
}
|
|
15670
|
+
const servers = config3[serversKey] || {};
|
|
15671
|
+
if (servers[SERVER_NAME]) {
|
|
15672
|
+
return {
|
|
15673
|
+
host: hostName,
|
|
15674
|
+
success: true,
|
|
15675
|
+
alreadyRegistered: true,
|
|
15676
|
+
message: `Already registered in ${hostName}`
|
|
15677
|
+
};
|
|
15678
|
+
}
|
|
15679
|
+
servers[SERVER_NAME] = MCP_SERVER_ENTRY;
|
|
15680
|
+
config3[serversKey] = servers;
|
|
15681
|
+
fs3.writeFileSync(configPath, JSON.stringify(config3, null, 2) + `
|
|
15682
|
+
`, "utf-8");
|
|
15683
|
+
return {
|
|
15684
|
+
host: hostName,
|
|
15685
|
+
success: true,
|
|
15686
|
+
message: `Registered in ${hostName}`
|
|
15687
|
+
};
|
|
15688
|
+
} catch (error2) {
|
|
15689
|
+
const msg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
15690
|
+
return { host: hostName, success: false, message: `Failed to register in ${hostName}: ${msg}` };
|
|
15691
|
+
}
|
|
15692
|
+
}
|
|
15693
|
+
function isClaudeCliAvailable() {
|
|
15694
|
+
try {
|
|
15695
|
+
execFileSync("claude", ["--version"], { stdio: "pipe" });
|
|
15696
|
+
return true;
|
|
15697
|
+
} catch {
|
|
15698
|
+
return false;
|
|
15699
|
+
}
|
|
15700
|
+
}
|
|
15701
|
+
function registerWithClaudeCli() {
|
|
15702
|
+
const hostName = "Claude Code CLI";
|
|
15703
|
+
try {
|
|
15704
|
+
if (!isClaudeCliAvailable()) {
|
|
15705
|
+
return { host: hostName, success: false, message: "Claude Code CLI not detected" };
|
|
15706
|
+
}
|
|
15707
|
+
execFileSync("claude", ["mcp", "add", SERVER_NAME, "--", "npx", "@kanbodev/mcp"], {
|
|
15708
|
+
stdio: "pipe"
|
|
15709
|
+
});
|
|
15710
|
+
return { host: hostName, success: true, message: "Registered via Claude Code CLI" };
|
|
15711
|
+
} catch (error2) {
|
|
15712
|
+
const msg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
15713
|
+
if (msg.includes("already exists")) {
|
|
15714
|
+
return { host: hostName, success: true, alreadyRegistered: true, message: "Already registered in Claude Code CLI" };
|
|
15715
|
+
}
|
|
15716
|
+
return { host: hostName, success: false, message: `Failed to register via Claude Code CLI: ${msg}` };
|
|
15717
|
+
}
|
|
15718
|
+
}
|
|
15719
|
+
function registerMcpServer() {
|
|
15720
|
+
const results = [];
|
|
15721
|
+
results.push(registerInConfigFile(getVscodeMcpPath(), "VS Code"));
|
|
15722
|
+
results.push(registerInConfigFile(getCursorMcpPath(), "Cursor"));
|
|
15723
|
+
results.push(registerInConfigFile(getClaudeDesktopMcpPath(), "Claude Desktop", "mcpServers"));
|
|
15724
|
+
results.push(registerWithClaudeCli());
|
|
15725
|
+
return results;
|
|
15726
|
+
}
|
|
15727
|
+
function printRegistrationResults(results) {
|
|
15728
|
+
const registered = results.filter((r) => r.success && !r.alreadyRegistered);
|
|
15729
|
+
const alreadyRegistered = results.filter((r) => r.success && r.alreadyRegistered);
|
|
15730
|
+
const anySuccess = results.some((r) => r.success);
|
|
15731
|
+
if (registered.length > 0) {
|
|
15732
|
+
console.log(" MCP server registered with:");
|
|
15733
|
+
for (const r of registered) {
|
|
15734
|
+
console.log(` ✓ ${r.message}`);
|
|
15735
|
+
}
|
|
15736
|
+
}
|
|
15737
|
+
if (alreadyRegistered.length > 0) {
|
|
15738
|
+
for (const r of alreadyRegistered) {
|
|
15739
|
+
console.log(` · ${r.message}`);
|
|
15740
|
+
}
|
|
15741
|
+
}
|
|
15742
|
+
if (registered.length > 0) {
|
|
15743
|
+
console.log("");
|
|
15744
|
+
console.log(" Reload your editor to activate the Kanbo MCP server.");
|
|
15745
|
+
}
|
|
15746
|
+
if (!anySuccess) {
|
|
15747
|
+
printManualInstructions();
|
|
15748
|
+
}
|
|
15749
|
+
return anySuccess;
|
|
15750
|
+
}
|
|
15751
|
+
function printManualInstructions() {
|
|
15752
|
+
console.log(" To register the MCP server manually, add this to your mcp.json:");
|
|
15753
|
+
console.log("");
|
|
15754
|
+
console.log(" {");
|
|
15755
|
+
console.log(' "servers": {');
|
|
15756
|
+
console.log(' "kanbodev": {');
|
|
15757
|
+
console.log(' "type": "stdio",');
|
|
15758
|
+
console.log(' "command": "npx",');
|
|
15759
|
+
console.log(' "args": ["@kanbodev/mcp"]');
|
|
15760
|
+
console.log(" }");
|
|
15761
|
+
console.log(" }");
|
|
15762
|
+
console.log(" }");
|
|
15763
|
+
console.log("");
|
|
15764
|
+
console.log(" Config file locations:");
|
|
15765
|
+
console.log(` VS Code: ${getVscodeMcpPath()}`);
|
|
15766
|
+
console.log(` Cursor: ${getCursorMcpPath()}`);
|
|
15767
|
+
console.log(` Claude Desktop: ${getClaudeDesktopMcpPath()}`);
|
|
15768
|
+
console.log("");
|
|
15769
|
+
console.log(" Or register via Claude Code CLI:");
|
|
15770
|
+
console.log(" claude mcp add kanbodev -- npx @kanbodev/mcp");
|
|
15771
|
+
}
|
|
15772
|
+
var SERVER_NAME = "kanbodev", MCP_SERVER_ENTRY;
|
|
15773
|
+
var init_register = __esm(() => {
|
|
15774
|
+
MCP_SERVER_ENTRY = {
|
|
15775
|
+
type: "stdio",
|
|
15776
|
+
command: "npx",
|
|
15777
|
+
args: ["@kanbodev/mcp"]
|
|
15778
|
+
};
|
|
15779
|
+
});
|
|
15780
|
+
|
|
15631
15781
|
// node_modules/is-docker/index.js
|
|
15632
|
-
import
|
|
15782
|
+
import fs4 from "node:fs";
|
|
15633
15783
|
function hasDockerEnv() {
|
|
15634
15784
|
try {
|
|
15635
|
-
|
|
15785
|
+
fs4.statSync("/.dockerenv");
|
|
15636
15786
|
return true;
|
|
15637
15787
|
} catch {
|
|
15638
15788
|
return false;
|
|
@@ -15640,7 +15790,7 @@ function hasDockerEnv() {
|
|
|
15640
15790
|
}
|
|
15641
15791
|
function hasDockerCGroup() {
|
|
15642
15792
|
try {
|
|
15643
|
-
return
|
|
15793
|
+
return fs4.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
|
|
15644
15794
|
} catch {
|
|
15645
15795
|
return false;
|
|
15646
15796
|
}
|
|
@@ -15655,7 +15805,7 @@ var isDockerCached;
|
|
|
15655
15805
|
var init_is_docker = () => {};
|
|
15656
15806
|
|
|
15657
15807
|
// node_modules/is-inside-container/index.js
|
|
15658
|
-
import
|
|
15808
|
+
import fs5 from "node:fs";
|
|
15659
15809
|
function isInsideContainer() {
|
|
15660
15810
|
if (cachedResult === undefined) {
|
|
15661
15811
|
cachedResult = hasContainerEnv() || isDocker();
|
|
@@ -15664,7 +15814,7 @@ function isInsideContainer() {
|
|
|
15664
15814
|
}
|
|
15665
15815
|
var cachedResult, hasContainerEnv = () => {
|
|
15666
15816
|
try {
|
|
15667
|
-
|
|
15817
|
+
fs5.statSync("/run/.containerenv");
|
|
15668
15818
|
return true;
|
|
15669
15819
|
} catch {
|
|
15670
15820
|
return false;
|
|
@@ -15676,20 +15826,20 @@ var init_is_inside_container = __esm(() => {
|
|
|
15676
15826
|
|
|
15677
15827
|
// node_modules/is-wsl/index.js
|
|
15678
15828
|
import process4 from "node:process";
|
|
15679
|
-
import
|
|
15680
|
-
import
|
|
15829
|
+
import os4 from "node:os";
|
|
15830
|
+
import fs6 from "node:fs";
|
|
15681
15831
|
var isWsl = () => {
|
|
15682
15832
|
if (process4.platform !== "linux") {
|
|
15683
15833
|
return false;
|
|
15684
15834
|
}
|
|
15685
|
-
if (
|
|
15835
|
+
if (os4.release().toLowerCase().includes("microsoft")) {
|
|
15686
15836
|
if (isInsideContainer()) {
|
|
15687
15837
|
return false;
|
|
15688
15838
|
}
|
|
15689
15839
|
return true;
|
|
15690
15840
|
}
|
|
15691
15841
|
try {
|
|
15692
|
-
return
|
|
15842
|
+
return fs6.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft") ? !isInsideContainer() : false;
|
|
15693
15843
|
} catch {
|
|
15694
15844
|
return false;
|
|
15695
15845
|
}
|
|
@@ -15749,7 +15899,7 @@ function parseMountPointFromConfig(content) {
|
|
|
15749
15899
|
// node_modules/wsl-utils/index.js
|
|
15750
15900
|
import { promisify as promisify2 } from "node:util";
|
|
15751
15901
|
import childProcess2 from "node:child_process";
|
|
15752
|
-
import
|
|
15902
|
+
import fs7, { constants as fsConstants } from "node:fs/promises";
|
|
15753
15903
|
var execFile2, wslDrivesMountPoint, powerShellPathFromWsl = async () => {
|
|
15754
15904
|
const mountPoint = await wslDrivesMountPoint();
|
|
15755
15905
|
return `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;
|
|
@@ -15757,7 +15907,7 @@ var execFile2, wslDrivesMountPoint, powerShellPathFromWsl = async () => {
|
|
|
15757
15907
|
canAccessPowerShellPromise ??= (async () => {
|
|
15758
15908
|
try {
|
|
15759
15909
|
const psPath = await powerShellPath2();
|
|
15760
|
-
await
|
|
15910
|
+
await fs7.access(psPath, fsConstants.X_OK);
|
|
15761
15911
|
return true;
|
|
15762
15912
|
} catch {
|
|
15763
15913
|
return false;
|
|
@@ -15769,15 +15919,15 @@ var execFile2, wslDrivesMountPoint, powerShellPathFromWsl = async () => {
|
|
|
15769
15919
|
const command = String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`;
|
|
15770
15920
|
const { stdout } = await executePowerShell(command, { powerShellPath: psPath });
|
|
15771
15921
|
return stdout.trim();
|
|
15772
|
-
}, convertWslPathToWindows = async (
|
|
15773
|
-
if (/^[a-z]+:\/\//i.test(
|
|
15774
|
-
return
|
|
15922
|
+
}, convertWslPathToWindows = async (path4) => {
|
|
15923
|
+
if (/^[a-z]+:\/\//i.test(path4)) {
|
|
15924
|
+
return path4;
|
|
15775
15925
|
}
|
|
15776
15926
|
try {
|
|
15777
|
-
const { stdout } = await execFile2("wslpath", ["-aw",
|
|
15927
|
+
const { stdout } = await execFile2("wslpath", ["-aw", path4], { encoding: "utf8" });
|
|
15778
15928
|
return stdout.trim();
|
|
15779
15929
|
} catch {
|
|
15780
|
-
return
|
|
15930
|
+
return path4;
|
|
15781
15931
|
}
|
|
15782
15932
|
};
|
|
15783
15933
|
var init_wsl_utils = __esm(() => {
|
|
@@ -15795,13 +15945,13 @@ var init_wsl_utils = __esm(() => {
|
|
|
15795
15945
|
const configFilePath = "/etc/wsl.conf";
|
|
15796
15946
|
let isConfigFileExists = false;
|
|
15797
15947
|
try {
|
|
15798
|
-
await
|
|
15948
|
+
await fs7.access(configFilePath, fsConstants.F_OK);
|
|
15799
15949
|
isConfigFileExists = true;
|
|
15800
15950
|
} catch {}
|
|
15801
15951
|
if (!isConfigFileExists) {
|
|
15802
15952
|
return defaultMountPoint;
|
|
15803
15953
|
}
|
|
15804
|
-
const configContent = await
|
|
15954
|
+
const configContent = await fs7.readFile(configFilePath, { encoding: "utf8" });
|
|
15805
15955
|
const parsedMountPoint = parseMountPointFromConfig(configContent);
|
|
15806
15956
|
if (parsedMountPoint === undefined) {
|
|
15807
15957
|
return defaultMountPoint;
|
|
@@ -15856,7 +16006,7 @@ var init_default_browser_id = __esm(() => {
|
|
|
15856
16006
|
// node_modules/run-applescript/index.js
|
|
15857
16007
|
import process7 from "node:process";
|
|
15858
16008
|
import { promisify as promisify4 } from "node:util";
|
|
15859
|
-
import { execFile as execFile4, execFileSync } from "node:child_process";
|
|
16009
|
+
import { execFile as execFile4, execFileSync as execFileSync2 } from "node:child_process";
|
|
15860
16010
|
async function runAppleScript(script, { humanReadableOutput = true, signal } = {}) {
|
|
15861
16011
|
if (process7.platform !== "darwin") {
|
|
15862
16012
|
throw new Error("macOS only");
|
|
@@ -15976,10 +16126,10 @@ __export(exports_open, {
|
|
|
15976
16126
|
apps: () => apps
|
|
15977
16127
|
});
|
|
15978
16128
|
import process10 from "node:process";
|
|
15979
|
-
import
|
|
16129
|
+
import path4 from "node:path";
|
|
15980
16130
|
import { fileURLToPath } from "node:url";
|
|
15981
16131
|
import childProcess3 from "node:child_process";
|
|
15982
|
-
import
|
|
16132
|
+
import fs8, { constants as fsConstants2 } from "node:fs/promises";
|
|
15983
16133
|
function detectArchBinary(binary) {
|
|
15984
16134
|
if (typeof binary === "string" || Array.isArray(binary)) {
|
|
15985
16135
|
return binary;
|
|
@@ -16143,7 +16293,7 @@ var fallbackAttemptSymbol, __dirname2, localXdgOpenPath, platform, arch, tryEach
|
|
|
16143
16293
|
const isBundled = !__dirname2 || __dirname2 === "/";
|
|
16144
16294
|
let exeLocalXdgOpen = false;
|
|
16145
16295
|
try {
|
|
16146
|
-
await
|
|
16296
|
+
await fs8.access(localXdgOpenPath, fsConstants2.X_OK);
|
|
16147
16297
|
exeLocalXdgOpen = true;
|
|
16148
16298
|
} catch {}
|
|
16149
16299
|
const useSystemXdgOpen = process10.versions.electron ?? (platform === "android" || isBundled || !exeLocalXdgOpen);
|
|
@@ -16231,8 +16381,8 @@ var init_open = __esm(() => {
|
|
|
16231
16381
|
init_is_inside_container();
|
|
16232
16382
|
init_is_in_ssh();
|
|
16233
16383
|
fallbackAttemptSymbol = Symbol("fallbackAttempt");
|
|
16234
|
-
__dirname2 = import.meta.url ?
|
|
16235
|
-
localXdgOpenPath =
|
|
16384
|
+
__dirname2 = import.meta.url ? path4.dirname(fileURLToPath(import.meta.url)) : "";
|
|
16385
|
+
localXdgOpenPath = path4.join(__dirname2, "xdg-open");
|
|
16236
16386
|
({ platform, arch } = process10);
|
|
16237
16387
|
apps = {
|
|
16238
16388
|
browser: "browser",
|
|
@@ -16284,6 +16434,7 @@ __export(exports_login, {
|
|
|
16284
16434
|
login: () => login
|
|
16285
16435
|
});
|
|
16286
16436
|
import * as crypto2 from "node:crypto";
|
|
16437
|
+
import { createRequire as createRequire2 } from "node:module";
|
|
16287
16438
|
async function login() {
|
|
16288
16439
|
console.log(`
|
|
16289
16440
|
Kanbo CLI Login
|
|
@@ -16328,7 +16479,15 @@ async function login() {
|
|
|
16328
16479
|
console.log(" Could not open browser automatically.");
|
|
16329
16480
|
console.log(" Please copy the URL above and paste it in your browser.");
|
|
16330
16481
|
}
|
|
16331
|
-
|
|
16482
|
+
let result;
|
|
16483
|
+
try {
|
|
16484
|
+
result = await startCallbackServer(port, state);
|
|
16485
|
+
} catch (error2) {
|
|
16486
|
+
console.log("");
|
|
16487
|
+
console.error(` Error: Failed to start callback server.`);
|
|
16488
|
+
console.error(` ${error2 instanceof Error ? error2.message : "Unknown error"}`);
|
|
16489
|
+
process.exit(1);
|
|
16490
|
+
}
|
|
16332
16491
|
if (!result.success) {
|
|
16333
16492
|
console.log("");
|
|
16334
16493
|
console.error(` Authentication failed: ${result.error}`);
|
|
@@ -16357,17 +16516,20 @@ async function login() {
|
|
|
16357
16516
|
console.log("");
|
|
16358
16517
|
console.log(` Config saved to: ${getConfigPath()}`);
|
|
16359
16518
|
console.log("");
|
|
16360
|
-
|
|
16361
|
-
|
|
16519
|
+
const registrationResults = registerMcpServer();
|
|
16520
|
+
printRegistrationResults(registrationResults);
|
|
16362
16521
|
console.log("");
|
|
16363
16522
|
}
|
|
16364
|
-
var KANBO_WEB_URL, DEFAULT_API_URL, PORT_RANGE, CLI_VERSION
|
|
16523
|
+
var KANBO_WEB_URL, DEFAULT_API_URL, PORT_RANGE, require2, CLI_VERSION;
|
|
16365
16524
|
var init_login = __esm(() => {
|
|
16366
16525
|
init_callback_server();
|
|
16367
16526
|
init_config();
|
|
16527
|
+
init_register();
|
|
16368
16528
|
KANBO_WEB_URL = process.env.KANBO_WEB_URL || "https://kanbo.dev";
|
|
16369
16529
|
DEFAULT_API_URL = process.env.KANBO_API_URL || "https://api.kanbo.dev";
|
|
16370
16530
|
PORT_RANGE = { start: 9876, end: 9899 };
|
|
16531
|
+
require2 = createRequire2(import.meta.url);
|
|
16532
|
+
CLI_VERSION = require2("../../package.json").version;
|
|
16371
16533
|
});
|
|
16372
16534
|
|
|
16373
16535
|
// src/cli/logout.ts
|
|
@@ -16450,6 +16612,37 @@ var init_whoami = __esm(() => {
|
|
|
16450
16612
|
init_config();
|
|
16451
16613
|
});
|
|
16452
16614
|
|
|
16615
|
+
// src/cli/install.ts
|
|
16616
|
+
var exports_install = {};
|
|
16617
|
+
__export(exports_install, {
|
|
16618
|
+
install: () => install
|
|
16619
|
+
});
|
|
16620
|
+
async function install() {
|
|
16621
|
+
console.log(`
|
|
16622
|
+
Kanbo MCP — Install
|
|
16623
|
+
`);
|
|
16624
|
+
const config3 = loadConfig();
|
|
16625
|
+
if (!config3) {
|
|
16626
|
+
console.log(" You are not logged in. Please authenticate first:");
|
|
16627
|
+
console.log(" npx @kanbodev/mcp login");
|
|
16628
|
+
console.log("");
|
|
16629
|
+
console.log(" Or register the MCP server manually:");
|
|
16630
|
+
console.log("");
|
|
16631
|
+
printManualInstructions();
|
|
16632
|
+
console.log("");
|
|
16633
|
+
return;
|
|
16634
|
+
}
|
|
16635
|
+
console.log(` Logged in as ${config3.userEmail} (${config3.orgName})`);
|
|
16636
|
+
console.log("");
|
|
16637
|
+
const results = registerMcpServer();
|
|
16638
|
+
printRegistrationResults(results);
|
|
16639
|
+
console.log("");
|
|
16640
|
+
}
|
|
16641
|
+
var init_install = __esm(() => {
|
|
16642
|
+
init_config();
|
|
16643
|
+
init_register();
|
|
16644
|
+
});
|
|
16645
|
+
|
|
16453
16646
|
// src/config/constants.ts
|
|
16454
16647
|
import * as fs from "node:fs";
|
|
16455
16648
|
import * as path from "node:path";
|
|
@@ -24821,18 +25014,18 @@ function formatToolResult(result) {
|
|
|
24821
25014
|
var listProjectsTool = {
|
|
24822
25015
|
tool: {
|
|
24823
25016
|
name: "list_projects",
|
|
24824
|
-
description: "List all projects the
|
|
25017
|
+
description: "List all projects in the current organization. Returns project IDs needed by most other tools. Call set_organization first if you have multiple orgs.",
|
|
24825
25018
|
inputSchema: {
|
|
24826
25019
|
type: "object",
|
|
24827
25020
|
properties: {
|
|
24828
25021
|
includeArchived: {
|
|
24829
25022
|
type: "boolean",
|
|
24830
|
-
description: "Include archived projects (default: false)",
|
|
25023
|
+
description: "Include archived projects in results (default: false)",
|
|
24831
25024
|
default: false
|
|
24832
25025
|
},
|
|
24833
25026
|
search: {
|
|
24834
25027
|
type: "string",
|
|
24835
|
-
description: "Filter by project name"
|
|
25028
|
+
description: "Filter by project name substring (optional)"
|
|
24836
25029
|
}
|
|
24837
25030
|
}
|
|
24838
25031
|
}
|
|
@@ -24853,13 +25046,13 @@ var listProjectsTool = {
|
|
|
24853
25046
|
var getProjectTool = {
|
|
24854
25047
|
tool: {
|
|
24855
25048
|
name: "get_project",
|
|
24856
|
-
description: "Get detailed information about a specific project including settings and
|
|
25049
|
+
description: "Get detailed information about a specific project including settings, workflow configuration, and metadata. Use list_projects to find the project ID.",
|
|
24857
25050
|
inputSchema: {
|
|
24858
25051
|
type: "object",
|
|
24859
25052
|
properties: {
|
|
24860
25053
|
projectId: {
|
|
24861
25054
|
type: "string",
|
|
24862
|
-
description: "Project ID (format: prj_xxxxx)"
|
|
25055
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
24863
25056
|
}
|
|
24864
25057
|
},
|
|
24865
25058
|
required: ["projectId"]
|
|
@@ -24878,13 +25071,13 @@ var getProjectTool = {
|
|
|
24878
25071
|
var getProjectBySlugTool = {
|
|
24879
25072
|
tool: {
|
|
24880
25073
|
name: "get_project_by_slug",
|
|
24881
|
-
description: 'Get a project by its URL slug (e.g., "my-project")',
|
|
25074
|
+
description: 'Get a project by its URL slug (e.g., "my-project"). Useful when you know the project name but not its ID.',
|
|
24882
25075
|
inputSchema: {
|
|
24883
25076
|
type: "object",
|
|
24884
25077
|
properties: {
|
|
24885
25078
|
slug: {
|
|
24886
25079
|
type: "string",
|
|
24887
|
-
description:
|
|
25080
|
+
description: 'Project slug from the URL (lowercase-kebab-case, e.g., "my-project")'
|
|
24888
25081
|
}
|
|
24889
25082
|
},
|
|
24890
25083
|
required: ["slug"]
|
|
@@ -24903,25 +25096,25 @@ var getProjectBySlugTool = {
|
|
|
24903
25096
|
var createProjectTool = {
|
|
24904
25097
|
tool: {
|
|
24905
25098
|
name: "create_project",
|
|
24906
|
-
description: "Create a new project in the current organization. Requires an initial (3-6 uppercase letters) used as ticket key prefix.",
|
|
25099
|
+
description: "Create a new project in the current organization. Requires an initial (3-6 uppercase letters) used as ticket key prefix (e.g., tickets become PROJ-1, PROJ-2). The initial cannot be changed after creation.",
|
|
24907
25100
|
inputSchema: {
|
|
24908
25101
|
type: "object",
|
|
24909
25102
|
properties: {
|
|
24910
25103
|
name: {
|
|
24911
25104
|
type: "string",
|
|
24912
|
-
description: "Project name"
|
|
25105
|
+
description: "Project name (1-100 chars)"
|
|
24913
25106
|
},
|
|
24914
25107
|
initial: {
|
|
24915
25108
|
type: "string",
|
|
24916
|
-
description: 'Project initial (3-6 uppercase letters, e.g., "PROJ"). Used as ticket key prefix
|
|
25109
|
+
description: 'Project initial (3-6 uppercase letters, e.g., "PROJ"). Used as ticket key prefix (PROJ-1, PROJ-2). Cannot be changed later.'
|
|
24917
25110
|
},
|
|
24918
25111
|
description: {
|
|
24919
25112
|
type: "string",
|
|
24920
|
-
description: "Project description (optional)"
|
|
25113
|
+
description: "Project description (optional, plain text)"
|
|
24921
25114
|
},
|
|
24922
25115
|
color: {
|
|
24923
25116
|
type: "string",
|
|
24924
|
-
description: 'Project color as hex (e.g., "#FF5733", optional)'
|
|
25117
|
+
description: 'Project theme color as hex (e.g., "#FF5733", optional)'
|
|
24925
25118
|
}
|
|
24926
25119
|
},
|
|
24927
25120
|
required: ["name", "initial"]
|
|
@@ -24945,25 +25138,25 @@ var createProjectTool = {
|
|
|
24945
25138
|
var updateProjectTool = {
|
|
24946
25139
|
tool: {
|
|
24947
25140
|
name: "update_project",
|
|
24948
|
-
description: "Update project details
|
|
25141
|
+
description: "Update project details. Only pass fields you want to change — omitted fields are not modified. Requires project admin or owner role.",
|
|
24949
25142
|
inputSchema: {
|
|
24950
25143
|
type: "object",
|
|
24951
25144
|
properties: {
|
|
24952
25145
|
projectId: {
|
|
24953
25146
|
type: "string",
|
|
24954
|
-
description: "Project ID"
|
|
25147
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
24955
25148
|
},
|
|
24956
25149
|
name: {
|
|
24957
25150
|
type: "string",
|
|
24958
|
-
description: "New project name"
|
|
25151
|
+
description: "New project name (1-100 chars)"
|
|
24959
25152
|
},
|
|
24960
25153
|
description: {
|
|
24961
25154
|
type: "string",
|
|
24962
|
-
description: "New project description"
|
|
25155
|
+
description: "New project description (plain text)"
|
|
24963
25156
|
},
|
|
24964
25157
|
color: {
|
|
24965
25158
|
type: "string",
|
|
24966
|
-
description: 'New project color as hex (e.g., "#FF5733")'
|
|
25159
|
+
description: 'New project theme color as hex (e.g., "#FF5733")'
|
|
24967
25160
|
}
|
|
24968
25161
|
},
|
|
24969
25162
|
required: ["projectId"]
|
|
@@ -24989,13 +25182,13 @@ var updateProjectTool = {
|
|
|
24989
25182
|
var deleteProjectTool = {
|
|
24990
25183
|
tool: {
|
|
24991
25184
|
name: "delete_project",
|
|
24992
|
-
description: "Soft
|
|
25185
|
+
description: "Soft-delete a project. The project can be restored later. All tickets and data are preserved. Requires project owner role.",
|
|
24993
25186
|
inputSchema: {
|
|
24994
25187
|
type: "object",
|
|
24995
25188
|
properties: {
|
|
24996
25189
|
projectId: {
|
|
24997
25190
|
type: "string",
|
|
24998
|
-
description: "Project ID to delete"
|
|
25191
|
+
description: "Project ID to delete (format: prj_xxxxx)"
|
|
24999
25192
|
}
|
|
25000
25193
|
},
|
|
25001
25194
|
required: ["projectId"]
|
|
@@ -25014,13 +25207,13 @@ var deleteProjectTool = {
|
|
|
25014
25207
|
var archiveProjectTool = {
|
|
25015
25208
|
tool: {
|
|
25016
25209
|
name: "archive_project",
|
|
25017
|
-
description: "Archive a project. Archived projects are hidden from
|
|
25210
|
+
description: "Archive a project. Archived projects are hidden from list_projects (unless includeArchived is true) but can be restored with unarchive_project.",
|
|
25018
25211
|
inputSchema: {
|
|
25019
25212
|
type: "object",
|
|
25020
25213
|
properties: {
|
|
25021
25214
|
projectId: {
|
|
25022
25215
|
type: "string",
|
|
25023
|
-
description: "Project ID to archive"
|
|
25216
|
+
description: "Project ID to archive (format: prj_xxxxx)"
|
|
25024
25217
|
}
|
|
25025
25218
|
},
|
|
25026
25219
|
required: ["projectId"]
|
|
@@ -25039,13 +25232,13 @@ var archiveProjectTool = {
|
|
|
25039
25232
|
var unarchiveProjectTool = {
|
|
25040
25233
|
tool: {
|
|
25041
25234
|
name: "unarchive_project",
|
|
25042
|
-
description: "
|
|
25235
|
+
description: "Restore a previously archived project. The project will reappear in list_projects results.",
|
|
25043
25236
|
inputSchema: {
|
|
25044
25237
|
type: "object",
|
|
25045
25238
|
properties: {
|
|
25046
25239
|
projectId: {
|
|
25047
25240
|
type: "string",
|
|
25048
|
-
description: "Project ID to unarchive"
|
|
25241
|
+
description: "Project ID to unarchive (format: prj_xxxxx)"
|
|
25049
25242
|
}
|
|
25050
25243
|
},
|
|
25051
25244
|
required: ["projectId"]
|
|
@@ -25064,7 +25257,7 @@ var unarchiveProjectTool = {
|
|
|
25064
25257
|
var getProjectSummariesTool = {
|
|
25065
25258
|
tool: {
|
|
25066
25259
|
name: "get_project_summaries",
|
|
25067
|
-
description: "Get all projects with summary statistics (ticket counts, member count) in a single efficient call",
|
|
25260
|
+
description: "Get all projects with summary statistics (ticket counts by status, member count) in a single efficient call. Lighter than calling get_project_stats for each project individually.",
|
|
25068
25261
|
inputSchema: {
|
|
25069
25262
|
type: "object",
|
|
25070
25263
|
properties: {}
|
|
@@ -25083,13 +25276,13 @@ var getProjectSummariesTool = {
|
|
|
25083
25276
|
var getProjectStatsTool = {
|
|
25084
25277
|
tool: {
|
|
25085
25278
|
name: "get_project_stats",
|
|
25086
|
-
description: "Get detailed project statistics: ticket counts by status, completion rates, and member activity",
|
|
25279
|
+
description: "Get detailed project statistics: ticket counts by status, completion rates, and member activity. For cross-project overview, use get_project_summaries instead.",
|
|
25087
25280
|
inputSchema: {
|
|
25088
25281
|
type: "object",
|
|
25089
25282
|
properties: {
|
|
25090
25283
|
projectId: {
|
|
25091
25284
|
type: "string",
|
|
25092
|
-
description: "Project ID (format: prj_xxxxx)"
|
|
25285
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
25093
25286
|
}
|
|
25094
25287
|
},
|
|
25095
25288
|
required: ["projectId"]
|
|
@@ -25108,13 +25301,13 @@ var getProjectStatsTool = {
|
|
|
25108
25301
|
var getProjectMembersTool = {
|
|
25109
25302
|
tool: {
|
|
25110
25303
|
name: "get_project_members",
|
|
25111
|
-
description: "List all members of a project with their roles.
|
|
25304
|
+
description: "List all members of a project with their roles. Returns user IDs needed for assigneeId in create_ticket. Use get_available_project_members to find org members not yet in the project.",
|
|
25112
25305
|
inputSchema: {
|
|
25113
25306
|
type: "object",
|
|
25114
25307
|
properties: {
|
|
25115
25308
|
projectId: {
|
|
25116
25309
|
type: "string",
|
|
25117
|
-
description: "Project ID (format: prj_xxxxx)"
|
|
25310
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
25118
25311
|
}
|
|
25119
25312
|
},
|
|
25120
25313
|
required: ["projectId"]
|
|
@@ -25148,7 +25341,7 @@ var projectTools = [
|
|
|
25148
25341
|
var listTicketsTool = {
|
|
25149
25342
|
tool: {
|
|
25150
25343
|
name: "list_tickets",
|
|
25151
|
-
description: "List tickets in a project with optional filters
|
|
25344
|
+
description: "List tickets in a project with optional filters. Returns full ticket data. For lightweight search (id, number, title only), use quick_search_tickets instead. Combine filters for targeted queries.",
|
|
25152
25345
|
inputSchema: {
|
|
25153
25346
|
type: "object",
|
|
25154
25347
|
properties: {
|
|
@@ -25213,13 +25406,13 @@ var listTicketsTool = {
|
|
|
25213
25406
|
var getTicketTool = {
|
|
25214
25407
|
tool: {
|
|
25215
25408
|
name: "get_ticket",
|
|
25216
|
-
description: "Get
|
|
25409
|
+
description: "Get full details of a ticket: title, description, status, assignee, priority, size, type, acceptance criteria, and metadata. Use before update_ticket to get the current version for optimistic locking.",
|
|
25217
25410
|
inputSchema: {
|
|
25218
25411
|
type: "object",
|
|
25219
25412
|
properties: {
|
|
25220
25413
|
projectId: {
|
|
25221
25414
|
type: "string",
|
|
25222
|
-
description: "Project ID"
|
|
25415
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25223
25416
|
},
|
|
25224
25417
|
ticketId: {
|
|
25225
25418
|
type: "string",
|
|
@@ -25242,7 +25435,7 @@ var getTicketTool = {
|
|
|
25242
25435
|
var getTicketByKeyTool = {
|
|
25243
25436
|
tool: {
|
|
25244
25437
|
name: "get_ticket_by_key",
|
|
25245
|
-
description: '
|
|
25438
|
+
description: 'Look up a ticket by its human-readable key (e.g., "PROJ-123"). This is how users typically reference tickets in conversation. Org context must be set or pass orgSlug.',
|
|
25246
25439
|
inputSchema: {
|
|
25247
25440
|
type: "object",
|
|
25248
25441
|
properties: {
|
|
@@ -25282,37 +25475,37 @@ var getTicketByKeyTool = {
|
|
|
25282
25475
|
var createTicketTool = {
|
|
25283
25476
|
tool: {
|
|
25284
25477
|
name: "create_ticket",
|
|
25285
|
-
description: "Create a new ticket in a project.
|
|
25478
|
+
description: "Create a new ticket in a project. For high-quality tickets, always include: description (structured markdown with ## headings), acceptanceCriteria (Given/When/Then JSON), and typeSlug. After creation, call set_ticket_tags to add tags. Call find_similar_tickets first to check for duplicates. Use list_statuses, list_priorities, list_sizes to get required IDs.",
|
|
25286
25479
|
inputSchema: {
|
|
25287
25480
|
type: "object",
|
|
25288
25481
|
properties: {
|
|
25289
25482
|
projectId: {
|
|
25290
25483
|
type: "string",
|
|
25291
|
-
description: "Project to
|
|
25484
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
25292
25485
|
},
|
|
25293
25486
|
title: {
|
|
25294
25487
|
type: "string",
|
|
25295
|
-
description: `Ticket title (${LIMITS.TITLE_MIN}-${LIMITS.TITLE_MAX}
|
|
25488
|
+
description: `Ticket title (${LIMITS.TITLE_MIN}-${LIMITS.TITLE_MAX} chars). Be concise and action-oriented. Start with a verb for tasks (e.g., "Implement Google OAuth login flow").`
|
|
25296
25489
|
},
|
|
25297
25490
|
description: {
|
|
25298
25491
|
type: "string",
|
|
25299
|
-
description:
|
|
25492
|
+
description: `Ticket description in markdown (max ${LIMITS.DESCRIPTION_MAX} chars). Structure with ## headings: "## Requirements" (bullet points), "## Technical Notes" (implementation details, APIs, constraints). Use **bold** for key terms, \`code\` for identifiers, bullet lists for readability. Start with a user story: "As a [role], I want [goal], so that [benefit]."`
|
|
25300
25493
|
},
|
|
25301
25494
|
statusId: {
|
|
25302
25495
|
type: "string",
|
|
25303
|
-
description: "Initial status ID (
|
|
25496
|
+
description: "Initial status ID (format: sts_xxxxx). Use list_statuses to get valid IDs. Typically use the first/leftmost status for new tickets."
|
|
25304
25497
|
},
|
|
25305
25498
|
assigneeId: {
|
|
25306
25499
|
type: "string",
|
|
25307
|
-
description: "
|
|
25500
|
+
description: "User ID to assign (optional). Use get_project_members to find valid user IDs."
|
|
25308
25501
|
},
|
|
25309
25502
|
priorityId: {
|
|
25310
25503
|
type: "string",
|
|
25311
|
-
description: "Priority
|
|
25504
|
+
description: "Priority ID (required, format: pri_xxxxx). Use list_priorities to get valid IDs for this project."
|
|
25312
25505
|
},
|
|
25313
25506
|
sizeId: {
|
|
25314
25507
|
type: "string",
|
|
25315
|
-
description: "Size
|
|
25508
|
+
description: "Size/effort ID (required, format: siz_xxxxx). Use list_sizes to get valid IDs for this project."
|
|
25316
25509
|
},
|
|
25317
25510
|
priority: {
|
|
25318
25511
|
type: "string",
|
|
@@ -25327,28 +25520,28 @@ var createTicketTool = {
|
|
|
25327
25520
|
location: {
|
|
25328
25521
|
type: "string",
|
|
25329
25522
|
enum: ["board", "backlog"],
|
|
25330
|
-
description:
|
|
25523
|
+
description: 'Where to create: "board" (active, visible on board columns) or "backlog" (for later). Default: board.',
|
|
25331
25524
|
default: "board"
|
|
25332
25525
|
},
|
|
25333
25526
|
dueDate: {
|
|
25334
25527
|
type: "string",
|
|
25335
|
-
description:
|
|
25528
|
+
description: 'Due date in ISO 8601 format (e.g., "2025-03-15T00:00:00.000Z"). Optional.'
|
|
25336
25529
|
},
|
|
25337
25530
|
releaseId: {
|
|
25338
25531
|
type: "string",
|
|
25339
|
-
description: "Assign to release
|
|
25532
|
+
description: "Assign to a release at creation (format: rel_xxxxx). Use list_releases or get_release_dropdown to find IDs. Optional."
|
|
25340
25533
|
},
|
|
25341
25534
|
typeSlug: {
|
|
25342
25535
|
type: "string",
|
|
25343
|
-
description:
|
|
25536
|
+
description: 'Ticket type slug: "bug", "feature", "task", etc. Use list_ticket_types to see available types. Always set this for proper categorization.'
|
|
25344
25537
|
},
|
|
25345
25538
|
acceptanceCriteria: {
|
|
25346
25539
|
type: "string",
|
|
25347
|
-
description:
|
|
25540
|
+
description: `Acceptance criteria as JSON string of array (max ${LIMITS.ACCEPTANCE_CRITERIA_MAX} chars). Format: [{"id":"ac-1","text":"Given a user on X page, When they do Y, Then Z happens","isChecked":false}]. Use Given/When/Then format. Include 3-8 criteria. Use unique IDs (ac-1, ac-2). Set isChecked to false for new tickets.`
|
|
25348
25541
|
},
|
|
25349
25542
|
parentId: {
|
|
25350
25543
|
type: "string",
|
|
25351
|
-
description: "Parent ticket ID for creating subtasks (
|
|
25544
|
+
description: "Parent ticket ID for creating subtasks (format: tkt_xxxxx). The parent must be in the same project. Optional."
|
|
25352
25545
|
}
|
|
25353
25546
|
},
|
|
25354
25547
|
required: ["projectId", "title", "statusId", "priorityId", "sizeId"]
|
|
@@ -25382,37 +25575,37 @@ var createTicketTool = {
|
|
|
25382
25575
|
var updateTicketTool = {
|
|
25383
25576
|
tool: {
|
|
25384
25577
|
name: "update_ticket",
|
|
25385
|
-
description: "Update ticket fields. Only provided fields are
|
|
25578
|
+
description: "Update one or more ticket fields. Only provided fields are changed; omitted fields stay untouched. To clear a nullable field, pass null explicitly. For status changes, use move_ticket instead. Consider updating tags with set_ticket_tags if needed.",
|
|
25386
25579
|
inputSchema: {
|
|
25387
25580
|
type: "object",
|
|
25388
25581
|
properties: {
|
|
25389
25582
|
projectId: {
|
|
25390
25583
|
type: "string",
|
|
25391
|
-
description: "Project ID"
|
|
25584
|
+
description: "Project ID (format: prj_xxxxx)."
|
|
25392
25585
|
},
|
|
25393
25586
|
ticketId: {
|
|
25394
25587
|
type: "string",
|
|
25395
|
-
description: "Ticket ID to update"
|
|
25588
|
+
description: "Ticket ID to update (format: tkt_xxxxx)."
|
|
25396
25589
|
},
|
|
25397
25590
|
title: {
|
|
25398
25591
|
type: "string",
|
|
25399
|
-
description:
|
|
25592
|
+
description: `New title (${LIMITS.TITLE_MIN}-${LIMITS.TITLE_MAX} chars). Concise and action-oriented.`
|
|
25400
25593
|
},
|
|
25401
25594
|
description: {
|
|
25402
25595
|
type: "string",
|
|
25403
|
-
description:
|
|
25596
|
+
description: `New description in markdown (max ${LIMITS.DESCRIPTION_MAX} chars). Structure with ## headings: Requirements, Technical Notes. Use **bold**, \`code\`, bullet lists.`
|
|
25404
25597
|
},
|
|
25405
25598
|
assigneeId: {
|
|
25406
25599
|
type: ["string", "null"],
|
|
25407
|
-
description: "User ID to assign, or null to unassign"
|
|
25600
|
+
description: "User ID to assign, or null to unassign. Use get_project_members to find IDs."
|
|
25408
25601
|
},
|
|
25409
25602
|
priorityId: {
|
|
25410
25603
|
type: ["string", "null"],
|
|
25411
|
-
description: "Priority
|
|
25604
|
+
description: "Priority ID (use list_priorities), or null to clear."
|
|
25412
25605
|
},
|
|
25413
25606
|
sizeId: {
|
|
25414
25607
|
type: ["string", "null"],
|
|
25415
|
-
description: "Size
|
|
25608
|
+
description: "Size ID (use list_sizes), or null to clear."
|
|
25416
25609
|
},
|
|
25417
25610
|
priority: {
|
|
25418
25611
|
type: "string",
|
|
@@ -25426,27 +25619,27 @@ var updateTicketTool = {
|
|
|
25426
25619
|
},
|
|
25427
25620
|
dueDate: {
|
|
25428
25621
|
type: ["string", "null"],
|
|
25429
|
-
description:
|
|
25622
|
+
description: 'Due date in ISO 8601 format (e.g., "2025-03-15T00:00:00.000Z"), or null to clear.'
|
|
25430
25623
|
},
|
|
25431
25624
|
releaseId: {
|
|
25432
25625
|
type: ["string", "null"],
|
|
25433
|
-
description: "Release ID, or null to remove from release"
|
|
25626
|
+
description: "Release ID (format: rel_xxxxx), or null to remove from release."
|
|
25434
25627
|
},
|
|
25435
25628
|
typeSlug: {
|
|
25436
25629
|
type: ["string", "null"],
|
|
25437
|
-
description:
|
|
25630
|
+
description: 'Ticket type slug ("bug", "feature", "task", etc.), or null to remove type. Use list_ticket_types for valid values.'
|
|
25438
25631
|
},
|
|
25439
25632
|
acceptanceCriteria: {
|
|
25440
25633
|
type: ["string", "null"],
|
|
25441
|
-
description:
|
|
25634
|
+
description: `Acceptance criteria as JSON string of array (max ${LIMITS.ACCEPTANCE_CRITERIA_MAX} chars): [{"id":"ac-1","text":"Given... When... Then...","isChecked":false}], or null to clear. Preserve existing criteria IDs when updating.`
|
|
25442
25635
|
},
|
|
25443
25636
|
parentId: {
|
|
25444
25637
|
type: ["string", "null"],
|
|
25445
|
-
description: "Parent ticket ID, or null to remove from parent"
|
|
25638
|
+
description: "Parent ticket ID (format: tkt_xxxxx), or null to remove from parent."
|
|
25446
25639
|
},
|
|
25447
25640
|
version: {
|
|
25448
25641
|
type: "number",
|
|
25449
|
-
description: "Optimistic locking version
|
|
25642
|
+
description: "Optimistic locking version. Pass the ticket's current version to prevent overwriting concurrent edits. Get from get_ticket response."
|
|
25450
25643
|
}
|
|
25451
25644
|
},
|
|
25452
25645
|
required: ["projectId", "ticketId"]
|
|
@@ -25492,13 +25685,13 @@ var updateTicketTool = {
|
|
|
25492
25685
|
var moveTicketTool = {
|
|
25493
25686
|
tool: {
|
|
25494
25687
|
name: "move_ticket",
|
|
25495
|
-
description: "Move a ticket to a different status column
|
|
25688
|
+
description: "Move a ticket to a different status column. Call get_available_transitions first to check valid targets — moves to disallowed statuses will fail. For completing, use complete_ticket; for canceling, use abandon_ticket.",
|
|
25496
25689
|
inputSchema: {
|
|
25497
25690
|
type: "object",
|
|
25498
25691
|
properties: {
|
|
25499
25692
|
projectId: {
|
|
25500
25693
|
type: "string",
|
|
25501
|
-
description: "Project ID"
|
|
25694
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25502
25695
|
},
|
|
25503
25696
|
ticketId: {
|
|
25504
25697
|
type: "string",
|
|
@@ -25530,13 +25723,13 @@ var moveTicketTool = {
|
|
|
25530
25723
|
var completeTicketTool = {
|
|
25531
25724
|
tool: {
|
|
25532
25725
|
name: "complete_ticket",
|
|
25533
|
-
description: "Mark a ticket as
|
|
25726
|
+
description: "Mark a ticket as done. Moves it to the Completed area (off the board). To undo, use reopen_ticket.",
|
|
25534
25727
|
inputSchema: {
|
|
25535
25728
|
type: "object",
|
|
25536
25729
|
properties: {
|
|
25537
25730
|
projectId: {
|
|
25538
25731
|
type: "string",
|
|
25539
|
-
description: "Project ID"
|
|
25732
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25540
25733
|
},
|
|
25541
25734
|
ticketId: {
|
|
25542
25735
|
type: "string",
|
|
@@ -25559,13 +25752,13 @@ var completeTicketTool = {
|
|
|
25559
25752
|
var abandonTicketTool = {
|
|
25560
25753
|
tool: {
|
|
25561
25754
|
name: "abandon_ticket",
|
|
25562
|
-
description: "
|
|
25755
|
+
description: "Cancel a ticket (won't do). Moves it to the Abandoned area. Optionally provide a reason for the audit trail. To undo, use revive_ticket.",
|
|
25563
25756
|
inputSchema: {
|
|
25564
25757
|
type: "object",
|
|
25565
25758
|
properties: {
|
|
25566
25759
|
projectId: {
|
|
25567
25760
|
type: "string",
|
|
25568
|
-
description: "Project ID"
|
|
25761
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25569
25762
|
},
|
|
25570
25763
|
ticketId: {
|
|
25571
25764
|
type: "string",
|
|
@@ -25592,13 +25785,13 @@ var abandonTicketTool = {
|
|
|
25592
25785
|
var reopenTicketTool = {
|
|
25593
25786
|
tool: {
|
|
25594
25787
|
name: "reopen_ticket",
|
|
25595
|
-
description:
|
|
25788
|
+
description: 'Reopen a completed ticket, returning it to the board or backlog. If destination is "board", you must provide a statusId. Use list_statuses to get valid IDs.',
|
|
25596
25789
|
inputSchema: {
|
|
25597
25790
|
type: "object",
|
|
25598
25791
|
properties: {
|
|
25599
25792
|
projectId: {
|
|
25600
25793
|
type: "string",
|
|
25601
|
-
description: "Project ID"
|
|
25794
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25602
25795
|
},
|
|
25603
25796
|
ticketId: {
|
|
25604
25797
|
type: "string",
|
|
@@ -25631,13 +25824,13 @@ var reopenTicketTool = {
|
|
|
25631
25824
|
var reviveTicketTool = {
|
|
25632
25825
|
tool: {
|
|
25633
25826
|
name: "revive_ticket",
|
|
25634
|
-
description:
|
|
25827
|
+
description: 'Bring back an abandoned ticket, returning it to the board or backlog. If destination is "board", you must provide a statusId.',
|
|
25635
25828
|
inputSchema: {
|
|
25636
25829
|
type: "object",
|
|
25637
25830
|
properties: {
|
|
25638
25831
|
projectId: {
|
|
25639
25832
|
type: "string",
|
|
25640
|
-
description: "Project ID"
|
|
25833
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25641
25834
|
},
|
|
25642
25835
|
ticketId: {
|
|
25643
25836
|
type: "string",
|
|
@@ -25670,13 +25863,13 @@ var reviveTicketTool = {
|
|
|
25670
25863
|
var deleteTicketTool = {
|
|
25671
25864
|
tool: {
|
|
25672
25865
|
name: "delete_ticket",
|
|
25673
|
-
description:
|
|
25866
|
+
description: `Soft-delete a ticket (moves to trash). Can be restored with restore_ticket. Prefer abandon_ticket for "won't do" tickets — delete is for accidental or junk tickets.`,
|
|
25674
25867
|
inputSchema: {
|
|
25675
25868
|
type: "object",
|
|
25676
25869
|
properties: {
|
|
25677
25870
|
projectId: {
|
|
25678
25871
|
type: "string",
|
|
25679
|
-
description: "Project ID"
|
|
25872
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25680
25873
|
},
|
|
25681
25874
|
ticketId: {
|
|
25682
25875
|
type: "string",
|
|
@@ -25699,13 +25892,13 @@ var deleteTicketTool = {
|
|
|
25699
25892
|
var restoreTicketTool = {
|
|
25700
25893
|
tool: {
|
|
25701
25894
|
name: "restore_ticket",
|
|
25702
|
-
description: "Restore a deleted ticket from trash",
|
|
25895
|
+
description: "Restore a soft-deleted ticket from trash back to its previous location.",
|
|
25703
25896
|
inputSchema: {
|
|
25704
25897
|
type: "object",
|
|
25705
25898
|
properties: {
|
|
25706
25899
|
projectId: {
|
|
25707
25900
|
type: "string",
|
|
25708
|
-
description: "Project ID"
|
|
25901
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25709
25902
|
},
|
|
25710
25903
|
ticketId: {
|
|
25711
25904
|
type: "string",
|
|
@@ -25728,13 +25921,13 @@ var restoreTicketTool = {
|
|
|
25728
25921
|
var moveToBacklogTool = {
|
|
25729
25922
|
tool: {
|
|
25730
25923
|
name: "move_to_backlog",
|
|
25731
|
-
description: "Move a ticket from the board to the backlog for later",
|
|
25924
|
+
description: "Move a ticket from the active board to the backlog (for later). The ticket retains its metadata but is no longer visible on board columns.",
|
|
25732
25925
|
inputSchema: {
|
|
25733
25926
|
type: "object",
|
|
25734
25927
|
properties: {
|
|
25735
25928
|
projectId: {
|
|
25736
25929
|
type: "string",
|
|
25737
|
-
description: "Project ID"
|
|
25930
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25738
25931
|
},
|
|
25739
25932
|
ticketId: {
|
|
25740
25933
|
type: "string",
|
|
@@ -25757,13 +25950,13 @@ var moveToBacklogTool = {
|
|
|
25757
25950
|
var moveToBoardTool = {
|
|
25758
25951
|
tool: {
|
|
25759
25952
|
name: "move_to_board",
|
|
25760
|
-
description: "Move a ticket from the backlog to the active board",
|
|
25953
|
+
description: "Move a ticket from the backlog to the active board. Requires a statusId to place it in a specific column. Use list_statuses to get valid IDs.",
|
|
25761
25954
|
inputSchema: {
|
|
25762
25955
|
type: "object",
|
|
25763
25956
|
properties: {
|
|
25764
25957
|
projectId: {
|
|
25765
25958
|
type: "string",
|
|
25766
|
-
description: "Project ID"
|
|
25959
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25767
25960
|
},
|
|
25768
25961
|
ticketId: {
|
|
25769
25962
|
type: "string",
|
|
@@ -25790,13 +25983,13 @@ var moveToBoardTool = {
|
|
|
25790
25983
|
var getCompletedTicketsTool = {
|
|
25791
25984
|
tool: {
|
|
25792
25985
|
name: "get_completed_tickets",
|
|
25793
|
-
description: "Get
|
|
25986
|
+
description: "Get completed tickets in a project. Use for reviewing finished work or finding tickets to reopen.",
|
|
25794
25987
|
inputSchema: {
|
|
25795
25988
|
type: "object",
|
|
25796
25989
|
properties: {
|
|
25797
25990
|
projectId: {
|
|
25798
25991
|
type: "string",
|
|
25799
|
-
description: "Project ID"
|
|
25992
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25800
25993
|
},
|
|
25801
25994
|
limit: {
|
|
25802
25995
|
type: "number",
|
|
@@ -25820,13 +26013,13 @@ var getCompletedTicketsTool = {
|
|
|
25820
26013
|
var getAbandonedTicketsTool = {
|
|
25821
26014
|
tool: {
|
|
25822
26015
|
name: "get_abandoned_tickets",
|
|
25823
|
-
description: "Get
|
|
26016
|
+
description: "Get abandoned (canceled) tickets in a project. Use for reviewing discarded work or finding tickets to revive.",
|
|
25824
26017
|
inputSchema: {
|
|
25825
26018
|
type: "object",
|
|
25826
26019
|
properties: {
|
|
25827
26020
|
projectId: {
|
|
25828
26021
|
type: "string",
|
|
25829
|
-
description: "Project ID"
|
|
26022
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25830
26023
|
},
|
|
25831
26024
|
limit: {
|
|
25832
26025
|
type: "number",
|
|
@@ -25850,13 +26043,13 @@ var getAbandonedTicketsTool = {
|
|
|
25850
26043
|
var getTrashedTicketsTool = {
|
|
25851
26044
|
tool: {
|
|
25852
26045
|
name: "get_trashed_tickets",
|
|
25853
|
-
description: "Get
|
|
26046
|
+
description: "Get trashed (soft-deleted) tickets in a project. Trashed tickets can be restored with restore_ticket.",
|
|
25854
26047
|
inputSchema: {
|
|
25855
26048
|
type: "object",
|
|
25856
26049
|
properties: {
|
|
25857
26050
|
projectId: {
|
|
25858
26051
|
type: "string",
|
|
25859
|
-
description: "Project ID"
|
|
26052
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
25860
26053
|
},
|
|
25861
26054
|
limit: {
|
|
25862
26055
|
type: "number",
|
|
@@ -25880,7 +26073,7 @@ var getTrashedTicketsTool = {
|
|
|
25880
26073
|
var getMyTicketsTool = {
|
|
25881
26074
|
tool: {
|
|
25882
26075
|
name: "get_my_tickets",
|
|
25883
|
-
description:
|
|
26076
|
+
description: 'Get all tickets assigned to the current user. Works across all projects unless filtered. Useful for "what am I working on?" and daily standup prep.',
|
|
25884
26077
|
inputSchema: {
|
|
25885
26078
|
type: "object",
|
|
25886
26079
|
properties: {
|
|
@@ -25927,7 +26120,7 @@ var getMyTicketsTool = {
|
|
|
25927
26120
|
var getOverdueTicketsTool = {
|
|
25928
26121
|
tool: {
|
|
25929
26122
|
name: "get_overdue_tickets",
|
|
25930
|
-
description: "Get
|
|
26123
|
+
description: "Get tickets past their due date. Pair with get_tickets_due_soon for a complete deadline picture. Useful for standup reviews and priority triage.",
|
|
25931
26124
|
inputSchema: {
|
|
25932
26125
|
type: "object",
|
|
25933
26126
|
properties: {
|
|
@@ -25970,7 +26163,7 @@ var getOverdueTicketsTool = {
|
|
|
25970
26163
|
var getTicketsDueSoonTool = {
|
|
25971
26164
|
tool: {
|
|
25972
26165
|
name: "get_tickets_due_soon",
|
|
25973
|
-
description: "Get tickets due within
|
|
26166
|
+
description: "Get tickets due within N days (default: 7). Returns only upcoming deadlines, not overdue. Pair with get_overdue_tickets for complete deadline awareness.",
|
|
25974
26167
|
inputSchema: {
|
|
25975
26168
|
type: "object",
|
|
25976
26169
|
properties: {
|
|
@@ -26022,13 +26215,13 @@ var getTicketsDueSoonTool = {
|
|
|
26022
26215
|
var getTicketCountsTool = {
|
|
26023
26216
|
tool: {
|
|
26024
26217
|
name: "get_ticket_counts",
|
|
26025
|
-
description: "Get ticket counts by location (board, backlog, completed, abandoned, trash).
|
|
26218
|
+
description: "Get ticket counts by location (board, backlog, completed, abandoned, trash). Lightweight overview without fetching ticket data. Use for dashboards and project health checks.",
|
|
26026
26219
|
inputSchema: {
|
|
26027
26220
|
type: "object",
|
|
26028
26221
|
properties: {
|
|
26029
26222
|
projectId: {
|
|
26030
26223
|
type: "string",
|
|
26031
|
-
description: "Project ID"
|
|
26224
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26032
26225
|
}
|
|
26033
26226
|
},
|
|
26034
26227
|
required: ["projectId"]
|
|
@@ -26047,13 +26240,13 @@ var getTicketCountsTool = {
|
|
|
26047
26240
|
var quickSearchTicketsTool = {
|
|
26048
26241
|
tool: {
|
|
26049
26242
|
name: "quick_search_tickets",
|
|
26050
|
-
description: "
|
|
26243
|
+
description: "Fast ticket search returning minimal data (id, number, title, status only). Use to find a ticket by name before calling get_ticket for full details. Lighter and faster than list_tickets.",
|
|
26051
26244
|
inputSchema: {
|
|
26052
26245
|
type: "object",
|
|
26053
26246
|
properties: {
|
|
26054
26247
|
projectId: {
|
|
26055
26248
|
type: "string",
|
|
26056
|
-
description: "Project ID"
|
|
26249
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26057
26250
|
},
|
|
26058
26251
|
search: {
|
|
26059
26252
|
type: "string",
|
|
@@ -26081,13 +26274,13 @@ var quickSearchTicketsTool = {
|
|
|
26081
26274
|
var getTicketChildrenTool = {
|
|
26082
26275
|
tool: {
|
|
26083
26276
|
name: "get_ticket_children",
|
|
26084
|
-
description: "Get subtasks
|
|
26277
|
+
description: "Get all subtasks of a parent ticket. Create subtasks using create_ticket with the parentId parameter.",
|
|
26085
26278
|
inputSchema: {
|
|
26086
26279
|
type: "object",
|
|
26087
26280
|
properties: {
|
|
26088
26281
|
projectId: {
|
|
26089
26282
|
type: "string",
|
|
26090
|
-
description: "Project ID"
|
|
26283
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26091
26284
|
},
|
|
26092
26285
|
ticketId: {
|
|
26093
26286
|
type: "string",
|
|
@@ -26110,13 +26303,13 @@ var getTicketChildrenTool = {
|
|
|
26110
26303
|
var listBacklogTicketsTool = {
|
|
26111
26304
|
tool: {
|
|
26112
26305
|
name: "list_backlog_tickets",
|
|
26113
|
-
description: "
|
|
26306
|
+
description: "Browse backlog tickets with cursor-based pagination. Use for sprint planning — review backlog items before assigning to a release with assign_tickets_to_release.",
|
|
26114
26307
|
inputSchema: {
|
|
26115
26308
|
type: "object",
|
|
26116
26309
|
properties: {
|
|
26117
26310
|
projectId: {
|
|
26118
26311
|
type: "string",
|
|
26119
|
-
description: "Project ID"
|
|
26312
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26120
26313
|
},
|
|
26121
26314
|
cursor: {
|
|
26122
26315
|
type: "string",
|
|
@@ -26179,13 +26372,13 @@ var ticketTools = [
|
|
|
26179
26372
|
var listStatusesTool = {
|
|
26180
26373
|
tool: {
|
|
26181
26374
|
name: "list_statuses",
|
|
26182
|
-
description: "List all workflow statuses (columns) for a project.
|
|
26375
|
+
description: "List all workflow statuses (board columns) for a project. Returns status IDs needed for create_ticket, move_ticket, and move_to_board. Call once per session and cache the IDs.",
|
|
26183
26376
|
inputSchema: {
|
|
26184
26377
|
type: "object",
|
|
26185
26378
|
properties: {
|
|
26186
26379
|
projectId: {
|
|
26187
26380
|
type: "string",
|
|
26188
|
-
description: "Project ID"
|
|
26381
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26189
26382
|
}
|
|
26190
26383
|
},
|
|
26191
26384
|
required: ["projectId"]
|
|
@@ -26204,13 +26397,13 @@ var listStatusesTool = {
|
|
|
26204
26397
|
var createStatusTool = {
|
|
26205
26398
|
tool: {
|
|
26206
26399
|
name: "create_status",
|
|
26207
|
-
description: "Create a new workflow status (board column). Requires
|
|
26400
|
+
description: "Create a new workflow status (board column). New status appears as the rightmost column. Requires project manager or admin role.",
|
|
26208
26401
|
inputSchema: {
|
|
26209
26402
|
type: "object",
|
|
26210
26403
|
properties: {
|
|
26211
26404
|
projectId: {
|
|
26212
26405
|
type: "string",
|
|
26213
|
-
description: "Project ID"
|
|
26406
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26214
26407
|
},
|
|
26215
26408
|
name: {
|
|
26216
26409
|
type: "string",
|
|
@@ -26237,17 +26430,17 @@ var createStatusTool = {
|
|
|
26237
26430
|
var updateStatusTool = {
|
|
26238
26431
|
tool: {
|
|
26239
26432
|
name: "update_status",
|
|
26240
|
-
description: "Update a workflow status name or color. Requires
|
|
26433
|
+
description: "Update a workflow status name or color. Requires project manager or admin role.",
|
|
26241
26434
|
inputSchema: {
|
|
26242
26435
|
type: "object",
|
|
26243
26436
|
properties: {
|
|
26244
26437
|
projectId: {
|
|
26245
26438
|
type: "string",
|
|
26246
|
-
description: "Project ID"
|
|
26439
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26247
26440
|
},
|
|
26248
26441
|
statusId: {
|
|
26249
26442
|
type: "string",
|
|
26250
|
-
description: "Status ID to update"
|
|
26443
|
+
description: "Status ID to update (format: sts_xxxxx). Use list_statuses to find IDs."
|
|
26251
26444
|
},
|
|
26252
26445
|
name: {
|
|
26253
26446
|
type: "string",
|
|
@@ -26279,17 +26472,17 @@ var updateStatusTool = {
|
|
|
26279
26472
|
var deleteStatusTool = {
|
|
26280
26473
|
tool: {
|
|
26281
26474
|
name: "delete_status",
|
|
26282
|
-
description: "Delete a workflow status. Tickets in this status must be moved first. Requires
|
|
26475
|
+
description: "Delete a workflow status. Tickets in this status must be moved first with batch_move_tickets. Requires project manager or admin role.",
|
|
26283
26476
|
inputSchema: {
|
|
26284
26477
|
type: "object",
|
|
26285
26478
|
properties: {
|
|
26286
26479
|
projectId: {
|
|
26287
26480
|
type: "string",
|
|
26288
|
-
description: "Project ID"
|
|
26481
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26289
26482
|
},
|
|
26290
26483
|
statusId: {
|
|
26291
26484
|
type: "string",
|
|
26292
|
-
description: "Status ID to delete"
|
|
26485
|
+
description: "Status ID to delete (format: sts_xxxxx)"
|
|
26293
26486
|
}
|
|
26294
26487
|
},
|
|
26295
26488
|
required: ["projectId", "statusId"]
|
|
@@ -26308,13 +26501,13 @@ var deleteStatusTool = {
|
|
|
26308
26501
|
var getAvailableTransitionsTool = {
|
|
26309
26502
|
tool: {
|
|
26310
26503
|
name: "get_available_transitions",
|
|
26311
|
-
description: "Get
|
|
26504
|
+
description: "Get valid target statuses for a move from a given status. ALWAYS call this before move_ticket — invalid moves will fail. If no transitions are defined, all moves are allowed.",
|
|
26312
26505
|
inputSchema: {
|
|
26313
26506
|
type: "object",
|
|
26314
26507
|
properties: {
|
|
26315
26508
|
projectId: {
|
|
26316
26509
|
type: "string",
|
|
26317
|
-
description: "Project ID"
|
|
26510
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26318
26511
|
},
|
|
26319
26512
|
statusId: {
|
|
26320
26513
|
type: "string",
|
|
@@ -26337,13 +26530,13 @@ var getAvailableTransitionsTool = {
|
|
|
26337
26530
|
var listTransitionsTool = {
|
|
26338
26531
|
tool: {
|
|
26339
26532
|
name: "list_transitions",
|
|
26340
|
-
description: "List
|
|
26533
|
+
description: "List the full workflow transition graph: which status can move to which. Use for understanding workflow rules. For checking a specific ticket's options, use get_available_transitions instead.",
|
|
26341
26534
|
inputSchema: {
|
|
26342
26535
|
type: "object",
|
|
26343
26536
|
properties: {
|
|
26344
26537
|
projectId: {
|
|
26345
26538
|
type: "string",
|
|
26346
|
-
description: "Project ID"
|
|
26539
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26347
26540
|
}
|
|
26348
26541
|
},
|
|
26349
26542
|
required: ["projectId"]
|
|
@@ -26362,13 +26555,13 @@ var listTransitionsTool = {
|
|
|
26362
26555
|
var createTransitionTool = {
|
|
26363
26556
|
tool: {
|
|
26364
26557
|
name: "create_transition",
|
|
26365
|
-
description: "Create a workflow transition rule allowing tickets to move from one status to another. Requires
|
|
26558
|
+
description: "Create a workflow transition rule allowing tickets to move from one status to another. Use list_statuses to get status IDs. Requires project manager or admin role.",
|
|
26366
26559
|
inputSchema: {
|
|
26367
26560
|
type: "object",
|
|
26368
26561
|
properties: {
|
|
26369
26562
|
projectId: {
|
|
26370
26563
|
type: "string",
|
|
26371
|
-
description: "Project ID"
|
|
26564
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26372
26565
|
},
|
|
26373
26566
|
fromStatusId: {
|
|
26374
26567
|
type: "string",
|
|
@@ -26395,13 +26588,13 @@ var createTransitionTool = {
|
|
|
26395
26588
|
var deleteTransitionTool = {
|
|
26396
26589
|
tool: {
|
|
26397
26590
|
name: "delete_transition",
|
|
26398
|
-
description: "Delete a workflow transition rule. Requires
|
|
26591
|
+
description: "Delete a workflow transition rule, allowing free movement between these statuses. Requires project manager or admin role.",
|
|
26399
26592
|
inputSchema: {
|
|
26400
26593
|
type: "object",
|
|
26401
26594
|
properties: {
|
|
26402
26595
|
projectId: {
|
|
26403
26596
|
type: "string",
|
|
26404
|
-
description: "Project ID"
|
|
26597
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26405
26598
|
},
|
|
26406
26599
|
fromStatusId: {
|
|
26407
26600
|
type: "string",
|
|
@@ -26440,17 +26633,17 @@ var workflowTools = [
|
|
|
26440
26633
|
var listCommentsTool = {
|
|
26441
26634
|
tool: {
|
|
26442
26635
|
name: "list_comments",
|
|
26443
|
-
description: "List all comments on a ticket",
|
|
26636
|
+
description: "List all comments on a ticket, ordered chronologically. Use to review discussion history before adding a new comment.",
|
|
26444
26637
|
inputSchema: {
|
|
26445
26638
|
type: "object",
|
|
26446
26639
|
properties: {
|
|
26447
26640
|
projectId: {
|
|
26448
26641
|
type: "string",
|
|
26449
|
-
description: "Project ID"
|
|
26642
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26450
26643
|
},
|
|
26451
26644
|
ticketId: {
|
|
26452
26645
|
type: "string",
|
|
26453
|
-
description: "Ticket ID"
|
|
26646
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26454
26647
|
},
|
|
26455
26648
|
limit: {
|
|
26456
26649
|
type: "number",
|
|
@@ -26474,21 +26667,21 @@ var listCommentsTool = {
|
|
|
26474
26667
|
var addCommentTool = {
|
|
26475
26668
|
tool: {
|
|
26476
26669
|
name: "add_comment",
|
|
26477
|
-
description: "Add a comment to a ticket",
|
|
26670
|
+
description: "Add a comment to a ticket. Supports markdown formatting. Use for status updates, questions, or discussion.",
|
|
26478
26671
|
inputSchema: {
|
|
26479
26672
|
type: "object",
|
|
26480
26673
|
properties: {
|
|
26481
26674
|
projectId: {
|
|
26482
26675
|
type: "string",
|
|
26483
|
-
description: "Project ID"
|
|
26676
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26484
26677
|
},
|
|
26485
26678
|
ticketId: {
|
|
26486
26679
|
type: "string",
|
|
26487
|
-
description: "Ticket ID"
|
|
26680
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26488
26681
|
},
|
|
26489
26682
|
content: {
|
|
26490
26683
|
type: "string",
|
|
26491
|
-
description: `Comment text
|
|
26684
|
+
description: `Comment text in markdown (max ${LIMITS.COMMENT_MAX} chars). Supports **bold**, *italic*, \`code\`, code blocks, [links](url), and bullet lists.`
|
|
26492
26685
|
}
|
|
26493
26686
|
},
|
|
26494
26687
|
required: ["projectId", "ticketId", "content"]
|
|
@@ -26507,21 +26700,21 @@ var addCommentTool = {
|
|
|
26507
26700
|
var updateCommentTool = {
|
|
26508
26701
|
tool: {
|
|
26509
26702
|
name: "update_comment",
|
|
26510
|
-
description: "Edit an existing comment
|
|
26703
|
+
description: "Edit an existing comment. Only the original author can edit. Previous versions are preserved in comment history (see get_comment_history).",
|
|
26511
26704
|
inputSchema: {
|
|
26512
26705
|
type: "object",
|
|
26513
26706
|
properties: {
|
|
26514
26707
|
projectId: {
|
|
26515
26708
|
type: "string",
|
|
26516
|
-
description: "Project ID"
|
|
26709
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26517
26710
|
},
|
|
26518
26711
|
ticketId: {
|
|
26519
26712
|
type: "string",
|
|
26520
|
-
description: "Ticket ID"
|
|
26713
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26521
26714
|
},
|
|
26522
26715
|
commentId: {
|
|
26523
26716
|
type: "string",
|
|
26524
|
-
description: "Comment ID to edit"
|
|
26717
|
+
description: "Comment ID to edit (from list_comments response)"
|
|
26525
26718
|
},
|
|
26526
26719
|
content: {
|
|
26527
26720
|
type: "string",
|
|
@@ -26544,21 +26737,21 @@ var updateCommentTool = {
|
|
|
26544
26737
|
var deleteCommentTool = {
|
|
26545
26738
|
tool: {
|
|
26546
26739
|
name: "delete_comment",
|
|
26547
|
-
description: "Delete a comment
|
|
26740
|
+
description: "Delete a comment permanently. Only the original author can delete. This cannot be undone.",
|
|
26548
26741
|
inputSchema: {
|
|
26549
26742
|
type: "object",
|
|
26550
26743
|
properties: {
|
|
26551
26744
|
projectId: {
|
|
26552
26745
|
type: "string",
|
|
26553
|
-
description: "Project ID"
|
|
26746
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26554
26747
|
},
|
|
26555
26748
|
ticketId: {
|
|
26556
26749
|
type: "string",
|
|
26557
|
-
description: "Ticket ID"
|
|
26750
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26558
26751
|
},
|
|
26559
26752
|
commentId: {
|
|
26560
26753
|
type: "string",
|
|
26561
|
-
description: "Comment ID to delete"
|
|
26754
|
+
description: "Comment ID to delete (from list_comments response)"
|
|
26562
26755
|
}
|
|
26563
26756
|
},
|
|
26564
26757
|
required: ["projectId", "ticketId", "commentId"]
|
|
@@ -26577,21 +26770,21 @@ var deleteCommentTool = {
|
|
|
26577
26770
|
var getCommentHistoryTool = {
|
|
26578
26771
|
tool: {
|
|
26579
26772
|
name: "get_comment_history",
|
|
26580
|
-
description: "Get the edit history of a comment
|
|
26773
|
+
description: "Get the edit history of a comment showing all previous versions. Use to see what was changed and when.",
|
|
26581
26774
|
inputSchema: {
|
|
26582
26775
|
type: "object",
|
|
26583
26776
|
properties: {
|
|
26584
26777
|
projectId: {
|
|
26585
26778
|
type: "string",
|
|
26586
|
-
description: "Project ID"
|
|
26779
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26587
26780
|
},
|
|
26588
26781
|
ticketId: {
|
|
26589
26782
|
type: "string",
|
|
26590
|
-
description: "Ticket ID"
|
|
26783
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26591
26784
|
},
|
|
26592
26785
|
commentId: {
|
|
26593
26786
|
type: "string",
|
|
26594
|
-
description: "Comment ID"
|
|
26787
|
+
description: "Comment ID (from list_comments response)"
|
|
26595
26788
|
}
|
|
26596
26789
|
},
|
|
26597
26790
|
required: ["projectId", "ticketId", "commentId"]
|
|
@@ -26619,13 +26812,13 @@ var commentTools = [
|
|
|
26619
26812
|
var listTagsTool = {
|
|
26620
26813
|
tool: {
|
|
26621
26814
|
name: "list_tags",
|
|
26622
|
-
description: "List all tags
|
|
26815
|
+
description: "List all tags in a project. Call this before create_ticket to find existing tag IDs for set_ticket_tags. If a needed tag does not exist, create it with create_tag first.",
|
|
26623
26816
|
inputSchema: {
|
|
26624
26817
|
type: "object",
|
|
26625
26818
|
properties: {
|
|
26626
26819
|
projectId: {
|
|
26627
26820
|
type: "string",
|
|
26628
|
-
description: "Project ID"
|
|
26821
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26629
26822
|
}
|
|
26630
26823
|
},
|
|
26631
26824
|
required: ["projectId"]
|
|
@@ -26644,17 +26837,17 @@ var listTagsTool = {
|
|
|
26644
26837
|
var createTagTool = {
|
|
26645
26838
|
tool: {
|
|
26646
26839
|
name: "create_tag",
|
|
26647
|
-
description:
|
|
26840
|
+
description: 'Create a new tag in a project. Use lowercase-kebab-case names (e.g., "google-oauth", "api", "frontend"). Check list_tags first to avoid duplicates. After creating, use set_ticket_tags or add_tag_to_ticket to apply it.',
|
|
26648
26841
|
inputSchema: {
|
|
26649
26842
|
type: "object",
|
|
26650
26843
|
properties: {
|
|
26651
26844
|
projectId: {
|
|
26652
26845
|
type: "string",
|
|
26653
|
-
description: "Project ID"
|
|
26846
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26654
26847
|
},
|
|
26655
26848
|
name: {
|
|
26656
26849
|
type: "string",
|
|
26657
|
-
description:
|
|
26850
|
+
description: `Tag name (max ${LIMITS.TAG_NAME_MAX} chars). Use lowercase-kebab-case (e.g., "google-oauth", "user-login").`
|
|
26658
26851
|
},
|
|
26659
26852
|
color: {
|
|
26660
26853
|
type: "string",
|
|
@@ -26679,17 +26872,17 @@ var createTagTool = {
|
|
|
26679
26872
|
var updateTagTool = {
|
|
26680
26873
|
tool: {
|
|
26681
26874
|
name: "update_tag",
|
|
26682
|
-
description: "Update a tag name or color",
|
|
26875
|
+
description: "Update a tag name or color. Changes apply to all tickets using this tag.",
|
|
26683
26876
|
inputSchema: {
|
|
26684
26877
|
type: "object",
|
|
26685
26878
|
properties: {
|
|
26686
26879
|
projectId: {
|
|
26687
26880
|
type: "string",
|
|
26688
|
-
description: "Project ID"
|
|
26881
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26689
26882
|
},
|
|
26690
26883
|
tagId: {
|
|
26691
26884
|
type: "string",
|
|
26692
|
-
description: "Tag ID to update"
|
|
26885
|
+
description: "Tag ID to update (format: tag_xxxxx). Use list_tags to find IDs."
|
|
26693
26886
|
},
|
|
26694
26887
|
name: {
|
|
26695
26888
|
type: "string",
|
|
@@ -26722,17 +26915,17 @@ var updateTagTool = {
|
|
|
26722
26915
|
var deleteTagTool = {
|
|
26723
26916
|
tool: {
|
|
26724
26917
|
name: "delete_tag",
|
|
26725
|
-
description: "
|
|
26918
|
+
description: "Permanently delete a tag from the project. Removes it from ALL tickets. There is no undo — use with caution.",
|
|
26726
26919
|
inputSchema: {
|
|
26727
26920
|
type: "object",
|
|
26728
26921
|
properties: {
|
|
26729
26922
|
projectId: {
|
|
26730
26923
|
type: "string",
|
|
26731
|
-
description: "Project ID"
|
|
26924
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26732
26925
|
},
|
|
26733
26926
|
tagId: {
|
|
26734
26927
|
type: "string",
|
|
26735
|
-
description: "Tag ID to delete"
|
|
26928
|
+
description: "Tag ID to delete (format: tag_xxxxx)"
|
|
26736
26929
|
}
|
|
26737
26930
|
},
|
|
26738
26931
|
required: ["projectId", "tagId"]
|
|
@@ -26751,17 +26944,17 @@ var deleteTagTool = {
|
|
|
26751
26944
|
var getTicketTagsTool = {
|
|
26752
26945
|
tool: {
|
|
26753
26946
|
name: "get_ticket_tags",
|
|
26754
|
-
description: "Get all tags on a
|
|
26947
|
+
description: "Get all tags currently on a ticket. Use before set_ticket_tags if you need to preserve existing tags while adding new ones.",
|
|
26755
26948
|
inputSchema: {
|
|
26756
26949
|
type: "object",
|
|
26757
26950
|
properties: {
|
|
26758
26951
|
projectId: {
|
|
26759
26952
|
type: "string",
|
|
26760
|
-
description: "Project ID"
|
|
26953
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26761
26954
|
},
|
|
26762
26955
|
ticketId: {
|
|
26763
26956
|
type: "string",
|
|
26764
|
-
description: "Ticket ID"
|
|
26957
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26765
26958
|
}
|
|
26766
26959
|
},
|
|
26767
26960
|
required: ["projectId", "ticketId"]
|
|
@@ -26780,17 +26973,17 @@ var getTicketTagsTool = {
|
|
|
26780
26973
|
var setTicketTagsTool = {
|
|
26781
26974
|
tool: {
|
|
26782
26975
|
name: "set_ticket_tags",
|
|
26783
|
-
description: "Replace
|
|
26976
|
+
description: "Replace ALL tags on a ticket with a new set. This overwrites existing tags — pass the complete list of desired tag IDs. Pass empty array to remove all tags. Prefer this over multiple add_tag_to_ticket calls when setting multiple tags at once.",
|
|
26784
26977
|
inputSchema: {
|
|
26785
26978
|
type: "object",
|
|
26786
26979
|
properties: {
|
|
26787
26980
|
projectId: {
|
|
26788
26981
|
type: "string",
|
|
26789
|
-
description: "Project ID"
|
|
26982
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26790
26983
|
},
|
|
26791
26984
|
ticketId: {
|
|
26792
26985
|
type: "string",
|
|
26793
|
-
description: "Ticket ID"
|
|
26986
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26794
26987
|
},
|
|
26795
26988
|
tagIds: {
|
|
26796
26989
|
type: "array",
|
|
@@ -26814,17 +27007,17 @@ var setTicketTagsTool = {
|
|
|
26814
27007
|
var addTagToTicketTool = {
|
|
26815
27008
|
tool: {
|
|
26816
27009
|
name: "add_tag_to_ticket",
|
|
26817
|
-
description: "Add a tag to a ticket",
|
|
27010
|
+
description: "Add a single tag to a ticket without affecting existing tags. Use set_ticket_tags instead when applying multiple tags at once (fewer API calls).",
|
|
26818
27011
|
inputSchema: {
|
|
26819
27012
|
type: "object",
|
|
26820
27013
|
properties: {
|
|
26821
27014
|
projectId: {
|
|
26822
27015
|
type: "string",
|
|
26823
|
-
description: "Project ID"
|
|
27016
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26824
27017
|
},
|
|
26825
27018
|
ticketId: {
|
|
26826
27019
|
type: "string",
|
|
26827
|
-
description: "Ticket ID"
|
|
27020
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26828
27021
|
},
|
|
26829
27022
|
tagId: {
|
|
26830
27023
|
type: "string",
|
|
@@ -26847,21 +27040,21 @@ var addTagToTicketTool = {
|
|
|
26847
27040
|
var removeTagFromTicketTool = {
|
|
26848
27041
|
tool: {
|
|
26849
27042
|
name: "remove_tag_from_ticket",
|
|
26850
|
-
description: "Remove a tag from a ticket",
|
|
27043
|
+
description: "Remove a single tag from a ticket. Other tags remain unchanged.",
|
|
26851
27044
|
inputSchema: {
|
|
26852
27045
|
type: "object",
|
|
26853
27046
|
properties: {
|
|
26854
27047
|
projectId: {
|
|
26855
27048
|
type: "string",
|
|
26856
|
-
description: "Project ID"
|
|
27049
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26857
27050
|
},
|
|
26858
27051
|
ticketId: {
|
|
26859
27052
|
type: "string",
|
|
26860
|
-
description: "Ticket ID"
|
|
27053
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
26861
27054
|
},
|
|
26862
27055
|
tagId: {
|
|
26863
27056
|
type: "string",
|
|
26864
|
-
description: "Tag ID to remove"
|
|
27057
|
+
description: "Tag ID to remove (format: tag_xxxxx). Use get_ticket_tags to see current tags."
|
|
26865
27058
|
}
|
|
26866
27059
|
},
|
|
26867
27060
|
required: ["projectId", "ticketId", "tagId"]
|
|
@@ -26892,13 +27085,13 @@ var tagTools = [
|
|
|
26892
27085
|
var listTicketTypesTool = {
|
|
26893
27086
|
tool: {
|
|
26894
27087
|
name: "list_ticket_types",
|
|
26895
|
-
description: "List
|
|
27088
|
+
description: "List ticket types for a project (e.g., Bug, Feature, Task). Returns slug values needed for the typeSlug parameter in create_ticket. Call once per session and cache.",
|
|
26896
27089
|
inputSchema: {
|
|
26897
27090
|
type: "object",
|
|
26898
27091
|
properties: {
|
|
26899
27092
|
projectId: {
|
|
26900
27093
|
type: "string",
|
|
26901
|
-
description: "Project ID"
|
|
27094
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26902
27095
|
}
|
|
26903
27096
|
},
|
|
26904
27097
|
required: ["projectId"]
|
|
@@ -26917,13 +27110,13 @@ var listTicketTypesTool = {
|
|
|
26917
27110
|
var getTicketTypeTool = {
|
|
26918
27111
|
tool: {
|
|
26919
27112
|
name: "get_ticket_type",
|
|
26920
|
-
description:
|
|
27113
|
+
description: 'Get details of a specific ticket type by its slug (e.g., "bug", "feature").',
|
|
26921
27114
|
inputSchema: {
|
|
26922
27115
|
type: "object",
|
|
26923
27116
|
properties: {
|
|
26924
27117
|
projectId: {
|
|
26925
27118
|
type: "string",
|
|
26926
|
-
description: "Project ID"
|
|
27119
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26927
27120
|
},
|
|
26928
27121
|
slug: {
|
|
26929
27122
|
type: "string",
|
|
@@ -26952,7 +27145,7 @@ var createTicketTypeTool = {
|
|
|
26952
27145
|
properties: {
|
|
26953
27146
|
projectId: {
|
|
26954
27147
|
type: "string",
|
|
26955
|
-
description: "Project ID"
|
|
27148
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26956
27149
|
},
|
|
26957
27150
|
name: {
|
|
26958
27151
|
type: "string",
|
|
@@ -26993,7 +27186,7 @@ var updateTicketTypeTool = {
|
|
|
26993
27186
|
properties: {
|
|
26994
27187
|
projectId: {
|
|
26995
27188
|
type: "string",
|
|
26996
|
-
description: "Project ID"
|
|
27189
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
26997
27190
|
},
|
|
26998
27191
|
slug: {
|
|
26999
27192
|
type: "string",
|
|
@@ -27035,7 +27228,7 @@ var deleteTicketTypeTool = {
|
|
|
27035
27228
|
properties: {
|
|
27036
27229
|
projectId: {
|
|
27037
27230
|
type: "string",
|
|
27038
|
-
description: "Project ID"
|
|
27231
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27039
27232
|
},
|
|
27040
27233
|
slug: {
|
|
27041
27234
|
type: "string",
|
|
@@ -27071,13 +27264,13 @@ var ticketTypeTools = [
|
|
|
27071
27264
|
var listPrioritiesTool = {
|
|
27072
27265
|
tool: {
|
|
27073
27266
|
name: "list_priorities",
|
|
27074
|
-
description: "List
|
|
27267
|
+
description: "List priority levels for a project. Returns IDs needed for the priorityId parameter in create_ticket and update_ticket. Call once per session and cache.",
|
|
27075
27268
|
inputSchema: {
|
|
27076
27269
|
type: "object",
|
|
27077
27270
|
properties: {
|
|
27078
27271
|
projectId: {
|
|
27079
27272
|
type: "string",
|
|
27080
|
-
description: "Project ID"
|
|
27273
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27081
27274
|
}
|
|
27082
27275
|
},
|
|
27083
27276
|
required: ["projectId"]
|
|
@@ -27096,17 +27289,17 @@ var listPrioritiesTool = {
|
|
|
27096
27289
|
var getPriorityTool = {
|
|
27097
27290
|
tool: {
|
|
27098
27291
|
name: "get_priority",
|
|
27099
|
-
description: "Get details of a specific priority by ID",
|
|
27292
|
+
description: "Get details of a specific priority level by ID (format: pri_xxxxx).",
|
|
27100
27293
|
inputSchema: {
|
|
27101
27294
|
type: "object",
|
|
27102
27295
|
properties: {
|
|
27103
27296
|
projectId: {
|
|
27104
27297
|
type: "string",
|
|
27105
|
-
description: "Project ID"
|
|
27298
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27106
27299
|
},
|
|
27107
27300
|
priorityId: {
|
|
27108
27301
|
type: "string",
|
|
27109
|
-
description: "Priority ID"
|
|
27302
|
+
description: "Priority ID (format: pri_xxxxx)"
|
|
27110
27303
|
}
|
|
27111
27304
|
},
|
|
27112
27305
|
required: ["projectId", "priorityId"]
|
|
@@ -27131,7 +27324,7 @@ var createPriorityTool = {
|
|
|
27131
27324
|
properties: {
|
|
27132
27325
|
projectId: {
|
|
27133
27326
|
type: "string",
|
|
27134
|
-
description: "Project ID"
|
|
27327
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27135
27328
|
},
|
|
27136
27329
|
name: {
|
|
27137
27330
|
type: "string",
|
|
@@ -27172,11 +27365,11 @@ var updatePriorityTool = {
|
|
|
27172
27365
|
properties: {
|
|
27173
27366
|
projectId: {
|
|
27174
27367
|
type: "string",
|
|
27175
|
-
description: "Project ID"
|
|
27368
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27176
27369
|
},
|
|
27177
27370
|
priorityId: {
|
|
27178
27371
|
type: "string",
|
|
27179
|
-
description: "Priority ID to update"
|
|
27372
|
+
description: "Priority ID to update (format: pri_xxxxx)"
|
|
27180
27373
|
},
|
|
27181
27374
|
name: {
|
|
27182
27375
|
type: "string",
|
|
@@ -27220,11 +27413,11 @@ var deletePriorityTool = {
|
|
|
27220
27413
|
properties: {
|
|
27221
27414
|
projectId: {
|
|
27222
27415
|
type: "string",
|
|
27223
|
-
description: "Project ID"
|
|
27416
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27224
27417
|
},
|
|
27225
27418
|
priorityId: {
|
|
27226
27419
|
type: "string",
|
|
27227
|
-
description: "Priority ID to delete"
|
|
27420
|
+
description: "Priority ID to delete (format: pri_xxxxx)"
|
|
27228
27421
|
},
|
|
27229
27422
|
replaceWithId: {
|
|
27230
27423
|
type: "string",
|
|
@@ -27256,13 +27449,13 @@ var priorityTools = [
|
|
|
27256
27449
|
var listSizesTool = {
|
|
27257
27450
|
tool: {
|
|
27258
27451
|
name: "list_sizes",
|
|
27259
|
-
description: "List
|
|
27452
|
+
description: "List size/effort levels for a project. Returns IDs needed for the sizeId parameter in create_ticket and update_ticket. Call once per session and cache.",
|
|
27260
27453
|
inputSchema: {
|
|
27261
27454
|
type: "object",
|
|
27262
27455
|
properties: {
|
|
27263
27456
|
projectId: {
|
|
27264
27457
|
type: "string",
|
|
27265
|
-
description: "Project ID"
|
|
27458
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27266
27459
|
}
|
|
27267
27460
|
},
|
|
27268
27461
|
required: ["projectId"]
|
|
@@ -27281,17 +27474,17 @@ var listSizesTool = {
|
|
|
27281
27474
|
var getSizeTool = {
|
|
27282
27475
|
tool: {
|
|
27283
27476
|
name: "get_size",
|
|
27284
|
-
description: "Get details of a specific size by ID",
|
|
27477
|
+
description: "Get details of a specific size level by ID (format: siz_xxxxx).",
|
|
27285
27478
|
inputSchema: {
|
|
27286
27479
|
type: "object",
|
|
27287
27480
|
properties: {
|
|
27288
27481
|
projectId: {
|
|
27289
27482
|
type: "string",
|
|
27290
|
-
description: "Project ID"
|
|
27483
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27291
27484
|
},
|
|
27292
27485
|
sizeId: {
|
|
27293
27486
|
type: "string",
|
|
27294
|
-
description: "Size ID"
|
|
27487
|
+
description: "Size ID (format: siz_xxxxx)"
|
|
27295
27488
|
}
|
|
27296
27489
|
},
|
|
27297
27490
|
required: ["projectId", "sizeId"]
|
|
@@ -27316,7 +27509,7 @@ var createSizeTool = {
|
|
|
27316
27509
|
properties: {
|
|
27317
27510
|
projectId: {
|
|
27318
27511
|
type: "string",
|
|
27319
|
-
description: "Project ID"
|
|
27512
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27320
27513
|
},
|
|
27321
27514
|
name: {
|
|
27322
27515
|
type: "string",
|
|
@@ -27357,11 +27550,11 @@ var updateSizeTool = {
|
|
|
27357
27550
|
properties: {
|
|
27358
27551
|
projectId: {
|
|
27359
27552
|
type: "string",
|
|
27360
|
-
description: "Project ID"
|
|
27553
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27361
27554
|
},
|
|
27362
27555
|
sizeId: {
|
|
27363
27556
|
type: "string",
|
|
27364
|
-
description: "Size ID to update"
|
|
27557
|
+
description: "Size ID to update (format: siz_xxxxx)"
|
|
27365
27558
|
},
|
|
27366
27559
|
name: {
|
|
27367
27560
|
type: "string",
|
|
@@ -27405,11 +27598,11 @@ var deleteSizeTool = {
|
|
|
27405
27598
|
properties: {
|
|
27406
27599
|
projectId: {
|
|
27407
27600
|
type: "string",
|
|
27408
|
-
description: "Project ID"
|
|
27601
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27409
27602
|
},
|
|
27410
27603
|
sizeId: {
|
|
27411
27604
|
type: "string",
|
|
27412
|
-
description: "Size ID to delete"
|
|
27605
|
+
description: "Size ID to delete (format: siz_xxxxx)"
|
|
27413
27606
|
},
|
|
27414
27607
|
replaceWithId: {
|
|
27415
27608
|
type: "string",
|
|
@@ -27441,13 +27634,13 @@ var sizeTools = [
|
|
|
27441
27634
|
var listReleasesTool = {
|
|
27442
27635
|
tool: {
|
|
27443
27636
|
name: "list_releases",
|
|
27444
|
-
description: "List releases in a project",
|
|
27637
|
+
description: "List releases (sprints/milestones) in a project. Filter by status: open, released, or all.",
|
|
27445
27638
|
inputSchema: {
|
|
27446
27639
|
type: "object",
|
|
27447
27640
|
properties: {
|
|
27448
27641
|
projectId: {
|
|
27449
27642
|
type: "string",
|
|
27450
|
-
description: "Project ID"
|
|
27643
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27451
27644
|
},
|
|
27452
27645
|
status: {
|
|
27453
27646
|
type: "string",
|
|
@@ -27472,17 +27665,17 @@ var listReleasesTool = {
|
|
|
27472
27665
|
var getReleaseTool = {
|
|
27473
27666
|
tool: {
|
|
27474
27667
|
name: "get_release",
|
|
27475
|
-
description: "Get
|
|
27668
|
+
description: "Get full release details including ticket counts, progress, and target date. Use before update_release to get the version for optimistic locking.",
|
|
27476
27669
|
inputSchema: {
|
|
27477
27670
|
type: "object",
|
|
27478
27671
|
properties: {
|
|
27479
27672
|
projectId: {
|
|
27480
27673
|
type: "string",
|
|
27481
|
-
description: "Project ID"
|
|
27674
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27482
27675
|
},
|
|
27483
27676
|
releaseId: {
|
|
27484
27677
|
type: "string",
|
|
27485
|
-
description: "Release ID"
|
|
27678
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27486
27679
|
}
|
|
27487
27680
|
},
|
|
27488
27681
|
required: ["projectId", "releaseId"]
|
|
@@ -27501,13 +27694,13 @@ var getReleaseTool = {
|
|
|
27501
27694
|
var createReleaseTool = {
|
|
27502
27695
|
tool: {
|
|
27503
27696
|
name: "create_release",
|
|
27504
|
-
description: "Create a new release for grouping tickets",
|
|
27697
|
+
description: "Create a new release (sprint/milestone) for grouping tickets. After creating, use assign_tickets_to_release to add tickets. Track progress with get_release_burndown.",
|
|
27505
27698
|
inputSchema: {
|
|
27506
27699
|
type: "object",
|
|
27507
27700
|
properties: {
|
|
27508
27701
|
projectId: {
|
|
27509
27702
|
type: "string",
|
|
27510
|
-
description: "Project ID"
|
|
27703
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27511
27704
|
},
|
|
27512
27705
|
name: {
|
|
27513
27706
|
type: "string",
|
|
@@ -27542,21 +27735,21 @@ var createReleaseTool = {
|
|
|
27542
27735
|
var assignTicketToReleaseTool = {
|
|
27543
27736
|
tool: {
|
|
27544
27737
|
name: "assign_ticket_to_release",
|
|
27545
|
-
description: "Assign a ticket to a release, or remove from release by passing null",
|
|
27738
|
+
description: "Assign a single ticket to a release, or remove from release by passing null. Use assign_tickets_to_release for bulk assignment.",
|
|
27546
27739
|
inputSchema: {
|
|
27547
27740
|
type: "object",
|
|
27548
27741
|
properties: {
|
|
27549
27742
|
projectId: {
|
|
27550
27743
|
type: "string",
|
|
27551
|
-
description: "Project ID"
|
|
27744
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27552
27745
|
},
|
|
27553
27746
|
ticketId: {
|
|
27554
27747
|
type: "string",
|
|
27555
|
-
description: "Ticket ID"
|
|
27748
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
27556
27749
|
},
|
|
27557
27750
|
releaseId: {
|
|
27558
27751
|
type: ["string", "null"],
|
|
27559
|
-
description: "Release ID, or null to remove from release"
|
|
27752
|
+
description: "Release ID (format: rel_xxxxx), or null to remove from release. Use list_releases to find IDs."
|
|
27560
27753
|
}
|
|
27561
27754
|
},
|
|
27562
27755
|
required: ["projectId", "ticketId", "releaseId"]
|
|
@@ -27575,17 +27768,17 @@ var assignTicketToReleaseTool = {
|
|
|
27575
27768
|
var markReleaseShippedTool = {
|
|
27576
27769
|
tool: {
|
|
27577
27770
|
name: "mark_release_shipped",
|
|
27578
|
-
description: "Mark a release as shipped
|
|
27771
|
+
description: "Mark a release as shipped. Verify all tickets are complete first with get_release_tickets. To undo, use reopen_release.",
|
|
27579
27772
|
inputSchema: {
|
|
27580
27773
|
type: "object",
|
|
27581
27774
|
properties: {
|
|
27582
27775
|
projectId: {
|
|
27583
27776
|
type: "string",
|
|
27584
|
-
description: "Project ID"
|
|
27777
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27585
27778
|
},
|
|
27586
27779
|
releaseId: {
|
|
27587
27780
|
type: "string",
|
|
27588
|
-
description: "Release ID"
|
|
27781
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27589
27782
|
}
|
|
27590
27783
|
},
|
|
27591
27784
|
required: ["projectId", "releaseId"]
|
|
@@ -27604,17 +27797,17 @@ var markReleaseShippedTool = {
|
|
|
27604
27797
|
var getReleaseTicketsTool = {
|
|
27605
27798
|
tool: {
|
|
27606
27799
|
name: "get_release_tickets",
|
|
27607
|
-
description: "Get all tickets assigned to a release",
|
|
27800
|
+
description: "Get all tickets assigned to a release with their status. Use before mark_release_shipped to verify all tickets are complete.",
|
|
27608
27801
|
inputSchema: {
|
|
27609
27802
|
type: "object",
|
|
27610
27803
|
properties: {
|
|
27611
27804
|
projectId: {
|
|
27612
27805
|
type: "string",
|
|
27613
|
-
description: "Project ID"
|
|
27806
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27614
27807
|
},
|
|
27615
27808
|
releaseId: {
|
|
27616
27809
|
type: "string",
|
|
27617
|
-
description: "Release ID"
|
|
27810
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27618
27811
|
}
|
|
27619
27812
|
},
|
|
27620
27813
|
required: ["projectId", "releaseId"]
|
|
@@ -27633,17 +27826,17 @@ var getReleaseTicketsTool = {
|
|
|
27633
27826
|
var updateReleaseTool = {
|
|
27634
27827
|
tool: {
|
|
27635
27828
|
name: "update_release",
|
|
27636
|
-
description: "Update release
|
|
27829
|
+
description: "Update release name, description, or target date. Requires the current version for optimistic locking (get from get_release).",
|
|
27637
27830
|
inputSchema: {
|
|
27638
27831
|
type: "object",
|
|
27639
27832
|
properties: {
|
|
27640
27833
|
projectId: {
|
|
27641
27834
|
type: "string",
|
|
27642
|
-
description: "Project ID"
|
|
27835
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27643
27836
|
},
|
|
27644
27837
|
releaseId: {
|
|
27645
27838
|
type: "string",
|
|
27646
|
-
description: "Release ID"
|
|
27839
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27647
27840
|
},
|
|
27648
27841
|
name: {
|
|
27649
27842
|
type: "string",
|
|
@@ -27687,17 +27880,17 @@ var updateReleaseTool = {
|
|
|
27687
27880
|
var deleteReleaseTool = {
|
|
27688
27881
|
tool: {
|
|
27689
27882
|
name: "delete_release",
|
|
27690
|
-
description: "
|
|
27883
|
+
description: "Soft-delete a release. Tickets remain but lose their release assignment. Can be restored with restore_release.",
|
|
27691
27884
|
inputSchema: {
|
|
27692
27885
|
type: "object",
|
|
27693
27886
|
properties: {
|
|
27694
27887
|
projectId: {
|
|
27695
27888
|
type: "string",
|
|
27696
|
-
description: "Project ID"
|
|
27889
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27697
27890
|
},
|
|
27698
27891
|
releaseId: {
|
|
27699
27892
|
type: "string",
|
|
27700
|
-
description: "Release ID"
|
|
27893
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27701
27894
|
}
|
|
27702
27895
|
},
|
|
27703
27896
|
required: ["projectId", "releaseId"]
|
|
@@ -27722,11 +27915,11 @@ var reopenReleaseTool = {
|
|
|
27722
27915
|
properties: {
|
|
27723
27916
|
projectId: {
|
|
27724
27917
|
type: "string",
|
|
27725
|
-
description: "Project ID"
|
|
27918
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27726
27919
|
},
|
|
27727
27920
|
releaseId: {
|
|
27728
27921
|
type: "string",
|
|
27729
|
-
description: "Release ID"
|
|
27922
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27730
27923
|
}
|
|
27731
27924
|
},
|
|
27732
27925
|
required: ["projectId", "releaseId"]
|
|
@@ -27751,11 +27944,11 @@ var restoreReleaseTool = {
|
|
|
27751
27944
|
properties: {
|
|
27752
27945
|
projectId: {
|
|
27753
27946
|
type: "string",
|
|
27754
|
-
description: "Project ID"
|
|
27947
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27755
27948
|
},
|
|
27756
27949
|
releaseId: {
|
|
27757
27950
|
type: "string",
|
|
27758
|
-
description: "Release ID"
|
|
27951
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27759
27952
|
}
|
|
27760
27953
|
},
|
|
27761
27954
|
required: ["projectId", "releaseId"]
|
|
@@ -27774,17 +27967,17 @@ var restoreReleaseTool = {
|
|
|
27774
27967
|
var getReleaseBurndownTool = {
|
|
27775
27968
|
tool: {
|
|
27776
27969
|
name: "get_release_burndown",
|
|
27777
|
-
description: "Get burndown
|
|
27970
|
+
description: "Get burndown data for a release: total tickets, completed count, and daily progress. Use for sprint reviews and progress tracking.",
|
|
27778
27971
|
inputSchema: {
|
|
27779
27972
|
type: "object",
|
|
27780
27973
|
properties: {
|
|
27781
27974
|
projectId: {
|
|
27782
27975
|
type: "string",
|
|
27783
|
-
description: "Project ID"
|
|
27976
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27784
27977
|
},
|
|
27785
27978
|
releaseId: {
|
|
27786
27979
|
type: "string",
|
|
27787
|
-
description: "Release ID"
|
|
27980
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27788
27981
|
}
|
|
27789
27982
|
},
|
|
27790
27983
|
required: ["projectId", "releaseId"]
|
|
@@ -27803,17 +27996,17 @@ var getReleaseBurndownTool = {
|
|
|
27803
27996
|
var assignTicketsToReleaseTool = {
|
|
27804
27997
|
tool: {
|
|
27805
27998
|
name: "assign_tickets_to_release",
|
|
27806
|
-
description: "Assign multiple tickets to a release
|
|
27999
|
+
description: "Assign multiple tickets to a release in one call. The primary tool for sprint planning. Use list_backlog_tickets to find ticket IDs.",
|
|
27807
28000
|
inputSchema: {
|
|
27808
28001
|
type: "object",
|
|
27809
28002
|
properties: {
|
|
27810
28003
|
projectId: {
|
|
27811
28004
|
type: "string",
|
|
27812
|
-
description: "Project ID"
|
|
28005
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27813
28006
|
},
|
|
27814
28007
|
releaseId: {
|
|
27815
28008
|
type: "string",
|
|
27816
|
-
description: "Release ID"
|
|
28009
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27817
28010
|
},
|
|
27818
28011
|
ticketIds: {
|
|
27819
28012
|
type: "array",
|
|
@@ -27837,17 +28030,17 @@ var assignTicketsToReleaseTool = {
|
|
|
27837
28030
|
var removeTicketsFromReleaseTool = {
|
|
27838
28031
|
tool: {
|
|
27839
28032
|
name: "remove_tickets_from_release",
|
|
27840
|
-
description: "Remove multiple tickets from a release
|
|
28033
|
+
description: "Remove multiple tickets from a release in one call. Tickets stay in the project but lose their release assignment.",
|
|
27841
28034
|
inputSchema: {
|
|
27842
28035
|
type: "object",
|
|
27843
28036
|
properties: {
|
|
27844
28037
|
projectId: {
|
|
27845
28038
|
type: "string",
|
|
27846
|
-
description: "Project ID"
|
|
28039
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27847
28040
|
},
|
|
27848
28041
|
releaseId: {
|
|
27849
28042
|
type: "string",
|
|
27850
|
-
description: "Release ID"
|
|
28043
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27851
28044
|
},
|
|
27852
28045
|
ticketIds: {
|
|
27853
28046
|
type: "array",
|
|
@@ -27871,13 +28064,13 @@ var removeTicketsFromReleaseTool = {
|
|
|
27871
28064
|
var getReleaseDropdownTool = {
|
|
27872
28065
|
tool: {
|
|
27873
28066
|
name: "get_release_dropdown",
|
|
27874
|
-
description: "Get a
|
|
28067
|
+
description: "Get a lightweight list of releases (id and name only). Faster than list_releases. Use when you just need a release ID for ticket assignment.",
|
|
27875
28068
|
inputSchema: {
|
|
27876
28069
|
type: "object",
|
|
27877
28070
|
properties: {
|
|
27878
28071
|
projectId: {
|
|
27879
28072
|
type: "string",
|
|
27880
|
-
description: "Project ID"
|
|
28073
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27881
28074
|
}
|
|
27882
28075
|
},
|
|
27883
28076
|
required: ["projectId"]
|
|
@@ -27896,13 +28089,13 @@ var getReleaseDropdownTool = {
|
|
|
27896
28089
|
var quickSearchReleasesTool = {
|
|
27897
28090
|
tool: {
|
|
27898
28091
|
name: "quick_search_releases",
|
|
27899
|
-
description: "Search releases by name or description",
|
|
28092
|
+
description: "Search releases by name or description. Returns lightweight results for finding a specific release.",
|
|
27900
28093
|
inputSchema: {
|
|
27901
28094
|
type: "object",
|
|
27902
28095
|
properties: {
|
|
27903
28096
|
projectId: {
|
|
27904
28097
|
type: "string",
|
|
27905
|
-
description: "Project ID"
|
|
28098
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27906
28099
|
},
|
|
27907
28100
|
search: {
|
|
27908
28101
|
type: "string",
|
|
@@ -27930,17 +28123,17 @@ var quickSearchReleasesTool = {
|
|
|
27930
28123
|
var getReleaseHistoryTool = {
|
|
27931
28124
|
tool: {
|
|
27932
28125
|
name: "get_release_history",
|
|
27933
|
-
description: "Get the
|
|
28126
|
+
description: "Get the audit trail for a release: status changes, ticket additions/removals, and edits.",
|
|
27934
28127
|
inputSchema: {
|
|
27935
28128
|
type: "object",
|
|
27936
28129
|
properties: {
|
|
27937
28130
|
projectId: {
|
|
27938
28131
|
type: "string",
|
|
27939
|
-
description: "Project ID"
|
|
28132
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27940
28133
|
},
|
|
27941
28134
|
releaseId: {
|
|
27942
28135
|
type: "string",
|
|
27943
|
-
description: "Release ID"
|
|
28136
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27944
28137
|
},
|
|
27945
28138
|
limit: {
|
|
27946
28139
|
type: "number",
|
|
@@ -27964,17 +28157,17 @@ var getReleaseHistoryTool = {
|
|
|
27964
28157
|
var getReleaseActivitiesTool = {
|
|
27965
28158
|
tool: {
|
|
27966
28159
|
name: "get_release_activities",
|
|
27967
|
-
description: "Get ticket
|
|
28160
|
+
description: "Get ticket-level activity within a release: completions, status changes, and assignments. Use for sprint review summaries.",
|
|
27968
28161
|
inputSchema: {
|
|
27969
28162
|
type: "object",
|
|
27970
28163
|
properties: {
|
|
27971
28164
|
projectId: {
|
|
27972
28165
|
type: "string",
|
|
27973
|
-
description: "Project ID"
|
|
28166
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
27974
28167
|
},
|
|
27975
28168
|
releaseId: {
|
|
27976
28169
|
type: "string",
|
|
27977
|
-
description: "Release ID"
|
|
28170
|
+
description: "Release ID (format: rel_xxxxx). Use list_releases to find IDs."
|
|
27978
28171
|
},
|
|
27979
28172
|
limit: {
|
|
27980
28173
|
type: "number",
|
|
@@ -28019,21 +28212,21 @@ var releaseTools = [
|
|
|
28019
28212
|
var getTicketHistoryTool = {
|
|
28020
28213
|
tool: {
|
|
28021
28214
|
name: "get_ticket_history",
|
|
28022
|
-
description: "Get the change history for a ticket
|
|
28215
|
+
description: "Get the full change history for a ticket: status changes, field updates, assignments, and more. Ordered newest-first. Useful for auditing and understanding ticket lifecycle.",
|
|
28023
28216
|
inputSchema: {
|
|
28024
28217
|
type: "object",
|
|
28025
28218
|
properties: {
|
|
28026
28219
|
projectId: {
|
|
28027
28220
|
type: "string",
|
|
28028
|
-
description: "Project ID"
|
|
28221
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
28029
28222
|
},
|
|
28030
28223
|
ticketId: {
|
|
28031
28224
|
type: "string",
|
|
28032
|
-
description: "Ticket ID"
|
|
28225
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
28033
28226
|
},
|
|
28034
28227
|
limit: {
|
|
28035
28228
|
type: "number",
|
|
28036
|
-
description: "Maximum history entries to return (default: 50)",
|
|
28229
|
+
description: "Maximum history entries to return (default: 50, max: 200)",
|
|
28037
28230
|
default: 50
|
|
28038
28231
|
}
|
|
28039
28232
|
},
|
|
@@ -28053,21 +28246,21 @@ var getTicketHistoryTool = {
|
|
|
28053
28246
|
var getProjectActivityTool = {
|
|
28054
28247
|
tool: {
|
|
28055
28248
|
name: "get_project_activity",
|
|
28056
|
-
description: "Get recent activity across a project
|
|
28249
|
+
description: "Get recent activity across all tickets in a project: creates, updates, comments, status changes. Useful for standup reports and daily digests. Filter by date range.",
|
|
28057
28250
|
inputSchema: {
|
|
28058
28251
|
type: "object",
|
|
28059
28252
|
properties: {
|
|
28060
28253
|
projectId: {
|
|
28061
28254
|
type: "string",
|
|
28062
|
-
description: "Project ID"
|
|
28255
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28063
28256
|
},
|
|
28064
28257
|
from: {
|
|
28065
28258
|
type: "string",
|
|
28066
|
-
description:
|
|
28259
|
+
description: 'Start date in ISO 8601 format (e.g., "2025-01-15T00:00:00Z"). Optional.'
|
|
28067
28260
|
},
|
|
28068
28261
|
to: {
|
|
28069
28262
|
type: "string",
|
|
28070
|
-
description:
|
|
28263
|
+
description: 'End date in ISO 8601 format (e.g., "2025-01-31T23:59:59Z"). Optional.'
|
|
28071
28264
|
}
|
|
28072
28265
|
},
|
|
28073
28266
|
required: ["projectId"]
|
|
@@ -28092,13 +28285,13 @@ var historyTools = [
|
|
|
28092
28285
|
var getMemberAnalyticsTool = {
|
|
28093
28286
|
tool: {
|
|
28094
28287
|
name: "get_member_analytics",
|
|
28095
|
-
description: "Get per-member statistics: tickets assigned, completed, and activity for each project member.",
|
|
28288
|
+
description: "Get per-member statistics: tickets assigned, completed, and activity for each project member. Useful for workload balancing and standup reports.",
|
|
28096
28289
|
inputSchema: {
|
|
28097
28290
|
type: "object",
|
|
28098
28291
|
properties: {
|
|
28099
28292
|
projectId: {
|
|
28100
28293
|
type: "string",
|
|
28101
|
-
description: "Project ID"
|
|
28294
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28102
28295
|
}
|
|
28103
28296
|
},
|
|
28104
28297
|
required: ["projectId"]
|
|
@@ -28117,13 +28310,13 @@ var getMemberAnalyticsTool = {
|
|
|
28117
28310
|
var getCycleTimeAnalyticsTool = {
|
|
28118
28311
|
tool: {
|
|
28119
28312
|
name: "get_cycle_time_analytics",
|
|
28120
|
-
description: "Get cycle time analytics:
|
|
28313
|
+
description: "Get cycle time analytics: average time tickets spend in each status and total time to completion. Useful for identifying workflow bottlenecks.",
|
|
28121
28314
|
inputSchema: {
|
|
28122
28315
|
type: "object",
|
|
28123
28316
|
properties: {
|
|
28124
28317
|
projectId: {
|
|
28125
28318
|
type: "string",
|
|
28126
|
-
description: "Project ID"
|
|
28319
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28127
28320
|
}
|
|
28128
28321
|
},
|
|
28129
28322
|
required: ["projectId"]
|
|
@@ -28142,13 +28335,13 @@ var getCycleTimeAnalyticsTool = {
|
|
|
28142
28335
|
var getDistributionAnalyticsTool = {
|
|
28143
28336
|
tool: {
|
|
28144
28337
|
name: "get_distribution_analytics",
|
|
28145
|
-
description: "Get distribution
|
|
28338
|
+
description: "Get ticket distribution breakdowns: count by priority, type, tag, assignee, and size. Useful for understanding project composition and identifying imbalances.",
|
|
28146
28339
|
inputSchema: {
|
|
28147
28340
|
type: "object",
|
|
28148
28341
|
properties: {
|
|
28149
28342
|
projectId: {
|
|
28150
28343
|
type: "string",
|
|
28151
|
-
description: "Project ID"
|
|
28344
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28152
28345
|
}
|
|
28153
28346
|
},
|
|
28154
28347
|
required: ["projectId"]
|
|
@@ -28174,13 +28367,13 @@ var analyticsTools = [
|
|
|
28174
28367
|
var listNotificationsTool = {
|
|
28175
28368
|
tool: {
|
|
28176
28369
|
name: "list_notifications",
|
|
28177
|
-
description: "List recent notifications for the current user",
|
|
28370
|
+
description: "List recent notifications for the current user (ticket assignments, comments, status changes). Use get_unread_count to check if there are new notifications first.",
|
|
28178
28371
|
inputSchema: {
|
|
28179
28372
|
type: "object",
|
|
28180
28373
|
properties: {
|
|
28181
28374
|
limit: {
|
|
28182
28375
|
type: "number",
|
|
28183
|
-
description: "Maximum notifications to return (default: 20)",
|
|
28376
|
+
description: "Maximum notifications to return (default: 20, max: 100)",
|
|
28184
28377
|
default: 20
|
|
28185
28378
|
}
|
|
28186
28379
|
}
|
|
@@ -28199,7 +28392,7 @@ var listNotificationsTool = {
|
|
|
28199
28392
|
var getUnreadCountTool = {
|
|
28200
28393
|
tool: {
|
|
28201
28394
|
name: "get_unread_count",
|
|
28202
|
-
description: "Get the count of unread notifications",
|
|
28395
|
+
description: "Get the total count of unread notifications. Use this for a quick check before fetching the full list with list_notifications.",
|
|
28203
28396
|
inputSchema: {
|
|
28204
28397
|
type: "object",
|
|
28205
28398
|
properties: {}
|
|
@@ -28218,13 +28411,13 @@ var getUnreadCountTool = {
|
|
|
28218
28411
|
var markNotificationReadTool = {
|
|
28219
28412
|
tool: {
|
|
28220
28413
|
name: "mark_notification_read",
|
|
28221
|
-
description: "Mark a specific notification as read",
|
|
28414
|
+
description: "Mark a specific notification as read. Use mark_all_notifications_read to clear all at once.",
|
|
28222
28415
|
inputSchema: {
|
|
28223
28416
|
type: "object",
|
|
28224
28417
|
properties: {
|
|
28225
28418
|
notificationId: {
|
|
28226
28419
|
type: "string",
|
|
28227
|
-
description: "Notification ID"
|
|
28420
|
+
description: "Notification ID (from list_notifications response)"
|
|
28228
28421
|
}
|
|
28229
28422
|
},
|
|
28230
28423
|
required: ["notificationId"]
|
|
@@ -28243,7 +28436,7 @@ var markNotificationReadTool = {
|
|
|
28243
28436
|
var markAllNotificationsReadTool = {
|
|
28244
28437
|
tool: {
|
|
28245
28438
|
name: "mark_all_notifications_read",
|
|
28246
|
-
description: "Mark all notifications as read",
|
|
28439
|
+
description: "Mark all notifications as read in one call. Use this to clear the notification badge.",
|
|
28247
28440
|
inputSchema: {
|
|
28248
28441
|
type: "object",
|
|
28249
28442
|
properties: {}
|
|
@@ -28262,7 +28455,7 @@ var markAllNotificationsReadTool = {
|
|
|
28262
28455
|
var getUnreadCountsTool = {
|
|
28263
28456
|
tool: {
|
|
28264
28457
|
name: "get_unread_counts",
|
|
28265
|
-
description: "Get unread notification counts with per-project breakdown",
|
|
28458
|
+
description: "Get unread notification counts with per-project breakdown. More detailed than get_unread_count — shows which projects have pending notifications.",
|
|
28266
28459
|
inputSchema: {
|
|
28267
28460
|
type: "object",
|
|
28268
28461
|
properties: {}
|
|
@@ -28290,7 +28483,7 @@ var notificationTools = [
|
|
|
28290
28483
|
var polishTitleTool = {
|
|
28291
28484
|
tool: {
|
|
28292
28485
|
name: "polish_title",
|
|
28293
|
-
description: "Use
|
|
28486
|
+
description: "AI-powered title improvement. Makes titles clearer and more actionable. Use before create_ticket when the user provides a vague title. Consumes AI token quota (check with get_ai_usage).",
|
|
28294
28487
|
inputSchema: {
|
|
28295
28488
|
type: "object",
|
|
28296
28489
|
properties: {
|
|
@@ -28319,7 +28512,7 @@ var polishTitleTool = {
|
|
|
28319
28512
|
var generateDescriptionTool = {
|
|
28320
28513
|
tool: {
|
|
28321
28514
|
name: "generate_description",
|
|
28322
|
-
description: "
|
|
28515
|
+
description: "AI-generated structured ticket description from a title. Returns markdown with headings and bullet points. Use as a starting point, then refine with refine_description if needed. Consumes AI token quota.",
|
|
28323
28516
|
inputSchema: {
|
|
28324
28517
|
type: "object",
|
|
28325
28518
|
properties: {
|
|
@@ -28352,7 +28545,7 @@ var generateDescriptionTool = {
|
|
|
28352
28545
|
var findSimilarTicketsTool = {
|
|
28353
28546
|
tool: {
|
|
28354
28547
|
name: "find_similar_tickets",
|
|
28355
|
-
description: "
|
|
28548
|
+
description: "Semantic search for similar tickets. Use BEFORE creating a ticket to check for duplicates. Also useful for finding related work. Returns similarity scores.",
|
|
28356
28549
|
inputSchema: {
|
|
28357
28550
|
type: "object",
|
|
28358
28551
|
properties: {
|
|
@@ -28386,7 +28579,7 @@ var findSimilarTicketsTool = {
|
|
|
28386
28579
|
var fixGrammarTool = {
|
|
28387
28580
|
tool: {
|
|
28388
28581
|
name: "fix_grammar",
|
|
28389
|
-
description: "
|
|
28582
|
+
description: "AI grammar and spelling correction. Use on ticket descriptions or comments before saving. Preserves markdown formatting. Max 5000 chars input. Consumes AI quota.",
|
|
28390
28583
|
inputSchema: {
|
|
28391
28584
|
type: "object",
|
|
28392
28585
|
properties: {
|
|
@@ -28415,7 +28608,7 @@ var fixGrammarTool = {
|
|
|
28415
28608
|
var improveClarityTool = {
|
|
28416
28609
|
tool: {
|
|
28417
28610
|
name: "improve_clarity",
|
|
28418
|
-
description: "Use
|
|
28611
|
+
description: "AI rewrite for clarity and conciseness. Use on verbose or unclear descriptions. Preserves structure and markdown. Max 5000 chars input. Consumes AI quota.",
|
|
28419
28612
|
inputSchema: {
|
|
28420
28613
|
type: "object",
|
|
28421
28614
|
properties: {
|
|
@@ -28444,7 +28637,7 @@ var improveClarityTool = {
|
|
|
28444
28637
|
var checkClarityTool = {
|
|
28445
28638
|
tool: {
|
|
28446
28639
|
name: "check_clarity",
|
|
28447
|
-
description: "
|
|
28640
|
+
description: "AI check whether a ticket title is clear enough to generate a good description. If unclear, returns clarifying questions to ask the user. Call this before generate_description when the title might be ambiguous.",
|
|
28448
28641
|
inputSchema: {
|
|
28449
28642
|
type: "object",
|
|
28450
28643
|
properties: {
|
|
@@ -28473,7 +28666,7 @@ var checkClarityTool = {
|
|
|
28473
28666
|
var refineDescriptionTool = {
|
|
28474
28667
|
tool: {
|
|
28475
28668
|
name: "refine_description",
|
|
28476
|
-
description:
|
|
28669
|
+
description: 'AI refinement of an existing description based on feedback. Pass the current description and natural-language instructions (e.g., "add error handling details", "make it shorter"). Max 1000 chars feedback. Consumes AI quota.',
|
|
28477
28670
|
inputSchema: {
|
|
28478
28671
|
type: "object",
|
|
28479
28672
|
properties: {
|
|
@@ -28506,7 +28699,7 @@ var refineDescriptionTool = {
|
|
|
28506
28699
|
var suggestAttributesTool = {
|
|
28507
28700
|
tool: {
|
|
28508
28701
|
name: "suggest_attributes",
|
|
28509
|
-
description: "
|
|
28702
|
+
description: "AI-suggested priority, size, type, and tags based on title and description. Returns IDs matching the project's configured values. Use after writing the description but before create_ticket to auto-fill attributes.",
|
|
28510
28703
|
inputSchema: {
|
|
28511
28704
|
type: "object",
|
|
28512
28705
|
properties: {
|
|
@@ -28551,7 +28744,7 @@ var aiTools = [
|
|
|
28551
28744
|
var getMCPUsageTool = {
|
|
28552
28745
|
tool: {
|
|
28553
28746
|
name: "get_mcp_usage",
|
|
28554
|
-
description: "Check MCP usage status
|
|
28747
|
+
description: "Check MCP API usage status: requests used today, daily quota, and remaining calls. Call this if you get rate-limit errors.",
|
|
28555
28748
|
inputSchema: {
|
|
28556
28749
|
type: "object",
|
|
28557
28750
|
properties: {}
|
|
@@ -28570,7 +28763,7 @@ var getMCPUsageTool = {
|
|
|
28570
28763
|
var getAIUsageTool = {
|
|
28571
28764
|
tool: {
|
|
28572
28765
|
name: "get_ai_usage",
|
|
28573
|
-
description: "Check AI usage
|
|
28766
|
+
description: "Check AI feature usage: tokens consumed this week, weekly quota, and remaining capacity. AI tools (check_clarity, generate_description, etc.) consume tokens from this quota.",
|
|
28574
28767
|
inputSchema: {
|
|
28575
28768
|
type: "object",
|
|
28576
28769
|
properties: {}
|
|
@@ -28595,7 +28788,7 @@ var usageTools = [
|
|
|
28595
28788
|
var listOrganizationsTool = {
|
|
28596
28789
|
tool: {
|
|
28597
28790
|
name: "list_organizations",
|
|
28598
|
-
description: "List all organizations the current user belongs to",
|
|
28791
|
+
description: "List all organizations the current user belongs to. Call this first during setup, then use set_organization to pick the active org.",
|
|
28599
28792
|
inputSchema: {
|
|
28600
28793
|
type: "object",
|
|
28601
28794
|
properties: {}
|
|
@@ -28617,13 +28810,13 @@ var listOrganizationsTool = {
|
|
|
28617
28810
|
var setOrganizationTool = {
|
|
28618
28811
|
tool: {
|
|
28619
28812
|
name: "set_organization",
|
|
28620
|
-
description: "Set the active organization context
|
|
28813
|
+
description: "Set the active organization context. All subsequent API calls (list_projects, create_ticket, etc.) operate within this org. Call list_organizations first to get available org IDs.",
|
|
28621
28814
|
inputSchema: {
|
|
28622
28815
|
type: "object",
|
|
28623
28816
|
properties: {
|
|
28624
28817
|
orgId: {
|
|
28625
28818
|
type: "string",
|
|
28626
|
-
description: "Organization ID to set as active"
|
|
28819
|
+
description: "Organization ID to set as active (format: org_xxxxx). Use list_organizations to find IDs."
|
|
28627
28820
|
}
|
|
28628
28821
|
},
|
|
28629
28822
|
required: ["orgId"]
|
|
@@ -28650,7 +28843,7 @@ var setOrganizationTool = {
|
|
|
28650
28843
|
var getCurrentOrganizationTool = {
|
|
28651
28844
|
tool: {
|
|
28652
28845
|
name: "get_current_organization",
|
|
28653
|
-
description: "Get the currently active organization
|
|
28846
|
+
description: "Get the currently active organization. Returns the org set via set_organization, or the default org if none was set.",
|
|
28654
28847
|
inputSchema: {
|
|
28655
28848
|
type: "object",
|
|
28656
28849
|
properties: {}
|
|
@@ -28674,13 +28867,13 @@ var getCurrentOrganizationTool = {
|
|
|
28674
28867
|
var listOrgMembersTool = {
|
|
28675
28868
|
tool: {
|
|
28676
28869
|
name: "list_organization_members",
|
|
28677
|
-
description: "List all members in the current organization",
|
|
28870
|
+
description: "List all members in the current organization. Returns user IDs needed for add_project_member and assigneeId in create_ticket.",
|
|
28678
28871
|
inputSchema: {
|
|
28679
28872
|
type: "object",
|
|
28680
28873
|
properties: {
|
|
28681
28874
|
search: {
|
|
28682
28875
|
type: "string",
|
|
28683
|
-
description: "
|
|
28876
|
+
description: "Filter by name or email substring (optional)"
|
|
28684
28877
|
}
|
|
28685
28878
|
}
|
|
28686
28879
|
}
|
|
@@ -28698,13 +28891,13 @@ var listOrgMembersTool = {
|
|
|
28698
28891
|
var getMemberProfileTool = {
|
|
28699
28892
|
tool: {
|
|
28700
28893
|
name: "get_member_profile",
|
|
28701
|
-
description: "Get detailed profile of a specific team member",
|
|
28894
|
+
description: "Get detailed profile of a specific team member including name, email, and avatar.",
|
|
28702
28895
|
inputSchema: {
|
|
28703
28896
|
type: "object",
|
|
28704
28897
|
properties: {
|
|
28705
28898
|
userId: {
|
|
28706
28899
|
type: "string",
|
|
28707
|
-
description: "User ID to
|
|
28900
|
+
description: "User ID (format: usr_xxxxx). Use list_organization_members to find IDs."
|
|
28708
28901
|
}
|
|
28709
28902
|
},
|
|
28710
28903
|
required: ["userId"]
|
|
@@ -28723,7 +28916,7 @@ var getMemberProfileTool = {
|
|
|
28723
28916
|
var getMyProfileTool = {
|
|
28724
28917
|
tool: {
|
|
28725
28918
|
name: "get_my_profile",
|
|
28726
|
-
description: "Get the current user's profile
|
|
28919
|
+
description: "Get the current authenticated user's profile: name, email, username, and avatar. Useful to get your own user ID for filtering (e.g., get_my_tickets).",
|
|
28727
28920
|
inputSchema: {
|
|
28728
28921
|
type: "object",
|
|
28729
28922
|
properties: {}
|
|
@@ -28759,17 +28952,17 @@ var organizationTools = [
|
|
|
28759
28952
|
var getWatchStatusTool = {
|
|
28760
28953
|
tool: {
|
|
28761
28954
|
name: "get_watch_status",
|
|
28762
|
-
description: "Check if
|
|
28955
|
+
description: "Check if the current user is watching a ticket. Watched tickets send notifications on status changes, comments, and assignments.",
|
|
28763
28956
|
inputSchema: {
|
|
28764
28957
|
type: "object",
|
|
28765
28958
|
properties: {
|
|
28766
28959
|
projectId: {
|
|
28767
28960
|
type: "string",
|
|
28768
|
-
description: "Project ID"
|
|
28961
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
28769
28962
|
},
|
|
28770
28963
|
ticketId: {
|
|
28771
28964
|
type: "string",
|
|
28772
|
-
description: "Ticket ID"
|
|
28965
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
28773
28966
|
}
|
|
28774
28967
|
},
|
|
28775
28968
|
required: ["projectId", "ticketId"]
|
|
@@ -28788,17 +28981,17 @@ var getWatchStatusTool = {
|
|
|
28788
28981
|
var toggleWatchTool = {
|
|
28789
28982
|
tool: {
|
|
28790
28983
|
name: "toggle_watch",
|
|
28791
|
-
description: "Toggle watching a ticket. If watching, stops watching. If not watching, starts watching.",
|
|
28984
|
+
description: "Toggle watching a ticket. If currently watching, stops watching (no more notifications). If not watching, starts watching. Use get_watch_status to check current state.",
|
|
28792
28985
|
inputSchema: {
|
|
28793
28986
|
type: "object",
|
|
28794
28987
|
properties: {
|
|
28795
28988
|
projectId: {
|
|
28796
28989
|
type: "string",
|
|
28797
|
-
description: "Project ID"
|
|
28990
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
28798
28991
|
},
|
|
28799
28992
|
ticketId: {
|
|
28800
28993
|
type: "string",
|
|
28801
|
-
description: "Ticket ID"
|
|
28994
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
28802
28995
|
}
|
|
28803
28996
|
},
|
|
28804
28997
|
required: ["projectId", "ticketId"]
|
|
@@ -28842,22 +29035,22 @@ async function mapWithConcurrency(items, fn, concurrency = BATCH_CONCURRENCY_LIM
|
|
|
28842
29035
|
var batchMoveTicketsTool = {
|
|
28843
29036
|
tool: {
|
|
28844
29037
|
name: "batch_move_tickets",
|
|
28845
|
-
description: `Move multiple tickets to a new status
|
|
29038
|
+
description: `Move multiple tickets to a new status in one call. Use list_statuses to get valid status IDs. Maximum ${LIMITS.BATCH_SIZE_MAX} tickets per batch. Skips tickets where the transition is invalid.`,
|
|
28846
29039
|
inputSchema: {
|
|
28847
29040
|
type: "object",
|
|
28848
29041
|
properties: {
|
|
28849
29042
|
projectId: {
|
|
28850
29043
|
type: "string",
|
|
28851
|
-
description: "Project ID"
|
|
29044
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28852
29045
|
},
|
|
28853
29046
|
ticketIds: {
|
|
28854
29047
|
type: "array",
|
|
28855
29048
|
items: { type: "string" },
|
|
28856
|
-
description: `Array of ticket IDs to move (max ${LIMITS.BATCH_SIZE_MAX})`
|
|
29049
|
+
description: `Array of ticket IDs to move (format: tkt_xxxxx each, max ${LIMITS.BATCH_SIZE_MAX})`
|
|
28857
29050
|
},
|
|
28858
29051
|
toStatusId: {
|
|
28859
29052
|
type: "string",
|
|
28860
|
-
description: "Target status ID"
|
|
29053
|
+
description: "Target status ID (format: sts_xxxxx). Use list_statuses to get valid IDs."
|
|
28861
29054
|
}
|
|
28862
29055
|
},
|
|
28863
29056
|
required: ["projectId", "ticketIds", "toStatusId"]
|
|
@@ -28880,18 +29073,18 @@ var batchMoveTicketsTool = {
|
|
|
28880
29073
|
var batchCompleteTicketsTool = {
|
|
28881
29074
|
tool: {
|
|
28882
29075
|
name: "batch_complete_tickets",
|
|
28883
|
-
description: `
|
|
29076
|
+
description: `Mark multiple tickets as completed in one call. Equivalent to calling complete_ticket for each. Maximum ${LIMITS.BATCH_SIZE_MAX} tickets per batch. Returns per-ticket success/failure results.`,
|
|
28884
29077
|
inputSchema: {
|
|
28885
29078
|
type: "object",
|
|
28886
29079
|
properties: {
|
|
28887
29080
|
projectId: {
|
|
28888
29081
|
type: "string",
|
|
28889
|
-
description: "Project ID"
|
|
29082
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28890
29083
|
},
|
|
28891
29084
|
ticketIds: {
|
|
28892
29085
|
type: "array",
|
|
28893
29086
|
items: { type: "string" },
|
|
28894
|
-
description: `Array of ticket IDs to complete (max ${LIMITS.BATCH_SIZE_MAX})`
|
|
29087
|
+
description: `Array of ticket IDs to complete (format: tkt_xxxxx each, max ${LIMITS.BATCH_SIZE_MAX})`
|
|
28895
29088
|
}
|
|
28896
29089
|
},
|
|
28897
29090
|
required: ["projectId", "ticketIds"]
|
|
@@ -28928,22 +29121,22 @@ var batchCompleteTicketsTool = {
|
|
|
28928
29121
|
var batchAssignTicketsTool = {
|
|
28929
29122
|
tool: {
|
|
28930
29123
|
name: "batch_assign_tickets",
|
|
28931
|
-
description: `Assign multiple tickets to a user
|
|
29124
|
+
description: `Assign multiple tickets to a single user in one call, or pass null to unassign all. Use get_project_members to find valid user IDs. Maximum ${LIMITS.BATCH_SIZE_MAX} tickets per batch.`,
|
|
28932
29125
|
inputSchema: {
|
|
28933
29126
|
type: "object",
|
|
28934
29127
|
properties: {
|
|
28935
29128
|
projectId: {
|
|
28936
29129
|
type: "string",
|
|
28937
|
-
description: "Project ID"
|
|
29130
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
28938
29131
|
},
|
|
28939
29132
|
ticketIds: {
|
|
28940
29133
|
type: "array",
|
|
28941
29134
|
items: { type: "string" },
|
|
28942
|
-
description: `Array of ticket IDs to assign (max ${LIMITS.BATCH_SIZE_MAX})`
|
|
29135
|
+
description: `Array of ticket IDs to assign (format: tkt_xxxxx each, max ${LIMITS.BATCH_SIZE_MAX})`
|
|
28943
29136
|
},
|
|
28944
29137
|
assigneeId: {
|
|
28945
29138
|
type: ["string", "null"],
|
|
28946
|
-
description: "User ID to assign to, or null to unassign all"
|
|
29139
|
+
description: "User ID to assign to (format: usr_xxxxx), or null to unassign all. Use get_project_members to find user IDs."
|
|
28947
29140
|
}
|
|
28948
29141
|
},
|
|
28949
29142
|
required: ["projectId", "ticketIds", "assigneeId"]
|
|
@@ -28983,17 +29176,17 @@ var batchTools = [
|
|
|
28983
29176
|
var listAttachmentsTool = {
|
|
28984
29177
|
tool: {
|
|
28985
29178
|
name: "list_attachments",
|
|
28986
|
-
description: "List all attachments on a ticket (read-only)",
|
|
29179
|
+
description: "List all file attachments on a ticket (read-only). Returns file names, sizes, and URLs. Attachments are uploaded via the web UI — this tool only reads them.",
|
|
28987
29180
|
inputSchema: {
|
|
28988
29181
|
type: "object",
|
|
28989
29182
|
properties: {
|
|
28990
29183
|
projectId: {
|
|
28991
29184
|
type: "string",
|
|
28992
|
-
description: "Project ID"
|
|
29185
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
28993
29186
|
},
|
|
28994
29187
|
ticketId: {
|
|
28995
29188
|
type: "string",
|
|
28996
|
-
description: "Ticket ID"
|
|
29189
|
+
description: "Ticket ID (format: tkt_xxxxx)"
|
|
28997
29190
|
}
|
|
28998
29191
|
},
|
|
28999
29192
|
required: ["projectId", "ticketId"]
|
|
@@ -29017,13 +29210,13 @@ var attachmentTools = [
|
|
|
29017
29210
|
var getAvailableProjectMembersTool = {
|
|
29018
29211
|
tool: {
|
|
29019
29212
|
name: "get_available_project_members",
|
|
29020
|
-
description: "Get organization members who are NOT yet members of a project.
|
|
29213
|
+
description: "Get organization members who are NOT yet members of a project. Call this before add_project_member to find users you can add.",
|
|
29021
29214
|
inputSchema: {
|
|
29022
29215
|
type: "object",
|
|
29023
29216
|
properties: {
|
|
29024
29217
|
projectId: {
|
|
29025
29218
|
type: "string",
|
|
29026
|
-
description: "Project ID"
|
|
29219
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
29027
29220
|
}
|
|
29028
29221
|
},
|
|
29029
29222
|
required: ["projectId"]
|
|
@@ -29042,22 +29235,22 @@ var getAvailableProjectMembersTool = {
|
|
|
29042
29235
|
var addProjectMemberTool = {
|
|
29043
29236
|
tool: {
|
|
29044
29237
|
name: "add_project_member",
|
|
29045
|
-
description: "Add an organization member to a project. The user must already be an org member.",
|
|
29238
|
+
description: "Add an organization member to a project. The user must already be an org member — use get_available_project_members to find eligible users.",
|
|
29046
29239
|
inputSchema: {
|
|
29047
29240
|
type: "object",
|
|
29048
29241
|
properties: {
|
|
29049
29242
|
projectId: {
|
|
29050
29243
|
type: "string",
|
|
29051
|
-
description: "Project ID"
|
|
29244
|
+
description: "Project ID (format: prj_xxxxx). Use list_projects to find IDs."
|
|
29052
29245
|
},
|
|
29053
29246
|
userId: {
|
|
29054
29247
|
type: "string",
|
|
29055
|
-
description: "User ID to add (
|
|
29248
|
+
description: "User ID to add (format: usr_xxxxx). Use get_available_project_members to find eligible users."
|
|
29056
29249
|
},
|
|
29057
29250
|
role: {
|
|
29058
29251
|
type: "string",
|
|
29059
29252
|
enum: ["member", "admin"],
|
|
29060
|
-
description:
|
|
29253
|
+
description: 'Role in the project: "member" (default) or "admin" (can manage project settings)',
|
|
29061
29254
|
default: "member"
|
|
29062
29255
|
}
|
|
29063
29256
|
},
|
|
@@ -29077,22 +29270,22 @@ var addProjectMemberTool = {
|
|
|
29077
29270
|
var updateProjectMemberRoleTool = {
|
|
29078
29271
|
tool: {
|
|
29079
29272
|
name: "update_project_member_role",
|
|
29080
|
-
description: "Update a member's role
|
|
29273
|
+
description: "Update a project member's role (promote to admin or demote to member). Requires project admin role.",
|
|
29081
29274
|
inputSchema: {
|
|
29082
29275
|
type: "object",
|
|
29083
29276
|
properties: {
|
|
29084
29277
|
projectId: {
|
|
29085
29278
|
type: "string",
|
|
29086
|
-
description: "Project ID"
|
|
29279
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
29087
29280
|
},
|
|
29088
29281
|
userId: {
|
|
29089
29282
|
type: "string",
|
|
29090
|
-
description: "User ID to update"
|
|
29283
|
+
description: "User ID to update (format: usr_xxxxx). Use get_project_members to find current members."
|
|
29091
29284
|
},
|
|
29092
29285
|
role: {
|
|
29093
29286
|
type: "string",
|
|
29094
29287
|
enum: ["member", "admin"],
|
|
29095
|
-
description:
|
|
29288
|
+
description: 'New role: "member" or "admin"'
|
|
29096
29289
|
}
|
|
29097
29290
|
},
|
|
29098
29291
|
required: ["projectId", "userId", "role"]
|
|
@@ -29111,17 +29304,17 @@ var updateProjectMemberRoleTool = {
|
|
|
29111
29304
|
var removeProjectMemberTool = {
|
|
29112
29305
|
tool: {
|
|
29113
29306
|
name: "remove_project_member",
|
|
29114
|
-
description: "Remove a member from a project. They
|
|
29307
|
+
description: "Remove a member from a project. They lose project access but remain in the organization. Requires project admin role.",
|
|
29115
29308
|
inputSchema: {
|
|
29116
29309
|
type: "object",
|
|
29117
29310
|
properties: {
|
|
29118
29311
|
projectId: {
|
|
29119
29312
|
type: "string",
|
|
29120
|
-
description: "Project ID"
|
|
29313
|
+
description: "Project ID (format: prj_xxxxx)"
|
|
29121
29314
|
},
|
|
29122
29315
|
userId: {
|
|
29123
29316
|
type: "string",
|
|
29124
|
-
description: "User ID to remove"
|
|
29317
|
+
description: "User ID to remove (format: usr_xxxxx). Use get_project_members to find current members."
|
|
29125
29318
|
}
|
|
29126
29319
|
},
|
|
29127
29320
|
required: ["projectId", "userId"]
|
|
@@ -29148,13 +29341,41 @@ var projectMemberTools = [
|
|
|
29148
29341
|
var TOOL_INDEX = {
|
|
29149
29342
|
getting_started: {
|
|
29150
29343
|
description: "Start here. Set your organization context before using other tools.",
|
|
29344
|
+
setup: 'Run "npx @kanbodev/mcp login" to authenticate and auto-register the MCP server with your editor. Use "npx @kanbodev/mcp install" to re-register with newly installed editors.',
|
|
29151
29345
|
steps: [
|
|
29152
29346
|
"1. list_organizations — find your orgs",
|
|
29153
29347
|
"2. set_organization — set active org (required before most tools)",
|
|
29154
29348
|
"3. list_projects — discover projects",
|
|
29155
|
-
"4. list_statuses
|
|
29349
|
+
"4. Cache IDs: list_statuses + list_priorities + list_sizes + list_ticket_types + list_tags"
|
|
29156
29350
|
]
|
|
29157
29351
|
},
|
|
29352
|
+
content_quality_guidelines: {
|
|
29353
|
+
description: "Follow these guidelines when creating or updating tickets for professional-quality output.",
|
|
29354
|
+
ticket_title: 'Concise, action-oriented. Start with a verb for tasks/bugs. 1-200 chars. Example: "Implement Google OAuth login flow"',
|
|
29355
|
+
ticket_description: [
|
|
29356
|
+
"Use markdown. Max 5000 chars. Structure with ## headings:",
|
|
29357
|
+
"",
|
|
29358
|
+
"As a [role], I want [goal], so that [benefit].",
|
|
29359
|
+
"",
|
|
29360
|
+
"## Requirements",
|
|
29361
|
+
"- Bullet points of what needs to happen",
|
|
29362
|
+
"",
|
|
29363
|
+
"## Technical Notes",
|
|
29364
|
+
"- Implementation hints, APIs, constraints, `code` references",
|
|
29365
|
+
"",
|
|
29366
|
+
"Use **bold** for key terms, `code` for identifiers, and bullet lists for readability."
|
|
29367
|
+
].join(`
|
|
29368
|
+
`),
|
|
29369
|
+
acceptance_criteria: [
|
|
29370
|
+
'JSON string of array: [{"id":"ac-1","text":"Given... When... Then...","isChecked":false}]',
|
|
29371
|
+
"Write 3-8 criteria per ticket in Given/When/Then format.",
|
|
29372
|
+
'Example: [{"id":"ac-1","text":"Given a user on the login page, When they click Sign in with Google, Then they are redirected to Google OAuth consent screen","isChecked":false}]',
|
|
29373
|
+
"Use unique IDs (ac-1, ac-2, etc.). Set isChecked to false for new tickets. Max 10000 chars total."
|
|
29374
|
+
].join(`
|
|
29375
|
+
`),
|
|
29376
|
+
tags: "Apply 2-5 tags per ticket after creation using set_ticket_tags. Use lowercase-kebab-case. Common categories: feature area (auth, billing), technology (react, api), work type (feature, bug, refactor). Create missing tags with create_tag first.",
|
|
29377
|
+
ticket_type: "Always set typeSlug when creating tickets. Common types: feature, bug, task, improvement. Use list_ticket_types to see project-specific types."
|
|
29378
|
+
},
|
|
29158
29379
|
categories: {
|
|
29159
29380
|
"Organization & Context": {
|
|
29160
29381
|
tools: ["list_organizations", "set_organization", "get_current_organization", "list_organization_members", "get_member_profile", "get_my_profile"],
|
|
@@ -29234,19 +29455,21 @@ var TOOL_INDEX = {
|
|
|
29234
29455
|
}
|
|
29235
29456
|
},
|
|
29236
29457
|
common_workflows: {
|
|
29237
|
-
"Create a ticket": "list_statuses
|
|
29238
|
-
"
|
|
29239
|
-
"
|
|
29458
|
+
"Create a high-quality ticket": "list_statuses + list_priorities + list_sizes + list_ticket_types + list_tags (cache IDs) → find_similar_tickets (check duplicates) → create_ticket (with description, acceptanceCriteria, typeSlug) → set_ticket_tags (add 2-5 tags)",
|
|
29459
|
+
"AI-assisted ticket creation": "check_clarity → polish_title → generate_description → suggest_attributes → create_ticket → set_ticket_tags",
|
|
29460
|
+
"Move through workflow": "get_available_transitions → move_ticket (or complete_ticket / abandon_ticket)",
|
|
29461
|
+
"Sprint planning": "create_release → list_backlog_tickets → assign_tickets_to_release",
|
|
29240
29462
|
"Daily standup": "get_my_tickets + get_overdue_tickets + get_tickets_due_soon",
|
|
29241
|
-
"
|
|
29242
|
-
"Bulk cleanup": "list_tickets (filter) → batch_complete_tickets or batch_move_tickets"
|
|
29463
|
+
"Release shipping": "get_release_tickets (verify all complete) → mark_release_shipped",
|
|
29464
|
+
"Bulk cleanup": "list_tickets (filter) → batch_complete_tickets or batch_move_tickets",
|
|
29465
|
+
"Team workload review": "get_member_analytics + get_distribution_analytics"
|
|
29243
29466
|
}
|
|
29244
29467
|
};
|
|
29245
29468
|
var helpTools = [
|
|
29246
29469
|
{
|
|
29247
29470
|
tool: {
|
|
29248
29471
|
name: "get_help",
|
|
29249
|
-
description: "Get
|
|
29472
|
+
description: "Get the full Kanbo tool index, content quality guidelines, and multi-step workflows. Call this to understand available capabilities, how to create high-quality tickets, or which tools to chain together. Includes guidelines for descriptions, acceptance criteria, and tags.",
|
|
29250
29473
|
inputSchema: {
|
|
29251
29474
|
type: "object",
|
|
29252
29475
|
properties: {
|
|
@@ -29322,8 +29545,10 @@ class ToolRegistryImpl {
|
|
|
29322
29545
|
}
|
|
29323
29546
|
}
|
|
29324
29547
|
var toolRegistry = new ToolRegistryImpl;
|
|
29325
|
-
|
|
29326
|
-
toolLogger
|
|
29548
|
+
function logToolRegistration() {
|
|
29549
|
+
const toolLogger = logger.withCategory(LogCategory.STARTUP);
|
|
29550
|
+
toolLogger.info({ toolCount: toolRegistry.tools.length }, "Tools registered");
|
|
29551
|
+
}
|
|
29327
29552
|
|
|
29328
29553
|
// src/server.ts
|
|
29329
29554
|
var serverLogger = logger.withCategory(LogCategory.SYSTEM);
|
|
@@ -29338,19 +29563,31 @@ function createMCPServer() {
|
|
|
29338
29563
|
instructions: [
|
|
29339
29564
|
"Kanbo MCP Server — AI-native project management.",
|
|
29340
29565
|
"",
|
|
29341
|
-
"
|
|
29342
|
-
"
|
|
29343
|
-
"
|
|
29344
|
-
"
|
|
29566
|
+
"DOMAIN MODEL:",
|
|
29567
|
+
"Organization → Projects → Tickets. Tickets live on a Board (active columns), in Backlog, or in Completed/Abandoned areas.",
|
|
29568
|
+
"Each ticket has: title, description (markdown), status, priority, size, type, tags, assignee, acceptance criteria, due date, release, and parent (for subtasks).",
|
|
29569
|
+
"Workflow transitions control which status moves are valid. Tags, priorities, sizes, and types are project-level configuration.",
|
|
29570
|
+
"",
|
|
29571
|
+
"SETUP (required before other calls):",
|
|
29572
|
+
"1. list_organizations → set_organization (sets active org context)",
|
|
29573
|
+
"2. list_projects → pick a project",
|
|
29574
|
+
"3. Cache IDs for the session: list_statuses + list_priorities + list_sizes + list_ticket_types + list_tags",
|
|
29345
29575
|
"",
|
|
29346
|
-
"
|
|
29347
|
-
"
|
|
29348
|
-
"
|
|
29349
|
-
"-
|
|
29350
|
-
"
|
|
29351
|
-
"
|
|
29576
|
+
"CREATING HIGH-QUALITY TICKETS:",
|
|
29577
|
+
"Every ticket should have: title, statusId, priorityId, sizeId, typeSlug, description (markdown with ## headings), acceptanceCriteria (Given/When/Then JSON), and tags.",
|
|
29578
|
+
"Description: Use markdown — ## Requirements, ## Technical Notes, bullet points, **bold** for key terms, `code` for identifiers. Max 5000 chars.",
|
|
29579
|
+
'Acceptance criteria: JSON array of [{"id":"ac-1","text":"Given X, When Y, Then Z","isChecked":false}]. Include 3-8 criteria.',
|
|
29580
|
+
"Tags: After create_ticket, call set_ticket_tags (use list_tags first; create missing tags with create_tag).",
|
|
29581
|
+
"Duplicate check: Call find_similar_tickets before creating to avoid duplicates.",
|
|
29352
29582
|
"",
|
|
29353
|
-
"
|
|
29583
|
+
"WORKFLOWS:",
|
|
29584
|
+
"- Create ticket: cache lookups → find_similar_tickets → create_ticket (with description + acceptanceCriteria + typeSlug) → set_ticket_tags",
|
|
29585
|
+
"- AI-assisted: check_clarity → polish_title → generate_description → suggest_attributes → create_ticket → set_ticket_tags",
|
|
29586
|
+
"- Move ticket: get_available_transitions → move_ticket (or complete_ticket / abandon_ticket)",
|
|
29587
|
+
"- Sprint planning: create_release → list_backlog_tickets → assign_tickets_to_release",
|
|
29588
|
+
"- Daily standup: get_my_tickets + get_overdue_tickets + get_tickets_due_soon",
|
|
29589
|
+
"",
|
|
29590
|
+
"TOOL INDEX: Call get_help for full tool list, content quality guidelines, and workflow chains."
|
|
29354
29591
|
].join(`
|
|
29355
29592
|
`)
|
|
29356
29593
|
});
|
|
@@ -29400,6 +29637,7 @@ function createMCPServer() {
|
|
|
29400
29637
|
return server;
|
|
29401
29638
|
}
|
|
29402
29639
|
async function startStdioServer() {
|
|
29640
|
+
logToolRegistration();
|
|
29403
29641
|
serverLogger.info("Starting in stdio mode");
|
|
29404
29642
|
if (!CONFIG.KANBO_API_KEY) {
|
|
29405
29643
|
serverLogger.fatal("KANBO_API_KEY environment variable is required");
|
|
@@ -43819,6 +44057,9 @@ async function handleCliCommand(command) {
|
|
|
43819
44057
|
case "whoami":
|
|
43820
44058
|
await Promise.resolve().then(() => (init_whoami(), exports_whoami)).then((m) => m.whoami());
|
|
43821
44059
|
return true;
|
|
44060
|
+
case "install":
|
|
44061
|
+
await Promise.resolve().then(() => (init_install(), exports_install)).then((m) => m.install());
|
|
44062
|
+
return true;
|
|
43822
44063
|
case "help":
|
|
43823
44064
|
case "--help":
|
|
43824
44065
|
case "-h":
|
|
@@ -43842,7 +44083,8 @@ function showHelp() {
|
|
|
43842
44083
|
|
|
43843
44084
|
Commands:
|
|
43844
44085
|
(none) Start the MCP server (default)
|
|
43845
|
-
login Authenticate via browser OAuth
|
|
44086
|
+
login Authenticate via browser OAuth + register MCP server
|
|
44087
|
+
install Register MCP server with detected editors
|
|
43846
44088
|
logout Remove stored credentials
|
|
43847
44089
|
whoami Show current authentication status
|
|
43848
44090
|
help Show this help message
|
|
@@ -43856,7 +44098,8 @@ function showHelp() {
|
|
|
43856
44098
|
PORT HTTP server port (default: 8081)
|
|
43857
44099
|
|
|
43858
44100
|
Examples:
|
|
43859
|
-
kanbo-mcp login # Authenticate
|
|
44101
|
+
kanbo-mcp login # Authenticate + auto-register MCP server
|
|
44102
|
+
kanbo-mcp install # Register MCP server with editors
|
|
43860
44103
|
kanbo-mcp # Start MCP server
|
|
43861
44104
|
kanbo-mcp whoami # Check auth status
|
|
43862
44105
|
`);
|