""" # Summary Utilities for working with MCP in the doc-forge CLI. """ from pathlib import Path import click from docforge.loaders import GriffeLoader, discover_module_paths from docforge.renderers import MCPRenderer from docforge.servers import MCPServer def generate_resources(module: str, project_name: str | None, out_dir: Path) -> None: """ Generate MCP documentation resources from a Python module. The function performs project introspection, builds the internal documentation model, and renders MCP-compatible JSON resources to the specified output directory. Args: module (str): Python module import path used as the entry point for documentation generation. project_name (Optional[str]): Optional override for the project name used in generated documentation metadata. out_dir (Path): Directory where MCP resources (index.json, nav.json, and module data) will be written. """ loader = GriffeLoader() discovered_paths = discover_module_paths(module) project = loader.load_project(discovered_paths, project_name) renderer = MCPRenderer() renderer.generate_sources(project, out_dir) def serve(module: str, mcp_root: Path) -> None: """ Start an MCP server for a pre-generated documentation bundle. The server exposes documentation resources such as project metadata, navigation structure, and module documentation through MCP endpoints. Args: module (str): Python module import path used to identify the served documentation instance. mcp_root (Path): Path to the directory containing the MCP documentation bundle (index.json, nav.json, and modules/). Raises: click.ClickException: If the MCP documentation bundle is missing required files or directories. """ if not mcp_root.exists(): raise click.ClickException(f"mcp_docs directory not found: {mcp_root}") required = [ mcp_root / "index.json", mcp_root / "nav.json", mcp_root / "modules", ] for path in required: if not path.exists(): raise click.ClickException(f"Invalid MCP bundle, missing: {path.name}") server = MCPServer( mcp_root=mcp_root, name=f"{module}-mcp", ) server.run()