get_skill
Retrieve comprehensive details of any skill including description, platforms, version history, author, and security status by providing its skill ID.
Instructions
Get detailed info for a specific skill including description, supported platforms, version history, author, and security vetting status. / 특정 스킬의 상세 정보 조회.
Args: skill_id: 스킬 ID (search_skills 결과의 skill_id)
Returns: 스킬 상세 정보 JSON 문자열
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- mcp_server/skill_store_mcp.py:229-266 (handler)The get_skill MCP tool handler function. Decorated with @mcp.tool() and @_log_tool. Takes a skill_id string, calls _get('/v1/skills/{skill_id}') to fetch skill details from the AI Skill Store API, parses the response (including tags from latest_version_details), and returns a formatted string with name, ID, description, category, owner, version, vetting status, download count, tags, and creation date.
@mcp.tool() @_log_tool def get_skill(skill_id: str) -> str: """ Get detailed info for a specific skill including description, supported platforms, version history, author, and security vetting status. / 특정 스킬의 상세 정보 조회. Args: skill_id: 스킬 ID (search_skills 결과의 skill_id) Returns: 스킬 상세 정보 JSON 문자열 """ result = _get(f"/v1/skills/{skill_id}") if result.get("status") == "error": return f"오류: {result.get('message')}" skill = result.get("skill", {}) v = skill.get("latest_version_details") or {} tags = v.get("tags") or [] if isinstance(tags, str): try: tags = json.loads(tags) except Exception: tags = [tags] lines = [ f"📦 {skill.get('name')}", f"ID: {skill.get('skill_id')}", f"설명: {skill.get('description')}", f"카테고리: {skill.get('category') or '미분류'}", f"소유자: {skill.get('owner_username')}", f"버전: {v.get('version_number', 'N/A')}", f"보안 상태: {v.get('vetting_status', 'N/A')}", f"다운로드: {v.get('download_count', 0)}", f"태그: {', '.join(tags) if tags else '없음'}", f"등록일: {skill.get('created_at', '')[:10]}", ] return "\n".join(lines) - mcp_server/skill_store_mcp.py:229-229 (registration)Registration via @mcp.tool() decorator on the get_skill function. The FastMCP instance 'mcp' is created at line 60 with the name 'skill-store', and the @mcp.tool() decorator registers get_skill as an MCP tool.
@mcp.tool() - mcp_server/skill_store_mcp.py:85-95 (helper)The _get helper function used by get_skill to make HTTP GET requests to the Skill Store API. Constructs the URL from SKILL_STORE_URL and the given path, adds query params if provided, and returns the parsed JSON response or an error dict.
def _get(path: str, params: dict = None) -> dict: url = SKILL_STORE_URL + path if params: url += "?" + urllib.parse.urlencode({k: v for k, v in params.items() if v is not None}) try: with urllib.request.urlopen(url, timeout=10) as resp: return json.loads(resp.read().decode()) except urllib.error.HTTPError as e: return {"status": "error", "message": f"HTTP {e.code}: {e.reason}"} except Exception as e: return {"status": "error", "message": str(e)} - mcp_server/skill_store_mcp.py:33-45 (helper)The _log_tool decorator used on get_skill. Logs tool calls to stdout with format 'TOOL_CALL tool=get_skill kw=...' for observability (e.g., journalctl).
def _log_tool(fn): """각 MCP tool 호출을 stdout 에 한 줄 기록 — journalctl 에서 grep 가능. 형식: TOOL_CALL tool=<name> kw=<arg_keys> (PII 회피 위해 값은 로그 X) """ @_functools_tool.wraps(fn) def _wrapper(*args, **kwargs): try: kw_keys = list(kwargs.keys()) print(f"TOOL_CALL tool={fn.__name__} kw={kw_keys}", flush=True) except Exception: pass return fn(*args, **kwargs) return _wrapper