|
@@ -5,7 +5,7 @@ from quart import Blueprint, jsonify
|
|
|
|
|
|
|
|
from app.api.v1.utils import ApiDependencies, LongArticlesMcpRequest
|
|
from app.api.v1.utils import ApiDependencies, LongArticlesMcpRequest
|
|
|
from app.api.v1.utils import parse_json, validation_error_response
|
|
from app.api.v1.utils import parse_json, validation_error_response
|
|
|
-from app.domains.mcp import LongArticleMCP
|
|
|
|
|
|
|
+from app.domains.mcp import deal, UnknownMcpTaskName
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
|
|
def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
|
|
@@ -13,12 +13,11 @@ def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
|
|
|
|
|
|
|
|
@bp.route("/long_articles_mcp/<string:task_name>", methods=["POST"])
|
|
@bp.route("/long_articles_mcp/<string:task_name>", methods=["POST"])
|
|
|
async def long_articles_mcp(task_name: str):
|
|
async def long_articles_mcp(task_name: str):
|
|
|
- """
|
|
|
|
|
- MCP 交互接口
|
|
|
|
|
|
|
+ """MCP 交互接口
|
|
|
|
|
|
|
|
- POST /api/long_articles_mcp/<task_name>
|
|
- POST /api/long_articles_mcp/<task_name>
|
|
|
- - 通过 task_name 分发到 LongArticleMCP 内对应的方法
|
|
|
|
|
- - 请求体为 JSON,可选字段如 limit、offset 等,由各 task 按需使用
|
|
|
|
|
|
|
+ - 通过 task_name 分发到 MCP 域内对应的方法
|
|
|
|
|
+ - 请求体为 JSON,可选字段如 page、page_size、sort_by、sort_order 等
|
|
|
"""
|
|
"""
|
|
|
try:
|
|
try:
|
|
|
req, _ = await parse_json(LongArticlesMcpRequest)
|
|
req, _ = await parse_json(LongArticlesMcpRequest)
|
|
@@ -26,15 +25,17 @@ def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
|
|
|
payload, status = validation_error_response(e)
|
|
payload, status = validation_error_response(e)
|
|
|
return jsonify(payload), status
|
|
return jsonify(payload), status
|
|
|
|
|
|
|
|
- # 使用校验后的模型转 dict,保证 limit/offset 等类型正确,且含 extra 透传字段
|
|
|
|
|
|
|
+ # 使用校验后的模型转 dict,保证类型正确,且含 extra 透传字段
|
|
|
params = req.model_dump(exclude_none=True)
|
|
params = req.model_dump(exclude_none=True)
|
|
|
|
|
|
|
|
- mcp = LongArticleMCP(pool=deps.db, log_service=deps.log)
|
|
|
|
|
- handler_map = {
|
|
|
|
|
- "get_decode_response": mcp.get_decode_response,
|
|
|
|
|
- }
|
|
|
|
|
- handler = handler_map.get(task_name)
|
|
|
|
|
- if handler is None:
|
|
|
|
|
|
|
+ try:
|
|
|
|
|
+ result = await deal(
|
|
|
|
|
+ task_name=task_name,
|
|
|
|
|
+ pool=deps.db,
|
|
|
|
|
+ log_service=deps.log,
|
|
|
|
|
+ params=params,
|
|
|
|
|
+ )
|
|
|
|
|
+ except UnknownMcpTaskName:
|
|
|
return (
|
|
return (
|
|
|
jsonify(
|
|
jsonify(
|
|
|
{
|
|
{
|
|
@@ -46,7 +47,6 @@ def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
|
|
|
404,
|
|
404,
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- result = await handler(params=params)
|
|
|
|
|
return jsonify({"code": 0, "message": "success", "data": result})
|
|
return jsonify({"code": 0, "message": "success", "data": result})
|
|
|
|
|
|
|
|
return bp
|
|
return bp
|