@rebasepro/mcp-server 0.0.1-canary.2 → 0.0.1-canary.4d4fb3e
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/bin/rebase-mcp.js +2 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +465 -2
- package/dist/index.js.map +1 -1
- package/package.json +31 -46
- package/README.md +0 -69
- package/dist/api-client.d.ts +0 -35
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -118
- package/dist/api-client.js.map +0 -1
- package/dist/auth.d.ts +0 -16
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -53
- package/dist/auth.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -66
- package/dist/cli.js.map +0 -1
- package/dist/resources/project.d.ts +0 -7
- package/dist/resources/project.d.ts.map +0 -1
- package/dist/resources/project.js +0 -57
- package/dist/resources/project.js.map +0 -1
- package/dist/server.d.ts +0 -6
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -34
- package/dist/server.js.map +0 -1
- package/dist/tools/auth.d.ts +0 -6
- package/dist/tools/auth.d.ts.map +0 -1
- package/dist/tools/auth.js +0 -89
- package/dist/tools/auth.js.map +0 -1
- package/dist/tools/collections.d.ts +0 -7
- package/dist/tools/collections.d.ts.map +0 -1
- package/dist/tools/collections.js +0 -42
- package/dist/tools/collections.js.map +0 -1
- package/dist/tools/documents.d.ts +0 -8
- package/dist/tools/documents.d.ts.map +0 -1
- package/dist/tools/documents.js +0 -178
- package/dist/tools/documents.js.map +0 -1
- package/dist/tools/export.d.ts +0 -7
- package/dist/tools/export.d.ts.map +0 -1
- package/dist/tools/export.js +0 -44
- package/dist/tools/export.js.map +0 -1
- package/dist/tools/projects.d.ts +0 -7
- package/dist/tools/projects.d.ts.map +0 -1
- package/dist/tools/projects.js +0 -42
- package/dist/tools/projects.js.map +0 -1
- package/dist/tools/users.d.ts +0 -7
- package/dist/tools/users.d.ts.map +0 -1
- package/dist/tools/users.js +0 -74
- package/dist/tools/users.js.map +0 -1
- package/src/api-client.ts +0 -146
- package/src/auth.ts +0 -75
- package/src/cli.ts +0 -70
- package/src/index.ts +0 -2
- package/src/resources/project.ts +0 -68
- package/src/server.ts +0 -42
- package/src/tools/auth.ts +0 -110
- package/src/tools/collections.ts +0 -52
- package/src/tools/documents.ts +0 -210
- package/src/tools/export.ts +0 -51
- package/src/tools/projects.ts +0 -52
- package/src/tools/users.ts +0 -92
- package/tsconfig.json +0 -22
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,466 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { spawn } from "node:child_process";
|
|
5
|
+
import { config as loadDotenv } from "dotenv";
|
|
6
|
+
import { resolve, join } from "node:path";
|
|
7
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
8
|
+
// We dynamically load @rebasepro/client to avoid transitive type issues.
|
|
9
|
+
// The client SDK ships compiled .d.ts that reference @rebasepro/types (which
|
|
10
|
+
// drags in React peer-deps). By importing at runtime only we keep the MCP
|
|
11
|
+
// server build clean.
|
|
12
|
+
const CLIENT_PKG = "@rebasepro/client";
|
|
13
|
+
async function loadClientSdk() {
|
|
14
|
+
const mod = await import(/* webpackIgnore: true */ CLIENT_PKG);
|
|
15
|
+
return mod.createRebaseClient;
|
|
16
|
+
}
|
|
17
|
+
// ── Environment ─────────────────────────────────────────────────────────────
|
|
18
|
+
const PROJECT_DIR = process.env.REBASE_PROJECT_DIR || process.cwd();
|
|
19
|
+
// Try to load .env from the project directory
|
|
20
|
+
for (const envPath of [
|
|
21
|
+
resolve(PROJECT_DIR, ".env"),
|
|
22
|
+
resolve(PROJECT_DIR, "app", ".env"),
|
|
23
|
+
]) {
|
|
24
|
+
if (existsSync(envPath)) {
|
|
25
|
+
loadDotenv({ path: envPath });
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const BASE_URL = process.env.REBASE_BASE_URL || "http://localhost:3001";
|
|
30
|
+
const API_TOKEN = process.env.REBASE_API_TOKEN || process.env.REBASE_TOKEN || "";
|
|
31
|
+
let _client = null;
|
|
32
|
+
async function getClient() {
|
|
33
|
+
if (!_client) {
|
|
34
|
+
const createRebaseClient = await loadClientSdk();
|
|
35
|
+
_client = createRebaseClient({
|
|
36
|
+
baseUrl: BASE_URL,
|
|
37
|
+
token: API_TOKEN || undefined,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return _client;
|
|
41
|
+
}
|
|
42
|
+
// ── MCP Server ──────────────────────────────────────────────────────────────
|
|
43
|
+
const server = new Server({ name: "rebase-mcp-server", version: "0.0.1" }, { capabilities: { tools: {}, resources: {} } });
|
|
44
|
+
const CLI_TOOLS = [
|
|
45
|
+
{
|
|
46
|
+
name: "rebase_schema_generate",
|
|
47
|
+
description: "Generate Drizzle schema from Rebase TypeScript collection definitions. Run this after adding or modifying collection files.",
|
|
48
|
+
inputSchema: { type: "object", properties: {} },
|
|
49
|
+
cmd: ["schema", "generate"],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "rebase_db_push",
|
|
53
|
+
description: "Apply the current Drizzle schema directly to the database (development shortcut, skips migration files).",
|
|
54
|
+
inputSchema: { type: "object", properties: {} },
|
|
55
|
+
cmd: ["db", "push"],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "rebase_db_pull",
|
|
59
|
+
description: "Introspect the live database and write back a Drizzle schema (reverse-engineer existing tables).",
|
|
60
|
+
inputSchema: { type: "object", properties: {} },
|
|
61
|
+
cmd: ["db", "pull"],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "rebase_db_generate",
|
|
65
|
+
description: "Generate SQL migration files from schema changes (compares current Drizzle schema against the last snapshot).",
|
|
66
|
+
inputSchema: { type: "object", properties: {} },
|
|
67
|
+
cmd: ["db", "generate"],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "rebase_db_migrate",
|
|
71
|
+
description: "Run all pending SQL migrations against the database.",
|
|
72
|
+
inputSchema: { type: "object", properties: {} },
|
|
73
|
+
cmd: ["db", "migrate"],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "rebase_generate_sdk",
|
|
77
|
+
description: "Generate a fully-typed JavaScript/TypeScript SDK from collection definitions.",
|
|
78
|
+
inputSchema: { type: "object", properties: {} },
|
|
79
|
+
cmd: ["generate-sdk"],
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
const DATA_TOOLS = [
|
|
83
|
+
{
|
|
84
|
+
name: "list_documents",
|
|
85
|
+
description: "List documents from a Rebase collection with optional filtering, sorting, and pagination.",
|
|
86
|
+
inputSchema: {
|
|
87
|
+
type: "object",
|
|
88
|
+
properties: {
|
|
89
|
+
collection: { type: "string", description: "Collection slug" },
|
|
90
|
+
limit: { type: "number", description: "Max results (default 25)" },
|
|
91
|
+
offset: { type: "number", description: "Skip N results" },
|
|
92
|
+
orderBy: { type: "string", description: "Sort field, optionally with :asc or :desc suffix" },
|
|
93
|
+
where: {
|
|
94
|
+
type: "object",
|
|
95
|
+
description: "Filter object, e.g. { \"status\": \"eq.active\", \"price\": \"gte.100\" }",
|
|
96
|
+
additionalProperties: { type: "string" },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
required: ["collection"],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "get_document",
|
|
104
|
+
description: "Get a single document by ID from a Rebase collection.",
|
|
105
|
+
inputSchema: {
|
|
106
|
+
type: "object",
|
|
107
|
+
properties: {
|
|
108
|
+
collection: { type: "string", description: "Collection slug" },
|
|
109
|
+
id: { type: "string", description: "Document ID" },
|
|
110
|
+
},
|
|
111
|
+
required: ["collection", "id"],
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "create_document",
|
|
116
|
+
description: "Create a new document in a Rebase collection.",
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: "object",
|
|
119
|
+
properties: {
|
|
120
|
+
collection: { type: "string", description: "Collection slug" },
|
|
121
|
+
data: { type: "object", description: "Document fields", additionalProperties: true },
|
|
122
|
+
},
|
|
123
|
+
required: ["collection", "data"],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "update_document",
|
|
128
|
+
description: "Update an existing document in a Rebase collection.",
|
|
129
|
+
inputSchema: {
|
|
130
|
+
type: "object",
|
|
131
|
+
properties: {
|
|
132
|
+
collection: { type: "string", description: "Collection slug" },
|
|
133
|
+
id: { type: "string", description: "Document ID" },
|
|
134
|
+
data: { type: "object", description: "Fields to update", additionalProperties: true },
|
|
135
|
+
},
|
|
136
|
+
required: ["collection", "id", "data"],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "delete_document",
|
|
141
|
+
description: "Delete a document from a Rebase collection.",
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: "object",
|
|
144
|
+
properties: {
|
|
145
|
+
collection: { type: "string", description: "Collection slug" },
|
|
146
|
+
id: { type: "string", description: "Document ID" },
|
|
147
|
+
},
|
|
148
|
+
required: ["collection", "id"],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
const ADMIN_TOOLS = [
|
|
153
|
+
{
|
|
154
|
+
name: "list_users",
|
|
155
|
+
description: "List all users registered in the Rebase backend, including their roles.",
|
|
156
|
+
inputSchema: { type: "object", properties: {} },
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: "create_user",
|
|
160
|
+
description: "Create a new user in the Rebase backend.",
|
|
161
|
+
inputSchema: {
|
|
162
|
+
type: "object",
|
|
163
|
+
properties: {
|
|
164
|
+
email: { type: "string", description: "User email" },
|
|
165
|
+
displayName: { type: "string", description: "Display name" },
|
|
166
|
+
password: { type: "string", description: "Initial password" },
|
|
167
|
+
roles: { type: "array", items: { type: "string" }, description: "Role IDs to assign" },
|
|
168
|
+
},
|
|
169
|
+
required: ["email"],
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "update_user",
|
|
174
|
+
description: "Update an existing user (email, display name, roles).",
|
|
175
|
+
inputSchema: {
|
|
176
|
+
type: "object",
|
|
177
|
+
properties: {
|
|
178
|
+
userId: { type: "string", description: "User UID" },
|
|
179
|
+
email: { type: "string" },
|
|
180
|
+
displayName: { type: "string" },
|
|
181
|
+
roles: { type: "array", items: { type: "string" } },
|
|
182
|
+
},
|
|
183
|
+
required: ["userId"],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "delete_user",
|
|
188
|
+
description: "Delete a user from the Rebase backend.",
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
userId: { type: "string", description: "User UID" },
|
|
193
|
+
},
|
|
194
|
+
required: ["userId"],
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "list_roles",
|
|
199
|
+
description: "List all roles defined in the Rebase backend.",
|
|
200
|
+
inputSchema: { type: "object", properties: {} },
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
const DEV_TOOLS = [
|
|
204
|
+
{
|
|
205
|
+
name: "rebase_dev_start",
|
|
206
|
+
description: "Start the Rebase development server (frontend + backend). Returns immediately — use rebase_dev_logs to check output.",
|
|
207
|
+
inputSchema: { type: "object", properties: {} },
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: "rebase_dev_logs",
|
|
211
|
+
description: "Read recent output from the running Rebase dev server.",
|
|
212
|
+
inputSchema: {
|
|
213
|
+
type: "object",
|
|
214
|
+
properties: {
|
|
215
|
+
lines: { type: "number", description: "Number of recent lines to return (default 50)" },
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "rebase_dev_stop",
|
|
221
|
+
description: "Stop the running Rebase development server.",
|
|
222
|
+
inputSchema: { type: "object", properties: {} },
|
|
223
|
+
},
|
|
224
|
+
];
|
|
225
|
+
const ALL_TOOLS = [
|
|
226
|
+
...CLI_TOOLS.map(({ cmd: _c, ...rest }) => rest),
|
|
227
|
+
...DATA_TOOLS,
|
|
228
|
+
...ADMIN_TOOLS,
|
|
229
|
+
...DEV_TOOLS,
|
|
230
|
+
];
|
|
231
|
+
// ── Tool Handlers ───────────────────────────────────────────────────────────
|
|
232
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
233
|
+
tools: ALL_TOOLS,
|
|
234
|
+
}));
|
|
235
|
+
/** Spawn `npx rebase <args>` and capture output. */
|
|
236
|
+
function runRebaseCmd(commandArgs) {
|
|
237
|
+
return new Promise((resolve) => {
|
|
238
|
+
const child = spawn("npx", ["rebase", ...commandArgs], {
|
|
239
|
+
cwd: PROJECT_DIR,
|
|
240
|
+
shell: true,
|
|
241
|
+
env: { ...process.env },
|
|
242
|
+
});
|
|
243
|
+
const chunks = [];
|
|
244
|
+
child.stdout?.on("data", (d) => chunks.push(d.toString()));
|
|
245
|
+
child.stderr?.on("data", (d) => chunks.push(d.toString()));
|
|
246
|
+
child.on("error", (err) => resolve(`Error spawning command: ${err.message}`));
|
|
247
|
+
child.on("close", (code) => {
|
|
248
|
+
const output = chunks.join("").trim();
|
|
249
|
+
resolve(code !== 0 ? `Command exited with code ${code}\n\n${output}` : output || "(no output)");
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// Dev server management
|
|
254
|
+
let devProcess = null;
|
|
255
|
+
const devLogs = [];
|
|
256
|
+
const MAX_DEV_LOG_LINES = 500;
|
|
257
|
+
function appendDevLog(line) {
|
|
258
|
+
devLogs.push(line);
|
|
259
|
+
if (devLogs.length > MAX_DEV_LOG_LINES) {
|
|
260
|
+
devLogs.splice(0, devLogs.length - MAX_DEV_LOG_LINES);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function textResult(text) {
|
|
264
|
+
return { content: [{ type: "text", text }] };
|
|
265
|
+
}
|
|
266
|
+
function jsonResult(data) {
|
|
267
|
+
return textResult(JSON.stringify(data, null, 2));
|
|
268
|
+
}
|
|
269
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
270
|
+
const { name, arguments: args } = request.params;
|
|
271
|
+
// ── CLI tools ───────────────────────────────────────────────────────
|
|
272
|
+
const cliTool = CLI_TOOLS.find((t) => t.name === name);
|
|
273
|
+
if (cliTool) {
|
|
274
|
+
const result = await runRebaseCmd(cliTool.cmd);
|
|
275
|
+
return textResult(result);
|
|
276
|
+
}
|
|
277
|
+
// ── Data tools (via @rebasepro/client) ──────────────────────────────
|
|
278
|
+
const client = await getClient();
|
|
279
|
+
switch (name) {
|
|
280
|
+
case "list_documents": {
|
|
281
|
+
const argsObj = args;
|
|
282
|
+
const { collection: slug, limit, offset, orderBy, where } = argsObj;
|
|
283
|
+
const result = await client.data.collection(slug).find({
|
|
284
|
+
limit,
|
|
285
|
+
offset,
|
|
286
|
+
orderBy,
|
|
287
|
+
where,
|
|
288
|
+
});
|
|
289
|
+
return jsonResult(result);
|
|
290
|
+
}
|
|
291
|
+
case "get_document": {
|
|
292
|
+
const argsObj = args;
|
|
293
|
+
const { collection: slug, id } = argsObj;
|
|
294
|
+
const entity = await client.data.collection(slug).findById(id);
|
|
295
|
+
if (!entity)
|
|
296
|
+
return textResult(`Document ${id} not found in ${slug}`);
|
|
297
|
+
return jsonResult(entity);
|
|
298
|
+
}
|
|
299
|
+
case "create_document": {
|
|
300
|
+
const argsObj = args;
|
|
301
|
+
const { collection: slug, data } = argsObj;
|
|
302
|
+
const entity = await client.data.collection(slug).create(data);
|
|
303
|
+
return jsonResult(entity);
|
|
304
|
+
}
|
|
305
|
+
case "update_document": {
|
|
306
|
+
const argsObj = args;
|
|
307
|
+
const { collection: slug, id, data } = argsObj;
|
|
308
|
+
const entity = await client.data.collection(slug).update(id, data);
|
|
309
|
+
return jsonResult(entity);
|
|
310
|
+
}
|
|
311
|
+
case "delete_document": {
|
|
312
|
+
const argsObj = args;
|
|
313
|
+
const { collection: slug, id } = argsObj;
|
|
314
|
+
await client.data.collection(slug).delete(id);
|
|
315
|
+
return textResult(`Deleted document ${id} from ${slug}`);
|
|
316
|
+
}
|
|
317
|
+
// ── Admin tools ────────────────────────────────────────────────────
|
|
318
|
+
case "list_users": {
|
|
319
|
+
const result = await client.admin.listUsers();
|
|
320
|
+
return jsonResult(result);
|
|
321
|
+
}
|
|
322
|
+
case "create_user": {
|
|
323
|
+
const argsObj = args;
|
|
324
|
+
const { email, displayName, password, roles } = argsObj;
|
|
325
|
+
const result = await client.admin.createUser({ email, displayName, password, roles });
|
|
326
|
+
return jsonResult(result);
|
|
327
|
+
}
|
|
328
|
+
case "update_user": {
|
|
329
|
+
const argsObj = args;
|
|
330
|
+
const { userId, email, displayName, roles } = argsObj;
|
|
331
|
+
const result = await client.admin.updateUser(userId, { email, displayName, roles });
|
|
332
|
+
return jsonResult(result);
|
|
333
|
+
}
|
|
334
|
+
case "delete_user": {
|
|
335
|
+
const argsObj = args;
|
|
336
|
+
const { userId } = argsObj;
|
|
337
|
+
const result = await client.admin.deleteUser(userId);
|
|
338
|
+
return jsonResult(result);
|
|
339
|
+
}
|
|
340
|
+
case "list_roles": {
|
|
341
|
+
const result = await client.admin.listRoles();
|
|
342
|
+
return jsonResult(result);
|
|
343
|
+
}
|
|
344
|
+
// ── Dev server management ──────────────────────────────────────────
|
|
345
|
+
case "rebase_dev_start": {
|
|
346
|
+
if (devProcess && !devProcess.killed) {
|
|
347
|
+
return textResult("Dev server is already running (PID " + devProcess.pid + ")");
|
|
348
|
+
}
|
|
349
|
+
devLogs.length = 0;
|
|
350
|
+
devProcess = spawn("pnpm", ["run", "dev"], {
|
|
351
|
+
cwd: resolve(PROJECT_DIR, "app"),
|
|
352
|
+
shell: true,
|
|
353
|
+
env: { ...process.env },
|
|
354
|
+
});
|
|
355
|
+
devProcess.stdout?.on("data", (d) => appendDevLog(d.toString()));
|
|
356
|
+
devProcess.stderr?.on("data", (d) => appendDevLog(d.toString()));
|
|
357
|
+
devProcess.on("close", (code) => {
|
|
358
|
+
appendDevLog(`\n[dev server exited with code ${code}]`);
|
|
359
|
+
devProcess = null;
|
|
360
|
+
});
|
|
361
|
+
// Wait a moment for initial output
|
|
362
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
363
|
+
return textResult(`Dev server started (PID ${devProcess?.pid})\n\n${devLogs.join("")}`);
|
|
364
|
+
}
|
|
365
|
+
case "rebase_dev_logs": {
|
|
366
|
+
const argsObj = args;
|
|
367
|
+
const lineCount = argsObj?.lines ?? 50;
|
|
368
|
+
const recent = devLogs.slice(-lineCount);
|
|
369
|
+
if (recent.length === 0) {
|
|
370
|
+
return textResult(devProcess ? "No output captured yet." : "Dev server is not running.");
|
|
371
|
+
}
|
|
372
|
+
return textResult(recent.join(""));
|
|
373
|
+
}
|
|
374
|
+
case "rebase_dev_stop": {
|
|
375
|
+
if (!devProcess || devProcess.killed) {
|
|
376
|
+
return textResult("Dev server is not running.");
|
|
377
|
+
}
|
|
378
|
+
devProcess.kill("SIGTERM");
|
|
379
|
+
return textResult("Dev server stopped.");
|
|
380
|
+
}
|
|
381
|
+
default:
|
|
382
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
// ── Resources ───────────────────────────────────────────────────────────────
|
|
386
|
+
function findCollectionsDir() {
|
|
387
|
+
const candidates = [
|
|
388
|
+
resolve(PROJECT_DIR, "app", "shared", "collections"),
|
|
389
|
+
resolve(PROJECT_DIR, "shared", "collections"),
|
|
390
|
+
resolve(PROJECT_DIR, "collections"),
|
|
391
|
+
];
|
|
392
|
+
for (const dir of candidates) {
|
|
393
|
+
if (existsSync(dir))
|
|
394
|
+
return dir;
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
399
|
+
const resources = [];
|
|
400
|
+
// Collection files
|
|
401
|
+
const collectionsDir = findCollectionsDir();
|
|
402
|
+
if (collectionsDir) {
|
|
403
|
+
const files = readdirSync(collectionsDir).filter((f) => f.endsWith(".ts") && f !== "index.ts");
|
|
404
|
+
for (const file of files) {
|
|
405
|
+
const name = file.replace(/\.ts$/, "");
|
|
406
|
+
resources.push({
|
|
407
|
+
uri: `rebase://collections/${name}`,
|
|
408
|
+
name: `Collection: ${name}`,
|
|
409
|
+
description: `TypeScript collection definition for "${name}"`,
|
|
410
|
+
mimeType: "text/typescript",
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Generated schema
|
|
415
|
+
const schemaPath = resolve(PROJECT_DIR, "app", "backend", "src", "schema.generated.ts");
|
|
416
|
+
if (existsSync(schemaPath)) {
|
|
417
|
+
resources.push({
|
|
418
|
+
uri: "rebase://schema",
|
|
419
|
+
name: "Generated Drizzle Schema",
|
|
420
|
+
description: "Auto-generated Drizzle ORM schema from collection definitions",
|
|
421
|
+
mimeType: "text/typescript",
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
return { resources };
|
|
425
|
+
});
|
|
426
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
427
|
+
const { uri } = request.params;
|
|
428
|
+
if (uri === "rebase://schema") {
|
|
429
|
+
const schemaPath = resolve(PROJECT_DIR, "app", "backend", "src", "schema.generated.ts");
|
|
430
|
+
if (!existsSync(schemaPath)) {
|
|
431
|
+
throw new Error("Generated schema not found. Run `rebase schema generate` first.");
|
|
432
|
+
}
|
|
433
|
+
return {
|
|
434
|
+
contents: [{
|
|
435
|
+
uri,
|
|
436
|
+
mimeType: "text/typescript",
|
|
437
|
+
text: readFileSync(schemaPath, "utf-8"),
|
|
438
|
+
}],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
const collectionMatch = uri.match(/^rebase:\/\/collections\/(.+)$/);
|
|
442
|
+
if (collectionMatch) {
|
|
443
|
+
const name = collectionMatch[1];
|
|
444
|
+
const collectionsDir = findCollectionsDir();
|
|
445
|
+
if (!collectionsDir)
|
|
446
|
+
throw new Error("Collections directory not found.");
|
|
447
|
+
const filePath = join(collectionsDir, `${name}.ts`);
|
|
448
|
+
if (!existsSync(filePath))
|
|
449
|
+
throw new Error(`Collection "${name}" not found.`);
|
|
450
|
+
return {
|
|
451
|
+
contents: [{
|
|
452
|
+
uri,
|
|
453
|
+
mimeType: "text/typescript",
|
|
454
|
+
text: readFileSync(filePath, "utf-8"),
|
|
455
|
+
}],
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
459
|
+
});
|
|
460
|
+
// ── Start ───────────────────────────────────────────────────────────────────
|
|
461
|
+
async function main() {
|
|
462
|
+
const transport = new StdioServerTransport();
|
|
463
|
+
await server.connect(transport);
|
|
464
|
+
}
|
|
465
|
+
main().catch(console.error);
|
|
3
466
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,48 +1,33 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"keywords": [
|
|
34
|
-
"rebase",
|
|
35
|
-
"mcp",
|
|
36
|
-
"model-context-protocol",
|
|
37
|
-
"firebase",
|
|
38
|
-
"firestore",
|
|
39
|
-
"cms",
|
|
40
|
-
"ai"
|
|
41
|
-
],
|
|
42
|
-
"license": "MIT",
|
|
43
|
-
"repository": {
|
|
44
|
-
"type": "git",
|
|
45
|
-
"url": "https://github.com/Rebaseco/rebase"
|
|
46
|
-
},
|
|
47
|
-
"gitHead": "d935eefa5aa8d1009a2398cfac2c1e4ee9aeb6b6"
|
|
2
|
+
"name": "@rebasepro/mcp-server",
|
|
3
|
+
"version": "0.0.1-canary.4d4fb3e",
|
|
4
|
+
"description": "Model Context Protocol Server for Rebase — exposes schema, DB, document, and user management tools to AI assistants.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"rebase-mcp": "bin/rebase-mcp.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"dev": "tsc --watch"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@modelcontextprotocol/sdk": "^1.2.0",
|
|
18
|
+
"@rebasepro/client": "0.0.1-canary.4d4fb3e",
|
|
19
|
+
"dotenv": "^16.0.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^20.0.0",
|
|
23
|
+
"typescript": "^5.0.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"bin/",
|
|
27
|
+
"dist/"
|
|
28
|
+
],
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"gitHead": "71bcef3c51a458cd054f7924cc18efbbe515dcc8"
|
|
48
33
|
}
|
package/README.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# @rebasepro/mcp-server
|
|
2
|
-
|
|
3
|
-
MCP server for [Rebase Cloud](https://rebase.pro). Lets AI assistants manage your CMS — browse data, create/update/delete documents, manage users, and generate collection schemas with AI.
|
|
4
|
-
|
|
5
|
-
## Setup
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
cd packages/mcp_server && npm install && npm run build
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Claude Desktop
|
|
12
|
-
|
|
13
|
-
Add to `claude_desktop_config.json`:
|
|
14
|
-
|
|
15
|
-
```json
|
|
16
|
-
{
|
|
17
|
-
"mcpServers": {
|
|
18
|
-
"rebase": {
|
|
19
|
-
"command": "node",
|
|
20
|
-
"args": ["/path/to/packages/mcp_server/dist/cli.js"]
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Use `rebase_login` to sign in when prompted. Tokens shared with Rebase CLI (`~/.rebase/tokens.json`).
|
|
27
|
-
|
|
28
|
-
## Tools
|
|
29
|
-
|
|
30
|
-
### Auth
|
|
31
|
-
| Tool | Description |
|
|
32
|
-
|------|-------------|
|
|
33
|
-
| `rebase_login` | Sign in via browser (Google OAuth) |
|
|
34
|
-
| `rebase_logout` | Sign out |
|
|
35
|
-
| `rebase_get_current_user` | Show current user |
|
|
36
|
-
|
|
37
|
-
### Projects & Users
|
|
38
|
-
| Tool | Description |
|
|
39
|
-
|------|-------------|
|
|
40
|
-
| `list_projects` | List Rebase Cloud projects |
|
|
41
|
-
| `get_root_collections` | List Firestore root collections |
|
|
42
|
-
| `list_users` | List project users and roles |
|
|
43
|
-
| `add_user` | Invite a user |
|
|
44
|
-
| `update_user_roles` | Change user roles |
|
|
45
|
-
| `remove_user` | Remove a user |
|
|
46
|
-
|
|
47
|
-
### Documents (Firestore CRUD)
|
|
48
|
-
| Tool | Description |
|
|
49
|
-
|------|-------------|
|
|
50
|
-
| `list_documents` | Query documents (filters, ordering, pagination) |
|
|
51
|
-
| `get_document` | Get a document by path |
|
|
52
|
-
| `create_document` | Create a new document |
|
|
53
|
-
| `update_document` | Partial update of a document |
|
|
54
|
-
| `delete_document` | Delete a document |
|
|
55
|
-
| `count_documents` | Count documents in a collection |
|
|
56
|
-
|
|
57
|
-
### AI & Export
|
|
58
|
-
| Tool | Description |
|
|
59
|
-
|------|-------------|
|
|
60
|
-
| `generate_collection` | AI-generate a collection schema |
|
|
61
|
-
| `modify_collection` | AI-modify an existing schema |
|
|
62
|
-
| `export_collection` | Export collection data as JSON |
|
|
63
|
-
|
|
64
|
-
## Resources
|
|
65
|
-
|
|
66
|
-
| URI | Description |
|
|
67
|
-
|-----|-------------|
|
|
68
|
-
| `rebase://projects/{id}/collections` | Project's Firestore collections |
|
|
69
|
-
| `rebase://projects/{id}/users` | Project users |
|