Skip to main content
Glama

get_skill_schema

Retrieve the complete skill invocation schema, including interface specification, input/output schemas, permissions, and capability tags.

Instructions

Get the full schema for invoking a skill - interface spec, input/output schemas, permissions, and capability tags. / 스킬 호출용 전체 스키마 조회. 인터페이스, 입출력 스키마, 권한, 능력 태그 등을 반환합니다.

Args: skill_id: 스킬 ID

Returns: 스킬 호출 스키마 정보

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
skill_idYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The core handler for the 'get_skill_schema' MCP tool. Fetches the full skill schema from the API (interface, input/output schemas, permissions, capabilities, etc.) and formats it as a human-readable string.
    @mcp.tool()
    @_log_tool
    def get_skill_schema(skill_id: str) -> str:
        """
        Get the full schema for invoking a skill - interface spec, input/output schemas, permissions, and capability tags. / 스킬 호출용 전체 스키마 조회.
        인터페이스, 입출력 스키마, 권한, 능력 태그 등을 반환합니다.
    
        Args:
            skill_id: 스킬 ID
    
        Returns:
            스킬 호출 스키마 정보
        """
        result = _get(f"/v1/agent/skills/{skill_id}/schema")
        if result.get("status") == "error":
            return f"오류: {result.get('message')}"
    
        iface = result.get("interface", {})
        perms = result.get("permissions", {})
        caps = result.get("capabilities", [])
        compat = result.get("platform_compatibility", [])
        reqs = result.get("requirements", {})
    
        lines = [
            f"📋 {result.get('name')} v{result.get('version', '')}",
            f"신뢰: {result.get('trust_level', '')} | "
            f"USK v3: {'✅' if result.get('is_usk_v3') else '❌'} | "
            f"자동변환: {'✅' if result.get('can_auto_convert') else '❌'}",
            "",
            "── Interface ──",
            f"  type: {iface.get('type', 'N/A')}",
            f"  entry_point: {iface.get('entry_point', 'N/A')}",
            f"  runtime: {iface.get('runtime', 'N/A')}",
            f"  call_pattern: {iface.get('call_pattern', 'N/A')}",
            "",
            "── Input Schema ──",
            json.dumps(result.get("input_schema", {}), indent=2, ensure_ascii=False),
            "",
            "── Output Schema ──",
            json.dumps(result.get("output_schema", {}), indent=2, ensure_ascii=False),
            "",
            "── Capabilities ──",
            ", ".join(caps) if caps else "없음",
            "",
            "── Permissions ──",
            f"  network: {perms.get('network', False)}",
            f"  filesystem: {perms.get('filesystem', False)}",
            f"  subprocess: {perms.get('subprocess', False)}",
            f"  env_vars: {', '.join(perms.get('env_vars', [])) or '없음'}",
            "",
            f"플랫폼 호환: {', '.join(compat) if compat else 'any'}",
        ]
    
        if reqs:
            lines.append("")
            lines.append("── Requirements ──")
            for k, v in reqs.items():
                lines.append(f"  {k}: {v}")
    
        dl = result.get("download", {})
        if dl.get("platforms"):
            lines.append("")
            lines.append(f"다운로드: download_skill(skill_id=\"{skill_id}\", platform=\"<platform>\")")
            lines.append(f"지원 플랫폼: {', '.join(dl['platforms'])}")
    
        return "\n".join(lines)
  • The @mcp.tool() decorator registers get_skill_schema as an MCP tool with the FastMCP server instance.
    @mcp.tool()
    @_log_tool
  • The tool takes a single parameter 'skill_id' (string) and returns a string.
    def get_skill_schema(skill_id: str) -> str:
  • The _get helper function used by get_skill_schema to make the GET request to /v1/agent/skills/{skill_id}/schema.
    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)}
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of disclosing behavioral traits. It only mentions the return content (schema info) but does not address read-only nature, side effects, rate limits, or required permissions. The description is insufficient for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively short but includes redundant sections (Args/Returns) and a bilingual version. Some of the content (e.g., the Korean translation of the same information) could be considered extraneous for typical English usage. Still, it is not overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so the description does not need to detail return values. However, with no annotations and minimal behavioral context, the description leaves gaps regarding safety and usage context. Given the tool's simple nature (single parameter), this is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter 'skill_id' with no description (0% coverage). The description merely repeats the parameter name and provides a Korean translation ('스킬 ID'), adding no meaningful semantic detail beyond the schema itself. For a single parameter, the description should have clarified the expected format or purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves the full schema for invoking a skill, listing specific components (interface spec, input/output schemas, permissions, capability tags). This is a specific verb+resource combination, but it does not explicitly differentiate from sibling tools like 'get_skill' or 'download_skill', which may cause ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'get_skill' or 'download_skill'. The description only states what the tool does, not when it is appropriate or when to avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/garasegae/aiskillstore'

If you have feedback or need assistance with the MCP directory API, please join our Discord server