76 lines
2.2 KiB
Python
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 = "6.6.6.78"
|
|
"""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) |