TeeDDub/mcp-aladin-books-server
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 ํค๊ฐ ํ์ํฉ๋๋ค.
- ์๋ผ๋ TTB ์ฌ์ดํธ์ ์ ์
- ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ
- API ํค ๋ฐ๊ธ ์ ์ฒญ
DXT ์ค์น
- ํด๋ก๋ ๋ฐ์คํฌํฑ์์ [์ค์ ] - [ํ์ฅํ๋ก๊ทธ๋จ]์ ์ ํ
- ๋ค์ด ๋ฐ์ DXT ํ์ผ์ ๋๋๊ทธ ์ค ๋๋กญ
- 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