mcp-aladin-books-server

TeeDDub/mcp-aladin-books-server

3.3

If you are the rightful owner of mcp-aladin-books-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

This is an MCP server utilizing the Aladin Book Search API, designed to facilitate book searches and information retrieval.

์•Œ๋ผ๋”˜ ๋„์„œ ๊ฒ€์ƒ‰ MCP ์„œ๋ฒ„ (Node.js)

์•Œ๋ผ๋”˜ ๋„์„œ ๊ฒ€์ƒ‰ API๋ฅผ ํ™œ์šฉํ•œ MCP(Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

ํŠน์ง•

  • ๋„์„œ ๊ฒ€์ƒ‰: ์ œ๋ชฉ, ์ €์ž, ์ถœํŒ์‚ฌ, ํ‚ค์›Œ๋“œ๋กœ ๋„์„œ ๊ฒ€์ƒ‰
  • ์ƒ์„ธ ์ •๋ณด: ISBN์œผ๋กœ ๋„์„œ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ
  • ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ: ์•Œ๋ผ๋”˜ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ๋ชฉ๋ก ์กฐํšŒ (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰ ์ง€์›)
  • ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰: ๋„์„œ ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰ ๋ฐ ์กฐํšŒ (์ƒ์œ„ ๋ ˆ๋ฒจ ์šฐ์„  ํ‘œ์‹œ)

์•Œ๋ผ๋”˜ API ํ‚ค ๋ฐœ๊ธ‰

์ด MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•Œ๋ผ๋”˜์˜ API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ์•Œ๋ผ๋”˜ TTB ์‚ฌ์ดํŠธ์— ์ ‘์†
  2. ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
  3. API ํ‚ค ๋ฐœ๊ธ‰ ์‹ ์ฒญ

DXT ์„ค์น˜

  1. ํด๋กœ๋“œ ๋ฐ์Šคํฌํ†ฑ์—์„œ [์„ค์ •] - [ํ™•์žฅํ”„๋กœ๊ทธ๋žจ]์„ ์„ ํƒ
  2. ๋‹ค์šด ๋ฐ›์€ DXT ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ
  3. API ํ‚ค๋ฅผ ์ž…๋ ฅ

์„ค์ •

1. ์˜์กด์„ฑ ์„ค์น˜ ๋ฐ ๋นŒ๋“œ

npm install
npm run build

2. MCP ํด๋ผ์ด์–ธํŠธ์— ์ •๋ณด ์ž…๋ ฅ

{
  "mcpServers": {
    "aladin-books": {
      "command": "node",
      "args": [
        "<๊ฒฝ๋กœ>/mcp-aladin-books-server/dist/index.js"
      ],
      "env": {
        "ALADIN_TTB_KEY": "์•Œ๋ผ๋”˜_TTB_ํ‚ค"
      }
    }
  }
}

๋„๊ตฌ (Tools)

1. search_books

๋„์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • query (string): ๊ฒ€์ƒ‰์–ด
  • searchType (enum): ๊ฒ€์ƒ‰ ํƒ€์ž… (Title, Author, Publisher, Keyword)
  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)

2. get_book_detail

ISBN์œผ๋กœ ๋„์„œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • isbn (string): ๋„์„œ์˜ ISBN (10์ž๋ฆฌ ๋˜๋Š” 13์ž๋ฆฌ)

3. get_bestsellers

๋„์„œ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (CID) - ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ

4. get_new_books

์‹ ๊ฐ„ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (CID) - ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ

5. get_special_new_books

์ฃผ๋ชฉํ•  ๋งŒํ•œ ์‹ ๊ฐ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (CID) - ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ

6. get_editor_choice

ํŽธ์ง‘์ž ์ถ”์ฒœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (CID) - ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ

7. get_blogger_best

๋ธ”๋กœ๊ฑฐ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๊ตญ๋‚ด๋„์„œ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-100, ๊ธฐ๋ณธ๊ฐ’: 10)
  • start (number): ๊ฒ€์ƒ‰ ์‹œ์ž‘ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 1)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (CID) - ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ

8. search_categories

๋„์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ ˆ๋ฒจ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์šฐ์„ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • searchTerm (string): ๊ฒ€์ƒ‰ํ•  ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„
  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-50, ๊ธฐ๋ณธ๊ฐ’: 20)

9. get_popular_categories

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ์นดํ…Œ๊ณ ๋ฆฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ ˆ๋ฒจ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์šฐ์„ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • limit (number): ํ‘œ์‹œํ•  ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐœ์ˆ˜ (1-50, ๊ธฐ๋ณธ๊ฐ’: 20)

10. format_books_table

๋„์„œ ์ •๋ณด๋ฅผ ํ‘œ ํ˜•ํƒœ๋กœ ์ •๋ฆฌํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰, ISBN ์กฐํšŒ, ๊ฐ์ข… ๋„์„œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜:

  • type (enum): ์กฐํšŒ ํƒ€์ž… (search, isbn, bestseller, new_books, special_new_books, editor_choice, blogger_best)
  • query (string, optional): ๊ฒ€์ƒ‰์–ด (type์ด search์ธ ๊ฒฝ์šฐ ํ•„์ˆ˜)
  • isbn (string, optional): ISBN (type์ด isbn์ธ ๊ฒฝ์šฐ ํ•„์ˆ˜)
  • searchType (enum): ๊ฒ€์ƒ‰ ํƒ€์ž… (Title, Author, Publisher, Keyword, ๊ธฐ๋ณธ๊ฐ’: Title)
  • maxResults (number): ์ตœ๋Œ€ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜ (1-50, ๊ธฐ๋ณธ๊ฐ’: 10)
  • categoryId (string, optional): ์นดํ…Œ๊ณ ๋ฆฌ ID (๋ฆฌ์ŠคํŠธ ์กฐํšŒ ์‹œ ์นดํ…Œ๊ณ ๋ฆฌ ์ œํ•œ)

