Skip to content

Commit 45b733b

Browse files
authored
mig: add external mcp tables (#1059)
Migration for #1055
1 parent 8c865e1 commit 45b733b

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

server/database/schema.sql

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,3 +1078,48 @@ CREATE TABLE IF NOT EXISTS mcp_registries (
10781078
CREATE UNIQUE INDEX IF NOT EXISTS mcp_registries_url_key
10791079
ON mcp_registries (url)
10801080
WHERE deleted IS FALSE;
1081+
1082+
CREATE TABLE IF NOT EXISTS external_mcp_attachments (
1083+
id uuid NOT NULL DEFAULT generate_uuidv7(),
1084+
deployment_id uuid NOT NULL,
1085+
registry_id uuid NOT NULL,
1086+
name TEXT NOT NULL CHECK (name <> ''),
1087+
slug TEXT NOT NULL CHECK (slug <> ''),
1088+
1089+
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
1090+
updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
1091+
deleted_at timestamptz,
1092+
deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL) stored,
1093+
1094+
CONSTRAINT external_mcp_attachments_pkey PRIMARY KEY (id),
1095+
CONSTRAINT external_mcp_attachments_deployment_id_fkey FOREIGN KEY (deployment_id) REFERENCES deployments(id) ON DELETE CASCADE,
1096+
CONSTRAINT external_mcp_attachments_registry_id_fkey FOREIGN KEY (registry_id) REFERENCES mcp_registries(id) ON DELETE SET NULL
1097+
);
1098+
1099+
CREATE INDEX IF NOT EXISTS external_mcp_attachments_deployment_id_idx
1100+
ON external_mcp_attachments (deployment_id)
1101+
WHERE deleted IS FALSE;
1102+
1103+
CREATE UNIQUE INDEX IF NOT EXISTS external_mcp_attachments_deployment_id_slug_key
1104+
ON external_mcp_attachments (deployment_id, slug)
1105+
WHERE deleted IS FALSE;
1106+
1107+
CREATE TABLE IF NOT EXISTS external_mcp_tool_definitions (
1108+
id uuid NOT NULL DEFAULT generate_uuidv7(),
1109+
external_mcp_attachment_id uuid NOT NULL,
1110+
tool_urn TEXT NOT NULL CHECK (tool_urn <> ''),
1111+
remote_url TEXT NOT NULL CHECK (remote_url <> ''),
1112+
requires_oauth BOOLEAN NOT NULL DEFAULT FALSE,
1113+
1114+
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
1115+
updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
1116+
deleted_at timestamptz,
1117+
deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL) stored,
1118+
1119+
CONSTRAINT external_mcp_tool_definitions_pkey PRIMARY KEY (id),
1120+
CONSTRAINT external_mcp_tool_definitions_external_mcp_attachment_id_fkey FOREIGN KEY (external_mcp_attachment_id) REFERENCES external_mcp_attachments(id) ON DELETE CASCADE
1121+
);
1122+
1123+
CREATE INDEX IF NOT EXISTS external_mcp_tool_definitions_external_mcp_attachment_id_idx
1124+
ON external_mcp_tool_definitions (external_mcp_attachment_id)
1125+
WHERE deleted IS FALSE;

