"""MCP 서버 메인"""
import asyncio
from typing import Any, List
from mcp.server.models import InitializationOptions
from mcp.server import NotificationOptions, Server
from mcp.server.stdio import stdio_server
from mcp import types
from .tools import SearchDocsTool, SaveDocumentTool, GetDocumentTool, QAWithRedisTool
# MCP 서버 생성
server = Server("naver-search-docs")
# 등록된 도구들
TOOLS = [
SearchDocsTool,
SaveDocumentTool,
GetDocumentTool,
QAWithRedisTool,
]
@server.list_tools()
async def handle_list_tools() -> List[types.Tool]:
"""사용 가능한 도구 목록 반환"""
return [tool.get_tool_definition() for tool in TOOLS]
@server.call_tool()
async def handle_call_tool(
name: str, arguments: dict[str, Any]
) -> List[types.TextContent | types.ImageContent | types.EmbeddedResource]:
"""도구 호출 처리"""
# 도구 찾기
for tool in TOOLS:
if tool.get_tool_definition().name == name:
return await tool.execute(arguments)
raise ValueError(f"Unknown tool: {name}")
async def main():
"""MCP 서버 시작"""
async with stdio_server() as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
InitializationOptions(
server_name="naver-search-docs",
server_version="1.0.0",
capabilities=server.get_capabilities(
notification_options=NotificationOptions(),
experimental_capabilities={},
),
),
)
if __name__ == "__main__":
asyncio.run(main())