์‚ฌ์šฉ ์˜ˆ์‹œ

MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

// ๋„์„œ ๊ฒ€์ƒ‰
await callTool('search_books', {
  query: 'ํŒŒ์ด์ฌ',
  searchType: 'Title',
  maxResults: 5
});

// ๋„์„œ ์ƒ์„ธ ์ •๋ณด
await callTool('get_book_detail', {
  isbn: '9788966262755'
});

// ์ „์ฒด ๋„์„œ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ์กฐํšŒ
await callTool('get_bestsellers', {
  maxResults: 10
});

// ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋„์„œ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ์กฐํšŒ
await callTool('get_bestsellers', {
  maxResults: 10,
  categoryId: '798' // ์˜ˆ: ์ปดํ“จํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ
});

// ์‹ ๊ฐ„ ์ „์ฒด ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
await callTool('get_new_books', {
  maxResults: 10
});

// ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์‹ ๊ฐ„ ์กฐํšŒ
await callTool('get_new_books', {
  maxResults: 10,
  categoryId: '798' // ์˜ˆ: ์ปดํ“จํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ
});

// ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์‹ ๊ฐ„ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
await callTool('get_special_new_books', {
  maxResults: 10
});

// ํŽธ์ง‘์ž ์ถ”์ฒœ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
await callTool('get_editor_choice', {
  maxResults: 10
});

// ๋ธ”๋กœ๊ฑฐ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ ์กฐํšŒ (๊ตญ๋‚ด๋„์„œ๋งŒ)
await callTool('get_blogger_best', {
  maxResults: 10,
  categoryId: '798' // ์˜ˆ: ์ปดํ“จํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ
});

// ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰ (์ƒ์œ„ ๋ ˆ๋ฒจ ์šฐ์„ )
await callTool('search_categories', {
  searchTerm: '์†Œ์„ค',
  maxResults: 10
});

// ์ธ๊ธฐ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ (์ƒ์œ„ ๋ ˆ๋ฒจ ์šฐ์„ )
await callTool('get_popular_categories', {
  limit: 10
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (๊ฒ€์ƒ‰)
await callTool('format_books_table', {
  type: 'search',
  query: 'ํŒŒ์ด์ฌ',
  searchType: 'Title',
  maxResults: 5
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (๋ฒ ์ŠคํŠธ์…€๋Ÿฌ)
await callTool('format_books_table', {
  type: 'bestseller',
  maxResults: 10,
  categoryId: '798'
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (์‹ ๊ฐ„ ์ „์ฒด)
await callTool('format_books_table', {
  type: 'new_books',
  maxResults: 10
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (์ฃผ๋ชฉํ•  ๋งŒํ•œ ์‹ ๊ฐ„)
await callTool('format_books_table', {
  type: 'special_new_books',
  maxResults: 10
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (ํŽธ์ง‘์ž ์ถ”์ฒœ)
await callTool('format_books_table', {
  type: 'editor_choice',
  maxResults: 10
});

// ๋„์„œ ์ •๋ณด ํ‘œ ํ˜•ํƒœ ํ‘œ์‹œ (๋ธ”๋กœ๊ฑฐ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ)
await callTool('format_books_table', {
  type: 'blogger_best',
  maxResults: 10,
  categoryId: '798'
});

๊ฐœ๋ฐœ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

server/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ index.ts                     # ๋ฉ”์ธ ์„œ๋ฒ„ ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ aladin_book_categories.json  # ์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด ํŒŒ์ผ (๋Œ€์šฉ๋Ÿ‰)
โ”œโ”€โ”€ dist/                            # ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ
โ”œโ”€โ”€ package.json                     # ํŒจํ‚ค์ง€ ์„ค์ •
โ”œโ”€โ”€ tsconfig.json                    # TypeScript ์„ค์ •
โ”œโ”€โ”€ env.example                      # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ˆ์‹œ
โ”œโ”€โ”€ test.js                          # ํ…Œ์ŠคํŠธ ํŒŒ์ผ
โ””โ”€โ”€ README.md                        # ๋ฌธ์„œ

๊ธฐ์ˆ  ์Šคํƒ

  • Node.js: ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ
  • TypeScript: ํƒ€์ž… ์•ˆ์ „์„ฑ (ES2020 ํƒ€๊ฒŸ, ESNext ๋ชจ๋“ˆ)
  • @modelcontextprotocol/sdk: MCP ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„
  • axios: HTTP ํด๋ผ์ด์–ธํŠธ
  • zod: ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ

๊ฐœ๋ฐœ ์˜์กด์„ฑ

  • tsx: TypeScript ๊ฐœ๋ฐœ ์‹คํ–‰๊ธฐ
  • @types/node: Node.js ํƒ€์ž… ์ •์˜

๋นŒ๋“œ ์„ค์ •

  • ํƒ€๊ฒŸ: ES2020
  • ๋ชจ๋“ˆ: ESNext
  • ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ: dist/
  • ์†Œ์Šค๋งต: ํฌํ•จ
  • ์„ ์–ธ ํŒŒ์ผ: ์ƒ์„ฑ
  • JSON ๋ชจ๋“ˆ: ์ง€์›

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

# ์•Œ๋ผ๋”˜ TTB ํ‚ค (ํ•„์ˆ˜)
ALADIN_TTB_KEY=your_aladin_ttb_key_here

๋ผ์ด์„ ์Šค

ISC