76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Terminal DHR MCP Skill Package
|
|
"""
|
|
|
|
import asyncio
|
|
import logging
|
|
from mcp.server import Server
|
|
from mcp.server.stdio import stdio_server
|
|
from mcp.types import (
|
|
CallToolRequest,
|
|
CallToolResult,
|
|
ListToolsRequest,
|
|
ListToolsResult,
|
|
)
|
|
from .tools import handle_list_tools, handle_call_tool, tools
|
|
from .config import Config
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=getattr(logging, Config.LOG_LEVEL),
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class DhrMCPServer:
|
|
"""Terminal DHR MCP Server"""
|
|
|
|
def __init__(self):
|
|
self.server = Server("terminal-dhr-mcp")
|
|
|
|
# Register handlers
|
|
self._register_handlers()
|
|
|
|
def _register_handlers(self):
|
|
"""Register MCP handlers"""
|
|
|
|
@self.server.list_tools()
|
|
async def list_tools():
|
|
logger.info("Received tool list request")
|
|
return tools # 直接返回工具列表
|
|
|
|
@self.server.call_tool()
|
|
async def call_tool(name: str, arguments: dict):
|
|
logger.info(f"Received tool call request: {name}")
|
|
result = await handle_call_tool(name, arguments)
|
|
return result.content # 直接返回内容列表
|
|
|
|
async def _main():
|
|
"""Main async function"""
|
|
logger.info("Starting terminal-dhr-mcp server...")
|
|
|
|
# Create server instance
|
|
server = DhrMCPServer()
|
|
|
|
# Start stdio server
|
|
async with stdio_server() as (read_stream, write_stream):
|
|
logger.info("MCP server started, waiting for connections...")
|
|
await server.server.run(
|
|
read_stream,
|
|
write_stream,
|
|
server.server.create_initialization_options()
|
|
)
|
|
|
|
def main():
|
|
"""Main entry point for the package"""
|
|
try:
|
|
asyncio.run(_main())
|
|
except KeyboardInterrupt:
|
|
logger.info("Server interrupted by user")
|
|
except Exception as e:
|
|
logger.error(f"Server runtime error: {e}")
|
|
raise
|
|
|
|
if __name__ == "__main__":
|
|
main() |