Skip to content

Commit c39f241

Browse files
committed
fix: mcp tools check is support stdio conf
1 parent 9fdabb3 commit c39f241

4 files changed

Lines changed: 25 additions & 1 deletion

File tree

src/backend/bisheng/common/services/config_service.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from bisheng.common.repositories.implementations.config_repository_impl import ConfigRepositoryImpl
99
from bisheng.core.cache.redis_manager import get_redis_client_sync
1010
from bisheng.core.config.settings import Settings, PasswordConf, SystemLoginMethod, \
11-
WorkflowConf, LinsightConf, KnowledgeConf, IntelligenceCenterConf
11+
WorkflowConf, LinsightConf, KnowledgeConf, IntelligenceCenterConf, McpConf
1212
from bisheng.core.database import get_sync_db_session, get_async_db_session
1313

1414
config_file = os.getenv('config', 'config.yaml')
@@ -262,5 +262,12 @@ async def aget_from_db(self, key: str):
262262
all_config = await self.aget_all_config()
263263
return all_config.get(key, {})
264264

265+
async def get_mcp_conf(self) -> McpConf:
266+
all_config = await self.aget_all_config()
267+
mcp_conf = all_config.get('mcp', {})
268+
if mcp_conf:
269+
return McpConf(**mcp_conf)
270+
return McpConf()
271+
265272

266273
settings = ConfigService.load_settings_from_yaml(config_file)

src/backend/bisheng/core/config/settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ class IntelligenceCenterConf(BaseModel):
252252
kwargs: Dict = Field(default_factory=dict, description='Additional Arguments')
253253

254254

255+
class McpConf(BaseModel):
256+
""" MCP Configure """
257+
enable_stdio: bool = Field(default=True, description='Whether to enable stdio')
258+
259+
255260
class Settings(BaseModel):
256261
""" Application Settings """
257262
model_config = ConfigDict(validate_assignment=True, arbitrary_types_allowed=True, extra='ignore')
@@ -305,6 +310,7 @@ class Settings(BaseModel):
305310
license_str: Optional[str] = None # license Contents
306311

307312
information_conf: IntelligenceCenterConf = IntelligenceCenterConf()
313+
mcp: McpConf = McpConf()
308314

309315
@field_validator('database_url')
310316
@classmethod

src/backend/bisheng/initdb_config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,6 @@ linsight:
9696
default_temperature: 0
9797
# 模型json格式失败重试时的温度
9898
retry_temperature: 1
99+
100+
mcp:
101+
enable_stdio: true

src/backend/bisheng/tool/domain/services/tool.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
from bisheng.common.errcode.tool import ToolTypeNotExistsError, ToolTypeRepeatError, ToolTypeNameError, \
1717
ToolTypeIsPresetError, ToolSchemaDownloadError, ToolSchemaEmptyError, ToolSchemaParseError, ToolSchemaServerError, \
1818
ToolMcpSchemaError
19+
from bisheng.common.services.config_service import settings
1920
from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum, GroupResource
2021
from bisheng.database.models.role_access import AccessType
2122
from bisheng.database.models.user_group import UserGroupDao
23+
from bisheng.mcp_manage.clients.stdio import StdioClient
2224
from bisheng.mcp_manage.manager import ClientManager
2325
from bisheng.tool.domain.const import ToolPresetType
2426
from bisheng.tool.domain.langchain.linsight_knowledge import SearchKnowledgeBase
@@ -263,6 +265,12 @@ async def parse_mcp_schema(file_content: str) -> GptsToolsTypeRead:
263265
break
264266
if tool_type is None:
265267
raise ToolMcpSchemaError()
268+
mcp_conf = await settings.get_mcp_conf()
269+
if not mcp_conf.enable_stdio:
270+
client = await ClientManager.connect_mcp_from_json(tool_type.openapi_schema)
271+
if isinstance(client, StdioClient):
272+
raise ToolMcpSchemaError()
273+
266274
return tool_type
267275

268276
@classmethod

0 commit comments

Comments
 (0)