Skip to main content
Glama

LangGraph RAG MCP

Model Context Protocol(MCP)을 통해 LangGraph 문서를 제공하는 검색 증강 생성(RAG) 시스템입니다.

개요

이 프로젝트는 다음과 같은 문서 검색 시스템을 구축합니다:

  1. 공식 웹사이트에서 LangGraph 문서를 수집하고 처리합니다

  2. 이 문서를 바탕으로 의미 기반 검색용 벡터 데이터베이스를 생성합니다

  3. Model Context Protocol(MCP)을 통해 이 지식을 노출합니다

  4. VS Code, Cursor, Claude Desktop, Windsurf 등 MCP 호환 호스트와 통합됩니다

Related MCP server: mcp-rag-agent

작동 방식

1. 문서 수집 및 처리(Context)

  • RecursiveUrlLoader와 BeautifulSoup을 사용하여 여러 웹사이트 URL에서 LangGraph 문서를 재귀적으로 스크레이핑하고 정리합니다.

  • RecursiveCharacterTextSplitter와 tiktoken을 사용해 정확한 토큰 수를 계산하며, 텍스트를 관리하기 쉬운 청크로 분할합니다.

  • BAAI/bge-large-en-v1.5 임베딩을 사용하여 청크를 벡터 표현으로 임베딩합니다.

  • 효율적인 검색을 위해 SKLearnVectorStore에 벡터를 저장합니다.

2. 검색 시스템(Tool)

  • 주어진 쿼리에 대해 가장 관련성이 높은 문서 청크를 찾는 검색 함수를 구현합니다.

  • 이 함수를 Claude와 같은 언어 모델과 통합하여 문맥을 고려한 응답을 제공합니다.

  • 출처 표기와 관련 문맥을 포함한 형식화된 응답을 반환합니다.

3. MCP 서버 통합

  • fastmcp 라이브러리를 사용하여 검색 도구를 MCP 서버에 래핑니다.

  • 검색 함수를 MCP 호환 호스트가 사용할 수 있는 도구로 노출합니다.

  • 검색 시스템과 추가 리소스(예: 전체 문서 파일) 모두에 대한 접근을 제곱니다.

요구 사항

  • Python 3.10+

  • Docker 및 Docker Compose(권장)

  • Anthropic API 키(Claude 모델용)

설치 및 설정

이 프로젝트는 Docker(권장) 또는 로컬 Python 환경에서 실행할 수 있습니다.

Docker 사용(권장)

  1. 이 저장소를 클론하세요:

    git clone https://github.com/yourusername/langraph-rag-mcp.git
    cd langraph-rag-mcp
  2. .env 파일에 API 키를 설정하세요: 프로젝트 루트에 .env 파일을 만들고 Anthropic API 키를 추가하세요:

    echo "ANTHROPIC_API_KEY=your_api_key_here" > .env

    docker-compose.yml 파일이 이 환경 변수를 자동으로 로드합니다.

로컬 환경(Docker 없이)

  1. 이 저장소를 클론하세요:

    git clone https://github.com/yourusername/langraph-rag-mcp.git
    cd langraph-rag-mcp
  2. 가상 환경을 생성하고 활성화하세요:

    conda create -n mcp python=3.13
    conda activate mcp
  3. 필요한 패키지를 설치하세요:

    pip install -r requirements.txt
  4. .env 파일에 API 키를 설정하세요:

    echo "ANTHROPIC_API_KEY=your_api_key_here" > .env

사용법

이 과정은 두 가지 주요 단계로 이루어집니다. 첫 번째는 벡터 스토어를 생성하는 것이고, 두 번째는 MCP 서버를 실행하는 것입니다.

1단계: 벡터 스토어 생성

이 단계는 한 번만 수행하면 되며, 문서를 업데이트하고 싶을 때마다 다시 수행하면 됩니다.

  1. Jupyter 환경에서 rag-tool.ipynb 노트북을 열어 실행하세요.

  2. 이 단계는 다음을 수행합니다:

    • 최신 LangGraph 문서를 다운로드합니다.

    • 전체 문서를 llms_full.txt에 저장합니다.

    • 문서를 청크로 분할합니다.

    • sklearn_vectorstore.parquet에 벡터 스토어를 생성하고 저장합니다.

