@senspond
>
Cursor AI에 Python MCP(Model Context Protocol) 연동하면서 정리해 본 글 입니다.
정말 오랜만에 이 블로그에 글을 쓰는것 같다.
요즘 MCP가 핫하다고 하는데, 필자가 쓰고 있는 Cursor에는 MCP 라는 메뉴를 아무리 찾아봐도 찾을 수가 없었다.
오래된 구 버전을 사용하고 있었기 때문이었다.
MCP (Model Context Protocol)는 LLM 기반 시스템이 외부 도구 또는 환경과 일관되게 상호작용하도록 설계된 통신 규약이다.
기존에는 개발자들이 LLM에게 어떤 컨텍스트(Context)를 제공하려고, LangChain이나 그외 다른 오픈소스들을 이용해 자신만의 복잡한 방법들을 사용했다. 그러한 방법들은 일관되고 통일된 규격이 없이, 특정 플랫폼에서만 사용이 가능하다는 한계를 가지고 있었다.
그런데, LLM과 Tool 간의 연결을 할 수 있는 일종의 규약이 만들어진 것이다.
이제 MCP를 사용해 연결하기만 하면, 플랫폼이 달라지더라도 문제가 없다.
어떻게 보니 이게 진짜 혁명같기도? 핫하지 않을 수가 없다.
조금 뒤늦은 감이 있지만, 필자도 Cursor AI에 MCP를 연동해보며 정리를 해봤다.
먼저, Cursor 최신버전 설치가 필요하다.
최신버전으로 설치하고 나니, 아래처럼 MCP 탭이 생겼다.
NodeJs 기반 버전도 있고, Python 기반 버전도 있고, 클라우드 서비스를 이용하는 방법도 이싿.
여기서는 python기반으로 사용해본다.
uv는 pip를 대체하고 있는 빠르고 현대적인 Python 실행/패키지 관리 도구다.
Rust로 개발되어 있고, 기존 pip 대비 압도적으로 빠른 속도를 자랑한다고 한다.
그리고 uv
는 외부에서 실행할 때도, 별도로 source .venv/bin/activate
같은 가상환경 활성화 명령을 쓸 필요가 없다.
요즘 많은 개발자들이 conda 를 버리고, poetry나 uv로 갈아타고 있는것 같다.
curl -Ls https://astral.sh/uv/install.sh | sh
brew install uv
적당한 프로젝트 디렉토리 안으로 가서, 아래 커맨드를 수행한다.
uv init
uv venv
source .venv/bin/activate
uv add "mcp[cli]"
mail_tools.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Demo")
@mcp.tool()
async def draft_email(to: str, subject: str, purpose: str) -> str:
"""
특정 목적에 맞는 이메일 초안을 작성합니다.
Args:
to: 수신자 이름
subject: 이메일 제목
purpose: 이메일 목적 설명 (예: 회의 일정 조율)
Returns:
이메일 본문 초안
"""
return (
f"제목: {subject}\n\n"
f"{to}님께,\n\n"
f"{purpose}에 대해 연락드립니다. 편하신 시간을 알려주시면 감사하겠습니다.\n\n"
"감사합니다."
)
테스트 삼아서 한번 작성해봤다.
server.py
mcp.run(transport="stdio")
transport 타입을 stdio / sse 방식 등에서 선택할 수 있다.
stdio 방식은 별도의 Port를 열지않고, 호스트 프로그램이 subprocess로 직접 실행하면서 stdin/stdout으로 통신한다.
sse 방식은 MCP Server 형태로 구동하고 HTTP Port를 열여서, 클라이언트 요청에 대해 Event Stream을 전달하는 구조를 가진다. 로컬에서 server.py를 실행해줘야 한다.
{
"mcpServers": {
"Demo": {
"command": "uv",
"args": [
"--directory",
"/home/sensdev/workspace/AI-Studio/mcp/python-mcp",
"run",
"server.py"
]
}
}
}
{
"mcpServers": {
"Demo": {
"url" : "http://localhost:8000/sse"
}
}
}
LLM과 대화할 때 자동으로 사용할 수 있는 MCP 도구가 있으면 그것을 사용해서 응답을 해주는데,
실제로 어떻게 응용 할지는 이것저것 많이 해봐야 할 것 같다.
안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.
현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다
@senspond
>