Coverage for aceflow_mcp_server/server.py: 73%
48 statements
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-02 16:56 +0800
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-02 16:56 +0800
1"""AceFlow MCP Server implementation using FastMCP framework."""
3import click
4try:
5 from fastmcp import FastMCP
6except ImportError:
7 # Mock implementation for testing
8 class FastMCP:
9 def __init__(self, name):
10 self.name = name
11 def add_tool(self, tool): pass
12 def add_resource(self, resource): pass
13 def add_prompt(self, prompt): pass
14 def run(self, host="localhost", port=8000, log_level="INFO"):
15 print(f"Mock MCP Server {self.name} running on {host}:{port}")
17from .tools import AceFlowTools
18from .resources import AceFlowResources
19from .prompts import AceFlowPrompts
22class AceFlowMCPServer:
23 """Main AceFlow MCP Server class."""
25 def __init__(self):
26 """Initialize the MCP server with all tools, resources, and prompts."""
27 self.mcp = FastMCP("AceFlow")
28 self.tools = AceFlowTools()
29 self.resources = AceFlowResources()
30 self.prompts = AceFlowPrompts()
32 self._register_tools()
33 self._register_resources()
34 self._register_prompts()
36 def _register_tools(self):
37 """Register all AceFlow tools."""
38 self.mcp.add_tool(self.tools.aceflow_init)
39 self.mcp.add_tool(self.tools.aceflow_stage)
40 self.mcp.add_tool(self.tools.aceflow_validate)
41 self.mcp.add_tool(self.tools.aceflow_template)
43 def _register_resources(self):
44 """Register all AceFlow resources."""
45 self.mcp.add_resource(self.resources.project_state)
46 self.mcp.add_resource(self.resources.workflow_config)
47 self.mcp.add_resource(self.resources.stage_guide)
49 def _register_prompts(self):
50 """Register all AceFlow prompts."""
51 self.mcp.add_prompt(self.prompts.workflow_assistant)
52 self.mcp.add_prompt(self.prompts.stage_guide)
54 def run(self, host: str = "localhost", port: int = 8000, log_level: str = "INFO"):
55 """Start the MCP server."""
56 self.mcp.run(host=host, port=port, log_level=log_level)
59@click.command()
60@click.option('--host', default='localhost', help='Host to bind to')
61@click.option('--port', default=8000, type=int, help='Port to bind to')
62@click.option('--log-level', default='INFO', help='Log level')
63@click.version_option(version="1.0.0")
64def main(host: str, port: int, log_level: str):
65 """Start AceFlow MCP Server."""
66 server = AceFlowMCPServer()
67 server.run(host=host, port=port, log_level=log_level)
70if __name__ == "__main__":
71 main()