chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
from main import run_doc_flow
|
||||
|
||||
# create FastMCP instance
|
||||
mcp = FastMCP("doc-writer")
|
||||
|
||||
@mcp.tool()
|
||||
def write_documentation(repo_url: str) -> str:
|
||||
"""
|
||||
Generates the documentation for the given GitHub repository URL.
|
||||
Notify the user when the generation is complete.
|
||||
|
||||
Args:
|
||||
repo_url (str): The URL of the GitHub repo.
|
||||
|
||||
Returns:
|
||||
str: Returns a message when the documentation is completed successfully.
|
||||
"""
|
||||
try:
|
||||
if not repo_url.startswith(("http://", "https://")):
|
||||
raise ValueError("Invalid repository URL format")
|
||||
|
||||
run_doc_flow(repo_url)
|
||||
return f"Successfully generated documentation for repo {repo_url}"
|
||||
|
||||
except Exception as e:
|
||||
return f"Failed to generate documentation for repo {repo_url} due to {e}"
|
||||
|
||||
@mcp.tool()
|
||||
def list_docs() -> str:
|
||||
"""
|
||||
Lists the documentation files that are generated successfully.
|
||||
|
||||
Args: None
|
||||
|
||||
Returns:
|
||||
str: Returns a nicely formatted string of generated doc files.
|
||||
"""
|
||||
docs_dir = Path("docs")
|
||||
if not docs_dir.exists():
|
||||
raise ValueError("No documentation files found")
|
||||
|
||||
output_lines = ["Generated documentation files:"]
|
||||
for doc_file in docs_dir.glob("*.mdx"):
|
||||
output_lines.append(f"- docs/{doc_file.name}")
|
||||
return "\n".join(output_lines)
|
||||
|
||||
@mcp.tool()
|
||||
def view_content(file_path: str) -> str:
|
||||
"""
|
||||
Displays the content of a generated documentation file.
|
||||
|
||||
Args:
|
||||
file_path (str): Relative path to the documentation file (e.g., 'docs/overview.mdx')
|
||||
|
||||
Returns:
|
||||
str: Content of the file or error message.
|
||||
"""
|
||||
try:
|
||||
if not file_path.startswith("docs/") or "../" in file_path:
|
||||
raise ValueError("Invalid file path")
|
||||
|
||||
path = Path(file_path)
|
||||
if not path.exists():
|
||||
raise FileNotFoundError(f"File {file_path} not found")
|
||||
if not path.is_file():
|
||||
raise ValueError(f"Path {file_path} is not a file")
|
||||
if path.suffix not in {".mdx", ".md"}:
|
||||
raise ValueError("Only documentation files (.mdx/.md) can be viewed")
|
||||
|
||||
return path.read_text(encoding="utf-8")
|
||||
|
||||
except Exception as e:
|
||||
return f"Failed to view documentation: {str(e)}"
|
||||
|
||||
# Run the server
|
||||
if __name__ == "__main__":
|
||||
mcp.run(transport='sse')
|
||||
Reference in New Issue
Block a user