UNPKG

@withpica/mcp-server

Version:

MCP Server for withPICA — enables AI assistants to interact with your withPICA music catalog

67 lines • 2.76 kB
/** * Skills Registry — ADR-140 Phase 2b * * Exposes PICA's named methodologies as MCP-loadable skills. Each skill is * reachable as a `skill://` Resource, through the SEP-2640 skills extension * (skills/list, skills/get — ./sep2640.ts, ADR-328), and as MCP tools * (pica_skill_list + pica_skill_get). * * Bodies are bundled at build time by `scripts/build-skills.ts`. The registry * is intentionally thin — list returns a metadata-only summary (tiny handshake * cost), get returns the full body on demand (lazy slicing, mirrors the * _inspect sections pattern from ADR-199). */ import { SKILLS, SKILL_NAMES, type Skill } from "./skills.generated.js"; /** Origin of a skill: shipped with the package, org-authored, or user-authored. */ export type SkillOrigin = "builtin" | "org" | "user"; /** * An extra (non-builtin) skill that may optionally carry its origin. * Defaults to "org" when origin is absent (Phase-2 back-compat). */ export type ExtraSkill = Skill & { origin?: "org" | "user"; }; /** Public-facing summary returned by listSkills — no body. */ export interface SkillSummary { name: string; description: string; triggers: string[]; audience: string; /** "builtin" = shipped with the package; "org" or "user" = passed via extraSkills. */ origin?: SkillOrigin; } export declare class SkillsRegistry { private readonly extra; /** * @param extraSkills Customer-owned skills to merge with built-ins. * Built-in WINS on name collision; first entry wins on duplicate extras. * Default is empty — keeps the published package byte-identical for * stdio/external callers that pass no extras (hard invariant, ADR-271). * Pass `origin: "user"` on an entry to tag it as user-authored. */ constructor(extraSkills?: ExtraSkill[]); /** Stable list of available skill names (built-ins first, then extras). */ listNames(): ReadonlyArray<string>; /** * Lightweight list for `pica_skill_list` — no body bytes. * Total size scales with skill count, not body size. */ listSkills(): SkillSummary[]; /** * Full skill — bodies are loaded only when an agent invokes get. * Resolves built-ins first, then extras. * Throws when name is unknown so callers can return a RecoveryHint. */ getSkill(name: string): Skill; /** "builtin" | "org" | "user" | null (null = not registered). */ originOf(name: string): SkillOrigin | null; has(name: string): boolean; } export declare class SkillNotFoundError extends Error { readonly skillName: string; constructor(skillName: string); } export { SKILLS, SKILL_NAMES }; export type { Skill }; export * from "./sep2640.js"; //# sourceMappingURL=index.d.ts.map