From 6a64fe47e4e77fe159c7d4e33de95ce0183fb95a Mon Sep 17 00:00:00 2001 From: Wendong-Fan Date: Mon, 29 Sep 2025 01:31:51 +0800 Subject: [PATCH] enhance: remove table mcp_use's foreign key(mcp_id) PR406 --- ...00_drop_mcp_user_foreign_key_constraint.py | 56 ++++++++++++++++++- server/app/model/mcp/mcp_user.py | 1 - 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/server/alembic/versions/2025_09_28_1621-d74ab2a44600_drop_mcp_user_foreign_key_constraint.py b/server/alembic/versions/2025_09_28_1621-d74ab2a44600_drop_mcp_user_foreign_key_constraint.py index 49e4683f7..9bd085337 100644 --- a/server/alembic/versions/2025_09_28_1621-d74ab2a44600_drop_mcp_user_foreign_key_constraint.py +++ b/server/alembic/versions/2025_09_28_1621-d74ab2a44600_drop_mcp_user_foreign_key_constraint.py @@ -23,10 +23,62 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # Drop the foreign key constraint for mcp_id in mcp_user table - op.drop_constraint("mcp_user_mcp_id_fkey", "mcp_user", type_="foreignkey") + # Use try-catch to handle cases where constraint might not exist or have different name + + try: + op.drop_constraint("mcp_user_mcp_id_fkey", "mcp_user", type_="foreignkey") + except Exception as e: + # If the expected constraint name doesn't work, try to find it dynamically + try: + connection = op.get_bind() + inspector = sa.inspect(connection) + fk_constraints = inspector.get_foreign_keys("mcp_user") + + # Find the constraint that references mcp_id -> mcp.id + target_constraint = None + for fk in fk_constraints: + if (fk.get("constrained_columns") == ["mcp_id"] and + fk.get("referred_table") == "mcp" and + fk.get("referred_columns") == ["id"]): + target_constraint = fk.get("name") + break + + if target_constraint: + op.drop_constraint(target_constraint, "mcp_user", type_="foreignkey") + else: + print("Warning: No foreign key constraint found for mcp_user.mcp_id -> mcp.id") + except Exception as e2: + print(f"Warning: Could not drop foreign key constraint: {e2}") def downgrade() -> None: """Downgrade schema.""" # Re-add the foreign key constraint for mcp_id in mcp_user table - op.create_foreign_key("mcp_user_mcp_id_fkey", "mcp_user", "mcp", ["mcp_id"], ["id"]) + # Check if the constraint already exists before creating it + + try: + connection = op.get_bind() + inspector = sa.inspect(connection) + fk_constraints = inspector.get_foreign_keys("mcp_user") + + # Check if the constraint already exists + constraint_exists = False + for fk in fk_constraints: + if (fk.get("constrained_columns") == ["mcp_id"] and + fk.get("referred_table") == "mcp" and + fk.get("referred_columns") == ["id"]): + constraint_exists = True + break + + if not constraint_exists: + op.create_foreign_key( + "mcp_user_mcp_id_fkey", + "mcp_user", + "mcp", + ["mcp_id"], + ["id"] + ) + else: + print("Info: Foreign key constraint for mcp_user.mcp_id -> mcp.id already exists") + except Exception as e: + print(f"Warning: Could not check or create foreign key constraint: {e}") diff --git a/server/app/model/mcp/mcp_user.py b/server/app/model/mcp/mcp_user.py index 04e202a92..779cd72f9 100644 --- a/server/app/model/mcp/mcp_user.py +++ b/server/app/model/mcp/mcp_user.py @@ -71,7 +71,6 @@ class McpUserUpdate(BaseModel): server_url: Optional[str] = None command: Optional[str] = None args: Optional[str] = None - env: Optional[dict] = None mcp_key: Optional[str] = None