Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/apps/chat/models/chat_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ class McpQuestion(BaseModel):
token: str = Body(description='token')
stream: Optional[bool] = Body(description='是否流式输出,默认为true开启, 关闭false则返回JSON对象', default=True)
lang: Optional[str] = Body(description='语言:zh-CN|en|ko-KR', default='zh-CN')
datasource_id: Optional[int] = Body(description='数据源ID,仅当当前对话没有确定数据源时有效', default=None)
datasource_id: Optional[int | str] = Body(description='数据源ID,仅当当前对话没有确定数据源时有效', default=None)


class AxisObj(BaseModel):
Expand Down
19 changes: 17 additions & 2 deletions backend/apps/mcp/mcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Date: 2025/7/1
import json
from datetime import timedelta
from typing import Optional

import jwt
from fastapi import HTTPException, status, APIRouter
Expand Down Expand Up @@ -113,8 +114,22 @@ async def mcp_start(session: SessionDep, chat: ChatStart):
@router.post("/mcp_question", operation_id="mcp_question")
async def mcp_question(session: SessionDep, chat: McpQuestion):
session_user = get_user(session, chat.token)

mcp_chat = ChatMcp(token=chat.token, chat_id=chat.chat_id, question=chat.question, datasource_id=chat.datasource_id)
ds_id: Optional[int] = None
if chat.datasource_id:
if isinstance(chat.datasource_id, str):
if chat.datasource_id.strip() == "":
ds_id = None
else:
try:
ds_id = int(chat.datasource_id.strip())
except ValueError:
raise HTTPException(status_code=400, detail="Invalid datasource ID")
elif isinstance(chat.datasource_id, int):
ds_id = chat.datasource_id
else:
raise HTTPException(status_code=400, detail="Invalid datasource ID")

mcp_chat = ChatMcp(token=chat.token, chat_id=chat.chat_id, question=chat.question, datasource_id=ds_id)

return await question_answer_inner(session=session, current_user=session_user, request_question=mcp_chat,
in_chat=False, stream=chat.stream)
Expand Down