From 94362273febd759df2f0f72c0c73aa42df002dd7 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 02:26:07 +0000 Subject: [PATCH] fix(mcp): wrap json CAS filters in prisma Json sentinel Co-Authored-By: bot_apk --- .../mcp_server/tool_permission_backfill.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/tool_permission_backfill.py b/litellm/proxy/_experimental/mcp_server/tool_permission_backfill.py index 80090bbba34..538d015d795 100644 --- a/litellm/proxy/_experimental/mcp_server/tool_permission_backfill.py +++ b/litellm/proxy/_experimental/mcp_server/tool_permission_backfill.py @@ -16,6 +16,7 @@ from dataclasses import dataclass from types import MappingProxyType from typing import TYPE_CHECKING, Final, TypeAlias +from prisma.fields import Json from pydantic import TypeAdapter from typing_extensions import ReadOnly, TypedDict @@ -266,14 +267,14 @@ async def _convert_one_row( if isinstance(conversion, Unavailable): return conversion.server_ids stored_fields: Final = ( - ("mcp_servers", raw_row.mcp_servers), - ("mcp_access_groups", raw_row.mcp_access_groups), - ("mcp_toolsets", raw_row.mcp_toolsets), - ("mcp_tool_permissions", raw_row.mcp_tool_permissions), + ("mcp_servers", raw_row.mcp_servers, False), + ("mcp_access_groups", raw_row.mcp_access_groups, False), + ("mcp_toolsets", raw_row.mcp_toolsets, False), + ("mcp_tool_permissions", raw_row.mcp_tool_permissions, True), ) equals_filters: Final = { # mutable-ok: prisma where kwarg requires a JSON-serializable dict - field: {"equals": value} # mutable-ok: prisma where filter shape - for field, value in stored_fields + field: {"equals": Json(value) if is_json else value} # mutable-ok: prisma where filter shape + for field, value, is_json in stored_fields if value is not None } where: Final[dict[str, object]] = { # mutable-ok: prisma where kwarg requires a JSON-serializable dict