Skip to content

Commit df44227

Browse files
committed
feat: add MCP transport validation to ToolExecutor
1 parent 29ce725 commit df44227

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

apps/common/utils/tool_code.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# coding=utf-8
22
import ast
3-
import os
43
import json
4+
import os
55
import subprocess
66
import sys
77
from textwrap import dedent
88

99
import uuid_utils.compat as uuid
10+
from django.utils.translation import gettext_lazy as _
1011

1112
from maxkb.const import BASE_DIR, CONFIG
1213
from maxkb.const import PROJECT_DIR
@@ -210,6 +211,12 @@ def validate_banned_keywords(self, code_str):
210211
if matched:
211212
raise Exception(f"keyword '{matched}' is banned in the tool.")
212213

214+
def validate_mcp_transport(self, code_str):
215+
servers = json.loads(code_str)
216+
for server, config in servers.items():
217+
if config.get('transport') not in ['sse', 'streamable_http']:
218+
raise Exception(_('Only support transport=sse or transport=streamable_http'))
219+
213220
@staticmethod
214221
def _exec(_code):
215222
return subprocess.run([python_directory, '-c', _code], text=True, capture_output=True)

apps/tools/serializers/tool.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ def insert(self, instance, with_valid=True):
356356
ToolCreateRequest(data=instance).is_valid(raise_exception=True)
357357
# 校验代码是否包括禁止的关键字
358358
ToolExecutor().validate_banned_keywords(instance.get('code', ''))
359+
ToolExecutor().validate_mcp_transport(instance.get('code', ''))
359360

360361
tool_id = uuid.uuid7()
361362
Tool(
@@ -391,6 +392,8 @@ def test_connection(self):
391392
self.is_valid(raise_exception=True)
392393
# 校验代码是否包括禁止的关键字
393394
ToolExecutor().validate_banned_keywords(self.data.get('code', ''))
395+
ToolExecutor().validate_mcp_transport(self.data.get('code', ''))
396+
394397
# 校验mcp json
395398
validate_mcp_config(json.loads(self.data.get('code')))
396399
return True
@@ -484,7 +487,7 @@ def edit(self, instance, with_valid=True):
484487
ToolEditRequest(data=instance).is_valid(raise_exception=True)
485488
# 校验代码是否包括禁止的关键字
486489
ToolExecutor().validate_banned_keywords(instance.get('code', ''))
487-
490+
ToolExecutor().validate_mcp_transport(instance.get('code', ''))
488491

489492
if not QuerySet(Tool).filter(id=self.data.get('id')).exists():
490493
raise serializers.ValidationError(_('Tool not found'))

0 commit comments

Comments
 (0)