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
Scored across 15 tools
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.
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.
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).
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.