Skip to content

Commit 2b7ff69

Browse files
committed
feat: mcp tools
1 parent 8bd6909 commit 2b7ff69

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

backend/apps/mcp/mcp.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22
# Date: 2025/7/1
33

44
from datetime import timedelta
5-
from typing import Annotated
65

7-
from fastapi import APIRouter, Depends, HTTPException
6+
from fastapi import APIRouter, HTTPException
87
from fastapi.responses import StreamingResponse
9-
from fastapi.security import OAuth2PasswordRequestForm
108

119
from apps.chat.api.chat import create_chat
12-
from apps.chat.models.chat_model import ChatMcp, CreateChat
10+
from apps.chat.models.chat_model import ChatMcp, CreateChat, ChatStart
1311
from apps.chat.task.llm import LLMService, run_task
1412
from apps.datasource.crud.datasource import get_datasource_list
1513
from apps.system.crud.user import authenticate
@@ -22,19 +20,19 @@
2220
router = APIRouter(tags=["mcp"], prefix="/mcp")
2321

2422

25-
@router.post("/access_token", operation_id="access_token")
26-
def local_login(
27-
session: SessionDep,
28-
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
29-
) -> Token:
30-
user = authenticate(session=session, account=form_data.username, password=form_data.password)
31-
if not user:
32-
raise HTTPException(status_code=400, detail="Incorrect account or password")
33-
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
34-
user_dict = user.to_dict()
35-
return Token(access_token=create_access_token(
36-
user_dict, expires_delta=access_token_expires
37-
))
23+
# @router.post("/access_token", operation_id="access_token")
24+
# def local_login(
25+
# session: SessionDep,
26+
# form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
27+
# ) -> Token:
28+
# user = authenticate(session=session, account=form_data.username, password=form_data.password)
29+
# if not user:
30+
# raise HTTPException(status_code=400, detail="Incorrect account or password")
31+
# access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
32+
# user_dict = user.to_dict()
33+
# return Token(access_token=create_access_token(
34+
# user_dict, expires_delta=access_token_expires
35+
# ))
3836

3937

4038
@router.get("/ds_list", operation_id="get_datasource_list")
@@ -48,9 +46,17 @@ async def get_model_list(session: SessionDep):
4846

4947

5048
@router.post("/mcp_start", operation_id="mcp_start")
51-
async def mcp_start(session: SessionDep, chat: ChatMcp):
52-
user = await get_current_user(session, chat.token)
53-
return create_chat(session, user, CreateChat(), False)
49+
async def mcp_start(session: SessionDep, chat: ChatStart):
50+
user = authenticate(session=session, account=chat.username, password=chat.password)
51+
if not user:
52+
raise HTTPException(status_code=400, detail="Incorrect account or password")
53+
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
54+
user_dict = user.to_dict()
55+
t = Token(access_token=create_access_token(
56+
user_dict, expires_delta=access_token_expires
57+
))
58+
c = create_chat(session, user, CreateChat(), False)
59+
return {"access_token": t.access_token, "chat_id": c.id}
5460

5561

5662
@router.post("/mcp_question", operation_id="mcp_question")

backend/main.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from fastapi.staticfiles import StaticFiles
1616
import sqlbot_xpack
1717

18+
1819
def run_migrations():
1920
alembic_cfg = Config("alembic.ini")
2021
command.upgrade(alembic_cfg, "head")
@@ -51,7 +52,7 @@ def custom_generate_unique_id(route: APIRoute) -> str:
5152
description="SQLBot MCP Server",
5253
describe_all_responses=True,
5354
describe_full_response_schema=True,
54-
include_operations=["get_datasource_list", "get_model_list", "mcp_question", "mcp_start", "access_token"]
55+
include_operations=["get_datasource_list", "get_model_list", "mcp_question", "mcp_start"]
5556
)
5657

5758
mcp.mount(mcp_app)
@@ -74,8 +75,6 @@ def custom_generate_unique_id(route: APIRoute) -> str:
7475
app.add_exception_handler(StarletteHTTPException, exception_handler.http_exception_handler)
7576
app.add_exception_handler(Exception, exception_handler.global_exception_handler)
7677

77-
78-
7978
mcp.setup_server()
8079

8180
sqlbot_xpack.init_fastapi_app(app)

0 commit comments

Comments
 (0)