# 에이전트를 위한 Stablecoin scanner ACHIVX

스캐너가 소프트웨어에 여는 모든 접근 경로 — MCP, A2A, REST, Markdown 페이지 — 와 모든 응답 뒤에 있는 정직성 계약, 그리고 여덟 가지 스킬이 각각 무엇을 반환하는지. 스캐너 자체의 표현으로, 직접 호출해 확인했습니다.

*23페이지 · 4개 그룹 · 답변 먼저*

네 개 그룹의 23페이지로, 접근 경로마다 한 페이지, 스킬마다 한 페이지입니다. 모든 페이지는 첫 문단에서 답을 제시하고, 이어서 스캐너 자체의 표현으로 작동 방식을 설명한 뒤, 열어 볼 실시간 응답과 더 깊이 다루는 가이드 및 레슨을 안내합니다. 2026-10-13에 읽고 호출한 agents.md, openapi.json, 에이전트 카드, MCP 서버 카드, 세 개의 SKILL.md 절차, 카탈로그, /v1/methodology를 바탕으로 작성했습니다.

## 접근 경로

어느 인터페이스를 호출할지 — MCP, A2A, REST, 아니면 Markdown 페이지 — 그리고 에이전트가 하나의 URL에서 그 모두를 어떻게 찾는지.

