Skip to main content
Glama

search_skills

Search AI Skill Store for skills by keyword, capability, platform, or trust level. Results include name, description, downloads, rating, and trust level, sorted by popularity.

Instructions

Search skills on AI Skill Store. Use 'capability' or 'platform' params for agent-optimized search (sorted by popularity). Returns skill name, description, downloads, rating, and trust level. / AI Skill Store에서 스킬 검색. capability나 platform을 지정하면 에이전트 최적화 검색(인기순 정렬)을 사용합니다.

Args: query: 검색 키워드 (스킬 이름 또는 설명). 비워두면 전체 목록. capability: 능력 태그로 검색 (예: web_search, text_summarization, code_generation) platform: 특정 플랫폼 호환 스킬만 (OpenClaw, ClaudeCode, ClaudeCodeAgentSkill, Cursor, GeminiCLI, CodexCLI) min_trust: 최소 신뢰 등급 (verified > community > sandbox) category: 카테고리 필터 (에이전트 검색 미사용 시에만 적용) sort: 정렬 기준 (에이전트 검색 미사용 시에만: newest | downloads | rating) limit: 결과 수 (기본 20, 최대 50)

Returns: 스킬 목록 문자열

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNo
capabilityNo
platformNo
min_trustNo
categoryNo
sortNonewest
limitNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The search_skills function (MCP tool handler). Decorated with @mcp.tool() and @_log_tool. Accepts query, capability, platform, min_trust, category, sort, limit. Uses _get('/v1/agent/search') for agent-optimized search (capability/platform/min_trust specified) or _get('/v1/skills') for general search. Returns a formatted string of search results.
    def search_skills(
        query: str = "",
        capability: str = "",
        platform: str = "",
        min_trust: str = "",
        category: str = "",
        sort: str = "newest",
        limit: int = 20,
    ) -> str:
        """
        Search skills on AI Skill Store. Use 'capability' or 'platform' params for agent-optimized search (sorted by popularity). Returns skill name, description, downloads, rating, and trust level. / AI Skill Store에서 스킬 검색.
        capability나 platform을 지정하면 에이전트 최적화 검색(인기순 정렬)을 사용합니다.
    
        Args:
            query: 검색 키워드 (스킬 이름 또는 설명). 비워두면 전체 목록.
            capability: 능력 태그로 검색 (예: web_search, text_summarization, code_generation)
            platform: 특정 플랫폼 호환 스킬만 (OpenClaw, ClaudeCode, ClaudeCodeAgentSkill, Cursor, GeminiCLI, CodexCLI)
            min_trust: 최소 신뢰 등급 (verified > community > sandbox)
            category: 카테고리 필터 (에이전트 검색 미사용 시에만 적용)
            sort: 정렬 기준 (에이전트 검색 미사용 시에만: newest | downloads | rating)
            limit: 결과 수 (기본 20, 최대 50)
    
        Returns:
            스킬 목록 문자열
        """
        use_agent_api = bool(capability or platform or min_trust)
    
        if use_agent_api:
            params = {
                "capability": capability or None,
                "q": query or None,
                "platform": platform or None,
                "min_trust": min_trust or None,
                "limit": min(limit, 50),
            }
            result = _get("/v1/agent/search", params)
            if result.get("status") == "error":
                return f"오류: {result.get('message')}"
    
            skills = result.get("skills", [])
            if not skills:
                return "검색 결과가 없습니다."
    
            count = result.get("count", len(skills))
            lines = [f"총 {count}개 스킬 (인기순)\n"]
            for s in skills:
                trust_icon = {"verified": "🔒", "community": "🌐", "sandbox": "🔲"}.get(
                    s.get("trust_level", ""), "❓"
                )
                caps = ", ".join(s.get("capabilities", [])) or "없음"
                convert = "✅" if s.get("can_auto_convert") else "❌"
                lines.append(
                    f"• [{s['skill_id']}] {s['name']} {trust_icon}{s.get('trust_level','')}\n"
                    f"  capabilities: {caps}\n"
                    f"  다운로드: {s.get('download_count', 0)} | "
                    f"자동변환: {convert} | "
                    f"v{s.get('version', '')}\n"
                    f"  설명: {s.get('description', '')[:80]}"
                )
            return "\n".join(lines)
        else:
            params = {
                "query": query or None,
                "category": category or None,
                "sort": sort,
                "limit": limit,
            }
            result = _get("/v1/skills", params)
            if result.get("status") == "error":
                return f"오류: {result.get('message')}"
    
            skills = result.get("skills", [])
            total = result.get("total", len(skills))
    
            if not skills:
                return "검색 결과가 없습니다."
    
            lines = [f"총 {total}개 스킬\n"]
            for s in skills:
                status_icon = {"approved": "✅", "caution": "⚠️", "rejected": "❌"}.get(
                    s.get("vetting_status", ""), "⏳"
                )
                rating = f"⭐{s['avg_rating']:.1f}" if s.get("avg_rating", 0) > 0 else "평점없음"
                lines.append(
                    f"• [{s['skill_id']}] {s['name']} {status_icon}\n"
                    f"  카테고리: {s.get('category') or '미분류'} | "
                    f"다운로드: {s.get('download_count', 0)} | {rating}\n"
                    f"  설명: {s['description'][:80]}{'...' if len(s['description']) > 80 else ''}"
                )
            return "\n".join(lines)
  • The @mcp.tool() decorator registers search_skills as an MCP tool on the FastMCP server instance.
    @mcp.tool()
  • The _get helper function used by search_skills to make HTTP GET requests to the skill store API.
    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)}
Behavior4/5

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

With no annotations, the description details the return fields (name, description, downloads, rating, trust level) and explains sorting behavior. It does not disclose side effects or auth requirements, but it sufficiently describes the tool's behavior for a search operation.

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

Conciseness4/5

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

The description is well-structured with clear sections and bullet points, but it is somewhat lengthy due to bilingual content. Each sentence serves a purpose, though conciseness could be improved by removing redundant phrasing.

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

Completeness5/5

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

The description covers all 7 parameters with usage details, explains return format, and clarifies behavior differences (agent search vs. general search). Given the output schema is a simple string, the description is complete and leaves no major gaps.

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

Parameters5/5

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

Since schema description coverage is 0%, the description fully compensates by detailing each parameter's meaning, examples, constraints (e.g., default values, max limit), and conditional applicability (e.g., category/sort only without agent search). This adds substantial value beyond the bare schema.

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 'Search skills on AI Skill Store' and explains the search behavior with specific terms like 'capability' and 'platform'. However, it does not explicitly differentiate from sibling tools like get_skill, but the context implies this is a list/search function.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use 'capability' or 'platform' for agent-optimized search and notes that 'category' and 'sort' only apply when not using that mode. It does not, however, direct when to choose this tool over alternatives.

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