from __future__ import annotations from pydantic import ValidationError from quart import Blueprint, jsonify from app.api.v1.utils import ApiDependencies, LongArticlesMcpRequest from app.api.v1.utils import parse_json, validation_error_response from app.domains.mcp import LongArticlesMcp def create_mcp_bp(deps: ApiDependencies) -> Blueprint: bp = Blueprint("mcp", __name__) @bp.route("/long_articles_mcp/", methods=["POST"]) async def long_articles_mcp(task_name: str): """MCP 交互接口 POST /api/long_articles_mcp/ 请求体为 JSON,可选字段: page, page_size, sort_by, sort_order """ # 1. 请求体校验 try: req, _ = await parse_json(LongArticlesMcpRequest) except ValidationError as e: payload, status = validation_error_response(e) return jsonify(payload), status params = req.model_dump(exclude_none=True) # 2. 构造 MCP 入口并分发 mcp = LongArticlesMcp( params=params, pool=deps.db, log_service=deps.log, config=deps.config, ) result = await mcp.deal(task_name=task_name, params=params) # 3. deal() 已统一封装 {code, message, data},直接透传 http_status = 200 if result.get("code") == 0 else result.get("code", 500) return jsonify(result), http_status return bp __all__ = ["create_mcp_bp"]