PineForge MCP 서버 튜토리얼: 무료 호스팅 엔드포인트를 명령 한 줄로 연결하거나 로컬 Docker 서버를 내 데이터로 돌리고, 어시스턴트에게 Pine 전략 백테스트를 맡긴 뒤 돌아온 리포트를 읽어 봅니다.
엔진의 최신 릴리스는 2026-11-03에 나온 v1.10.0이고, 로컬 서버
@pineforge/backtest-mcp는 v0.9.40입니다.
2026-09-30에 현재 서버 기준으로 내용을 업데이트했습니다. 대상은 mcp.pineforge.dev의 호스팅 엔드포인트와 로컬 Docker 서버
ghcr.io/pineforge-4pass/pineforge-backtest-mcp(v0.9.32)입니다.
PineForge는 백테스트 엔진을 Model Context Protocol(MCP) 서버로 제공합니다. 그래서 Claude Code, Claude Desktop, Cursor 같은 MCP 지원 클라이언트라면 어디서든 백테스트를 돌릴 수 있습니다. 서버는 두 가지입니다. 호스팅 서버는 아무것도 설치할 필요가 없고, 로컬 서버는 내 머신의 Docker에서 내 데이터로 돌아갑니다.
서버가 하는 일
https://mcp.pineforge.dev/mcp의 호스팅 서버는 도구 11개를 제공합니다. 그중 가장 자주 쓰게 될 도구는 다음과 같습니다.
| 도구 | 하는 일 | 비용 |
|---|---|---|
backtest_pine | Pine v6 전략을 트랜스파일·컴파일한 뒤 호스팅 OHLCV로 백테스트 | IP당 주간 쿼터를 패리티 검사와 공유, 무료 |
list_symbols | 지원되는 하나의 암호화폐 시장에서 OHLCV가 제공되는 심볼을 나열 | 쿼터 미적용 |
check_pine_feature | Pine 식별자가 지원되는지 확인 | 쿼터 미적용 |
check_quota | 이번 주에 남은 백테스트·패리티 검사 공통 호출 횟수 확인 | 쿼터 미적용 |
로컬 서버에는 도구가 11개 있습니다. 내 CSV로 돌리는 backtest_pine, 파라미터 스윕용 backtest_pine_grid, TradingView에서 내보낸 트레이드 목록을 채점하는 check_tradingview_parity, transpile_pine, fetch_binance_ohlcv 등입니다. 로컬 서버에는 사용량 제한이 없습니다.
프라이버시 측면은 잠깐 짚고 넘어갈 만합니다. 호스팅 서버를 쓰면 Pine 소스가 mcp.pineforge.dev로 전송되고, OHLCV는 PineForge의 데이터셋에서 가져옵니다. 호스팅 서버를 사용하는 서로 다른 호출자가 몇 명인지 집계하기 위해, 모든 도구 호출의 IP 주소(IPv6의 경우 /64 블록)를 호출이 발생한 주 및 호출 횟수와 함께 기록합니다. 이 기록은 8주 후 삭제되며, 주소가 없는 주간 합계만 남습니다. 이번 변경 이전에는 주간 한도를 차감하는 호출만 주소와 함께 기록되었습니다. 로컬 서버를 쓰면 트랜스파일과 백테스트가 컨테이너 안에서 실행됩니다. Pine 소스와 CSV는 내 머신을 벗어나지 않고, 네트워크 호출은 Binance 공개 API로만 나갑니다. 직접 요청한 다운로드, 심볼을 지정할 때 조회하는 해당 시장의 틱 크기, 봉을 직접 넘기지 않을 때 check_tradingview_parity가 가져오는 봉이 전부입니다.
호스팅 서버 연결하기(명령 한 줄)
claude mcp add --transport http pineforge https://mcp.pineforge.dev/mcp
설치도, 키도 필요 없습니다. 다른 클라이언트에서는 URL https://mcp.pineforge.dev/mcp를 Streamable HTTP 서버로 추가하면 됩니다. Claude Desktop에서는 커스텀 커넥터로 추가합니다(Customize, Connectors, Add custom connector).
또는 로컬 서버 실행하기
Docker가 필요합니다. Claude Code에 서버를 등록합니다.
claude mcp add pineforge-backtest \
-- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest
예전에 이미지를 받아 둔 적이 있다면 docker pull ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest로 업데이트하세요. Docker는 더 새로운 latest를 알아서 받아 오지 않습니다.
명령을 실행한 디렉터리가 /work에 마운트됩니다. 파일은 /work/... 경로로 가리키세요(예: /work/eth_15m.csv). 상대 경로는 내 디렉터리가 아니라 컨테이너 안에서 해석됩니다.
Claude Desktop과 Cursor
mcpServers JSON을 읽는 클라이언트에는 로컬 서버를 추가합니다. Cursor에서는 프로젝트의 .cursor/mcp.json(모든 프로젝트에 적용하려면 ~/.cursor/mcp.json)이고, Claude Desktop에서는 claude_desktop_config.json(Settings, Developer, Edit Config)입니다. /absolute/path/to/your/data는 CSV가 들어 있는 폴더 경로로 바꿔 주세요.
{
"mcpServers": {
"pineforge-backtest": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/absolute/path/to/your/data:/work",
"ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
]
}
}
}
-i는 그대로 두고 -t는 절대 추가하지 마세요. TTY가 붙으면 stdio JSON-RPC 스트림이 깨집니다.
자연어로 돌리기
서버를 연결하고 나면 평범한 자연어로 대화하면 됩니다. 로컬 서버로 주고받은 현실적인 대화 예시입니다(축약했고, 숫자는 2026-09-30에 실제로 돌린 결과입니다).
사용자: 최근 7일치 ETHUSDT 15분봉을
/work/eth_15m.csv로 받아 온 다음, 그 데이터로strategy.pine을 백테스트해서 승률과 낙폭을 알려 줘.
Claude:
fetch_binance_ohlcv를 실행한 다음backtest_pine을 실행할게요…[
fetch_binance_ohlcv가 봉 672개를 기록하고,backtest_pine은 약 2초 만에 결과를 반환]이 기간 동안 트레이드는 49건입니다. 순손익 −144.63, 승률 38.8%, 최대 낙폭 199.66, 프로핏 팩터 0.61입니다.
backtest_pine_grid로 이동평균 길이를 스윕해 볼까요?
모델은 도구 설명을 알고 있고 backtest_pine이 무엇을 반환하는지도 알기 때문에, 다음 호출까지 이어서 할 수 있습니다. “Pine 수정, TradingView로 전환, 차트 새로고침, 숫자 확인, 다시 돌아오기”를 반복하던 루프가 대화 하나로 줄어듭니다.
리포트는 이렇게 생겼습니다
backtest_pine은 pineforge-release Docker 이미지가 쓰는 것과 같은 JSON 리포트를 돌려줍니다. 위 실행의 summary 블록은 다음과 같습니다.
{
"engine": "pineforge",
"summary": {
"total_trades": 49,
"wins": 19,
"losses": 30,
"win_rate_pct": 38.7755,
"net_pnl": -144.63,
"avg_trade": -2.9516,
"best_trade": 45.39,
"worst_trade": -47.13,
"max_drawdown": -199.66,
"bars_processed": 672
},
"trades": [
/* 49 entries: side, entry and exit time and price, qty, pnl, bar indices */
],
"metrics": { /* profit factor, Sharpe, Sortino, CAGR and more */ },
"equity_curve": [ /* one point per bar */ ],
"fingerprint": { /* engine, transpiler, inputs and data behind the run */ }
}
모델은 전체 구조를 받으므로, “최악의 트레이드는 뭐였어?” 같은 질문에도 추가 호출 없이 trades에서 답할 수 있습니다. 리포트가 아주 크면 로컬 서버는 리포트 전체 대신 summary를 인라인으로 돌려줍니다.
쿼터 확인하기
호스팅 backtest_pine과 check_tradingview_parity는 IP당 주간 쿼터를 공유하며, 허용 횟수는 AI 어시스턴트 페이지에 나와 있습니다. 주간 한도는 매주 월요일 00:00 UTC에 초기화되고, 나머지 도구는 쿼터를 소모하지 않습니다. 또한 모든 무료 사용자가 함께 쓰는 월간 컴퓨팅 예산 때문에, 다음 UTC 기준 달이 시작될 때까지 무료 백테스트가 일시 중지될 수도 있습니다. check_quota를 쓰면 모델이 긴 루프를 돌리기 전에 남은 횟수를 확인할 수 있습니다. 로컬 서버에는 쿼터가 없어서 스윕에 더 적합합니다.
유용한 패턴이 하나 있습니다. 프로젝트의 CLAUDE.md(또는 그에 해당하는 파일)에 Before running more than 5 hosted backtests, call check_quota and report the remaining budget. 같은 힌트를 적어 두세요. 호스팅 백테스트를 5회 넘게 돌리기 전에 check_quota를 호출해 남은 예산을 보고하라는 뜻입니다.
서버에 일부러 넣지 않은 것
- 주문 실행 없음. 서버는 백테스트만 하며, 브로커에는 절대 연결하지 않습니다.
- 요청하지 않은 데이터 없음. 호스팅 서버는 자체 암호화폐 데이터로 백테스트하고, 로컬 서버는 내 CSV나 직접 요청한 Binance 다운로드를 씁니다.
- 호출 간 상태 없음. 모든
backtest_pine호출은 각각 독립적입니다.
모두 의도한 범위 제한입니다. 덕분에 서버가 하는 일을 점검하기 쉽고, 실패하는 방식도 단순하게 유지됩니다.
여기서부터 재미있어집니다
손으로 하기엔 번거로운 패턴 몇 가지입니다.
- “스톱을 좁혀서 다시 돌려 줘.” 모델이 Pine 소스의 숫자 하나를 고치고
backtest_pine을 다시 호출해 결과를 비교합니다. - “최근 7일 말고 최근 30일로 해 봐.” 모델이 다른 기간의 데이터를 가져와 다시 실행합니다.
- “여기서 파라미터 민감도는 어때?” 로컬 서버에서는
backtest_pine_grid가 소스를 한 번만 트랜스파일한 뒤, 지정한 입력값의 모든 조합을 돌려 보고 결과에 순위를 매깁니다. - “내가 가진 다른 전략이랑 비교해 줘.”
backtest_pine을 두 번 호출해 결과를 나란히 보여 줍니다.
어느 것도 새 인프라가 필요하지 않습니다. 모두 모델과 도구, 그리고 여러분이 쓰는 문장에서 나옵니다.
직접 해 보기
- 전체 설정 페이지(호스팅·로컬, Claude Code, Claude Desktop, Cursor)
- GitHub의 로컬 서버(MIT 라이선스)
- 패리티를 측정하는 방법