mcp.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from __future__ import annotations
  2. from pydantic import ValidationError
  3. from quart import Blueprint, jsonify
  4. from app.api.v1.utils import ApiDependencies, LongArticlesMcpRequest
  5. from app.api.v1.utils import parse_json, validation_error_response
  6. from app.domains.mcp import LongArticlesMcp
  7. def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
  8. bp = Blueprint("mcp", __name__)
  9. @bp.route("/long_articles_mcp/<string:task_name>", methods=["POST"])
  10. async def long_articles_mcp(task_name: str):
  11. """MCP 交互接口
  12. POST /api/long_articles_mcp/<task_name>
  13. 请求体为 JSON,可选字段: page, page_size, sort_by, sort_order
  14. """
  15. # 1. 请求体校验
  16. try:
  17. req, _ = await parse_json(LongArticlesMcpRequest)
  18. except ValidationError as e:
  19. payload, status = validation_error_response(e)
  20. return jsonify(payload), status
  21. params = req.model_dump(exclude_none=True)
  22. # 2. 构造 MCP 入口并分发
  23. mcp = LongArticlesMcp(
  24. params=params,
  25. pool=deps.db,
  26. log_service=deps.log,
  27. config=deps.config,
  28. )
  29. result = await mcp.deal(task_name=task_name, params=params)
  30. # 3. deal() 已统一封装 {code, message, data},直接透传
  31. http_status = 200 if result.get("code") == 0 else result.get("code", 500)
  32. return jsonify(result), http_status
  33. return bp
  34. __all__ = ["create_mcp_bp"]