feat: mcp tools

This commit is contained in:
junjun
2025-06-27 11:16:07 +08:00
parent 60e9b7a3b4
commit 35699551b0
3 changed files with 15 additions and 21 deletions
+12 -19
View File
@@ -57,6 +57,18 @@ async def delete(session: SessionDep, chart_id: int):
)
@router.post("/mcp_start", operation_id="mcp_start")
async def mcp_start(session: SessionDep, token: str, create_chat_obj: CreateChat):
user = await get_current_user(session, token)
return await start_chat(session, user, create_chat_obj)
@router.post("/mcp_question", operation_id="mcp_question")
async def mcp_question(session: SessionDep, token: str, request_question: ChatQuestion):
user = await get_current_user(session, token)
return await stream_sql(session, user, request_question)
@router.post("/start")
async def start_chat(session: SessionDep, current_user: CurrentUser, create_chat_obj: CreateChat):
try:
@@ -68,25 +80,6 @@ async def start_chat(session: SessionDep, current_user: CurrentUser, create_chat
)
@router.post("/mcp_question", operation_id="mcp_question")
async def mcp_question(session: SessionDep, token: str, request_question: ChatQuestion):
user = await get_current_user(session, token)
# return await stream_sql(session, user, request_question)
return {"content": """步骤1: 确定需要查询的字段。
我们需要统计上海的订单总数,因此需要从"城市"字段中筛选出值为"上海"的记录,并使用COUNT函数计算这些记录的数量。
步骤2: 确定筛选条件。
问题要求统计上海的订单总数,所以我们需要在SQL语句中添加WHERE "城市" = '上海'来筛选出符合条件的记录。
步骤3: 避免关键字冲突。
因为这个Excel/CSV数据库是 PostgreSQL 类型,所以在schema、表名、字段名和别名外层加双引号。
最终答案:
```json
{"success":true,"sql":"SELECT COUNT(*) AS \"TotalOrders\" FROM \"public\".\"Sheet1_c27345b66e\" WHERE \"城市\" = '上海';"}
```"""}
@router.post("/question", operation_id="question")
async def stream_sql(session: SessionDep, current_user: CurrentUser, request_question: ChatQuestion):
"""Stream SQL analysis results
+2 -1
View File
@@ -25,7 +25,8 @@ wlist = [
"/mcp/message",
"/datasource/list",
"/system/aimodel/list",
"/chat/mcp_question"
"/chat/mcp_question",
"/chat/mcp_start"
]
class WhitelistChecker:
+1 -1
View File
@@ -53,7 +53,7 @@ mcp = FastApiMCP(
description="SQLBot MCP Server",
describe_all_responses=True,
describe_full_response_schema=True,
include_operations=["get_datasource_list", "get_model_list", "mcp_question"]
include_operations=["get_datasource_list", "get_model_list", "mcp_question", "mcp_start"]
)
mcp.mount(mcp_app)