AI 업계는 정말 빠르게 변하네요. 신기술 나오면 찍먹 해보기는 커녕 뉴스만 따라가기에도 바쁩니다.
Deepseek 의 충격이 얼마 지나지도 않아 MCP 의 충격이 오더니 이제는 A2A 와 같은 도구들도 덩달아 주목을 받고 있죠. 개인적으로 Deepseek 와 MCP 가 나오고나서 정말 반가웠습니다.
기존에 ollama 를 이용해서 PC 에 LLM 모델을 다운로드 받아서 테스트 해봤는데, 이게 (당연하게도) 성능이 영 시원찮았습니다. 상용 AI 서비스 사용하다 ollama 돌려보면... 그런데 MCP 가 주목받고 활성화되기 시작하니, ollama 에 MCP 를 결합하면 그래도 좀 모자란 성능을 MCP 도구들이 많이 채워줄 수 있지 않을까 생각이 들더라구요.
범용적인 목적으로는 구리지만 특정한 목적을 가진 자동화 툴을 만드는데는 유용할 수도 있겠다. 더구나 ollama 를 쓰면 비용도 안들고 순수한 private AI Agent 를 만둘 수 있으니까... 이런 생각으로 한번 예제코드를 만들어 봤습니다.
PC 에 ollama 설치하고 놀리고 계신 분은 한번 테스트 해보세요.
- odeothx 도움으로 코드와 성능이 개성되었습니다. gemini 예제도 만들어 주셨습니다.
Ollama + MCP AI Agent 설치
일단 ollama 가 설치된 상태라고 가정하겠습니다. 설치가 안되어 있다면 아래 링크에서 다운로드 받아서 설치
예제코드는 python 으로 작성되어 있고 uv 를 이용한 가상환경 설치를 지원합니다.
소스코드 다운로드
- ollama-mcp-agent : https://github.com/godstale/ollama-mcp-agent
- 소스코드 다운로드해서 압축을 풀거나 git clone
git clone https://github.com/godstale/ollama-mcp-agent cd ollama-mcp-agent
예제코드 실행에 필요한 라이브러리 설치가 필요합니다. ollama-mcp-agent 예제는 uv 패키지 관리자를 지원합니다. termial 또는 PowerShell 환경에서 아래 명령어를 실행합니다.
# Using pip pip install uv # Or using curl (Unix-like systems) curl -LsSf https://astral.sh/uv/install.sh | sh # Or using PowerShell (Windows) powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
uv 를 설치, 예제코드를 실행하기 위한 가상환경을 만들고 실행합니다. 그리고 아래 순서대로 프로젝트를 설치할 수 있습니다. (terminal 환경에서 실행)
# Create and activate virtual environment uv venv # For Unix-like systems source .venv/bin/activate # Or for Windows .venv\Scripts\activate # Install dependencies uv sync
ollama 에 LLM 모델을 다운로드해야 합니다. 이때 주의할 점이 하나가 있습니다. 반드시 tools calling 기능을 지원하는 모델을 받아야 합니다. 그렇지 않으면 MCP 설정을 추가해도 LLM 이 도구를 사용하지 않습니다.
- 2025.04 기준으로 ollama 에서는 MFDoom/deepseek-r1-tool-calling 모델이 적합해 보입니다.
- 다른 tool 기능 활성화 된 모델은 제대로 동작하지 않았습니다.
- 그래픽카드 메모리 용량에 맞춰 모델을 선택세요. (ollama 모델 페이지 참고)
- 이 포스트에서는 RTX4070 SUPER 12G 그래픽카드에 맞춰 14b (9.0GB) 모델을 사용합니다.
# Install Ollama (refer to https://ollama.ai for platform-specific installation) # Download LLM model which supports Tool calling feature ollama pull MFDoom/deepseek-r1-tool-calling:14b
Ollama + MCP AI Agent 실행
아래 명령어로 LLM 을 실행하고 "오늘 서울의 날씨"에 대해 물어보면 당연하게도 답변을 못합니다.
ollama run MFDoom/deepseek-r1-tool-calling:14b
그럼 MCP 날씨 도구를 추가해서 ollama 와 연동하면 답변을 할 수 있는지 확인해 보겠습니다.
소스코드에는 MCP 날씨 도구가 PC에서 실행될 수 있도록 python 코드로 미리 작성되어 있습니다. mcp_server/mcp_server_weather.py 파일을 보시면 됩니다.
실제 날씨를 검색하지는 않고, 정해진 답만 리턴하도록 되어 있습니다. LLM 이 정해진 답을 사용하는지를 보면 됩니다.
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
"Weather", # Name of the MCP server
instructions="You are a weather assistant that can answer questions about the weather in a given location.",
host="0.0.0.0", # Host address (0.0.0.0 allows connections from any IP)
port=8005, # Port number for the server
)
@mcp.tool()
async def get_weather(location: str) -> str:
print(f"\n[DEBUG] MCP: get_weather called: {location}\n")
return f"It's sunny in the morning, cloudy in the afternoon and snowing in the evening in {location}"
if __name__ == "__main__":
mcp.run(transport="stdio")
@mcp.tool() 어노테이션이 달린 함수를 LLM 이 도구로 인식합니다. FastMCP() 함수는 MCP server 를 생성해서 LLM 의 호출을 기다리게 합니다.
이것만으로 MCP server 가 실행되는 것은 아니고, MCP 도구 설정을 만들어서 python mcp 라이브러리에게 알려줘야 합니다. mcp_config.json 파일에 MCP 도구 설정이 작성되어 있습니다.
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["./mcp_server/mcp_server_weather.py"],
"transport": "stdio"
},
"local_file_manager": {
"command": "python",
"args": ["./mcp_server/mcp_server_file_manager.py"],
"transport": "stdio"
}
}
}
이상의 설정을 마치고 main.py 를 실행
C:\Workspace\ollama-mcp-agent> uv run main.py === Initializing MCP client... === Loaded 3 MCP tools. [Tool] get_weather [Tool] get_local_file_list [Tool] write_text_to_file === Starting Ollama Chat === Enter 'quit', 'exit', or 'bye' to exit. ======================================== User: 오늘 서울의 날씨는? AI: Processing tool: get_weather --------------------- </think> 서울의 오늘 날씨는 오전에 맑고 오후에는 흐려지며 저녁에는 눈이 내리고 있습니다. User: exit Chat ended. Goodbye! C:\Workspace\ollama-mcp-agent>
"오늘 서울의 날씨"에 대한 응답을 보면 mcp_server_weather.py 에서 '하드코딩' 한 정보를 사용함을 알 수 있습니다.
제 기준으로는 여기까지만 해도 감격스러운 일이 아닐 수 없습니다. 파이썬으로 적당히 코드 작성해서 도구를 추가하면 엉뚱한 대답을 하던 AI 를 그래도 좀 써먹을 수 있을 것 같더라고요.
그런데... 이 글을 보고 따라해 보시는 분들은 위 결과와 다른 답변을 받거나, 심하면 엉뚱한 답변을 받는 경우도 있을겁니다. 그런 경우는 아래 항목들을 확인하면서 수정하고, 다시 실행해보세요.
- 도구 호출 정보 확인
- main.py – get_streaming_callback(0 함수에서 도구 호출 정보를 더 상세히 표시하도록 로그를 추가합니다.
- 더 상세한 정보를 출력하기 위해서는 astream_graph() 함수를 확인하거나 LangSmith 를 사용하는 것이 좋습니다.
- System 프롬프트 수정
- main.py 상단에 query 를 수행할 때 사용할 system 프롬프트 - MCP_CHAT_PROMPT 가 정의되어 있습니다. 프롬프트를 더 명확하게 정의함으로써 다른 결과를 기대할 수 있습니다.
MCP_CHAT_PROMPT = """
You are a helpful AI assistant that can use tools to answer questions.
You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
When using tools, think step by step:
1. Understand the question and what information is needed.
2. Look at the available tools ({tool_names}) and their descriptions ({tools}).
3. Decide which tool, if any, is most appropriate to find the needed information.
4. Determine the correct input parameters for the chosen tool based on its description.
5. Call the tool with the determined input.
6. Analyze the tool's output (Observation).
7. If the answer is found, formulate the Final Answer. If not, decide if another tool call is needed or if you can answer based on the information gathered.
8. Only provide the Final Answer once you are certain. Do not use a tool if it's not necessary to answer the question.
"""
- MCP 도구 구현 및 설정 확인
- mcp_manager.py 파일에서 test_mcp_tool() 함수를 활성화하여 MCP 도구를 테스트 해볼 수 있습니다.
- mcp server 를 설정하는 FastMCP() 함수의 설정값도 확인합니다.
- LLM 모델 확인
- 현재 사용중인 모델이 tools calling 을 지원하는지 확인해야 합니다.
- tool 지원 모델이라 하더라도 실제 실행해보면 tool 을 호출하지 못하는 경우도 있습니다.
- LLM 모델 최신 업데이트 확인
- 예제에서 사용중인 deepseek-r1-tool-calling 모델은 tool 사용을 위해 튜닝 된 모델이며, 아직 tool 호출 버그들이 있다고 합니다. 이어질 업데이트에서 상당수가 수정될 예정이라고 하니 모델을 최신 상태로 유지하는 것이 좋습니다.
- LLM 모델 업그레이드
- 그래픽카드가 허용한다면 더 큰 모델을 사용하는 것도 성능 향상에 도움이 될 것입니다... 만 물리적, 금전적 제약이...
- 현재 사용중인 모델이 tools calling 을 지원하는지 확인해야 합니다.
오늘 날씨가 좋아서 바람 좀 쐬야겠네요. 시간되면 다른 내용도 더 작성해 보겠습니다!
참고자료
LLM 모델 확인
- GitHub: ollama-mcp-agent
- OLLAMA+MCP Agent: 비용 걱정없는 AI agent #1
- Inspired by: Teddynote-lab's mcp agents, langchain mcp adapters
https://hellollama.net/ollamamcp-agent-%eb%b9%84%ec%9a%a9-%ea%b1%b1%ec%a0%95%ec%97%86%eb%8a%94-ai-agent-2/
궁금한게 이렇게 셔팅한거랑 gpt 3만원짜리랑 개인이 사용할때 어느게 더나을까요
위 방법은 이런 저런 세팅/튜닝 해보면서 공부하고 개발에 활용하기 위해 사용한다고 보면 됩니다.
gemma3 도 잘 되지 않을까요?
로컬은 아니지만 현재 무료로 사용할 수 있는 gemini가 tooling을 지원한다고 하니, 로컬 deepseek 보다 더 좋은 성능이 나오는지 한번 테스트 해 보면 좋을것 같습니다.
좋은 글 감사합니다.
- https://github.com/mezbaul-h/june?utm_source=pytorchkr&ref=pytorchkr
- https://github.com/reatmos/Chatbot
mcp 는 물론 http request나 rdb 접속도 지원하기 때문에.. 다양하게 해볼수 있습니다. telegram이나 temas와도 연동이 되기 때문에.. UI로 메신저를 사용할수도 있고요.
연결가능한 노드에 ollama도 있던데 아직 해보진 않았습니다.
저도 막 접해서 이것저것 해본느데 좋네요. 이거 해보느라 openai api모델 구독도 시작;;