validate_compatibility
Check skill compatibility with your platform before downloading. Evaluates Python version, OS, and installed packages, then returns compatibility status, missing dependencies, and installation commands.
Instructions
Check if a skill is compatible with a specific platform before downloading. / 다운로드 전 호환성 검증. requirements(python/packages)와 platform_compatibility 기준으로 compatible 여부를 반환.
Args: skill_id: 검증할 스킬 ID python_version: 에이전트 Python 버전 (예: "3.11.2") os: "linux" | "darwin" | "windows" installed_packages: {"requests": "2.31.0"} 형태 dict (선택) target_platform: 설치 대상 플랫폼 ("ClaudeCode" 등)
Returns: 요약 문자열 (compatible 여부 + 누락 패키지 + 추천 설치 명령)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | ||
| python_version | No | ||
| os | No | ||
| installed_packages | No | ||
| target_platform | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- mcp_server/skill_store_mcp.py:954-955 (registration)Tool registered with @mcp.tool() decorator on line 954
@mcp.tool() @_log_tool - mcp_server/skill_store_mcp.py:956-1027 (handler)The validate_compatibility handler function: accepts skill_id, python_version, os, installed_packages, target_platform; POSTs to /v1/skills/{skill_id}/validate and formats compatibility result with checks, missing/mismatched packages, suggested install commands, and warnings.
def validate_compatibility( skill_id: str, python_version: str = "", os: str = "", installed_packages: dict = None, target_platform: str = "", ) -> str: """ Check if a skill is compatible with a specific platform before downloading. / 다운로드 전 호환성 검증. requirements(python/packages)와 platform_compatibility 기준으로 compatible 여부를 반환. Args: skill_id: 검증할 스킬 ID python_version: 에이전트 Python 버전 (예: "3.11.2") os: "linux" | "darwin" | "windows" installed_packages: {"requests": "2.31.0"} 형태 dict (선택) target_platform: 설치 대상 플랫폼 ("ClaudeCode" 등) Returns: 요약 문자열 (compatible 여부 + 누락 패키지 + 추천 설치 명령) """ import requests as _rq if installed_packages is None: installed_packages = {} payload = {} if python_version: payload['python_version'] = python_version if os: payload['os'] = os if installed_packages: payload['installed_packages'] = installed_packages if target_platform: payload['target_platform'] = target_platform url = f"{SKILL_STORE_URL}/v1/skills/{skill_id}/validate" try: r = _rq.post(url, json=payload, timeout=15) except Exception as e: return f"❌ 요청 실패: {e}" if r.status_code == 404: return "❌ 스킬을 찾을 수 없음" if r.status_code != 200: try: err = r.json().get('detail') or r.json().get('message') or r.text[:200] except Exception: err = r.text[:200] return f"❌ 검증 실패 ({r.status_code}): {err}" d = r.json() compat = "✅ 호환" if d.get('compatible') else "❌ 비호환" lines = [f"{compat} {d.get('skill_name')} v{d.get('version')}"] for check in d.get('checks', []): nm = check.get('name') status = check.get('status') icon = {'ok':'✅','not_specified':'⚪','informational':'ℹ️','unknown':'⚪','mismatch':'❌','missing':'❌','unsupported':'❌'}.get(status, '•') if nm == 'packages': miss = check.get('missing') or [] vmm = check.get('version_mismatch') or [] sat = check.get('satisfied') or [] lines.append(f" {icon} packages: satisfied={len(sat)}, missing={len(miss)}, mismatch={len(vmm)}") for m in miss[:5]: lines.append(f" - missing: {m['name']} {m.get('required','')}") for vm in vmm[:5]: lines.append(f" - mismatch: {vm['name']} req={vm['required']} installed={vm['installed']}") else: lines.append(f" {icon} {nm}: {status} ({check.get('message','')[:80]})") sugg = d.get('suggested_install_commands') or [] if sugg: lines.append(" 추천 설치:") for s in sugg[:8]: lines.append(f" $ {s}") warns = d.get('warnings') or [] if warns: lines.append(" 경고:") for w in warns: lines.append(f" ⚠️ {w}") return "\n".join(lines) - Function signature parameters define the input schema: skill_id (str, required), python_version (str, optional), os (str, optional), installed_packages (dict, optional), target_platform (str, optional). Docstring describes each parameter.
def validate_compatibility( skill_id: str, python_version: str = "", os: str = "", installed_packages: dict = None, target_platform: str = "", ) -> str: