feat:架构重构
This commit is contained in:
@@ -1,15 +1,14 @@
|
||||
"""物料字段 MCP 服务:只给 agent 的模型查询组件有哪些字段、字段含义和可取值
|
||||
"""物料 MCP 服务:给模型查询组件目录、物料默认配置和字段定义
|
||||
|
||||
只监听本机,由应用启动时拉起,不对外暴露;查询逻辑在 app.resources.material_fields,
|
||||
只监听本机,由应用按 mcp_servers.json 拉起,不对外暴露;查询逻辑在 app.resources.material_fields,
|
||||
动作校验在主进程直接调用同一套逻辑,这里只是给模型使用的入口
|
||||
|
||||
单独运行:uv run python -X utf8 -m mcp_servers.material_server
|
||||
单独运行:uv run python -X utf8 -m mcp_servers.material_server(端口取 PORT,默认 8201)
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
from typing import Annotated, Any
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
from loguru import logger
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
@@ -21,13 +20,12 @@ from app.resources import material_fields
|
||||
from app.schemas.component_resource import ComponentCatalog
|
||||
from app.services.material_mongo import MongoMaterialRepository
|
||||
|
||||
_target = urlsplit(settings.mcp_material_url)
|
||||
mcp = FastMCP(
|
||||
"materials",
|
||||
host="127.0.0.1",
|
||||
# 由应用拉起时通过 PORT 传入,单独运行时取配置地址中的端口
|
||||
port=int(os.environ.get("PORT") or _target.port or 8201),
|
||||
streamable_http_path=_target.path or "/mcp",
|
||||
# 由应用拉起时通过 PORT 传入,单独运行时默认 8201
|
||||
port=int(os.environ.get("PORT") or 8201),
|
||||
streamable_http_path="/mcp",
|
||||
# 工具只读且无会话状态,每次调用独立处理
|
||||
stateless_http=True,
|
||||
)
|
||||
@@ -46,6 +44,15 @@ def _require_catalog() -> ComponentCatalog:
|
||||
return _catalog
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def list_components() -> dict[str, Any]:
|
||||
"""列出可以新增的组件:key、type、名称、用途和默认宽高
|
||||
|
||||
新建大屏、新增组件或更换类型时,先从这里选类型,再用 get_component_materials 查看默认配置
|
||||
"""
|
||||
return material_fields.list_components(_require_catalog())
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_component_materials(
|
||||
component_types: Annotated[
|
||||
|
||||
Reference in New Issue
Block a user