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. +