Swagger-style documentation generator for FastMCP servers
Project description
FastMCP Docs
Swagger-style documentation generator for FastMCP servers. Automatically creates beautiful, interactive API documentation from your FastMCP tools.
Features
- 🎨 Swagger-Style UI - Clean, modern interface similar to Swagger UI
- 🔍 Search Functionality - Quickly find tools by name, description, or tags
- 🏷️ Tag-Based Organization - Tools grouped by tags for easy navigation
- 📝 Auto-Generated - Extracts documentation from your FastMCP tools automatically
- ⚙️ Highly Configurable - Customize title, description, links, and more
- 🚀 Easy Integration - Simple 3-line setup
- 📚 OpenAPI Compatible - Generates OpenAPI 3.1.0 schema
- 🔄 Version Support - Compatible with both FastMCP v2 and v3
Installation
pip install fastmcp-docs
Quick Start
from fastmcp import FastMCP
from fastmcp_docs import FastMCPDocs
import asyncio
# Create your FastMCP server
mcp = FastMCP("My MCP Server")
# Register your tools
@mcp.tool(tags=["example"])
def hello_world(name: str = "World"):
"""Say hello to someone"""
return f"Hello, {name}!"
# Setup documentation (3 lines!)
docs = FastMCPDocs(mcp, title="My MCP Tools")
asyncio.run(docs.setup())
# Run server
mcp.run()
That's it! Your documentation is now available at:
- UI: http://localhost:8000/docs
- OpenAPI: http://localhost:8000/openapi.json
- Tools API: http://localhost:8000/api/tools
Configuration
Basic Configuration
from fastmcp_docs import FastMCPDocs
docs = FastMCPDocs(
mcp=mcp,
title="My MCP Tools",
version="1.0.0",
description="API documentation for my awesome MCP server",
base_url="https://api.example.com",
)
Adding Documentation Links
docs = FastMCPDocs(
mcp=mcp,
title="My MCP Tools",
docs_links=[
{"text": "GitHub Repository", "url": "https://github.com/..."},
{"text": "User Guide", "url": "https://docs.example.com"},
{"text": "API Reference", "url": "https://api.example.com/reference"}
]
)
Customizing the Favicon
# Use default favicon (green circle with M)
docs = FastMCPDocs(mcp, title="My Tools")
# Use custom favicon URL
docs = FastMCPDocs(
mcp,
title="My Tools",
favicon_url="https://example.com/my-icon.ico"
)
# Use local favicon file
docs = FastMCPDocs(
mcp,
title="My Tools",
favicon_url="/static/favicon.png"
)
Advanced Configuration
from fastmcp_docs import FastMCPDocs, FastMCPDocsConfig, DocsLink
# Create custom configuration
config = FastMCPDocsConfig(
title="My MCP Tools",
version="2.0.0",
description="Advanced API documentation",
base_url="https://api.example.com",
docs_links=[
DocsLink(text="GitHub", url="https://github.com/..."),
DocsLink(text="Docs", url="https://docs.example.com")
],
page_title_emoji="🤖",
favicon_url="https://example.com/favicon.ico",
# Customize route paths
api_tools_route="/api/tools",
openapi_route="/openapi.json",
docs_ui_route="/docs",
# OpenAPI settings
openapi_version="3.1.0",
openapi_servers=[
{"url": "https://api.example.com", "description": "Production"},
{"url": "https://staging.example.com", "description": "Staging"}
],
# Options
enable_cors=True,
verbose=True
)
# Use custom config
docs = FastMCPDocs(mcp, config=config)
Adding Descriptions to Tool Parameters
To get parameter descriptions in the documentation, use type Annotated:
from typing import Annotated
@mcp.tool(tags=["greetings"])
def greet(
name: Annotated[str, "Name of the person to greet"],
greeting: Annotated[str, "Greeting to use"] = "Hello"
) -> str:
"""Greet someone with a custom message"""
return f"{greeting}, {name}!"
Complete Example
from fastmcp import FastMCP
from fastmcp_docs import FastMCPDocs
from typing import Annotated
import asyncio
# Create server
mcp = FastMCP("My MCP Server")
@mcp.tool(tags=["deployment"], annotations={"title": "Deploy Application"})
def deploy(
environment: Annotated[str, "Target environment (dev, staging, prod)"],
version: Annotated[str, "Version to deploy"],
dry_run: Annotated[bool = "Perform dry run without actual deployment"] = False
) -> str:
"""Deploy application to specified environment
This tool deploys the application to the target environment
with the specified version. Use dry_run to test without deploying.
"""
if dry_run:
return f"DRY RUN: Would deploy v{version} to {environment}"
return f"Deployed v{version} to {environment}"
# Setup documentation
docs = FastMCPDocs(
mcp=mcp,
title="My FastMCP Tools",
version="1.0.0",
description="This is my FastMCP Tools Documention",
base_url="https://mcp.example.com",
page_title_emoji="🛠️",
docs_links=[
{"text": "Tools Guide", "url": "https://docs.example.com/tools-guide"}
]
)
# Run setup
asyncio.run(docs.setup())
# Start server
if __name__ == "__main__":
mcp.run(transport="sse", host="0.0.0.0", port=8000)
API Routes
FastMCP Docs automatically creates the following routes:
| Route | Description |
|---|---|
/docs |
Interactive Swagger-style UI |
/openapi.json |
OpenAPI 3.1.0 schema |
/api/tools |
List all tools with metadata |
/api/tools/{tool_name} |
Get specific tool details |
Development
Local Installation
# Clone repository
git clone https://github.com/orco82/fastmcp-docs.git
cd fastmcp-docs
# Install in development mode
pip install -e ".[dev]"
Running Tests
pytest
Code Formatting
black fastmcp_docs/
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
Support
For issues and questions:
- GitHub Issues: https://github.com/orco82/fastmcp-docs/issues
- Documentation: https://github.com/orco82/fastmcp-docs/blob/main/README.md
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastmcp_docs-1.0.0.tar.gz.
File metadata
- Download URL: fastmcp_docs-1.0.0.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a874f1d659b1e112bd6f6ce9969a494364f2217fabf41c180c4785cba26d146d
|
|
| MD5 |
0a24a8b398cc861203777519871d9ad7
|
|
| BLAKE2b-256 |
664bedd0a230d9496404a0057c0ac146dc7ec665557cb62eb807f4345fec5dce
|
File details
Details for the file fastmcp_docs-1.0.0-py3-none-any.whl.
File metadata
- Download URL: fastmcp_docs-1.0.0-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdaffd2c09b39fb2e77f0871c15f5094f2c7026dc0b701dc03cb71ec7392f3ec
|
|
| MD5 |
c810cfcf18ad6706e4065782ea2a6ed5
|
|
| BLAKE2b-256 |
a8300e8cd27f4bc98338e281793c332dd6fd4ee3d97e65f5564a4638986666ee
|