
MCP(Managed Code Platform)를 활용한 데이터 분석 에이전트 구현
## 1. MCP와 LangChain 연동
* **MCP 활용:** 데이터 분석 에이전트가 MCP 도구에 접근하여 필요한 도구를 가져다 사용하는 방식
* **LangChain 기반 에이전트:**
* LangGraph 또는 LangChain 기반 에이전트가 MCP 도구에 쉽게 연결되도록 돕는 역할
* `LangChain MCP Adapter`가 연결 다리 역할 수행
* **Python SDK:**
* MCP 서버 및 클라이언트 구현을 위한 Python SDK 제공
* GitHub 주소에서 확인 가능
* **SDK (Software Development Kit):** 특정 플랫폼용 앱 개발을 위한 도구 모음
## 2. MCP Python SDK
* **목적:** MCP 서버 클라이언트 구축을 위한 Python 기반 개발 키트
* **기능:**
* MCP 표준을 따르는 MCP 서버 구축
* MCP 서버에 연결 가능한 MCP 클라이언트 구축
* **구현:**
* `FastMCP`로 임포트
* `server.py` 등의 파일로 작성
* `FastMCP()`를 통해 서버 생성 (서버 이름 포함)
* 서버 내 도구, 리소스, 프롬프트 추가 가능
### 2.1. MCP 구성 요소
* **도구 (Tools):**
* AI 에이전트가 외부 시스템에서 작업을 수행하도록 하는 도구 정의
* 사용자 질문에 필요한 도구를 판단하여 호출
* 예시: BMI 지수 계산, 날씨 반환 도구
* **리소스 (Resources):**
* AI 에이전트 및 모델에 필요한 정보 또는 컨텍스트 제공
* 서버가 가진 데이터, 콘텐츠, 설정 등을 LLM에 공개
* 예시: DB 스키마, 사용자 정보
* **프롬프트 (Prompts):**
* 재사용 가능한 프롬프트 템플릿을 MCP 서버에 저장
* 에이전트 필요 시 템플릿을 가져와 사용
* 예시: 데이터 분석 조수 역할을 위한 시스템 메시지
### 2.2. MCP 서버 코드 예시
```python
from fastmcp import FastMCP
# MCP 서버 생성
server = FastMCP("MyMCP_Server")
# 도구 추가 (예: 덧셈)
@server.tool
def add(a: int, b: int) -> int:
return a + b
# 리소스 추가 (예: 데이터, 설정)
# server.resource("my_data", {"key": "value"})
# 프롬프트 추가
# server.prompt("my_prompt", "This is a prompt template.")
```
## 3. MCP 서버 구축 및 클라이언트 연결
### 3.1. MCP 서버 구축
1. **도구 정의:** `@server.tool` 데코레이터를 사용하여 도구 구현
* **특정 컬럼 통계 (describe):** CSV 파일 및 컬럼명을 입력받아 요약 통계값 반환 (Pandas `describe` 활용)
* **히스토그램 시각화 (plot_histogram):** CSV 파일 및 컬럼명을 받아 히스토그램 생성 및 PNG 파일로 저장, 경로 반환
* **모델링 (modeling):** CSV 파일, X, Y 값을 입력받아 예측 모델 학습 및 정확도/RMS 값 반환 (분류/회귀 모델, 랜덤 포레스트/리그레서 사용)
2. **리소스 및 프롬프트 추가:**
* `MCP Resource`: 데이터, 리소스, 설정 정의
* `MCP Prompt`: 재사용 가능한 프롬프트 템플릿 정의 (시스템 메시지, 사용자 메시지 포함)
3. **전송 방식 지정:**
* **STDIO (Standard Input/Output):** 서버와 클라이언트가 동일 프로세스 내에서 작동하거나 로컬 모델 실행 시 사용
* **SSE (Server-Sent Events):** 서버와 클라이언트 간 효율적인 단방향 통신, 실시간 데이터 업데이트 시 사용
### 3.2. MCP 클라이언트 구현
1. **환경 설정:**
* OpenAI API 키 등 환경 변수 설정
* 사용할 LLM 모델 로드
2. **MCP 서버 연결:**
* `stdio_server_parameters()`를 사용하여 서버 파라미터 생성 (STDIO 방식)
* `python -m server.py` 형태로 커맨드 입력 (Python 기반 실행)
3. **클라이언트 생성 및 세션 관리:**
* `AsyncClient`를 통해 비동기 클라이언트 생성
* `session` 단위로 서버와 클라이언트 연동 및 에이전트 작동 관리
4. **랭체인 MCP 어댑터 활용:**
* `LangChain MCP Adapter` 라이브러리 설치 (`pip install langchain-mcp-adapter`)
* `load_mcp_tool()` 함수를 사용하여 MCP 서버의 도구들을 LangChain 툴로 변환
* `create_react_agent()` 등을 사용하여 툴 콜링 에이전트 구현
* `load_mcp_prompt()` 함수를 사용하여 MCP 서버의 프롬프트 로드
5. **에이전트 실행:**
* 사용자 입력 처리
* 로드된 프롬프트와 사용자 입력을 기반으로 에이전트 `invoke`
* LLM이 도구를 호출하고 결과를 반환
## 4. 실행 예시 (데이터 분석 에이전트)
1. **터미널 2개 실행:**
* **Terminal 1:** MCP 서버 구동 (`python data_server.py`)
* **Terminal 2:** 클라이언트 실행 (요청 주고받기)
2. **질문 예시:**
* **통계:** "아이리스 데이터의 petal_length 컬럼 통계를 내주세요."
* `describe` 도구 호출 결과 반환
* **시각화:** "아이리스 데이터의 sepal_length 컬럼 분포를 시각화해주세요."
* `plot_histogram` 도구 호출, 히스토그램 이미지 저장 및 경로 반환
* **모델링:** "아이리스 데이터에서 sepal_length와 sepal_width를 사용하여 class_name을 예측하는 모델을 학습하고 결과를 알려주세요."
* `modeling` 도구 호출, 분류 모델 학습 및 정확도 결과 반환
3. **반복 처리:** `while` 문 등을 사용하여 에이전트 입력 반복 처리 가능
## 5. 추가 고려 사항
* **커스터마이징:** 에이전트 로직, 도구, 프롬프트 등은 필요에 따라 자유롭게 커스터마이징 가능
* **다양한 주제 적용:** 데이터 분석 외 다른 주제에 대한 프로젝트 및 도구 구현 가능