Skip to content
← 블로그

Kalshi와 Polymarket 데이터를 REST와 MCP 한 흐름으로 연결하기

dino.markets

Kalshi와 Polymarket을 함께 다루는 서비스에서는 거래소마다 다른 식별자, 결과 표현, 정산 조건을 계속 확인하게 됩니다. dino.markets는 관련 시장을 매칭한 데이터를 REST API와 MCP로 제공합니다. 이 글에서는 REST 스냅샷을 가져오고 MCP 클라이언트에서 같은 데이터 면을 탐색하는 흐름을 직접 구성합니다.

이 글은 dino.markets 운영사 Nusantara Ventures LLC의 의뢰로 작성되었습니다. 가격과 스프레드는 관측 데이터로 다루고, 거래 결정을 내릴 때는 각 거래소의 수수료, 정산 조건, 이용 가능 여부를 별도로 확인해야 합니다.

필요한 것은 dino.markets API 키, curl, 그리고 선택적으로 MCP를 지원하는 개발 환경입니다. API 키를 만든 뒤 한국어 문서의 인증 안내를 확인하세요.

REST API로 시장 스냅샷 가져오기

아래 요청은 MLB 관련 시장을 signal=arb로 필터링합니다. 결과가 비어 있어도 정상입니다. 매칭이 완료되었고 그 시점의 조건에 맞는 시장만 반환됩니다.

export DINO_API_KEY="sk_live_..."

curl -sS "https://api.dino.markets/v2/markets?signal=arb&sport=baseball" \
  -H "Authorization: Bearer ${DINO_API_KEY}" | jq '{
    count,
    markets: [
      .markets[] | {
        id,
        title,
        sport,
        league,
        signal,
        spread_pts,
        potential_arb_pct,
        outcomes
      }
    ]
  }'

응답의 id는 상세 조회에 사용합니다. signal=arb는 Dino 매처가 정산 조건의 동등성을 확인했고, 이를 막는 정산 위험을 찾지 못한 조합을 뜻합니다. 거래소 규칙과 수수료는 바뀔 수 있습니다. potential_arb_pct는 거래소 수수료 전 ask-to-ask 기준의 추정치이므로, 실현 가능한 수익률로 해석하면 안 됩니다.

REST 스냅샷은 모든 플랜에서 약 2분 지연됩니다. 모니터링 화면, 분석 작업, 콘텐츠 조사에는 유용하며 주문 실행용 데이터 면은 아닙니다.

애플리케이션 코드에서도 같은 엔드포인트를 호출합니다.

const response = await fetch(
  "https://api.dino.markets/v2/markets?signal=arb&sport=baseball",
  { headers: { Authorization: `Bearer ${process.env.DINO_API_KEY}` } },
);

if (!response.ok) throw new Error(`HTTP ${response.status}`);

const { count, markets } = await response.json();
console.log({ count, markets });

개별 시장을 사용하기 전에는 반환된 idGET /v2/pairs/{market_id}를 호출하고 결과와 settlement.risks를 살펴보세요. signal=spread 데이터를 쓰는 경우에는 이 확인을 흐름에 포함하는 편이 좋습니다.

MCP에서 같은 데이터 면 사용하기

MCP를 사용하면 지원되는 클라이언트나 에이전트의 대화에서 시장 탐색과 상세 확인을 할 수 있습니다. Streamable HTTP 연결 주소는 마지막 슬래시까지 포함한 https://api.dino.markets/v2/mcp/입니다.

mcp-remote를 실행하는 클라이언트에서는 설정에 다음을 추가합니다.

{
  "mcpServers": {
    "dino-markets": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://api.dino.markets/v2/mcp/",
        "--header",
        "Authorization:Bearer ${DINO_API_KEY}"
      ],
      "env": { "DINO_API_KEY": "sk_live_..." }
    }
  }
}

설정을 저장하고 MCP 클라이언트를 다시 시작한 뒤, 먼저 아래와 같은 데이터 확인 작업을 요청할 수 있습니다.

find_markets로 MLB를 검색한 뒤 찾은 ID로 get_market을 호출해 주세요. 각 시장의 결과와 settlement.risks를 요약하고, 가격을 거래 판단으로 해석하지 마세요.

공개 MCP에는 find_markets, find_arbitrage, list_markets, list_leagues, get_market, get_spreads, report_bad_arb, watch_markets의 8개 도구가 있습니다. 활성화된 모든 플랜에서 사용할 수 있습니다. WebSocket 구독 범위는 플랜별로 다르며 Free는 samplestatus, 유료 플랜은 markets:*를 제공합니다.

구현에서 지켜둘 경계

매칭의 목적은 관련 시장을 같은 데이터 흐름에서 확인하도록 돕는 것입니다. 최종 정산 규칙은 각 거래소가 정합니다. 앱에서는 API 응답만 저장하기보다 id별 상세 정보, 조회 시각, 정산 위험을 함께 표시하면 이후 조사에 도움이 됩니다.

dino.markets는 스포츠, 날씨, 암호자산, 경제 관련 시장을 문서화합니다. 이 글은 공개 API의 sport=baseball 필터를 사용해 재현하기 쉬운 시작점에 집중했습니다.

엔드포인트, 인증, REST 필터는 한국어 문서에서 확인할 수 있습니다. MCP 클라이언트별 연결 방법은 한국어 MCP 문서를 참고하세요. MCP 서버의 공개 저장소는 dino-markets-mcp입니다.

블로그의 다른 글