시세·지표·레벨·포지셔닝, 김치 프리미엄, 미국 주식, 옵션, 백테스트 — 애널리스트가 쓰는 도구 98개를 그대로 API와 MCP로 제공합니다. 무료 요금제에도 월 2,000 크레딧이 포함되어, 하루 저녁이면 무언가를 만들어 볼 수 있습니다.
키 없이도 공개 데이터를 호출할 수 있습니다. 키를 넣으면 실제 도구를 그대로 씁니다.
Claude Code, Claude Desktop 등 MCP를 지원하는 엔진에 한 줄로 붙습니다.
claude mcp add daepak -e DAEPAK_API_KEY=dpk_live_… -- uvx daepak-mcp
서버는 스스로 아무것도 기술하지 않습니다. 카탈로그를 GET /v1/tools에서
가져오므로, 키에 허용된 것만 정확히 보여 주고 제품과 어긋나지 않습니다.
400으로 명시적으로 거절됩니다 —
조용히 빈 결과를 주는 편이 더 위험하기 때문입니다.
# 카탈로그: 스키마·권한·가격 curl -H "Authorization: Bearer dpk_live_…" https://daepak.com/v1/tools # 도구 호출 curl -X POST https://daepak.com/v1/tools/get_price \ -H "Authorization: Bearer dpk_live_…" \ -H "Content-Type: application/json" \ -d '{"coin": "BTC"}'
{
"tool": "get_price",
"credits_used": 1,
"credits_left": 1999,
"took_ms": 104,
"data": { "coin": "BTC", "price": 78017.26, "change_24h": -1.2 }
}
도구 98개 전부가 인자 스키마·필요 권한·크레딧 가격과 함께 기술되어 있습니다. 명세는 애널리스트가 받는 것과 같은 스키마에서 생성되므로 제품과 어긋나지 않습니다.
OpenAPI 3.1 — Swagger UI, Redoc, Postman, Insomnia, 코드 생성기 어디서든 그대로 읽힙니다. 키 없이도 열람할 수 있습니다.
| 메서드 | 경로 | 내용 |
|---|---|---|
| GET | /v1/tools | 카탈로그 — 스키마·권한·가격. 키 권한으로 필터링됨 |
| POST | /v1/tools/{name} | 도구 호출. 본문은 인자 객체 |
| GET | /v1/usage | 이번 달 사용량, 도구별 내역 |
| POST | /v1/agent/messages | 애널리스트의 완성된 답변 (agent:chat) |
| POST | /v1/agent/stream | 같은 답변을 SSE 스트림으로. 끊겨도 백그라운드에서 계속 |
| GET | /v1/agent/resume/{id} | 진행 중인 생성에 다시 연결 — 놓친 이벤트부터 이어서 |
| POST | /v1/agent/cancel/{id} | 생성 중단. 그냥 끊으면 작업은 끝까지 토큰을 씁니다 |
| GET | /v1/agent/conversations | 이 키의 대화 목록 |
| GET | /v1/agent/conversations/{id} | 대화 하나의 메시지 |
| GET | /v1/openapi.json | 명세. 키 불필요 |
모든 도구 호출은 같은 형태로 감싸여 돌아옵니다 — 결과와 함께 얼마가 들었는지가 같이 옵니다. 사후 정산이 아니라 그 자리에서 보이도록.
{
"tool": "get_price",
"credits_used": 1, // 실패한 호출은 0 — 안 받습니다
"credits_left": 1999,
"took_ms": 104,
"data": { … } // 도구 자신의 결과
}
/v1/agent/messages는 채팅과 같은 경로를 씁니다.
응답에 conversation_id가 돌아오므로, 다음 요청에 그대로 실어
보내면 맥락이 이어집니다. images에 data-URL을 담으면 차트
스크린샷도 읽습니다.
curl -X POST https://daepak.com/v1/agent/messages \
-H "Authorization: Bearer dpk_live_…" -H "Content-Type: application/json" \
-d '{"message": "BTC 지금 어때?", "lang": "ko"}'
# 응답의 conversation_id를 다음 요청에 넣으면 대화가 이어집니다
{ "answer": "…", "conversation_id": 1234, "lang": "ko", "took_ms": 8120 }
make_chart가 그린 이미지는 응답의 url로
옵니다 — 같은 키로 그대로 받을 수 있습니다.
conversation_id를
넣으면 404입니다 — 키로 남의 기록을 읽을 수는 없습니다.
답변은 수십 초가 걸립니다. /v1/agent/stream은 채팅과 똑같이
SSE로 흘려 보냅니다 — status, tool,
delta(텍스트 조각), suggest(이어서 물을
질문), done.
curl -N -X POST https://daepak.com/v1/agent/stream \
-H "Authorization: Bearer dpk_live_…" -H "Content-Type: application/json" \
-d '{"message": "BTC 지금 어때?", "mode": "mentor"}'
conversation가 가장 먼저 옵니다 — 여기에 담긴 id를
보관하세요. 끊겼을 때 돌아갈 곳입니다.suggest는 done 다음에
옵니다. done에서 읽기를 멈추면 영영 보지 못합니다 —
순서는 일부러 그렇게 두었습니다. 스피너는 제안을 계산하기 전에 멈춰야 하니까요.
mode: "mentor"를 주면 결론만이 아니라 왜 그렇게
읽었는지까지 설명합니다. 모드는 대화가 만들어질 때 정해집니다.
| 요금제 | 월 크레딧 | 키 | 분당 요청 |
|---|---|---|---|
| Free | 2,000 | 1 | 10 |
| Lite | 10,000 | 2 | 30 |
| Pro | 60,000 | 5 | 60 |
| Premium | 200,000 | 10 | 120 |
⚠️ 분당 한도가 월 한도보다 중요합니다: 월 한도는 예산을, 분당 한도는 서비스를 지킵니다. 외부의 루프 하나가 수집을 멈추게 해서는 안 되니까요.
오류 메시지의 기본값은 영어입니다 — /v1은 어느 나라 개발자든 읽습니다.
X-Lang: ko 또는 ru를 보내면 그 언어로 답합니다.
| 스코프 | 도구 | 내용 |
|---|---|---|
| read:market | 78 | 시세·캔들·지표·레벨·스코어·내러티브·파생·호가·청산·옵션·미국 주식·한국 시장·백테스트 |
| read:personal | 9 | 내 포지션·포트폴리오·매매일지·촉매·메모리·백그라운드 작업 |
| write:personal | 11 | 같은 기록에 쓰기 |
| agent:chat | — | POST /v1/agent/messages — 애널리스트의 완성된 답변 |
일지를 읽을 권한이 쓸 권한을 주지는 않습니다. 별도의 스코프입니다.
모든 도구는 카탈로그에 가격을 함께 실어 보냅니다. 실행 전에 예산을 계산할 수 있다는 뜻입니다. 가격은 추측이 아니라 운영 환경에서 실측했습니다.
| 구분 | 예 | 크레딧 |
|---|---|---|
| 자체 DB | 시세, 지표, 레벨, 캔들, 내러티브 | 1 |
| 외부 호출 | 주식, 토큰, 옵션, 온체인 | 5 |
| 임베딩·샌드박스 | 뉴스 검색, 코드 실행 | 20 |
402와 함께 두 가지 길을 알려 드립니다:
상위 요금제로 가거나, 다음 달 갱신을 기다리기. 초과 청구는 없습니다 —
아무도 예상하지 못한 청구서를 보내느니 거절하는 편이 낫다고 보기 때문입니다.
도구 목록은 엔진이 알아서 봅니다. 스킬이 담는 것은 스키마로는 보이지 않는 것 — 어떤 순서로 묻고, 숫자를 어떻게 읽어야 속지 않는지입니다.
현재가 → 히스토리 → 객관적 레벨 → 포지셔닝 → 시스템 의견 → 리스크 사이징. 순서가 중요합니다. 거꾸로 가면 이미 정한 크기에 사실을 끼워 맞추게 됩니다.
⚠️ 0이 아니라 배경과 비교하세요. "방향 68% 적중"은 같은 시점의 무작위 진입이 얼마를 주는지 모르면 아무 의미가 없습니다. 그리고 승률은 돈이 아닙니다: 자체 데이터에서 68% 적중이 profit factor 1.04였습니다.
김치 프리미엄에는 두 개의 다리가 있습니다 — 자산 할인과 원화 할인. 합쳐서 읽으면 해석이 틀립니다. 그리고 설명은 하되 예측하지는 않습니다: 하루 이내 구간에서 관계를 찾지 못했습니다(646개 에피소드).
| 코드 | 뜻 |
|---|---|
| 401 | 키가 없거나, 폐기되었거나, 형식이 틀립니다 |
403 scope_required | 키에 해당 권한이 없습니다 — 응답이 어떤 권한인지 알려 줍니다 |
400 user_id_not_accepted | 본문에 user_id가 있었습니다. 계정은 키에서 옵니다 |
| 429 | 분당 한도 초과. 분당 한도는 서비스를, 월 한도는 예산을 지킵니다 |
402 over_limit | 이번 달 크레딧 소진 — 상위 요금제 또는 다음 달 |