Files
lang-agent/lang_agent/mcp_server.py
Therainclouds bb91a68c78 feat: 添加项目文档和配置更新
docs: 完善README文档结构和内容
refactor: 更新配置类注释和文档字符串
style: 统一代码格式和命名规范
fix: 修正MCP服务器配置和依赖项
2025-11-07 15:50:22 +08:00

76 lines
2.2 KiB
Python

# https://gofastmcp.com/patterns/decorating-methods
from dataclasses import dataclass, field, is_dataclass
from typing import Type, Literal
import tyro
from fastmcp import FastMCP
from fastapi.middleware.cors import CORSMiddleware
from fastmcp.tools.tool import FunctionTool
from loguru import logger
from lang_agent.rag.simple import SimpleRagConfig
from lang_agent.base import LangToolBase
from lang_agent.config import InstantiateConfig, ToolConfig
from lang_agent.dummy.calculator import Calculator, CalculatorConfig
from lang_agent.tool_manager import ToolManager, ToolManagerConfig
# from catering_end.lang_tool import CartToolConfig, CartTool
@tyro.conf.configure(tyro.conf.SuppressFixed)
@dataclass
class MCPServerConfig(InstantiateConfig):
_target: Type = field(default_factory=lambda: MCPServer)
server_name:str = "langserver"
host: str = "127.0.0.1"
"""host of server"""
port: int = 50051
"""port"""
transport:Literal["stdio", "sse", "streamable-http"] = "streamable-http"
"""transport method"""
toolmanager_config: ToolManagerConfig = field(default_factory=ToolManagerConfig)
class MCPServer:
def __init__(self, config: MCPServerConfig):
self.config = config
self.mcp = FastMCP(self.config.server_name)
self.populate_modules()
self.register_mcp_functions()
def populate_modules(self):
self.tool_manager:ToolManager = self.config.toolmanager_config.setup()
def register_mcp_functions(self):
fncs = self.tool_manager.get_tool_fncs()
for fnc in fncs:
self.mcp.tool(fnc)
def run(self):
# 获取FastAPI应用实例
app = self.mcp.http_app()
# 配置CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
self.mcp.run(transport=self.config.transport,
host=self.config.host,
port=self.config.port)
if __name__ == "__main__":
conf:MCPServer = MCPServerConfig().setup()
tool_conf = conf._get_tool_config()
for e in tool_conf:
print(e)