Skip to content

Commit 9b128b4

Browse files
committed
feat: mcp provide datasource
1 parent 9f89134 commit 9b128b4

File tree

1 file changed

+40
-31
lines changed

1 file changed

+40
-31
lines changed

backend/apps/mcp/mcp.py

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from apps.chat.api.chat import create_chat, question_answer_inner
1414
from apps.chat.models.chat_model import ChatMcp, CreateChat, ChatStart, McpQuestion, McpAssistant, ChatQuestion, \
1515
ChatFinishStep
16+
from apps.datasource.crud.datasource import get_datasource_list
1617
from apps.system.crud.user import authenticate
1718
from apps.system.crud.user import get_db_user
1819
from apps.system.models.system_model import UserWsModel
@@ -47,38 +48,10 @@
4748
# ))
4849

4950

50-
# @router.get("/ds_list", operation_id="get_datasource_list")
51-
# async def datasource_list(session: SessionDep):
52-
# return get_datasource_list(session=session)
53-
#
54-
#
55-
# @router.get("/model_list", operation_id="get_model_list")
56-
# async def get_model_list(session: SessionDep):
57-
# return session.query(AiModelDetail).all()
58-
59-
60-
@router.post("/mcp_start", operation_id="mcp_start")
61-
async def mcp_start(session: SessionDep, chat: ChatStart):
62-
user: BaseUserDTO = authenticate(session=session, account=chat.username, password=chat.password)
63-
if not user:
64-
raise HTTPException(status_code=400, detail="Incorrect account or password")
65-
66-
if not user.oid or user.oid == 0:
67-
raise HTTPException(status_code=400, detail="No associated workspace, Please contact the administrator")
68-
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
69-
user_dict = user.to_dict()
70-
t = Token(access_token=create_access_token(
71-
user_dict, expires_delta=access_token_expires
72-
))
73-
c = create_chat(session, user, CreateChat(origin=1), False)
74-
return {"access_token": t.access_token, "chat_id": c.id}
75-
76-
77-
@router.post("/mcp_question", operation_id="mcp_question")
78-
async def mcp_question(session: SessionDep, chat: McpQuestion):
51+
def get_user(session: SessionDep, token: str):
7952
try:
8053
payload = jwt.decode(
81-
chat.token, settings.SECRET_KEY, algorithms=[security.ALGORITHM]
54+
token, settings.SECRET_KEY, algorithms=[security.ALGORITHM]
8255
)
8356
token_data = TokenPayload(**payload)
8457
except (InvalidTokenError, ValidationError):
@@ -91,7 +64,7 @@ async def mcp_question(session: SessionDep, chat: McpQuestion):
9164
db_user: UserModel = get_db_user(session=session, user_id=token_data.id)
9265
session_user = UserInfoDTO.model_validate(db_user.model_dump())
9366
session_user.isAdmin = session_user.id == 1 and session_user.account == 'admin'
94-
session_user.language = chat.lang
67+
session_user.language = 'zh'
9568
if session_user.isAdmin:
9669
session_user = session_user
9770
ws_model: UserWsModel = session.exec(
@@ -104,6 +77,42 @@ async def mcp_question(session: SessionDep, chat: McpQuestion):
10477

10578
if session_user.status != 1:
10679
raise HTTPException(status_code=400, detail="Inactive user")
80+
return session_user
81+
82+
83+
@router.post("/mcp_ds_list", operation_id="mcp_get_datasource_list")
84+
async def datasource_list(session: SessionDep, token: str):
85+
session_user = get_user(session, token)
86+
return get_datasource_list(session=session, user=session_user)
87+
88+
89+
#
90+
#
91+
# @router.get("/model_list", operation_id="get_model_list")
92+
# async def get_model_list(session: SessionDep):
93+
# return session.query(AiModelDetail).all()
94+
95+
96+
@router.post("/mcp_start", operation_id="mcp_start")
97+
async def mcp_start(session: SessionDep, chat: ChatStart):
98+
user: BaseUserDTO = authenticate(session=session, account=chat.username, password=chat.password)
99+
if not user:
100+
raise HTTPException(status_code=400, detail="Incorrect account or password")
101+
102+
if not user.oid or user.oid == 0:
103+
raise HTTPException(status_code=400, detail="No associated workspace, Please contact the administrator")
104+
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
105+
user_dict = user.to_dict()
106+
t = Token(access_token=create_access_token(
107+
user_dict, expires_delta=access_token_expires
108+
))
109+
c = create_chat(session, user, CreateChat(origin=1), False)
110+
return {"access_token": t.access_token, "chat_id": c.id}
111+
112+
113+
@router.post("/mcp_question", operation_id="mcp_question")
114+
async def mcp_question(session: SessionDep, chat: McpQuestion):
115+
session_user = get_user(session, chat.token)
107116

108117
mcp_chat = ChatMcp(token=chat.token, chat_id=chat.chat_id, question=chat.question)
109118

0 commit comments

Comments
 (0)