@rebasepro/mcp-server 0.0.1-canary.0

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.
Files changed (64) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +69 -0
  3. package/dist/api-client.d.ts +35 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +118 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/auth.d.ts +16 -0
  8. package/dist/auth.d.ts.map +1 -0
  9. package/dist/auth.js +53 -0
  10. package/dist/auth.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +66 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/resources/project.d.ts +7 -0
  20. package/dist/resources/project.d.ts.map +1 -0
  21. package/dist/resources/project.js +57 -0
  22. package/dist/resources/project.js.map +1 -0
  23. package/dist/server.d.ts +6 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +34 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/tools/auth.d.ts +6 -0
  28. package/dist/tools/auth.d.ts.map +1 -0
  29. package/dist/tools/auth.js +89 -0
  30. package/dist/tools/auth.js.map +1 -0
  31. package/dist/tools/collections.d.ts +7 -0
  32. package/dist/tools/collections.d.ts.map +1 -0
  33. package/dist/tools/collections.js +42 -0
  34. package/dist/tools/collections.js.map +1 -0
  35. package/dist/tools/documents.d.ts +8 -0
  36. package/dist/tools/documents.d.ts.map +1 -0
  37. package/dist/tools/documents.js +178 -0
  38. package/dist/tools/documents.js.map +1 -0
  39. package/dist/tools/export.d.ts +7 -0
  40. package/dist/tools/export.d.ts.map +1 -0
  41. package/dist/tools/export.js +44 -0
  42. package/dist/tools/export.js.map +1 -0
  43. package/dist/tools/projects.d.ts +7 -0
  44. package/dist/tools/projects.d.ts.map +1 -0
  45. package/dist/tools/projects.js +42 -0
  46. package/dist/tools/projects.js.map +1 -0
  47. package/dist/tools/users.d.ts +7 -0
  48. package/dist/tools/users.d.ts.map +1 -0
  49. package/dist/tools/users.js +74 -0
  50. package/dist/tools/users.js.map +1 -0
  51. package/package.json +48 -0
  52. package/src/api-client.ts +146 -0
  53. package/src/auth.ts +75 -0
  54. package/src/cli.ts +70 -0
  55. package/src/index.ts +2 -0
  56. package/src/resources/project.ts +68 -0
  57. package/src/server.ts +42 -0
  58. package/src/tools/auth.ts +110 -0
  59. package/src/tools/collections.ts +52 -0
  60. package/src/tools/documents.ts +210 -0
  61. package/src/tools/export.ts +51 -0
  62. package/src/tools/projects.ts +52 -0
  63. package/src/tools/users.ts +92 -0
  64. package/tsconfig.json +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AACA,OAAO,EACH,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,UAAU,GACb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAE/C,MAAM,CAAC,YAAY,CACf,cAAc,EACd;QACI,WAAW,EAAE,yHAAyH;KACzI,EACD,KAAK,IAAI,EAAE;QACP,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;QAC5C,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wBAAwB,aAAa,wCAAwC;qBACtF,CAAC;aACL,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,MAAM,SAAS,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;YACpC,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6BAA6B,KAAK,IAAI,SAAS,EAAE;qBAC1D,CAAC;aACL,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iBAAiB,KAAK,CAAC,OAAO,EAAE;qBACzC,CAAC;gBACF,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACf,eAAe,EACf;QACI,WAAW,EAAE,wDAAwD;KACxE,EACD,KAAK,IAAI,EAAE;QACP,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAChB,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,0BAA0B;qBACnC,CAAC;aACL,CAAC;QACN,CAAC;QAED,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,IAAI,CAAC;YACD,MAAM,UAAU,EAAE,CAAC;YACnB,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2BAA2B,KAAK,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;qBACxD,CAAC;aACL,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,KAAK,CAAC,OAAO,EAAE;qBAC1C,CAAC;gBACF,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACf,yBAAyB,EACzB;QACI,WAAW,EAAE,6CAA6C;KAC7D,EACD,KAAK,IAAI,EAAE;QACP,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6CAA6C;qBACtD,CAAC;aACL,CAAC;QACN,CAAC;QACD,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iBAAiB,KAAK,EAAE;iBACjC,CAAC;SACL,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { RebaseApiClient } from "../api-client.js";
