convex-mcp-visual 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -931
- package/dist/apps/apps/realtime-dashboard/index.html +1 -1
- package/dist/apps/apps/schema-browser/index.html +1 -1
- package/dist/apps/assets/{realtime-dashboard-BPA99DZn.js → realtime-dashboard-BKgb9FSM.js} +13 -13
- package/dist/apps/assets/{schema-browser-BEcF8hRP.js → schema-browser-DIJDjZTI.js} +18 -5
- package/dist/convex-client.d.ts +36 -8
- package/dist/convex-client.d.ts.map +1 -1
- package/dist/convex-client.js +268 -88
- package/dist/convex-client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +157 -23
- package/dist/index.js.map +1 -1
- package/dist/resources/schema-browser.js +7 -6
- package/dist/resources/schema-browser.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +38 -38
- package/dist/server.js.map +1 -1
- package/dist/tools/dashboard.d.ts +2 -2
- package/dist/tools/dashboard.d.ts.map +1 -1
- package/dist/tools/dashboard.js +109 -87
- package/dist/tools/dashboard.js.map +1 -1
- package/dist/tools/schema-browser.d.ts +2 -2
- package/dist/tools/schema-browser.d.ts.map +1 -1
- package/dist/tools/schema-browser.js +93 -68
- package/dist/tools/schema-browser.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* MCP tool that displays database schema in terminal AND
|
|
5
5
|
* opens an interactive schema browser UI in the browser.
|
|
6
6
|
*/
|
|
7
|
-
import { launchUIApp } from
|
|
7
|
+
import { launchUIApp } from "../ui-server.js";
|
|
8
8
|
export const schemaBrowserTool = {
|
|
9
|
-
name:
|
|
9
|
+
name: "schema_browser",
|
|
10
10
|
description: `Opens an interactive Schema Browser for exploring your Convex database.
|
|
11
11
|
|
|
12
12
|
Features:
|
|
@@ -18,24 +18,24 @@ Features:
|
|
|
18
18
|
The Schema Browser renders as an interactive UI panel where you can click through tables,
|
|
19
19
|
inspect field types, and explore your data visually.`,
|
|
20
20
|
inputSchema: {
|
|
21
|
-
type:
|
|
21
|
+
type: "object",
|
|
22
22
|
properties: {
|
|
23
23
|
deployment: {
|
|
24
|
-
type:
|
|
25
|
-
description:
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Deployment selector (from status tool). If not provided, uses the default deployment.",
|
|
26
26
|
},
|
|
27
27
|
table: {
|
|
28
|
-
type:
|
|
29
|
-
description:
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Pre-select a specific table to view",
|
|
30
30
|
},
|
|
31
31
|
showInferred: {
|
|
32
|
-
type:
|
|
33
|
-
description:
|
|
32
|
+
type: "boolean",
|
|
33
|
+
description: "Show inferred schemas alongside declared schemas (default: true)",
|
|
34
34
|
default: true,
|
|
35
35
|
},
|
|
36
36
|
pageSize: {
|
|
37
|
-
type:
|
|
38
|
-
description:
|
|
37
|
+
type: "number",
|
|
38
|
+
description: "Number of documents per page (default: 50)",
|
|
39
39
|
default: 50,
|
|
40
40
|
},
|
|
41
41
|
},
|
|
@@ -43,13 +43,13 @@ inspect field types, and explore your data visually.`,
|
|
|
43
43
|
},
|
|
44
44
|
};
|
|
45
45
|
export async function handleSchemaBrowser(client, args = {}) {
|
|
46
|
-
const { table, showInferred = true, pageSize = 50 } = args;
|
|
46
|
+
const { table, showInferred = true, pageSize = 50, } = args;
|
|
47
47
|
// Check if client is connected
|
|
48
48
|
if (!client.isConnected()) {
|
|
49
49
|
return {
|
|
50
50
|
content: [
|
|
51
51
|
{
|
|
52
|
-
type:
|
|
52
|
+
type: "text",
|
|
53
53
|
text: `## Schema Browser
|
|
54
54
|
|
|
55
55
|
**Connection Error**: No Convex deployment configured.
|
|
@@ -65,23 +65,27 @@ Once connected, the Schema Browser will display your tables and schemas.`,
|
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
try {
|
|
68
|
-
// Get table list
|
|
68
|
+
// Get table list with document counts
|
|
69
69
|
const tables = await client.listTables();
|
|
70
|
-
//
|
|
71
|
-
const
|
|
70
|
+
// Check if we have admin access for document fetching
|
|
71
|
+
const hasAdminAccess = client.hasAdminAccess();
|
|
72
|
+
// Get sample documents if admin access is available
|
|
73
|
+
const allDocuments = hasAdminAccess ? await client.getAllDocuments() : {};
|
|
72
74
|
// Build table info with schema data
|
|
73
|
-
const tableInfos = tables.map((t) => {
|
|
75
|
+
const tableInfos = await Promise.all(tables.map(async (t) => {
|
|
74
76
|
const docs = allDocuments[t.name] || [];
|
|
75
|
-
|
|
77
|
+
// Get declared schema from Convex
|
|
78
|
+
const tableSchema = await client.getTableSchema(t.name);
|
|
76
79
|
return {
|
|
77
80
|
name: t.name,
|
|
78
|
-
documentCount:
|
|
81
|
+
documentCount: t.documentCount,
|
|
79
82
|
hasIndexes: t.indexes.length > 0,
|
|
80
83
|
indexes: t.indexes,
|
|
81
84
|
documents: docs.slice(0, pageSize),
|
|
82
|
-
inferredFields,
|
|
85
|
+
inferredFields: tableSchema.inferredFields,
|
|
86
|
+
declaredFields: tableSchema.declaredFields,
|
|
83
87
|
};
|
|
84
|
-
});
|
|
88
|
+
}));
|
|
85
89
|
// Get schema for selected table if specified
|
|
86
90
|
let selectedTableInfo = null;
|
|
87
91
|
if (table) {
|
|
@@ -94,10 +98,11 @@ Once connected, the Schema Browser will display your tables and schemas.`,
|
|
|
94
98
|
showInferred,
|
|
95
99
|
pageSize,
|
|
96
100
|
tables: tableInfos,
|
|
101
|
+
hasAdminAccess,
|
|
97
102
|
selectedSchema: selectedTableInfo
|
|
98
103
|
? {
|
|
99
104
|
tableName: selectedTableInfo.name,
|
|
100
|
-
declaredFields:
|
|
105
|
+
declaredFields: selectedTableInfo.declaredFields,
|
|
101
106
|
inferredFields: selectedTableInfo.inferredFields,
|
|
102
107
|
indexes: selectedTableInfo.indexes,
|
|
103
108
|
}
|
|
@@ -105,10 +110,10 @@ Once connected, the Schema Browser will display your tables and schemas.`,
|
|
|
105
110
|
allDocuments,
|
|
106
111
|
};
|
|
107
112
|
// Launch the interactive UI in browser
|
|
108
|
-
let uiUrl =
|
|
113
|
+
let uiUrl = "";
|
|
109
114
|
try {
|
|
110
115
|
const uiServer = await launchUIApp({
|
|
111
|
-
appName:
|
|
116
|
+
appName: "schema-browser",
|
|
112
117
|
config,
|
|
113
118
|
port: 3456,
|
|
114
119
|
autoClose: 30 * 60 * 1000, // Auto-close after 30 minutes
|
|
@@ -116,14 +121,14 @@ Once connected, the Schema Browser will display your tables and schemas.`,
|
|
|
116
121
|
uiUrl = uiServer.url;
|
|
117
122
|
}
|
|
118
123
|
catch (error) {
|
|
119
|
-
console.error(
|
|
124
|
+
console.error("Failed to launch UI:", error);
|
|
120
125
|
}
|
|
121
126
|
// Build terminal output (markdown tables)
|
|
122
|
-
const terminalOutput = buildTerminalOutput(tableInfos, table, client.getDeploymentUrl(), uiUrl);
|
|
127
|
+
const terminalOutput = buildTerminalOutput(tableInfos, table, client.getDeploymentUrl(), uiUrl, hasAdminAccess);
|
|
123
128
|
return {
|
|
124
129
|
content: [
|
|
125
130
|
{
|
|
126
|
-
type:
|
|
131
|
+
type: "text",
|
|
127
132
|
text: terminalOutput,
|
|
128
133
|
},
|
|
129
134
|
],
|
|
@@ -133,7 +138,7 @@ Once connected, the Schema Browser will display your tables and schemas.`,
|
|
|
133
138
|
return {
|
|
134
139
|
content: [
|
|
135
140
|
{
|
|
136
|
-
type:
|
|
141
|
+
type: "text",
|
|
137
142
|
text: `## Schema Browser
|
|
138
143
|
|
|
139
144
|
**Error**: ${error instanceof Error ? error.message : String(error)}
|
|
@@ -167,13 +172,13 @@ function inferSchemaFromDocuments(documents) {
|
|
|
167
172
|
return Array.from(fieldStats.entries())
|
|
168
173
|
.map(([name, stats]) => ({
|
|
169
174
|
name,
|
|
170
|
-
type: Array.from(stats.types).join(
|
|
175
|
+
type: Array.from(stats.types).join(" | "),
|
|
171
176
|
optional: stats.count < totalDocs,
|
|
172
177
|
}))
|
|
173
178
|
.sort((a, b) => {
|
|
174
179
|
// Sort system fields first
|
|
175
|
-
const aIsSystem = a.name.startsWith(
|
|
176
|
-
const bIsSystem = b.name.startsWith(
|
|
180
|
+
const aIsSystem = a.name.startsWith("_");
|
|
181
|
+
const bIsSystem = b.name.startsWith("_");
|
|
177
182
|
if (aIsSystem && !bIsSystem)
|
|
178
183
|
return -1;
|
|
179
184
|
if (!aIsSystem && bIsSystem)
|
|
@@ -186,75 +191,95 @@ function inferSchemaFromDocuments(documents) {
|
|
|
186
191
|
*/
|
|
187
192
|
function getValueType(value) {
|
|
188
193
|
if (value === null)
|
|
189
|
-
return
|
|
194
|
+
return "null";
|
|
190
195
|
if (value === undefined)
|
|
191
|
-
return
|
|
196
|
+
return "undefined";
|
|
192
197
|
if (Array.isArray(value))
|
|
193
|
-
return
|
|
194
|
-
if (typeof value ===
|
|
195
|
-
return
|
|
198
|
+
return "array";
|
|
199
|
+
if (typeof value === "object")
|
|
200
|
+
return "object";
|
|
196
201
|
return typeof value;
|
|
197
202
|
}
|
|
198
203
|
/**
|
|
199
204
|
* Build terminal-friendly markdown output
|
|
200
205
|
*/
|
|
201
|
-
function buildTerminalOutput(tables, selectedTable, deploymentUrl, uiUrl) {
|
|
206
|
+
function buildTerminalOutput(tables, selectedTable, deploymentUrl, uiUrl, hasAdminAccess) {
|
|
202
207
|
const lines = [];
|
|
203
|
-
lines.push(
|
|
204
|
-
lines.push(
|
|
208
|
+
lines.push("## Schema Browser");
|
|
209
|
+
lines.push("");
|
|
205
210
|
if (uiUrl) {
|
|
206
211
|
lines.push(`**Interactive UI**: ${uiUrl}`);
|
|
207
|
-
lines.push(
|
|
212
|
+
lines.push("");
|
|
208
213
|
}
|
|
209
214
|
lines.push(`Connected to: \`${deploymentUrl}\``);
|
|
210
|
-
|
|
215
|
+
if (!hasAdminAccess) {
|
|
216
|
+
lines.push("");
|
|
217
|
+
lines.push("*Note: Document counts and samples require admin access. Set CONVEX_DEPLOY_KEY for full access.*");
|
|
218
|
+
}
|
|
219
|
+
lines.push("");
|
|
211
220
|
if (tables.length === 0) {
|
|
212
|
-
lines.push(
|
|
213
|
-
return lines.join(
|
|
221
|
+
lines.push("*No tables found in this deployment.*");
|
|
222
|
+
return lines.join("\n");
|
|
214
223
|
}
|
|
215
224
|
// If a specific table is selected, show detailed view
|
|
216
225
|
if (selectedTable) {
|
|
217
226
|
const tableInfo = tables.find((t) => t.name === selectedTable);
|
|
218
227
|
if (tableInfo) {
|
|
219
228
|
lines.push(`### ${selectedTable} (${tableInfo.documentCount} documents)`);
|
|
220
|
-
lines.push(
|
|
221
|
-
lines.push(
|
|
222
|
-
lines.push(
|
|
223
|
-
lines.push(
|
|
224
|
-
lines.push(
|
|
229
|
+
lines.push("");
|
|
230
|
+
lines.push("**Schema:**");
|
|
231
|
+
lines.push("");
|
|
232
|
+
lines.push("| Field | Type | Required |");
|
|
233
|
+
lines.push("|-------|------|----------|");
|
|
225
234
|
for (const field of tableInfo.inferredFields) {
|
|
226
|
-
lines.push(`| ${field.name} | ${field.type} | ${field.optional ?
|
|
235
|
+
lines.push(`| ${field.name} | ${field.type} | ${field.optional ? "No" : "Yes"} |`);
|
|
227
236
|
}
|
|
228
|
-
lines.push(
|
|
237
|
+
lines.push("");
|
|
229
238
|
if (tableInfo.documents.length > 0) {
|
|
230
|
-
lines.push(
|
|
231
|
-
lines.push(
|
|
232
|
-
lines.push(
|
|
239
|
+
lines.push("**Sample Documents:**");
|
|
240
|
+
lines.push("");
|
|
241
|
+
lines.push("```json");
|
|
233
242
|
lines.push(JSON.stringify(tableInfo.documents.slice(0, 3), null, 2));
|
|
234
|
-
lines.push(
|
|
243
|
+
lines.push("```");
|
|
235
244
|
}
|
|
236
|
-
return lines.join(
|
|
245
|
+
return lines.join("\n");
|
|
237
246
|
}
|
|
238
247
|
}
|
|
239
248
|
// Show all tables overview
|
|
240
|
-
lines.push(`
|
|
241
|
-
lines.push(
|
|
249
|
+
lines.push(`Found ${tables.length} tables:`);
|
|
250
|
+
lines.push("");
|
|
242
251
|
for (const table of tables) {
|
|
243
|
-
lines.push(
|
|
244
|
-
lines.push(
|
|
245
|
-
lines.push(
|
|
246
|
-
lines.push(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
252
|
+
lines.push("---");
|
|
253
|
+
lines.push(`### ${table.name}`);
|
|
254
|
+
lines.push(`Documents: ${table.documentCount}`);
|
|
255
|
+
lines.push("");
|
|
256
|
+
// Show declared fields if available, otherwise inferred
|
|
257
|
+
const fields = table.declaredFields.length > 0
|
|
258
|
+
? table.declaredFields
|
|
259
|
+
: table.inferredFields;
|
|
260
|
+
const schemaType = table.declaredFields.length > 0 ? "Declared" : "Inferred";
|
|
261
|
+
lines.push(`**${schemaType} Schema:**`);
|
|
262
|
+
lines.push("");
|
|
263
|
+
lines.push("| Field | Type | Required |");
|
|
264
|
+
lines.push("|-------|------|----------|");
|
|
265
|
+
if (fields.length === 0) {
|
|
266
|
+
lines.push("| *(no schema data)* | - | - |");
|
|
250
267
|
}
|
|
251
268
|
else {
|
|
252
|
-
for (const field of
|
|
253
|
-
lines.push(`| ${field.name} |
|
|
269
|
+
for (const field of fields) {
|
|
270
|
+
lines.push(`| ${field.name} | \`${field.type}\` | ${field.optional ? "No" : "Yes"} |`);
|
|
254
271
|
}
|
|
255
272
|
}
|
|
256
|
-
lines.push(
|
|
273
|
+
lines.push("");
|
|
274
|
+
// Show sample documents if available
|
|
275
|
+
if (table.documents.length > 0) {
|
|
276
|
+
lines.push(`**Sample (${table.documents.length} of ${table.documentCount}):**`);
|
|
277
|
+
lines.push("```json");
|
|
278
|
+
lines.push(JSON.stringify(table.documents[0], null, 2));
|
|
279
|
+
lines.push("```");
|
|
280
|
+
lines.push("");
|
|
281
|
+
}
|
|
257
282
|
}
|
|
258
|
-
return lines.join(
|
|
283
|
+
return lines.join("\n");
|
|
259
284
|
}
|
|
260
285
|
//# sourceMappingURL=schema-browser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-browser.js","sourceRoot":"","sources":["../../src/tools/schema-browser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;qDASsC;IACnD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uFAAuF;aAC1F;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC;aACnD;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;gBACf,WAAW,
|
|
1
|
+
{"version":3,"file":"schema-browser.js","sourceRoot":"","sources":["../../src/tools/schema-browser.ts"],"names":[],"mappings":"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"}
|