2단계: MCP 서버 실행

Docker 사용

서버를 실행하는 가장 쉬운 방법은 제공된 셸 스크립트를 사용하는 것입니다. 이 스크립트는 Docker Compose를 래핑합니다.

bash run-mcp-docker.sh

이 스크립트는 Docker 이미지가 없으면 이미지를 빌드하고, 컨테이너를 시작한 후 그 안에서 MCP 서버를 실행합니다. MCP 통신을 위해 표준 입출력을 올바르게 처합니다.

Docker 없이

Docker를 사욕하지 않는다면 다음 명령을 통해 MCP 서버를 개방 모드로 직접 실할 수 있습니다:

mcp dev langgraph-mcp.py

MCP 호스트 구성

이 MCP 서버를 호환 편집기에서 사용하려면 구성이 필요합니다.

VS Code

  1. VS Code의 settings.json 파일을 여세요. (명령 팔레트에서 찾을 수 있습니다: Preferences: Open User Settings (JSON)).

  2. 파일에 다음 구성을 추가하세요. <path-to-your-project>를 사용자 머신의 langraph-rag-mcp 디렉터리의 절대 경로로 반드시 바꾸세요.

"mcp.servers": [
    {
        "name": "langgraph-mcp",
        "command": [
            "/bin/bash",
            "<path-to-your-project>/run-mcp-docker.sh"
        ],
        "env": {
            "ANTHROPIC_API_KEY": "<your-anthropic-api-key>"
        }
    }
]

Docker를 사용하지 않는다면 command를 다음과 같이 변경하세요:

"command": [
    "<path-to-your-conda-env>/bin/python",
    "<path-to-your-project>/langgraph-mcp.py"
]

시스템 아키텍처

(Phase 1: Data Ingestion - Performed once on Host Machine)
┌─────────────┐      ┌──────────────────┐      ┌───────────────────────────────┐
│ LangGraph   │      │ Jupyter Notebook │      │ Vector Store & Full Docs      │
│ Docs (Web)  │───▶  │ (rag-tool.ipynb) │───▶  │ (.parquet & .txt files)       │
└─────────────┘      └──────────────────┘      └───────────────────────────────┘


(Phase 2: Live RAG System - Request/Response Flow)
┌──────────────┐                             ┌─────────────┐
│   VS Code    │                             │  .env file  │
│(User Interface)│                             │ (API KEY)   │
└──────┬───────┘                             └──────┬──────┘
       │ 1. User Query                             │ (provides)
       ▼                                           │
┌──────┴───────────────────────────────────────────┴───────────────────────────────┐
│ Host Machine Boundary                                                            │
│                                                                                  │
│      ┌────────────────────┐          ┌─────────────────────────────────────────┐ │
│      │ run-mcp-docker.sh  │ 2. Execs │  🐳 Docker Container                      │ │
│      │ (Entrypoint Script)│────▶     │                                         │ │
│      └────────────────────┘          │  ┌───────────────────────────────────┐  │ │
│                                      │  │   🐍 Python MCP Server              │  │ │
│      ▲                             ◀─┼──│   (langgraph-mcp.py)              │  │ │
│      │ 7. Final Response             │  └───────────────┬───────────────────┘  │ │
│      │                               │                  │ 3. Reads Data From  │ │
│      └───────────────────────────────│──────────────────│─────────────────────┘ │
│                                      │                  │                       │
│                                      │                  ▼                       │
│                                      │  ┌───────────────────────────────────┐  │
│ (files mounted from Host) ············  │   Mounted Vector Store & Docs     │  │
│                                      │  └───────────────────────────────────┘  │
│                                      └─────────────────────────────────────────┘ │
│                                                                                  │
└──────────────────────────────────────────────────────────────────────────────────┘
                                                        │ 4. API Call
                                                        │    (sends augmented prompt)
                                                        ▼
                                             ┌────────────────────┐
                                             │ ☁️ Anthropic API   │
                                             │   (Claude LLM)     │
                                             └──────────┬─────────┘
                                                        │ 5. Generation
                                                        │
                                                        ◀························
                                                          6. Returns Response
                                                          (to MCP Server)

리소스

MCP From Scratch

Related MCP Connectors

Related MCP Servers