안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️ 입니다.
AI 관련 프로젝트를 진행하다가 MCP( Model Context Protocol ) 라는 용어를 듣게 되었습니다! ( MCP..? 그게 뭔데 먹는건가 )
처음 듣는 용어이다 보니 공부를 하면서 느꼈던 내용과 실습 과정을 블로그에 남겨보려고 합니다!
1. MCP 란?
어플리케이션이 LLM에 컨텍스트를 제공하는 방식을 표준화하는 개방형 프로토콜
이게 무슨 소리야? 할 수 있습니다. 예를 들어,
ChatGPT, Claude AI 와 같은 대형 언어 모델 ( LLM ) 은
"언제(When) 어디서 (Where) 어떤 (What) 정보를 참고하는지 파악하기는 어렵다" 입니다.
이러한 문제를 해결하기 위해 등장한 개념이 바로 MCP 입니다. 쉽게 말해
모델이 어떤 맥락(Context)를 가지고 작동하는지 정리하고 전달해주는 표준화된 형식 입니다.
1.1 모델이랑 문맥(Context) 무슨 상관관계 인거야?
AI 에서 사용되는 모델은 질문에 대한 답변을 생성할 때,
단순히 질문만 보고 답변하는 것이 아닌데요! ( 사람의 대화도 비슷한 맥락 )
지금 질문 뿐만 아니라, 이전의 문맥 또는 사용자의 의도, 환경 등을 함께 고려합니다!
- 사용자의 이전 질문들
- 대화 주제나 명시된 작업 목적
- 외부에서 참조한 데이터
- 기타
위와 같은 다양한 정보가 모델에게 주어질 수 있지만, 너무나 다양한 정보가 있기 때문에 우리는 표준화된 규칙이 필요합니다.
MCP는 바로 이런 정보들을 표준화된 방식으로 묶어서 모델에게 전달할 수 있는 약속(프로토콜) 입니다.
1.2 구성요소
위에서 MCP란 모델에게 전달되는 다양한 정보들을 표준화된 방식으로 가공하는 것이라고 했는데요.
대표적인 MCP의 구성요소는 다음과 같습니다!
- system : 모델이 따라야 할 기본 규칙 또는 인격
- "친절한 Python 전문가로 대답해 주세요"
- tools: 사용할 수 있는 기능들
- 코드 해석기, 검색 도구
- files : 참조할 외부 문서
- PDF, 소스코드
- threads : 대화 이력 및 컨텍스트
- 이전에 질문했던 내용 및 답변
- user : 사용자 정보
- 이름, 역할, 목적
2. MCP 서버란?
MCP(모델 컨텍스트 프로토콜)의 일부로, LLM이 외부 데이터 소스와 도구에 접근할 수 있도록 돕는 프로그램
이는, AI 시스템과 외부 시스템 간의 상호작용을 표준화하여, 데이터를 효율적으로 교환하고 작업을 수행할 수 있게 도와준다.
2-1. MCP 서버의 역할
MCP 서버는 LLM이 외부 데이터와 상호작용 할 수 있도록 지원한다.
예를 들어,
파일 읽기, API 호출, DB 접근 등을 가능하게 합니다.
LLM 기능을 확장하고, 사용자 경험을 개선할 수 있다.
2-2. MCP 서버 사용 이유
- 데이터 접근성 향상
- LLM이 실시간 데이터에 접근 가능
- 기능 확장
- 기존 AI 모델에 새로운 도구와 기능 추가
- 표준화된 통합
- 다양한 LLM과 호환 가능
2-3. MCP 서버의 주요 기능
- 리소스 ( Resource )
- 파일, DB, API 응답 등 읽기 전용 데이터 제공
- 프롬프트 ( Prompt )
- 특정 작업을 수행하기 위한 템플릿 제공
- 도구 ( Tool )
- 사용자 요청에 따라 실행 가능한 함수 제공
3. 간단 MCP 서버 실습 예제 ( 날씨 조회 도구 )
날씨를 조회하는 AI 도구를 만들어보자
서버의 경우는 *SSE 방식으로 실행할 예정이다.
*SSE : 웹서버를 실행하고 호출하는 방식
3-1. 환경 설정
pyenv + virtualenv 을 사용하여 필요 라이브러리를 설치를 한다.
해당 프로젝트에 종속되는 라이브러리라서 타 프로젝트와는 독립적이다.
# pyenv 가성머신 설치
brew install pyenv-virtualenv
# virtualevn 환경설정
eval "$(pyenv virtualenv-init -)"
# 사용하고자 python 버전 설치 ( 3.11.8 )
pyenv install 3.11.8
# 프로젝트에서 사용될 가상머신과 python 버전 설정
pyenv virtualenv 3.11.8 weather-env
# pyenv 환경 설정
echo $SHELL
cat ~/.zshrc
echo 'export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"' > ~/.zshrc
# 가상머신 실행
pyenv local weather-env
MCP 모듈을 다운받는다.
# MCP 모듈 설치
pip intall mcp
Cursor AI 를 다운받는다.
Cursor - The AI Code Editor
Built to make you extraordinarily productive, Cursor is the best way to code with AI.
www.cursor.com
3-2. 서버 만들기
실제 작동 될 서버를 생성합니다.
FastMCP 서버를 초기화하고 이름을 생성합니다.
- get_weather
- MCP를 통해 결과값을 반환하는 로직
- run_server
- MCP 서버를 실행하는 로직
# mcp_server.py
from mcp.server.fastmcp import FastMCP # MCP 모듈 삽입
mcp = FastMCP("weather")
@mcp.tool()
async def get_weather(location: str) -> str:
# 항상 맑음으로 리턴
# 실제로는 날씨 API를 호출하여 날씨 정보를 가지고 와야 함
return f"{location}은 항상 맑습니다."
def run_server(transport: str = "stdio"):
# MCP 서버를 실행합니다.
# transport: "stdio" 또는 "sse" 방식을 사용합니다.
mcp.run(transport=transport)
sse 를 사용하여 MCP 서버를 실행합니다.
# server_sse.py
from mcp_server import run_server
if __name__ == "__main__":
# MCP 서버를 실행합니다.
run_server(transport="sse")
# 해당 소스를 실행한다.
python run server_sse.py
실행 시 localhost:8000 으로 접근 URL 이 생성됩니다.
Curser AI의 MCP 설정으로 접근합니다.
Add new global MCP server 를 통해 MCP 서버를 생성합니다.
앞서 server_sse.py 로 실행 후 나왔던 접근 URL을 아래와 같이 설정합니다.
# mcp.json
{
"mcpServers": {
"weather": {
"url": "http://localhost:8000/sse"
}
}
}
새로고침 버튼을 눌러 정상적으로 *연결되었는지 확인합니다.
*연결 : 초록색 불이 들어오면 정상 연결
3-3. 실행 및 결과
우측 Chat을 통해 특정 지역의 날씨를 물어봅니다.
- mcp_server.py 에서 매서드를 통해 반환값을 "항상 맑습니다" 라고 적었기 때문에 아래와 같이 수행합니다.
- Called MCP tool 내부에 툴로 설정한 get_weather이 표시가 됩니다.
- Result 를 통해 반환값을 확인합니다.
실제 날씨를 확인하기 위해서는 날씨 API 사용이 필요합니다.
이제까지 간단한 MCP 개념과 예제를 통해 MCP에 대해 알아보았습니다.
감사합니다.
참고
'기타👨🏻💻 > AI' 카테고리의 다른 글
[AI] 이미지 웹 접근성 ( openCV - 색대비 체크 ) (0) | 2025.03.17 |
---|---|
[AI] 이미지 웹 접근성 ( YOLO 모델 - 적용법과 간단 예제 ) (0) | 2025.02.28 |
[AI] RAG 의 구성요소 2 ( Embedding ) (2) | 2024.09.04 |
[AI] 간단한 RAG 구현 ( Anaconda, Streamlit, OpenAI, Flask, Chroma, Hugging Face ) (7) | 2024.09.03 |
[AI] RAG 의 구성요소 1 ( Vector DB ) (0) | 2024.08.21 |