server/internal/database/models.go

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
-- Create "external_mcp_attachments" table
2+
CREATE TABLE "external_mcp_attachments" (
3+
"id" uuid NOT NULL DEFAULT generate_uuidv7(),
4+
"deployment_id" uuid NOT NULL,
5+
"registry_id" uuid NOT NULL,
6+
"name" text NOT NULL,
7+
"slug" text NOT NULL,
8+
"created_at" timestamptz NOT NULL DEFAULT clock_timestamp(),
9+
"updated_at" timestamptz NOT NULL DEFAULT clock_timestamp(),
10+
"deleted_at" timestamptz NULL,
11+
"deleted" boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL) STORED,
12+
PRIMARY KEY ("id"),
13+
CONSTRAINT "external_mcp_attachments_deployment_id_fkey" FOREIGN KEY ("deployment_id") REFERENCES "deployments" ("id") ON UPDATE NO ACTION ON DELETE CASCADE,
14+
CONSTRAINT "external_mcp_attachments_registry_id_fkey" FOREIGN KEY ("registry_id") REFERENCES "mcp_registries" ("id") ON UPDATE NO ACTION ON DELETE SET NULL,
15+
CONSTRAINT "external_mcp_attachments_name_check" CHECK (name <> ''::text),
16+
CONSTRAINT "external_mcp_attachments_slug_check" CHECK (slug <> ''::text)
17+
);
18+
-- Create index "external_mcp_attachments_deployment_id_idx" to table: "external_mcp_attachments"
19+
CREATE INDEX "external_mcp_attachments_deployment_id_idx" ON "external_mcp_attachments" ("deployment_id") WHERE (deleted IS FALSE);
20+
-- Create index "external_mcp_attachments_deployment_id_slug_key" to table: "external_mcp_attachments"
21+
CREATE UNIQUE INDEX "external_mcp_attachments_deployment_id_slug_key" ON "external_mcp_attachments" ("deployment_id", "slug") WHERE (deleted IS FALSE);
22+
-- Create "external_mcp_tool_definitions" table
23+
CREATE TABLE "external_mcp_tool_definitions" (
24+
"id" uuid NOT NULL DEFAULT generate_uuidv7(),
25+
"external_mcp_attachment_id" uuid NOT NULL,
26+
"tool_urn" text NOT NULL,
27+
"remote_url" text NOT NULL,
28+
"requires_oauth" boolean NOT NULL DEFAULT false,
29+
"created_at" timestamptz NOT NULL DEFAULT clock_timestamp(),
30+
"updated_at" timestamptz NOT NULL DEFAULT clock_timestamp(),
31+
"deleted_at" timestamptz NULL,
32+
"deleted" boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL) STORED,
33+
PRIMARY KEY ("id"),
34+
CONSTRAINT "external_mcp_tool_definitions_external_mcp_attachment_id_fkey" FOREIGN KEY ("external_mcp_attachment_id") REFERENCES "external_mcp_attachments" ("id") ON UPDATE NO ACTION ON DELETE CASCADE,
35+
CONSTRAINT "external_mcp_tool_definitions_remote_url_check" CHECK (remote_url <> ''::text),
36+
CONSTRAINT "external_mcp_tool_definitions_tool_urn_check" CHECK (tool_urn <> ''::text)
37+
);
38+
-- Create index "external_mcp_tool_definitions_external_mcp_attachment_id_idx" to table: "external_mcp_tool_definitions"
39+
CREATE INDEX "external_mcp_tool_definitions_external_mcp_attachment_id_idx" ON "external_mcp_tool_definitions" ("external_mcp_attachment_id") WHERE (deleted IS FALSE);

server/migrations/atlas.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
h1:0z8AEvcPKgU1mD6R4jNVsRHH01pAc6Dp4IZ2Ytf01/s=
1+
h1:+2s/SXcNyA8b0cJXfulEMHGrn01GrDSjHFWRUhQ/6L8=
22
20250502122425_initial-tables.sql h1:Hu3O60/bB4fjZpUay8FzyOjw6vngp087zU+U/wVKn7k=
33
20250502130852_initial-indexes.sql h1:oYbnwi9y9PPTqu7uVbSPSALhCY8XF3rv03nDfG4b7mo=
44
20250502154250_relax-http-security-fields.sql h1:0+OYIDq7IHmx7CP5BChVwfpF2rOSrRDxnqawXio2EVo=
@@ -79,3 +79,4 @@ h1:0z8AEvcPKgU1mD6R4jNVsRHH01pAc6Dp4IZ2Ytf01/s=
7979
20251202182959_agent-execution-table.sql h1:q2PyP6iOoBAkQC0pgAFPre5+Amk3Kal7Mc2Twbni0gg=
8080
20251208165035_static-oauth-proxy-providers.sql h1:zujMl7j65KUuVit7bS6766+uKR83F76NK9eHW8zBT1U=
8181
20251211215818_add-mcp-registries-table.sql h1:kHtam7hD4LdWVu1bfV94RLc7YKux50obf2O4FNnetGs=
82+
20251215201744_add-external-mcp-tables.sql h1:sAQggcVLuT+SJYL1doah5Ngc2dWDexn8uFLpIyfh6hA=

0 commit comments

Comments
 (0)