{"_id":"@cuongph.dev/jira-mcp","_rev":"16-2a6bcd85f0c922d703a12afc34910c4e","name":"@cuongph.dev/jira-mcp","dist-tags":{"latest":"0.1.15"},"versions":{"0.1.0":{"name":"@cuongph.dev/jira-mcp","version":"0.1.0","_id":"@cuongph.dev/jira-mcp@0.1.0","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"c84442c87bc9a539ec2b6db07085875235fe5c5b","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.0.tgz","fileCount":244,"integrity":"sha512-pEoBY5HM9Viv7o7rA0FOWVDzqGbEA8xYunCYLbmFuuxfRChknSJ/m75RQPYTroA2pE8woqRJHd3rPxqZtyZcRQ==","signatures":[{"sig":"MEYCIQDzV9Z6xcTc35w6nv0yeKysyZCW/WLxLuvtVdd73yVRowIhAOdHYR9oRiAjAdpoBP8Mo7aJDNpuyznpYJRNJ+j4v1tX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":664596},"type":"module","engines":{"node":">=20"},"gitHead":"3b2be7c22cbbd598460c19a5f8c7dadd3fceef88","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.0_1777128816101_0.7163070115066157","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.1":{"name":"@cuongph.dev/jira-mcp","version":"0.1.1","_id":"@cuongph.dev/jira-mcp@0.1.1","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"da8d88a956a6a67b367ea307d0f13b45e1542a1e","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.1.tgz","fileCount":244,"integrity":"sha512-/3jlmlO5TuftS+w+F60CkpfdtNVSmTgKuTQpBNQYgEHhbiPWfxpzskG5JUuEiaB4j3GiNENa3CrsSIL2fEhsuQ==","signatures":[{"sig":"MEYCIQCbOug7KMqSDCAwcP3+ZLs4piMTKqj8U7Paa0GvEmB/SQIhAOARI0KFSl2AwQZc5j+reTQe+0kDsejKvRp6qGuBek63","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":666134},"type":"module","engines":{"node":">=20"},"gitHead":"b9bd06f10215ef5be82e36de4d275b383f38a55d","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.1_1777133484440_0.26997483405153244","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.2":{"name":"@cuongph.dev/jira-mcp","version":"0.1.2","_id":"@cuongph.dev/jira-mcp@0.1.2","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"2ba82c6aca84c47f420af918dc6ff2e9863022ff","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.2.tgz","fileCount":244,"integrity":"sha512-wWenni+iS6GL8XF4SyI3nN5439pyUXwLgxOQ6VdmjgEu2JC8TWODslZrQ+TWESm05XFcGULZE9hfwNMrRbMhVw==","signatures":[{"sig":"MEQCIAuUvJHhrvjO+SKPKueS9uH/oC0HzKgDKToGVsCd5ABgAiBQexyyEXqiZYrTsqGoWjDHco6oEQRDvKopnetWAwUs3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":681857},"type":"module","engines":{"node":">=20"},"gitHead":"5d36bd823b287346e571f85c27d42d2b4ce7f8eb","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.2_1777273645661_0.10957719829771206","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.4":{"name":"@cuongph.dev/jira-mcp","version":"0.1.4","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.4","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira-run-mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira-run-mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"13e2a0705bad56657c1922ffe2610143ddefe00d","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.4.tgz","fileCount":249,"integrity":"sha512-PT+50Yp6SUlHESjsaXZoqJwgcvAuFF4TM15O0jBkyWkR/7qJnw6fz7y8yHgDWdicrsi4E2O8eWIoU5pH7MdMEw==","signatures":[{"sig":"MEUCIQD5pJMSfSmFMfRWhXLdjFrWvWo3/P6TVCFWESaLfTLXNwIgETZecD9qORT74eLRISfwy5F95nJHxJUrQaF8DbQM1Hw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":711726},"type":"module","engines":{"node":">=20"},"gitHead":"da6a1b7c6c9f805a16e7a3ea8605fe8ac7feda34","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira-run-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.4_1777280280958_0.5038543003544953","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.5":{"name":"@cuongph.dev/jira-mcp","version":"0.1.5","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.5","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"90dc110d55ac4c951b3ed3169361182c4d958fe2","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.5.tgz","fileCount":251,"integrity":"sha512-4wmftZd1nLdb53UZQrZZCHbW/NYdCSItushgS5wzCPuj+tDHDnyBduFSL3t8CqUcQ65I0z8yn4hAHe55b7ybbQ==","signatures":[{"sig":"MEQCICzUlGuW8sCdMz1O2cCPoC22iyzyx2XalL0wpMpDNX8OAiB4qMfslEn1sMcOZLdxdWAgRqRGH+uzGhrhLV2I/xKL4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":713238},"type":"module","engines":{"node":">=20"},"gitHead":"dfc8a53633568583d187833cfc14d3269907738b","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.5_1777283299942_0.19858109711902383","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.6":{"name":"@cuongph.dev/jira-mcp","version":"0.1.6","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.6","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"6fa72e645b285014aa90d34d6c086b491ace5819","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.6.tgz","fileCount":255,"integrity":"sha512-QlReCjp5Mu5yR4d3FmotXRP6UOe34ckuXPln0+HZe1yzL66XGhbABxHKolvWWqPiZquhU/q834ezj+AjHB+wcQ==","signatures":[{"sig":"MEUCIFLWonsogR/Kr8ztu76GvymYu94Y3+bEhdBdPkKnAyoMAiEA3GM8MdOKsH3zbSsbT3QixBViMPj+KXYYn059CZPpBx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718666},"type":"module","engines":{"node":">=20"},"gitHead":"543e83a52e67049021971b6d251b4b5a67ceb45a","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.6_1777285953430_0.7983640580212248","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.7":{"name":"@cuongph.dev/jira-mcp","version":"0.1.7","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.7","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"788891fbc375bd6d464d97a7953f9cf80384f184","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.7.tgz","fileCount":255,"integrity":"sha512-XhGUyGP69gv0MOmwIvyCkZ0WDCFfnrDeRyG+uW7SsG+nvxPPMExialV456bb3/ZzaDyYTT+nBlvY9QQYbL45sg==","signatures":[{"sig":"MEYCIQC/3tDPKXredHUl93nVR6OdQIdjCZ1mIzdA76R9DqVY2gIhAL7CQ74/3MHrz0OL2F4OPvzkGRi1jwYvc8CPhzk9oulA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718076},"type":"module","engines":{"node":">=20"},"gitHead":"31184f81b24cdcb536342d8b17fc877e8bfda0f8","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.7_1777286173688_0.41079123544795104","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.8":{"name":"@cuongph.dev/jira-mcp","version":"0.1.8","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.8","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"fdac5060deceb5359c44241739aba9257e70575c","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.8.tgz","fileCount":255,"integrity":"sha512-v5Cv9m4LonaOpXiAAbexthADIBqaaiuz/fam0/Tk2ZipOuGHvAsIY2IclyKVfyPboP5+ZbxDbNuYA1/k7DANYA==","signatures":[{"sig":"MEYCIQCOwMbb78W0XVRzEoGRYvk2BpBVJixAw8hEIk2KSMPXVgIhAOMqyVK0GUAvpyODDZ/TV80Y+7G1vmMY0e5JsaJ3goGE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718075},"type":"module","engines":{"node":">=20"},"gitHead":"31184f81b24cdcb536342d8b17fc877e8bfda0f8","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.8_1777286334148_0.1589430717527225","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.9":{"name":"@cuongph.dev/jira-mcp","version":"0.1.9","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.9","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"e566d205c7927f6f1354cea9aa70028865e198b2","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.9.tgz","fileCount":255,"integrity":"sha512-7IvcY9kUsaUYo+pWIK72E+SuFafK1ZTSPo6cdoLArfB56HKCNdf1YYsuds7uBv0dCMgP0PcmWQE+GAXvi1n4Zg==","signatures":[{"sig":"MEUCIQDAaHmBDweVnKyPErR0wMflpIhBlMoH4bE9c3md4nTNwgIgLxJsG9EYuIMCdnKd+8p+Bi6QRs7AACQmMH4pZ6eEM+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":720318},"type":"module","engines":{"node":">=20"},"gitHead":"8cbb32dec83fd130f44699ab62210debd7369e8d","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.9_1777293386700_0.5712324551275261","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.10":{"name":"@cuongph.dev/jira-mcp","version":"0.1.10","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.10","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"330efc71b89fe21e479ce9d290b4df5ad576c9bf","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.10.tgz","fileCount":259,"integrity":"sha512-AIbc8broSzTvbx6/cdGycBgWFjL614HigZMmtGGx6eX8/tYhplO8eGtl2hcKfwAX6opufZhSxPgWAlKhl9TDbw==","signatures":[{"sig":"MEQCIBKzzpvrKBP0NrVaoNZPm78Vg9s3gb70mYJvGhnxSX4oAiBDOShHpOhvLoOI7qICkpRTyZ5NsFHbbNEsAx9+YHb5+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":742231},"type":"module","engines":{"node":">=20"},"gitHead":"c49fbf74be689614c7dff33c3b322a669fd20a56","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.10_1777294832373_0.2339367516080042","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.11":{"name":"@cuongph.dev/jira-mcp","version":"0.1.11","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.11","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"52c26ba400107d7cf7bcb1690453e0833d9cab3b","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.11.tgz","fileCount":263,"integrity":"sha512-rbdTXXt2zkLEZb75+DNKR4Sth7p9IUBd13l/wEz0GZ+B9cRBoW927JSB+GWzY/sza059Pi+KghqxpZZmWs2/Wg==","signatures":[{"sig":"MEUCIEQjh/djtu/Psze1bHQ6+VgyljXo6RUhJmr88wH+B246AiEA7NDhbkRSXCoIH+yFm9hRNZ1flgoic6H7tfd1SLkwpE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":763177},"type":"module","engines":{"node":">=20"},"gitHead":"b51f6c3b045729458960a5ed0306704e7786800d","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.11_1777298755775_0.6156749227793177","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.12":{"name":"@cuongph.dev/jira-mcp","version":"0.1.12","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.12","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"76cd9ca7445ff2850d05d12ec296e2e4489cfccd","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.12.tgz","fileCount":283,"integrity":"sha512-lsl5LGTb2P+0J1TXvTHQN9SWghpVECSSAH23QhPIrj8wKhwNmGV9s9gFk9HV1LI/6NuUbF/S7bJOodvg85nWTw==","signatures":[{"sig":"MEQCIHWimkfCuhk4mVKJYhyBxkfQE/hiv1OKP34JOtuRA7+EAiAitit0McY734fdDGq1waKWoGntuH6eEhn9sZxpWBYY8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":836444},"type":"module","engines":{"node":">=20"},"gitHead":"a2e88940141a53a8bbccd4a8171aa31b44164535","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.12_1777309875016_0.5801570571375978","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.13":{"name":"@cuongph.dev/jira-mcp","version":"0.1.13","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.13","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"fd060d6225689fa621d00c2caeabbdc324fe0c16","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.13.tgz","fileCount":283,"integrity":"sha512-E8F5I/+X961kGRgR923kVAqqGphjvSBAqHIlMro+/gVORg+9ZzDUXnthtHYfVU26+lHQqXT3iojsNeFsV+t0hw==","signatures":[{"sig":"MEQCIBA6h2c4UmFWH2lC/wIq6p+GEWQdAyhBSuXd9z4Td5IxAiA6lIdptsAqZnpL/zKRU/Cby3GT8NzU7e03ubLDjFWQEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":848907},"type":"module","engines":{"node":">=20"},"gitHead":"903c742e9f402481c2e479e10e8bed0fcdf85460","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.13_1781178379264_0.7395904710649264","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.14":{"name":"@cuongph.dev/jira-mcp","version":"0.1.14","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.14","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"d6dacb20ac5ce5a7b80588f2655c78696f212328","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.14.tgz","fileCount":283,"integrity":"sha512-aiH5ewVB+9WynkVFsn/loPVxFc50UkVajfNDh254ToyVmkQFlzMaOfppudrbrHt4zNmpghnX95YQeni3YwpBfg==","signatures":[{"sig":"MEQCIG5QK/Ui2fX6LFZCGbNMxB9GF3jNaxnVERJNUWQBxvr6AiANdCUUITBqSqZxAkeV/x0XDrRjjgpc8JLrG7qfYdXqdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849426},"type":"module","engines":{"node":">=20"},"gitHead":"903c742e9f402481c2e479e10e8bed0fcdf85460","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.14_1781180200199_0.3124141599186623","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"},"0.1.15":{"name":"@cuongph.dev/jira-mcp","version":"0.1.15","author":{"name":"cuongph-dev-work"},"license":"MIT","_id":"@cuongph.dev/jira-mcp@0.1.15","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"bin":{"jira-mcp":"dist/server.js","jira-auth-check":"dist/cli/auth-check.js","jira-auth-clear":"dist/cli/auth-clear.js","jira-auth-login":"dist/cli/auth-login.js"},"dist":{"shasum":"fa95f224c03834a9e1255d67bbda16ee2726195b","tarball":"https://registry.npmjs.org/@cuongph.dev/jira-mcp/-/jira-mcp-0.1.15.tgz","fileCount":321,"integrity":"sha512-NLvMST8WjD1EM3fxa1mFjYBSCFDmUlT9zDxybu8fVPgCznN98AZred9/pZYozQD2vUr9M80Su6+oPM9mzi5Ttg==","signatures":[{"sig":"MEUCIDsnc5plF+dBSKuI8zyyPOfX+fpKKpoC5nySjj+xHdRQAiEA5qvFsUD+YJtfrs9vEmPfftxlB9lo7mSTnLu8Yh4DSQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":967721},"type":"module","engines":{"node":">=20"},"gitHead":"55dab7933da99473ed9ad2b28874890961f05bbb","scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc --noEmit false --outDir dist","start":"node dist/server.js","prepare":"npm run build && chmod +x dist/server.js dist/cli/auth-login.js dist/cli/auth-check.js dist/cli/auth-clear.js","snyk:test":"snyk test","test:watch":"vitest","snyk:monitor":"snyk monitor","prepublishOnly":"npm test","jira-auth-check":"tsx src/cli/auth-check.ts","jira-auth-clear":"tsx src/cli/auth-clear.ts","jira-auth-login":"tsx src/cli/auth-login.ts"},"_npmUser":{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"},"repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.7","dayjs":"^1.11.20","dotenv":"^16.4.5","remark":"^15.0.1","mammoth":"^1.12.0","unified":"^11.0.5","pdf-parse":"^2.4.5","playwright":"^1.48.2","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","@modelcontextprotocol/sdk":"^1.10.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.1","vitest":"^2.1.2","typescript":"^5.6.3","@types/node":"^22.7.5","@types/pdf-parse":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/jira-mcp_0.1.15_1786622118457_0.716852851461723","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @cuongph.dev/mcp-jira"}},"time":{"created":"2026-04-25T14:53:36.003Z","modified":"2026-09-07T12:02:24.896Z","0.1.0":"2026-04-25T14:53:36.284Z","0.1.1":"2026-04-25T16:11:24.682Z","0.1.2":"2026-04-27T07:07:25.788Z","0.1.4":"2026-04-27T08:58:01.114Z","0.1.5":"2026-04-27T09:48:20.142Z","0.1.6":"2026-04-27T10:32:33.596Z","0.1.7":"2026-04-27T10:36:13.865Z","0.1.8":"2026-04-27T10:38:54.311Z","0.1.9":"2026-04-27T12:36:26.858Z","0.1.10":"2026-04-27T13:00:32.608Z","0.1.11":"2026-04-27T14:05:56.011Z","0.1.12":"2026-04-27T17:11:15.278Z","0.1.13":"2026-06-11T11:46:19.445Z","0.1.14":"2026-06-11T12:16:40.448Z","0.1.15":"2026-08-13T11:55:18.724Z"},"bugs":{"url":"https://github.com/cuongph-dev-work/jira8_mcp/issues"},"author":{"name":"cuongph-dev-work"},"license":"MIT","homepage":"https://github.com/cuongph-dev-work/jira8_mcp#readme","repository":{"url":"git+https://github.com/cuongph-dev-work/jira8_mcp.git","type":"git"},"description":"MCP server for internal Jira 8 via SSO session bootstrap with Playwright","maintainers":[{"name":"cuongph.dev.work","email":"phancuong437@gmail.com"}],"readme":"# jira-run-mcp\n\nAn internal MCP (Model Context Protocol) server for Jira 8, using SSO session bootstrap via Playwright and HTTP-first tool execution. Uses **stdio transport** — runs as a local subprocess managed by Claude Desktop, Cursor, or any MCP-compatible client.\n\n## Stack\n\n- **TypeScript** — strict, ESM (NodeNext)\n- **@modelcontextprotocol/sdk** — MCP server + stdio transport\n- **Playwright** — interactive SSO login and session persistence\n- **Zod** — config and tool input validation\n- **Axios** — Jira REST API HTTP client\n\n## Features\n\n- 🔐 SSO authentication via Playwright (headed browser)\n- 💾 Persistent local session (Playwright storage state / cookies)\n- 🔍 `jira_get_issue` — fetch a single issue by key\n- 🔎 `jira_search_issues` — execute JQL and return a compact issue list\n- 🔎 `jira_smart_search` — search by issue key, JQL, or natural-language filters\n- ⏱️ `jira_add_worklog` — log work on a Jira issue through Tempo Timesheets\n- 📝 `jira_create_issue` — create an issue using issue-type-specific required and optional fields\n- 💬 `jira_add_comment` — add plain-text or ADF comments to an issue\n- ✏️ `jira_update_comment` / `jira_delete_comment` — update or remove issue comments\n- 🔄 `jira_transition_issue` — move an issue through workflow transitions by id or name\n- 🧭 `jira_get_create_meta` — inspect static create metadata from `src/jira/constants.ts`\n- 🧭 `jira_get_edit_meta` — inspect live editable fields for one issue\n- ✏️ `jira_update_issue_fields` — update a curated set of Jira fields safely\n- 🛡️ `jira_validate_issue_update` — validate update payloads without writing\n- 🛡️ `jira_bulk_update_issue_fields` / `jira_bulk_transition_issues` — bulk operations with explicit `dryRun`\n- 🛡️ `jira_preview_create_issue` — build create payloads without POSTing\n- 🧾 `jira_get_audit_context` — compact issue audit context for LLM review\n- 🔗 `jira_link_issues` — create links between issues\n- 🔗 `jira_get_issue_links` / `jira_bulk_link_issues` — inspect or create multiple issue links\n- 🧩 `jira_get_subtasks` / `jira_create_subtask` — inspect or create sub-tasks\n- 🧬 `jira_clone_issue` — clone an issue with optional field overrides\n- 👤 `jira_assign_issue` — assign issues by name or key\n- 👥 `jira_find_user` — search Jira users for assignment/collaboration flows\n- 📋 `jira_get_transitions` — list currently available transitions for an issue\n- 📅 `jira_get_my_worklogs` — list the authenticated user's Tempo worklogs\n- 📅 `jira_update_worklog` / `jira_delete_worklog` — correct or remove Tempo worklogs\n- 📊 `jira_export_project_timesheet` — export a project's full Tempo timesheet (all members) to xlsx/xls/csv\n- 📎 `jira_add_attachment` — upload workspace files as issue attachments\n- 📤 `jira_upload_attachment_content` — attach AI-generated content (text, CSV, JSON…) directly without a local file\n- 🗂️ `jira_get_projects` / `jira_get_components` / `jira_get_priorities` — discover common Jira metadata\n- 🔀 `jira_sync_gitlab_review_defects` — sync GitLab MR review comments into Jira Review Defects (`mrState` or single `mrIid`)\n- 🛡️ Clean `SESSION_EXPIRED` / `AUTH_REQUIRED` errors with reauthentication hints\n- 🖥️ Three CLI utilities for session management\n\n## Requirements\n\n- Node.js >= 20\n- Access to an internal Jira 8 instance (SSO)\n\n---\n\n## Quick Start (End Users)\n\n> No cloning or building required. Install via npm or use `npx` directly.\n\n### Step 1 — Install Playwright Chromium\n\nRequired once for the SSO browser login flow:\n\n```bash\nnpx -y playwright install chromium\n```\n\n### Step 2 — Authenticate with Jira\n\nReplace the URL with your actual Jira instance. Choose one method:\n\n**Option A — Interactive SSO (recommended for MFA / multi-step IdP)**\n\n```bash\nJIRA_BASE_URL=https://jira.yourcompany.com npx -y -p @cuongph.dev/jira-mcp jira-auth-login\n```\n\nA browser window opens. Complete SSO manually. The session is saved to `.jira/session.json` (or `~/.jira/jira-mcp/session.json` for global npx usage).\n\n**Option B — Basic Auth with credentials**\n\nSet both `JIRA_EMAIL` and `JIRA_PASSWORD` in your MCP client `env` block or in `.env` (see `.env.example`). The server validates HTTP Basic Auth first and uses it for Jira REST calls without opening a browser. If Jira rejects Basic Auth, it falls back to a headless Playwright login and then the stored session cookie. MFA or complex SSO still requires Option A.\n\nVerify the session is active:\n\n```bash\nJIRA_BASE_URL=https://jira.yourcompany.com npx -y -p @cuongph.dev/jira-mcp jira-auth-check\n```\n\n### Step 3 — Add to your MCP client\n\nNo separate server process needed — the MCP client spawns and manages the process automatically via stdio.\n\n#### Gemini CLI\n\n```bash\ngemini mcp add jira npx -y @cuongph.dev/jira-mcp --env JIRA_BASE_URL=https://jira.yourcompany.com\n```\n\n#### Cursor\n\nEdit `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` in your project:\n\n```json\n{\n  \"mcpServers\": {\n    \"jira\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cuongph.dev/jira-mcp\"],\n      \"env\": {\n        \"JIRA_BASE_URL\": \"https://jira.yourcompany.com\",\n        \"GITLAB_TOKEN\": \"glpat-xxxx\",\n        \"GITLAB_PROJECTS_JSON\": \"{\\\"PROJ\\\":[{\\\"name\\\":\\\"app-frontend\\\",\\\"gitlabBaseUrl\\\":\\\"https://gitlab.example.com\\\",\\\"projectPath\\\":\\\"group/app-frontend\\\"}]}\"\n      }\n    }\n  }\n}\n```\n\n#### Claude Desktop\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"jira\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cuongph.dev/jira-mcp\"],\n      \"env\": {\n        \"JIRA_BASE_URL\": \"https://jira.yourcompany.com\",\n        \"GITLAB_TOKEN\": \"glpat-xxxx\",\n        \"GITLAB_PROJECTS_JSON\": \"{\\\"PROJ\\\":[{\\\"name\\\":\\\"app-frontend\\\",\\\"gitlabBaseUrl\\\":\\\"https://gitlab.example.com\\\",\\\"projectPath\\\":\\\"group/app-frontend\\\"}]}\"\n      }\n    }\n  }\n}\n```\n\n> **Tip:** You can omit the `env` block and load settings from:\n> - source checkout: `<repo>/.env`\n> - npm/npx install: `~/.jira/jira-mcp/.env`\n>\n> Supported variables include `JIRA_BASE_URL` (required), optional `JIRA_EMAIL` / `JIRA_PASSWORD` for auto-login, `LOG_LEVEL`, and GitLab sync vars (`GITLAB_TOKEN`, `GITLAB_PROJECTS_JSON`, etc.). See `.env.example`.\n>\n> For GitLab sync, put `GITLAB_TOKEN` and `GITLAB_PROJECTS_JSON` in the MCP `env` block or `.env`. MCP clients do not pass custom top-level blocks like `\"config\": { ... }` to the server process.\n\nRestart your MCP client after saving the config.\n\n### Session Management\n\n| Command | Description |\n|---|---|\n| `npx @cuongph.dev/jira-mcp jira-auth-login` | Launch SSO browser flow and save session |\n| `npx @cuongph.dev/jira-mcp jira-auth-check` | Validate whether the stored session is alive |\n| `npx @cuongph.dev/jira-mcp jira-auth-clear` | Remove the stored session file |\n\n---\n\n## Development Setup\n\n> For contributors and developers working on the source code.\n\n### 1. Clone and install\n\n```bash\ngit clone <repo-url>\ncd jira-run-mcp\nnpm install\n```\n\n### 2. Install Playwright browsers\n\n```bash\nnpx playwright install chromium\n```\n\n### 3. Configure environment\n\n```bash\ncp .env.example .env\n```\n\nEdit `.env`:\n\n```env\nJIRA_BASE_URL=https://jira.yourcompany.com\n```\n\nSee `.env.example` for all available options.\n\n### 4. Authenticate\n\n**Interactive SSO:**\n\n```bash\nnpm run jira-auth-login\n```\n\nA browser window will open. Complete the SSO login manually. Session is saved to `.jira/session.json`.\n\n**Optional Basic Auth:** add both `JIRA_EMAIL` and `JIRA_PASSWORD` to `.env` (see `.env.example`). On the next MCP tool call, Basic Auth is validated first; Playwright auto-login is attempted only when Basic Auth is rejected.\n\n```bash\nnpm run jira-auth-check\n```\n\n### 5. Build\n\n```bash\nnpm run build\n```\n\n### 6. Add to MCP client (local build)\n\nUse the local `dist/server.js` instead of the npm package.\n\n| File | Purpose |\n|------|---------|\n| `.cursor/mcp.json` | Cursor IDE — project-local MCP servers (this repo includes an example) |\n| `.agents/mcp.json` | Cursor Agents / subagents — same shape; keep in sync with `.cursor/mcp.json` when both are used |\n\n**Cursor** (`.cursor/mcp.json` in the repo, or `~/.cursor/mcp.json` globally):\n\n```json\n{\n  \"mcpServers\": {\n    \"jira-run-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/jira-run-mcp/dist/server.js\"],\n      \"env\": {\n        \"LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nAdd `JIRA_BASE_URL` and optional `JIRA_EMAIL` / `JIRA_PASSWORD` to the `env` block if you do not rely on `.env` alone.\n\n**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"jira\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/jira-run-mcp/dist/server.js\"]\n    }\n  }\n}\n```\n\n> The `.env` file in the project root is loaded automatically — you only need `env` in MCP config for overrides (e.g. `LOG_LEVEL`) or secrets you prefer not to store in `.env`.\n\n### CLI Utilities (dev)\n\n| Command | Description |\n|---|---|\n| `npm run jira-auth-login` | Launch SSO browser flow and save session |\n| `npm run jira-auth-check` | Validate whether the stored session is alive |\n| `npm run jira-auth-clear` | Remove the stored session file |\n\n## MCP Tools\n\n### `jira_get_issue`\n\nFetch a single Jira issue by key.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key, e.g. `PROJ-123` |\n\n**Output:** Key, summary, description, status, assignee, reporter, priority, issue type, created/updated timestamps, URL.\n\n---\n\n### `jira_search_issues`\n\nExecute a JQL query and return a compact issue list.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `jql` | `string` | JQL query, e.g. `project = PROJ AND status = Open` |\n| `limit` | `number` | Max results (1–50, default 10) |\n\n**Output:** Total count + list of issues (key, summary, status, assignee, priority, updated, URL).\n\n---\n\n### `jira_smart_search`\n\nSearch by issue key, explicit JQL, or natural-language filters.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `query` | `string` | Issue key, JQL, or natural-language text, e.g. `open bugs assigned to me` |\n| `mode` | `string` | Optional: `auto`, `jql`, or `smart` |\n| `project` | `string` | Optional Jira project key, e.g. `DNIEM` |\n| `limit` | `number` | Max results (1-50, default 10) |\n\n**Output:** Direct issue lookup or compact search results with generated/executed JQL.\n\n---\n\n### `jira_create_issue`\n\nCreate a Jira issue for a specific issue type.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueTypeId` | `string` | Jira issue type ID from `src/jira/constants.ts` |\n| `fields` | `object` | Jira create fields keyed by standard field names or `customfield_*` IDs; `fields.description` accepts `string` or raw ADF |\n\n**Output:** Confirmation with created issue key, summary, issue type, and browser URL.\n\n---\n\n### `jira_sync_gitlab_review_defects`\n\nSync top-level GitLab MR review comments into Jira **Review Defect** issues. Requires `GITLAB_TOKEN` and GitLab project links. Preferred MCP setup is `GITLAB_PROJECTS_JSON` in the MCP `env` block (stringified JSON). Fallback map file path is `.jira/gitlab-projects.json` in a source checkout, or `~/.jira/jira-mcp/gitlab-projects.json` when running `@cuongph.dev/jira-mcp` via npm/npx. Each mapping entry must include a non-empty repository `name`; generated summaries use `[Review Code][<name>][MR !<IID>] ...` to identify the repository.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `projectKey` | `string` | Jira project key mapped in `GITLAB_PROJECTS_JSON` or the GitLab projects file |\n| `mrState` | `string` | Optional: `opened`, `merged` (default), or `closed` |\n| `mrIid` | `number` | Optional: process one MR only (ignores `mrState`) |\n| `dryRun` | `boolean` | Default `true` — preview only; `false` to create issues |\n| `userOverrides` | `object` | GitLab username → Jira username/email when lookup fails |\n\n**Docs:** [`docs/tools/jira_sync_gitlab_review_defects.md`](docs/tools/jira_sync_gitlab_review_defects.md)\n\n---\n\n### `jira_add_worklog`\n\nLog work on a Jira issue through Tempo Timesheets.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `timeSpent` | `string` | Duration using `Nd`, `Nh`, `Nm` tokens |\n| `startDate` | `string` | Optional work date in `yyyy-MM-dd` format |\n| `comment` | `string` | Optional worklog comment |\n| `process` | `string` | Optional Tempo Process attribute |\n| `typeOfWork` | `string` | Optional Tempo Type Of Work attribute |\n\n**Output:** Confirmation with issue details, worker, date, duration, and Tempo worklog IDs.\n\n---\n\n### `jira_add_comment`\n\nAdd a comment to a Jira issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `body` | `string \\| object` | Comment body as plain text or raw ADF |\n\n**Output:** Confirmation with comment id and browser URL.\n\n---\n\n### `jira_transition_issue`\n\nTransition a Jira issue to a target workflow state.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `transitionId` | `string` | Optional Jira workflow transition id |\n| `transitionName` | `string` | Optional transition name resolved from current available transitions |\n| `comment` | `string \\| object` | Optional plain text or ADF comment |\n| `fields` | `object` | Optional curated field updates sent with the transition |\n\nProvide exactly one of `transitionId` or `transitionName`.\n\n**Output:** Confirmation with issue key, transition id, and browser URL.\n\n---\n\n### `jira_get_create_meta`\n\nReturn static create metadata for supported Jira issue types.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueTypeId` | `string` | Optional issue type id to narrow the result |\n\n**Output:** Required fields, optional fields, and known option sets from `src/jira/constants.ts`.\n\n---\n\n### `jira_get_edit_meta`\n\nReturn live editable fields for a specific issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n\n**Output:** Field IDs, labels, required flags, schema types, and allowed values returned by Jira.\n\n---\n\n### `jira_update_issue_fields`\n\nUpdate a curated set of fields on an existing issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `fields` | `object` | Curated set of updateable field ids/values |\n\n**Output:** Confirmation with updated field ids and browser URL.\n\n---\n\n### `jira_validate_issue_update`\n\nValidate an issue update without writing.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `fields` | `object` | Curated update fields to validate |\n\n**Output:** Validation status, normalized update payload, and any fields not editable according to live edit metadata.\n\n---\n\n### `jira_bulk_update_issue_fields`\n\nUpdate fields on multiple issues with explicit dry-run control.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `dryRun` | `boolean` | Required. `true` previews only; `false` applies updates |\n| `issues` | `array` | 1-25 items with `issueKey` and `fields` |\n\n**Output:** Per-issue status table. Later items continue after per-issue failures.\n\n---\n\n### `jira_bulk_transition_issues`\n\nTransition multiple issues with explicit dry-run control.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `dryRun` | `boolean` | Required. `true` resolves/previews only; `false` applies transitions |\n| `issues` | `array` | 1-25 items with `issueKey`, exactly one of `transitionId`/`transitionName`, optional `comment` and `fields` |\n\n**Output:** Per-issue status table with resolved transition ids. Later items continue after per-issue failures.\n\n---\n\n### `jira_preview_create_issue`\n\nBuild and validate a create issue payload without sending it to Jira.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueTypeId` | `string` | Jira issue type ID from `src/jira/constants.ts` |\n| `fields` | `object` | Jira create fields keyed by standard field names or `customfield_*` IDs |\n\n**Output:** Normalized Jira create payload JSON.\n\n---\n\n### `jira_get_audit_context`\n\nFetch compact context for LLM review of one issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `includeComments` | `boolean` | Include recent comments, default true |\n| `maxComments` | `number` | Max comments, 1-100, default 20 |\n\n**Output:** Issue summary, key fields, description, issue links, subtasks, and optional comments.\n\n---\n\n### `jira_link_issues`\n\nCreate a Jira issue link between two issues.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `inwardIssueKey` | `string` | Source issue key |\n| `outwardIssueKey` | `string` | Target issue key |\n| `linkType` | `string` | Jira link type name |\n| `comment` | `string \\| object` | Optional plain text or ADF comment |\n\n**Output:** Confirmation with issue keys, link type, and link id.\n\n---\n\n### `jira_get_issue_links`\n\nList issue links for a Jira issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n\n**Output:** Link direction, type, relationship, linked issue key, summary, and status.\n\n---\n\n### `jira_get_subtasks`\n\nList subtasks for a Jira issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Parent Jira issue key |\n\n**Output:** Subtask key, summary, status, assignee, priority, and URL.\n\n---\n\n### `jira_create_subtask`\n\nCreate a subtask under a parent issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `parentIssueKey` | `string` | Parent Jira issue key |\n| `issueTypeId` | `string` | Jira subtask issue type id for the project |\n| `fields` | `object` | Jira create fields; `parent` and `issuetype` are injected |\n\n**Output:** Confirmation with parent key, created subtask key, and browser URL.\n\n---\n\n### `jira_clone_issue`\n\nClone an issue by copying core fields.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `sourceIssueKey` | `string` | Source Jira issue key |\n| `summaryPrefix` | `string` | Optional prefix, default `Clone of` |\n| `fields` | `object` | Optional field overrides for the created issue |\n\n**Output:** Confirmation with source key, cloned issue key, and browser URL.\n\n---\n\n### `jira_bulk_link_issues`\n\nCreate multiple issue links sequentially.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `links` | `array` | 1-25 link requests with `inwardIssueKey`, `outwardIssueKey`, `linkType`, optional `comment` |\n\n**Output:** Per-link status table. If one link fails, later links are still attempted and the MCP result is marked as an error.\n\n---\n\n### `jira_assign_issue`\n\nAssign a Jira issue to a user.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `assigneeName` | `string` | Optional Jira username/name |\n| `assigneeKey` | `string` | Optional Jira internal user key |\n\n**Output:** Confirmation with assignee and browser URL.\n\n---\n\n### `jira_find_user`\n\nSearch Jira users for assignment and collaboration flows.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `query` | `string` | Username, display name, or search text |\n| `maxResults` | `number` | Max results (1-50, default 10) |\n\n**Output:** Display name, username, user key, active flag, and email if Jira exposes it.\n\n---\n\n### `jira_get_transitions`\n\nList the currently available workflow transitions for an issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n\n**Output:** Transition ids, names, and destination statuses.\n\n---\n\n### `jira_update_comment`\n\nUpdate an existing issue comment.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `commentId` | `string` | Jira comment id |\n| `body` | `string \\| object` | Replacement body as plain text or raw ADF |\n\n**Output:** Confirmation with issue key, comment id, and browser URL.\n\n---\n\n### `jira_delete_comment`\n\nDelete an issue comment by id.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `commentId` | `string` | Jira comment id |\n\n**Output:** Confirmation with issue key and deleted comment id.\n\n---\n\n### `jira_get_my_worklogs`\n\nList the authenticated user's Tempo worklogs.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `dateFrom` | `string` | Optional start date in `yyyy-MM-dd` format |\n| `dateTo` | `string` | Optional end date in `yyyy-MM-dd` format |\n\n**Output:** Tempo worklog ids, issue keys, dates, durations, and comments.\n\n---\n\n### `jira_update_worklog`\n\nUpdate a Tempo worklog by id.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `worklogId` | `string` | Tempo worklog id |\n| `timeSpent` | `string` | Optional duration using `Nd`, `Nh`, `Nm` tokens |\n| `startDate` | `string` | Optional date in `yyyy-MM-dd` format |\n| `comment` | `string` | Optional updated comment |\n| `process` | `string` | Optional Tempo Process attribute |\n| `typeOfWork` | `string` | Optional Tempo Type Of Work attribute |\n\n**Output:** Confirmation with updated Tempo id, issue key, date, and duration.\n\n---\n\n### `jira_delete_worklog`\n\nDelete a Tempo worklog by id.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `worklogId` | `string` | Tempo worklog id |\n\n**Output:** Confirmation with deleted Tempo id.\n\n---\n\n### `jira_export_project_timesheet`\n\nExport a project's full Tempo timesheet — worklogs from **all** members, not a hand-picked worker list — using Tempo's own export flow. The file is written to the `ATTACHMENT_WORKSPACE` downloads folder.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `projectKey` | `string` | Jira project key, e.g. `PROJ` |\n| `dateFrom` | `string` | Start date in `yyyy-MM-dd` format |\n| `dateTo` | `string` | End date inclusive in `yyyy-MM-dd` format |\n| `format` | `\"xlsx\" \\| \"xls\" \\| \"csv\"` | Optional, default `xlsx` (sent to Tempo as `ooxml`) |\n\n**Output:** Project key, period, resolved format, absolute file path, and file size.\n\n**Docs:** [`docs/tools/jira_export_project_timesheet.md`](docs/tools/jira_export_project_timesheet.md)\n\n---\n\n### `jira_add_attachment`\n\nUpload a local file from the allowed workspace directory to an issue.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `filePath` | `string` | Path to a file inside the `ATTACHMENT_WORKSPACE` directory |\n\nFiles outside the configured `ATTACHMENT_WORKSPACE` are rejected. Set the env var to restrict the allowed root directory.\n\n**Output:** Uploaded attachment ids, filenames, sizes, and issue URL.\n\n---\n\n### `jira_upload_attachment_content`\n\nUpload in-memory content as a Jira issue attachment — no local file needed.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `issueKey` | `string` | Jira issue key |\n| `filename` | `string` | Filename with extension, e.g. `report.md`, `data.csv` |\n| `content` | `string` | Plain text (utf8) or base64-encoded content |\n| `encoding` | `\"utf8\" \\| \"base64\"` | Default `utf8` |\n| `mimeType` | `string` | Optional MIME type override; inferred from extension if omitted |\n\n**Output:** Uploaded attachment id, filename, size, MIME type, and issue URL.\n\n---\n\n### `jira_get_projects`\n\nList Jira projects visible to the authenticated user.\n\n**Input:** none.\n\n**Output:** Project keys, names, ids, and browser URLs.\n\n---\n\n### `jira_get_components`\n\nList components for a Jira project.\n\n**Input:**\n| Field | Type | Description |\n|---|---|---|\n| `projectKey` | `string` | Jira project key |\n\n**Output:** Component ids, names, and descriptions.\n\n---\n\n### `jira_get_priorities`\n\nList Jira priorities configured in the instance.\n\n**Input:** none.\n\n**Output:** Priority ids, names, and descriptions.\n\n## Project Structure\n\n```\nsrc/\n├── server.ts              # MCP server entry point\n├── config.ts              # Env var validation (Zod)\n├── errors.ts              # Typed error classes & factories\n├── types.ts               # Shared TypeScript types\n├── auth/\n│   ├── session-store.ts   # Read/write/clear session.json\n│   ├── session-manager.ts # Session validation against Jira\n│   └── playwright-auth.ts # Headed SSO browser flow\n├── jira/\n│   ├── endpoints.ts       # URL builders (REST API v2)\n│   ├── mappers.ts         # Raw payload → typed output shapes\n│   ├── adf.ts             # ADF type interfaces + low-level builders\n│   ├── body-normalizer.ts # normalizeJiraBody (markdown/plain/adf → ADF)\n│   ├── markdown-to-adf.ts # Markdown AST → ADF converter (remark)\n│   ├── create-meta.ts     # Static issue create metadata helpers\n│   ├── create-issue.ts    # Create-issue validation and payload helpers\n│   ├── edit-meta.ts       # Live issue edit metadata normalization\n│   ├── user-search.ts     # User search normalization\n│   ├── transition-resolution.ts # Transition name resolution\n│   ├── update-issue.ts    # Curated field update normalization\n│   └── http-client.ts     # Cookie-authenticated Jira HTTP client\n├── tools/\n│   ├── add-attachment.ts  # jira_add_attachment handler\n│   ├── add-comment.ts     # jira_add_comment handler\n│   ├── bulk-link-issues.ts # jira_bulk_link_issues handler\n│   ├── clone-issue.ts     # jira_clone_issue handler\n│   ├── create-subtask.ts  # jira_create_subtask handler\n│   ├── get-issue.ts       # jira_get_issue handler\n│   ├── get-issue-links.ts # jira_get_issue_links handler\n│   ├── get-subtasks.ts    # jira_get_subtasks handler\n│   ├── find-user.ts       # jira_find_user handler\n│   ├── get-components.ts  # jira_get_components handler\n│   ├── get-create-meta.ts # jira_get_create_meta handler\n│   ├── get-edit-meta.ts   # jira_get_edit_meta handler\n│   ├── get-my-worklogs.ts # jira_get_my_worklogs handler\n│   ├── get-priorities.ts  # jira_get_priorities handler\n│   ├── get-projects.ts    # jira_get_projects handler\n│   ├── get-transitions.ts # jira_get_transitions handler\n│   ├── link-issues.ts     # jira_link_issues handler\n│   ├── assign-issue.ts    # jira_assign_issue handler\n│   ├── delete-comment.ts  # jira_delete_comment handler\n│   ├── delete-worklog.ts  # jira_delete_worklog handler\n│   ├── export-project-timesheet.ts # jira_export_project_timesheet handler\n│   ├── search-issues.ts   # jira_search_issues handler\n│   ├── smart-search.ts    # jira_smart_search handler\n│   ├── add-worklog.ts     # jira_add_worklog handler\n│   ├── transition-issue.ts # jira_transition_issue handler\n│   ├── update-comment.ts  # jira_update_comment handler\n│   ├── update-issue-fields.ts # jira_update_issue_fields handler\n│   ├── update-worklog.ts  # jira_update_worklog handler\n│   └── create-issue.ts    # jira_create_issue handler\n├── cli/\n│   ├── auth-login.ts      # jira-auth-login entry point\n│   ├── auth-check.ts      # jira-auth-check entry point\n│   └── auth-clear.ts      # jira-auth-clear entry point\n└── tests/                 # Unit tests (Vitest)\n```\n\n## Authentication Flow\n\n```\nOperator\n  │\n  ▼\nnpm run jira-auth-login\n  │\n  ├── Playwright opens browser (headed)\n  ├── Operator completes SSO manually\n  ├── storageState saved → .jira/session.json\n  └── Session validated immediately\n  \nMCP Tool Call\n  │\n  ├── Load .jira/session.json\n  ├── Validate against /rest/api/2/myself\n  ├── Extract cookies → build HTTP request\n  └── Return normalized Jira data\n  \nSession Expired?\n  │\n  └── Returns [SESSION_EXPIRED] error\n      → \"Run: npm run jira-auth-login\"\n```\n\n## Development Commands\n\n```bash\n# Type check\nnpx tsc --noEmit\n\n# Run tests\nnpm test\n\n# Watch mode\nnpm run test:watch\n\n# Build for production\nnpm run build\n\n# Run directly (dev mode, reads .env)\nnpm run dev\n```\n\n### Testing with MCP Inspector\n\n[MCP Inspector](https://github.com/modelcontextprotocol/inspector) is the official GUI tool for interactively testing MCP servers — call tools, inspect inputs/outputs, and debug without an AI client.\n\n**Option A — dev mode (no build required):**\n\n```bash\nnpx @modelcontextprotocol/inspector tsx src/server.ts\n```\n\n`tsx` compiles TypeScript on-the-fly. Changes are picked up on every Inspector session restart without a rebuild step.\n\n**Option B — built bundle:**\n\n```bash\nnpm run build\nnpx @modelcontextprotocol/inspector node dist/server.js\n```\n\nBoth options read the `.env` file in the project root automatically.\n\nAfter the Inspector starts, open the URL it prints (usually `http://localhost:5173`) in your browser, select a tool from the sidebar, fill in the inputs, and click **Run**.\n\n## Error Codes\n\n| Code | Meaning |\n|---|---|\n| `AUTH_REQUIRED` | No session file found — run `jira-auth-login` |\n| `SESSION_EXPIRED` | Session exists but Jira rejected it — rerun `jira-auth-login` |\n| `JIRA_HTTP_ERROR` | Unexpected HTTP error from Jira REST API |\n| `JIRA_RESPONSE_ERROR` | Jira returned an unexpected response shape |\n| `CONFIG_ERROR` | Invalid or missing environment variable |\n| `INVALID_INPUT` | Tool input or issue-type-specific field set is invalid |\n\n## Security Notes\n\n- `.env` and `.jira/session.json` are **git-ignored** and must never be committed.\n- Session cookies give full Jira access as the authenticated user — treat them like passwords.\n- The session file is stored locally only; no remote storage is involved.\n","readmeFilename":"README.md"}