Get Skills
get_skillsRetrieve skills and proficiency levels, with optional filters for category or minimum level.
Instructions
Get all skills with proficiency levels, optionally filtered by category or level
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category (e.g., 'programming_languages', 'frameworks_and_libraries', 'databases') | |
| min_level | No | Minimum proficiency level |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes |
Implementation Reference
- api/mcp.ts:79-95 (handler)The handler function for get_skills: fetches skills from GitHub JSON, filters by optional category and min proficiency level, then returns the filtered results as JSON text content.
async ({ category, min_level }) => { const skills = await readJsonFile<SkillsData>("profile/skills.json"); const levelOrder = skills.skill_levels; const minLevelIndex = min_level ? levelOrder.indexOf(min_level) : 0; const result: SkillResult[] = []; for (const [cat, data] of Object.entries(skills.categories)) { if (category && cat.toLowerCase() !== category.toLowerCase()) continue; for (const skill of data.skills) { const skillLevelIndex = levelOrder.indexOf(skill.level); if (skillLevelIndex >= minLevelIndex) { result.push({ category: cat, name: skill.name, level: skill.level, notes: skill.notes }); } } } return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } - api/mcp.ts:70-78 (schema)Input/output schema for get_skills: optional 'category' (string) and 'min_level' (enum from 'none' to 'master') inputs; output is textContentOutputSchema (array of text content).
{ title: "Get Skills", description: "Get all skills with proficiency levels, optionally filtered by category or level", inputSchema: { category: z.string().optional().describe("Filter by category (e.g., 'Frontend', 'Backend', 'DevOps')"), min_level: z.enum(["none", "novice", "apprentice", "adept", "expert", "master"]).optional().describe("Minimum proficiency level"), }, outputSchema: textContentOutputSchema, }, - api/mcp.ts:68-96 (registration)Registration of the 'get_skills' tool via server.registerTool() with title, description, input/output schemas, and handler.
server.registerTool( "get_skills", { title: "Get Skills", description: "Get all skills with proficiency levels, optionally filtered by category or level", inputSchema: { category: z.string().optional().describe("Filter by category (e.g., 'Frontend', 'Backend', 'DevOps')"), min_level: z.enum(["none", "novice", "apprentice", "adept", "expert", "master"]).optional().describe("Minimum proficiency level"), }, outputSchema: textContentOutputSchema, }, async ({ category, min_level }) => { const skills = await readJsonFile<SkillsData>("profile/skills.json"); const levelOrder = skills.skill_levels; const minLevelIndex = min_level ? levelOrder.indexOf(min_level) : 0; const result: SkillResult[] = []; for (const [cat, data] of Object.entries(skills.categories)) { if (category && cat.toLowerCase() !== category.toLowerCase()) continue; for (const skill of data.skills) { const skillLevelIndex = levelOrder.indexOf(skill.level); if (skillLevelIndex >= minLevelIndex) { result.push({ category: cat, name: skill.name, level: skill.level, notes: skill.notes }); } } } return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } ); - api/mcp.ts:40-43 (helper)Helper function readJsonFile<T> that fetches and parses JSON from GitHub raw content, used by the handler to load skills data.
async function readJsonFile<T>(relativePath: string): Promise<T> { const content = await fetchFromGitHub(relativePath); return JSON.parse(content) as T; } - src/types.ts:14-17 (helper)Type definitions for SkillsData and SkillResult used by the get_skills handler.
export interface SkillsData { skill_levels: string[]; categories: Record<string, SkillCategory>; }