list_skills
Discover available AI agent skills for tasks like document processing, security analysis, and web development. Filter by name, description, or source to find specialized capabilities.
Instructions
List all available agent skills that can be invoked
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional filter to search skills by name or description | |
| source | No | Filter by skill source | all |
Implementation Reference
- src/server.ts:52-105 (registration)Tool registration with name 'list_skills', including inputSchema (filter, source parameters) and outputSchema (skills array, total, lastSync){ name: 'list_skills', description: 'List all available agent skills that can be invoked', inputSchema: { type: 'object', properties: { filter: { type: 'string', description: 'Optional filter to search skills by name or description', }, source: { type: 'string', enum: ['all', 'repository', 'local'], description: 'Filter by skill source', default: 'all', }, }, }, outputSchema: { type: 'object', properties: { skills: { type: 'array', items: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, description: { type: 'string' }, source: { type: 'string' }, parameters: { type: 'array', items: { type: 'object', properties: { name: { type: 'string' }, type: { type: 'string' }, description: { type: 'string' }, required: { type: 'boolean' }, }, }, }, }, }, }, total: { type: 'number' }, lastSync: { type: 'string', format: 'date-time' }, }, }, annotations: { readOnlyHint: true, openWorldHint: false, }, },
- src/server.ts:230-249 (handler)Tool handler that processes list_skills calls, extracts filter/source args, calls executor.listSkills(), and returns formatted JSON responsecase 'list_skills': { const filter = (args?.filter as string) || undefined; const source = (args?.source as 'all' | 'repository' | 'local') || 'all'; const skills = this.executor.listSkills(filter, source); const lastSync = this.registry.getLastSync(); return { content: [ { type: 'text', text: JSON.stringify({ skills, total: skills.length, lastSync: lastSync?.toISOString(), }), }, ], }; }
- src/services/skill-executor.ts:85-122 (handler)Core implementation logic in SkillExecutor.listSkills() that filters skills by source and text, then maps to output format with id, name, description, source, and parameterslistSkills(filter?: string, source?: 'all' | 'repository' | 'local'): Array<{ id: string; name: string; description: string; source: string; parameters?: Array<{ name: string; type: string; description: string; required: boolean }>; }> { let skills = this.registry.listSkills(); // Apply source filter if (source && source !== 'all') { skills = skills.filter((skill) => skill.source === source); } // Apply text filter if (filter) { const filterLower = filter.toLowerCase(); skills = skills.filter( (skill) => skill.name.toLowerCase().includes(filterLower) || skill.description.toLowerCase().includes(filterLower) || skill.id.toLowerCase().includes(filterLower) ); } return skills.map((skill) => ({ id: skill.id, name: skill.name, description: skill.description, source: skill.source, parameters: skill.parameters?.map((p) => ({ name: p.name, type: p.type, description: p.description, required: p.required, })), })); }
- src/models/registry.ts:59-61 (helper)Registry method listSkills() that returns all skills from the internal MaplistSkills(): Skill[] { return Array.from(this.skills.values()); }
- src/models/skill.ts:15-27 (schema)Skill type definition using Zod schema, defining the structure of skill objects with id, name, description, source, content, parameters, and metadataexport const skillSchema = z.object({ id: z.string().min(1).max(100), name: z.string().min(1).max(100), description: z.string().min(1).max(500), source: z.enum(['repository', 'local']), sourcePath: z.string(), content: z.string(), parameters: z.array(parameterSchemaSchema).optional(), metadata: skillMetadataSchema, lastUpdated: z.date(), }); export type Skill = z.infer<typeof skillSchema>;