- [에이전트는 어떤 접근 경로를 써야 합니까 — MCP, A2A, REST, 아니면 Markdown 페이지?](https://achivx.kr/academy/for-agents/which-door-for-an-agent/) — 런타임에서 가장 쉬운 것을 고르십시오: 여덟 가지 기능은 MCP와 A2A에서 같고, REST는 그 상위 집합입니다. 이미 MCP를 쓰는 클라이언트는 한 줄로 서버를 추가하고, JSON-RPC 클라이언트는 /a2a에 POST하며, 스크립트는 /v1을 읽습니다. 페이지도 API입니다: 허브, 대시보드, /stablecoin, /explorers, /transactions, /freezes 색인, 피드, 동결 페이지, 모든 /{network}/stablecoin/{symbol} 페이지는 Markdown 쌍둥이를 제공하며, 주소, 거래, 블록 페이지는 HTML 전용입니다. /llms.txt에서 시작해 매뉴얼로 가십시오. 매뉴얼과 OpenAPI 명세가 모두 반복하는 두 규칙: 모든 호출에 chain을 명시적으로 전달하고, 응답으로 분기하기 전에 정직성 계약을 읽으십시오.
- [Stablecoin scanner ACHIVX MCP 서버는 어떻게 연결합니까?](https://achivx.kr/academy/for-agents/how-to-connect-the-mcp-server/) — 한 줄이면 됩니다: claude mcp add stablescan --transport http https://stablescan.achivx.com/mcp. 서버는 스트리밍 가능한 HTTP를 사용하고, 프로토콜 버전 2024-11-05부터 2025-11-25까지를 받으며, 키가 필요 없고, 스킬 이름을 밑줄로 바꾼 여덟 개의 도구를 나열합니다. 클라이언트 없이 하려면 initialize를 POST하고, 반환된 Mcp-Session-Id 헤더를 보관해 이후 모든 호출에 보내십시오 — 이 헤더가 없는 호출은 세션 초기화 중에 한 것으로 간주되어 거부됩니다.
- [에이전트 카드는 무엇을 선언하며, A2A로 스킬을 어떻게 호출합니까?](https://achivx.kr/academy/for-agents/what-the-agent-card-declares/) — /.well-known/agent-card.json의 카드(버전 1.4.0, A2A 프로토콜 1.0.0)는 입력 스키마를 갖춘 여덟 가지 스킬, JSON-RPC 엔드포인트 /a2a, 인증 방식 none, CAIP-2 id를 가진 일곱 개 네트워크, 분당 1,200 요청의 요청 한도, MCP 안내를 선언합니다. 스킬은 A2A 코어 방식 — 데이터 파트를 담은 SendMessage — 으로 호출하거나, 버전 헤더 없이 자체 JSON-RPC 메서드 {"jsonrpc": "2.0", "id": 1, "method": "get-address-risk", "params": {…}}로 호출합니다.
- [세 가지 에이전트 스킬은 무엇이며, 어떻게 설치합니까?](https://achivx.kr/academy/for-agents/what-are-the-agent-skills/) — 세 개의 SKILL.md 절차 — stablescan-screening, stablescan-settlement-data, stablescan-graph-walk로, 코딩 에이전트용 Agent Skills이며 에이전트 카드가 A2A 메서드로 선언하는 여덟 가지 스킬이 아닙니다 — 는 /.well-known/agent-skills/index.json(agentskills.io discovery 0.2.0)에 각각 sha256 다이제스트와 함께 나열되어 있고, npx skills add https://stablescan.achivx.com으로 설치합니다. 각각은 절차이고, 매뉴얼은 참고 문서이며, 각 스킬은 매뉴얼을 다시 가리킵니다.
- [에이전트는 이 호스트가 제공하는 모든 것을 어떻게 찾습니까?](https://achivx.kr/academy/for-agents/how-an-agent-discovers-the-host/) — 네 개의 문서가 호스트를 색인합니다: /.well-known/ai-catalog.json의 AI 카탈로그(에이전트 산출물마다 한 항목: MCP 서버 카드, REST API의 OpenAPI 명세, A2A 에이전트 카드 — 각각 대표 질의 포함), /.well-known/api-catalog의 RFC 9727 API 카탈로그(REST, A2A, MCP와 각각의 문서 및 헬스 체크. REST 항목에는 방법론으로 가는 service-meta 링크가 추가됨), 한 페이지 지도인 /llms.txt, 그리고 랜딩 페이지, 스테이블코인 색인, 허브, 모든 네트워크의 스테이블코인 페이지를 하나의 Markdown 문서로 담은 /llms-full.txt입니다. 앱의 모든 HTML 페이지는 Link 헤더와 head에서 카탈로그를 알립니다.
- [페이지가 곧 API입니다: 페이지를 Markdown으로 어떻게 읽습니까?](https://achivx.kr/academy/for-agents/pages-are-an-api/) — 허브, 랜딩 페이지, 스테이블코인·익스플로러·거래·동결 색인, 모든 네트워크 페이지, 모든 네트워크별 스테이블코인 페이지는 Accept: text/markdown에 같은 문서의 Markdown 변환본으로 답하며, .md 쌍둥이 URL에서도 제공됩니다. 프런트매터에는 제목, 설명, 정식 URL이 있고 응답에는 ETag가 붙습니다. 주소, 거래, 블록 페이지는 HTML 전용입니다 — 그곳의 200은 Markdown이라는 증거가 아닙니다.

## REST API

/v1이 어떻게 구성되어 있는지, 페이지 나누기와 캐시는 어떻게 하는지, 한도와 거부는 어떤 모습인지, 원시 행은 얼마나 과거까지 닿는지.

- [REST API는 어떻게 구성되어 있습니까?](https://achivx.kr/academy/for-agents/how-the-rest-api-is-organised/) — /openapi.json(OpenAPI 3.1, API 1.4.0)은 하나의 서버 아래 여덟 개 태그로 35개 경로를 설명합니다: addresses(9), freezes(6), registry(7), stats(5), feed(3), attestation(1), watchlists(경로 2개, 작업 3개), liveness(2). watchlists를 제외한 모든 것은 공개되어 있고 읽기 전용이며 인증이 필요 없습니다. 오류는 하나의 봉투를 공유합니다 — HTTP 상태가 아니라 error.code로 분기하십시오 — 그리고 chain을 받는 모든 호출에는 chain을 전달해야 합니다(/v1/verify는 tx만 받습니다).
- [페이지 나누기와 캐시는 어떻게 합니까: 커서, ETag, If-None-Match?](https://achivx.kr/academy/for-agents/how-to-page-and-cache/) — 목록 피드는 next_cursor로 페이지를 나눕니다: 같은 쿼리를 cursor=와 함께 반복하고, 커서가 없는 페이지에서 멈추십시오. GET 응답에는 ETag가 붙습니다 — 비용이 적은 304를 받으려면 If-None-Match를 보내십시오(2026-10-13 /v1/sanctions에서 확인) — 단, §4가 no-store로 표시한 응답은 예외입니다: 일부를 잃은 응답 — 다시 요청하십시오 — 과, 호출마다 계산되는 솔라나 판정, 그리고 결코 캐시되지 않는 몇 가지 조회(/v1/stats/slo, 오류 응답)로, 이 경우 no-store는 재시도에 대해 아무것도 말하지 않습니다 — 503 timeout은 여전히 Retry-After를 담고 재시도를 요청합니다. Cache-Control을 정보로 읽으십시오: 판정에서 60 대신 max-age=10이면 노출 탐색이 중단되었다는 뜻입니다.
- [한도는 무엇이며, 거부는 어떤 모습입니까?](https://achivx.kr/academy/for-agents/what-are-the-limits-and-refusals/) — 분당 1,200 요청의 토큰 버킷 요청 한도 하나(에이전트 카드의 rateLimits. 스킬은 같은 것을 초당 20, 버스트 40으로 표현합니다). 마감 시간을 넘긴 조회는 REST에서 error.code: timeout과 Retry-After: 5가 붙은 503, A2A에서 data.retryable이 붙은 -32050, MCP에서 timeout을 지정하는 도구 오류로 답합니다. MCP의 무거운 도구는 busy로 답할 수도 있습니다. 형식이 잘못된 입력은 코드와 메시지 안의 수정 방법이 붙은 400입니다. 모든 응답에는 X-Request-Id가 붙습니다.
- [응답은 어떤 것일 수 있습니까? REST, A2A, MCP의 모든 상태와 코드](https://achivx.kr/academy/for-agents/every-answer-code-on-every-door/) — 세 가지 봉투. REST: HTTP 상태와 JSON 오류로, 그 code는 OpenAPI 명세가 열거하는 35개 값 중 하나이며 메시지에 수정 방법이 담깁니다 — 상태가 아니라 코드로 분기하십시오. A2A: 응답한 모든 요청은 JSON-RPC result 또는 error를 담은 HTTP 200이며, 코드는 모두 열두 개입니다 — 알림의 204, 요청 한도의 429, 그리고 GET만이 JSON-RPC 밖에 있습니다. id 없는 요청은 알림이며 아무것도 실행하지 않고 204로 답합니다. MCP: 전송 계층의 거부에는 일반 텍스트 HTTP 상태, 세션·알 수 없는 메서드·알 수 없는 도구에만 JSON-RPC 오류. 입력과 조회에 관한 모든 것은 무엇을 할지 밝히는 텍스트가 담긴 isError: true 도구 결과로 돌아옵니다. 아래의 모든 코드는 OpenAPI 명세, 매뉴얼, 2026-10-13에 조회한 응답에서 메시지와 함께 가져왔습니다.
- [기계가 조회할 때 원시 행은 얼마나 과거까지 닿습니까?](https://achivx.kr/academy/for-agents/how-far-back-raw-rows-reach/) — 콜드 내보내기 경계보다 오래된 원시 전송 행은 핫 데이터베이스를 떠납니다. 행이 오프로드된 경우 그 경계는 피드와 /v1/stats/overview에 hot_window_start로 공개되며(없으면 아직 아무것도 오프로드되지 않았다는 뜻) — 2026-10-13에 조회했을 때 2026-10-11T00:00:00Z — 정해진 시각이 아니라 내보내기가 하루치를 분리할 때 움직입니다. 행 단위 조회는 거기서 끝나지만, 파생 계층은 그렇지 않습니다. 그보다 이전에 대한 빈 행 단위 응답은 없음이 아니라 오프로드됨을 뜻하며, 해시만으로 한 조회는 비교할 수 없으므로 그 빈 응답은 알 수 없음입니다.

## 정직성 계약과 여덟 가지 기능

unknown, null, 빈 목록이 무엇을 뜻하는지, 숫자가 어떻게 만들어지고 서명되는지, 여덟 가지 스킬이 각각 무엇을 반환하는지.

- [정직성 계약이란 무엇입니까?](https://achivx.kr/academy/for-agents/what-is-the-honesty-contract/) — 매뉴얼의 §4 — 응답으로 분기하기 전에 읽으십시오: unknown은 none이 아니며, 그 이유를 incomplete_reasons에 밝힙니다. 일부를 잃은 응답은 그렇다고 밝히고 no-store로 제공됩니다. 측정되지 않음은 0이 아닙니다. 동결 집계 범위는 쌍별로 명시됩니다. 빈 동결 목록은 깨끗하다는 증명이 아닙니다. 최신성은 암시되는 것이 아니라 공개됩니다. 그리고 모두 unknown인 결과도 실제 결과입니다. unknown을 깨끗함으로 표시하는 연동은 스캐너가 말하기를 거부한 것을 공개한 셈입니다.
- [숫자는 어떻게 만들어지며, 누가 서명합니까?](https://achivx.kr/academy/for-agents/how-the-numbers-are-produced-and-signed/) — GET /v1/methodology(2026-10-13 기준 버전 stablscan-methodology-v0.4.0)는 모든 숫자가 어떻게 만들어지는지 밝힙니다: 세 가지 원칙, 정의(정산 거래량, 헤어컷(haircut), 시장 대시보드, 운영 SLO…), 여섯 가지 제외 항목, 각각 공개 문구와 제품 규칙을 갖춘 열두 가지 한계, 섀도 모드로 시작하는 탐지기 신호, 그리고 질문 → 경로 지도입니다. 배포 환경이 서명하는 경우 카드에 signature와 jwks_uri가 있고 POST /v1/verify-attestation이 본문을 검사합니다. 그날 이 배포 환경의 방법론에는 attestation 블록이 없었습니다.
- [get-address-risk는 무엇을 반환하며, 언제 호출합니까?](https://achivx.kr/academy/for-agents/get-address-risk/) — 한 체인에서 한 주소에 대한 하나의 등급 — unknown | none | low | medium | high | severe — 으로, 사실(OFAC, 이 체인의 발행사 동결/소각 상태, 노출)과 귀속된 라벨(최대 medium, 등급을 매기려면 최소 두 출처)을 종합하며, evidence 행, incomplete_reasons, flags, computed_at, sanctions_list_as_of를 함께 반환합니다. 거래하기 전에 가장 먼저 호출하고, chain을 명시적으로 전달하십시오 — 생략하면 0x… 주소는 베이스 기준으로 답하며 chain_source: "default"로 그 사실을 밝힙니다. unknown은 원인을 밝히며 결코 깨끗하다는 뜻이 아닙니다. REST 대응 엔드포인트: GET /v1/addresses/{address}/risk?chain=이며, new_counterparty를 위해 ?from=도 받습니다.
- [get-address-compliance는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-address-compliance/) — 한 체인에서 한 주소에 대한 컴플라이언스 사실입니다. sanctioned(OFAC SDN 플래그), freeze[] — 활성화된 동결 가능 스테이블코인마다 한 행이며 status는 frozen | seized | clear | unknown 중 하나이고, 그 근거가 된 기록, coverage, freeze_log_backfilled, frozen_usd6를 담습니다 — 그리고 not_freezable[], frozen_elsewhere[] (다른 체인의 기록에 걸린 동일한 바이트), freeze_proposals[], chains_with_data가 함께 반환됩니다. 출처와 함께 인용된 디코딩된 온체인 사실이며, 신원·AML·법적 판단이 결코 아닙니다. REST 대응 엔드포인트는 쿼리 없는 GET /v1/addresses/{address}?chain=입니다.
- [get-address-exposure는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-address-exposure/) — 가치 그래프를 거슬러 가장 가까운 오염 출발점까지 범위를 제한해 수행하는 역방향 너비 우선 탐색입니다. exposure(sanctioned | direct | indirect | negligible | none | unknown), min_hops, exposure_fraction, reached_roots, nodes_explored, frontier_truncated, hops_requested, hops_completed를 반환하며, 평가가 불완전한 이유는 incomplete_reasons가 밝힙니다. 예산 때문에 중단된 탐색은 이미 도달한 출발점이 판정을 정하지 않는 한 unknown으로 답합니다 — truncation_reason만 보지 말고 exposure를 읽으십시오.
- [get-address-approvals는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-address-approvals/) — 한 주소가 한 체인에서 부여한 열린 ERC-20 및 Permit2 허용량입니다: 사용 권한자(spender)와 토큰마다 한 행이며, 원시 값, unlimited / oversized / old 플래그, spender_class, 그리고 구간 — critical | high | low | expired | none — 와 worst_band가 있습니다. 경고 표시된 사용 권한자나 알 수 없는 사용 권한자에게 무제한 허용은 주요 자금 탈취 경로이며, DEX 라우터나 Permit2는 정상적인 경우입니다. 구간는 섀도 휴리스틱으로, 결코 위험 등급을 움직이지 않습니다.
- [get-sanctions-status는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-sanctions-status/) — OFAC SDN 데이터셋의 상태입니다: source(ofac_sdn), 생태계별 개수(evm_count, solana_count, tron_count, total), updated_at — 2026-10-13에는 디지털 화폐 주소 385개, 04:00 UTC 갱신이었습니다. 매개변수가 없으며 주소 목록 내보내기도 없습니다. 주소별 등재 여부는 주소 개요에서 확인합니다. 휴리스틱 노출 신호이며 법률 자문이 아닙니다 — 응답 자체의 note가 공식 SDN 목록과 대조해 확인하라고 말합니다.
- [get-sync-status는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-sync-status/) — 한 네트워크에 대한 인덱서 최신성입니다: chain_id, last_indexed_block, head_block, safe_block, finalized_block, lag_blocks(헤드 빼기 마지막 인덱싱 블록), freshness_seconds — 가장 최근 인덱싱된 전송의 경과 시간으로, 모든 네트워크에서 쓰는 최신성 척도 — 와 as_of. 솔라나에서는 lag_blocks가 구조상 0에 가까우므로 최신성 신호가 아닙니다. freshness_seconds를 읽으십시오 — 그리고 그 값이 null이면 lag_blocks로 대체하지 말고 다시 요청하십시오. 이 값은 모든 네트워크의 동기화 응답에서 null일 수 있습니다. /health와 /ready는 이에 대해 아무것도 말하지 않습니다.
- [get-recent-transactions는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-recent-transactions/) — 한 체인의 최신 스테이블코인 전송으로, recipient 또는 payer로 필터링할 수 있고 커서로 페이지를 나눕니다. items[]에는 tx_hash, log_index, block_number, block_time, payer, recipient, amount {최소 단위 금액, 소수 자릿수, 토큰 심볼}, token(컨트랙트 주소), finality, 그리고 가격이 매겨진 경우 usd_amount가 들어갑니다. limit의 기본값은 25이며 허용 범위는 1–200뿐입니다. REST 피드 GET /v1/transfers는 같은 행에 전체 필터 목록을 제공합니다. 어떤 행이든 오프로드된 뒤에는 두 응답 모두 hot_window_start를 담습니다.
- [get-wallet-graph-walk는 무엇을 반환합니까?](https://achivx.kr/academy/for-agents/get-wallet-graph-walk/) — 한 지갑에서 출발해 인덱싱된 정산 흐름 그래프를 범위를 제한해 탐색하며, 대상은 token에 지정한 스테이블코인 하나입니다(스킬에서는 필수, REST에서는 기본값 있음). direction, volume(원시 최소 단위), volume_usd6, 가치 비례 score를 담은 hops[].nodes, nodes_explored, frontier_truncated, window, window_from을 반환하며, 제재 대상 노드와 귀속된 노드에는 표시가 붙습니다. 설명용 기본 도구일 뿐입니다 — 탐지기 판정, 신원/통제 단정, AML 결정 또는 법률 자문이 아닙니다.

## 루프

사람이 개입하지 않는 매뉴얼의 루프, 그리고 스크립트가 발행사 기록을 어떻게 통보받는지.

- [사람이 개입하지 않는 일반적인 루프는 무엇입니까?](https://achivx.kr/academy/for-agents/the-typical-loop-with-no-human/) — 매뉴얼 §5의 세 단계: 자금을 받거나 보내기 전에 거래 상대를 검증합니다(get-address-risk, 그다음 get-address-compliance). 위험이 그럴 만하면 더 깊이 살펴봅니다(get-address-exposure, token을 지정한 get-wallet-graph-walk). 전송 후에는 이 인터페이스에서 인덱싱되었는지 확인합니다(수취인에 대한 get-recent-transactions, get-sync-status). 모든 페이로드는 완전한 JSON-RPC 2.0 봉투이며, 매뉴얼의 첫 예제는 그대로 실행할 수 있습니다.
- [스크립트는 발행사 기록을 어떻게 통보받습니까 — 관심 목록과 구독?](https://achivx.kr/academy/for-agents/watching-an-address-from-a-script/) — 두 가지 메커니즘이 있습니다. 관심 목록(watchlist)은 유일하게 인증이 필요한 인터페이스입니다: POST /v1/watchlists가 규칙을 만들고(GET은 나열, DELETE /v1/watchlists/{id}는 삭제), 매뉴얼이 문서화한 두 가지 동결 분류가 있습니다. freeze(감시 중인 주소를 지목한 확정된 발행사 기록마다 한 번, 또는 usd6 기준 임계값을 넘는 전역 알림)와 freeze_proposed(대기 중인 제안마다 한 번 — 조기 경보)입니다. 베어러 서비스 키가 없으면 호스트는 401 valid bearer service key required로 답하며, 키는 운영자가 설정하는 것으로 셀프서비스가 아닙니다. 사람을 위한 구독은 공개 텔레그램 봇이며, GET /v1/subscriptions가 이를 설명합니다.

---

출처: https://achivx.kr/academy/for-agents/ · 영어 원문: https://achivx.com/academy/for-agents/index.html
