Skip to main content
Glama
ljy9303

MapleStory MCP Server

by ljy9303
README.md
[![MCP Badge](https://lobehub.com/badge/mcp/ljy9303-maplestory-mcp-server)](https://lobehub.com/mcp/ljy9303-maplestory-mcp-server)
# MapleStory MCP Server ๐Ÿ

NEXON ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์˜คํ”ˆ API ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ข…ํ•ฉ์ ์ธ MCP(Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Claude Desktop ๋ฐ ๊ธฐํƒ€ MCP ํ˜ธํ™˜ AI ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ํ†ตํ•ด ์บ๋ฆญํ„ฐ ์ •๋ณด, ์œ ๋‹ˆ์˜จ ์„ธ๋ถ€์‚ฌํ•ญ, ๊ธธ๋“œ ๋ฐ์ดํ„ฐ, ๋žญํ‚น, ๊ฒŒ์ž„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

## โœจ ๊ธฐ๋Šฅ

- **์บ๋ฆญํ„ฐ ์ •๋ณด**: ์ƒ์„ธํ•œ ์บ๋ฆญํ„ฐ ์Šคํƒฏ, ์žฅ๋น„, ๊ธฐ๋ณธ ์ •๋ณด ์กฐํšŒ
- **์œ ๋‹ˆ์˜จ ์‹œ์Šคํ…œ**: ์œ ๋‹ˆ์˜จ ๊ณต๊ฒฉ๋Œ€ ๊ตฌ์„ฑ ๋ฐ ๋žญํ‚น ์ ‘๊ทผ
- **๊ธธ๋“œ ๊ด€๋ฆฌ**: ๊ธธ๋“œ ์ •๋ณด ๋ฐ ๋ฉค๋ฒ„ ์„ธ๋ถ€์‚ฌํ•ญ ์กฐํšŒ
- **๋žญํ‚น**: ๋‹ค์–‘ํ•œ ๋ฆฌ๋”๋ณด๋“œ ๋ฐ ๊ฒฝ์Ÿ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
- **๊ฒŒ์ž„ ๋ฉ”์ปค๋‹ˆ์ฆ˜**: ํ๋ธŒ ๋ฐ ์Šคํƒ€ํฌ์Šค ๊ฐ•ํ™” ํ™•๋ฅ  ์ •๋ณด
- **๊ฒŒ์ž„ ์—…๋ฐ์ดํŠธ**: ์ตœ์‹  ๊ณต์ง€์‚ฌํ•ญ ๋ฐ ๋ฐœํ‘œ
- **TypeScript ์ง€์›**: ์™„์ „ํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ฐ IntelliSense ์ง€์›
- **์ข…ํ•ฉ์ ์ธ ๋กœ๊น…**: ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ์ƒ์„ธํ•œ ์ž‘์—… ๋กœ๊น…
- **์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ**: ์ƒ์„ธํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๊ฐ•๋ ฅํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

### NPX ์‚ฌ์šฉ (๊ถŒ์žฅ)
```bash
npx maplestory-mcp-server --api-key YOUR_NEXON_API_KEY
```

### ์„ค์น˜
```bash
npm install -g maplestory-mcp-server
```

### ๐Ÿ–ฅ๏ธ Claude Desktop๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

#### 1. NEXON API ํ‚ค ์ค€๋น„
๋จผ์ € [NEXON ์˜คํ”ˆ API ํฌํ„ธ](https://openapi.nexon.com/)์—์„œ API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์œผ์„ธ์š”:
1. NEXON ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ
2. "๊ฐœ๋ฐœ์ž ์„ผํ„ฐ" โ†’ "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ" ์ด๋™
3. "์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก" ํด๋ฆญ
4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด ์ž…๋ ฅ ํ›„ ๋“ฑ๋ก
5. ์ƒ์„ฑ๋œ API ํ‚ค ๋ณต์‚ฌ

#### 2. Claude Desktop ์„ค์ • ํŒŒ์ผ ์ฐพ๊ธฐ
์šด์˜์ฒด์ œ๋ณ„ ์„ค์ • ํŒŒ์ผ ์œ„์น˜:

**Windows:**
```
%APPDATA%\Claude\claude_desktop_config.json
```

**macOS:**
```
~/Library/Application Support/Claude/claude_desktop_config.json
```

**Linux:**
```
~/.config/Claude/claude_desktop_config.json
```

#### 3. MCP ์„œ๋ฒ„ ์„ค์ • ์ถ”๊ฐ€
์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์„ธ์š”:

```json
{
  "mcpServers": {
    "maplestory-mcp-server": {
      "command": "npx",
      "args": ["-y", "maplestory-mcp-server"],
      "env": {
        "NEXON_API_KEY": "์—ฌ๊ธฐ์—_๋ฐœ๊ธ‰๋ฐ›์€_API_ํ‚ค_์ž…๋ ฅ"
      }
    }
  }
}
```

> โš ๏ธ **์ค‘์š”**: `YOUR_NEXON_API_KEY`๋ฅผ ์‹ค์ œ ๋ฐœ๊ธ‰๋ฐ›์€ API ํ‚ค๋กœ ๊ต์ฒดํ•˜์„ธ์š”.

#### 4. Claude Desktop ์žฌ์‹œ์ž‘
์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ํ›„ Claude Desktop์„ ์™„์ „ํžˆ ์ข…๋ฃŒํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”.

#### 5. ์—ฐ๊ฒฐ ํ™•์ธ
Claude Desktop์ด ์žฌ์‹œ์ž‘๋˜๋ฉด ์ƒˆ ๋Œ€ํ™”์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ด ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜์„ธ์š”:

```
๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ API๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค˜
```

์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉด Claude๊ฐ€ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ๊ด€๋ จ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

## ๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ MCP ๋„๊ตฌ

### ์บ๋ฆญํ„ฐ ๋„๊ตฌ
- `get_character_basic_info` - ๊ธฐ๋ณธ ์บ๋ฆญํ„ฐ ์ •๋ณด ์กฐํšŒ (๋ ˆ๋ฒจ, ์ง์—…, ์›”๋“œ, ๊ธธ๋“œ)
- `get_character_stats` - ์ƒ์„ธํ•œ ์บ๋ฆญํ„ฐ ์Šคํƒฏ ๋ฐ ์ „ํˆฌ ์Šคํƒฏ ์กฐํšŒ
- `get_character_equipment` - ์บ๋ฆญํ„ฐ ์žฅ๋น„ ๋ฐ ์•„์ดํ…œ ์„ธ๋ถ€์‚ฌํ•ญ ์กฐํšŒ
- `get_character_full_info` - ์ข…ํ•ฉ์ ์ธ ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒ

### ์œ ๋‹ˆ์˜จ ๋„๊ตฌ
- `get_union_info` - ์œ ๋‹ˆ์˜จ ๋ ˆ๋ฒจ, ๋“ฑ๊ธ‰, ์•„ํ‹ฐํŒฉํŠธ ์ •๋ณด ์กฐํšŒ
- `get_union_raider` - ์œ ๋‹ˆ์˜จ ๊ณต๊ฒฉ๋Œ€ ๋ณด๋“œ ๊ตฌ์„ฑ ๋ฐ ๋ธ”๋ก ์กฐํšŒ
- `get_union_ranking` - ์œ ๋‹ˆ์˜จ ํŒŒ์›Œ ๋žญํ‚น ์กฐํšŒ

### ๊ธธ๋“œ ๋„๊ตฌ
- `get_guild_info` - ๊ธธ๋“œ ์ •๋ณด, ๋ฉค๋ฒ„, ์Šคํ‚ฌ ์กฐํšŒ
- `get_guild_ranking` - ๊ธธ๋“œ ๋ ˆ๋ฒจ ๋žญํ‚น ์กฐํšŒ

### ๋žญํ‚น ๋„๊ตฌ
- `get_overall_ranking` - ํ•„ํ„ฐ๋ง ์˜ต์…˜์ด ํฌํ•จ๋œ ์ข…ํ•ฉ ๋ ˆ๋ฒจ ๋žญํ‚น ์กฐํšŒ

### ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋„๊ตฌ
- `get_notice_list` - ๊ฒŒ์ž„ ๊ณต์ง€์‚ฌํ•ญ ๋ฐ ๋ฐœํ‘œ ์กฐํšŒ
- `get_notice_detail` - ์ƒ์„ธํ•œ ๊ณต์ง€์‚ฌํ•ญ ์ •๋ณด ์กฐํšŒ
- `get_cube_probability` - ํ๋ธŒ ๊ฐ•ํ™” ํ™•๋ฅ  ์ •๋ณด ์กฐํšŒ
- `get_starforce_probability` - ์Šคํƒ€ํฌ์Šค ๊ฐ•ํ™” ํ™•๋ฅ  ์ •๋ณด ์กฐํšŒ
- `health_check` - API ์—ฐ๊ฒฐ ๋ฐ ์ƒํƒœ ํ™•์ธ

## ๐Ÿ“– ์‚ฌ์šฉ ์˜ˆ์‹œ

### ๐ŸŽฏ Claude Desktop์—์„œ ์งˆ๋ฌธํ•˜๊ธฐ

Claude Desktop์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž์—ฐ์–ด๋กœ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

#### ์บ๋ฆญํ„ฐ ์ •๋ณด ์กฐํšŒ
```
"๊น€์ฝ”์ธ"์ด๋ผ๋Š” ์บ๋ฆญํ„ฐ์˜ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค˜
```

```
"๋ฒ ๋ผ์›”๋“œ์šฉ์‚ฌ" ์บ๋ฆญํ„ฐ์˜ ์ƒ์„ธํ•œ ์Šคํƒฏ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์ค˜
```

```
"๋ฆฌ๋ถ€ํŠธ์šฉ์‚ฌ" ์บ๋ฆญํ„ฐ๊ฐ€ ์ฐฉ์šฉํ•˜๊ณ  ์žˆ๋Š” ์žฅ๋น„ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค˜
```

#### ์œ ๋‹ˆ์˜จ ๋ฐ ๊ธธ๋“œ ์ •๋ณด
```
"์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ" ์บ๋ฆญํ„ฐ์˜ ์œ ๋‹ˆ์˜จ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์ค˜
```

```
"์Šค์นด๋‹ˆ์•„" ์›”๋“œ์˜ "๊ธธ๋“œ๋ช…" ๊ธธ๋“œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค˜
```

#### ๋žญํ‚น ์กฐํšŒ
```
์Šค์นด๋‹ˆ์•„ ์›”๋“œ์˜ ์•„ํฌ๋ฉ”์ด์ง€(๋ถˆ,๋…) ์ง์—… ๋žญํ‚น 1ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค˜
```

```
๋ฒ ๋ผ ์›”๋“œ์˜ ์œ ๋‹ˆ์˜จ ๋žญํ‚น ์ƒ์œ„ 20๋ช…์„ ์กฐํšŒํ•ด์ค˜
```

#### ๊ฒŒ์ž„ ์ •๋ณด
```
๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์ตœ์‹  ๊ณต์ง€์‚ฌํ•ญ์„ ํ™•์ธํ•ด์ค˜
```

```
๋ ˆ๋“œ ํ๋ธŒ์˜ ๊ฐ•ํ™” ํ™•๋ฅ  ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค˜
```

### ๐Ÿ’ก ํ™œ์šฉ ํŒ

#### 1. ์บ๋ฆญํ„ฐ ์ข…ํ•ฉ ๋ถ„์„
```
"์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ" ์บ๋ฆญํ„ฐ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•ด์ค˜ (๊ธฐ๋ณธ์ •๋ณด, ์Šคํƒฏ, ์žฅ๋น„, ์œ ๋‹ˆ์˜จ)
```

#### 2. ๊ธธ๋“œ ๊ด€๋ฆฌ
```
"๋ฒ ๋ผ" ์›”๋“œ์˜ "์šฐ๋ฆฌ๊ธธ๋“œ" ๊ธธ๋“œ์›๋“ค์˜ ๋ ˆ๋ฒจ๊ณผ ์ง์—…์„ ์ •๋ฆฌํ•ด์ค˜
```

#### 3. ๋žญํ‚น ๋น„๊ต
```
"์Šค์นด๋‹ˆ์•„" ์›”๋“œ์™€ "๋ฒ ๋ผ" ์›”๋“œ์˜ ์ƒ์œ„ ๋žญ์ปค๋“ค์„ ๋น„๊ต ๋ถ„์„ํ•ด์ค˜
```

#### 4. ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ 
```
"๋‚ด์บ๋ฆญํ„ฐ" ์บ๋ฆญํ„ฐ์˜ ์–ด์ œ์™€ ์˜ค๋Š˜ ์Šคํƒฏ ๋ณ€ํ™”๋ฅผ ๋น„๊ตํ•ด์ค˜
```

### ๐Ÿ”ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์‹œ

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง์ ‘ API ํ˜ธ์ถœ ์˜ˆ์‹œ:

#### ์บ๋ฆญํ„ฐ ์ •๋ณด ์กฐํšŒ
```typescript
// ๊ธฐ๋ณธ ์บ๋ฆญํ„ฐ ์ •๋ณด ์กฐํšŒ
const basicInfo = await getCharacterBasicInfo({
  characterName: "์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ"
});

// ์ƒ์„ธํ•œ ์บ๋ฆญํ„ฐ ์Šคํƒฏ ์กฐํšŒ
const stats = await getCharacterStats({
  characterName: "์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ",
  date: "2024-01-15"
});

// ์บ๋ฆญํ„ฐ ์žฅ๋น„ ์กฐํšŒ
const equipment = await getCharacterEquipment({
  characterName: "์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ"
});
```

#### ์œ ๋‹ˆ์˜จ ๋ฐ ๊ธธ๋“œ ๋ฐ์ดํ„ฐ
```typescript
// ์œ ๋‹ˆ์˜จ ์ •๋ณด ์กฐํšŒ
const unionInfo = await getUnionInfo({
  characterName: "์Šค์นด๋‹ˆ์•„์šฉ์‚ฌ"
});

// ๊ธธ๋“œ ์ •๋ณด ์กฐํšŒ
const guildInfo = await getGuildInfo({
  guildName: "๊ธธ๋“œ๋ช…",
  worldName: "์Šค์นด๋‹ˆ์•„"
});
```

#### ๋žญํ‚น ๋ฐ ๋ฆฌ๋”๋ณด๋“œ
```typescript
// ์ข…ํ•ฉ ๋žญํ‚น ์กฐํšŒ
const rankings = await getOverallRanking({
  worldName: "์Šค์นด๋‹ˆ์•„",
  className: "์•„ํฌ๋ฉ”์ด์ง€(๋ถˆ,๋…)",
  page: 1
});

// ์œ ๋‹ˆ์˜จ ๋žญํ‚น ์กฐํšŒ
const unionRankings = await getUnionRanking({
  worldName: "์Šค์นด๋‹ˆ์•„",
  page: 1
});
```

## ๐Ÿ”ง ์„ค์ •

### ํ™˜๊ฒฝ ๋ณ€์ˆ˜
- `NEXON_API_KEY` - NEXON ์˜คํ”ˆ API ํ‚ค (ํ•„์ˆ˜)
- `LOG_LEVEL` - ๋กœ๊น… ๋ ˆ๋ฒจ (๊ธฐ๋ณธ๊ฐ’: "info")
- `NODE_ENV` - ํ™˜๊ฒฝ (development/production)

### CLI ์˜ต์…˜
- `--api-key` - NEXON API ํ‚ค
- `--port` - ์„œ๋ฒ„ ํฌํŠธ (๊ธฐ๋ณธ๊ฐ’: 3000)
- `--debug` - ๋””๋ฒ„๊ทธ ๋กœ๊น… ํ™œ์„ฑํ™”
- `--name` - ์„œ๋ฒ„ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: "mcp-maple")
- `--version` - ์„œ๋ฒ„ ๋ฒ„์ „

## ๐Ÿ”‘ NEXON API ํ‚ค ์–ป๊ธฐ

### ์ƒ์„ธ ๊ฐ€์ด๋“œ

1. **NEXON ์˜คํ”ˆ API ํฌํ„ธ ์ ‘์†**
   - [https://openapi.nexon.com/](https://openapi.nexon.com/) ๋ฐฉ๋ฌธ

2. **๊ณ„์ • ์ƒ์„ฑ ๋ฐ ๋กœ๊ทธ์ธ**
   - NEXON ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ (๊ฒŒ์ž„ ๊ณ„์ •๊ณผ ๋™์ผ)
   - ๊ณ„์ •์ด ์—†๋‹ค๋ฉด ํšŒ์›๊ฐ€์ž… ์ง„ํ–‰

3. **๊ฐœ๋ฐœ์ž ์„ผํ„ฐ ์ด๋™**
   - ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ "๊ฐœ๋ฐœ์ž ์„ผํ„ฐ" ํด๋ฆญ
   - "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ" ์„ ํƒ

4. **์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก**
   - "์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก" ๋ฒ„ํŠผ ํด๋ฆญ
   - ํ•„์ˆ˜ ์ •๋ณด ์ž…๋ ฅ:
     - **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„**: `MCP Maple` (์˜ˆ์‹œ)
     - **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๋ช…**: `Claude Desktop MCP ์„œ๋ฒ„์šฉ`
     - **์„œ๋น„์Šค URL**: `http://localhost` (๊ฐœ๋ฐœ์šฉ)

5. **API ํ‚ค ๋ฐœ๊ธ‰ ๋ฐ ๋ณต์‚ฌ**
   - ๋“ฑ๋ก ์™„๋ฃŒ ํ›„ API ํ‚ค ํ™•์ธ
   - API ํ‚ค ๋ณต์‚ฌ (๋ณด์•ˆ์„ ์œ„ํ•ด ์•ˆ์ „ํ•œ ๊ณณ์— ์ €์žฅ)

6. **API ํ‚ค ์‚ฌ์šฉ**
   - Claude Desktop ์„ค์ •์—์„œ `NEXON_API_KEY`๋กœ ์‚ฌ์šฉ
   - ๋˜๋Š” CLI์—์„œ `--api-key` ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ

> ๐Ÿ’ก **ํŒ**: API ํ‚ค๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. GitHub ๋“ฑ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜์ง€ ๋งˆ์„ธ์š”.

## ๐ŸŽฎ ์ง€์›๋˜๋Š” ๊ฒŒ์ž„ ๋ฐ ์›”๋“œ

### ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์›”๋“œ
- ์Šค์นด๋‹ˆ์•„ (Scania)
- ๋ฒ ๋ผ (Bera)
- ๋ฃจ๋‚˜ (Luna)
- ์ œ๋‹ˆ์Šค (Zenith)
- ํฌ๋กœ์•„ (Croa)
- ์œ ๋‹ˆ์˜จ (Union)
- ์—˜๋ฆฌ์‹œ์›€ (Elysium)
- ์ด๋…ธ์‹œ์Šค (Enosis)
- ๋ ˆ๋“œ (Red)
- ์˜ค๋กœ๋ผ (Aurora)
- ์•„์ผ€์ธ (Arcane)
- ๋…ธ๋ฐ” (Nova)
- ๋ฆฌ๋ถ€ํŠธ (Reboot)
- ๋ฆฌ๋ถ€ํŠธ2 (Reboot2)

## ๐Ÿšฆ ์š”์ฒญ ์ œํ•œ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

- **์š”์ฒญ ์ œํ•œ**: API ํ‚ค๋‹น ํ•˜๋ฃจ 500ํšŒ ์š”์ฒญ
- **์š”์ฒญ ๋นˆ๋„**: ์ดˆ๋‹น ์ตœ๋Œ€ 1ํšŒ ์š”์ฒญ
- **๋ฐ์ดํ„ฐ ๊ฐฑ์‹ **: ์บ๋ฆญํ„ฐ ๋ฐ์ดํ„ฐ๋Š” ๋งค์ผ ์—…๋ฐ์ดํŠธ
- **์บ์‹œ**: ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๊ฒฐ๊ณผ ์บ์‹ฑ
- **์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ**: ์ผ์‹œ์  ์‹คํŒจ์— ๋Œ€ํ•œ ์ž๋™ ์žฌ์‹œ๋„

## ๐Ÿงช ๊ฐœ๋ฐœ

### ์ „์ œ ์กฐ๊ฑด
- Node.js 18+ 
- TypeScript 5.4+
- NEXON API ํ‚ค

### ์„ค์ •
```bash
git clone https://github.com/ljy9303/maplestory-mcp-server.git
cd maplestory-mcp-server
npm install
npm run build
```

### ๋นŒ๋“œ
```bash
npm run build          # TypeScript ๋นŒ๋“œ
npm run dev            # ๊ฐœ๋ฐœ ๋ชจ๋“œ (watch)
```

## ๐Ÿ“š API ์ฐธ์กฐ

### ์บ๋ฆญํ„ฐ ์ •๋ณด ๋„๊ตฌ

#### `get_character_basic_info`
๋ ˆ๋ฒจ, ์ง์—…, ์›”๋“œ, ๊ธธ๋“œ๋ฅผ ํฌํ•จํ•œ ๊ธฐ๋ณธ ์บ๋ฆญํ„ฐ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

**๋งค๊ฐœ๋ณ€์ˆ˜:**
- `characterName` (string, ํ•„์ˆ˜): ์กฐํšŒํ•  ์บ๋ฆญํ„ฐ ์ด๋ฆ„
- `date` (string, ์„ ํƒ์‚ฌํ•ญ): YYYY-MM-DD ํ˜•์‹์˜ ๋‚ ์งœ

**๋ฐ˜ํ™˜๊ฐ’:**
- `characterName`: ์บ๋ฆญํ„ฐ ์ด๋ฆ„
- `level`: ์บ๋ฆญํ„ฐ ๋ ˆ๋ฒจ
- `job`: ์บ๋ฆญํ„ฐ ์ง์—…/ํด๋ž˜์Šค
- `world`: ์›”๋“œ/์„œ๋ฒ„ ์ด๋ฆ„
- `guildName`: ๊ธธ๋“œ ์ด๋ฆ„ (์žˆ๋Š” ๊ฒฝ์šฐ)
- `exp`: ํ˜„์žฌ ๊ฒฝํ—˜์น˜
- `expRate`: ๊ฒฝํ—˜์น˜ ๋น„์œจ ๋ฐฑ๋ถ„์œจ

#### `get_character_stats`
๋ฐ๋ฏธ์ง€, ํฌ๋ฆฌํ‹ฐ์ปฌ ํ™•๋ฅ , ๋ชจ๋“  ์ „ํˆฌ ์Šคํƒฏ์„ ํฌํ•จํ•œ ์ƒ์„ธํ•œ ์บ๋ฆญํ„ฐ ํ†ต๊ณ„๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

**๋งค๊ฐœ๋ณ€์ˆ˜:**
- `characterName` (string, ํ•„์ˆ˜): ์กฐํšŒํ•  ์บ๋ฆญํ„ฐ ์ด๋ฆ„
- `date` (string, ์„ ํƒ์‚ฌํ•ญ): YYYY-MM-DD ํ˜•์‹์˜ ๋‚ ์งœ

**๋ฐ˜ํ™˜๊ฐ’:**
- `basicStats`: STR, DEX, INT, LUK, HP, MP
- `combatStats`: ๊ณต๊ฒฉ๋ ฅ, ๋งˆ๋ ฅ, ํฌ๋ฆฌํ‹ฐ์ปฌ ์Šคํƒฏ
- `defenseStats`: ๋ฌผ๋ฆฌ/๋งˆ๋ฒ• ๋ฐฉ์–ด ์Šคํƒฏ
- `allStats`: ์™„์ „ํ•œ ์Šคํƒฏ ๋ถ„์„

### ์œ ๋‹ˆ์˜จ ๋„๊ตฌ

#### `get_union_info`
์œ ๋‹ˆ์˜จ ๋ ˆ๋ฒจ, ๋“ฑ๊ธ‰, ์•„ํ‹ฐํŒฉํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

**๋งค๊ฐœ๋ณ€์ˆ˜:**
- `characterName` (string, ํ•„์ˆ˜): ์กฐํšŒํ•  ์บ๋ฆญํ„ฐ ์ด๋ฆ„
- `date` (string, ์„ ํƒ์‚ฌํ•ญ): YYYY-MM-DD ํ˜•์‹์˜ ๋‚ ์งœ

**๋ฐ˜ํ™˜๊ฐ’:**
- `unionLevel`: ํ˜„์žฌ ์œ ๋‹ˆ์˜จ ๋ ˆ๋ฒจ
- `unionGrade`: ์œ ๋‹ˆ์˜จ ๋“ฑ๊ธ‰/๋žญํฌ
- `unionArtifact`: ์•„ํ‹ฐํŒฉํŠธ ๋ ˆ๋ฒจ ๋ฐ ํฌ์ธํŠธ

### ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

๋ชจ๋“  ๋„๊ตฌ๋Š” ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:
```typescript
{
  success: false,
  error: "์˜ค๋ฅ˜ ์„ค๋ช…",
  metadata?: {
    executionTime: number,
    apiCalls: number
  }
}
```

## ๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๊ธฐ์—ฌ ๊ฐ€์ด๋“œ](CONTRIBUTING.md)๋ฅผ ์ฝ์–ด์ฃผ์„ธ์š”.

### ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค
1. ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค
2. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค
4. ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
5. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
6. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค

## ๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE) ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

- ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์˜คํ”ˆ API๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹  [NEXON](https://www.nexon.com/)
- MCP ์‚ฌ์–‘์„ ์ œ๊ณตํ•ด ์ฃผ์‹  [Model Context Protocol](https://modelcontextprotocol.io/)
- Claude ๋ฐ MCP ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹  [Anthropic](https://www.anthropic.com/)

## ๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ

### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

#### 1. Claude Desktop์—์„œ mcp-maple์ด ์ธ์‹๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

**์ฆ์ƒ**: Claude Desktop์—์„œ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ๊ด€๋ จ ์งˆ๋ฌธ์„ ํ•ด๋„ ์‘๋‹ตํ•˜์ง€ ๋ชปํ•จ

**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**:
1. Claude Desktop์„ ์™„์ „ํžˆ ์ข…๋ฃŒ
2. ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ:
   - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
   - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
   - Linux: `~/.config/Claude/claude_desktop_config.json`
3. JSON ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ (์‰ผํ‘œ, ๊ด„ํ˜ธ ๋“ฑ)
4. Claude Desktop ์žฌ์‹œ์ž‘

#### 2. API ํ‚ค ์˜ค๋ฅ˜

**์ฆ์ƒ**: "API key is invalid" ๋˜๋Š” "Authentication failed" ์˜ค๋ฅ˜

**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**:
1. [NEXON ์˜คํ”ˆ API ํฌํ„ธ](https://openapi.nexon.com/)์—์„œ API ํ‚ค ์ƒํƒœ ํ™•์ธ
2. API ํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ
3. ์„ค์ • ํŒŒ์ผ์—์„œ API ํ‚ค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
4. API ํ‚ค ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ

#### 3. ์บ๋ฆญํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

**์ฆ์ƒ**: "Character not found" ์˜ค๋ฅ˜

**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**:
1. ์บ๋ฆญํ„ฐ ์ด๋ฆ„์„ ์ •ํ™•ํžˆ ์ž…๋ ฅ (๋Œ€์†Œ๋ฌธ์ž, ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ)
2. ํ•ด๋‹น ์บ๋ฆญํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒŒ์ž„์—์„œ ํ™•์ธ
3. ์บ๋ฆญํ„ฐ๊ฐ€ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ํ•˜๋ฃจ ์ •๋„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์žฌ์‹œ๋„

#### 4. ์š”์ฒญ ์ œํ•œ ์ดˆ๊ณผ

**์ฆ์ƒ**: "Rate limit exceeded" ์˜ค๋ฅ˜

**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**:
1. ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์žฌ์‹œ๋„ (1๋ถ„ ์ •๋„)
2. ์š”์ฒญ ๋นˆ๋„๋ฅผ ์ค„์—ฌ์„œ ์‚ฌ์šฉ
3. ํ•˜๋ฃจ 500ํšŒ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜

#### 5. ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฌธ์ œ

**์ฆ์ƒ**: "Network error" ๋˜๋Š” "Timeout" ์˜ค๋ฅ˜

**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**:
1. ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ
2. ๋ฐฉํ™”๋ฒฝ์ด๋‚˜ ํ”„๋ก์‹œ ์„ค์ • ํ™•์ธ
3. ์ž ์‹œ ํ›„ ์žฌ์‹œ๋„

### ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•

#### 1. ์ƒ์„ธํ•œ ๋กœ๊ทธ ํ™•์ธ
```bash
npx mcp-maple --debug --api-key YOUR_API_KEY
```

#### 2. ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ
Claude Desktop์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธ:
```
๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ API ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์ค˜
```

#### 3. ์„ค์ • ํŒŒ์ผ ๊ฒ€์ฆ
JSON ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ์˜จ๋ผ์ธ JSON ๊ฒ€์ฆ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

### ์•Œ๋ ค์ง„ ์ œํ•œ ์‚ฌํ•ญ

- **API ํ˜ธ์ถœ ์ œํ•œ**: ํ•˜๋ฃจ 500ํšŒ, ์ดˆ๋‹น 1ํšŒ
- **๋ฐ์ดํ„ฐ ๊ฐฑ์‹ **: ์บ๋ฆญํ„ฐ ์ •๋ณด๋Š” ๋งค์ผ ์˜ค์ „ 8์‹œ๊ฒฝ ์—…๋ฐ์ดํŠธ
- **์ง€์› ์›”๋“œ**: ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๋‚˜ ํŠน์ˆ˜ ์›”๋“œ๋Š” ์ง€์›๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

## ๐Ÿ“ž ์ง€์›

- **์ด์Šˆ**: [GitHub Issues](https://github.com/ljy9303/maplestory-mcp-server/issues)
- **๋ฌธ์„œ**: [API ์ฐธ์กฐ](docs/API_REFERENCE.md)
- **์˜ˆ์‹œ**: [์‚ฌ์šฉ ์˜ˆ์‹œ](docs/EXAMPLES.md)

## ๐Ÿ”— ๊ด€๋ จ ํ”„๋กœ์ ํŠธ

- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- [Claude Desktop](https://claude.ai/desktop)
- [NEXON ์˜คํ”ˆ API](https://openapi.nexon.com/)

---

๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•ด โค๏ธ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค

TDQS

B3.4/5.0

Scored across 15 tools

Disambiguation3/5

The tools have clear distinctions between character, guild, notice, union, and ranking categories, but there is notable overlap within character tools (get_character_basic_info, get_character_full_info, get_character_stats, get_character_equipment) where their purposes could be confused, especially since get_character_full_info appears to encompass the others. Descriptions help differentiate them, but an agent might struggle to choose the most efficient one.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_character_basic_info, get_guild_info, get_notice_list). The pattern is predictable and readable throughout the set, with no deviations in style or convention.

Tool Count5/5

With 15 tools, the count is well-scoped for a MapleStory MCP server covering character, guild, notice, union, ranking, and server health aspects. Each tool earns its place by targeting specific resources or actions, and the number aligns with typical server scopes (3-15 tools).

Completeness4/5

The tool surface provides comprehensive coverage for retrieving information in the MapleStory domain, including character details, guild data, notices, union info, and rankings. Minor gaps exist, such as no tools for updating or creating data (e.g., modifying characters or guilds), but agents can work around this for read-only operations, and core workflows are well-covered.

Maintenance

ActivityInactive
ResponsivenessNo issues