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
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| capability | No | ||
| platform | No | ||
| min_trust | No | ||
| category | No | ||
| sort | No | newest | |
| limit | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- mcp_server/skill_store_mcp.py:137-226 (handler)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) - mcp_server/skill_store_mcp.py:135-135 (registration)The @mcp.tool() decorator registers search_skills as an MCP tool on the FastMCP server instance.
@mcp.tool() - mcp_server/skill_store_mcp.py:85-96 (helper)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)}