feat:架构重构

This commit is contained in:
2026-10-01 23:08:06 -07:00
parent b82dc93404
commit 68588d1f92
74 changed files with 1131 additions and 3492 deletions
+15 -8
View File
@@ -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[