From 44bcead521cff4aca4d66475b9cdb5388ef9b764 Mon Sep 17 00:00:00 2001
From: Concedo <39025047+LostRuins@users.noreply.github.com>
Date: Sun, 21 Jun 2026 22:28:47 +0800
Subject: [PATCH] mcp fixes
---
koboldcpp.py | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/koboldcpp.py b/koboldcpp.py
index 5cc2cc1b5..0dc55f47b 100644
--- a/koboldcpp.py
+++ b/koboldcpp.py
@@ -5988,6 +5988,13 @@ Change Mode
return None
clean_path = clean_path.rstrip('/')
+ if clean_path=="/mcp":
+ self.send_response(405)
+ self.send_header('allow', 'POST')
+ self.send_header('content-length', '0')
+ self.end_headers(content_type='application/json')
+ return
+
response_body = None
content_type = 'application/json'
content_encoding = None
@@ -6726,13 +6733,18 @@ Change Mode
return
try:
tempbody = json.loads(body)
+ request_id = tempbody.get("id", None)
method = tempbody.get("method","")
- if method == "initialize":
+ if request_id is None: # notifications do not get a JSON-RPC response
+ response_code = 202
+ response_body = b''
+ elif method == "initialize":
+ requested_version = tempbody.get("params", {}).get("protocolVersion", "2024-11-05")
reply = {
"jsonrpc": "2.0",
- "id": random.randint(100000, 999999),
+ "id": request_id,
"result": {
- "protocolVersion": "2024-11-05",
+ "protocolVersion": requested_version if requested_version else "2024-11-05",
"capabilities": {"tools": {"listChanged": False}},
"serverInfo": {"name": "mcp-koboldcpp", "version": "1.0.0"},
},
@@ -6741,7 +6753,7 @@ Change Mode
elif method == "tools/list":
reply = {
"jsonrpc": "2.0",
- "id": random.randint(100000, 999999),
+ "id": request_id,
"result": {"tools": []},
}
with mcp_lock:
@@ -6765,14 +6777,13 @@ Change Mode
response_body = (json.dumps(mcpresp).encode())
break
if not foundtool:
- response_code = 400
- response_body = (json.dumps({"error": {"code": -32700, "message": "Tool not found"}}).encode())
- else: #probably a notify, send empty response
- response_body = (json.dumps({}).encode())
+ response_body = (json.dumps({"jsonrpc": "2.0", "id": request_id, "error": {"code": -32602, "message": "Tool not found"}}).encode())
+ else:
+ response_body = (json.dumps({"jsonrpc": "2.0", "id": request_id, "error": {"code": -32601, "message": "Method not found"}}).encode())
except Exception as e:
print(f"MCP Call Error: {e}")
response_code = 400
- response_body = (json.dumps({"error": {"code": -32700, "message": "Parse error"}}).encode())
+ response_body = (json.dumps({"jsonrpc": "2.0", "id": None, "error": {"code": -32700, "message": "Parse error"}}).encode())
elif clean_path=="/api/extra/shutdown":
# if args.singleinstance: