Adds detection, enumeration, and conformance checking for the Skills extension (`io.modelcontextprotocol/skills`) — phases 1 and 2 of #2234, which is everything its Acceptance list names. Skills is a *server*-declared extension, read off the connecting server's `capabilities.extensions`, so it is deliberately absent from `ADVERTISABLE_EXTENSIONS` — that registry is what the Inspector advertises and the user toggles, and an entry there would be a meaningless toggle. `skills/list` and `skills/get` are consumer-owned extension methods that neither era codec defines, so the SDK's era gate skips them and they go out as ordinary `client.request` calls with explicit result schemas. The raw-wire channel modern `tasks/*` needs is not used, and the Skills tab is not era-gated: a legacy-era server that declares the extension is serving it. The checks are the point, not the list view. `core/mcp/skills.ts` reports each obligation SEP-2640 states — the name/path invariant, the digest format, the 512-entry and 16 MiB limits, and `resources: "dynamic"`, which means integrity cannot be verified at all. Digest verification hashes the fetched bytes with WebCrypto and returns a mismatch with both digests attached rather than throwing, because showing a mismatch loudly is the whole value proposition. Files are fetched on demand: SEP-2640 is explicit that a `resources/read` of a `SKILL.md` is not a load and confers no standing, so none of the SEP's host machinery is implemented. The `skills-http` fixture serves four skills over two pages, three of them deliberately non-conforming — without those the verification code is untestable. Phase 3 (CLI, TUI, `resources/directory/read`, paged mode) is #2248. Closes #2234 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018kfrH3uRNUM4JAk1reKtyY Signed-off-by: cliffhall <cliff@futurescale.com>
57 lines
2.5 KiB
TypeScript
57 lines
2.5 KiB
TypeScript
export { ManagedToolsState } from "./managedToolsState.js";
|
|
export type { ManagedToolsStateEventMap } from "./managedToolsState.js";
|
|
export { MessageLogState } from "./messageLogState.js";
|
|
export type {
|
|
MessageLogStateEventMap,
|
|
MessageLogStateOptions,
|
|
} from "./messageLogState.js";
|
|
export { FetchRequestLogState } from "./fetchRequestLogState.js";
|
|
export type {
|
|
FetchRequestLogStateEventMap,
|
|
FetchRequestLogStateOptions,
|
|
} from "./fetchRequestLogState.js";
|
|
export { PagedToolsState } from "./pagedToolsState.js";
|
|
export type {
|
|
PagedToolsStateEventMap,
|
|
LoadPageResult,
|
|
} from "./pagedToolsState.js";
|
|
export { StderrLogState } from "./stderrLogState.js";
|
|
export type {
|
|
StderrLogStateEventMap,
|
|
StderrLogStateOptions,
|
|
} from "./stderrLogState.js";
|
|
export { ManagedResourcesState } from "./managedResourcesState.js";
|
|
export type { ManagedResourcesStateEventMap } from "./managedResourcesState.js";
|
|
export { PagedResourcesState } from "./pagedResourcesState.js";
|
|
export type {
|
|
PagedResourcesStateEventMap,
|
|
LoadPageResult as PagedResourcesLoadPageResult,
|
|
} from "./pagedResourcesState.js";
|
|
export { ManagedResourceTemplatesState } from "./managedResourceTemplatesState.js";
|
|
export type { ManagedResourceTemplatesStateEventMap } from "./managedResourceTemplatesState.js";
|
|
export { PagedResourceTemplatesState } from "./pagedResourceTemplatesState.js";
|
|
export type {
|
|
PagedResourceTemplatesStateEventMap,
|
|
LoadPageResult as PagedResourceTemplatesLoadPageResult,
|
|
} from "./pagedResourceTemplatesState.js";
|
|
export { ManagedPromptsState } from "./managedPromptsState.js";
|
|
export type { ManagedPromptsStateEventMap } from "./managedPromptsState.js";
|
|
export { PagedPromptsState } from "./pagedPromptsState.js";
|
|
export type {
|
|
PagedPromptsStateEventMap,
|
|
LoadPageResult as PagedPromptsLoadPageResult,
|
|
} from "./pagedPromptsState.js";
|
|
export { ManagedRequestorTasksState } from "./managedRequestorTasksState.js";
|
|
export type { ManagedRequestorTasksStateEventMap } from "./managedRequestorTasksState.js";
|
|
export { PagedRequestorTasksState } from "./pagedRequestorTasksState.js";
|
|
export type {
|
|
PagedRequestorTasksStateEventMap,
|
|
LoadPageResult as PagedRequestorTasksLoadPageResult,
|
|
} from "./pagedRequestorTasksState.js";
|
|
export { ResourceSubscriptionsState } from "./resourceSubscriptionsState.js";
|
|
export type { ResourceSubscriptionsStateEventMap } from "./resourceSubscriptionsState.js";
|
|
export { ManagedSkillsState } from "./managedSkillsState.js";
|
|
export type {
|
|
ManagedSkillsStateEventMap,
|
|
SkillsPaginationState,
|
|
} from "./managedSkillsState.js";
|