3
+ /**
4
+ * Register collection schema tools.
5
+ */
6
+ export declare function registerCollectionTools(server: McpServer, api: RebaseApiClient): void;
7
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QA4C9E"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register collection schema tools.
4
+ */
5
+ export function registerCollectionTools(server, api) {
6
+ server.registerTool("generate_collection", {
7
+ description: `Generate a new Rebase collection schema using AI. Provide a natural language description
8
+ of the collection you want (e.g., "A blog with posts that have title, body, author, tags,
9
+ and a featured image"). Returns a complete Rebase collection configuration.`,
10
+ inputSchema: {
11
+ prompt: z.string().describe("Natural language description of the collection to generate"),
12
+ existingCollections: z.array(z.any()).optional().describe("Optional existing collection schemas for context"),
13
+ },
14
+ }, async ({ prompt, existingCollections }) => {
15
+ try {
16
+ const result = await api.generateCollection(prompt, existingCollections ?? []);
17
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
18
+ }
19
+ catch (error) {
20
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
21
+ }
22
+ });
23
+ server.registerTool("modify_collection", {
24
+ description: `Modify an existing Rebase collection schema using AI. Describe the changes you want
25
+ (e.g., "Add a priority enum with low/medium/high" or "Make title required with max 100 chars").
26
+ Returns the updated schema and a list of operations performed.`,
27
+ inputSchema: {
28
+ prompt: z.string().describe("Description of the modifications"),
29
+ existingCollection: z.any().describe("The current collection schema to modify"),
30
+ existingCollections: z.array(z.any()).optional().describe("Optional list of all collection schemas for context"),
31
+ },
32
+ }, async ({ prompt, existingCollection, existingCollections }) => {
33
+ try {
34
+ const result = await api.generateCollection(prompt, existingCollections ?? [], existingCollection);
35
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
36
+ }
37
+ catch (error) {
38
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,GAAoB;IAE3E,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;QACI,WAAW,EAAE;;4EAEmD;QAChE,WAAW,EAAE;YACT,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACzF,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;SAChH;KACJ,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;YAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpG,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACf,mBAAmB,EACnB;QACI,WAAW,EAAE;;+DAEsC;QACnD,WAAW,EAAE;YACT,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC/D,kBAAkB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC/E,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SACnH;KACJ,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,EAAE,EAAE;QAC1D,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACnG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpG,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { RebaseApiClient } from "../api-client.js";
3
+ /**
4
+ * Register Firestore document CRUD tools — the core CMS operations.
5
+ * All operations go through the Rebase backend (which has service account access to user projects).
6
+ */
7
+ export declare function registerDocumentTools(server: McpServer, api: RebaseApiClient): void;
8
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QAyM5E"}
@@ -0,0 +1,178 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register Firestore document CRUD tools — the core CMS operations.
4
+ * All operations go through the Rebase backend (which has service account access to user projects).
5
+ */
6
+ export function registerDocumentTools(server, api) {
7
+ // ─── 1. Read documents (list/query) ────────────────────
8
+ server.registerTool("list_documents", {
9
+ description: `List documents from a Firestore collection. Supports filtering, ordering, and pagination.
10
+ Use this to browse data in your CMS collections.`,
11
+ inputSchema: {
12
+ projectId: z.string().describe("Firebase project ID"),
13
+ collectionPath: z.string().describe("Collection path (e.g., 'products', 'users', 'blog/posts')"),
14
+ limit: z.number().optional().describe("Max number of documents to return (default: 20)"),
15
+ orderBy: z.string().optional().describe("Field to order by"),
16
+ orderDirection: z.enum(["asc", "desc"]).optional().describe("Sort direction"),
17
+ filters: z.array(z.object({
18
+ field: z.string().describe("Field path to filter on"),
19
+ op: z.enum([
20
+ "==", "!=", "<", "<=", ">", ">=",
21
+ "array-contains", "in", "array-contains-any", "not-in",
22
+ ]).describe("Firestore filter operator"),
23
+ value: z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(z.any())]).describe("Value to compare against"),
24
+ })).optional().describe("Optional filters to apply"),
25
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
26
+ },
27
+ annotations: { readOnlyHint: true },
28
+ }, async ({ projectId, collectionPath, limit, orderBy, orderDirection, filters, databaseId }) => {
29
+ try {
30
+ const result = await api.listDocuments(projectId, {
31
+ path: collectionPath,
32
+ limit: limit ?? 20,
33
+ orderBy,
34
+ orderDirection,
35
+ filters: filters,
36
+ databaseId,
37
+ });
38
+ return {
39
+ content: [{
40
+ type: "text",
41
+ text: JSON.stringify(result, null, 2),
42
+ }],
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
48
+ isError: true,
49
+ };
50
+ }
51
+ });
52
+ // ─── 2. Get single document ────────────────────────────
53
+ server.registerTool("get_document", {
54
+ description: "Get a specific document by its collection path and ID. Returns all fields of the document.",
55
+ inputSchema: {
56
+ projectId: z.string().describe("Firebase project ID"),
57
+ collectionPath: z.string().describe("Collection path (e.g., 'products', 'users')"),
58
+ documentId: z.string().describe("Document ID"),
59
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
60
+ },
61
+ annotations: { readOnlyHint: true },
62
+ }, async ({ projectId, collectionPath, documentId, databaseId }) => {
63
+ try {
64
+ const doc = await api.getDocument(projectId, collectionPath, documentId, databaseId);
65
+ return {
66
+ content: [{ type: "text", text: JSON.stringify(doc, null, 2) }],
67
+ };
68
+ }
69
+ catch (error) {
70
+ return {
71
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
72
+ isError: true,
73
+ };
74
+ }
75
+ });
76
+ // ─── 3. Create document ────────────────────────────────
77
+ server.registerTool("create_document", {
78
+ description: "Create a new document in a Firestore collection. Provide the field values as a JSON object.",
79
+ inputSchema: {
80
+ projectId: z.string().describe("Firebase project ID"),
81
+ collectionPath: z.string().describe("Collection path (e.g., 'products')"),
82
+ data: z.record(z.any()).describe("Document fields as a JSON object"),
83
+ documentId: z.string().optional().describe("Optional document ID. If not provided, Firestore generates one."),
84
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
85
+ },
86
+ }, async ({ projectId, collectionPath, data, documentId, databaseId }) => {
87
+ try {
88
+ const doc = await api.createDocument(projectId, collectionPath, data, documentId, databaseId);
89
+ return {
90
+ content: [{
91
+ type: "text",
92
+ text: `Document created successfully.\n\n${JSON.stringify(doc, null, 2)}`,
93
+ }],
94
+ };
95
+ }
96
+ catch (error) {
97
+ return {
98
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
99
+ isError: true,
100
+ };
101
+ }
102
+ });
103
+ // ─── 4. Update document ────────────────────────────────
104
+ server.registerTool("update_document", {
105
+ description: "Update fields of an existing document. Only the specified fields are modified (partial update / merge).",
106
+ inputSchema: {
107
+ projectId: z.string().describe("Firebase project ID"),
108
+ collectionPath: z.string().describe("Collection path (e.g., 'products')"),
109
+ documentId: z.string().describe("Document ID to update"),
110
+ data: z.record(z.any()).describe("Fields to update as a JSON object"),
111
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
112
+ },
113
+ }, async ({ projectId, collectionPath, documentId, data, databaseId }) => {
114
+ try {
115
+ const doc = await api.updateDocument(projectId, collectionPath, documentId, data, databaseId);
116
+ return {
117
+ content: [{
118
+ type: "text",
119
+ text: `Document updated successfully.\n\n${JSON.stringify(doc, null, 2)}`,
120
+ }],
121
+ };
122
+ }
123
+ catch (error) {
124
+ return {
125
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
126
+ isError: true,
127
+ };
128
+ }
129
+ });
130
+ // ─── 5. Delete document ────────────────────────────────
131
+ server.registerTool("delete_document", {
132
+ description: "Delete a document from Firestore. This action is permanent.",
133
+ inputSchema: {
134
+ projectId: z.string().describe("Firebase project ID"),
135
+ collectionPath: z.string().describe("Collection path (e.g., 'products')"),
136
+ documentId: z.string().describe("Document ID to delete"),
137
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
138
+ },
139
+ annotations: { destructiveHint: true },
140
+ }, async ({ projectId, collectionPath, documentId, databaseId }) => {
141
+ try {
142
+ await api.deleteDocument(projectId, collectionPath, documentId, databaseId);
143
+ return {
144
+ content: [{ type: "text", text: `Document deleted: ${collectionPath}/${documentId}` }],
145
+ };
146
+ }
147
+ catch (error) {
148
+ return {
149
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
150
+ isError: true,
151
+ };
152
+ }
153
+ });
154
+ // ─── 6. Count documents ────────────────────────────────
155
+ server.registerTool("count_documents", {
156
+ description: "Count the total number of documents in a Firestore collection.",
157
+ inputSchema: {
158
+ projectId: z.string().describe("Firebase project ID"),
159
+ collectionPath: z.string().describe("Collection path (e.g., 'products')"),
160
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
161
+ },
162
+ annotations: { readOnlyHint: true },
163
+ }, async ({ projectId, collectionPath, databaseId }) => {
164
+ try {
165
+ const result = await api.countDocuments(projectId, collectionPath, databaseId);
166
+ return {
167
+ content: [{ type: "text", text: `Collection "${collectionPath}" contains ${result.count} documents.` }],
168
+ };
169
+ }
170
+ catch (error) {
171
+ return {
172
+ content: [{ type: "text", text: `Error: ${error.response?.data?.error ?? error.message}` }],
173
+ isError: true,
174
+ };
175
+ }
176
+ });
177
+ }
178
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { RebaseApiClient } from "../api-client.js";
3
+ /**
4
+ * Register data export tool.
5
+ */
6
+ export declare function registerExportTools(server: McpServer, api: RebaseApiClient): void;
7
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QA2C1E"}
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register data export tool.
4
+ */
5
+ export function registerExportTools(server, api) {
6
+ server.registerTool("export_collection", {
7
+ description: `Export documents from a Firestore collection as JSON. Useful for data backups,
8
+ analysis, or migration. For large collections, use the limit parameter.`,
9
+ inputSchema: {
10
+ projectId: z.string().describe("Firebase project ID"),
11
+ collectionPath: z.string().describe("Collection path to export (e.g., 'products')"),
12
+ limit: z.number().optional().describe("Max documents to export (default: 100, max: 500)"),
13
+ databaseId: z.string().optional().describe("Firestore database ID (default: '(default)')"),
14
+ },
15
+ annotations: { readOnlyHint: true },
16
+ }, async ({ projectId, collectionPath, limit, databaseId }) => {
17
+ try {
18
+ const maxLimit = Math.min(limit ?? 100, 500);
19
+ const result = await api.listDocuments(projectId, {
20
+ path: collectionPath,
21
+ limit: maxLimit,
22
+ databaseId,
23
+ });
24
+ return {
25
+ content: [{
26
+ type: "text",
27
+ text: JSON.stringify({
28
+ collection: collectionPath,
29
+ exportedAt: new Date().toISOString(),
30
+ count: result.documents?.length ?? 0,
31
+ documents: result.documents ?? [],
32
+ }, null, 2),
33
+ }],
34
+ };
35
+ }
36
+ catch (error) {
37
+ return {
38
+ content: [{ type: "text", text: `Error exporting: ${error.response?.data?.error ?? error.message}` }],
39
+ isError: true,
40
+ };
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,GAAoB;IAEvE,MAAM,CAAC,YAAY,CACf,mBAAmB,EACnB;QACI,WAAW,EAAE;wEAC+C;QAC5D,WAAW,EAAE;YACT,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACzF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SAC7F;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;QACvD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE;gBAC9C,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,QAAQ;gBACf,UAAU;aACb,CAAC,CAAC;YAEH,OAAO;gBACH,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACjB,UAAU,EAAE,cAAc;4BAC1B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;4BACpC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;yBACpC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACd,CAAC;aACL,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9G,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { RebaseApiClient } from "../api-client.js";
3
+ /**
4
+ * Register project management tools.
5
+ */
6
+ export declare function registerProjectTools(server: McpServer, api: RebaseApiClient): void;
7
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QA4C3E"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register project management tools.
4
+ */
5
+ export function registerProjectTools(server, api) {
6
+ server.registerTool("list_projects", {
7
+ description: "List all Rebase Cloud projects accessible by the authenticated user",
8
+ }, async () => {
9
+ try {
10
+ const projects = await api.listProjects();
11
+ return {
12
+ content: [{ type: "text", text: JSON.stringify(projects, null, 2) }],
13
+ };
14
+ }
15
+ catch (error) {
16
+ return {
17
+ content: [{ type: "text", text: `Error listing projects: ${error.message}` }],
18
+ isError: true,
19
+ };
20
+ }
21
+ });
22
+ server.registerTool("get_root_collections", {
23
+ description: "List all Firestore root-level collections in a Rebase project. Returns collection paths and database IDs.",
24
+ inputSchema: {
25
+ projectId: z.string().describe("The Firebase project ID"),
26
+ },
27
+ }, async ({ projectId }) => {
28
+ try {
29
+ const collections = await api.getRootCollections(projectId);
30
+ return {
31
+ content: [{ type: "text", text: JSON.stringify(collections, null, 2) }],
32
+ };
33
+ }
34
+ catch (error) {
35
+ return {
36
+ content: [{ type: "text", text: `Error: ${error.message}` }],
37
+ isError: true,
38
+ };
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,GAAoB;IAExE,MAAM,CAAC,YAAY,CACf,eAAe,EACf;QACI,WAAW,EAAE,qEAAqE;KACrF,EACD,KAAK,IAAI,EAAE;QACP,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAChF,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtF,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,CAAC,YAAY,CACf,sBAAsB,EACtB;QACI,WAAW,EAAE,2GAA2G;QACxH,WAAW,EAAE;YACT,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAC5D;KACJ,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC5D,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACrE,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { RebaseApiClient } from "../api-client.js";
3
+ /**
4
+ * Register user management tools.
5
+ */
6
+ export declare function registerUserTools(server: McpServer, api: RebaseApiClient): void;
7
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QAoFxE"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Register user management tools.
4
+ */
5
+ export function registerUserTools(server, api) {
6
+ server.registerTool("list_users", {
7
+ description: "List all users that have access to a Rebase project, including their roles (admin, editor, viewer)",
8
+ inputSchema: {
9
+ projectId: z.string().describe("The Firebase project ID"),
10
+ },
11
+ }, async ({ projectId }) => {
12
+ try {
13
+ const result = await api.listUsers(projectId);
14
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
15
+ }
16
+ catch (error) {
17
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
18
+ }
19
+ });
20
+ server.registerTool("add_user", {
21
+ description: "Invite a new user to a Rebase project. Sends an invitation email.",
22
+ inputSchema: {
23
+ projectId: z.string().describe("The Firebase project ID"),
24
+ email: z.string().email().describe("Email address of the user to invite"),
25
+ roles: z.array(z.enum(["admin", "editor", "viewer"])).describe("Roles to assign"),
26
+ },
27
+ }, async ({ projectId, email, roles }) => {
28
+ try {
29
+ const result = await api.createUser(projectId, email, roles);
30
+ return {
31
+ content: [{ type: "text", text: `Invited ${email} with roles: ${roles.join(", ")}\n\n${JSON.stringify(result, null, 2)}` }],
32
+ };
33
+ }
34
+ catch (error) {
35
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
36
+ }
37
+ });
38
+ server.registerTool("update_user_roles", {
39
+ description: "Update the roles of an existing user in a Rebase project",
40
+ inputSchema: {
41
+ projectId: z.string().describe("The Firebase project ID"),
42
+ userId: z.string().describe("The user ID to update"),
43
+ roles: z.array(z.enum(["admin", "editor", "viewer"])).describe("New roles"),
44
+ },
45
+ }, async ({ projectId, userId, roles }) => {
46
+ try {
47
+ const result = await api.updateUser(projectId, userId, roles);
48
+ return {
49
+ content: [{ type: "text", text: `Updated user ${userId} roles to: ${roles.join(", ")}\n\n${JSON.stringify(result, null, 2)}` }],
50
+ };
51
+ }
52
+ catch (error) {
53
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
54
+ }
55
+ });
56
+ server.registerTool("remove_user", {
57
+ description: "Remove a user from a Rebase project, revoking their access",
58
+ inputSchema: {
59
+ projectId: z.string().describe("The Firebase project ID"),
60
+ userId: z.string().describe("The user ID to remove"),
61
+ },
62
+ }, async ({ projectId, userId }) => {
63
+ try {
64
+ const result = await api.deleteUser(projectId, userId);
65
+ return {
66
+ content: [{ type: "text", text: `Removed user ${userId}\n\n${JSON.stringify(result, null, 2)}` }],
67
+ };
68
+ }
69
+ catch (error) {
70
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@rebasepro/mcp-server",
3
+ "version": "0.0.1-canary.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "description": "MCP server for Rebase Cloud — manage projects, collections, users, and AI features via the Model Context Protocol",
8
+ "type": "module",
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "bin": {
12
+ "rebase-mcp": "./dist/cli.js"
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "start": "node dist/cli.js",
18
+ "clean": "rm -rf dist"
19
+ },
20
+ "dependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.12.1",
22
+ "@rebasepro/cli": "^3.1.0",
23
+ "axios": "^1.7.0",
24
+ "zod": "^3.24.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.0.0",
28
+ "typescript": "^5.7.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=18"
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": "646afae9c387c3ce02c699d98cd8c7272bdd1929"
48
+ }