README.mdโข15.4 kB
# MCP Atlassian Server
Atlassian ์ ํ(Confluence, Jira)๊ณผ ํตํฉํ๊ธฐ ์ํ Model Context Protocol (MCP) ์๋ฒ์
๋๋ค. AI ์ด์์คํดํธ๊ฐ Atlassian Cloud API์ ์ํธ์์ฉํ์ฌ ๋ฌธ์ ๊ด๋ฆฌ, ๊ฒ์, ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
> **๐ ์ต์ ์
๋ฐ์ดํธ**: ์์ ์ฑ ๊ฐ์ ๋ฐ ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ ์๋ฃ! (2025-11-13)
>
> - 20๊ฐ ํจ์์ ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ๋ก undefined ์ค๋ฅ ์์ ์ฐจ๋จ
> - Confluence API ๊ฒฝ๋ก 11๊ณณ ์์ (404 ์ค๋ฅ ํด๊ฒฐ)
> - ๋ชจ๋ ๋๊ตฌ 100% ์ ์ ์๋ ํ์ธ
## ๐ ๋ชฉ์ฐจ
- [์ฃผ์ ๊ธฐ๋ฅ](#์ฃผ์-๊ธฐ๋ฅ)
- [์ค์น ๋ฐฉ๋ฒ](#์ค์น-๋ฐฉ๋ฒ)
- [MCP ์ค์ ](#mcp-์ค์ )
- [API ํ ํฐ ๋ฐ๊ธ](#api-ํ ํฐ-๋ฐ๊ธ)
- [์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ](#์ฌ์ฉ-๊ฐ๋ฅํ-๋๊ตฌ)
- [์ฌ์ฉ ์์](#์ฌ์ฉ-์์)
- [์ต๊ทผ ๊ฐ์ ์ฌํญ](#์ต๊ทผ-๊ฐ์ -์ฌํญ)
- [๋ฌธ์ ํด๊ฒฐ](#๋ฌธ์ -ํด๊ฒฐ)
## ์ฃผ์ ๊ธฐ๋ฅ
### ๐ต Confluence ํตํฉ
- **์ฝ๊ธฐ & ๊ฒ์**: ํ์ด์ง, ์คํ์ด์ค, ์ฝํ
์ธ ์ ๊ทผ
- **์ฝํ
์ธ ๊ด๋ฆฌ**: ํ์ด์ง ์์ฑ, ์์ , ๋๊ธ ์์ฑ
- **ํ์ด์ง ๊ณ์ธต**: ๋ถ๋ชจ/์์ ํ์ด์ง ๊ด๊ณ ํ์
- **๋ด๋ณด๋ด๊ธฐ**: ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ HTML ๋๋ Markdown์ผ๋ก ๋ด๋ณด๋ด๊ธฐ
- **์ฒจ๋ถํ์ผ**: ์ฒจ๋ถํ์ผ ๋ชฉ๋ก, ๋ค์ด๋ก๋, ์
๋ก๋
- **๋ ์ด๋ธ**: ํ์ด์ง ๋ ์ด๋ธ ๊ด๋ฆฌ
- **์ฌ์ฉ์**: ์ฌ์ฉ์ ๊ฒ์ ๋ฐ ๊ฐ์ธ ํ๋ ์ถ์
- **๊ฐ์ธ ๋์๋ณด๋**: ์ต๊ทผ ํ์ด์ง ๋ฐ ๋ฉ์
ํ์ธ
### ๐ข Jira ํตํฉ
- **์ด์**: ์ด์ ์ฝ๊ธฐ, ๊ฒ์, ๊ฐ์ธ ์์
์กฐํ
- **ํ๋ก์ ํธ**: ํ๋ก์ ํธ ๋ชฉ๋ก ๋ฐ ํ์
- **๋ณด๋ & ์คํ๋ฆฐํธ**: ๋ณด๋ ๋ชฉ๋ก, ์คํ๋ฆฐํธ ๋ณด๊ธฐ, ํ์ฑ ์์
์ถ์
- **๋๊ธ**: ์ด์์ ๋๊ธ ์ถ๊ฐ
- **์ด์ ์์ฑ**: ์ปค์คํ
ํ๋๋ฅผ ํฌํจํ ์ ์ด์ ์์ฑ
- **์ฌ์ฉ์ ๊ด๋ฆฌ**: ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
- **๊ฐ์ธ ๋์๋ณด๋**: ์ด๋ฆฐ ์ด์ ๋ฐ ์คํ๋ฆฐํธ ์์
ํ์ธ
## ์ค์น ๋ฐฉ๋ฒ
### ์ต์
1: ๋ก์ปฌ ํด๋ก (๊ถ์ฅ)
```bash
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/dunz/mcp-atlassian.git
cd mcp-atlassian
# ์์กด์ฑ ์ค์น
npm install
```
### ์ต์
2: GitHub์์ ์ง์ ์ค์น
```bash
# GitHub์์ ์ง์ ์ค์น
npm install -g github:dunz/mcp-atlassian
# ๋๋ ํ๋ก์ ํธ์ ์ค์น
npm install github:dunz/mcp-atlassian
```
### ์ต์
3: NPM ๋ ์ง์คํธ๋ฆฌ
```bash
# ์ ์ญ ์ค์น
npm install -g mcp-atlassian
# ๋๋ ๋ก์ปฌ ์ค์น
npm install mcp-atlassian
```
## MCP ์ค์
### 1. API ํ ํฐ ๋ฐ๊ธ
#### Atlassian API ํ ํฐ ์์ฑ
1. [Atlassian ๊ณ์ ์ค์ ](https://id.atlassian.com/manage-profile/security/api-tokens)์ ๋ก๊ทธ์ธ
2. "API ํ ํฐ ๋ง๋ค๊ธฐ" ํด๋ฆญ
3. ํ ํฐ์ ๋ผ๋ฒจ์ ์ง์ ํ๊ณ ๋ณต์ฌ
4. ์ด ํ ํฐ์ MCP ์ค์ ์ ์ฌ์ฉ
### 2. MCP ํด๋ผ์ด์ธํธ ์ค์
#### Claude Desktop ์ค์ ํ์ผ ์์น
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
#### Cursor ์ค์ ํ์ผ ์์น
- **๋ชจ๋ OS**: `~/.cursor/mcp.json`
### 3. ์ค์ ์์
#### ์ต์
A: Node๋ก ์ง์ ์คํ (๊ถ์ฅ)
```json
{
"mcpServers": {
"atlassian": {
"command": "node",
"args": [
"[Cloned Directory Absolute Path]/dist/index.js",
"--transport",
"stdio"
],
"env": {
"ATLASSIAN_BASE_URL": "https://your-company.atlassian.net",
"ATLASSIAN_EMAIL": "your-email@company.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN_HERE"
}
}
}
}
```
#### ์ต์
B: NPX๋ก ์คํ
```json
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": ["-y", "mcp-atlassian"],
"env": {
"ATLASSIAN_BASE_URL": "https://your-company.atlassian.net",
"ATLASSIAN_EMAIL": "your-email@company.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN_HERE"
}
}
}
}
```
### 4. ์ค์ ์ ์ฉ
1. ์ค์ ํ์ผ์ ์ ์ฅํฉ๋๋ค
2. **Claude Desktop**: ์ฑ์ ์์ ํ ์ข
๋ฃํ๊ณ ๋ค์ ์์
3. **Cursor**: ์ฑ์ ์ฌ์์ (โ+Q ํ ๋ค์ ์คํ)
4. ์ฐ๊ฒฐ์ด ์ฑ๊ณตํ๋ฉด ๋๊ตฌ ๋ชฉ๋ก์ Atlassian ๋๊ตฌ๋ค์ด ํ์๋ฉ๋๋ค
### 5. ์ฐ๊ฒฐ ํ์ธ
AI ์ด์์คํดํธ์๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์์ฒญํด๋ณด์ธ์:
```
"Atlassian MCP๊ฐ ์ฐ๊ฒฐ๋์๋์ง ํ์ธํ๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ ๋ชฉ๋ก์ ๋ณด์ฌ์ค"
```
## API ํ ํฐ ๋ฐ๊ธ
### Atlassian API ํ ํฐ
1. [Atlassian ๋ณด์ ์ค์ ](https://id.atlassian.com/manage-profile/security/api-tokens)์ผ๋ก ์ด๋
2. "API ํ ํฐ ๋ง๋ค๊ธฐ" ํด๋ฆญ
3. ํ ํฐ ๋ผ๋ฒจ ์
๋ ฅ (์: "MCP Integration")
4. ํ ํฐ ๋ณต์ฌ (ํ ๋ฒ๋ง ํ์๋ฉ๋๋ค!)
5. MCP ์ค์ ์ ๋ถ์ฌ๋ฃ๊ธฐ
> โ ๏ธ **์ค์**: API ํ ํฐ์ ๋น๋ฐ๋ฒํธ์ ๋์ผํ๊ฒ ์ทจ๊ธํ์ธ์. ์ ๋ ์ฝ๋๋ ๊ณต๊ฐ ์ ์ฅ์์ ํฌํจํ์ง ๋ง์ธ์.
## ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ
### Confluence ๋๊ตฌ (23๊ฐ)
| ๋๊ตฌ | ์ค๋ช
|
| ------------------------------------ | ---------------------------------- |
| `get_confluence_current_user` | ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ |
| `get_confluence_user` | ํน์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ |
| `search_pages_by_user_involvement` | ์ฌ์ฉ์ ํ๋์ผ๋ก ํ์ด์ง ๊ฒ์ |
| `list_pages_created_by_user` | ์ฌ์ฉ์๊ฐ ์์ฑํ ํ์ด์ง ๋ชฉ๋ก |
| `list_attachments_uploaded_by_user` | ์ฌ์ฉ์๊ฐ ์
๋ก๋ํ ์ฒจ๋ถํ์ผ ๋ชฉ๋ก |
| `read_confluence_page` | ID ๋๋ ์ ๋ชฉ์ผ๋ก ํ์ด์ง ์ฝ๊ธฐ |
| `search_confluence_pages` | CQL๋ก ํ์ด์ง ๊ฒ์ |
| `list_confluence_spaces` | ์ ๊ทผ ๊ฐ๋ฅํ ์คํ์ด์ค ๋ชฉ๋ก |
| `get_confluence_space` | ํน์ ์คํ์ด์ค ์ ๋ณด ์กฐํ |
| `create_confluence_page` | ์ ํ์ด์ง ์์ฑ |
| `update_confluence_page` | ๊ธฐ์กด ํ์ด์ง ์์ |
| `list_confluence_page_children` | ํ์ ํ์ด์ง ๋ชฉ๋ก |
| `list_confluence_page_ancestors` | ์์ ํ์ด์ง ๊ณ์ธต ์กฐํ |
| `export_confluence_page` | ์ด๋ฏธ์ง ํฌํจ HTML/Markdown ๋ด๋ณด๋ด๊ธฐ |
| `list_attachments_on_page` | ํ์ด์ง ์ฒจ๋ถํ์ผ ๋ชฉ๋ก |
| `download_confluence_attachment` | ํน์ ์ฒจ๋ถํ์ผ ๋ค์ด๋ก๋ |
| `upload_confluence_attachment` | ํ์ด์ง์ ํ์ผ ์
๋ก๋ |
| `get_page_with_attachments` | ๋ชจ๋ ์ฝํ
์ธ ์ ํจ๊ป ํ์ด์ง ๋ค์ด๋ก๋ |
| `add_confluence_comment` | ํ์ด์ง์ ๋๊ธ ์ถ๊ฐ |
| `list_confluence_page_labels` | ํ์ด์ง ๋ ์ด๋ธ ์กฐํ |
| `add_confluence_page_label` | ํ์ด์ง์ ๋ ์ด๋ธ ์ถ๊ฐ |
| `find_confluence_users` | ์ฌ์ฉ์ ๊ฒ์ |
| `get_my_recent_confluence_pages` | ๋ด ์ต๊ทผ ํ์ด์ง ๋ชฉ๋ก |
| `get_confluence_pages_mentioning_me` | ๋๋ฅผ ๋ฉ์
ํ ํ์ด์ง ์ฐพ๊ธฐ |
### Jira ๋๊ตฌ (16๊ฐ)
| ๋๊ตฌ | ์ค๋ช
|
| ----------------------------------- | --------------------------------------- |
| `get_jira_current_user` | ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ |
| `get_jira_user` | ํน์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ |
| `search_issues_by_user_involvement` | ์ฌ์ฉ์ ๊ด๋ จ ์ด์ ๊ฒ์ |
| `list_issues_by_user_role` | ์ญํ ๋ณ ์ฌ์ฉ์ ์ด์ ๋ชฉ๋ก (๋ ์ง ํํฐ๋ง) |
| `get_user_activity_history` | ๋๊ธ ๋ฐ ์ํ ๋ณ๊ฒฝ ํฌํจ ์ฌ์ฉ์ ํ๋ ์ถ์ |
| `get_user_time_tracking` | ์๊ฐ ์ถ์ ํญ๋ชฉ ๋ฐ ํฉ๊ณ ์กฐํ |
| `read_jira_issue` | ํค๋ก ์ด์ ์์ธ ์ ๋ณด ์ฝ๊ธฐ |
| `search_jira_issues` | JQL๋ก ์ด์ ๊ฒ์ |
| `list_jira_projects` | ์ ๊ทผ ๊ฐ๋ฅํ ํ๋ก์ ํธ ๋ชฉ๋ก |
| `create_jira_issue` | ์ ์ด์ ์์ฑ |
| `add_jira_comment` | ์ด์์ ๋๊ธ ์ถ๊ฐ |
| `list_agile_boards` | ์คํฌ๋ผ/์นธ๋ฐ ๋ณด๋ ๋ชฉ๋ก |
| `list_sprints_for_board` | ๋ณด๋์ ์คํ๋ฆฐํธ ๋ชฉ๋ก |
| `get_sprint_details` | ์คํ๋ฆฐํธ ์์ธ ์ ๋ณด ์กฐํ |
| `get_my_current_sprint_issues` | ํ์ฑ ์คํ๋ฆฐํธ์ ๋ด ์์
์กฐํ |
| `get_my_unresolved_issues` | ๋ชจ๋ ๋ฏธํด๊ฒฐ ์ด์ ์กฐํ |
## ์ฌ์ฉ ์์
### Confluence ํ์ด์ง ๊ฒ์
```
"๋ด๊ฐ ์์ฑํ Confluence ํ์ด์ง ์ค ์ต๊ทผ 5๊ฐ๋ฅผ ๋ณด์ฌ์ค"
```
```
"'API ๋ฌธ์'๋ผ๋ ์ ๋ชฉ์ด ํฌํจ๋ ํ์ด์ง๋ฅผ ๊ฒ์ํด์ค"
```
### Confluence ํ์ด์ง ์ฝ๊ธฐ
```
"ํ์ด์ง ID 882573681์ ๋ด์ฉ์ ๋งํฌ๋ค์ด์ผ๋ก ๋ณด์ฌ์ค"
```
### Jira ์ด์ ์กฐํ
```
"๋ํํ
ํ ๋น๋ ๋ฏธํด๊ฒฐ ์ด์๋ฅผ ๋ชจ๋ ๋ณด์ฌ์ค"
```
```
"ํ์ฌ ์คํ๋ฆฐํธ์์ ๋ด ์์
๋ชฉ๋ก์ ๋ณด์ฌ์ค"
```
### ํ๋ก์ ํธ ๋ฐ ๋ณด๋ ํ์
```
"์ ๊ทผ ๊ฐ๋ฅํ Jira ํ๋ก์ ํธ ๋ชฉ๋ก์ ๋ณด์ฌ์ค"
```
```
"์คํฌ๋ผ ๋ณด๋ ๋ชฉ๋ก์ ๋ณด์ฌ์ค"
```
### CQL์ ์ฌ์ฉํ ๊ณ ๊ธ ๊ฒ์
```
"type = page AND creator = currentUser() ์กฐ๊ฑด์ผ๋ก Confluence ํ์ด์ง๋ฅผ ๊ฒ์ํด์ค"
```
## ์ต๊ทผ ๊ฐ์ ์ฌํญ
### ๐ 2025-11-13 ์
๋ฐ์ดํธ
#### 1. ์์ ์ฑ ๋ํญ ํฅ์
- **20๊ฐ ํจ์์ ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ**
- ๋ชจ๋ `.map()` ํธ์ถ ์ undefined/null ์ฒดํฌ
- `Cannot read properties of undefined` ์ค๋ฅ ์์ ์ฐจ๋จ
- ์์ธํ ์๋ฌ ๋ฉ์์ง๋ก ๋๋ฒ๊น
์ฉ์ด
#### 2. Confluence API ๊ฒฝ๋ก ์์ (11๊ณณ)
- **๋ฌธ์ **: `/api/...` ๊ฒฝ๋ก๋ก 404 ์ค๋ฅ ๋ฐ์
- **ํด๊ฒฐ**: ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ `/wiki/rest/api/...`๋ก ์์
- **์ํฅ๋ฐ์ ํจ์**:
- `searchConfluencePages`
- `getConfluenceSpace`
- `listConfluencePageChildren`
- `listConfluencePageAncestors`
- `getConfluenceUser`
- `findConfluenceUsers`
- `uploadConfluenceAttachment`
- ๊ธฐํ ์ฌ์ฉ์ ๊ด๋ จ ํจ์๋ค
#### 3. Jira API ๊ฐ์ (11๊ฐ ํจ์)
- **GET ๋ฉ์๋ ์ ์ง**: ์์ ์ ์ธ `/rest/api/3/search` ์๋ํฌ์ธํธ ์ฌ์ฉ
- **๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ**:
- `listJiraProjects` - ํ๋ก์ ํธ ๋ชฉ๋ก ๋ฐฐ์ด ์ฒดํฌ
- `listAgileBoards` - ๋ณด๋ ๋ชฉ๋ก values ์ฒดํฌ
- `listJiraSprints` - ์คํ๋ฆฐํธ ๋ชฉ๋ก values ์ฒดํฌ
- `getJiraSprintDetails` - ์ด์ ๋ชฉ๋ก ์กฐ๊ฑด๋ถ ์ฒ๋ฆฌ
- ๊ธฐํ ๊ฒ์ ํจ์ 7๊ฐ
#### 4. ํ
์คํธ ๊ฒฐ๊ณผ
- โ
**15๊ฐ ์ฝ๊ธฐ ๋๊ตฌ ํ
์คํธ ์๋ฃ**
- โ
**์ฑ๊ณต๋ฅ 100%**
- โ
**๋ชจ๋ API ๊ฒฝ๋ก ์ ์ ์๋**
- โ
**๋ฐฉ์ด ๋ก์ง ์๋ฒฝ ์๋**
### ๋ณ๊ฒฝ ์ ํ ๋น๊ต
#### Before (์ค๋ฅ ๋ฐ์)
```javascript
// โ ๋ฐฉ์ด ๋ก์ง ์์
const results = response.data.results.map(page => ({...}));
// โ ์๋ชป๋ API ๊ฒฝ๋ก
await this.client.get('/api/content/search', {...});
```
#### After (์์ ์ )
```javascript
// โ
๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ
if (!response.data || !response.data.results) {
console.error('Unexpected API response structure:', ...);
return { content: [{ type: 'text', text: 'Error message' }], isError: true };
}
const results = response.data.results.map(page => ({...}));
// โ
์ฌ๋ฐ๋ฅธ API ๊ฒฝ๋ก
await this.client.get('/wiki/rest/api/content/search', {...});
```
## ๋ฌธ์ ํด๊ฒฐ
### ์ฐ๊ฒฐ์ด ์ ๋ ๋
1. **API ํ ํฐ ํ์ธ**
```bash
# ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์๋์ง ํ์ธ
echo $ATLASSIAN_API_TOKEN
```
2. **Base URL ํ์ธ**
- `https://your-company.atlassian.net` ํ์์ด์ด์ผ ํจ
- ๋์ `/`๋ฅผ ๋ถ์ด์ง ๋ง์ธ์
3. **ํด๋ผ์ด์ธํธ ์ฌ์์**
- Claude Desktop: ์์ ์ข
๋ฃ ํ ์ฌ์์
- Cursor: `โ+Q` ํ ์ฌ์คํ
### 404 ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋
- **์ต์ ๋ฒ์ ํ์ธ**: 2025-11-13 ์ดํ ๋ฒ์ ์ฌ์ฉ
- **๊ฒฝ๋ก ์์ ํ์ธ**: ๋ชจ๋ Confluence API๊ฐ `/wiki/rest/api/` ์ฌ์ฉ
- **๋ก๊ทธ ํ์ธ**: ์ค๋ฅ ๋ฉ์์ง์์ ์์ธ ์ ๋ณด ํ์ธ
### undefined ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋
- **์ต์ ๋ฒ์ ํ์ธ**: ๋ชจ๋ ๋ฐฉ์ด ๋ก์ง์ด ์ถ๊ฐ๋ ๋ฒ์ ์ฌ์ฉ
- **์๋ต ๊ตฌ์กฐ ํ์ธ**: ์ค๋ฅ ๋ฉ์์ง์ ์๋ต ๊ตฌ์กฐ๊ฐ ํ์๋จ
### ์ฑ๋ฅ์ด ๋๋ฆด ๋
1. **ํ์ด์ง ํฌ๊ธฐ ์ ํ**
```
"์ต๋ 10๊ฐ์ ๊ฒฐ๊ณผ๋ง ๋ณด์ฌ์ค"
```
2. **ํน์ ์คํ์ด์ค๋ก ์ ํ**
```
"bizgrowthservice ์คํ์ด์ค์์๋ง ๊ฒ์ํด์ค"
```
3. **๋ ์ง ๋ฒ์ ์ ํ**
```
"์ต๊ทผ 1์ฃผ์ผ ์ด๋ด์ ์ด์๋ง ๋ณด์ฌ์ค"
```
## ๊ฐ๋ฐ
```bash
# TypeScript ์ปดํ์ผ๋ฌ๋ฅผ watch ๋ชจ๋๋ก ์คํ
npm run dev
# ํ๋ก๋์
๋น๋
npm run build
# ๋ฆฐํฐ ์คํ
npm run lint
# ํ
์คํธ ์คํ
npm test
```
## ํ๋ก์ ํธ ๊ตฌ์กฐ
```
mcp-atlassian/
โโโ src/
โ โโโ index.ts # ๋ฉ์ธ ์๋ฒ ์ง์
์
โ โโโ types/ # TypeScript ํ์
์ ์
โ โโโ confluence/
โ โ โโโ handlers.ts # Confluence API ํธ๋ค๋ฌ
โ โ โโโ tools.ts # ๋๊ตฌ ์ ์
โ โโโ jira/
โ โ โโโ handlers.ts # Jira API ํธ๋ค๋ฌ
โ โ โโโ tools.ts # ๋๊ตฌ ์ ์
โ โโโ utils/
โ โโโ http-client.ts # Axios HTTP ํด๋ผ์ด์ธํธ
โ โโโ content-converter.ts # Markdown โ Storage ๋ณํ
โ โโโ export-converter.ts # HTML/Markdown ๋ด๋ณด๋ด๊ธฐ
โโโ dist/ # ์ปดํ์ผ๋ JavaScript
โโโ package.json
โโโ tsconfig.json
```
## ๋ณด์ ์ฃผ์์ฌํญ
- API ํ ํฐ์ ํ๊ฒฝ ๋ณ์์ ์ ์ฅ, ์ฝ๋์ ํฌํจํ์ง ๋ง์ธ์
- API ํ ํฐ์ ์ฌ์ฉํ Basic Authentication ์ฌ์ฉ (๋น๋ฐ๋ฒํธ ์๋)
- ๋ชจ๋ ์์ฒญ์ HTTPS๋ก ์ ์ก
- Atlassian Cloud๋ง ์ง์ (Server/Data Center ๋ฏธ์ง์)
## ์ ํ์ฌํญ
- ์์ ์ ์ํด ์ญ์ ์์
์ ๊ตฌํ๋์ง ์์
- PDF ๋ด๋ณด๋ด๊ธฐ๋ ๋ธ๋ผ์ฐ์ ๋ณํ ํ์ (HTML โ ์ธ์ โ PDF)
- ์ผ๋ถ Confluence ๋งคํฌ๋ก๋ Markdown์ผ๋ก ์๋ฒฝํ๊ฒ ๋ณํ๋์ง ์์ ์ ์์
- Atlassian Cloud API ์๋ ์ ํ ์ ์ฉ
## ๊ธฐ์ฌํ๊ธฐ
๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! Pull Request๋ฅผ ์์ ๋กญ๊ฒ ์ ์ถํด์ฃผ์ธ์.
### ๊ธฐ์ฌ ๋ฐฉ๋ฒ
1. ์ด ์ ์ฅ์๋ฅผ Fork
2. ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (`git checkout -b feature/amazing-feature`)
3. ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (`git commit -m 'feat: Add amazing feature'`)
4. ๋ธ๋์น์ ํธ์ (`git push origin feature/amazing-feature`)
5. Pull Request ์์ฑ
## ๋ผ์ด์ ์ค
MIT License - ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ ์ฐธ์กฐ
## ์ง์
๋ฌธ์ ๋ฐ ์ง๋ฌธ:
- GitHub ์ ์ฅ์์ ์ด์ ์์ฑ
- API ๊ด๋ จ ์ง๋ฌธ์ Atlassian API ๋ฌธ์ ์ฐธ์กฐ
- ํ๋กํ ์ฝ ๊ด๋ จ ์ง๋ฌธ์ MCP ๋ฌธ์ ๊ฒํ
## ๊ฐ์ฌ์ ๋ง
๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ:
- [Model Context Protocol (MCP)](https://modelcontextprotocol.io)
- [Atlassian REST APIs](https://developer.atlassian.com/cloud/)
- TypeScript, Node.js, Axios
## ๋ณ๊ฒฝ ๋ก๊ทธ
### v1.1.0 (2025-11-13)
- ๐ ์์ ์ฑ ๋ํญ ํฅ์
- โ
20๊ฐ ํจ์์ ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ
- ๐ง Confluence API ๊ฒฝ๋ก 11๊ณณ ์์
- ๐ง Jira API ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ
- โ
๋ชจ๋ ๋๊ตฌ 100% ํ
์คํธ ์๋ฃ
---
**Made with โค๏ธ for better Atlassian integration**