feat: mcp

This commit is contained in:
junjun
2025-06-11 14:26:31 +08:00
parent 0f63416b9b
commit 2a74b4d69e
4 changed files with 34 additions and 21 deletions
+1 -1
View File
@@ -68,7 +68,7 @@ async def start_chat(session: SessionDep, current_user: CurrentUser, create_chat
)
@router.post("/question")
@router.post("/question", operation_id="question")
async def stream_sql(session: SessionDep, current_user: CurrentUser, request_question: ChatQuestion):
"""Stream SQL analysis results
+26 -17
View File
@@ -1,6 +1,6 @@
from datetime import datetime
from fastapi import APIRouter
from sqlmodel import select
from sqlmodel import select
from apps.system.models.system_model import AiModelDetail
from apps.system.schemas.system_schema import model_status
from common.core.deps import SessionDep
@@ -13,9 +13,9 @@ router = APIRouter(tags=["system/aimodel"], prefix="/system/aimodel")
@router.get("/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[AiModelDetail])
async def pager(
session: SessionDep,
pageNum: int,
pageSize: int
session: SessionDep,
pageNum: int,
pageSize: int
):
pagination = PaginationParams(page=pageNum, size=pageSize)
paginator = Paginator(session)
@@ -24,19 +24,21 @@ async def pager(
model=AiModelDetail,
pagination=pagination,
**filters)
@router.get("/{id}", response_model=AiModelDetail)
async def get_model_by_id(
session: SessionDep,
id: int
session: SessionDep,
id: int
):
term = session.get(AiModelDetail, id)
return term
@router.post("", response_model=AiModelDetail)
async def add_model(
session: SessionDep,
creator: AiModelDetail
session: SessionDep,
creator: AiModelDetail
):
data = AiModelDetail.model_validate(creator)
data.create_time = get_timestamp()
@@ -44,10 +46,11 @@ async def add_model(
session.commit()
return creator
@router.put("", response_model=AiModelDetail)
async def update_terminology(
session: SessionDep,
model: AiModelDetail
session: SessionDep,
model: AiModelDetail
):
model.id = int(model.id)
term = session.exec(select(AiModelDetail).where(AiModelDetail.id == model.id)).first()
@@ -58,10 +61,11 @@ async def update_terminology(
session.commit()
return model
@router.delete("/{id}", response_model=AiModelDetail)
async def delete_terminology(
session: SessionDep,
id: int
session: SessionDep,
id: int
):
term = session.exec(select(AiModelDetail).where(AiModelDetail.id == id)).first()
session.delete(term)
@@ -69,7 +73,7 @@ async def delete_terminology(
return {
"message": f"AiModel with ID {id} deleted successfully."
}
@router.patch("/status", response_model=dict)
async def status(session: SessionDep, dto: model_status):
@@ -83,4 +87,9 @@ async def status(session: SessionDep, dto: model_status):
term.status = status
session.add(term)
session.commit()
return {"message": f"AiModel with IDs {ids} updated successfully."}
return {"message": f"AiModel with IDs {ids} updated successfully."}
@router.get("/list", operation_id="get_model_list")
async def get_model_list(session: SessionDep):
return session.query(AiModelDetail).all()
+4 -1
View File
@@ -22,7 +22,10 @@ wlist = [
"*.eot",
"*.otf",
"/mcp",
"/mcp/message"
"/mcp/message",
"/datasource/list",
"/system/aimodel/list",
"/chat/question"
]
class WhitelistChecker:
+3 -2
View File
@@ -49,7 +49,7 @@ mcp = FastApiMCP(
app,
name="SQLBot MCP Server",
description="SQLBot MCP Server",
include_operations=["get_datasource_list"]
include_operations=["get_datasource_list", "get_model_list", "question"]
)
mcp.mount(mcp_app)
@@ -76,7 +76,7 @@ frontend_dist = os.path.abspath("../frontend/dist")
if not os.path.exists(frontend_dist):
logging.warning(f"The front-end build directory does not exist: {frontend_dist}")
logging.warning("Please make sure you have built the front-end project")
else:
@app.get("/", include_in_schema=False)
@@ -92,3 +92,4 @@ if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
# uvicorn.run("main:mcp_app", host="0.0.0.0", port=8001) # mcp server