@withpica/mcp-server
Version:
MCP Server for withPICA — enables AI assistants to interact with your withPICA music catalog
65 lines • 2.67 kB
TypeScript
/**
* Skills Registry — ADR-140 Phase 2b
*
* Exposes PICA's named methodologies as MCP-loadable skills via the SEP-2640
* bridge pattern: each skill is reachable as both a `skill://` Resource and an
* MCP Tool (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 };
//# sourceMappingURL=index.d.ts.map