MaxKB/apps/chat/views/mcp.py

60 lines
1.5 KiB
Python

import json
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from chat.mcp.tools import MCPToolHandler
@csrf_exempt
def mcp_view(request):
request_id = None
try:
data = json.loads(request.body)
method = data.get("method")
params = data.get("params", {})
request_id = data.get("id")
if request_id is None:
return HttpResponse(status=204)
auth_header = request.headers.get("Authorization", "").replace("Bearer ", "")
handler = MCPToolHandler(auth_header)
# 路由方法
if method == "initialize":
result = handler.initialize()
elif method == "tools/list":
result = handler.list_tools()
elif method == "tools/call":
result = handler.call_tool(params)
else:
return JsonResponse({
"jsonrpc": "2.0",
"id": request_id,
"error": {
"code": -32601,
"message": f"Method not found: {method}"
}
})
# 成功响应
return JsonResponse({
"jsonrpc": "2.0",
"id": request_id,
"result": result
})
except Exception as e:
return JsonResponse({
"jsonrpc": "2.0",
"id": request_id,
"error": {
"code": -32603,
"message": f"Internal error: {str(e)}"
}
})