LLM에게 수학 문제를 풀라고 하지 마세요: MCP를 통해 Claude/Cursor에 결정론적 구성 로직 제공하기
요약
LLM의 결정론적 산술 능력 한계를 극복하기 위해 MCP(Model Context Protocol)를 활용하여 정확한 계산 로직을 제공하는 방법을 설명합니다. 페인트 소요량 계산 사례를 통해 추론 중심의 프롬프팅에서 실행 중심의 도구 호출 방식으로 전환하는 엔지니어링 접근법을 제시합니다.
핵심 포인트
- LLM은 복잡한 산술 및 기하학적 계산에서 환각을 일으킬 수 있음
- MCP를 통해 Claude나 Cursor에 결정론적 로직을 도구로 제공 가능
- 단순 텍스트 생성이 아닌 코드 실행 기반의 정밀한 에이전트 구축 필요
- 표면 질감, 폐기 완충 등 물리적 변수를 반영한 도구 설계의 중요성
저는 제 테스트 워크플로우에서 이런 일이 수십 번 발생하는 것을 목격했습니다. LLM에게 벽의 복잡한 치수—벽의 크기, 창문 두 개의 면적, 표면 거칠기, 필요한 도장 횟수 등—를 제공하고 페인트 부피를 계산해 달라고 요청합니다. 모델은 처음에는 잘 해냅니다. 변수들을 정확하게 식별하죠. 하지만 창문 면적을 빼는 계산과 질감 승수 (texture multiplier)를 적용하는 과정 사이 어딘가에서, 소수점을 환각 (hallucinate)하거나 뺄셈 중 하나를 놓쳐버립니다.
LLM은 언어학적 추론과 고차원적인 아키텍처 패턴을 다루는 데는 놀라운 능력을 갖추고 있습니다. 하지만 공간 기하학 (spatial geometry)이 포함된 결정론적 산술 (deterministic arithmetic)에는 근본적으로 신뢰할 수 없습니다. 만약 건설 견적과 같은 실제 물류를 처리하는 에이전트 (agent)를 구축하고 있다면, 뺄셈을 수행하기 위해 모델의 내부 가중치 (internal weights)에 의존해서는 안 됩니다. 당신에게는 도구가 필요합니다.
이것이 제가 Vinkius에서 단순히 API 래퍼 (wrapper)가 아닌 정밀 도구에 초점을 맞추어 Model Context Protocol (MCP) 서버를 구축한 이유입니다. paint-coverage-calculator는 텍스트 생성 실험이 아닙니다. 이는 Claude 또는 Cursor가 숫자를 추측하는 대신 코드를 실행할 수 있도록 MCP 서버로 노출된 결정론적 로직 (deterministic logic)의 구현체입니다.
추론에서 실행으로의 전환
견적을 위한 표준 프롬프팅 (prompting)의 문제는 '숨겨진 변수'입니다. 실제 리모델링 프로젝트에서는 단순히 직사각형을 칠하는 것이 아닙니다. 건축적 공제 항목(문과 창문) 및 표면 흡수율(매끄러운 표면 vs 질감이 있는 표면)을 다뤄야 합니다. 만약 에이전트가 이러한 뺄셈을 처리하는 도구를 명시적으로 호출하지 않는다면, 자재를 과다 주문할 가능성이 높습니다.
MCP를 통해 paint-coverage-calculator를 사용할 때, 워크플로우는 '이것을 계산해 줘'에서 '이 특정 계산 단계들을 실행해 줘'로 전환됩니다. 서버는 기하학적 문제의 서로 다른 부분을 처리하도록 설계된 세 가지 별도의 도구를 노출합니다:
- calculate_wall_paint: 이는 수직 표면을 위해 특별히 설계되었습니다. 부피 계산이 이루어지기 전, 전체 표면적에서 개구부(예: 2m x 0.8m 문)를 차감하는 로직을 처리합니다.
- calculate_ceiling_paint: 천장 영역은 다른 처리 방식이 필요하며, 종종 다른 페인트 화학 성분이나 도포 방법이 요구됩니다.
- summarize_tota_requirements: 이는 프로젝트 실패를 방지하기 위한 가장 중요한 도구입니다. 모든 개별 벽면 및 천장 계산 값을 하나의 주문 수량으로 집계하며, 더 중요한 점은 하드코딩된 10%의 폐기 완충(waste buffer)을 적용한다는 것입니다.
오차 범위의 엔지니어링 (The Engineering of Error Margins)
소프트웨어 엔지니어링에서는 에러 핸들링 (error handling)에 대해 이야기합니다. AI를 통한 건설 견적에서 '에러 핸들링'은 인간의 실수와 재료 손실(엎지름, 롤러 흡수 등)이라는 물리적 현실을 고려하는 것을 의미합니다.
문서만 훑어본다면 이 도구가 표면 질감 승수 (surface texture multipliers)에 얼마나 많은 비중을 두는지 알 수 없을 것입니다. 매끄러운 벽과 거친 회반죽 벽은 면적은 같을 수 있지만, 다공성 (porosity) 때문에 소모율은 크게 다릅니다. calculate_wall_paint 도구는 입력값이 '매끄러움(smooth)', '질감 있음(textured)', 또는 '거친 회반죽(raw plaster)' 중 무엇인지에 따라 특정 승수를 적용합니다.
이 MCP 서버를 사용하는 에이전트 (agent)를 사용할 때, 당신은 단순히 숫자를 요구하는 것이 아닙니다. 구조화된 파라미터 (parameters)를 통해 재료 흡수율을 고려하도록 에이전트에게 지시하는 것입니다. 다음과 같은 프롬프트를 제공할 수 있습니다: "길이 5m, 높이 3m의 벽이 있고, 문 하나(2m x 0.8m)와 창문 하나(1m x 1m)가 있습니다. 매끄러운 질감과 라텍스 무광 페인트(latex flat paint)를 사용하여 2회 도장해 주세요."
에이전트는 수학을 '생각'하지 않습니다. 대신 당신의 자연어를 도구 파라미터에 매핑하고, calculate_wall_paint를 호출하여 0.34 리터와 같은 정밀한 결과를 받습니다. 모델이 소수점 오류로 빠질 여지는 없습니다.
에이전트 워크플로: 도구의 체인 (The Agentic Workflow: A Chain of Tools)
여기서 진정한 힘은 단 한 번의 호출에 있는 것이 아니라, 그 체인(chain)에 있습니다. 이 MCP를 사용하는 고급 에이전트는 방 치수(room dimensions)가 포함된 지저분하고 비구조화된 목록을 가져와, 이러한 도구들을 루프(loop)로 돌림으로써 실행 가능한 조달 목록(procurement list)으로 변환할 수 있습니다.
에이전트가 리노베이션 개요(renovation brief)를 스캔한다고 상상해 보세요. 에이전트는 세 개의 벽과 하나의 천장을 식별합니다. 단순한 LLM이라면 그 모든 계산을 자신의 컨텍스트 윈도우(context window) 내에서 처리하려고 시도할 것입니다. 하지만 효율적인 에이전트는 다음과 같이 동작합니다:
- 벽 A에 대해
calculate_wall_paint를 호출합니다. - 벽 B에 대해
calculate_wall_paint를 호출합니다. - 벽 C에 대해
calculate_wall_paint를 호출합니다. - 천장 면적에 대해
calculate_ceiling_paint를 호출합니다. - 마지막으로, 모든 것을 통합하고 최종 주문량에 10%의 안전 완충(safety buffer)을 주입하기 위해
summarize_total_requirements를 호출합니다.
그 결과, 실제 현장 적용에 필요한 '안전망(safety net)'이 포함된 단일 통합 수량이 산출됩니다. 이는 현장 관리에서 가장 흔히 발생하는 악몽, 즉 폐기량(waste)을 고려하지 않아 마지막 도장 작업 도중에 자재가 떨어지는 상황을 방지합니다.
프로덕션급(Production Grade) vs. 취미용(Hobbyist) MCP
많은 개발자가 훌륭한 오픈 소스 MCP 서버를 구축하는 것을 보았지만, 이를 프로덕션 환경이나 고객의 데이터와 함께 사용하려고 하면 종종 무너지는 것을 보았습니다. 이들은 인증(authentication) 문제로 어려움을 겪고, 연결이 끊임없이 끊기며, 도구가 무엇을 하고 있는지에 대한 거버넌스(governance)가 없습니다.
Vinkius는 이러한 격차를 메우기 위해 구축되었습니다. 제가 호스팅하는 모든 서버—paint-coverage-calculator(https://vinkius.com/mcp/paint-coverage-calculator)를 포함하여—는 엄격한 실행 정책이 적용된 격리된 V8 샌드박스(sandbox) 내에서 실행됩니다. 만약 에이전트에게 물리적 조달이나 비용에 영향을 미칠 수 있는 도구에 대한 접근 권한을 부여한다면, 보안과 신뢰성은 선택 사항이 아닙니다.
새로운 도구가 추가될 때마다 OAuth 콜백을 설정하거나 로컬 환경 변수 (environment variables)를 관리할 필요가 없습니다. 연결 토큰 (connection token)을 가져와 Claude 또는 Cursor에 붙여넣기만 하면 도구가 즉시 활성화됩니다. 이는 인프라 구축에 사흘을 허비하지 않고 에이전트 (agents)에 즉각적으로 기능을 추가하고 싶은 개발자들을 위해 설계되었습니다.
만약 건설 수학 (construction math), IoT 센서, 또는 물류 데이터베이스 (logistics databases)를 통해 물리적 세계와 상호작용해야 하는 에이전트를 구축하고 있다면, 에이전트에게 계산하는 법을 가르치는 것을 멈추고 실행할 수 있는 도구를 제공하기 시작하십시오.
MCP는 AI 에이전트 (AI Agents)의 음악입니다. 저희가 카탈로그를 만들었습니다. Vinkius MCP Catalog를 확인해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기