{"_id":"@alexbuzo/jira-mcp","_rev":"4-c509d6eaabb7d080131498f01b8d3801","name":"@alexbuzo/jira-mcp","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@alexbuzo/jira-mcp","version":"1.0.0","keywords":["mcp","jira","confluence","atlassian","typescript"],"author":"","license":"MIT","_id":"@alexbuzo/jira-mcp@1.0.0","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/JIRA_MCP#readme","bugs":{"url":"https://github.com/abuzo/JIRA_MCP/issues"},"bin":{"jira-mcp":"bin/jira-mcp.mjs"},"dist":{"shasum":"265c4e39faaa069a3cca879e91c9235f7e85007e","tarball":"https://registry.npmjs.org/@alexbuzo/jira-mcp/-/jira-mcp-1.0.0.tgz","fileCount":35,"integrity":"sha512-bsziLEw1c81FHW4EXJUl+a1Asukuyg9rLRfZrc0ujXnhywrcEOvFFdpZx46k+rme/8nd8GFaGrMxHwv/PWkmqg==","signatures":[{"sig":"MEYCIQDztmvXwDvjzAxGswcwGQJSI0guMVEwFhBf8KuOugch7AIhAN/icMy6PQcpVLm6MtSOTYeWj8nl1jQlqWR0buZH880U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155227},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"9b8df4dc8c816cd4235b1fa2668e1ac66b04c95d","scripts":{"dev":"node --loader ts-node/esm src/index.ts","lint":"eslint .","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","manual:test":"node scripts/manual-test.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/JIRA_MCP.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-ready MCP server for Atlassian Jira and Confluence","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ajv":"^8.17.1","dotenv":"^16.4.5","undici":"^7.13.0","node-html-parser":"^7.0.1","@modelcontextprotocol/sdk":"^1.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","eslint":"^9.20.1","ts-node":"^10.9.2","prettier":"^3.5.1","typescript":"^5.7.3","@types/node":"^22.13.4","eslint-config-prettier":"^10.0.1","@typescript-eslint/parser":"^8.24.0","@typescript-eslint/eslint-plugin":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_1.0.0_1776860643774_0.7513378396795725","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alexbuzo/jira-mcp","version":"1.0.1","keywords":["mcp","jira","confluence","atlassian","typescript"],"author":"","license":"MIT","_id":"@alexbuzo/jira-mcp@1.0.1","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/JIRA_MCP#readme","bugs":{"url":"https://github.com/abuzo/JIRA_MCP/issues"},"bin":{"jira-mcp":"bin/jira-mcp.mjs"},"dist":{"shasum":"6469e22511c52ed82c440b83060a3740a666f99e","tarball":"https://registry.npmjs.org/@alexbuzo/jira-mcp/-/jira-mcp-1.0.1.tgz","fileCount":35,"integrity":"sha512-u/tX64TaxB2xzz/+1CXOsdea/g+gL8bQRhPag79JEiombFb1HI2IcD1aOpo5Yf+CK3BX8Btz4+W3gn+tYSDFGw==","signatures":[{"sig":"MEUCICVJEWe3Oi8/3O0ADtrZkk39eiTLaKUZ1AnSVbsxnoaQAiEAoC5kxuhHss6cbCwSjMrjBV7jQ8ZokWxr/JFT8pQ6V+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192741},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"9b8df4dc8c816cd4235b1fa2668e1ac66b04c95d","scripts":{"dev":"node --loader ts-node/esm src/index.ts","lint":"eslint .","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","manual:test":"node scripts/manual-test.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/JIRA_MCP.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-ready MCP server for Atlassian Jira and Confluence","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ajv":"^8.17.1","dotenv":"^16.4.5","undici":"^7.13.0","node-html-parser":"^7.0.1","@modelcontextprotocol/sdk":"^1.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","eslint":"^9.20.1","ts-node":"^10.9.2","prettier":"^3.5.1","typescript":"^5.7.3","@types/node":"^22.13.4","eslint-config-prettier":"^10.0.1","@typescript-eslint/parser":"^8.24.0","@typescript-eslint/eslint-plugin":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_1.0.1_1778244113522_0.29465366566838447","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alexbuzo/jira-mcp","version":"1.0.2","keywords":["mcp","jira","confluence","atlassian","typescript"],"author":"","license":"MIT","_id":"@alexbuzo/jira-mcp@1.0.2","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"homepage":"https://github.com/abuzo/JIRA_MCP#readme","bugs":{"url":"https://github.com/abuzo/JIRA_MCP/issues"},"bin":{"jira-mcp":"bin/jira-mcp.mjs"},"dist":{"shasum":"b31a830278ca927a2a79530e5606bf76e8be1cb0","tarball":"https://registry.npmjs.org/@alexbuzo/jira-mcp/-/jira-mcp-1.0.2.tgz","fileCount":35,"integrity":"sha512-4+MtSVzCOLReOTr2lgmGJu+PQSsAJdsTgN9YC0zURJPgv4WtbFw4tjRNcJUI/B7i6CF+7pu4w5tNwX8IBlKkKQ==","signatures":[{"sig":"MEUCIQDrPgH/kXDKAC1WaBK04/uYyO+Bv5YuoF9HirYD2SWtUgIgSnhbKvcUG3voFJBM4uWDH7G9CPdFBifrEjlrLWNr1AM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202199},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":"./dist/index.js"},"gitHead":"9b8df4dc8c816cd4235b1fa2668e1ac66b04c95d","scripts":{"dev":"node --loader ts-node/esm src/index.ts","lint":"eslint .","test":"node --test --import tsx tests/**/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","manual:test":"node scripts/manual-test.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"repository":{"url":"git+https://github.com/abuzo/JIRA_MCP.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-ready MCP server for Atlassian Jira and Confluence","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ajv":"^8.17.1","dotenv":"^16.4.5","undici":"^7.13.0","node-html-parser":"^7.0.1","@modelcontextprotocol/sdk":"^1.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","eslint":"^9.20.1","ts-node":"^10.9.2","prettier":"^3.5.1","typescript":"^5.7.3","@types/node":"^22.13.4","eslint-config-prettier":"^10.0.1","@typescript-eslint/parser":"^8.24.0","@typescript-eslint/eslint-plugin":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_1.0.2_1778263310881_0.39531202953276745","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alexbuzo/jira-mcp","version":"1.0.3","description":"Production-ready MCP server for Atlassian Jira and Confluence","type":"module","main":"dist/index.js","exports":{".":"./dist/index.js"},"bin":{"jira-mcp":"bin/jira-mcp.mjs"},"engines":{"node":">=20.0.0"},"scripts":{"dev":"node --loader ts-node/esm src/index.ts","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build","start":"node dist/index.js","test":"node --test --import tsx tests/**/*.test.ts","lint":"eslint .","format":"prettier --write .","manual:test":"node scripts/manual-test.mjs"},"keywords":["mcp","jira","confluence","atlassian","typescript"],"author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abuzo/JIRA_MCP.git"},"homepage":"https://github.com/abuzo/JIRA_MCP#readme","bugs":{"url":"https://github.com/abuzo/JIRA_MCP/issues"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"^1.17.0","ajv":"^8.17.1","dotenv":"^16.4.5","node-html-parser":"^7.0.1","undici":"^7.13.0"},"devDependencies":{"@types/node":"^22.13.4","@typescript-eslint/eslint-plugin":"^8.24.0","@typescript-eslint/parser":"^8.24.0","eslint":"^9.20.1","eslint-config-prettier":"^10.0.1","prettier":"^3.5.1","ts-node":"^10.9.2","tsx":"^4.19.3","typescript":"^5.7.3"},"gitHead":"9b8df4dc8c816cd4235b1fa2668e1ac66b04c95d","types":"./dist/index.d.ts","_id":"@alexbuzo/jira-mcp@1.0.3","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-r/4f98agoGt2NwWKD3dLMjfuvTPoJsz4L2b3FocSzStLBjefMa3n75dAiGumBeFIFVcxtM2oJOJAUZ0kyt/jXQ==","shasum":"7be6d67ec865e7bcd7789248dfdf78e3db76687b","tarball":"https://registry.npmjs.org/@alexbuzo/jira-mcp/-/jira-mcp-1.0.3.tgz","fileCount":35,"unpackedSize":204057,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBOZ0+cdaJMY4ydQ+vV01ejhSG0sahbPPNrPMkFN2bMbAiByH47/Xr1Mq9aOQEWfssJ6AtueUGsgfDr7byOJMlgpdw=="}]},"_npmUser":{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"},"directories":{},"maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jira-mcp_1.0.3_1779367280293_0.6291705764164623"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-22T12:24:03.558Z","modified":"2026-05-21T12:41:20.557Z","1.0.0":"2026-04-22T12:24:03.913Z","1.0.1":"2026-05-08T12:41:53.694Z","1.0.2":"2026-05-08T18:01:51.044Z","1.0.3":"2026-05-21T12:41:20.443Z"},"bugs":{"url":"https://github.com/abuzo/JIRA_MCP/issues"},"license":"MIT","homepage":"https://github.com/abuzo/JIRA_MCP#readme","keywords":["mcp","jira","confluence","atlassian","typescript"],"repository":{"type":"git","url":"git+https://github.com/abuzo/JIRA_MCP.git"},"description":"Production-ready MCP server for Atlassian Jira and Confluence","maintainers":[{"name":"alexbuzo","email":"aliakseibuzo@gmail.com"}],"readme":"# @alexbuzo/jira-mcp\n\nMCP server for Atlassian Jira and Confluence, built with Node.js and TypeScript.\n\nIt exposes Jira and Confluence REST operations as MCP tools, with service-specific authentication, request validation, token-redacted logging, retry handling, and helpers for large Confluence pages.\n\n## Requirements\n\n- Node.js `>=20`\n- npm\n\nNode 16 is not supported. Recent `undici` versions require Web APIs such as `ReadableStream` that are not available in Node 16.\n\n## Use with an MCP client\n\nPublished package:\n\n```json\n{\n  \"mcpServers\": {\n    \"jira-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@alexbuzo/jira-mcp@latest\"],\n      \"env\": {\n        \"ATLASSIAN_SITE\": \"https://company.atlassian.net\",\n        \"JIRA_BASE_URL\": \"https://jira.company.internal\",\n        \"JIRA_API_VERSION\": \"2\",\n        \"CONFLUENCE_BASE_URL\": \"https://wiki.company.internal\",\n        \"CONFLUENCE_API_PREFIX\": \"/rest/api\",\n        \"JIRA_BEARER_TOKEN\": \"jira_token\",\n        \"CONFLUENCE_BEARER_TOKEN\": \"confluence_token\",\n        \"SSL_VERIFY\": \"true\"\n      }\n    }\n  }\n}\n```\n\nLocal checkout:\n\n```bash\nnpm install\nnpm run build\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"jira-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/JIRA_MCP/dist/index.js\"],\n      \"env\": {\n        \"ATLASSIAN_SITE\": \"https://company.atlassian.net\",\n        \"JIRA_BEARER_TOKEN\": \"jira_token\",\n        \"CONFLUENCE_BEARER_TOKEN\": \"confluence_token\"\n      }\n    }\n  }\n}\n```\n\n## Configuration\n\nCopy `.env.example` for local development, or pass the same variables through the MCP client config.\n\n| Variable                                                              | Description                                                                                           |\n| --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| `ATLASSIAN_SITE`                                                      | Required fallback base URL.                                                                           |\n| `JIRA_BASE_URL`                                                       | Optional Jira base URL. Defaults to `ATLASSIAN_SITE`.                                                 |\n| `JIRA_API_VERSION`                                                    | Jira REST version, `2` or `3`. Defaults to `2`.                                                       |\n| `CONFLUENCE_BASE_URL`                                                 | Optional Confluence base URL. Defaults to `ATLASSIAN_SITE`.                                           |\n| `CONFLUENCE_API_PREFIX`                                               | Confluence REST prefix. Use `/wiki/rest/api` for Cloud, `/rest/api` for Server/Data Center.           |\n| `JIRA_BEARER_TOKEN` / `CONFLUENCE_BEARER_TOKEN`                       | Service-specific Bearer auth.                                                                         |\n| `JIRA_EMAIL` + `JIRA_API_TOKEN`                                       | Jira Basic auth.                                                                                      |\n| `CONFLUENCE_EMAIL` + `CONFLUENCE_API_TOKEN`                           | Confluence Basic auth.                                                                                |\n| `ATLASSIAN_BEARER_TOKEN` or `ATLASSIAN_EMAIL` + `ATLASSIAN_API_TOKEN` | Global auth fallback.                                                                                 |\n| `SSL_VERIFY`                                                          | Set `false` only for corporate/self-signed certificate chains. Defaults to `true`.                    |\n| `REQUEST_TIMEOUT_MS`                                                  | HTTP timeout. Defaults to `30000`.                                                                    |\n| `MAX_RETRIES`                                                         | Retry count for retryable HTTP errors. Defaults to `4`.                                               |\n| `MAX_RESPONSE_BYTES`                                                  | Max HTTP response size. Defaults to `52428800` (50 MB).                                               |\n| `MAX_FILE_BYTES`                                                      | Max local file size for `*_from_file` tools. Defaults to `104857600` (100 MB).                        |\n| `MCP_ALLOWED_FILE_ROOTS`                                              | Path-delimited allowlist for local file tools. Defaults to the process cwd and system temp directory. |\n| `MCP_OUTPUT_DIR`                                                      | Directory for `saveToFile` tool outputs. Defaults to `./mcp-output`.                                  |\n\nAuth precedence is service-specific Bearer, service-specific Basic, global Bearer, then global Basic.\n\n## Tools\n\nGeneric proxy tools:\n\n- `jira_request`\n- `confluence_request`\n\nJira tools:\n\n- `jira_search_issues`\n- `jira_get_issue`\n- `jira_get_project`\n- `jira_list_projects`\n- `jira_get_transitions`\n- `jira_transition_issue`\n- `jira_add_comment`\n- `jira_get_users`\n- `jira_download_attachment`\n\nConfluence tools:\n\n- `confluence_get_page`\n- `confluence_search`\n- `confluence_get_children`\n- `confluence_get_page_content`\n- `confluence_create_page_from_file`\n- `confluence_update_page_from_file`\n- `confluence_patch_page_text`\n- `confluence_get_attachments`\n- `confluence_download_attachment`\n\nAll tools also accept `saveToFile`. Use it when a tool result is too large for the MCP context or when another worker/agent needs to read the result later:\n\n```json\n{\n  \"jql\": \"project = ABC ORDER BY updated DESC\",\n  \"fields\": [\"summary\", \"description\", \"comment\"],\n  \"maxResults\": 1000,\n  \"saveToFile\": true\n}\n```\n\nThe MCP response stays compact:\n\n```json\n{\n  \"status\": 200,\n  \"headers\": {\n    \"content-type\": \"application/json\"\n  },\n  \"body\": {\n    \"savedToFile\": true,\n    \"filePath\": \"/absolute/path/to/mcp-output/jira_search_issues-2026-05-08T12-34-56-000Z-a1b2c3d4.json\",\n    \"sizeBytes\": 734221,\n    \"tool\": \"jira_search_issues\"\n  }\n}\n```\n\nOptional file name:\n\n```json\n{\n  \"jql\": \"project = ABC\",\n  \"saveToFile\": {\n    \"fileName\": \"batch-001.json\",\n    \"pretty\": true\n  }\n}\n```\n\nDirectory components in `fileName` are ignored and the file name is sanitized before writing inside `MCP_OUTPUT_DIR`.\n\n## Large Confluence Pages\n\nDo not send large page bodies as inline MCP arguments. Use file-based tools or server-side patching so the MCP response stays compact.\n\nUpdate a page from a local storage HTML file:\n\n```json\n{\n  \"pageId\": \"12345\",\n  \"storageFilePath\": \"/path/to/page.storage.html\",\n  \"minorEdit\": true\n}\n```\n\nPatch a few strings on a large page:\n\n```json\n{\n  \"pageId\": \"12345\",\n  \"replacements\": [\n    {\n      \"find\": \"Old release name\",\n      \"replace\": \"New release name\",\n      \"expectedOccurrences\": 1\n    }\n  ],\n  \"minorEdit\": true\n}\n```\n\n`confluence_patch_page_text` fetches the full Confluence storage body inside the MCP server, validates occurrence counts, writes the patched full body back to Confluence, and returns compact metadata. Existing Confluence attachment and image macros remain referenced in the page storage.\n\n## Development\n\n```bash\nnpm install\nnpm run dev\nnpm run build\nnpm run lint\nnpm run manual:test\n```\n\nThe official MCP SDK is used when available. If SDK loading fails, the server falls back to a minimal JSON-RPC stdio adapter.\n\n## Troubleshooting\n\n- `ReadableStream is not defined`: upgrade to Node.js 20 or newer.\n- Redirects to `login.action` or `fourohfour.action`: check auth and `CONFLUENCE_API_PREFIX`.\n- Self-signed certificate errors: set `SSL_VERIFY=false` only if your environment requires it.\n- Large Confluence pages fail through inline arguments: use `confluence_update_page_from_file` or `confluence_patch_page_text`.\n","readmeFilename":"README.md"}