keyword-rag-mcp

cskwork/keyword-rag-mcp

3.3

If you are the rightful owner of keyword-rag-mcp 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.

The MCP Knowledge Retrieval Server is designed for document search and retrieval using the BM25 algorithm, providing a structured and efficient way to manage and access information.

Tools
  1. search-documents

    Performs document search based on keywords.

  2. get-document-by-id

    Retrieves a document by its ID.

  3. list-domains

    Lists all available domains and document counts.

  4. get-chunk-with-context

    Retrieves a specific chunk and its surrounding context.

MCP Knowledge Retrieval Server

BM25 ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ๊ฒ€์ƒ‰ ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ MCP(Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

๐Ÿš€ ์ฆ‰์‹œ ์‹œ์ž‘ํ•˜๊ธฐ

๐ŸŽฏ ์ดˆ๊ฐ„๋‹จ ์„ค์น˜ (๊ถŒ์žฅ)

# macOS/Linux
./run.sh

# Windows
run.bat

์ด ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

  • โœ… Node.js ๋ฒ„์ „ ํ™•์ธ
  • โœ… ์˜์กด์„ฑ ์„ค์น˜ (npm install)
  • โœ… ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ (npm run build)
  • โœ… ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ (config.json)
  • โœ… ์˜ˆ์‹œ ๋ฌธ์„œ ์ƒ์„ฑ (docs/ ํด๋”)
  • โœ… Claude Desktop ์„ค์ • ๊ฐ€์ด๋“œ ์ถœ๋ ฅ
  • โœ… MCP ์„œ๋ฒ„ ์‹คํ–‰

์ˆ˜๋™ ์„ค์น˜

# ๋‹จ๊ณ„๋ณ„ ์„ค์น˜
npm install && npm run build && cp config.example.json config.json

# ์„œ๋ฒ„ ์‹คํ–‰
npm start

๊ฐœ๋ฐœ ๋ชจ๋“œ

npm run dev

๐Ÿ“‹ ๊ธฐ๋ณธ ์„ค์ •

config.json (์ž๋™ ์ƒ์„ฑ๋จ)

{
  "serverName": "knowledge-retrieval",  
  "serverVersion": "1.0.0",
  "documentSource": {
    "type": "local",
    "basePath": "./docs",
    "domains": [
      {
        "name": "company",
        "path": "company",
        "category": "ํšŒ์‚ฌ์ •๋ณด"
      },
      {
        "name": "customer", 
        "path": "customer",
        "category": "๊ณ ๊ฐ์„œ๋น„์Šค"
      },
      {
        "name": "product",
        "path": "product", 
        "category": "์ œํ’ˆ์ •๋ณด"
      },
      {
        "name": "technical",
        "path": "technical",
        "category": "๊ธฐ์ˆ ๋ฌธ์„œ"
      }
    ]
  },
  "bm25": {
    "k1": 1.2,
    "b": 0.75
  },
  "chunk": {
    "minWords": 30,
    "contextWindowSize": 1
  },
  "logLevel": "info"
}

์ฃผ์š” ์„ค์ • ํ•ญ๋ชฉ

  • documentSource.basePath: ๋ฌธ์„œ ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ
  • domains: ๊ฒ€์ƒ‰ํ•  ๋„๋ฉ”์ธ๋“ค์˜ ์„ค์ •
  • bm25.k1: BM25 ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ term frequency saturation ํŒŒ๋ผ๋ฏธํ„ฐ (๊ธฐ๋ณธ๊ฐ’: 1.2)
  • bm25.b: BM25 ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ field length normalization ํŒŒ๋ผ๋ฏธํ„ฐ (๊ธฐ๋ณธ๊ฐ’: 0.75)
  • chunk.minWords: ์ฒญํฌ์˜ ์ตœ์†Œ ๋‹จ์–ด ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 30)

๐Ÿ”ง Claude Desktop ์—ฐ๋™

์„ค์ • ํŒŒ์ผ ์œ„์น˜

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%/Claude/claude_desktop_config.json

์„ค์ • ๋‚ด์šฉ (์ ˆ๋Œ€ ๊ฒฝ๋กœ)

