# Task-513: MCP 서버 구현 (OpenRAG Phase 4)

## 목표
아누 시스템의 지식 베이스를 Claude Desktop / Cursor에서 직접 사용할 수 있도록 MCP(Model Context Protocol) 서버를 구현한다.

## 선행 작업 (완료)
- ✅ pgvector 인프라 + 하이브리드 검색 (Phase 1)
- ✅ Docling 문서 파싱 (Phase 2)
- Phase 3 (InsuRo 통합)은 별도 진행 — MCP 서버는 독립적으로 작업 가능

## 구현 범위

### 1. MCP 서버 모듈
- 경로: `/home/jay/workspace/services/mcp_server.py` (신규)
- 프로토콜: Anthropic MCP (stdio 기반)
- 의존성: `pip install mcp` (Anthropic MCP SDK)
- **3개 Tool 제공:**

#### Tool 1: `search_knowledge`
```
입력: {"query": str, "source": str|null, "limit": int}
출력: [{"content": str, "title": str, "source": str, "similarity": float}]
동작: libs/search.py의 hybrid_search() 호출
```

#### Tool 2: `get_document`
```
입력: {"document_id": str}
출력: {"id": str, "title": str, "content": str, "source": str, "metadata": dict}
동작: Supabase에서 knowledge_documents 조회
```

#### Tool 3: `list_sources`
```
입력: {} (없음)
출력: [{"source": str, "document_count": int}]
동작: knowledge_documents에서 source별 GROUP BY COUNT
```

### 2. MCP 서버 설정 파일
- Claude Desktop 설정 예시 파일 작성
- 경로: `/home/jay/workspace/services/claude_desktop_config_example.json`
```json
{
  "mcpServers": {
    "anu-knowledge": {
      "command": "python3",
      "args": ["/home/jay/workspace/services/mcp_server.py"],
      "env": {
        "INSURO_NEW_SUPABASE_URL": "...",
        "INSURO_NEW_SERVICE_ROLE_KEY": "...",
        "OPENAI_API_KEY": "..."
      }
    }
  }
}
```

### 3. 테스트
- MCP 서버 단위 테스트: `/home/jay/workspace/services/tests/test_mcp_server.py`
- Tool 호출 mock 테스트
- stdio 통신 테스트 (MCP SDK 테스트 유틸 활용)
- 에러 핸들링: 잘못된 파라미터, DB 연결 실패 등

### 4. 문서
- README: `/home/jay/workspace/services/README.md`
- 설치 방법, 설정 방법, 사용 예시

## 기술 참조
- Anthropic MCP 공식 문서: https://modelcontextprotocol.io/
- MCP Python SDK: `pip install mcp`
- 서버 구현 패턴: `@mcp.tool()` 데코레이터 사용

## 주의사항
- libs/ 모듈 import해서 사용 (직접 수정 금지)
- 환경변수로 DB 접속 정보 관리 (하드코딩 금지)
- stdio 기반 통신이므로 print/logging은 stderr로만 출력
- Supabase 연결: INSURO_NEW_SUPABASE_URL, INSURO_NEW_SERVICE_ROLE_KEY
