You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add a filesystem backed provider for the Skills extension #3683
The Python SDK supports the Skills protocol, but users still need to implement filesystem discovery and file serving themselves when they want to expose skills stored on disk.
Proposed Solution
It would be useful to have a built-in filesystem backed provider that discovers skills, parses SKILL.md, generates resource manifests, and serves skill files using the existing Skills extension.
This could be an optional helper, without changing the core protocol implementation.
Expected outcome
Python SDK users should be able to expose a directory of Agent Skills through MCP without implementing their own discovery, manifest-generation, and file-serving logic.
A few architectural considerations for designing a built-in FilesystemSkillProvider on top of the SEP-2640 Skills extension (#3485):
Dependency Isolation (Zero New Core Dependencies):
A key constraint in Add Skills extension #3485 was avoiding a required YAML dependency in core SDK types. A filesystem provider needs to parse SKILL.md frontmatter to build the manifest. To keep the core lightweight, the provider should either:
Accept an optional frontmatter_parser: Callable[[str], dict[str, Any]] dependency injection, or
Ship under an optional extra (mcp[skills-fs]) leveraging pyyaml.
Strict Boundary Sandboxing & Canonical Resolution:
Serving files directly from disk over resources/read requires airtight directory boundary enforcement:
Canonical path resolution via pathlib.Path.resolve() to prevent symlink escapes outside the designated skills root.
Manifest Caching & Lazy Invalidation:
Computing sha256 digests across skill resources (scripts, templates, references) on every skills/list or skills/get introduces avoidable I/O latency. A high-throughput provider should maintain an in-memory manifest cache keyed by directory (mtime, size) snapshots, re-hashing only when file metadata changes.
FastMCP / Extension Mounting:
To fit cleanly into existing server workflows, the provider can expose a helper method that registers both the resource handlers and the Skills extension:
Activity
udbhav-shrinet commentedon Oct 12, 2026
A few architectural considerations for designing a built-in
FilesystemSkillProvideron top of the SEP-2640Skillsextension (#3485):Dependency Isolation (Zero New Core Dependencies):
A key constraint in Add
Skillsextension #3485 was avoiding a required YAML dependency in core SDK types. A filesystem provider needs to parseSKILL.mdfrontmatter to build the manifest. To keep the core lightweight, the provider should either:frontmatter_parser: Callable[[str], dict[str, Any]]dependency injection, ormcp[skills-fs]) leveragingpyyaml.Strict Boundary Sandboxing & Canonical Resolution:
Serving files directly from disk over
resources/readrequires airtight directory boundary enforcement:pathlib.Path.resolve()to prevent symlink escapes outside the designated skills root.Manifest Caching & Lazy Invalidation:
Computing sha256 digests across skill resources (scripts, templates, references) on every
skills/listorskills/getintroduces avoidable I/O latency. A high-throughput provider should maintain an in-memory manifest cache keyed by directory(mtime, size)snapshots, re-hashing only when file metadata changes.FastMCP / Extension Mounting:
To fit cleanly into existing server workflows, the provider can expose a helper method that registers both the resource handlers and the
Skillsextension:Happy to help draft an implementation or spec out the provider interface if maintainers are aligned on introducing this helper.