fix: change the mcp tool update logic

pull/22036/head
Novice 11 months ago
parent f783ad68e4
commit 8f61408cb6

@ -667,6 +667,16 @@ class ToolProviderMCPApi(Resource):
pass pass
else: else:
raise ValueError("Server URL is not valid.") raise ValueError("Server URL is not valid.")
MCPToolManageService.update_mcp_provider(
tenant_id=current_user.current_tenant_id,
provider_id=args["provider_id"],
server_url=args["server_url"],
name=args["name"],
icon=args["icon"],
icon_type=args["icon_type"],
icon_background=args["icon_background"],
server_identifier=args["server_identifier"],
)
return {"result": "success"} return {"result": "success"}
@setup_required @setup_required

@ -66,6 +66,7 @@ class MCPToolManageService:
or_( or_(
MCPToolProvider.name == name, MCPToolProvider.name == name,
MCPToolProvider.server_url_hash == server_url_hash, MCPToolProvider.server_url_hash == server_url_hash,
MCPToolProvider.server_identifier == server_identifier,
), ),
MCPToolProvider.tenant_id == tenant_id, MCPToolProvider.tenant_id == tenant_id,
) )
@ -74,8 +75,10 @@ class MCPToolManageService:
if existing_provider: if existing_provider:
if existing_provider.name == name: if existing_provider.name == name:
raise ValueError(f"MCP tool {name} already exists") raise ValueError(f"MCP tool {name} already exists")
else: elif existing_provider.server_url_hash == server_url_hash:
raise ValueError(f"MCP tool {server_url} already exists") raise ValueError(f"MCP tool {server_url} already exists")
elif existing_provider.server_identifier == server_identifier:
raise ValueError(f"MCP tool {server_identifier} already exists")
encrypted_server_url = encrypter.encrypt_token(tenant_id, server_url) encrypted_server_url = encrypter.encrypt_token(tenant_id, server_url)
mcp_tool = MCPToolProvider( mcp_tool = MCPToolProvider(
tenant_id=tenant_id, tenant_id=tenant_id,
@ -156,7 +159,7 @@ class MCPToolManageService:
server_identifier: str, server_identifier: str,
): ):
mcp_provider = cls.get_mcp_provider_by_provider_id(provider_id, tenant_id) mcp_provider = cls.get_mcp_provider_by_provider_id(provider_id, tenant_id)
mcp_provider.updated_at = datetime.now()
mcp_provider.name = name mcp_provider.name = name
mcp_provider.icon = ( mcp_provider.icon = (
json.dumps({"content": icon, "background": icon_background}) if icon_type == "emoji" else icon json.dumps({"content": icon, "background": icon_background}) if icon_type == "emoji" else icon
@ -180,6 +183,8 @@ class MCPToolManageService:
raise ValueError(f"MCP tool {name} already exists") raise ValueError(f"MCP tool {name} already exists")
elif "unique_mcp_provider_server_url" in error_msg: elif "unique_mcp_provider_server_url" in error_msg:
raise ValueError(f"MCP tool {server_url} already exists") raise ValueError(f"MCP tool {server_url} already exists")
elif "unique_mcp_provider_server_identifier" in error_msg:
raise ValueError(f"MCP tool {server_identifier} already exists")
else: else:
raise raise
@ -193,6 +198,7 @@ class MCPToolManageService:
provider_identity=provider_controller.provider_id, provider_identity=provider_controller.provider_id,
) )
credentials = tool_configuration.encrypt(credentials) credentials = tool_configuration.encrypt(credentials)
mcp_provider.updated_at = datetime.now()
mcp_provider.encrypted_credentials = json.dumps({**mcp_provider.credentials, **credentials}) mcp_provider.encrypted_credentials = json.dumps({**mcp_provider.credentials, **credentials})
mcp_provider.authed = authed mcp_provider.authed = authed
db.session.commit() db.session.commit()

Loading…
Cancel
Save