{
  "mcpServers": {
    "knowledge-retrieval": {
      "command": "node",
      "args": ["<ํ”„๋กœ์ ํŠธ_๊ฒฝ๋กœ>/dist/index.js"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

์ค‘์š”: <ํ”„๋กœ์ ํŠธ_๊ฒฝ๋กœ>๋ฅผ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ํด๋”์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ์„ธ์š”!

๊ถŒ์žฅ ์„ค์ • (์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •)

{
  "mcpServers": {
    "knowledge-retrieval": {
      "command": "npm",
      "args": ["start"],
      "cwd": "<ํ”„๋กœ์ ํŠธ_๊ฒฝ๋กœ>"
    }
  }
}

๐Ÿ“ ๋ฌธ์„œ ๊ตฌ์กฐ

๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

docs/
โ”œโ”€โ”€ company/           # ํšŒ์‚ฌ ์ •๋ณด
โ”‚   โ”œโ”€โ”€ about.md
โ”‚   โ””โ”€โ”€ team.md
โ”œโ”€โ”€ customer/          # ๊ณ ๊ฐ ์„œ๋น„์Šค
โ”‚   โ”œโ”€โ”€ support.md
โ”‚   โ””โ”€โ”€ sla.md
โ”œโ”€โ”€ product/           # ์ œํ’ˆ ์ •๋ณด
โ”‚   โ”œโ”€โ”€ ai-platform.md
โ”‚   โ””โ”€โ”€ web-app.md
โ””โ”€โ”€ technical/         # ๊ธฐ์ˆ  ๋ฌธ์„œ
    โ”œโ”€โ”€ api-guide.md
    โ””โ”€โ”€ deployment.md

์ง€์› ํŒŒ์ผ ํ˜•์‹

  • .md (Markdown)
  • .mdx (MDX)
  • .markdown

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

1. search-documents

๋ฌธ์„œ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ:

  • keywords: ๊ฒ€์ƒ‰ํ•  ํ‚ค์›Œ๋“œ ๋ฐฐ์—ด
  • maxResults: ์ตœ๋Œ€ ๊ฒฐ๊ณผ ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 10)
  • domain: ํŠน์ • ๋„๋ฉ”์ธ์œผ๋กœ ๊ฒ€์ƒ‰ ์ œํ•œ (์„ ํƒ์‚ฌํ•ญ)

์˜ˆ์‹œ:

// Claude Desktop์—์„œ ์‚ฌ์šฉํ•  ๋•Œ
"AI ํ”Œ๋žซํผ์˜ ๊ฐ€๊ฒฉ ์ •์ฑ…์„ ์•Œ๋ ค์ค˜"

2. get-document-by-id

ํŠน์ • ๋ฌธ์„œ ID๋กœ ์ „์ฒด ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ:

  • documentId: ๋ฌธ์„œ ID

3. list-domains

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋„๋ฉ”์ธ๊ณผ ๋ฌธ์„œ ์ˆ˜๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

4. get-chunk-with-context

ํŠน์ • ์ฒญํฌ์™€ ๊ทธ ์ฃผ๋ณ€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ:

  • chunkId: ์ฒญํฌ ID
  • contextSize: ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ํฌ๊ธฐ (์„ ํƒ์‚ฌํ•ญ)

๐Ÿงช ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ

1. ์„œ๋ฒ„ ์ž‘๋™ ํ™•์ธ

npm run dev

โœ… ์„ฑ๊ณต์‹œ ์ถœ๋ ฅ ์˜ˆ์‹œ:

Initializing knowledge-retrieval v1.0.0...
Loaded 8 documents
Initialized repository with 36 chunks from 8 documents
MCP server started successfully

2. Claude Desktop์—์„œ ์ฆ‰์‹œ ํ…Œ์ŠคํŠธ

Claude Desktop ์žฌ์‹œ์ž‘ ํ›„ ๋‹ค์Œ ์งˆ๋ฌธ๋“ค๋กœ ํ…Œ์ŠคํŠธ:

์šฐ๋ฆฌ ํšŒ์‚ฌ์˜ ๋น„์ „๊ณผ ๋ฏธ์…˜์ด ๋ญ์•ผ?
AI ํ”Œ๋žซํผ์˜ ๊ฐ€๊ฒฉ ์ •์ฑ…์„ ์•Œ๋ ค์ค˜
API ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด์ค˜

3. ๋น ๋ฅธ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์„œ๋ฒ„ ์‹œ์ž‘ ์‹คํŒจnpm install && npm run build
๋ฌธ์„œ ๋กœ๋“œ ์‹คํŒจdocs/ ํด๋”์™€ .md ํŒŒ์ผ ํ™•์ธ
Claude Desktop ์—ฐ๊ฒฐ ์‹คํŒจ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ ํ™•์ธ ํ›„ Claude Desktop ์žฌ์‹œ์ž‘

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

BM25 ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹

  • k1 ๊ฐ’ ์ฆ๊ฐ€: ๋‹จ์–ด ๋นˆ๋„์˜ ์˜ํ–ฅ ์ฆ๊ฐ€ (1.2 โ†’ 2.0)
  • b ๊ฐ’ ์กฐ์ •: ๋ฌธ์„œ ๊ธธ์ด ์ •๊ทœํ™” ๊ฐ•๋„ (0.75 โ†’ 0.5)

์ฒญํฌ ํฌ๊ธฐ ์ตœ์ ํ™”

  • minWords ์ฆ๊ฐ€: ๋” ํฐ ์ปจํ…์ŠคํŠธ, ๋А๋ฆฐ ๊ฒ€์ƒ‰
  • minWords ๊ฐ์†Œ: ์ •ํ™•ํ•œ ๋งค์นญ, ๋น ๋ฅธ ๊ฒ€์ƒ‰

๐Ÿ”’ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

  1. ํŒŒ์ผ ๊ถŒํ•œ: ๋ฌธ์„œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ ์ ˆํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ ์„ค์ •
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜: ๋ฏผ๊ฐํ•œ ์„ค์ •์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ
  3. ๋„คํŠธ์›Œํฌ: ํ•„์š”์‹œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์„ค์ •

๐Ÿ“ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

export MCP_SERVER_NAME="my-knowledge-server"
export DOCS_BASE_PATH="./my-docs"
export BM25_K1="1.5"
export BM25_B="0.8"
export CHUNK_MIN_WORDS="50"
export LOG_LEVEL="debug"

๐Ÿ†˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ํ™•์ธ ์ˆœ์„œ:

  1. ๋กœ๊ทธ ํ™•์ธ: npm run dev ์ถœ๋ ฅ ๋ฉ”์‹œ์ง€
  2. ์„ค์ • ํŒŒ์ผ: config.json ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ํ™•์ธ
  3. ๋ฌธ์„œ ํด๋”: docs/ ๋””๋ ‰ํ† ๋ฆฌ์™€ .md ํŒŒ์ผ ํ™•์ธ
  4. Claude Desktop: ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ์žฌ์‹œ์ž‘

๐Ÿ’ก ํ•ต์‹ฌ ์š”์•ฝ

์ฆ‰์‹œ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์ž๋™ ์„ค์น˜ ์‚ฌ์šฉ์‹œ:

  • ./run.sh (๋˜๋Š” run.bat) ์‹คํ–‰
  • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถœ๋ ฅํ•˜๋Š” Claude Desktop ์„ค์ • ๋ณต์‚ฌ
  • Claude Desktop ์žฌ์‹œ์ž‘
  • ํ…Œ์ŠคํŠธ ์งˆ๋ฌธ์œผ๋กœ ์ž‘๋™ ํ™•์ธ

์ˆ˜๋™ ์„ค์น˜ ์‚ฌ์šฉ์‹œ:

  • npm install && npm run build && cp config.example.json config.json
  • docs/ ํด๋”์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ์ถ”๊ฐ€
  • Claude Desktop ์„ค์ • ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ ์ง€์ •
  • Claude Desktop ์žฌ์‹œ์ž‘
  • ํ…Œ์ŠคํŠธ ์งˆ๋ฌธ์œผ๋กœ ์ž‘๋™ ํ™•์ธ

์ฃผ์š” ๋ช…๋ น์–ด

  • ๊ฐœ๋ฐœ: npm run dev
  • ๋นŒ๋“œ: npm run build
  • ์‹คํ–‰: npm start
  • ํ…Œ์ŠคํŠธ: npm test

MIT ๋ผ์ด์„ ์Šค | ๊ฐœ๋ฐœ ์ค‘์—๋Š” npm run dev ์‚ฌ์šฉ ๊ถŒ์žฅ