도구 레퍼런스
핵심 요약
이 페이지는 설치 안내가 아니라 도구 이름과 입력값을 찾는 레퍼런스입니다. 로컬 보호 도구와 원격 판매자 도구는 실행 대상이 다릅니다.
먼저 조회 도구를 선택하고, 입력 스키마·인증 필요 여부·변경 효과·Receipt를 확인하세요.
아래 모든 도구 이름과 입력 스키마는 실행 중인 레지스트리에서 인용됩니다: tools/devpay-mcp/server.mjs의 TOOL_DEFS(로컬 도구 6개)와 mcp/gateway/worker.js의 TOOL_DEFS(원격 도구 20개). 모든 입력 스키마는 {"type":"object","additionalProperties":false}입니다.
모든 서버의 결과 형태: {content:[{type:"text",text:<json>}],isError}에 페이로드 내 receipt {"receipt":{"tool","request_id","action":"read|write","at","ok"}}.
로컬 protect 도구 (yp-mcp)
어노테이션은 서버에서 옵니다: RO = 읽기 전용, EXEC = 워크스페이스 코드 실행(비파괴적, 멱등, open-world), RW = 승인 게이트 쓰기 단계 (코드도 실행).
공유 인자: project(문자열) — devpay.json을 포함하는 프로젝트 디렉터리로, 워크스페이스 루트 기준 상대 경로 또는 그 안의 절대 경로; 기본값은 워크스페이스 루트.
yetdapay_project_analyze
yp protect plan을 실행하고(CLI에는 독립 analyze 명령이 없음) 파싱된 .devpay/*.analysis.json을 임베드합니다. .devpay/ 스테이징만 씁니다 — 하지만 프로젝트 코드를 실행합니다(드라이버 import). EXEC.
| 인자 | 타입 | 매핑 |
|---|---|---|
target | string (경로, 워크스페이스에 존재해야 함) | --target |
driver | string (경로) | --driver |
spec | string (경로) | --spec |
overrides | string (경로) | --overrides |
no_dynamic | boolean | --no-dynamic |
yetdapay_protection_plan
analyze와 동일한 argv; 에셋별 AUTO/AGENT/MANUAL_REVIEW 결정이 있는 .devpay/plan.json을 씁니다. Plan-only — 아무것도 적용되지 않음. EXEC.
인자: project, target, driver, spec, overrides, no_dynamic (위와 동일한 매핑).
yetdapay_protection_review
yp protect review 실행 — 사람이 읽을 수 있는 §6.1 플랜 요약. 플랜이 존재해야 합니다. RO. 인자: project만.
yetdapay_protection_apply
yp protect apply --approve 실행. approved:true가 아니면 어떤 spawn도 하기 전에 UNAUTHORIZED 도구 오류로 거부됩니다. 거부 페이로드는 알려진 경우 대기 중인 플랜의 plan_sha256/spec_sha256/ target_sha256을 포함하여, 에이전트가 정확히 무엇을 승인해야 하는지 사용자에게 보여줄 수 있습니다. RW.
| 인자 | 타입 | 필수 | 매핑 |
|---|---|---|---|
approved | boolean | 정확히 true여야 함 | --approve 활성화 |
vectors | string (경로) | — | --vectors |
port | integer 1–65535 | — | --port |
auth | string enum dev-open | yp-license | — | --auth |
license_seed | string (경로) | — | --license-seed |
응답은 approval.{approved_by_caller,plan_sha256,spec_sha256,target,target_sha256,driver_sha256}을 추가합니다 — 그대로 전달된 CLI 페이로드 위의 추가 필드.
yetdapay_protection_verify
yp protect verify 실행. 프로젝트 코드를 실행합니다 — 생성된 파티션 서버를 부팅하고 분할된 클라이언트를 import. EXEC.
| 인자 | 타입 | 매핑 |
|---|---|---|
vectors | string (경로) | --vectors |
port | integer 1–65535 | --port |
asset | string | --asset (하나의 spec 에셋 id로 제한) |
api_base | string | --api-base |
yetdapay_environment_doctor
yp doctor 실행. FAIL이 하나라도 있으면 → CLI exit 1 → isError:true. RO.
| 인자 | 타입 | 매핑 |
|---|---|---|
api_base | string | --api-base |
원격 게이트웨이 도구 (20)
범위 컬럼: seller = Authorization: Bearer 필요, 업스트림으로 그대로 전달; public = 절대 자격 증명을 싣지 않음. ro/write = readOnlyHint/destructiveHint 어노테이션.
스토어 및 연동 (원본 10개)
| 도구 | 범위 | Act | 인자 (볼드 필수) | 업스트림 |
|---|---|---|---|---|
yetdapay_store_list | seller | ro | — | GET /projects → {stores:[…]} |
yetdapay_store_get | seller | ro | store_id | GET /projects/:id |
yetdapay_install_manifest_get | seller | ro | store_id | GET /projects/:id/integration → {integration,manifest}; 404 → 도구 오류 NOT_CONFIGURED |
yetdapay_integration_status | seller | ro | store_id | 동일 GET; configured/donation_enabled/donation_mode/feedback_configured/public_id/hosted_path 요약; 404에서 오류 없음 |
yetdapay_donation_config_get | seller | ro | store_id | 동일 GET; 파싱된 donation_amounts_krw를 포함한 기부 설정 |
yetdapay_donation_configure | seller | write | store_id, donation_enabled bool, donation_title, donation_description, donation_amounts_krw number[] (각각 >0, <=1,000,000) | 로컬 검증 → GET-merge (미설정 필드 보존, feedback_widget_id 포함) → PUT; 멱등 |
yetdapay_feedback_config_get | seller | ro | store_id | integration GET + GET /feedback-widgets?project_id= → {feedback_widget_id, widgets:[…]} |
yetdapay_feedback_configure | seller | write | store_id, feedback_widget_id | 주어진 id → 없으면 기존 is_public 위젯 재사용 → 없으면 기본 생성(support-*, FREE_OR_PAID) → PUT; 멱등 |
yetdapay_integration_assets_get | public | ro | mode enum hosted|native, framework enum nuxt|react|vanilla, feature enum donation|feedback|both, store_id (선택; 자격 증명 설정 시 seller API로 public_id 해석) | 없음(또는 public_id용 seller integration GET) — 호스티드 <a> 스니펫 또는 네이티브 컴포넌트 지침 출력 |
yetdapay_integration_validate | seller | ro | store_id | seller integration GET + 무인증 GET /public/integrations/:public_id + 위젯 목록 → {checks:[…],ok} |
셀러 읽기 도구 (추가된 읽기 10개)
| 도구 | 범위 | Act | 인자 | 업스트림 |
|---|---|---|---|---|
yetdapay_project_list | seller | ro | — | GET /projects → {items} (원시 업스트림 행) |
yetdapay_project_get | seller | ro | project_id | GET /projects/:id → {project}; 다른 테넌트는 NOT_FOUND |
yetdapay_product_list | seller | ro | — | GET /products → {items} |
yetdapay_license_list | seller | ro | — | GET /licenses → {items} (라이선스 키는 목록 엔드포인트에 노출되지 않음) |
yetdapay_license_get | seller | ro | license_id | 셀러 범위 GET /licenses 목록 + 선택(단일 GET 라우트 없음); 없음 → 도구 오류 NOT_FOUND |
yetdapay_license_bindings | seller | ro | license_id | GET /licenses/:id/bindings — PoP 디바이스 바인딩(jkt thumbprint + created_at) |
yetdapay_license_usage | seller | ro | license_id | GET /licenses/:id/usage — 실행 사용량 로그 + 영속 카운터 |
yetdapay_usage_counters | seller | ro | lic_id (선택 필터) | GET /usage-counters[?lic_id=] — 영속 카운터, 테넌트 범위 |
yetdapay_security_events | seller | ro | lic_id (선택 필터) | GET /security-events[?lic_id=] — 보안 이벤트, 테넌트 범위 |
yetdapay_license_verify | public | ro | key, product_id, device_id (선택) | POST /licenses/verify — 계약상 무인증 |
테넌트 스코핑
모든 셀러 읽기는 업스트림 테넌트 스코프입니다 — 백엔드가 seller_id 필터링을 강제합니다(products.seller_id/projects.seller_id 조인); 게이트웨이는 이를 절대 넓히지 않습니다. 업스트림 4xx/5xx는 mapUpstreamError를 통해 정직한 도구 오류로 전파됩니다 — 가짜 성공 없음.
로컬 커머스 도구 (Rust mcp/)
원본 커머스 도구 10개(게이트웨이 처음 10개와 동일한 계약)도 Rust stdio 서버에 존재하여 로컬 be/ 대상을 위해 헤더 패스스루 대신 env var 자격 증명을 사용합니다:
| 변수 | 기본값 | 용도 |
|---|---|---|
YETDAPAY_API_BASE | http://127.0.0.1:8080/api/v1 | Axum REST base |
YETDAPAY_SITE_ORIGIN | http://127.0.0.1:3000 | 호스티드 링크 origin |
YETDAPAY_DEV_USER | — | dev 인증 X-Dev-User 헤더 |
YETDAPAY_MCP_TOKEN | — | Bearer 토큰; YETDAPAY_DEV_USER보다 우선 |
YETDAPAY_REQUEST_TIMEOUT_MS | 10000 | 요청당 타임아웃 |
빌드/실행: cd mcp && cargo build && ./target/debug/yetdapay-mcp.