initial mcp server setup
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
"""
|
||||
Modular MCP Server Implementation
|
||||
"""
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
from typing import Optional, List
|
||||
from .tools.tool_registry import ServerToolRegistry
|
||||
from .prompts.prompt_registry import ServerPromptRegistry
|
||||
from .resources.resource_registry import ServerResourceRegistry
|
||||
|
||||
|
||||
class ModularMCPServer:
|
||||
"""Modular MCP Server that automatically discovers and registers tools, prompts, and resources"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
host: str = "0.0.0.0",
|
||||
port: int = 8050,
|
||||
stateless_http: bool = True,
|
||||
tools_directory: Optional[str] = None,
|
||||
prompts_directory: Optional[str] = None,
|
||||
resources_directory: Optional[str] = None
|
||||
):
|
||||
self.name = name
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.stateless_http = stateless_http
|
||||
|
||||
# Initialize registries
|
||||
self.tool_registry = ServerToolRegistry(tools_directory)
|
||||
self.prompt_registry = ServerPromptRegistry(prompts_directory)
|
||||
self.resource_registry = ServerResourceRegistry(resources_directory)
|
||||
|
||||
# Create FastMCP server
|
||||
self.mcp = FastMCP(
|
||||
name=name,
|
||||
host=host,
|
||||
port=port,
|
||||
stateless_http=stateless_http
|
||||
)
|
||||
|
||||
self._initialized = False
|
||||
|
||||
async def initialize(self) -> None:
|
||||
"""Initialize the server and register all components"""
|
||||
if self._initialized:
|
||||
return
|
||||
|
||||
print(f"Initializing {self.name} server...")
|
||||
|
||||
# Discover and register tools
|
||||
print("Discovering tools...")
|
||||
self.tool_registry.register_tools_with_server(self.mcp)
|
||||
tool_count = len(self.tool_registry.get_all_tools())
|
||||
print(f"Registered {tool_count} tools")
|
||||
|
||||
# Discover and register prompts
|
||||
print("Discovering prompts...")
|
||||
self.prompt_registry.register_prompts_with_server(self.mcp)
|
||||
prompt_count = len(self.prompt_registry.get_all_prompts())
|
||||
print(f"Registered {prompt_count} prompts")
|
||||
|
||||
# Discover and register resources
|
||||
print("Discovering resources...")
|
||||
self.resource_registry.register_resources_with_server(self.mcp)
|
||||
resource_count = len(self.resource_registry.get_all_resources())
|
||||
print(f"Registered {resource_count} resources")
|
||||
|
||||
self._initialized = True
|
||||
print(f"Server initialization complete!")
|
||||
|
||||
def run(self, transport: str = "stdio") -> None:
|
||||
"""Run the server with the specified transport"""
|
||||
if not self._initialized:
|
||||
import asyncio
|
||||
asyncio.run(self.initialize())
|
||||
|
||||
print(f"Starting {self.name} server with {transport} transport...")
|
||||
self.mcp.run(transport=transport)
|
||||
|
||||
def get_server_info(self) -> dict:
|
||||
"""Get information about the server and its components"""
|
||||
return {
|
||||
"name": self.name,
|
||||
"host": self.host,
|
||||
"port": self.port,
|
||||
"tools": {
|
||||
"count": len(self.tool_registry.get_all_tools()),
|
||||
"names": self.tool_registry.get_tool_names()
|
||||
},
|
||||
"prompts": {
|
||||
"count": len(self.prompt_registry.get_all_prompts()),
|
||||
"names": self.prompt_registry.get_prompt_names()
|
||||
},
|
||||
"resources": {
|
||||
"count": len(self.resource_registry.get_all_resources()),
|
||||
"uris": self.resource_registry.get_resource_uris()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user