{"_id":"@atlassian-sdk/js","_rev":"6-4e2193f3c9634d1d09f487b303d59378","name":"@atlassian-sdk/js","dist-tags":{"latest":"0.3.3"},"versions":{"0.1.0":{"name":"@atlassian-sdk/js","version":"0.1.0","author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.1.0","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"dist":{"shasum":"47a13f0325ed2dce539942398ae612dc4107ee62","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.1.0.tgz","fileCount":51,"integrity":"sha512-LCgWzBUTXTttq41PmIL6/iMNOoNajdjniOM5S7RiEFpZLa7gp226sv/k+CMScwhmPm2AZY+MRVBKpZ9maXC4SA==","signatures":[{"sig":"MEUCIQCq4eGjGEBDRRrUrDwydrAVlydIXfHpec0YgSrAPJaG9AIgWfDGVf+CShoq6BgBYcRvnW6dlPDHHWdo2KbVbFg6E+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233508},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"}},"gitHead":"94b6a75d81404824484c32d1f091a4620503bb4e","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup"},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.23","@modelcontextprotocol/sdk":"^1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0","tsup":"^8.0","vitest":"^2.0","typescript":"^5.5","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/js_0.1.0_1774415046767_0.9452250752984763","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@atlassian-sdk/js","version":"0.2.0","author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.2.0","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"dist":{"shasum":"f5b1f94f5e2499b93b11ba03cd18f34f117e9d12","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.2.0.tgz","fileCount":51,"integrity":"sha512-iIyWYg1GOK4MqT1qI4EuMqPobU5r5rD861/WoLw5EavZ6xLGZwqB5TFE6AZ35W416aWxLjVsVfBhpus+X+PfWg==","signatures":[{"sig":"MEQCIG998plc5AewpvIVmtyM1mZlERHxTCQ2zfBM0gkoRQZWAiAwjuy9HWgpTYSNfs3v2ZgU1xiG3ZyR/OMEE/ljMu7PwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243390},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"}},"gitHead":"c509ea40e6c17a07098ca5c2db14171d000e5819","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup"},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.23","@modelcontextprotocol/sdk":"^1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0","tsup":"^8.0","vitest":"^2.0","typescript":"^5.5","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/js_0.2.0_1774421060765_0.6219310962654412","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@atlassian-sdk/js","version":"0.3.0","author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.3.0","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"dist":{"shasum":"6c71ec0cf6e2d7580e0bbeb48e3077ee95b343fd","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.3.0.tgz","fileCount":54,"integrity":"sha512-ALF0eAbWHpghWzJILftctfYltG5TuiSfd6pmK6RsUybV5hMqsBqQOhyiQa4XjmLIbnj4u0h5X1UMtJjw/NXM4g==","signatures":[{"sig":"MEUCIQDaA11RUNL9yLvWxdnbuScL4tuLOeCL4VyrciE35W2glAIgJgzPb86WQEjhbSZP7avf+gphw0kcfcXYqCJPiMSN7Pc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336975},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"}},"gitHead":"46a9edefce3caedfacb1cb3aa81b5bca99ec66a4","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup"},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.23","@modelcontextprotocol/sdk":"^1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0","tsup":"^8.0","vitest":"^2.0","typescript":"^5.5","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.0_1774422659520_0.9509922504887898","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@atlassian-sdk/js","version":"0.3.1","author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.3.1","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"dist":{"shasum":"db28ae3fa2acd6d628709bfc1713b1cc87e27fb7","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.3.1.tgz","fileCount":54,"integrity":"sha512-tx1qGSF5fjsC6YdhyWItJDdOguazmi/Xk88YB31GfowsQH/qyE2Oo1MZdJwc/nwhmzXQcsd0Il20jJP3XC/JwA==","signatures":[{"sig":"MEQCIFnERNpXOuzWiaEVJPACH9Ow47TlXOKtguM8/Xro+1F5AiBeOTH70En04VvRpntCYXG34hvM5EAxUdnSYRRy+zi1kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347141},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"}},"gitHead":"3002228fc8c9df54a0ac618bc70217c7eb3922f6","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup"},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.23","@modelcontextprotocol/sdk":"^1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0","tsup":"^8.0","vitest":"^2.0","typescript":"^5.5","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.1_1774424824629_0.7237940072727842","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@atlassian-sdk/js","version":"0.3.2","author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.3.2","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"dist":{"shasum":"8d64cb3c91aff66cb027506e399a7037ab6eedbf","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.3.2.tgz","fileCount":54,"integrity":"sha512-G0hMHnaGvj9aWXlPdbDfLlKeXkGZq35H4IYJB7u1Wlw618xoOCoY611IT99a0CWWN/ikv+8m+mVLmj7cszV6Rg==","signatures":[{"sig":"MEQCIHQclxcIJ2k2eQ/z9TSaz80dxsKnyXd0bbZINzcqN8aEAiA8c/YQT0nka6D3wyGMI+EYFsV6MWX36R4yZSmv9eV2oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":382125},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"types":"./dist/mcp/index.d.ts","import":"./dist/mcp/index.js"}},"gitHead":"e0992dd864bb426164a51a1490cda0fa4df5c9d8","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup"},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.23","@modelcontextprotocol/sdk":"^1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0","tsup":"^8.0","vitest":"^2.0","typescript":"^5.5","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/js_0.3.2_1774426514211_0.37713895175866696","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@atlassian-sdk/js","version":"0.3.3","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./mcp":{"import":"./dist/mcp/index.js","types":"./dist/mcp/index.d.ts"}},"bin":{"atlassian-sdk-mcp":"dist/mcp/index.js"},"scripts":{"build":"tsup","test":"vitest run","lint":"tsc --noEmit"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0","zod":"^3.23"},"devDependencies":{"@types/node":"^25.5.0","tsup":"^8.0","tsx":"^4.0","typescript":"^5.5","vitest":"^2.0"},"engines":{"node":">=20"},"author":{"name":"kknaks"},"license":"MIT","_id":"@atlassian-sdk/js@0.3.3","gitHead":"009e5c0123e14530801cdabe7b18a2b7ef669276","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XMFYyWdEsZEV1vbPf58zHMOcv4MZH0RYZBIet3nQ49iCUTGk6Js1K8gbHKegO4isJ62fcTk9Ui2kuK495eYPqw==","shasum":"03dea5d9951fa7b4693b418c76e923fa78466c34","tarball":"https://registry.npmjs.org/@atlassian-sdk/js/-/js-0.3.3.tgz","fileCount":54,"unpackedSize":413952,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFT2S0foY5A7SLbhbR7JHnmH5SgiSyxPWQHYCRtHO9/xAiAS6iGuIIgo+7m1hqK9S5g1LWGQ2zQCuJhJaCXDQHPbLw=="}]},"_npmUser":{"name":"kknaks","email":"khlee.official@gmail.com"},"directories":{},"maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/js_0.3.3_1774428842744_0.21141877514499208"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-25T05:04:06.699Z","modified":"2026-03-25T08:54:03.048Z","0.1.0":"2026-03-25T05:04:06.904Z","0.2.0":"2026-03-25T06:44:20.911Z","0.3.0":"2026-03-25T07:10:59.811Z","0.3.1":"2026-03-25T07:47:04.772Z","0.3.2":"2026-03-25T08:15:14.358Z","0.3.3":"2026-03-25T08:54:02.918Z"},"author":{"name":"kknaks"},"license":"MIT","description":"TypeScript SDK for Atlassian REST API (Jira + Confluence) — React/RN compatible","maintainers":[{"name":"kknaks","email":"khlee.official@gmail.com"}],"readme":"# @atlassian-sdk/js\n\nAtlassian REST API를 직접 호출하는 TypeScript SDK. Jira + Confluence를 하나의 패키지로 지원합니다.\n\n> Node.js / React / React Native / Next.js / Vite 어디서든 사용 가능\n\n## 설치\n\n```bash\nnpm install @atlassian-sdk/js\n```\n\n## 환경변수\n\n프레임워크에 맞게 `.env`에 설정하면 SDK가 자동으로 읽습니다:\n\n| 프레임워크 | 변수명 |\n|-----------|--------|\n| Node.js / Express | `ATLASSIAN_SITE` |\n| Next.js (서버) | `ATLASSIAN_SITE` |\n| Next.js (클라이언트) | `NEXT_PUBLIC_ATLASSIAN_SITE` |\n| Vite / React | `VITE_ATLASSIAN_SITE` |\n| Expo / React Native | `EXPO_PUBLIC_ATLASSIAN_SITE` |\n\n```env\n# Node.js / Next.js 서버\nATLASSIAN_SITE=your-site.atlassian.net\nATLASSIAN_EMAIL=user@example.com\nATLASSIAN_API_TOKEN=your-api-token\n```\n\n```env\n# Vite / React\nVITE_ATLASSIAN_SITE=your-site.atlassian.net\nVITE_ATLASSIAN_EMAIL=user@example.com\nVITE_ATLASSIAN_API_TOKEN=your-api-token\n```\n\n## Jira 사용법\n\n```typescript\nimport { JiraClient } from \"@atlassian-sdk/js\";\n\n// env에서 자동 로드\nconst jira = new JiraClient();\n\n// 또는 직접 전달\nconst jira = new JiraClient({\n  site: \"your-site.atlassian.net\",\n  email: \"user@example.com\",\n  apiToken: \"your-api-token\",\n});\n\n// 프로젝트 목록\nconst projects = await jira.listProjects();\n\n// 이슈 생성\nconst issue = await jira.createIssue({\n  projectKey: \"WNVO\",\n  summary: \"로그인 에러 수정\",\n  issueTypeName: \"Task\",\n  description: \"상세 설명\",\n  labels: [\"bug\"],\n});\nconsole.log(issue.key); // WNVO-111\n\n// 이슈 조회\nconst detail = await jira.getIssue(\"WNVO-111\");\n\n// JQL 검색\nconst result = await jira.searchIssues({\n  jql: \"project = WNVO AND status = 'To Do'\",\n  maxResults: 20,\n});\n\n// 상태 변경\nawait jira.transitionIssue(\"WNVO-111\", \"완료\");\n\n// 댓글\nawait jira.addComment(\"WNVO-111\", \"수정 완료\");\nconst comments = await jira.listComments(\"WNVO-111\");\n```\n\n## Confluence 사용법\n\n```typescript\nimport { ConfluenceClient } from \"@atlassian-sdk/js\";\n\nconst confluence = new ConfluenceClient();\n\n// 스페이스 목록\nconst spaces = await confluence.listSpaces();\n\n// 페이지 생성\nconst page = await confluence.createPage({\n  spaceId: \"12345\",\n  title: \"회의록 2024-01-15\",\n  body: \"<h1>회의 내용</h1><p>안건 논의</p>\",\n});\n\n// 페이지 조회 / 수정\nconst detail = await confluence.getPage(\"67890\");\nconst updated = await confluence.updatePage(\"67890\", {\n  title: \"회의록 (수정)\",\n  body: \"<p>수정된 내용</p>\",\n  versionNumber: 2,\n});\n\n// 하위 페이지 / 댓글\nconst children = await confluence.listChildPages(\"67890\");\nawait confluence.createFooterComment(\"67890\", \"확인했습니다\");\n\n// CQL 검색\nconst results = await confluence.searchByCql(\"type=page AND space=DEV\");\n```\n\n## React 예시\n\n```tsx\nimport { JiraClient } from \"@atlassian-sdk/js\";\nimport { useEffect, useState } from \"react\";\n\n// env에서 자동 로드 (Vite: VITE_ATLASSIAN_*)\nconst jira = new JiraClient();\n\nfunction IssueList() {\n  const [issues, setIssues] = useState([]);\n\n  useEffect(() => {\n    jira.searchIssues({ jql: \"project = WNVO\" })\n      .then((result) => setIssues(result.issues));\n  }, []);\n\n  return (\n    <ul>\n      {issues.map((issue) => (\n        <li key={issue.key}>\n          {issue.key} - {issue.fields.summary}\n        </li>\n      ))}\n    </ul>\n  );\n}\n```\n\n## Next.js API Route 예시\n\n```typescript\n// app/api/jira/route.ts\nimport { JiraClient } from \"@atlassian-sdk/js\";\n\nconst jira = new JiraClient(); // 서버에서 ATLASSIAN_* env 자동 로드\n\nexport async function GET() {\n  const issues = await jira.searchIssues({\n    jql: \"project = WNVO AND status = 'To Do'\",\n  });\n  return Response.json(issues);\n}\n```\n\n## MCP 서버\n\nClaude Desktop/Claude Code에서 Jira + Confluence를 사용할 수 있는 MCP 서버가 포함되어 있습니다.\n\n```json\n{\n  \"mcpServers\": {\n    \"atlassian-sdk\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"@atlassian-sdk/js\", \"atlassian-sdk-mcp\", \"--\", \"--env-file\", \".env\"]\n    }\n  }\n}\n```\n\n`--env-file` 옵션으로 환경변수 파일 경로를 지정합니다. `.env`, `.env.local` 등 원하는 파일을 사용할 수 있습니다.\n\n```env\n# .env\nATLASSIAN_SITE=your-site.atlassian.net\nATLASSIAN_EMAIL=user@example.com\nATLASSIAN_API_TOKEN=your-api-token\n```\n\n> `--env-file`을 생략하면 셸 환경변수 또는 `.mcp.json`의 `env` 필드에서 읽습니다.\n\n제공 도구 (17개):\n- **Jira 도구**: `jira_list_projects`, `jira_list_issue_types`, `jira_get_issue`, `jira_search_issues`, `jira_create_issue`, `jira_transition_issue`, `jira_add_comment`, `jira_list_comments`\n- **Confluence 도구**: `confluence_create_page`, `confluence_get_page`, `confluence_update_page`, `confluence_list_spaces`, `confluence_list_pages_in_space`, `confluence_list_child_pages`, `confluence_list_footer_comments`, `confluence_add_footer_comment`, `confluence_search`\n\n## 인증\n\n| 환경 | 방식 |\n|------|------|\n| 로컬 개발 | `.env` 파일에 환경변수 설정 |\n| Docker / CI | 환경변수 직접 주입 |\n| 직접 전달 | `new JiraClient({ site, email, apiToken })` |\n\nBasic Auth: `email + API token` → `Authorization: Basic base64(email:token)`\n\n## 기술 스택\n\n- TypeScript (strict)\n- Native fetch (브라우저/Node/RN 호환)\n- Zod (입력 검증)\n- MCP SDK (@modelcontextprotocol/sdk)\n- tsup (ESM + CJS 빌드)\n- vitest (테스트)\n\n## 라이선스\n\nMIT\n","readmeFilename":"README.md"}