diff --git a/docs/docs.json b/docs/docs.json
index 5391ad2bc..61259d773 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -522,6 +522,16 @@
]
},
"python-sdk/fastmcp-server-providers-proxy",
+ {
+ "group": "skills",
+ "pages": [
+ "python-sdk/fastmcp-server-providers-skills-__init__",
+ "python-sdk/fastmcp-server-providers-skills-claude_provider",
+ "python-sdk/fastmcp-server-providers-skills-directory_provider",
+ "python-sdk/fastmcp-server-providers-skills-skill_provider",
+ "python-sdk/fastmcp-server-providers-skills-vendor_providers"
+ ]
+ },
"python-sdk/fastmcp-server-providers-wrapped_provider"
]
},
@@ -555,6 +565,8 @@
"python-sdk/fastmcp-server-transforms-__init__",
"python-sdk/fastmcp-server-transforms-enabled",
"python-sdk/fastmcp-server-transforms-namespace",
+ "python-sdk/fastmcp-server-transforms-prompts_as_tools",
+ "python-sdk/fastmcp-server-transforms-resources_as_tools",
"python-sdk/fastmcp-server-transforms-tool_transform",
"python-sdk/fastmcp-server-transforms-version_filter"
]
diff --git a/docs/python-sdk/fastmcp-server-providers-skills-__init__.mdx b/docs/python-sdk/fastmcp-server-providers-skills-__init__.mdx
new file mode 100644
index 000000000..c3f296111
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-providers-skills-__init__.mdx
@@ -0,0 +1,32 @@
+---
+title: __init__
+sidebarTitle: __init__
+---
+
+# `fastmcp.server.providers.skills`
+
+
+Skills providers for exposing agent skills as MCP resources.
+
+This module provides a two-layer architecture for skill discovery:
+
+- **SkillProvider**: Handles a single skill folder, exposing its files as resources.
+- **SkillsDirectoryProvider**: Scans a directory, creates a SkillProvider per folder.
+- **Vendor providers**: Platform-specific providers for Claude, Cursor, VS Code, Codex,
+ Gemini, Goose, Copilot, and OpenCode.
+
+Example:
+ ```python
+ from pathlib import Path
+ from fastmcp import FastMCP
+ from fastmcp.server.providers.skills import ClaudeSkillsProvider, SkillProvider
+
+ mcp = FastMCP("Skills Server")
+
+ # Load a single skill
+ mcp.add_provider(SkillProvider(Path.home() / ".claude/skills/pdf-processing"))
+
+ # Or load all skills in a directory
+ mcp.add_provider(ClaudeSkillsProvider()) # Uses ~/.claude/skills/
+ ```
+
diff --git a/docs/python-sdk/fastmcp-server-providers-skills-claude_provider.mdx b/docs/python-sdk/fastmcp-server-providers-skills-claude_provider.mdx
new file mode 100644
index 000000000..10e69da0b
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-providers-skills-claude_provider.mdx
@@ -0,0 +1,25 @@
+---
+title: claude_provider
+sidebarTitle: claude_provider
+---
+
+# `fastmcp.server.providers.skills.claude_provider`
+
+
+Claude-specific skills provider for Claude Code skills.
+
+## Classes
+
+### `ClaudeSkillsProvider`
+
+
+Provider for Claude Code skills from ~/.claude/skills/.
+
+A convenience subclass that sets the default root to Claude's skills location.
+
+**Args:**
+- `reload`: If True, re-scan on every request. Defaults to False.
+- `supporting_files`: How supporting files are exposed\:
+- "template"\: Accessed via ResourceTemplate, hidden from list_resources().
+- "resources"\: Each file exposed as individual Resource in list_resources().
+
diff --git a/docs/python-sdk/fastmcp-server-providers-skills-directory_provider.mdx b/docs/python-sdk/fastmcp-server-providers-skills-directory_provider.mdx
new file mode 100644
index 000000000..9353cf2ee
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-providers-skills-directory_provider.mdx
@@ -0,0 +1,31 @@
+---
+title: directory_provider
+sidebarTitle: directory_provider
+---
+
+# `fastmcp.server.providers.skills.directory_provider`
+
+
+Directory scanning provider for discovering multiple skills.
+
+## Classes
+
+### `SkillsDirectoryProvider`
+
+
+Provider that scans directories and creates a SkillProvider per skill folder.
+
+This extends AggregateProvider to combine multiple SkillProviders into one.
+Each subdirectory containing a main file (default: SKILL.md) becomes a skill.
+Can scan multiple root directories - if a skill name appears in multiple roots,
+the first one found wins.
+
+**Args:**
+- `roots`: Root directory(ies) containing skill folders. Can be a single path
+or a sequence of paths.
+- `reload`: If True, re-discover skills on each request. Defaults to False.
+- `main_file_name`: Name of the main skill file. Defaults to "SKILL.md".
+- `supporting_files`: How supporting files are exposed in child SkillProviders\:
+- "template"\: Accessed via ResourceTemplate, hidden from list_resources().
+- "resources"\: Each file exposed as individual Resource in list_resources().
+
diff --git a/docs/python-sdk/fastmcp-server-providers-skills-skill_provider.mdx b/docs/python-sdk/fastmcp-server-providers-skills-skill_provider.mdx
new file mode 100644
index 000000000..185b8a0a4
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-providers-skills-skill_provider.mdx
@@ -0,0 +1,109 @@
+---
+title: skill_provider
+sidebarTitle: skill_provider
+---
+
+# `fastmcp.server.providers.skills.skill_provider`
+
+
+Basic skill provider for handling a single skill folder.
+
+## Classes
+
+### `SkillResource`
+
+
+A resource representing a skill's main file or manifest.
+
+
+**Methods:**
+
+#### `read`
+
+```python
+read(self) -> str | bytes | ResourceResult
+```
+
+Read the resource content.
+
+
+### `SkillFileTemplate`
+
+
+A template for accessing files within a skill.
+
+
+**Methods:**
+
+#### `read`
+
+```python
+read(self, arguments: dict[str, Any]) -> str | bytes | ResourceResult
+```
+
+Read a file from the skill directory.
+
+
+#### `create_resource`
+
+```python
+create_resource(self, uri: str, params: dict[str, Any]) -> Resource
+```
+
+Create a resource for the given URI and parameters.
+
+Note: This is not typically used since _read() handles file reading directly.
+Provided for compatibility with the ResourceTemplate interface.
+
+
+### `SkillFileResource`
+
+
+A resource representing a specific file within a skill.
+
+
+**Methods:**
+
+#### `read`
+
+```python
+read(self) -> str | bytes | ResourceResult
+```
+
+Read the file content.
+
+
+### `SkillProvider`
+
+
+Provider that exposes a single skill folder as MCP resources.
+
+Each skill folder must contain a main file (default: SKILL.md) and may
+contain additional supporting files.
+
+Exposes:
+- A Resource for the main file (skill://{name}/SKILL.md)
+- A Resource for the synthetic manifest (skill://{name}/_manifest)
+- Supporting files via ResourceTemplate or Resources (configurable)
+
+**Args:**
+- `skill_path`: Path to the skill directory.
+- `main_file_name`: Name of the main skill file. Defaults to "SKILL.md".
+- `supporting_files`: How supporting files (everything except main file and
+manifest) are exposed to clients\:
+- "template"\: Accessed via ResourceTemplate, hidden from list_resources().
+ Clients discover files by reading the manifest first.
+- "resources"\: Each file exposed as individual Resource in list_resources().
+ Full enumeration upfront.
+
+
+**Methods:**
+
+#### `skill_info`
+
+```python
+skill_info(self) -> SkillInfo
+```
+
+Get the loaded skill info.
+
diff --git a/docs/python-sdk/fastmcp-server-providers-skills-vendor_providers.mdx b/docs/python-sdk/fastmcp-server-providers-skills-vendor_providers.mdx
new file mode 100644
index 000000000..b26409c1b
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-providers-skills-vendor_providers.mdx
@@ -0,0 +1,56 @@
+---
+title: vendor_providers
+sidebarTitle: vendor_providers
+---
+
+# `fastmcp.server.providers.skills.vendor_providers`
+
+
+Vendor-specific skills providers for various AI coding platforms.
+
+## Classes
+
+### `CursorSkillsProvider`
+
+
+Cursor skills from ~/.cursor/skills/.
+
+
+### `VSCodeSkillsProvider`
+
+
+VS Code skills from ~/.copilot/skills/.
+
+
+### `CodexSkillsProvider`
+
+
+Codex skills from /etc/codex/skills/ and ~/.codex/skills/.
+
+Scans both system-level and user-level directories. System skills take
+precedence if duplicates exist.
+
+
+### `GeminiSkillsProvider`
+
+
+Gemini skills from ~/.gemini/skills/.
+
+
+### `GooseSkillsProvider`
+
+
+Goose skills from ~/.config/agents/skills/.
+
+
+### `CopilotSkillsProvider`
+
+
+GitHub Copilot skills from ~/.copilot/skills/.
+
+
+### `OpenCodeSkillsProvider`
+
+
+OpenCode skills from ~/.config/opencode/skills/.
+
diff --git a/docs/python-sdk/fastmcp-server-transforms-prompts_as_tools.mdx b/docs/python-sdk/fastmcp-server-transforms-prompts_as_tools.mdx
new file mode 100644
index 000000000..97febdd82
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-transforms-prompts_as_tools.mdx
@@ -0,0 +1,59 @@
+---
+title: prompts_as_tools
+sidebarTitle: prompts_as_tools
+---
+
+# `fastmcp.server.transforms.prompts_as_tools`
+
+
+Transform that exposes prompts as tools.
+
+This transform generates tools for listing and getting prompts, enabling
+clients that only support tools to access prompt functionality.
+
+Example:
+ ```python
+ from fastmcp import FastMCP
+ from fastmcp.server.transforms import PromptsAsTools
+
+ mcp = FastMCP("Server")
+ mcp.add_transform(PromptsAsTools(mcp))
+ # Now has list_prompts and get_prompt tools
+ ```
+
+
+## Classes
+
+### `PromptsAsTools`
+
+
+Transform that adds tools for listing and getting prompts.
+
+Generates two tools:
+- `list_prompts`: Lists all prompts from the provider
+- `get_prompt`: Gets a specific prompt with optional arguments
+
+The transform captures a provider reference at construction and queries it
+for prompts when the generated tools are called. When used with FastMCP,
+the provider's auth and visibility filtering is automatically applied.
+
+
+**Methods:**
+
+#### `list_tools`
+
+```python
+list_tools(self, tools: Sequence[Tool]) -> Sequence[Tool]
+```
+
+Add prompt tools to the tool list.
+
+
+#### `get_tool`
+
+```python
+get_tool(self, name: str, call_next: GetToolNext) -> Tool | None
+```
+
+Get a tool by name, including generated prompt tools.
+
diff --git a/docs/python-sdk/fastmcp-server-transforms-resources_as_tools.mdx b/docs/python-sdk/fastmcp-server-transforms-resources_as_tools.mdx
new file mode 100644
index 000000000..702cecb4d
--- /dev/null
+++ b/docs/python-sdk/fastmcp-server-transforms-resources_as_tools.mdx
@@ -0,0 +1,59 @@
+---
+title: resources_as_tools
+sidebarTitle: resources_as_tools
+---
+
+# `fastmcp.server.transforms.resources_as_tools`
+
+
+Transform that exposes resources as tools.
+
+This transform generates tools for listing and reading resources, enabling
+clients that only support tools to access resource functionality.
+
+Example:
+ ```python
+ from fastmcp import FastMCP
+ from fastmcp.server.transforms import ResourcesAsTools
+
+ mcp = FastMCP("Server")
+ mcp.add_transform(ResourcesAsTools(mcp))
+ # Now has list_resources and read_resource tools
+ ```
+
+
+## Classes
+
+### `ResourcesAsTools`
+
+
+Transform that adds tools for listing and reading resources.
+
+Generates two tools:
+- `list_resources`: Lists all resources and templates from the provider
+- `read_resource`: Reads a resource by URI
+
+The transform captures a provider reference at construction and queries it
+for resources when the generated tools are called. When used with FastMCP,
+the provider's auth and visibility filtering is automatically applied.
+
+
+**Methods:**
+
+#### `list_tools`
+
+```python
+list_tools(self, tools: Sequence[Tool]) -> Sequence[Tool]
+```
+
+Add resource tools to the tool list.
+
+
+#### `get_tool`
+
+```python
+get_tool(self, name: str, call_next: GetToolNext) -> Tool | None
+```
+
+Get a tool by name, including generated resource tools.
+