MCP 서버를 통해 Claude에 실시간 Polymarket 데이터 제공하기
요약
Model Context Protocol(MCP)을 사용하여 Claude에 실시간 Polymarket 데이터를 제공하는 MCP 서버 구축 방법을 소개합니다. MCP의 도구, 프롬프트, 리소스 기능을 활용해 LLM의 데이터 정확도 문제를 해결하는 예시를 다룹니다.
핵심 포인트
- MCP를 통해 LLM이 실시간 외부 데이터(Polymarket)를 직접 호출 가능
- 도구(Tools), 프롬프트(Prompts), 리소스(Resources)의 세 가지 핵심 기능 활용
- Python SDK와 uvx를 이용한 간편한 MCP 서버 설정 및 배포
- 프롬프트 계층을 통한 복잡한 워크플로우 오케스트레이션 구현
대규모 언어 모델 (Large language models)은 숫자에 대해 추론하는 데는 능숙하지만, 숫자를 정확히 아는 데는 서툽니다. Claude에게 어떤 Polymarket 지갑이 실제로 수익을 내고 있는지 물어본다면, 모델이 출시되었을 때 이미 오래된 학습 데이터(training data)를 바탕으로 구성된 자신만만한 답변을 듣게 될 것입니다.
Model Context Protocol (MCP)은 모델이 데이터를 직접 호출할 수 있게 함으로써 이 문제를 해결합니다. 이 포스트에서는 실시간 Polymarket 고래 분석 (whale analytics) 데이터를 Claude Desktop, Cursor 또는 기타 MCP 클라이언트에 제공하는 작은 MCP 서버의 작동 예시를 살펴봅니다.
이 서버는 오픈 소스이며 MIT 라이선스를 따르므로 전체 코드를 확인할 수 있습니다: github.com/orcalayer/orcalayer-mcp.
MCP가 실제로 하는 일
MCP 서버는 모델에 세 가지 종류의 기능을 노출합니다:
- 도구 (Tools): 모델이 호출할 수 있으며, 타입이 지정된 인자 (typed arguments)와 구조화된 결과 (structured results)를 가집니다.
- 프롬프트 (Prompts): 사용자가 메뉴에서 선택할 수 있으며, 여러 도구를 동시에 조율 (orchestrate)합니다.
- 리소스 (Resources): 모델이 도구 호출을 소모하지 않고 컨텍스트 (context)로서 직접 읽을 수 있습니다.
세 번째 기능은 사람들이 예상하는 것보다 더 중요합니다. 방법론 문서가 리소스로 로드되면, 모델은 숫자를 해석하기 시작하기 전에 해당 숫자들이 어떻게 정의되었는지 알 수 있습니다.
설정 (Setup)
이 서버는 Python SDK를 감싸는 stdio 래퍼 (wrapper)이므로 별도로 배포할 것이 없습니다. claude_desktop_config.json에 다음을 추가하세요:
{
"mcpServers": {
"orcalayer": {
...
Windows에서 파일은 %APPDATA%\Claude\claude_desktop_config.json에 위치하며, macOS에서는 ~/Library/Application Support/Claude/claude_desktop_config.json에 위치합니다. 편집 후 앱을 재시작하세요.
설치는 이것으로 끝입니다. uvx가 필요할 때 패키지를 가져와 실행하므로 관리해야 할 가상 환경 (virtualenv)이 없습니다.
도구 (The tools)
5개의 도구가 있으며, 그중 4개는 키 (key)가 전혀 필요하지 않습니다:
| 도구 | 기능 | 키 |
|---|---|---|
leaderboard | 손익 (P&L), 승률 (win rate) 또는 거래량 (volume)에 따라 스마트 머니 고래 순위 매기기 | 없음 |
| ... |
Premium 도구의 경우, 키를 코드에 직접 입력(hardcoding)하지 말고 환경 변수 (environment)를 통해 전달하세요:
{
"mcpServers": {
"orcalayer": {
...
프롬프트(Prompts)가 오케스트레이션(orchestration)을 수행합니다
여러분의 서버를 위해 훔쳐갈 만한 가치가 있는 부분은 바로 프롬프트 계층(prompt layer)입니다. 사용자가 도구 호출(tool calls)을 일일이 수동으로 연결하게 만드는 대신, 여러분이 실제로 원하는 워크플로우(workflow)를 인코딩한 프롬프트를 제공하세요:
| 프롬프트 | 기능 |
|---|---|
analyze_wallet | 전체 지갑 분석: 스마트 머니(smart money)인가 아니면 파머(farmer)인가? |
| ... |
만약 여러분이 이와 유사한 것을 구축하고 있다면, 저는 hedge_check를 추천할 것입니다. 동일한 시장의 양방향 포지션을 모두 보유한 지갑은 방향성 측면에서는 아무런 의미가 없는 놀라운 수익 수치를 기록할 수 있습니다. 단순한 통합 방식은 이를 알파(alpha)로 보고합니다. 이 체크 과정을 프롬프트로 인코딩한다는 것은, 사용자가 물어볼 때만 실행하는 것이 아니라 모델이 매번 이를 실행하게 함을 의미합니다.
이것이 일반적인 교훈입니다: 여러분의 도메인 지식(domain knowledge)은 사용자의 머릿속이 아니라 프롬프트에 담겨 있어야 합니다.
정의를 위한 리소스(Resources)
세 가지 리소스가 일반적인 컨텍스트(context)로 로드됩니다:
orcalayer://methodology: 스마트 머니(smart money)를 파머(farmers), 헤저(hedgers), 마켓 메이커(market makers)와 어떻게 구분하는지 다룹니다.orcalayer://glossary: 예측 시장(prediction-markets) 용어집입니다.orcalayer://api-reference: 인증(auth) 및 속도 제한(rate limits)을 포함한 REST API 레퍼런스입니다.
데이터에 명확하지 않은 정의가 있다면(분석 데이터는 항상 그렇습니다), 이를 리소스에 넣으세요. 이는 쿼리 시점에 비용이 들지 않으며, 모델이 여러분의 컬럼(column)에 대해 스스로 임의의 해석을 만들어내는 것을 방지합니다.
정직한 널(null) 값에 대한 설계 노트
Premium 스트림은 이제 모든 이벤트에 settlement_type을 MINT, MERGE, COMPLEMENTARY 또는 null로 태깅하여, 트레이더의 의도가 아닌 매칭이 어떻게 결제(settle)되었는지를 설명합니다.
null은 의도적인 것입니다. 이는 파이프라인이 결제 유형을 결정할 수 없음을 의미하며, 거래가 다른 무엇이었다는 뜻이 아닙니다. 알 수 없는 값을 기본값(default)으로 합치고 싶은 유혹이 생기겠지만, 그것은 거의 항상 잘못된 결정입니다. 여러분의 데이터를 읽는 모델은 실제 0과 누락된 값을 구분할 수 없으므로, 여러분의 추측을 사실로 취급할 것입니다. 정직한 널(null)을 반환하고 호출자(caller)가 결정하게 하세요.
직접 시도해보세요
현재 어떤 Polymarket 지갑이 가장 높은 승률을 기록하고 있으며,
그중 일부가 단순히 결제 직전의 시장(near-settled markets)을 파밍(farming)하고 있는 지갑이 있나요?
서버가 연결된 상태에서 Claude Desktop에 이 질문을 던지면, Claude는 leaderboard를 호출한 다음 방법론 리소스(methodology resource)에 따라 파머(farmer) 체크를 실행하여, 상위권 이름 중 실제 모습과 다른 지갑이 무엇인지 알려줄 것입니다.
이 서버는 github.com/orcalayer/orcalayer-mcp에서 MIT 라이선스로 제공되며, 기반이 되는 REST API는 orcalayer.com/docs/api에 문서화되어 있습니다. 데이터는 정보 제공 목적으로만 사용되며 금융 자문이 아닙니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기