Skip to main content
Glama
fkesheh
by fkesheh

list_skills

Discover all available skills installed in the Skill Management MCP Server by listing their names, descriptions, and validation status from SKILL.md metadata.

Instructions

List all available skills in the ~/.skill-mcp/skills directory with their descriptions parsed from SKILL.md frontmatter.

This tool returns a lightweight overview of all installed skills, including:

  • Skill name and directory path

  • Description extracted from SKILL.md YAML frontmatter

  • Validation status (whether SKILL.md exists)

Use this tool first to discover what skills are available before working with specific skills. Each skill is a self-contained directory that may contain scripts, data files, and a SKILL.md metadata file.

Returns: List of all available skills with names, paths, and descriptions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The main handler function that executes the list_skills tool logic by scanning the skills directory and collecting summaries for each skill directory.
    def list_skills() -> list[SkillSummary]: """ List all available skills with descriptions. Returns: List of SkillSummary objects """ skills: list[SkillSummary] = [] if not SKILLS_DIR.exists(): return skills for item in sorted(SKILLS_DIR.iterdir()): if item.is_dir(): skill_summary = SkillService._get_skill_summary(item.name) if skill_summary: skills.append(skill_summary) return skills
  • Input schema (Pydantic model) for the list_skills tool, which requires no parameters.
    class ListSkillsInput(BaseModel): """Input for listing all skills.""" pass
  • Helper function in skill_crud tool that handles the list operation by calling SkillService.list_skills() and formatting the output.
    async def _handle_list(input_data: SkillCrudInput) -> list[types.TextContent]: """Handle list operation.""" all_skills = SkillService.list_skills() # Apply search filter if provided skills = all_skills if input_data.search: import re skills = [ s for s in all_skills if ( input_data.search.lower() in s.name.lower() or input_data.search.lower() in (s.description or "").lower() or ( re.search(input_data.search, s.name, re.IGNORECASE) if input_data.search.startswith("^") or "*" in input_data.search else False ) ) ] if not skills: result = "No skills found in ~/.skill-mcp/skills" if input_data.search: result += f" matching '{input_data.search}'" else: result = f"Found {len(skills)} skill(s)" if input_data.search: result += f" matching '{input_data.search}'" result += ":\n\n" for skill in skills: status = "✓" if skill.has_skill_md else "✗" result += f"{status} {skill.name}\n" if skill.description: result += f" Description: {skill.description}\n" result += "\n" return [types.TextContent(type="text", text=result)]
  • Supporting helper function used by list_skills to generate summary for individual skills from their SKILL.md files.
    def _get_skill_summary(skill_name: str) -> SkillSummary | None: """Get a summary of a single skill.""" skill_dir = SKILLS_DIR / skill_name if not skill_dir.is_dir(): return None skill_md_path = skill_dir / SKILL_METADATA_FILE has_skill_md = skill_md_path.exists() description = "" if has_skill_md: try: content = skill_md_path.read_text() metadata = parse_yaml_frontmatter(content) description = get_skill_description(metadata) except Exception: pass return SkillSummary( name=skill_name, description=description, has_skill_md=has_skill_md, )

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/fkesheh/skill-mcp'

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