mcp-jira-stdio 1.1.0 → 1.1.3

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 CHANGED
@@ -3,6 +3,12 @@
3
3
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0%2B-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
4
4
  [![Node](https://img.shields.io/badge/Node.js-18%2B-339933?logo=node.js&logoColor=white)](https://nodejs.org)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![npm version](https://badge.fury.io/js/mcp-jira-stdio.svg)](https://www.npmjs.com/package/mcp-jira-stdio)
7
+ [![MCP Server](https://img.shields.io/badge/MCP-Server-blue)](https://glama.ai/mcp/servers)
8
+
9
+ <a href="https://glama.ai/mcp/servers/@freema/mcp-jira-stdio">
10
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@freema/mcp-jira-stdio/badge" />
11
+ </a>
6
12
 
7
13
  A Model Context Protocol (MCP) server for Jira API integration. Enables reading, writing, and managing Jira issues and projects directly from your MCP client (e.g., Claude Desktop).
8
14
 
package/dist/index.js CHANGED
@@ -436,7 +436,7 @@ var require_package2 = __commonJS({
436
436
  "package.json"(exports, module) {
437
437
  module.exports = {
438
438
  name: "mcp-jira-stdio",
439
- version: "1.1.0",
439
+ version: "1.1.3",
440
440
  description: "Model Context Protocol (MCP) server for Jira API integration",
441
441
  author: "graslt",
442
442
  license: "MIT",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/dotenv/package.json","../node_modules/dotenv/lib/main.js","../package.json","../src/config/constants.ts","../src/utils/logger.ts","../src/utils/jira-auth.ts","../src/utils/validators.ts","../src/types/tools.ts","../src/utils/api-helpers.ts","../src/utils/redaction.ts","../src/utils/formatters.ts","../src/utils/error-handler.ts","../src/tools/get-visible-projects.ts","../src/tools/get-issue.ts","../src/tools/search-issues.ts","../src/tools/get-my-issues.ts","../src/tools/get-issue-types.ts","../src/tools/get-users.ts","../src/tools/get-priorities.ts","../src/tools/get-statuses.ts","../src/tools/create-issue.ts","../src/tools/update-issue.ts","../src/tools/add-comment.ts","../src/tools/get-project-info.ts","../src/tools/create-subtask.ts","../src/index.ts"],"names":["path","require_package","z","log","message"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"17.2.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '🔐 encrypt with Dotenvx: https://dotenvx.com',\n '🔐 prevent committing .env to code: https://dotenvx.com/precommit',\n '🔐 prevent building .env in docker: https://dotenvx.com/prebuild',\n '📡 observe env with Radar: https://dotenvx.com/radar',\n '📡 auto-backup env with Radar: https://dotenvx.com/radar',\n '📡 version env with Radar: https://dotenvx.com/radar',\n '🛠️ run anywhere with `dotenvx run -- yourcommand`',\n '⚙️ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n '⚙️ enable debug logging with { debug: true }',\n '⚙️ override existing env vars with { override: true }',\n '⚙️ suppress all logs with { quiet: true }',\n '⚙️ write to custom object with { processEnv: myObject }',\n '⚙️ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"mcp-jira-stdio\",\n \"version\": \"1.1.0\",\n \"description\": \"Model Context Protocol (MCP) server for Jira API integration\",\n \"author\": \"graslt\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mcp-jira-stdio\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsx watch src/index.ts\",\n \"build\": \"tsup\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf dist\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src --ext .ts\",\n \"lint:fix\": \"eslint src --ext .ts --fix\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"check\": \"npm run typecheck && npm run lint && npm run format:check\",\n \"check:all\": \"npm run check && npm run test:run && npm run build\",\n \"prepublishOnly\": \"npm run clean && npm run build\",\n \"inspector\": \"npx @modelcontextprotocol/inspector node dist/index.js\",\n \"inspector:dev\": \"NODE_ENV=development npx @modelcontextprotocol/inspector npx tsx src/index.ts\",\n \"setup:mcp\": \"node scripts/setup-mcp-config.js\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:watch\": \"vitest watch\",\n \"test:ui\": \"vitest --ui\",\n \"test:connection\": \"node scripts/test-connection.cjs\"\n },\n \"keywords\": [\n \"mcp\",\n \"model-context-protocol\",\n \"jira\",\n \"atlassian\",\n \"api\",\n \"claude\",\n \"ai\"\n ],\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.1\",\n \"zod\": \"^3.22.4\",\n \"axios\": \"^1.7.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.5.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"@vitest/ui\": \"^2.0.0\",\n \"dotenv\": \"^17.2.1\",\n \"eslint\": \"^9.9.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.2.0\",\n \"prettier\": \"^3.5.0\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.16.0\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"scripts\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freema/mcp-jira-stdio.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/freema/mcp-jira-stdio/issues\"\n },\n \"homepage\": \"https://github.com/freema/mcp-jira-stdio#readme\",\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const JIRA_CONFIG = {\n API_VERSION: '3',\n BASE_PATH: '/rest/api/3',\n DEFAULT_TIMEOUT: 30000,\n MAX_RETRIES: 3,\n RETRY_DELAY: 1000,\n RATE_LIMIT: {\n MAX_REQUESTS: 100,\n WINDOW_MS: 60000, // 1 minute\n },\n} as const;\n\nexport const ERROR_MESSAGES = {\n AUTH_REQUIRED:\n 'Jira authentication required. Set JIRA_BASE_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.',\n INVALID_CREDENTIALS: 'Invalid Jira credentials. Please check your email and API token.',\n PROJECT_NOT_FOUND: \"Project not found or you don't have permission to access it.\",\n ISSUE_NOT_FOUND: \"Issue not found or you don't have permission to access it.\",\n RATE_LIMIT_EXCEEDED: 'Jira API rate limit exceeded. Please wait and try again.',\n NETWORK_ERROR: 'Network error occurred while connecting to Jira.',\n VALIDATION_ERROR: 'Input validation failed.',\n} as const;\n\nexport const TOOL_NAMES = {\n GET_VISIBLE_PROJECTS: 'jira_get_visible_projects',\n GET_ISSUE: 'jira_get_issue',\n SEARCH_ISSUES: 'jira_search_issues',\n GET_MY_ISSUES: 'jira_get_my_issues',\n GET_ISSUE_TYPES: 'jira_get_issue_types',\n GET_USERS: 'jira_get_users',\n GET_PRIORITIES: 'jira_get_priorities',\n GET_STATUSES: 'jira_get_statuses',\n CREATE_ISSUE: 'jira_create_issue',\n UPDATE_ISSUE: 'jira_update_issue',\n ADD_COMMENT: 'jira_add_comment',\n GET_PROJECT_INFO: 'jira_get_project_info',\n CREATE_SUBTASK: 'jira_create_subtask',\n} as const;\n","type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\nconst levels: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n silent: 99,\n};\n\nfunction getLevel(): LogLevel {\n const env = (\n process.env.LOG_LEVEL || (process.env.NODE_ENV === 'development' ? 'debug' : 'info')\n ).toLowerCase();\n if (env === 'debug' || env === 'info' || env === 'warn' || env === 'error' || env === 'silent')\n return env;\n return 'info';\n}\n\nexport function createLogger(scope: string) {\n const level = getLevel();\n const min = levels[level];\n\n const fmt = (msg: any) => (typeof msg === 'string' ? msg : JSON.stringify(msg));\n const prefix = (lvl: string) => `[${lvl.toUpperCase()}] ${scope}:`;\n\n return {\n debug: (...args: any[]) => {\n if (min <= levels.debug) console.error(prefix('debug'), ...args.map(fmt));\n },\n info: (...args: any[]) => {\n if (min <= levels.info) console.error(prefix('info'), ...args.map(fmt));\n },\n warn: (...args: any[]) => {\n if (min <= levels.warn) console.error(prefix('warn'), ...args.map(fmt));\n },\n error: (...args: any[]) => {\n if (min <= levels.error) console.error(prefix('error'), ...args.map(fmt));\n },\n };\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { JiraAuthConfig, RetryConfig } from '../types/common.js';\nimport { JIRA_CONFIG, ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n// keep client simple to match test expectations\n\nlet jiraClient: AxiosInstance | null = null;\nconst log = createLogger('jira-auth');\n\nexport function validateAuth(): JiraAuthConfig {\n const baseUrl = process.env.JIRA_BASE_URL;\n const email = process.env.JIRA_EMAIL;\n const apiToken = process.env.JIRA_API_TOKEN;\n\n if (!baseUrl || !email || !apiToken) {\n throw new Error(ERROR_MESSAGES.AUTH_REQUIRED);\n }\n\n // Normalize base URL\n const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n\n return {\n baseUrl: normalizedBaseUrl,\n email,\n apiToken,\n };\n}\n\nexport function getAuthenticatedClient(): AxiosInstance {\n if (jiraClient) {\n return jiraClient;\n }\n\n const auth = validateAuth();\n\n jiraClient = axios.create({\n baseURL: `${auth.baseUrl}${JIRA_CONFIG.BASE_PATH}`,\n timeout: JIRA_CONFIG.DEFAULT_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n auth: {\n username: auth.email,\n password: auth.apiToken,\n },\n });\n\n // Add request interceptor for logging\n jiraClient.interceptors.request.use(\n (config) => {\n log.debug(`Request: ${config.method?.toUpperCase()} ${config.baseURL}${config.url}`);\n return config;\n },\n (error) => {\n log.error('Request error:', error);\n return Promise.reject(error);\n }\n );\n\n // Add response interceptor for error handling\n jiraClient.interceptors.response.use(\n (response) => {\n log.debug(`Response: ${response.status} ${response.config.url}`);\n return response;\n },\n (error) => {\n log.error(`Jira API error: ${error.response?.status} ${error.config?.url}`);\n\n if (error.response?.status === 401) {\n throw new Error(ERROR_MESSAGES.INVALID_CREDENTIALS);\n } else if (error.response?.status === 404) {\n throw new Error('Resource not found or insufficient permissions');\n } else if (error.response?.status === 429) {\n throw new Error(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n } else if (!error.response) {\n throw new Error(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n return Promise.reject(error);\n }\n );\n\n return jiraClient;\n}\n\nexport async function makeJiraRequest<T = any>(\n config: AxiosRequestConfig,\n retryConfig: RetryConfig = {\n maxRetries: JIRA_CONFIG.MAX_RETRIES,\n retryDelay: JIRA_CONFIG.RETRY_DELAY,\n }\n): Promise<T> {\n const client = getAuthenticatedClient();\n let lastError: any;\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const response = await client.request<T>(config);\n return response.data;\n } catch (error: any) {\n lastError = error;\n\n // Don't retry on authentication or client errors\n if (\n error.response?.status === 401 ||\n error.response?.status === 403 ||\n error.response?.status === 404 ||\n (error.response?.status >= 400 &&\n error.response?.status < 500 &&\n error.response?.status !== 429)\n ) {\n break;\n }\n\n // Don't retry if custom condition fails\n if (retryConfig.retryCondition && !retryConfig.retryCondition(error)) {\n break;\n }\n\n // Don't retry on last attempt\n if (attempt === retryConfig.maxRetries) {\n break;\n }\n\n // Compute backoff respecting Retry-After if present\n const retryAfterHeader = error.response?.headers?.['retry-after'];\n let delayMs = 0;\n if (retryAfterHeader) {\n const seconds = Number(retryAfterHeader);\n delayMs = !Number.isNaN(seconds) ? seconds * 1000 : retryConfig.retryDelay;\n } else {\n const base = retryConfig.retryDelay * Math.pow(2, attempt);\n const jitter = Math.floor(Math.random() * (retryConfig.retryDelay / 2));\n delayMs = base + jitter;\n }\n log.warn(\n `Retrying request in ${delayMs}ms (attempt ${attempt + 1}/${retryConfig.maxRetries})`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw lastError;\n}\n\nexport async function testConnection(): Promise<boolean> {\n try {\n await makeJiraRequest({\n method: 'GET',\n url: '/myself',\n });\n return true;\n } catch (error) {\n log.error('Connection test failed:', error);\n return false;\n }\n}\n","import { z, ZodSchema } from 'zod';\nimport { ERROR_MESSAGES } from '../config/constants.js';\n\nexport function validateInput<T>(schema: ZodSchema<T>, input: unknown): T {\n try {\n return schema.parse(input);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`);\n throw new Error(`${ERROR_MESSAGES.VALIDATION_ERROR}\\n${errorMessages.join('\\n')}`);\n }\n throw error;\n }\n}\n\nexport function isValidIssueKey(key: string): boolean {\n // Jira issue key format: PROJECT-123\n return /^[A-Z][A-Z0-9]*-\\d+$/.test(key);\n}\n\nexport function isValidProjectKey(key: string): boolean {\n // Jira project key format: uppercase letters and numbers, max 10 chars\n return /^[A-Z][A-Z0-9]{0,9}$/.test(key);\n}\n\nexport function isValidJQL(jql: string): boolean {\n // Basic JQL validation - non-empty string\n return typeof jql === 'string' && jql.trim().length > 0;\n}\n\nexport function sanitizeJQL(jql: string): string {\n // Remove potentially dangerous characters and normalize whitespace\n return jql\n .replace(/[<>\"'`]/g, '') // Remove potentially dangerous chars\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim();\n}\n\nexport function validatePagination(startAt: number, maxResults: number): void {\n if (startAt < 0) {\n throw new Error('startAt must be non-negative');\n }\n if (maxResults < 1 || maxResults > 100) {\n throw new Error('maxResults must be between 1 and 100');\n }\n}\n\n// Extract a Jira issue key from a free-form string or URL\nexport function extractIssueKey(input: string): string | null {\n if (typeof input !== 'string') return null;\n const match = input.match(/[A-Z][A-Z0-9]*-\\d+/);\n return match ? match[0] : null;\n}\n","import { z } from 'zod';\nimport { isValidIssueKey, isValidProjectKey } from '../utils/validators.js';\n\n// Get visible projects\nexport const GetVisibleProjectsInputSchema = z.object({\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n recent: z.number().optional().describe('Limit to recently accessed projects'),\n});\n\nexport type GetVisibleProjectsInput = z.infer<typeof GetVisibleProjectsInputSchema>;\n\n// Get issue\nexport const GetIssueInputSchema = z.object({\n issueKey: z\n .string()\n .min(1)\n .describe(\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)'\n ),\n expand: z.array(z.string()).optional().describe('Additional issue details to include'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n});\n\nexport type GetIssueInput = z.infer<typeof GetIssueInputSchema>;\n\n// Search issues\nexport const SearchIssuesInputSchema = z.object({\n jql: z.string().min(1).describe('JQL query string'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type SearchIssuesInput = z.infer<typeof SearchIssuesInputSchema>;\n\n// Create issue\nexport const CreateIssueInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key where the issue will be created')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n summary: z.string().min(1).describe('Issue summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Issue description. Accepts plain text or ADF object.'),\n issueType: z.string().describe('Issue type (e.g., Bug, Story, Task)'),\n priority: z.string().optional().describe('Issue priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Issue labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n customFields: z\n .record(z.any())\n .optional()\n .describe(\n 'Additional Jira field mappings, e.g. { \"customfield_12345\": value }. Use for required custom fields.'\n ),\n returnIssue: z\n .boolean()\n .optional()\n .describe('When false, skip fetching full issue after creation'),\n});\n\nexport type CreateIssueInput = z.infer<typeof CreateIssueInputSchema>;\n\n// Update issue\nexport const UpdateIssueInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to update')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n summary: z.string().optional().describe('New summary'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('New description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('New priority'),\n assignee: z.string().optional().describe('New assignee account ID'),\n labels: z.array(z.string()).optional().describe('New labels (replaces existing)'),\n components: z.array(z.string()).optional().describe('New components (replaces existing)'),\n returnIssue: z.boolean().optional().describe('When false, skip fetching full issue after update'),\n});\n\nexport type UpdateIssueInput = z.infer<typeof UpdateIssueInputSchema>;\n\n// Get my issues\nexport const GetMyIssuesInputSchema = z.object({\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type GetMyIssuesInput = z.infer<typeof GetMyIssuesInputSchema>;\n\n// Get issue types\nexport const GetIssueTypesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get issue types for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetIssueTypesInput = z.infer<typeof GetIssueTypesInputSchema>;\n\n// Get users\nexport const GetUsersInputSchema = z.object({\n query: z.string().optional().describe('Search query for user name or email'),\n username: z.string().optional().describe('Specific username to search for'),\n accountId: z.string().optional().describe('Specific account ID to search for'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z.number().min(1).max(50).default(50).describe('Maximum number of results to return'),\n});\n\nexport type GetUsersInput = z.infer<typeof GetUsersInputSchema>;\n\n// Get priorities\nexport const GetPrioritiesInputSchema = z.object({});\n\nexport type GetPrioritiesInput = z.infer<typeof GetPrioritiesInputSchema>;\n\n// Get statuses\nexport const GetStatusesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get statuses for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n issueTypeId: z\n .string()\n .optional()\n .describe('Issue type ID to get statuses for specific issue type'),\n});\n\nexport type GetStatusesInput = z.infer<typeof GetStatusesInputSchema>;\n\n// Add comment\nexport const AddCommentInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to add comment to')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n body: z.string().min(1).describe('Comment body text'),\n visibility: z\n .object({\n type: z.enum(['group', 'role']).describe('Visibility type'),\n value: z.string().describe('Group name or role name'),\n })\n .optional()\n .describe('Comment visibility restrictions'),\n});\n\nexport type AddCommentInput = z.infer<typeof AddCommentInputSchema>;\n\n// Get project info\nexport const GetProjectInfoInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get detailed information for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n});\n\nexport type GetProjectInfoInput = z.infer<typeof GetProjectInfoInputSchema>;\n\n// Create subtask\nexport const CreateSubtaskInputSchema = z.object({\n parentIssueKey: z.string().describe('Parent issue key'),\n summary: z.string().min(1).describe('Subtask summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Subtask description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('Subtask priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Subtask labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n});\n\nexport type CreateSubtaskInput = z.infer<typeof CreateSubtaskInputSchema>;\n","import { AxiosRequestConfig } from 'axios';\nimport { makeJiraRequest } from './jira-auth.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateIssueResponse,\n} from '../types/jira.js';\nimport { PaginatedResponse } from '../types/common.js';\nimport { validatePagination, sanitizeJQL } from './validators.js';\n\n// Convert a plain string into a nicely structured Atlassian Document Format (ADF) document.\n// Heuristics:\n// - Lines like \"Heading:\" become heading level 3 without the colon\n// - Consecutive lines starting with \"1. \", \"2. \", ... form an orderedList\n// - Lines starting with \"- \", \"• \" form a bulletList\n// - URLs are linkified\nfunction ensureAdfDescription(desc: any): any {\n if (!desc) return desc;\n if (typeof desc === 'object') return desc; // assume already ADF\n if (typeof desc !== 'string') return desc;\n\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n\n const makeTextNodes = (text: string): any[] => {\n const nodes: any[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = urlRegex.exec(text)) !== null) {\n const [url] = match;\n const start = match.index;\n if (start > lastIndex) {\n nodes.push({ type: 'text', text: text.slice(lastIndex, start) });\n }\n nodes.push({ type: 'text', text: url, marks: [{ type: 'link', attrs: { href: url } }] });\n lastIndex = start + url.length;\n }\n if (lastIndex < text.length) {\n nodes.push({ type: 'text', text: text.slice(lastIndex) });\n }\n return nodes.length ? nodes : [{ type: 'text', text }];\n };\n\n const lines = desc.split(/\\r?\\n/);\n const content: any[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const raw = lines[i] ?? '';\n const line = raw.trimEnd();\n if (line.trim().length === 0) {\n // Blank line – add empty paragraph for spacing\n content.push({ type: 'paragraph', content: [] });\n i++;\n continue;\n }\n\n // Section label on its own line: \"Something:\" → bold label paragraph\n const soloLabelMatch = /^(?<title>[^:]{2,}):\\s*$/.exec(line);\n if (soloLabelMatch?.groups?.title) {\n const title = `${soloLabelMatch.groups.title}:`;\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: title, marks: [{ type: 'strong' }] }],\n });\n i++;\n\n // Special-case: Stack trace section → capture following non-empty lines as codeBlock\n if (/^stack\\s*trace$/i.test(soloLabelMatch.groups.title.trim())) {\n const codeLines: string[] = [];\n while (i < lines.length && (lines[i] ?? '').trim().length > 0) {\n codeLines.push(lines[i] as string);\n i++;\n }\n if (codeLines.length) {\n content.push({\n type: 'codeBlock',\n attrs: { language: '' },\n content: [{ type: 'text', text: codeLines.join('\\n') }],\n });\n }\n }\n continue;\n }\n\n // Ordered list group\n if (/^\\d+\\.\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^\\d+\\.\\s+/.test(cur)) break;\n const itemText = cur.replace(/^\\d+\\.\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'orderedList', content: items });\n continue;\n }\n\n // Bullet list group\n if (/^(?:[-•])\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^(?:[-•])\\s+/.test(cur)) break;\n const itemText = cur.replace(/^(?:[-•])\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'bulletList', content: items });\n continue;\n }\n\n // Label: value → bold label then text\n const labelMatch =\n /^(?<label>[A-ZÁČĎÉĚÍĽĹŇÓŘŠŤÚŮÝŽa-záčďéěíľĺňóřšťúůýž\\s]+):\\s+(?<value>.+)$/.exec(line);\n if (labelMatch?.groups?.label && labelMatch.groups.value) {\n content.push({\n type: 'paragraph',\n content: [\n { type: 'text', text: `${labelMatch.groups.label}:`, marks: [{ type: 'strong' }] },\n { type: 'text', text: ' ' },\n ...makeTextNodes(labelMatch.groups.value),\n ],\n });\n i++;\n continue;\n }\n\n // Fallback paragraph; make lines that look like paths/methods monospace\n if (/^\\//.test(line) || /[A-Za-z]:\\\\/.test(line)) {\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: line, marks: [{ type: 'code' }] }],\n });\n } else {\n content.push({ type: 'paragraph', content: makeTextNodes(line) });\n }\n i++;\n }\n\n return { type: 'doc', version: 1, content };\n}\n\nexport async function getVisibleProjects(\n options: {\n expand?: string[];\n recent?: number;\n } = {}\n): Promise<JiraProject[]> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.recent) {\n params.recent = options.recent;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/project/search',\n params,\n };\n\n const response = await makeJiraRequest<PaginatedResponse<JiraProject>>(config);\n return response.values;\n}\n\nexport async function getIssue(\n issueKey: string,\n options: {\n expand?: string[];\n fields?: string[];\n } = {}\n): Promise<JiraIssue> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.fields) {\n params.fields = options.fields.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/issue/${issueKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraIssue>(config);\n}\n\nexport async function searchIssues(options: {\n jql: string;\n startAt?: number;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n}): Promise<JiraSearchResult> {\n const { jql, startAt = 0, maxResults = 50 } = options;\n\n // Validate pagination\n validatePagination(startAt, maxResults);\n\n // Sanitize JQL\n const sanitizedJql = sanitizeJQL(jql);\n\n const data: Record<string, any> = {\n jql: sanitizedJql,\n startAt,\n maxResults,\n };\n\n if (options.fields) {\n data.fields = options.fields;\n }\n\n if (options.expand) {\n data.expand = options.expand;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/search',\n data,\n };\n\n return await makeJiraRequest<JiraSearchResult>(config);\n}\n\nexport async function createIssue(\n issueData: {\n projectKey: string;\n summary: string;\n description?: string;\n issueType: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n customFields?: Record<string, any>;\n },\n options: { returnIssue?: boolean } = { returnIssue: true }\n): Promise<JiraIssue | string> {\n const fields: Record<string, any> = {\n project: { key: issueData.projectKey },\n summary: issueData.summary,\n issuetype: { name: issueData.issueType },\n };\n\n if (issueData.description !== undefined) {\n fields.description = ensureAdfDescription(issueData.description);\n }\n\n if (issueData.priority) {\n fields.priority = { name: issueData.priority };\n }\n\n if (issueData.assignee) {\n fields.assignee = { accountId: issueData.assignee };\n }\n\n if (issueData.labels && issueData.labels.length > 0) {\n fields.labels = issueData.labels;\n }\n\n if (issueData.components && issueData.components.length > 0) {\n fields.components = issueData.components.map((name) => ({ name }));\n }\n\n // Merge any custom fields provided by the caller\n if (issueData.customFields && typeof issueData.customFields === 'object') {\n for (const [key, value] of Object.entries(issueData.customFields)) {\n // Do not overwrite standard fields if accidentally duplicated\n if (!(key in fields)) {\n fields[key] = value;\n }\n }\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<{ key: string; id: string; self: string }>(config);\n\n if (options.returnIssue === false) {\n return response.key;\n }\n\n // Return the created issue\n return await getIssue(response.key);\n}\n\nexport async function updateIssue(\n issueKey: string,\n updates: {\n summary?: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n }\n): Promise<void> {\n const fields: Record<string, any> = {};\n\n if (updates.summary !== undefined) {\n fields.summary = updates.summary;\n }\n\n if (updates.description !== undefined) {\n fields.description = ensureAdfDescription(updates.description);\n }\n\n if (updates.priority !== undefined) {\n fields.priority = { name: updates.priority };\n }\n\n if (updates.assignee !== undefined) {\n fields.assignee = updates.assignee ? { accountId: updates.assignee } : null;\n }\n\n if (updates.labels !== undefined) {\n fields.labels = updates.labels;\n }\n\n if (updates.components !== undefined) {\n fields.components = updates.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'PUT',\n url: `/issue/${issueKey}`,\n data: { fields },\n };\n\n await makeJiraRequest(config);\n}\n\nexport async function getCurrentUser(): Promise<JiraUser> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/myself',\n };\n\n return await makeJiraRequest<JiraUser>(config);\n}\n\nexport async function getMyIssues(\n options: {\n startAt?: number;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n } = {}\n): Promise<JiraSearchResult> {\n const jql = `assignee = currentUser() ORDER BY updated DESC`;\n\n const searchParams: any = {\n jql,\n startAt: options.startAt || 0,\n maxResults: options.maxResults || 50,\n };\n\n if (options.fields !== undefined) searchParams.fields = options.fields;\n if (options.expand !== undefined) searchParams.expand = options.expand;\n\n return await searchIssues(searchParams);\n}\n\nexport async function getIssueTypes(projectKey?: string): Promise<JiraIssueType[]> {\n let url = '/issuetype';\n\n if (projectKey) {\n url = `/project/${projectKey}/issuetype`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n return await makeJiraRequest<JiraIssueType[]>(config);\n}\n\nexport async function getUsers(\n options: {\n query?: string;\n username?: string;\n accountId?: string;\n startAt?: number;\n maxResults?: number;\n } = {}\n): Promise<JiraUser[]> {\n const params: Record<string, any> = {};\n\n if (options.query) {\n params.query = options.query;\n }\n\n if (options.username) {\n params.username = options.username;\n }\n\n if (options.accountId) {\n params.accountId = options.accountId;\n }\n\n if (options.startAt !== undefined) {\n params.startAt = options.startAt;\n }\n\n if (options.maxResults !== undefined) {\n params.maxResults = options.maxResults;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/user/search',\n params,\n };\n\n return await makeJiraRequest<JiraUser[]>(config);\n}\n\nexport async function getPriorities(): Promise<JiraPriority[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/priority',\n };\n\n return await makeJiraRequest<JiraPriority[]>(config);\n}\n\nexport async function getStatuses(\n options: {\n projectKey?: string;\n issueTypeId?: string;\n } = {}\n): Promise<JiraStatus[]> {\n let url = '/status';\n\n if (options.projectKey && options.issueTypeId) {\n url = `/project/${options.projectKey}/statuses`;\n } else if (options.projectKey) {\n url = `/project/${options.projectKey}/statuses`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n if (options.projectKey) {\n const response =\n await makeJiraRequest<Array<{ id?: string; name: string; statuses: JiraStatus[] }>>(config);\n if (options.issueTypeId) {\n const match = response.find(\n (issueType) =>\n issueType.id === options.issueTypeId || issueType.name === options.issueTypeId\n );\n if (match) return match.statuses;\n }\n // Flatten the statuses from all issue types\n return response.flatMap((issueType) => issueType.statuses);\n }\n return await makeJiraRequest<JiraStatus[]>(config);\n}\n\nexport async function addComment(\n issueKey: string,\n body: string,\n visibility?: { type: string; value: string }\n): Promise<JiraComment> {\n const data: any = { body };\n\n if (visibility) {\n data.visibility = visibility;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: `/issue/${issueKey}/comment`,\n data,\n };\n\n return await makeJiraRequest<JiraComment>(config);\n}\n\nexport async function getProjectDetails(\n projectKey: string,\n expand?: string[]\n): Promise<JiraProjectDetails> {\n const params: Record<string, any> = {};\n\n if (expand) {\n params.expand = expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/project/${projectKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraProjectDetails>(config);\n}\n\nexport async function createSubtask(\n parentIssueKey: string,\n subtaskData: {\n summary: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n }\n): Promise<JiraIssue> {\n // First get parent issue to determine project and subtask issue type\n const parentIssue = await getIssue(parentIssueKey);\n const projectKey = parentIssue.fields.project.key;\n\n // Get available issue types for the project\n const issueTypes = await getIssueTypes(projectKey);\n const subtaskType = issueTypes.find((type) => type.subtask);\n\n if (!subtaskType) {\n throw new Error(`No subtask issue type found for project ${projectKey}`);\n }\n\n const fields: Record<string, any> = {\n project: { key: projectKey },\n parent: { key: parentIssueKey },\n summary: subtaskData.summary,\n issuetype: { id: subtaskType.id },\n };\n\n if (subtaskData.description !== undefined) {\n fields.description = ensureAdfDescription(subtaskData.description);\n }\n\n if (subtaskData.priority) {\n fields.priority = { name: subtaskData.priority };\n }\n\n if (subtaskData.assignee) {\n fields.assignee = { accountId: subtaskData.assignee };\n }\n\n if (subtaskData.labels && subtaskData.labels.length > 0) {\n fields.labels = subtaskData.labels;\n }\n\n if (subtaskData.components && subtaskData.components.length > 0) {\n fields.components = subtaskData.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<JiraCreateIssueResponse>(config);\n\n // Return the created subtask\n return await getIssue(response.key);\n}\n","export function isRedactionEnabled(): boolean {\n const val = process.env.MCP_REDACT_SENSITIVE || process.env.REDACT_SENSITIVE;\n return val === '1' || val?.toLowerCase() === 'true';\n}\n\nexport function maybeRedactAccountId(accountId?: string | null): string {\n if (!accountId) return 'N/A';\n if (!isRedactionEnabled()) return accountId;\n // Show first 4 chars and mask the rest to keep stable identifiers without full disclosure\n const head = accountId.slice(0, 4);\n return `${head}…`; // masked\n}\n\nexport function maybeRedactEmail(email?: string | null): string {\n if (!email) return 'N/A';\n if (!isRedactionEnabled()) return email;\n return 'hidden';\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { maybeRedactAccountId, maybeRedactEmail } from './redaction.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n} from '../types/jira.js';\n\nexport function formatProjectsResponse(projects: JiraProject[]): McpToolResponse {\n const projectsList = projects\n .map(\n (project) =>\n `• **${project.key}** - ${project.name}\\n ${project.description || 'No description'}\\n Type: ${project.projectTypeKey} | Private: ${project.isPrivate ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${projects.length} visible project(s):\\n\\n${projectsList}`,\n },\n ],\n };\n}\n\nfunction adfToPlainText(adf: any): string {\n // Very lightweight ADF to text conversion (best-effort)\n try {\n const walk = (node: any): string => {\n if (!node) return '';\n switch (node.type) {\n case 'text':\n return node.text || '';\n case 'paragraph':\n case 'heading':\n case 'blockquote':\n return (node.content || []).map(walk).join('');\n case 'codeBlock':\n return '\\n' + (node.content || []).map(walk).join('') + '\\n';\n case 'bulletList':\n case 'orderedList':\n return (node.content || []).map(walk).join('\\n');\n case 'listItem':\n return '• ' + (node.content || []).map(walk).join('');\n case 'hardBreak':\n return '\\n';\n default:\n if (Array.isArray(node.content)) return node.content.map(walk).join('');\n return '';\n }\n };\n if (adf && Array.isArray(adf.content)) {\n return adf.content.map(walk).join('\\n').trim();\n }\n } catch {\n // ignore and fallback\n }\n return '';\n}\n\nexport function formatIssueResponse(issue: JiraIssue): McpToolResponse {\n const { key, fields } = issue;\n\n const summary = fields?.summary || 'No summary';\n\n const assigneeText = fields?.assignee\n ? `${fields.assignee.displayName} (${maybeRedactAccountId(fields.assignee.accountId)})`\n : 'Unassigned';\n\n const reporterText = fields?.reporter\n ? `${fields.reporter.displayName} (${maybeRedactAccountId(fields.reporter.accountId)})`\n : 'Unknown';\n\n const labelsArray = Array.isArray(fields?.labels) ? fields.labels : [];\n const labelsText = labelsArray.length > 0 ? labelsArray.join(', ') : 'None';\n\n const componentsArray = Array.isArray(fields?.components) ? fields.components : [];\n const componentsText =\n componentsArray.length > 0 ? componentsArray.map((c) => c.name).join(', ') : 'None';\n\n let description = fields?.description as any;\n if (description && typeof description === 'object') {\n const parsed = adfToPlainText(description);\n description = parsed || '[rich text description omitted]';\n }\n if (!description || typeof description !== 'string') {\n description = 'No description provided';\n }\n\n const createdText = fields?.created ? new Date(fields.created).toISOString() : 'N/A';\n const updatedText = fields?.updated ? new Date(fields.updated).toISOString() : 'N/A';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${key}: ${summary}**\\n\\n**Status:** ${fields?.status?.name || 'Unknown'}\\n**Priority:** ${fields?.priority?.name || 'None'}\\n**Assignee:** ${assigneeText}\\n**Reporter:** ${reporterText}\\n**Project:** ${fields?.project?.name || 'Unknown'} (${fields?.project?.key || 'N/A'})\\n**Issue Type:** ${fields?.issuetype?.name || 'Unknown'}\\n**Labels:** ${labelsText}\\n**Components:** ${componentsText}\\n**Created:** ${createdText}\\n**Updated:** ${updatedText}\\n\\n**Description:**\\n${description}`,\n },\n ],\n };\n}\n\nexport function formatSearchResultsResponse(result: JiraSearchResult): McpToolResponse {\n if (result.issues.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issues found matching your search criteria.',\n },\n ],\n };\n }\n\n const issuesList = result.issues\n .map((issue) => {\n const assignee = issue.fields.assignee?.displayName || 'Unassigned';\n return `• **${issue.key}** - ${issue.fields.summary}\\n Status: ${issue.fields.status.name} | Assignee: ${assignee} | Priority: ${issue.fields.priority?.name || 'None'}`;\n })\n .join('\\n\\n');\n\n const rangeStart = result.startAt + 1;\n const rangeEnd = Math.min(result.startAt + result.maxResults, result.total);\n const showRangeInline = result.total > result.maxResults || result.startAt > 0;\n const paginationInfo = showRangeInline\n ? `\\n\\n*Showing ${rangeStart}-${rangeEnd} of ${result.total} results*`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${result.total} issue(s)${showRangeInline ? ` (showing ${rangeStart}-${rangeEnd})` : ''}:\\n\\n${issuesList}${paginationInfo}`,\n },\n ],\n };\n}\n\nexport function formatErrorResponse(error: any): McpToolResponse {\n let errorMessage = 'An unexpected error occurred.';\n\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (error instanceof Error) {\n errorMessage = error.message;\n } else if (error?.response?.data) {\n const jiraError = error.response.data;\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n errorMessage = jiraError.errorMessages.join(', ');\n } else if (jiraError.errors) {\n errorMessage = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `❌ Error: ${errorMessage}`,\n },\n ],\n };\n}\n\nexport function formatSuccessResponse(message: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: `✅ ${message}`,\n },\n ],\n };\n}\n\nexport function formatUsersResponse(users: JiraUser[]): McpToolResponse {\n if (users.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No users found matching your search criteria.',\n },\n ],\n };\n }\n\n const usersList = users\n .map(\n (user) =>\n `• **${user.displayName}** (${maybeRedactAccountId(user.accountId)})\\n Email: ${maybeRedactEmail(user.emailAddress)} | Active: ${user.active ? 'Yes' : 'No'} | Type: ${user.accountType}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${users.length} user(s):\\n\\n${usersList}`,\n },\n ],\n };\n}\n\nexport function formatIssueTypesResponse(issueTypes: JiraIssueType[]): McpToolResponse {\n if (issueTypes.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issue types found.',\n },\n ],\n };\n }\n\n const typesList = issueTypes\n .map(\n (type) =>\n `• **${type.name}** (ID: ${type.id})\\n ${type.description}\\n Subtask: ${type.subtask ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${issueTypes.length} issue type(s):\\n\\n${typesList}`,\n },\n ],\n };\n}\n\nexport function formatPrioritiesResponse(priorities: JiraPriority[]): McpToolResponse {\n if (priorities.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No priorities found.',\n },\n ],\n };\n }\n\n const prioritiesList = priorities\n .map((priority) => `• **${priority.name}** (ID: ${priority.id})\\n ${priority.description}`)\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${priorities.length} priority level(s):\\n\\n${prioritiesList}`,\n },\n ],\n };\n}\n\nexport function formatStatusesResponse(statuses: JiraStatus[]): McpToolResponse {\n if (statuses.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No statuses found.',\n },\n ],\n };\n }\n\n const statusesList = statuses\n .map(\n (status) =>\n `• **${status.name}** (ID: ${status.id})\\n ${status.description}\\n Category: ${status.statusCategory.name} (${status.statusCategory.key})`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${statuses.length} status(es):\\n\\n${statusesList}`,\n },\n ],\n };\n}\n\nexport function formatCommentResponse(comment: JiraComment): McpToolResponse {\n const visibilityText = comment.visibility\n ? `\\n**Visibility:** ${comment.visibility.type} - ${comment.visibility.value}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**Comment added successfully**\n\n**Author:** ${comment.author.displayName}\n**Created:** ${new Date(comment.created).toISOString()}${visibilityText}\n\n**Content:**\n${comment.body}`,\n },\n ],\n };\n}\n\nexport function formatProjectDetailsResponse(project: JiraProjectDetails): McpToolResponse {\n const leadText = project.lead\n ? `${project.lead.displayName} (${project.lead.accountId})`\n : 'No lead assigned';\n\n const componentsText =\n project.components.length > 0 ? project.components.map((c) => c.name).join(', ') : 'None';\n\n const versionsText =\n project.versions.length > 0 ? project.versions.map((v) => v.name).join(', ') : 'None';\n\n const issueTypesText =\n project.issueTypes.length > 0\n ? project.issueTypes.map((t) => `${t.name}${t.subtask ? ' (Subtask)' : ''}`).join(', ')\n : 'None';\n\n const rolesText =\n Object.keys(project.roles).length > 0 ? Object.keys(project.roles).join(', ') : 'None';\n\n const insightText = project.insight\n ? `\\n\\n**Project Insights:**\nTotal Issues: ${project.insight.totalIssueCount}\nLast Updated: ${new Date(project.insight.lastIssueUpdateTime).toISOString()}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${project.key}: ${project.name}**\n\n**Description:** ${project.description || 'No description'}\n**Type:** ${project.projectTypeKey}\n**Private:** ${project.isPrivate ? 'Yes' : 'No'}\n**Lead:** ${leadText}\n\n**Components:** ${componentsText}\n**Versions:** ${versionsText}\n**Issue Types:** ${issueTypesText}\n**Roles:** ${rolesText}${insightText}`,\n },\n ],\n };\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { formatErrorResponse } from './formatters.js';\nimport { ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger('error-handler');\n\nexport class JiraApiError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public jiraErrors?: string[],\n public originalError?: any\n ) {\n super(message);\n this.name = 'JiraApiError';\n }\n}\n\nexport function handleError(error: any): McpToolResponse {\n log.error('Tool error:', error);\n\n // Direct string errors\n if (typeof error === 'string') {\n return formatErrorResponse(error);\n }\n\n // Handle known error types\n if (error instanceof JiraApiError) {\n return formatErrorResponse(error.message);\n }\n\n if (error?.response?.status === 401) {\n return formatErrorResponse(ERROR_MESSAGES.INVALID_CREDENTIALS);\n }\n\n if (error?.response?.status === 404) {\n return formatErrorResponse('Resource not found or insufficient permissions');\n }\n\n if (error?.response?.status === 429) {\n return formatErrorResponse(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n }\n\n if (!error?.response && error?.code === 'ECONNREFUSED') {\n return formatErrorResponse(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n // Handle validation errors\n if (error?.message?.includes('validation')) {\n return formatErrorResponse(error.message);\n }\n\n // Handle Jira API errors\n if (error?.response?.data) {\n const jiraError = error.response.data;\n\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n return formatErrorResponse(jiraError.errorMessages.join(', '));\n }\n\n if (jiraError.errors) {\n const errorDetails = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n return formatErrorResponse(errorDetails);\n }\n }\n\n // Default error handling\n const message = error?.message || 'An unexpected error occurred';\n return formatErrorResponse(message);\n}\n\nexport function createJiraApiError(error: any): JiraApiError {\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data;\n\n let message = `Jira API error (${status})`;\n let jiraErrors: string[] = [];\n\n if (data?.errorMessages) {\n jiraErrors = data.errorMessages;\n message = data.errorMessages.join(', ');\n } else if (data?.errors) {\n jiraErrors = Object.values(data.errors);\n message = Object.entries(data.errors)\n .map(([field, msg]) => `${field}: ${msg}`)\n .join(', ');\n }\n\n return new JiraApiError(message, status, jiraErrors, error);\n }\n\n if (error.code === 'ECONNREFUSED') {\n return new JiraApiError(ERROR_MESSAGES.NETWORK_ERROR, undefined, [], error);\n }\n\n return new JiraApiError(error.message || 'Unknown Jira API error', undefined, [], error);\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetVisibleProjectsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getVisibleProjects } from '../utils/api-helpers.js';\nimport { formatProjectsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-visible-projects');\n\nexport const getVisibleProjectsTool: Tool = {\n name: TOOL_NAMES.GET_VISIBLE_PROJECTS,\n description:\n 'Retrieves all projects accessible to the authenticated user. Returns project keys, names, descriptions, and basic metadata.',\n inputSchema: {\n type: 'object',\n properties: {\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\"])',\n default: [],\n },\n recent: {\n type: 'number',\n description: 'Limit results to recently accessed projects (max number)',\n minimum: 1,\n maximum: 100,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetVisibleProjects(input: any): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetVisibleProjectsInputSchema, input);\n\n log.info('Getting visible projects...');\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.recent !== undefined) getParams.recent = validated.recent;\n\n const projects = await getVisibleProjects(getParams);\n\n log.info(`Found ${projects.length} project(s)`);\n\n return formatProjectsResponse(projects);\n } catch (error) {\n log.error('Error in handleGetVisibleProjects:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue');\n\nexport const getIssueTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE,\n description:\n 'Retrieve details for a specific Jira issue by key or URL. Use this when the user mentions an issue like \"PAYWALL-943\" or pastes a Jira link (e.g., https://your.atlassian.net/browse/PAYWALL-943). Returns status, assignee, priority, project, type, labels, components, timestamps, and description.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description:\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional issue details to include (e.g., [\"comments\", \"attachments\", \"changelog\"])',\n default: [],\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve (e.g., [\"summary\", \"status\", \"assignee\"])',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleGetIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueInputSchema, input);\n\n // Accept either an issue key or a full Jira URL and extract the key\n const key = (validated.issueKey || '').trim();\n\n log.info(`Getting issue ${key}...`);\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n\n const issue = await getIssue(key, getParams);\n\n log.info(`Retrieved issue ${issue.key}`);\n\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleGetIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { SearchIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { searchIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:search-issues');\n\nexport const searchIssuesTool: Tool = {\n name: TOOL_NAMES.SEARCH_ISSUES,\n description:\n 'Search for Jira issues using JQL. Supports complex queries with pagination and field selection. Examples: \"project = PROJECT AND status = Open\", \"assignee = currentUser()\".',\n inputSchema: {\n type: 'object',\n properties: {\n jql: {\n type: 'string',\n description: 'JQL query string (e.g., \"project = PROJECT AND status = Open\")',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: ['jql'],\n },\n};\n\nexport async function handleSearchIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(SearchIssuesInputSchema, input);\n\n log.info(`Searching issues with JQL: \"${validated.jql}\"...`);\n\n const searchParams: any = {\n jql: validated.jql,\n };\n\n if (validated.startAt !== undefined) searchParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) searchParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) searchParams.fields = validated.fields;\n if (validated.expand !== undefined) searchParams.expand = validated.expand;\n\n const result = await searchIssues(searchParams);\n\n log.info(`Found ${result.total} issue(s), showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleSearchIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetMyIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getMyIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-my-issues');\n\nexport const getMyIssuesTool: Tool = {\n name: TOOL_NAMES.GET_MY_ISSUES,\n description:\n 'Retrieves issues assigned to current user, sorted by most recently updated first. Supports pagination and field selection.',\n inputSchema: {\n type: 'object',\n properties: {\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetMyIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetMyIssuesInputSchema, input);\n\n log.info('Getting issues assigned to current user...');\n\n const getParams: any = {};\n\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n\n const result = await getMyIssues(getParams);\n\n log.info(`Found ${result.total} issue(s) assigned to you, showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleGetMyIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueTypesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssueTypes } from '../utils/api-helpers.js';\nimport { formatIssueTypesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue-types');\n\nexport const getIssueTypesTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE_TYPES,\n description:\n 'Retrieves available issue types. Can get global issue types or project-specific issue types including regular issues and subtasks (Bug, Story, Task, Epic, etc.).',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description:\n 'Project key to get issue types for specific project (optional - if not provided, returns global issue types)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetIssueTypes(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueTypesInputSchema, input);\n\n if (validated.projectKey) {\n log.info(`Getting issue types for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global issue types...');\n }\n\n const issueTypes = await getIssueTypes(validated.projectKey);\n\n log.info(`Found ${issueTypes.length} issue type(s)`);\n\n return formatIssueTypesResponse(issueTypes);\n } catch (error) {\n log.error('Error in handleGetIssueTypes:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetUsersInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getUsers } from '../utils/api-helpers.js';\nimport { formatUsersResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-users');\n\nexport const getUsersTool: Tool = {\n name: TOOL_NAMES.GET_USERS,\n description:\n 'Search for users by name, email, username, or account ID. Returns display name, email, account status, and account type. Supports pagination.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query for user name or email (partial matches supported)',\n },\n username: {\n type: 'string',\n description: 'Specific username to search for',\n },\n accountId: {\n type: 'string',\n description: 'Specific account ID to search for',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 50,\n default: 50,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetUsers(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetUsersInputSchema, input);\n\n if (validated.query) {\n log.info(`Searching users with query: \"${validated.query}\"...`);\n } else if (validated.username) {\n log.info(`Searching for username: \"${validated.username}\"...`);\n } else if (validated.accountId) {\n log.info(`Searching for account ID: \"${validated.accountId}\"...`);\n } else {\n log.info('Getting all users...');\n }\n\n const getParams: any = {};\n\n if (validated.query !== undefined) getParams.query = validated.query;\n if (validated.username !== undefined) getParams.username = validated.username;\n if (validated.accountId !== undefined) getParams.accountId = validated.accountId;\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n\n const users = await getUsers(getParams);\n\n log.info(`Found ${users.length} user(s)`);\n\n return formatUsersResponse(users);\n } catch (error) {\n log.error('Error in handleGetUsers:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetPrioritiesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getPriorities } from '../utils/api-helpers.js';\nimport { formatPrioritiesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-priorities');\n\nexport const getPrioritiesTool: Tool = {\n name: TOOL_NAMES.GET_PRIORITIES,\n description:\n 'Retrieves available priorities (e.g., Highest, High, Medium, Low, Lowest). Returns IDs, names, and descriptions.',\n inputSchema: {\n type: 'object',\n properties: {},\n required: [],\n },\n};\n\nexport async function handleGetPriorities(input: unknown): Promise<McpToolResponse> {\n try {\n validateInput(GetPrioritiesInputSchema, input);\n\n log.info('Getting all priority levels...');\n\n const priorities = await getPriorities();\n\n log.info(`Found ${priorities.length} priority level(s)`);\n\n return formatPrioritiesResponse(priorities);\n } catch (error) {\n log.error('Error in handleGetPriorities:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetStatusesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getStatuses } from '../utils/api-helpers.js';\nimport { formatStatusesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-statuses');\n\nexport const getStatusesTool: Tool = {\n name: TOOL_NAMES.GET_STATUSES,\n description:\n 'Retrieves available statuses (global or project-specific, e.g., To Do, In Progress, Done). Returns status categories and workflow information.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get statuses for specific project (optional)',\n },\n issueTypeId: {\n type: 'string',\n description: 'Issue type ID to get statuses for specific issue type (requires projectKey)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetStatuses(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetStatusesInputSchema, input);\n\n if (validated.projectKey && validated.issueTypeId) {\n log.info(\n `Getting statuses for project ${validated.projectKey} and issue type ${validated.issueTypeId}...`\n );\n } else if (validated.projectKey) {\n log.info(`Getting statuses for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global statuses...');\n }\n\n const getParams: any = {};\n\n if (validated.projectKey !== undefined) getParams.projectKey = validated.projectKey;\n if (validated.issueTypeId !== undefined) getParams.issueTypeId = validated.issueTypeId;\n\n const statuses = await getStatuses(getParams);\n\n log.info(`Found ${statuses.length} status(es)`);\n\n return formatStatusesResponse(statuses);\n } catch (error) {\n log.error('Error in handleGetStatuses:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:create-issue');\n\nexport const createIssueTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE,\n description:\n 'Creates a new Jira issue in the specified project. Supports setting issue type, priority, assignee, labels, components, and custom fields. Description accepts plain text and is auto-formatted to ADF: lines ending with \":\" become headings, numbered lines create ordered lists, and URLs are linkified. For required custom fields, supply them via customFields (e.g., { \"customfield_12345\": { id: \"...\" } }). Returns the created issue with all details.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key where the issue will be created',\n },\n summary: {\n type: 'string',\n description: 'Issue summary/title',\n minLength: 1,\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'Detailed issue description (optional). Accepts plain text (auto-formatted to ADF) or an ADF document.',\n },\n issueType: {\n type: 'string',\n description: 'Issue type name (e.g., Bug, Story, Task, Epic)',\n },\n priority: {\n type: 'string',\n description: 'Issue priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Issue labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n customFields: {\n type: 'object',\n additionalProperties: true,\n description:\n 'Additional Jira fields, e.g. { \"customfield_10071\": value }. Use this to set required custom fields.',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns only the issue key without fetching full details',\n default: true,\n },\n },\n required: ['projectKey', 'summary', 'issueType'],\n },\n};\n\nexport async function handleCreateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueInputSchema, input);\n\n log.info(`Creating issue in project ${validated.projectKey}...`);\n\n const createParams: any = {\n projectKey: validated.projectKey,\n summary: validated.summary,\n issueType: validated.issueType,\n };\n\n if (validated.description !== undefined) createParams.description = validated.description;\n if (validated.priority !== undefined) createParams.priority = validated.priority;\n if (validated.assignee !== undefined) createParams.assignee = validated.assignee;\n if (validated.labels !== undefined) createParams.labels = validated.labels;\n if (validated.components !== undefined) createParams.components = validated.components;\n if (validated.customFields !== undefined) createParams.customFields = validated.customFields;\n\n let issueOrKey;\n if (validated.returnIssue === false) {\n issueOrKey = await createIssue(createParams, { returnIssue: false });\n } else {\n // Default behavior: request full issue; keep API surface compatible with tests\n issueOrKey = await createIssue(createParams);\n }\n\n if (validated.returnIssue === false) {\n const key = typeof issueOrKey === 'string' ? issueOrKey : (issueOrKey as any).key;\n log.info(`Created issue ${key}`);\n return formatSuccessResponse(`Issue created: ${key}`);\n }\n\n const issue = issueOrKey as any;\n log.info(`Created issue ${issue.key}`);\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleCreateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { UpdateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { updateIssue, getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:update-issue');\n\nexport const updateIssueTool: Tool = {\n name: TOOL_NAMES.UPDATE_ISSUE,\n description:\n 'Updates an existing Jira issue by its key. Supports updating summary, description, priority, assignee, labels, and components. Description accepts plain text and is auto-formatted to ADF: headings (lines ending with \":\"), numbered/bullet lists, and links. Only specified fields will be updated.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to update (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'New issue summary/title (optional)',\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'New issue description (optional). Accepts plain text (auto-formatted to ADF) or an ADF document.',\n },\n priority: {\n type: 'string',\n description: 'New priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'New assignee account ID (optional, use null string to unassign)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'New labels array (replaces existing labels) - optional',\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'New components array (replaces existing components) - optional',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns a success message without fetching the updated issue',\n default: true,\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleUpdateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(UpdateIssueInputSchema, input);\n\n log.info(`Updating issue ${validated.issueKey}...`);\n\n const updateParams: any = {};\n\n if (validated.summary !== undefined) updateParams.summary = validated.summary;\n if (validated.description !== undefined) updateParams.description = validated.description;\n if (validated.priority !== undefined) updateParams.priority = validated.priority;\n if (validated.assignee !== undefined) updateParams.assignee = validated.assignee;\n if (validated.labels !== undefined) updateParams.labels = validated.labels;\n if (validated.components !== undefined) updateParams.components = validated.components;\n\n await updateIssue(validated.issueKey, updateParams);\n\n if (validated.returnIssue === false) {\n log.info(`Updated issue ${validated.issueKey}`);\n return formatSuccessResponse(`Issue ${validated.issueKey} updated successfully`);\n }\n\n // Get the updated issue to return current state\n const updatedIssue = await getIssue(validated.issueKey);\n\n log.info(`Updated issue ${updatedIssue.key}`);\n\n return formatIssueResponse(updatedIssue);\n } catch (error) {\n log.error('Error in handleUpdateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { AddCommentInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { addComment } from '../utils/api-helpers.js';\nimport { formatCommentResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:add-comment');\n\nexport const addCommentTool: Tool = {\n name: TOOL_NAMES.ADD_COMMENT,\n description:\n 'Adds a comment to an issue. Supports visibility restrictions for groups or roles. Returns the created comment with author details and timestamp.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to add comment to (e.g., PROJECT-123)',\n },\n body: {\n type: 'string',\n description: 'Comment body text',\n minLength: 1,\n },\n visibility: {\n type: 'object',\n description: 'Comment visibility restrictions (optional)',\n properties: {\n type: {\n type: 'string',\n enum: ['group', 'role'],\n description: 'Visibility type - either \"group\" or \"role\"',\n },\n value: {\n type: 'string',\n description: 'Group name or role name for visibility restriction',\n },\n },\n required: ['type', 'value'],\n },\n },\n required: ['issueKey', 'body'],\n },\n};\n\nexport async function handleAddComment(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(AddCommentInputSchema, input);\n\n log.info(`Adding comment to issue ${validated.issueKey}...`);\n\n const comment = await addComment(validated.issueKey, validated.body, validated.visibility);\n\n log.info(`Added comment to ${validated.issueKey}`);\n\n return formatCommentResponse(comment);\n } catch (error) {\n log.error('Error in handleAddComment:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetProjectInfoInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getProjectDetails } from '../utils/api-helpers.js';\nimport { formatProjectDetailsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-project-info');\n\nexport const getProjectInfoTool: Tool = {\n name: TOOL_NAMES.GET_PROJECT_INFO,\n description:\n 'Retrieves detailed information about a project (components, versions, issue types, roles, insights). More comprehensive than the basic project list.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get detailed information for',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\", \"versions\"])',\n default: [],\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetProjectInfo(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetProjectInfoInputSchema, input);\n\n log.info(`Getting detailed project information for ${validated.projectKey}...`);\n\n const project = await getProjectDetails(validated.projectKey, validated.expand);\n\n log.info(`Retrieved project details for ${project.key}`);\n\n return formatProjectDetailsResponse(project);\n } catch (error) {\n log.error('Error in handleGetProjectInfo:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateSubtaskInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createSubtask } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-subtask');\n\nexport const createSubtaskTool: Tool = {\n name: TOOL_NAMES.CREATE_SUBTASK,\n description:\n 'Creates a subtask under an existing parent issue. Automatically determines the correct project and subtask issue type. Supports setting priority, assignee, labels, and components.',\n inputSchema: {\n type: 'object',\n properties: {\n parentIssueKey: {\n type: 'string',\n description: 'Parent issue key (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'Subtask summary/title',\n minLength: 1,\n },\n description: {\n type: 'string',\n description: 'Detailed subtask description (optional)',\n },\n priority: {\n type: 'string',\n description: 'Subtask priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Subtask labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n },\n required: ['parentIssueKey', 'summary'],\n },\n};\n\nexport async function handleCreateSubtask(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateSubtaskInputSchema, input);\n\n log.info(`Creating subtask under parent issue ${validated.parentIssueKey}...`);\n\n const subtaskParams: any = {\n summary: validated.summary,\n };\n\n if (validated.description !== undefined) subtaskParams.description = validated.description;\n if (validated.priority !== undefined) subtaskParams.priority = validated.priority;\n if (validated.assignee !== undefined) subtaskParams.assignee = validated.assignee;\n if (validated.labels !== undefined) subtaskParams.labels = validated.labels;\n if (validated.components !== undefined) subtaskParams.components = validated.components;\n\n const subtask = await createSubtask(validated.parentIssueKey, subtaskParams);\n\n log.info(`Created subtask ${subtask.key}`);\n\n return formatIssueResponse(subtask);\n } catch (error) {\n log.error('Error in handleCreateSubtask:', error);\n return handleError(error);\n }\n}\n","// Load .env file in development mode\nif (process.env.NODE_ENV !== 'production') {\n try {\n const { config } = await import('dotenv');\n config();\n // Loaded .env silently; logging handled by logger\n } catch {\n // no-op; continue without .env\n }\n}\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n CallToolRequest,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { validateAuth, testConnection } from './utils/jira-auth.js';\nimport { createLogger } from './utils/logger.js';\nimport { TOOL_NAMES } from './config/constants.js';\n\nconst log = createLogger('server');\n\n// Import all tools\nimport * as tools from './tools/index.js';\n\n// Tool handler mapping\nconst toolHandlers = new Map<string, (input: unknown) => Promise<any>>([\n [TOOL_NAMES.GET_VISIBLE_PROJECTS, tools.handleGetVisibleProjects],\n [TOOL_NAMES.GET_ISSUE, tools.handleGetIssue],\n [TOOL_NAMES.SEARCH_ISSUES, tools.handleSearchIssues],\n [TOOL_NAMES.GET_MY_ISSUES, tools.handleGetMyIssues],\n [TOOL_NAMES.GET_ISSUE_TYPES, tools.handleGetIssueTypes],\n [TOOL_NAMES.GET_USERS, tools.handleGetUsers],\n [TOOL_NAMES.GET_PRIORITIES, tools.handleGetPriorities],\n [TOOL_NAMES.GET_STATUSES, tools.handleGetStatuses],\n [TOOL_NAMES.CREATE_ISSUE, tools.handleCreateIssue],\n [TOOL_NAMES.UPDATE_ISSUE, tools.handleUpdateIssue],\n [TOOL_NAMES.ADD_COMMENT, tools.handleAddComment],\n [TOOL_NAMES.GET_PROJECT_INFO, tools.handleGetProjectInfo],\n [TOOL_NAMES.CREATE_SUBTASK, tools.handleCreateSubtask],\n]);\n\n// All available tools\nconst allTools = [\n tools.getVisibleProjectsTool,\n tools.getIssueTool,\n tools.searchIssuesTool,\n tools.getMyIssuesTool,\n tools.getIssueTypesTool,\n tools.getUsersTool,\n tools.getPrioritiesTool,\n tools.getStatusesTool,\n tools.createIssueTool,\n tools.updateIssueTool,\n tools.addCommentTool,\n tools.getProjectInfoTool,\n tools.createSubtaskTool,\n];\n\nasync function main() {\n // Validate authentication on startup\n try {\n const auth = validateAuth();\n console.error(`🔐 Authenticated as: ${auth.email}`);\n console.error(`🌐 Jira instance: ${auth.baseUrl}`);\n\n // Always test connection on startup for predictable behavior in tests\n console.error('🔍 Testing connection to Jira...');\n const ok = await testConnection();\n if (!ok) {\n console.error('❌ Connection to Jira failed');\n process.exit(1);\n return;\n }\n console.error('✅ Connection to Jira successful');\n } catch (error: any) {\n console.error('❌ Authentication Error:', error.message);\n process.exit(1);\n return;\n }\n\n // Read version from package.json\n let version = '0.0.0';\n try {\n const pkg = await import('../package.json', { assert: { type: 'json' } } as any);\n version = (pkg as any).default?.version || (pkg as any).version || version;\n } catch {\n // ignore\n }\n\n const server = new Server(\n {\n name: 'jira-mcp-server',\n version,\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n );\n\n // List available tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n console.error(`📋 Listing ${allTools.length} available tool(s)`);\n return { tools: allTools };\n });\n\n // Handle tool execution\n server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {\n const { name, arguments: args } = request.params;\n\n console.error(`🛠️ Executing tool: ${name}`);\n\n const handler = toolHandlers.get(name);\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n try {\n const result = await handler(args);\n console.error(`✅ Tool ${name} executed successfully`);\n return result;\n } catch (error: any) {\n console.error(`❌ Error executing tool ${name}:`, error.message);\n throw error;\n }\n });\n\n // List resources (not implemented for this server)\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n return { resources: [] };\n });\n\n // Read resource (not implemented for this server)\n server.setRequestHandler(ReadResourceRequestSchema, async () => {\n throw new Error('Resource reading not implemented');\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('🚀 Jira MCP server running on stdio');\n}\n\nmain().catch((error) => {\n log.error('Fatal error:', error);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../node_modules/dotenv/package.json","../node_modules/dotenv/lib/main.js","../package.json","../src/config/constants.ts","../src/utils/logger.ts","../src/utils/jira-auth.ts","../src/utils/validators.ts","../src/types/tools.ts","../src/utils/api-helpers.ts","../src/utils/redaction.ts","../src/utils/formatters.ts","../src/utils/error-handler.ts","../src/tools/get-visible-projects.ts","../src/tools/get-issue.ts","../src/tools/search-issues.ts","../src/tools/get-my-issues.ts","../src/tools/get-issue-types.ts","../src/tools/get-users.ts","../src/tools/get-priorities.ts","../src/tools/get-statuses.ts","../src/tools/create-issue.ts","../src/tools/update-issue.ts","../src/tools/add-comment.ts","../src/tools/get-project-info.ts","../src/tools/create-subtask.ts","../src/index.ts"],"names":["path","require_package","z","log","message"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"17.2.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '🔐 encrypt with Dotenvx: https://dotenvx.com',\n '🔐 prevent committing .env to code: https://dotenvx.com/precommit',\n '🔐 prevent building .env in docker: https://dotenvx.com/prebuild',\n '📡 observe env with Radar: https://dotenvx.com/radar',\n '📡 auto-backup env with Radar: https://dotenvx.com/radar',\n '📡 version env with Radar: https://dotenvx.com/radar',\n '🛠️ run anywhere with `dotenvx run -- yourcommand`',\n '⚙️ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n '⚙️ enable debug logging with { debug: true }',\n '⚙️ override existing env vars with { override: true }',\n '⚙️ suppress all logs with { quiet: true }',\n '⚙️ write to custom object with { processEnv: myObject }',\n '⚙️ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"mcp-jira-stdio\",\n \"version\": \"1.1.3\",\n \"description\": \"Model Context Protocol (MCP) server for Jira API integration\",\n \"author\": \"graslt\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mcp-jira-stdio\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsx watch src/index.ts\",\n \"build\": \"tsup\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf dist\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src --ext .ts\",\n \"lint:fix\": \"eslint src --ext .ts --fix\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"check\": \"npm run typecheck && npm run lint && npm run format:check\",\n \"check:all\": \"npm run check && npm run test:run && npm run build\",\n \"prepublishOnly\": \"npm run clean && npm run build\",\n \"inspector\": \"npx @modelcontextprotocol/inspector node dist/index.js\",\n \"inspector:dev\": \"NODE_ENV=development npx @modelcontextprotocol/inspector npx tsx src/index.ts\",\n \"setup:mcp\": \"node scripts/setup-mcp-config.js\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:watch\": \"vitest watch\",\n \"test:ui\": \"vitest --ui\",\n \"test:connection\": \"node scripts/test-connection.cjs\"\n },\n \"keywords\": [\n \"mcp\",\n \"model-context-protocol\",\n \"jira\",\n \"atlassian\",\n \"api\",\n \"claude\",\n \"ai\"\n ],\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.1\",\n \"zod\": \"^3.22.4\",\n \"axios\": \"^1.7.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.5.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"@vitest/ui\": \"^2.0.0\",\n \"dotenv\": \"^17.2.1\",\n \"eslint\": \"^9.9.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.2.0\",\n \"prettier\": \"^3.5.0\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.16.0\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^2.0.0\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"scripts\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freema/mcp-jira-stdio.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/freema/mcp-jira-stdio/issues\"\n },\n \"homepage\": \"https://github.com/freema/mcp-jira-stdio#readme\",\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const JIRA_CONFIG = {\n API_VERSION: '3',\n BASE_PATH: '/rest/api/3',\n DEFAULT_TIMEOUT: 30000,\n MAX_RETRIES: 3,\n RETRY_DELAY: 1000,\n RATE_LIMIT: {\n MAX_REQUESTS: 100,\n WINDOW_MS: 60000, // 1 minute\n },\n} as const;\n\nexport const ERROR_MESSAGES = {\n AUTH_REQUIRED:\n 'Jira authentication required. Set JIRA_BASE_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.',\n INVALID_CREDENTIALS: 'Invalid Jira credentials. Please check your email and API token.',\n PROJECT_NOT_FOUND: \"Project not found or you don't have permission to access it.\",\n ISSUE_NOT_FOUND: \"Issue not found or you don't have permission to access it.\",\n RATE_LIMIT_EXCEEDED: 'Jira API rate limit exceeded. Please wait and try again.',\n NETWORK_ERROR: 'Network error occurred while connecting to Jira.',\n VALIDATION_ERROR: 'Input validation failed.',\n} as const;\n\nexport const TOOL_NAMES = {\n GET_VISIBLE_PROJECTS: 'jira_get_visible_projects',\n GET_ISSUE: 'jira_get_issue',\n SEARCH_ISSUES: 'jira_search_issues',\n GET_MY_ISSUES: 'jira_get_my_issues',\n GET_ISSUE_TYPES: 'jira_get_issue_types',\n GET_USERS: 'jira_get_users',\n GET_PRIORITIES: 'jira_get_priorities',\n GET_STATUSES: 'jira_get_statuses',\n CREATE_ISSUE: 'jira_create_issue',\n UPDATE_ISSUE: 'jira_update_issue',\n ADD_COMMENT: 'jira_add_comment',\n GET_PROJECT_INFO: 'jira_get_project_info',\n CREATE_SUBTASK: 'jira_create_subtask',\n} as const;\n","type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\nconst levels: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n silent: 99,\n};\n\nfunction getLevel(): LogLevel {\n const env = (\n process.env.LOG_LEVEL || (process.env.NODE_ENV === 'development' ? 'debug' : 'info')\n ).toLowerCase();\n if (env === 'debug' || env === 'info' || env === 'warn' || env === 'error' || env === 'silent')\n return env;\n return 'info';\n}\n\nexport function createLogger(scope: string) {\n const level = getLevel();\n const min = levels[level];\n\n const fmt = (msg: any) => (typeof msg === 'string' ? msg : JSON.stringify(msg));\n const prefix = (lvl: string) => `[${lvl.toUpperCase()}] ${scope}:`;\n\n return {\n debug: (...args: any[]) => {\n if (min <= levels.debug) console.error(prefix('debug'), ...args.map(fmt));\n },\n info: (...args: any[]) => {\n if (min <= levels.info) console.error(prefix('info'), ...args.map(fmt));\n },\n warn: (...args: any[]) => {\n if (min <= levels.warn) console.error(prefix('warn'), ...args.map(fmt));\n },\n error: (...args: any[]) => {\n if (min <= levels.error) console.error(prefix('error'), ...args.map(fmt));\n },\n };\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { JiraAuthConfig, RetryConfig } from '../types/common.js';\nimport { JIRA_CONFIG, ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n// keep client simple to match test expectations\n\nlet jiraClient: AxiosInstance | null = null;\nconst log = createLogger('jira-auth');\n\nexport function validateAuth(): JiraAuthConfig {\n const baseUrl = process.env.JIRA_BASE_URL;\n const email = process.env.JIRA_EMAIL;\n const apiToken = process.env.JIRA_API_TOKEN;\n\n if (!baseUrl || !email || !apiToken) {\n throw new Error(ERROR_MESSAGES.AUTH_REQUIRED);\n }\n\n // Normalize base URL\n const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n\n return {\n baseUrl: normalizedBaseUrl,\n email,\n apiToken,\n };\n}\n\nexport function getAuthenticatedClient(): AxiosInstance {\n if (jiraClient) {\n return jiraClient;\n }\n\n const auth = validateAuth();\n\n jiraClient = axios.create({\n baseURL: `${auth.baseUrl}${JIRA_CONFIG.BASE_PATH}`,\n timeout: JIRA_CONFIG.DEFAULT_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n auth: {\n username: auth.email,\n password: auth.apiToken,\n },\n });\n\n // Add request interceptor for logging\n jiraClient.interceptors.request.use(\n (config) => {\n log.debug(`Request: ${config.method?.toUpperCase()} ${config.baseURL}${config.url}`);\n return config;\n },\n (error) => {\n log.error('Request error:', error);\n return Promise.reject(error);\n }\n );\n\n // Add response interceptor for error handling\n jiraClient.interceptors.response.use(\n (response) => {\n log.debug(`Response: ${response.status} ${response.config.url}`);\n return response;\n },\n (error) => {\n log.error(`Jira API error: ${error.response?.status} ${error.config?.url}`);\n\n if (error.response?.status === 401) {\n throw new Error(ERROR_MESSAGES.INVALID_CREDENTIALS);\n } else if (error.response?.status === 404) {\n throw new Error('Resource not found or insufficient permissions');\n } else if (error.response?.status === 429) {\n throw new Error(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n } else if (!error.response) {\n throw new Error(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n return Promise.reject(error);\n }\n );\n\n return jiraClient;\n}\n\nexport async function makeJiraRequest<T = any>(\n config: AxiosRequestConfig,\n retryConfig: RetryConfig = {\n maxRetries: JIRA_CONFIG.MAX_RETRIES,\n retryDelay: JIRA_CONFIG.RETRY_DELAY,\n }\n): Promise<T> {\n const client = getAuthenticatedClient();\n let lastError: any;\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const response = await client.request<T>(config);\n return response.data;\n } catch (error: any) {\n lastError = error;\n\n // Don't retry on authentication or client errors\n if (\n error.response?.status === 401 ||\n error.response?.status === 403 ||\n error.response?.status === 404 ||\n (error.response?.status >= 400 &&\n error.response?.status < 500 &&\n error.response?.status !== 429)\n ) {\n break;\n }\n\n // Don't retry if custom condition fails\n if (retryConfig.retryCondition && !retryConfig.retryCondition(error)) {\n break;\n }\n\n // Don't retry on last attempt\n if (attempt === retryConfig.maxRetries) {\n break;\n }\n\n // Compute backoff respecting Retry-After if present\n const retryAfterHeader = error.response?.headers?.['retry-after'];\n let delayMs = 0;\n if (retryAfterHeader) {\n const seconds = Number(retryAfterHeader);\n delayMs = !Number.isNaN(seconds) ? seconds * 1000 : retryConfig.retryDelay;\n } else {\n const base = retryConfig.retryDelay * Math.pow(2, attempt);\n const jitter = Math.floor(Math.random() * (retryConfig.retryDelay / 2));\n delayMs = base + jitter;\n }\n log.warn(\n `Retrying request in ${delayMs}ms (attempt ${attempt + 1}/${retryConfig.maxRetries})`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw lastError;\n}\n\nexport async function testConnection(): Promise<boolean> {\n try {\n await makeJiraRequest({\n method: 'GET',\n url: '/myself',\n });\n return true;\n } catch (error) {\n log.error('Connection test failed:', error);\n return false;\n }\n}\n","import { z, ZodSchema } from 'zod';\nimport { ERROR_MESSAGES } from '../config/constants.js';\n\nexport function validateInput<T>(schema: ZodSchema<T>, input: unknown): T {\n try {\n return schema.parse(input);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`);\n throw new Error(`${ERROR_MESSAGES.VALIDATION_ERROR}\\n${errorMessages.join('\\n')}`);\n }\n throw error;\n }\n}\n\nexport function isValidIssueKey(key: string): boolean {\n // Jira issue key format: PROJECT-123\n return /^[A-Z][A-Z0-9]*-\\d+$/.test(key);\n}\n\nexport function isValidProjectKey(key: string): boolean {\n // Jira project key format: uppercase letters and numbers, max 10 chars\n return /^[A-Z][A-Z0-9]{0,9}$/.test(key);\n}\n\nexport function isValidJQL(jql: string): boolean {\n // Basic JQL validation - non-empty string\n return typeof jql === 'string' && jql.trim().length > 0;\n}\n\nexport function sanitizeJQL(jql: string): string {\n // Remove potentially dangerous characters and normalize whitespace\n return jql\n .replace(/[<>\"'`]/g, '') // Remove potentially dangerous chars\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim();\n}\n\nexport function validatePagination(startAt: number, maxResults: number): void {\n if (startAt < 0) {\n throw new Error('startAt must be non-negative');\n }\n if (maxResults < 1 || maxResults > 100) {\n throw new Error('maxResults must be between 1 and 100');\n }\n}\n\n// Extract a Jira issue key from a free-form string or URL\nexport function extractIssueKey(input: string): string | null {\n if (typeof input !== 'string') return null;\n const match = input.match(/[A-Z][A-Z0-9]*-\\d+/);\n return match ? match[0] : null;\n}\n","import { z } from 'zod';\nimport { isValidIssueKey, isValidProjectKey } from '../utils/validators.js';\n\n// Get visible projects\nexport const GetVisibleProjectsInputSchema = z.object({\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n recent: z.number().optional().describe('Limit to recently accessed projects'),\n});\n\nexport type GetVisibleProjectsInput = z.infer<typeof GetVisibleProjectsInputSchema>;\n\n// Get issue\nexport const GetIssueInputSchema = z.object({\n issueKey: z\n .string()\n .min(1)\n .describe(\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)'\n ),\n expand: z.array(z.string()).optional().describe('Additional issue details to include'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n});\n\nexport type GetIssueInput = z.infer<typeof GetIssueInputSchema>;\n\n// Search issues\nexport const SearchIssuesInputSchema = z.object({\n jql: z.string().min(1).describe('JQL query string'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type SearchIssuesInput = z.infer<typeof SearchIssuesInputSchema>;\n\n// Create issue\nexport const CreateIssueInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key where the issue will be created')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n summary: z.string().min(1).describe('Issue summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Issue description. Accepts plain text or ADF object.'),\n issueType: z.string().describe('Issue type (e.g., Bug, Story, Task)'),\n priority: z.string().optional().describe('Issue priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Issue labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n customFields: z\n .record(z.any())\n .optional()\n .describe(\n 'Additional Jira field mappings, e.g. { \"customfield_12345\": value }. Use for required custom fields.'\n ),\n returnIssue: z\n .boolean()\n .optional()\n .describe('When false, skip fetching full issue after creation'),\n});\n\nexport type CreateIssueInput = z.infer<typeof CreateIssueInputSchema>;\n\n// Update issue\nexport const UpdateIssueInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to update')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n summary: z.string().optional().describe('New summary'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('New description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('New priority'),\n assignee: z.string().optional().describe('New assignee account ID'),\n labels: z.array(z.string()).optional().describe('New labels (replaces existing)'),\n components: z.array(z.string()).optional().describe('New components (replaces existing)'),\n returnIssue: z.boolean().optional().describe('When false, skip fetching full issue after update'),\n});\n\nexport type UpdateIssueInput = z.infer<typeof UpdateIssueInputSchema>;\n\n// Get my issues\nexport const GetMyIssuesInputSchema = z.object({\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type GetMyIssuesInput = z.infer<typeof GetMyIssuesInputSchema>;\n\n// Get issue types\nexport const GetIssueTypesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get issue types for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetIssueTypesInput = z.infer<typeof GetIssueTypesInputSchema>;\n\n// Get users\nexport const GetUsersInputSchema = z.object({\n query: z.string().optional().describe('Search query for user name or email'),\n username: z.string().optional().describe('Specific username to search for'),\n accountId: z.string().optional().describe('Specific account ID to search for'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z.number().min(1).max(50).default(50).describe('Maximum number of results to return'),\n});\n\nexport type GetUsersInput = z.infer<typeof GetUsersInputSchema>;\n\n// Get priorities\nexport const GetPrioritiesInputSchema = z.object({});\n\nexport type GetPrioritiesInput = z.infer<typeof GetPrioritiesInputSchema>;\n\n// Get statuses\nexport const GetStatusesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get statuses for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n issueTypeId: z\n .string()\n .optional()\n .describe('Issue type ID to get statuses for specific issue type'),\n});\n\nexport type GetStatusesInput = z.infer<typeof GetStatusesInputSchema>;\n\n// Add comment\nexport const AddCommentInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to add comment to')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n body: z.string().min(1).describe('Comment body text'),\n visibility: z\n .object({\n type: z.enum(['group', 'role']).describe('Visibility type'),\n value: z.string().describe('Group name or role name'),\n })\n .optional()\n .describe('Comment visibility restrictions'),\n});\n\nexport type AddCommentInput = z.infer<typeof AddCommentInputSchema>;\n\n// Get project info\nexport const GetProjectInfoInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get detailed information for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n});\n\nexport type GetProjectInfoInput = z.infer<typeof GetProjectInfoInputSchema>;\n\n// Create subtask\nexport const CreateSubtaskInputSchema = z.object({\n parentIssueKey: z.string().describe('Parent issue key'),\n summary: z.string().min(1).describe('Subtask summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Subtask description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('Subtask priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Subtask labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n});\n\nexport type CreateSubtaskInput = z.infer<typeof CreateSubtaskInputSchema>;\n","import { AxiosRequestConfig } from 'axios';\nimport { makeJiraRequest } from './jira-auth.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateIssueResponse,\n} from '../types/jira.js';\nimport { PaginatedResponse } from '../types/common.js';\nimport { validatePagination, sanitizeJQL } from './validators.js';\n\n// Convert a plain string into a nicely structured Atlassian Document Format (ADF) document.\n// Heuristics:\n// - Lines like \"Heading:\" become heading level 3 without the colon\n// - Consecutive lines starting with \"1. \", \"2. \", ... form an orderedList\n// - Lines starting with \"- \", \"• \" form a bulletList\n// - URLs are linkified\nfunction ensureAdfDescription(desc: any): any {\n if (!desc) return desc;\n if (typeof desc === 'object') return desc; // assume already ADF\n if (typeof desc !== 'string') return desc;\n\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n\n const makeTextNodes = (text: string): any[] => {\n const nodes: any[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = urlRegex.exec(text)) !== null) {\n const [url] = match;\n const start = match.index;\n if (start > lastIndex) {\n nodes.push({ type: 'text', text: text.slice(lastIndex, start) });\n }\n nodes.push({ type: 'text', text: url, marks: [{ type: 'link', attrs: { href: url } }] });\n lastIndex = start + url.length;\n }\n if (lastIndex < text.length) {\n nodes.push({ type: 'text', text: text.slice(lastIndex) });\n }\n return nodes.length ? nodes : [{ type: 'text', text }];\n };\n\n const lines = desc.split(/\\r?\\n/);\n const content: any[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const raw = lines[i] ?? '';\n const line = raw.trimEnd();\n if (line.trim().length === 0) {\n // Blank line – add empty paragraph for spacing\n content.push({ type: 'paragraph', content: [] });\n i++;\n continue;\n }\n\n // Section label on its own line: \"Something:\" → bold label paragraph\n const soloLabelMatch = /^(?<title>[^:]{2,}):\\s*$/.exec(line);\n if (soloLabelMatch?.groups?.title) {\n const title = `${soloLabelMatch.groups.title}:`;\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: title, marks: [{ type: 'strong' }] }],\n });\n i++;\n\n // Special-case: Stack trace section → capture following non-empty lines as codeBlock\n if (/^stack\\s*trace$/i.test(soloLabelMatch.groups.title.trim())) {\n const codeLines: string[] = [];\n while (i < lines.length && (lines[i] ?? '').trim().length > 0) {\n codeLines.push(lines[i] as string);\n i++;\n }\n if (codeLines.length) {\n content.push({\n type: 'codeBlock',\n attrs: { language: '' },\n content: [{ type: 'text', text: codeLines.join('\\n') }],\n });\n }\n }\n continue;\n }\n\n // Ordered list group\n if (/^\\d+\\.\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^\\d+\\.\\s+/.test(cur)) break;\n const itemText = cur.replace(/^\\d+\\.\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'orderedList', content: items });\n continue;\n }\n\n // Bullet list group\n if (/^(?:[-•])\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^(?:[-•])\\s+/.test(cur)) break;\n const itemText = cur.replace(/^(?:[-•])\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'bulletList', content: items });\n continue;\n }\n\n // Label: value → bold label then text\n const labelMatch =\n /^(?<label>[A-ZÁČĎÉĚÍĽĹŇÓŘŠŤÚŮÝŽa-záčďéěíľĺňóřšťúůýž\\s]+):\\s+(?<value>.+)$/.exec(line);\n if (labelMatch?.groups?.label && labelMatch.groups.value) {\n content.push({\n type: 'paragraph',\n content: [\n { type: 'text', text: `${labelMatch.groups.label}:`, marks: [{ type: 'strong' }] },\n { type: 'text', text: ' ' },\n ...makeTextNodes(labelMatch.groups.value),\n ],\n });\n i++;\n continue;\n }\n\n // Fallback paragraph; make lines that look like paths/methods monospace\n if (/^\\//.test(line) || /[A-Za-z]:\\\\/.test(line)) {\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: line, marks: [{ type: 'code' }] }],\n });\n } else {\n content.push({ type: 'paragraph', content: makeTextNodes(line) });\n }\n i++;\n }\n\n return { type: 'doc', version: 1, content };\n}\n\nexport async function getVisibleProjects(\n options: {\n expand?: string[];\n recent?: number;\n } = {}\n): Promise<JiraProject[]> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.recent) {\n params.recent = options.recent;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/project/search',\n params,\n };\n\n const response = await makeJiraRequest<PaginatedResponse<JiraProject>>(config);\n return response.values;\n}\n\nexport async function getIssue(\n issueKey: string,\n options: {\n expand?: string[];\n fields?: string[];\n } = {}\n): Promise<JiraIssue> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.fields) {\n params.fields = options.fields.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/issue/${issueKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraIssue>(config);\n}\n\nexport async function searchIssues(options: {\n jql: string;\n startAt?: number;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n}): Promise<JiraSearchResult> {\n const { jql, startAt = 0, maxResults = 50 } = options;\n\n // Validate pagination\n validatePagination(startAt, maxResults);\n\n // Sanitize JQL\n const sanitizedJql = sanitizeJQL(jql);\n\n const data: Record<string, any> = {\n jql: sanitizedJql,\n startAt,\n maxResults,\n };\n\n if (options.fields) {\n data.fields = options.fields;\n }\n\n if (options.expand) {\n data.expand = options.expand;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/search',\n data,\n };\n\n return await makeJiraRequest<JiraSearchResult>(config);\n}\n\nexport async function createIssue(\n issueData: {\n projectKey: string;\n summary: string;\n description?: string;\n issueType: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n customFields?: Record<string, any>;\n },\n options: { returnIssue?: boolean } = { returnIssue: true }\n): Promise<JiraIssue | string> {\n const fields: Record<string, any> = {\n project: { key: issueData.projectKey },\n summary: issueData.summary,\n issuetype: { name: issueData.issueType },\n };\n\n if (issueData.description !== undefined) {\n fields.description = ensureAdfDescription(issueData.description);\n }\n\n if (issueData.priority) {\n fields.priority = { name: issueData.priority };\n }\n\n if (issueData.assignee) {\n fields.assignee = { accountId: issueData.assignee };\n }\n\n if (issueData.labels && issueData.labels.length > 0) {\n fields.labels = issueData.labels;\n }\n\n if (issueData.components && issueData.components.length > 0) {\n fields.components = issueData.components.map((name) => ({ name }));\n }\n\n // Merge any custom fields provided by the caller\n if (issueData.customFields && typeof issueData.customFields === 'object') {\n for (const [key, value] of Object.entries(issueData.customFields)) {\n // Do not overwrite standard fields if accidentally duplicated\n if (!(key in fields)) {\n fields[key] = value;\n }\n }\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<{ key: string; id: string; self: string }>(config);\n\n if (options.returnIssue === false) {\n return response.key;\n }\n\n // Return the created issue\n return await getIssue(response.key);\n}\n\nexport async function updateIssue(\n issueKey: string,\n updates: {\n summary?: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n }\n): Promise<void> {\n const fields: Record<string, any> = {};\n\n if (updates.summary !== undefined) {\n fields.summary = updates.summary;\n }\n\n if (updates.description !== undefined) {\n fields.description = ensureAdfDescription(updates.description);\n }\n\n if (updates.priority !== undefined) {\n fields.priority = { name: updates.priority };\n }\n\n if (updates.assignee !== undefined) {\n fields.assignee = updates.assignee ? { accountId: updates.assignee } : null;\n }\n\n if (updates.labels !== undefined) {\n fields.labels = updates.labels;\n }\n\n if (updates.components !== undefined) {\n fields.components = updates.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'PUT',\n url: `/issue/${issueKey}`,\n data: { fields },\n };\n\n await makeJiraRequest(config);\n}\n\nexport async function getCurrentUser(): Promise<JiraUser> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/myself',\n };\n\n return await makeJiraRequest<JiraUser>(config);\n}\n\nexport async function getMyIssues(\n options: {\n startAt?: number;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n } = {}\n): Promise<JiraSearchResult> {\n const jql = `assignee = currentUser() ORDER BY updated DESC`;\n\n const searchParams: any = {\n jql,\n startAt: options.startAt || 0,\n maxResults: options.maxResults || 50,\n };\n\n if (options.fields !== undefined) searchParams.fields = options.fields;\n if (options.expand !== undefined) searchParams.expand = options.expand;\n\n return await searchIssues(searchParams);\n}\n\nexport async function getIssueTypes(projectKey?: string): Promise<JiraIssueType[]> {\n let url = '/issuetype';\n\n if (projectKey) {\n url = `/project/${projectKey}/issuetype`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n return await makeJiraRequest<JiraIssueType[]>(config);\n}\n\nexport async function getUsers(\n options: {\n query?: string;\n username?: string;\n accountId?: string;\n startAt?: number;\n maxResults?: number;\n } = {}\n): Promise<JiraUser[]> {\n const params: Record<string, any> = {};\n\n if (options.query) {\n params.query = options.query;\n }\n\n if (options.username) {\n params.username = options.username;\n }\n\n if (options.accountId) {\n params.accountId = options.accountId;\n }\n\n if (options.startAt !== undefined) {\n params.startAt = options.startAt;\n }\n\n if (options.maxResults !== undefined) {\n params.maxResults = options.maxResults;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/user/search',\n params,\n };\n\n return await makeJiraRequest<JiraUser[]>(config);\n}\n\nexport async function getPriorities(): Promise<JiraPriority[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/priority',\n };\n\n return await makeJiraRequest<JiraPriority[]>(config);\n}\n\nexport async function getStatuses(\n options: {\n projectKey?: string;\n issueTypeId?: string;\n } = {}\n): Promise<JiraStatus[]> {\n let url = '/status';\n\n if (options.projectKey && options.issueTypeId) {\n url = `/project/${options.projectKey}/statuses`;\n } else if (options.projectKey) {\n url = `/project/${options.projectKey}/statuses`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n if (options.projectKey) {\n const response =\n await makeJiraRequest<Array<{ id?: string; name: string; statuses: JiraStatus[] }>>(config);\n if (options.issueTypeId) {\n const match = response.find(\n (issueType) =>\n issueType.id === options.issueTypeId || issueType.name === options.issueTypeId\n );\n if (match) return match.statuses;\n }\n // Flatten the statuses from all issue types\n return response.flatMap((issueType) => issueType.statuses);\n }\n return await makeJiraRequest<JiraStatus[]>(config);\n}\n\nexport async function addComment(\n issueKey: string,\n body: string,\n visibility?: { type: string; value: string }\n): Promise<JiraComment> {\n const data: any = { body };\n\n if (visibility) {\n data.visibility = visibility;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: `/issue/${issueKey}/comment`,\n data,\n };\n\n return await makeJiraRequest<JiraComment>(config);\n}\n\nexport async function getProjectDetails(\n projectKey: string,\n expand?: string[]\n): Promise<JiraProjectDetails> {\n const params: Record<string, any> = {};\n\n if (expand) {\n params.expand = expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/project/${projectKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraProjectDetails>(config);\n}\n\nexport async function createSubtask(\n parentIssueKey: string,\n subtaskData: {\n summary: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n }\n): Promise<JiraIssue> {\n // First get parent issue to determine project and subtask issue type\n const parentIssue = await getIssue(parentIssueKey);\n const projectKey = parentIssue.fields.project.key;\n\n // Get available issue types for the project\n const issueTypes = await getIssueTypes(projectKey);\n const subtaskType = issueTypes.find((type) => type.subtask);\n\n if (!subtaskType) {\n throw new Error(`No subtask issue type found for project ${projectKey}`);\n }\n\n const fields: Record<string, any> = {\n project: { key: projectKey },\n parent: { key: parentIssueKey },\n summary: subtaskData.summary,\n issuetype: { id: subtaskType.id },\n };\n\n if (subtaskData.description !== undefined) {\n fields.description = ensureAdfDescription(subtaskData.description);\n }\n\n if (subtaskData.priority) {\n fields.priority = { name: subtaskData.priority };\n }\n\n if (subtaskData.assignee) {\n fields.assignee = { accountId: subtaskData.assignee };\n }\n\n if (subtaskData.labels && subtaskData.labels.length > 0) {\n fields.labels = subtaskData.labels;\n }\n\n if (subtaskData.components && subtaskData.components.length > 0) {\n fields.components = subtaskData.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<JiraCreateIssueResponse>(config);\n\n // Return the created subtask\n return await getIssue(response.key);\n}\n","export function isRedactionEnabled(): boolean {\n const val = process.env.MCP_REDACT_SENSITIVE || process.env.REDACT_SENSITIVE;\n return val === '1' || val?.toLowerCase() === 'true';\n}\n\nexport function maybeRedactAccountId(accountId?: string | null): string {\n if (!accountId) return 'N/A';\n if (!isRedactionEnabled()) return accountId;\n // Show first 4 chars and mask the rest to keep stable identifiers without full disclosure\n const head = accountId.slice(0, 4);\n return `${head}…`; // masked\n}\n\nexport function maybeRedactEmail(email?: string | null): string {\n if (!email) return 'N/A';\n if (!isRedactionEnabled()) return email;\n return 'hidden';\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { maybeRedactAccountId, maybeRedactEmail } from './redaction.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n} from '../types/jira.js';\n\nexport function formatProjectsResponse(projects: JiraProject[]): McpToolResponse {\n const projectsList = projects\n .map(\n (project) =>\n `• **${project.key}** - ${project.name}\\n ${project.description || 'No description'}\\n Type: ${project.projectTypeKey} | Private: ${project.isPrivate ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${projects.length} visible project(s):\\n\\n${projectsList}`,\n },\n ],\n };\n}\n\nfunction adfToPlainText(adf: any): string {\n // Very lightweight ADF to text conversion (best-effort)\n try {\n const walk = (node: any): string => {\n if (!node) return '';\n switch (node.type) {\n case 'text':\n return node.text || '';\n case 'paragraph':\n case 'heading':\n case 'blockquote':\n return (node.content || []).map(walk).join('');\n case 'codeBlock':\n return '\\n' + (node.content || []).map(walk).join('') + '\\n';\n case 'bulletList':\n case 'orderedList':\n return (node.content || []).map(walk).join('\\n');\n case 'listItem':\n return '• ' + (node.content || []).map(walk).join('');\n case 'hardBreak':\n return '\\n';\n default:\n if (Array.isArray(node.content)) return node.content.map(walk).join('');\n return '';\n }\n };\n if (adf && Array.isArray(adf.content)) {\n return adf.content.map(walk).join('\\n').trim();\n }\n } catch {\n // ignore and fallback\n }\n return '';\n}\n\nexport function formatIssueResponse(issue: JiraIssue): McpToolResponse {\n const { key, fields } = issue;\n\n const summary = fields?.summary || 'No summary';\n\n const assigneeText = fields?.assignee\n ? `${fields.assignee.displayName} (${maybeRedactAccountId(fields.assignee.accountId)})`\n : 'Unassigned';\n\n const reporterText = fields?.reporter\n ? `${fields.reporter.displayName} (${maybeRedactAccountId(fields.reporter.accountId)})`\n : 'Unknown';\n\n const labelsArray = Array.isArray(fields?.labels) ? fields.labels : [];\n const labelsText = labelsArray.length > 0 ? labelsArray.join(', ') : 'None';\n\n const componentsArray = Array.isArray(fields?.components) ? fields.components : [];\n const componentsText =\n componentsArray.length > 0 ? componentsArray.map((c) => c.name).join(', ') : 'None';\n\n let description = fields?.description as any;\n if (description && typeof description === 'object') {\n const parsed = adfToPlainText(description);\n description = parsed || '[rich text description omitted]';\n }\n if (!description || typeof description !== 'string') {\n description = 'No description provided';\n }\n\n const createdText = fields?.created ? new Date(fields.created).toISOString() : 'N/A';\n const updatedText = fields?.updated ? new Date(fields.updated).toISOString() : 'N/A';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${key}: ${summary}**\\n\\n**Status:** ${fields?.status?.name || 'Unknown'}\\n**Priority:** ${fields?.priority?.name || 'None'}\\n**Assignee:** ${assigneeText}\\n**Reporter:** ${reporterText}\\n**Project:** ${fields?.project?.name || 'Unknown'} (${fields?.project?.key || 'N/A'})\\n**Issue Type:** ${fields?.issuetype?.name || 'Unknown'}\\n**Labels:** ${labelsText}\\n**Components:** ${componentsText}\\n**Created:** ${createdText}\\n**Updated:** ${updatedText}\\n\\n**Description:**\\n${description}`,\n },\n ],\n };\n}\n\nexport function formatSearchResultsResponse(result: JiraSearchResult): McpToolResponse {\n if (result.issues.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issues found matching your search criteria.',\n },\n ],\n };\n }\n\n const issuesList = result.issues\n .map((issue) => {\n const assignee = issue.fields.assignee?.displayName || 'Unassigned';\n return `• **${issue.key}** - ${issue.fields.summary}\\n Status: ${issue.fields.status.name} | Assignee: ${assignee} | Priority: ${issue.fields.priority?.name || 'None'}`;\n })\n .join('\\n\\n');\n\n const rangeStart = result.startAt + 1;\n const rangeEnd = Math.min(result.startAt + result.maxResults, result.total);\n const showRangeInline = result.total > result.maxResults || result.startAt > 0;\n const paginationInfo = showRangeInline\n ? `\\n\\n*Showing ${rangeStart}-${rangeEnd} of ${result.total} results*`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${result.total} issue(s)${showRangeInline ? ` (showing ${rangeStart}-${rangeEnd})` : ''}:\\n\\n${issuesList}${paginationInfo}`,\n },\n ],\n };\n}\n\nexport function formatErrorResponse(error: any): McpToolResponse {\n let errorMessage = 'An unexpected error occurred.';\n\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (error instanceof Error) {\n errorMessage = error.message;\n } else if (error?.response?.data) {\n const jiraError = error.response.data;\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n errorMessage = jiraError.errorMessages.join(', ');\n } else if (jiraError.errors) {\n errorMessage = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `❌ Error: ${errorMessage}`,\n },\n ],\n };\n}\n\nexport function formatSuccessResponse(message: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: `✅ ${message}`,\n },\n ],\n };\n}\n\nexport function formatUsersResponse(users: JiraUser[]): McpToolResponse {\n if (users.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No users found matching your search criteria.',\n },\n ],\n };\n }\n\n const usersList = users\n .map(\n (user) =>\n `• **${user.displayName}** (${maybeRedactAccountId(user.accountId)})\\n Email: ${maybeRedactEmail(user.emailAddress)} | Active: ${user.active ? 'Yes' : 'No'} | Type: ${user.accountType}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${users.length} user(s):\\n\\n${usersList}`,\n },\n ],\n };\n}\n\nexport function formatIssueTypesResponse(issueTypes: JiraIssueType[]): McpToolResponse {\n if (issueTypes.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issue types found.',\n },\n ],\n };\n }\n\n const typesList = issueTypes\n .map(\n (type) =>\n `• **${type.name}** (ID: ${type.id})\\n ${type.description}\\n Subtask: ${type.subtask ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${issueTypes.length} issue type(s):\\n\\n${typesList}`,\n },\n ],\n };\n}\n\nexport function formatPrioritiesResponse(priorities: JiraPriority[]): McpToolResponse {\n if (priorities.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No priorities found.',\n },\n ],\n };\n }\n\n const prioritiesList = priorities\n .map((priority) => `• **${priority.name}** (ID: ${priority.id})\\n ${priority.description}`)\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${priorities.length} priority level(s):\\n\\n${prioritiesList}`,\n },\n ],\n };\n}\n\nexport function formatStatusesResponse(statuses: JiraStatus[]): McpToolResponse {\n if (statuses.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No statuses found.',\n },\n ],\n };\n }\n\n const statusesList = statuses\n .map(\n (status) =>\n `• **${status.name}** (ID: ${status.id})\\n ${status.description}\\n Category: ${status.statusCategory.name} (${status.statusCategory.key})`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${statuses.length} status(es):\\n\\n${statusesList}`,\n },\n ],\n };\n}\n\nexport function formatCommentResponse(comment: JiraComment): McpToolResponse {\n const visibilityText = comment.visibility\n ? `\\n**Visibility:** ${comment.visibility.type} - ${comment.visibility.value}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**Comment added successfully**\n\n**Author:** ${comment.author.displayName}\n**Created:** ${new Date(comment.created).toISOString()}${visibilityText}\n\n**Content:**\n${comment.body}`,\n },\n ],\n };\n}\n\nexport function formatProjectDetailsResponse(project: JiraProjectDetails): McpToolResponse {\n const leadText = project.lead\n ? `${project.lead.displayName} (${project.lead.accountId})`\n : 'No lead assigned';\n\n const componentsText =\n project.components.length > 0 ? project.components.map((c) => c.name).join(', ') : 'None';\n\n const versionsText =\n project.versions.length > 0 ? project.versions.map((v) => v.name).join(', ') : 'None';\n\n const issueTypesText =\n project.issueTypes.length > 0\n ? project.issueTypes.map((t) => `${t.name}${t.subtask ? ' (Subtask)' : ''}`).join(', ')\n : 'None';\n\n const rolesText =\n Object.keys(project.roles).length > 0 ? Object.keys(project.roles).join(', ') : 'None';\n\n const insightText = project.insight\n ? `\\n\\n**Project Insights:**\nTotal Issues: ${project.insight.totalIssueCount}\nLast Updated: ${new Date(project.insight.lastIssueUpdateTime).toISOString()}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${project.key}: ${project.name}**\n\n**Description:** ${project.description || 'No description'}\n**Type:** ${project.projectTypeKey}\n**Private:** ${project.isPrivate ? 'Yes' : 'No'}\n**Lead:** ${leadText}\n\n**Components:** ${componentsText}\n**Versions:** ${versionsText}\n**Issue Types:** ${issueTypesText}\n**Roles:** ${rolesText}${insightText}`,\n },\n ],\n };\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { formatErrorResponse } from './formatters.js';\nimport { ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger('error-handler');\n\nexport class JiraApiError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public jiraErrors?: string[],\n public originalError?: any\n ) {\n super(message);\n this.name = 'JiraApiError';\n }\n}\n\nexport function handleError(error: any): McpToolResponse {\n log.error('Tool error:', error);\n\n // Direct string errors\n if (typeof error === 'string') {\n return formatErrorResponse(error);\n }\n\n // Handle known error types\n if (error instanceof JiraApiError) {\n return formatErrorResponse(error.message);\n }\n\n if (error?.response?.status === 401) {\n return formatErrorResponse(ERROR_MESSAGES.INVALID_CREDENTIALS);\n }\n\n if (error?.response?.status === 404) {\n return formatErrorResponse('Resource not found or insufficient permissions');\n }\n\n if (error?.response?.status === 429) {\n return formatErrorResponse(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n }\n\n if (!error?.response && error?.code === 'ECONNREFUSED') {\n return formatErrorResponse(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n // Handle validation errors\n if (error?.message?.includes('validation')) {\n return formatErrorResponse(error.message);\n }\n\n // Handle Jira API errors\n if (error?.response?.data) {\n const jiraError = error.response.data;\n\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n return formatErrorResponse(jiraError.errorMessages.join(', '));\n }\n\n if (jiraError.errors) {\n const errorDetails = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n return formatErrorResponse(errorDetails);\n }\n }\n\n // Default error handling\n const message = error?.message || 'An unexpected error occurred';\n return formatErrorResponse(message);\n}\n\nexport function createJiraApiError(error: any): JiraApiError {\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data;\n\n let message = `Jira API error (${status})`;\n let jiraErrors: string[] = [];\n\n if (data?.errorMessages) {\n jiraErrors = data.errorMessages;\n message = data.errorMessages.join(', ');\n } else if (data?.errors) {\n jiraErrors = Object.values(data.errors);\n message = Object.entries(data.errors)\n .map(([field, msg]) => `${field}: ${msg}`)\n .join(', ');\n }\n\n return new JiraApiError(message, status, jiraErrors, error);\n }\n\n if (error.code === 'ECONNREFUSED') {\n return new JiraApiError(ERROR_MESSAGES.NETWORK_ERROR, undefined, [], error);\n }\n\n return new JiraApiError(error.message || 'Unknown Jira API error', undefined, [], error);\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetVisibleProjectsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getVisibleProjects } from '../utils/api-helpers.js';\nimport { formatProjectsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-visible-projects');\n\nexport const getVisibleProjectsTool: Tool = {\n name: TOOL_NAMES.GET_VISIBLE_PROJECTS,\n description:\n 'Retrieves all projects accessible to the authenticated user. Returns project keys, names, descriptions, and basic metadata.',\n inputSchema: {\n type: 'object',\n properties: {\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\"])',\n default: [],\n },\n recent: {\n type: 'number',\n description: 'Limit results to recently accessed projects (max number)',\n minimum: 1,\n maximum: 100,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetVisibleProjects(input: any): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetVisibleProjectsInputSchema, input);\n\n log.info('Getting visible projects...');\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.recent !== undefined) getParams.recent = validated.recent;\n\n const projects = await getVisibleProjects(getParams);\n\n log.info(`Found ${projects.length} project(s)`);\n\n return formatProjectsResponse(projects);\n } catch (error) {\n log.error('Error in handleGetVisibleProjects:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue');\n\nexport const getIssueTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE,\n description:\n 'Retrieve details for a specific Jira issue by key or URL. Use this when the user mentions an issue like \"PAYWALL-943\" or pastes a Jira link (e.g., https://your.atlassian.net/browse/PAYWALL-943). Returns status, assignee, priority, project, type, labels, components, timestamps, and description.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description:\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional issue details to include (e.g., [\"comments\", \"attachments\", \"changelog\"])',\n default: [],\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve (e.g., [\"summary\", \"status\", \"assignee\"])',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleGetIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueInputSchema, input);\n\n // Accept either an issue key or a full Jira URL and extract the key\n const key = (validated.issueKey || '').trim();\n\n log.info(`Getting issue ${key}...`);\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n\n const issue = await getIssue(key, getParams);\n\n log.info(`Retrieved issue ${issue.key}`);\n\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleGetIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { SearchIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { searchIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:search-issues');\n\nexport const searchIssuesTool: Tool = {\n name: TOOL_NAMES.SEARCH_ISSUES,\n description:\n 'Search for Jira issues using JQL. Supports complex queries with pagination and field selection. Examples: \"project = PROJECT AND status = Open\", \"assignee = currentUser()\".',\n inputSchema: {\n type: 'object',\n properties: {\n jql: {\n type: 'string',\n description: 'JQL query string (e.g., \"project = PROJECT AND status = Open\")',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: ['jql'],\n },\n};\n\nexport async function handleSearchIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(SearchIssuesInputSchema, input);\n\n log.info(`Searching issues with JQL: \"${validated.jql}\"...`);\n\n const searchParams: any = {\n jql: validated.jql,\n };\n\n if (validated.startAt !== undefined) searchParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) searchParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) searchParams.fields = validated.fields;\n if (validated.expand !== undefined) searchParams.expand = validated.expand;\n\n const result = await searchIssues(searchParams);\n\n log.info(`Found ${result.total} issue(s), showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleSearchIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetMyIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getMyIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-my-issues');\n\nexport const getMyIssuesTool: Tool = {\n name: TOOL_NAMES.GET_MY_ISSUES,\n description:\n 'Retrieves issues assigned to current user, sorted by most recently updated first. Supports pagination and field selection.',\n inputSchema: {\n type: 'object',\n properties: {\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetMyIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetMyIssuesInputSchema, input);\n\n log.info('Getting issues assigned to current user...');\n\n const getParams: any = {};\n\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n\n const result = await getMyIssues(getParams);\n\n log.info(`Found ${result.total} issue(s) assigned to you, showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleGetMyIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueTypesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssueTypes } from '../utils/api-helpers.js';\nimport { formatIssueTypesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue-types');\n\nexport const getIssueTypesTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE_TYPES,\n description:\n 'Retrieves available issue types. Can get global issue types or project-specific issue types including regular issues and subtasks (Bug, Story, Task, Epic, etc.).',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description:\n 'Project key to get issue types for specific project (optional - if not provided, returns global issue types)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetIssueTypes(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueTypesInputSchema, input);\n\n if (validated.projectKey) {\n log.info(`Getting issue types for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global issue types...');\n }\n\n const issueTypes = await getIssueTypes(validated.projectKey);\n\n log.info(`Found ${issueTypes.length} issue type(s)`);\n\n return formatIssueTypesResponse(issueTypes);\n } catch (error) {\n log.error('Error in handleGetIssueTypes:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetUsersInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getUsers } from '../utils/api-helpers.js';\nimport { formatUsersResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-users');\n\nexport const getUsersTool: Tool = {\n name: TOOL_NAMES.GET_USERS,\n description:\n 'Search for users by name, email, username, or account ID. Returns display name, email, account status, and account type. Supports pagination.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query for user name or email (partial matches supported)',\n },\n username: {\n type: 'string',\n description: 'Specific username to search for',\n },\n accountId: {\n type: 'string',\n description: 'Specific account ID to search for',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 50,\n default: 50,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetUsers(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetUsersInputSchema, input);\n\n if (validated.query) {\n log.info(`Searching users with query: \"${validated.query}\"...`);\n } else if (validated.username) {\n log.info(`Searching for username: \"${validated.username}\"...`);\n } else if (validated.accountId) {\n log.info(`Searching for account ID: \"${validated.accountId}\"...`);\n } else {\n log.info('Getting all users...');\n }\n\n const getParams: any = {};\n\n if (validated.query !== undefined) getParams.query = validated.query;\n if (validated.username !== undefined) getParams.username = validated.username;\n if (validated.accountId !== undefined) getParams.accountId = validated.accountId;\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n\n const users = await getUsers(getParams);\n\n log.info(`Found ${users.length} user(s)`);\n\n return formatUsersResponse(users);\n } catch (error) {\n log.error('Error in handleGetUsers:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetPrioritiesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getPriorities } from '../utils/api-helpers.js';\nimport { formatPrioritiesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-priorities');\n\nexport const getPrioritiesTool: Tool = {\n name: TOOL_NAMES.GET_PRIORITIES,\n description:\n 'Retrieves available priorities (e.g., Highest, High, Medium, Low, Lowest). Returns IDs, names, and descriptions.',\n inputSchema: {\n type: 'object',\n properties: {},\n required: [],\n },\n};\n\nexport async function handleGetPriorities(input: unknown): Promise<McpToolResponse> {\n try {\n validateInput(GetPrioritiesInputSchema, input);\n\n log.info('Getting all priority levels...');\n\n const priorities = await getPriorities();\n\n log.info(`Found ${priorities.length} priority level(s)`);\n\n return formatPrioritiesResponse(priorities);\n } catch (error) {\n log.error('Error in handleGetPriorities:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetStatusesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getStatuses } from '../utils/api-helpers.js';\nimport { formatStatusesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-statuses');\n\nexport const getStatusesTool: Tool = {\n name: TOOL_NAMES.GET_STATUSES,\n description:\n 'Retrieves available statuses (global or project-specific, e.g., To Do, In Progress, Done). Returns status categories and workflow information.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get statuses for specific project (optional)',\n },\n issueTypeId: {\n type: 'string',\n description: 'Issue type ID to get statuses for specific issue type (requires projectKey)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetStatuses(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetStatusesInputSchema, input);\n\n if (validated.projectKey && validated.issueTypeId) {\n log.info(\n `Getting statuses for project ${validated.projectKey} and issue type ${validated.issueTypeId}...`\n );\n } else if (validated.projectKey) {\n log.info(`Getting statuses for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global statuses...');\n }\n\n const getParams: any = {};\n\n if (validated.projectKey !== undefined) getParams.projectKey = validated.projectKey;\n if (validated.issueTypeId !== undefined) getParams.issueTypeId = validated.issueTypeId;\n\n const statuses = await getStatuses(getParams);\n\n log.info(`Found ${statuses.length} status(es)`);\n\n return formatStatusesResponse(statuses);\n } catch (error) {\n log.error('Error in handleGetStatuses:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:create-issue');\n\nexport const createIssueTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE,\n description:\n 'Creates a new Jira issue in the specified project. Supports setting issue type, priority, assignee, labels, components, and custom fields. Description accepts plain text and is auto-formatted to ADF: lines ending with \":\" become headings, numbered lines create ordered lists, and URLs are linkified. For required custom fields, supply them via customFields (e.g., { \"customfield_12345\": { id: \"...\" } }). Returns the created issue with all details.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key where the issue will be created',\n },\n summary: {\n type: 'string',\n description: 'Issue summary/title',\n minLength: 1,\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'Detailed issue description (optional). Accepts plain text (auto-formatted to ADF) or an ADF document.',\n },\n issueType: {\n type: 'string',\n description: 'Issue type name (e.g., Bug, Story, Task, Epic)',\n },\n priority: {\n type: 'string',\n description: 'Issue priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Issue labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n customFields: {\n type: 'object',\n additionalProperties: true,\n description:\n 'Additional Jira fields, e.g. { \"customfield_10071\": value }. Use this to set required custom fields.',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns only the issue key without fetching full details',\n default: true,\n },\n },\n required: ['projectKey', 'summary', 'issueType'],\n },\n};\n\nexport async function handleCreateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueInputSchema, input);\n\n log.info(`Creating issue in project ${validated.projectKey}...`);\n\n const createParams: any = {\n projectKey: validated.projectKey,\n summary: validated.summary,\n issueType: validated.issueType,\n };\n\n if (validated.description !== undefined) createParams.description = validated.description;\n if (validated.priority !== undefined) createParams.priority = validated.priority;\n if (validated.assignee !== undefined) createParams.assignee = validated.assignee;\n if (validated.labels !== undefined) createParams.labels = validated.labels;\n if (validated.components !== undefined) createParams.components = validated.components;\n if (validated.customFields !== undefined) createParams.customFields = validated.customFields;\n\n let issueOrKey;\n if (validated.returnIssue === false) {\n issueOrKey = await createIssue(createParams, { returnIssue: false });\n } else {\n // Default behavior: request full issue; keep API surface compatible with tests\n issueOrKey = await createIssue(createParams);\n }\n\n if (validated.returnIssue === false) {\n const key = typeof issueOrKey === 'string' ? issueOrKey : (issueOrKey as any).key;\n log.info(`Created issue ${key}`);\n return formatSuccessResponse(`Issue created: ${key}`);\n }\n\n const issue = issueOrKey as any;\n log.info(`Created issue ${issue.key}`);\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleCreateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { UpdateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { updateIssue, getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:update-issue');\n\nexport const updateIssueTool: Tool = {\n name: TOOL_NAMES.UPDATE_ISSUE,\n description:\n 'Updates an existing Jira issue by its key. Supports updating summary, description, priority, assignee, labels, and components. Description accepts plain text and is auto-formatted to ADF: headings (lines ending with \":\"), numbered/bullet lists, and links. Only specified fields will be updated.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to update (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'New issue summary/title (optional)',\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'New issue description (optional). Accepts plain text (auto-formatted to ADF) or an ADF document.',\n },\n priority: {\n type: 'string',\n description: 'New priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'New assignee account ID (optional, use null string to unassign)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'New labels array (replaces existing labels) - optional',\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'New components array (replaces existing components) - optional',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns a success message without fetching the updated issue',\n default: true,\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleUpdateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(UpdateIssueInputSchema, input);\n\n log.info(`Updating issue ${validated.issueKey}...`);\n\n const updateParams: any = {};\n\n if (validated.summary !== undefined) updateParams.summary = validated.summary;\n if (validated.description !== undefined) updateParams.description = validated.description;\n if (validated.priority !== undefined) updateParams.priority = validated.priority;\n if (validated.assignee !== undefined) updateParams.assignee = validated.assignee;\n if (validated.labels !== undefined) updateParams.labels = validated.labels;\n if (validated.components !== undefined) updateParams.components = validated.components;\n\n await updateIssue(validated.issueKey, updateParams);\n\n if (validated.returnIssue === false) {\n log.info(`Updated issue ${validated.issueKey}`);\n return formatSuccessResponse(`Issue ${validated.issueKey} updated successfully`);\n }\n\n // Get the updated issue to return current state\n const updatedIssue = await getIssue(validated.issueKey);\n\n log.info(`Updated issue ${updatedIssue.key}`);\n\n return formatIssueResponse(updatedIssue);\n } catch (error) {\n log.error('Error in handleUpdateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { AddCommentInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { addComment } from '../utils/api-helpers.js';\nimport { formatCommentResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:add-comment');\n\nexport const addCommentTool: Tool = {\n name: TOOL_NAMES.ADD_COMMENT,\n description:\n 'Adds a comment to an issue. Supports visibility restrictions for groups or roles. Returns the created comment with author details and timestamp.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to add comment to (e.g., PROJECT-123)',\n },\n body: {\n type: 'string',\n description: 'Comment body text',\n minLength: 1,\n },\n visibility: {\n type: 'object',\n description: 'Comment visibility restrictions (optional)',\n properties: {\n type: {\n type: 'string',\n enum: ['group', 'role'],\n description: 'Visibility type - either \"group\" or \"role\"',\n },\n value: {\n type: 'string',\n description: 'Group name or role name for visibility restriction',\n },\n },\n required: ['type', 'value'],\n },\n },\n required: ['issueKey', 'body'],\n },\n};\n\nexport async function handleAddComment(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(AddCommentInputSchema, input);\n\n log.info(`Adding comment to issue ${validated.issueKey}...`);\n\n const comment = await addComment(validated.issueKey, validated.body, validated.visibility);\n\n log.info(`Added comment to ${validated.issueKey}`);\n\n return formatCommentResponse(comment);\n } catch (error) {\n log.error('Error in handleAddComment:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetProjectInfoInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getProjectDetails } from '../utils/api-helpers.js';\nimport { formatProjectDetailsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-project-info');\n\nexport const getProjectInfoTool: Tool = {\n name: TOOL_NAMES.GET_PROJECT_INFO,\n description:\n 'Retrieves detailed information about a project (components, versions, issue types, roles, insights). More comprehensive than the basic project list.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get detailed information for',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\", \"versions\"])',\n default: [],\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetProjectInfo(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetProjectInfoInputSchema, input);\n\n log.info(`Getting detailed project information for ${validated.projectKey}...`);\n\n const project = await getProjectDetails(validated.projectKey, validated.expand);\n\n log.info(`Retrieved project details for ${project.key}`);\n\n return formatProjectDetailsResponse(project);\n } catch (error) {\n log.error('Error in handleGetProjectInfo:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateSubtaskInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createSubtask } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-subtask');\n\nexport const createSubtaskTool: Tool = {\n name: TOOL_NAMES.CREATE_SUBTASK,\n description:\n 'Creates a subtask under an existing parent issue. Automatically determines the correct project and subtask issue type. Supports setting priority, assignee, labels, and components.',\n inputSchema: {\n type: 'object',\n properties: {\n parentIssueKey: {\n type: 'string',\n description: 'Parent issue key (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'Subtask summary/title',\n minLength: 1,\n },\n description: {\n type: 'string',\n description: 'Detailed subtask description (optional)',\n },\n priority: {\n type: 'string',\n description: 'Subtask priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Subtask labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n },\n required: ['parentIssueKey', 'summary'],\n },\n};\n\nexport async function handleCreateSubtask(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateSubtaskInputSchema, input);\n\n log.info(`Creating subtask under parent issue ${validated.parentIssueKey}...`);\n\n const subtaskParams: any = {\n summary: validated.summary,\n };\n\n if (validated.description !== undefined) subtaskParams.description = validated.description;\n if (validated.priority !== undefined) subtaskParams.priority = validated.priority;\n if (validated.assignee !== undefined) subtaskParams.assignee = validated.assignee;\n if (validated.labels !== undefined) subtaskParams.labels = validated.labels;\n if (validated.components !== undefined) subtaskParams.components = validated.components;\n\n const subtask = await createSubtask(validated.parentIssueKey, subtaskParams);\n\n log.info(`Created subtask ${subtask.key}`);\n\n return formatIssueResponse(subtask);\n } catch (error) {\n log.error('Error in handleCreateSubtask:', error);\n return handleError(error);\n }\n}\n","// Load .env file in development mode\nif (process.env.NODE_ENV !== 'production') {\n try {\n const { config } = await import('dotenv');\n config();\n // Loaded .env silently; logging handled by logger\n } catch {\n // no-op; continue without .env\n }\n}\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n CallToolRequest,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { validateAuth, testConnection } from './utils/jira-auth.js';\nimport { createLogger } from './utils/logger.js';\nimport { TOOL_NAMES } from './config/constants.js';\n\nconst log = createLogger('server');\n\n// Import all tools\nimport * as tools from './tools/index.js';\n\n// Tool handler mapping\nconst toolHandlers = new Map<string, (input: unknown) => Promise<any>>([\n [TOOL_NAMES.GET_VISIBLE_PROJECTS, tools.handleGetVisibleProjects],\n [TOOL_NAMES.GET_ISSUE, tools.handleGetIssue],\n [TOOL_NAMES.SEARCH_ISSUES, tools.handleSearchIssues],\n [TOOL_NAMES.GET_MY_ISSUES, tools.handleGetMyIssues],\n [TOOL_NAMES.GET_ISSUE_TYPES, tools.handleGetIssueTypes],\n [TOOL_NAMES.GET_USERS, tools.handleGetUsers],\n [TOOL_NAMES.GET_PRIORITIES, tools.handleGetPriorities],\n [TOOL_NAMES.GET_STATUSES, tools.handleGetStatuses],\n [TOOL_NAMES.CREATE_ISSUE, tools.handleCreateIssue],\n [TOOL_NAMES.UPDATE_ISSUE, tools.handleUpdateIssue],\n [TOOL_NAMES.ADD_COMMENT, tools.handleAddComment],\n [TOOL_NAMES.GET_PROJECT_INFO, tools.handleGetProjectInfo],\n [TOOL_NAMES.CREATE_SUBTASK, tools.handleCreateSubtask],\n]);\n\n// All available tools\nconst allTools = [\n tools.getVisibleProjectsTool,\n tools.getIssueTool,\n tools.searchIssuesTool,\n tools.getMyIssuesTool,\n tools.getIssueTypesTool,\n tools.getUsersTool,\n tools.getPrioritiesTool,\n tools.getStatusesTool,\n tools.createIssueTool,\n tools.updateIssueTool,\n tools.addCommentTool,\n tools.getProjectInfoTool,\n tools.createSubtaskTool,\n];\n\nasync function main() {\n // Validate authentication on startup\n try {\n const auth = validateAuth();\n console.error(`🔐 Authenticated as: ${auth.email}`);\n console.error(`🌐 Jira instance: ${auth.baseUrl}`);\n\n // Always test connection on startup for predictable behavior in tests\n console.error('🔍 Testing connection to Jira...');\n const ok = await testConnection();\n if (!ok) {\n console.error('❌ Connection to Jira failed');\n process.exit(1);\n return;\n }\n console.error('✅ Connection to Jira successful');\n } catch (error: any) {\n console.error('❌ Authentication Error:', error.message);\n process.exit(1);\n return;\n }\n\n // Read version from package.json\n let version = '0.0.0';\n try {\n const pkg = await import('../package.json', { assert: { type: 'json' } } as any);\n version = (pkg as any).default?.version || (pkg as any).version || version;\n } catch {\n // ignore\n }\n\n const server = new Server(\n {\n name: 'jira-mcp-server',\n version,\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n );\n\n // List available tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n console.error(`📋 Listing ${allTools.length} available tool(s)`);\n return { tools: allTools };\n });\n\n // Handle tool execution\n server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {\n const { name, arguments: args } = request.params;\n\n console.error(`🛠️ Executing tool: ${name}`);\n\n const handler = toolHandlers.get(name);\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n try {\n const result = await handler(args);\n console.error(`✅ Tool ${name} executed successfully`);\n return result;\n } catch (error: any) {\n console.error(`❌ Error executing tool ${name}:`, error.message);\n throw error;\n }\n });\n\n // List resources (not implemented for this server)\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n return { resources: [] };\n });\n\n // Read resource (not implemented for this server)\n server.setRequestHandler(ReadResourceRequestSchema, async () => {\n throw new Error('Resource reading not implemented');\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('🚀 Jira MCP server running on stdio');\n}\n\nmain().catch((error) => {\n log.error('Fatal error:', error);\n process.exit(1);\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-jira-stdio",
3
- "version": "1.1.0",
3
+ "version": "1.1.3",
4
4
  "description": "Model Context Protocol (MCP) server for Jira API integration",
5
5
  "author": "graslt",
6
6
  "license": "MIT",