firebase-mcp 0.2.0 → 0.3.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 (112) hide show
  1. package/README.md +6 -11
  2. package/dist/cli/index.js +9 -9
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/config/index.d.ts +39 -47
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +46 -37
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/firebase/index.d.ts +9 -18
  9. package/dist/firebase/index.d.ts.map +1 -1
  10. package/dist/firebase/index.js +28 -30
  11. package/dist/firebase/index.js.map +1 -1
  12. package/dist/project/index.d.ts +17 -0
  13. package/dist/project/index.d.ts.map +1 -0
  14. package/dist/project/index.js +38 -0
  15. package/dist/project/index.js.map +1 -0
  16. package/dist/server/index.d.ts +11 -19
  17. package/dist/server/index.d.ts.map +1 -1
  18. package/dist/server/index.js +96 -46
  19. package/dist/server/index.js.map +1 -1
  20. package/dist/task/index.d.ts +53 -0
  21. package/dist/task/index.d.ts.map +1 -0
  22. package/dist/task/index.js +177 -0
  23. package/dist/task/index.js.map +1 -0
  24. package/dist/tools/auth/get_user.d.ts +9 -15
  25. package/dist/tools/auth/get_user.d.ts.map +1 -1
  26. package/dist/tools/auth/get_user.js +29 -20
  27. package/dist/tools/auth/get_user.js.map +1 -1
  28. package/dist/tools/auth/index.d.ts +1 -0
  29. package/dist/tools/auth/index.d.ts.map +1 -1
  30. package/dist/tools/auth/index.js +1 -0
  31. package/dist/tools/auth/index.js.map +1 -1
  32. package/dist/tools/auth/list_users.d.ts +7 -11
  33. package/dist/tools/auth/list_users.d.ts.map +1 -1
  34. package/dist/tools/auth/list_users.js +19 -11
  35. package/dist/tools/auth/list_users.js.map +1 -1
  36. package/dist/tools/auth/read.d.ts +15 -0
  37. package/dist/tools/auth/read.d.ts.map +1 -0
  38. package/dist/tools/auth/read.js +72 -0
  39. package/dist/tools/auth/read.js.map +1 -0
  40. package/dist/tools/config/get_config.d.ts +6 -0
  41. package/dist/tools/config/get_config.d.ts.map +1 -0
  42. package/dist/tools/config/get_config.js +31 -0
  43. package/dist/tools/config/get_config.js.map +1 -0
  44. package/dist/tools/config/index.d.ts +3 -0
  45. package/dist/tools/config/index.d.ts.map +1 -0
  46. package/dist/tools/config/index.js +19 -0
  47. package/dist/tools/config/index.js.map +1 -0
  48. package/dist/tools/config/reload_config.d.ts +8 -0
  49. package/dist/tools/config/reload_config.d.ts.map +1 -0
  50. package/dist/tools/config/reload_config.js +44 -0
  51. package/dist/tools/config/reload_config.js.map +1 -0
  52. package/dist/tools/firestore/aggregate_collection.d.ts +7 -12
  53. package/dist/tools/firestore/aggregate_collection.d.ts.map +1 -1
  54. package/dist/tools/firestore/aggregate_collection.js +21 -15
  55. package/dist/tools/firestore/aggregate_collection.js.map +1 -1
  56. package/dist/tools/firestore/count_documents.d.ts +7 -12
  57. package/dist/tools/firestore/count_documents.d.ts.map +1 -1
  58. package/dist/tools/firestore/count_documents.js +21 -15
  59. package/dist/tools/firestore/count_documents.js.map +1 -1
  60. package/dist/tools/firestore/get_collection_schema.d.ts +8 -13
  61. package/dist/tools/firestore/get_collection_schema.d.ts.map +1 -1
  62. package/dist/tools/firestore/get_collection_schema.js +23 -19
  63. package/dist/tools/firestore/get_collection_schema.js.map +1 -1
  64. package/dist/tools/firestore/get_document.d.ts +10 -17
  65. package/dist/tools/firestore/get_document.d.ts.map +1 -1
  66. package/dist/tools/firestore/get_document.js +32 -23
  67. package/dist/tools/firestore/get_document.js.map +1 -1
  68. package/dist/tools/firestore/get_many_documents.d.ts +7 -13
  69. package/dist/tools/firestore/get_many_documents.d.ts.map +1 -1
  70. package/dist/tools/firestore/get_many_documents.js +25 -26
  71. package/dist/tools/firestore/get_many_documents.js.map +1 -1
  72. package/dist/tools/firestore/index.d.ts +1 -0
  73. package/dist/tools/firestore/index.d.ts.map +1 -1
  74. package/dist/tools/firestore/index.js +1 -0
  75. package/dist/tools/firestore/index.js.map +1 -1
  76. package/dist/tools/firestore/list_collections.d.ts +7 -12
  77. package/dist/tools/firestore/list_collections.d.ts.map +1 -1
  78. package/dist/tools/firestore/list_collections.js +25 -22
  79. package/dist/tools/firestore/list_collections.js.map +1 -1
  80. package/dist/tools/firestore/list_documents.d.ts +7 -12
  81. package/dist/tools/firestore/list_documents.d.ts.map +1 -1
  82. package/dist/tools/firestore/list_documents.js +22 -20
  83. package/dist/tools/firestore/list_documents.js.map +1 -1
  84. package/dist/tools/firestore/list_indexes.d.ts +7 -11
  85. package/dist/tools/firestore/list_indexes.d.ts.map +1 -1
  86. package/dist/tools/firestore/list_indexes.js +22 -22
  87. package/dist/tools/firestore/list_indexes.js.map +1 -1
  88. package/dist/tools/firestore/query_collection.d.ts +7 -13
  89. package/dist/tools/firestore/query_collection.d.ts.map +1 -1
  90. package/dist/tools/firestore/query_collection.js +24 -27
  91. package/dist/tools/firestore/query_collection.js.map +1 -1
  92. package/dist/tools/firestore/query_collection_group.d.ts +7 -13
  93. package/dist/tools/firestore/query_collection_group.d.ts.map +1 -1
  94. package/dist/tools/firestore/query_collection_group.js +24 -24
  95. package/dist/tools/firestore/query_collection_group.js.map +1 -1
  96. package/dist/tools/firestore/read.d.ts +65 -0
  97. package/dist/tools/firestore/read.d.ts.map +1 -0
  98. package/dist/tools/firestore/read.js +197 -0
  99. package/dist/tools/firestore/read.js.map +1 -0
  100. package/dist/tools/firestore/read_collections.d.ts +7 -13
  101. package/dist/tools/firestore/read_collections.d.ts.map +1 -1
  102. package/dist/tools/firestore/read_collections.js +27 -33
  103. package/dist/tools/firestore/read_collections.js.map +1 -1
  104. package/dist/tools/index.d.ts +9 -103
  105. package/dist/tools/index.d.ts.map +1 -1
  106. package/dist/tools/index.js +76 -79
  107. package/dist/tools/index.js.map +1 -1
  108. package/package.json +3 -5
  109. package/dist/access/index.d.ts +0 -23
  110. package/dist/access/index.d.ts.map +0 -1
  111. package/dist/access/index.js +0 -35
  112. package/dist/access/index.js.map +0 -1
@@ -33,24 +33,34 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.dispatchTool = exports.allToolDefinitions = void 0;
37
- const effect_1 = require("effect");
36
+ exports.dispatchTool = exports.allToolDefinitions = exports.FIRESTORE_READ = exports.reloadConfig = exports.RELOAD_CONFIG = exports.getConfig = exports.GET_CONFIG = exports.AUTH_READ = void 0;
37
+ const task_1 = require("../task");
38
38
  const AuthTool = __importStar(require("./auth"));
39
+ const ConfigTool = __importStar(require("./config"));
39
40
  const FirestoreTool = __importStar(require("./firestore"));
41
+ var auth_1 = require("./auth");
42
+ Object.defineProperty(exports, "AUTH_READ", { enumerable: true, get: function () { return auth_1.AUTH_READ; } });
43
+ var config_1 = require("./config");
44
+ Object.defineProperty(exports, "GET_CONFIG", { enumerable: true, get: function () { return config_1.GET_CONFIG; } });
45
+ Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_1.getConfig; } });
46
+ Object.defineProperty(exports, "RELOAD_CONFIG", { enumerable: true, get: function () { return config_1.RELOAD_CONFIG; } });
47
+ Object.defineProperty(exports, "reloadConfig", { enumerable: true, get: function () { return config_1.reloadConfig; } });
48
+ var firestore_1 = require("./firestore");
49
+ Object.defineProperty(exports, "FIRESTORE_READ", { enumerable: true, get: function () { return firestore_1.FIRESTORE_READ; } });
50
+ class UnknownToolError extends Error {
51
+ toolName;
52
+ _tag = 'UnknownTool';
53
+ constructor(toolName) {
54
+ super(`Unknown tool: ${toolName}`);
55
+ this.toolName = toolName;
56
+ this.name = 'UnknownToolError';
57
+ }
58
+ }
40
59
  exports.allToolDefinitions = [
41
- FirestoreTool.aggregateCollectionDefinition,
42
- FirestoreTool.listCollectionsDefinition,
43
- FirestoreTool.listDocumentsDefinition,
44
- FirestoreTool.listIndexesDefinition,
45
- FirestoreTool.getCollectionSchemaDefinition,
46
- FirestoreTool.countDocumentsDefinition,
47
- FirestoreTool.readCollectionDefinition,
48
- FirestoreTool.getDocumentDefinition,
49
- FirestoreTool.getManyDocumentsDefinition,
50
- FirestoreTool.queryCollectionDefinition,
51
- FirestoreTool.queryCollectionGroupDefinition,
52
- AuthTool.getUserDefinition,
53
- AuthTool.listUsersDefinition,
60
+ ConfigTool.getConfigDefinition,
61
+ ConfigTool.reloadConfigDefinition,
62
+ FirestoreTool.firestoreReadDefinition,
63
+ AuthTool.authReadDefinition,
54
64
  ];
55
65
  const toErrorResult = (code, message, details) => ({
56
66
  content: [
@@ -67,69 +77,56 @@ const toErrorResult = (code, message, details) => ({
67
77
  const toSuccessResult = (data) => ({
68
78
  content: [{ type: 'text', text: JSON.stringify({ success: true, data }) }],
69
79
  });
70
- const dispatchTool = (name, args) => effect_1.Effect.gen(function* () {
71
- switch (name) {
72
- case FirestoreTool.AGGREGATE_COLLECTION:
73
- return yield* FirestoreTool.aggregateCollection(args);
74
- case FirestoreTool.COUNT_DOCUMENTS:
75
- return yield* FirestoreTool.countDocuments(args);
76
- case FirestoreTool.GET_COLLECTION_SCHEMA:
77
- return yield* FirestoreTool.getCollectionSchema(args);
78
- case FirestoreTool.GET_MANY_DOCUMENTS:
79
- return yield* FirestoreTool.getManyDocuments(args);
80
- case FirestoreTool.LIST_INDEXES:
81
- return yield* FirestoreTool.listIndexes(args);
82
- case FirestoreTool.QUERY_COLLECTION_GROUP:
83
- return yield* FirestoreTool.queryCollectionGroup(args);
84
- case FirestoreTool.LIST_COLLECTIONS:
85
- return yield* FirestoreTool.listCollections(args);
86
- case FirestoreTool.LIST_DOCUMENTS:
87
- return yield* FirestoreTool.listDocuments(args);
88
- case FirestoreTool.READ_COLLECTION:
89
- return yield* FirestoreTool.readCollection(args);
90
- case FirestoreTool.GET_DOCUMENT:
91
- return yield* FirestoreTool.getDocument(args);
92
- case FirestoreTool.QUERY_COLLECTION:
93
- return yield* FirestoreTool.queryCollection(args);
94
- case AuthTool.GET_USER:
95
- return yield* AuthTool.getUser(args);
96
- case AuthTool.LIST_USERS:
97
- return yield* AuthTool.listUsers(args);
98
- default:
99
- return yield* effect_1.Effect.fail({ _tag: 'UnknownTool', name });
100
- }
101
- }).pipe(effect_1.Effect.map(toSuccessResult), effect_1.Effect.catchAll((err) => {
102
- switch (err._tag) {
103
- case 'AccessDeniedError':
104
- return effect_1.Effect.succeed(toErrorResult('ACCESS_DENIED', `Access to path '${err.path}' is not allowed`, { path: err.path, suggestion: { allow: [err.path] } }));
105
- case 'DocumentNotFoundError':
106
- return effect_1.Effect.succeed(toErrorResult('NOT_FOUND', `Document not found: ${err.path}`, {
107
- path: err.path,
108
- }));
109
- case 'FirestoreAggregateError':
110
- case 'FirestoreReadError':
111
- case 'FirestoreGetError':
112
- case 'FirestoreQueryError':
113
- case 'FirestoreListCollectionsError':
114
- case 'FirestoreListDocumentsError':
115
- case 'FirestoreCountError':
116
- case 'FirestoreSchemaError':
117
- case 'FirestoreGetManyError':
118
- case 'FirestoreListIndexesError':
119
- case 'FirestoreCollectionGroupQueryError':
120
- return effect_1.Effect.succeed(toErrorResult('FIRESTORE_ERROR', err.message, {
121
- cause: String(err.cause),
122
- }));
123
- case 'AuthGetUserError':
124
- case 'AuthListUsersError':
125
- return effect_1.Effect.succeed(toErrorResult('AUTH_ERROR', err.message, {
126
- cause: String(err.cause),
127
- }));
128
- case 'AuthUserNotFoundError':
129
- return effect_1.Effect.succeed(toErrorResult('NOT_FOUND', `User not found: ${err.identifier}`, { identifier: err.identifier }));
130
- case 'UnknownTool':
131
- return effect_1.Effect.succeed(toErrorResult('UNKNOWN_TOOL', `Unknown tool: ${err.name}`));
132
- }
133
- }));
80
+ const dispatchTool = (ctx, name, args) => {
81
+ const { operation, ...rest } = args;
82
+ return task_1.Task.gen(function* () {
83
+ switch (name) {
84
+ case FirestoreTool.FIRESTORE_READ:
85
+ return yield* FirestoreTool.dispatchFirestoreRead(ctx, operation, rest);
86
+ case AuthTool.AUTH_READ:
87
+ return yield* AuthTool.dispatchAuthRead(ctx, operation, rest);
88
+ default:
89
+ return yield* task_1.Task.fail(new UnknownToolError(name));
90
+ }
91
+ })
92
+ .map(toSuccessResult)
93
+ .catchAll((err) => {
94
+ switch (err._tag) {
95
+ case 'AccessDeniedError':
96
+ return task_1.Task.succeed(toErrorResult('ACCESS_DENIED', `Access to path '${err.path}' is not allowed`, { path: err.path, suggestion: { allow: [err.path] } }));
97
+ case 'DocumentNotFoundError':
98
+ return task_1.Task.succeed(toErrorResult('NOT_FOUND', `Document not found: ${err.path}`, {
99
+ path: err.path,
100
+ }));
101
+ case 'FirestoreAggregateError':
102
+ case 'FirestoreReadError':
103
+ case 'FirestoreGetError':
104
+ case 'FirestoreQueryError':
105
+ case 'FirestoreListCollectionsError':
106
+ case 'FirestoreListDocumentsError':
107
+ case 'FirestoreCountError':
108
+ case 'FirestoreSchemaError':
109
+ case 'FirestoreGetManyError':
110
+ case 'FirestoreListIndexesError':
111
+ case 'FirestoreCollectionGroupQueryError':
112
+ return task_1.Task.succeed(toErrorResult('FIRESTORE_ERROR', err.message, {
113
+ cause: String(err.cause),
114
+ }));
115
+ case 'AuthGetUserError':
116
+ case 'AuthListUsersError':
117
+ return task_1.Task.succeed(toErrorResult('AUTH_ERROR', err.message, {
118
+ cause: String(err.cause),
119
+ }));
120
+ case 'AuthUserNotFoundError':
121
+ return task_1.Task.succeed(toErrorResult('NOT_FOUND', `User not found: ${err.identifier}`, {
122
+ identifier: err.identifier,
123
+ }));
124
+ case 'UnknownFirestoreOperationError':
125
+ case 'UnknownAuthOperationError':
126
+ case 'UnknownTool':
127
+ return task_1.Task.succeed(toErrorResult('UNKNOWN_TOOL', err.message));
128
+ }
129
+ });
130
+ };
134
131
  exports.dispatchTool = dispatchTool;
135
132
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server that exposes Firebase Firestore to AI agents (Cursor, Claude Desktop, etc.)",
5
5
  "main": "dist/cli/index.js",
6
6
  "bin": {
@@ -32,12 +32,10 @@
32
32
  "license": "MIT",
33
33
  "packageManager": "pnpm@10.33.0",
34
34
  "dependencies": {
35
- "@effect/platform": "^0.96.0",
36
- "@effect/platform-node": "^0.106.0",
37
35
  "@modelcontextprotocol/sdk": "^1.29.0",
38
- "effect": "^3.21.0",
39
36
  "firebase-admin": "^13.7.0",
40
37
  "micromatch": "^4.0.8",
41
- "minimist": "^1.2.8"
38
+ "minimist": "^1.2.8",
39
+ "zod": "^4.3.6"
42
40
  }
43
41
  }
@@ -1,23 +0,0 @@
1
- import { Effect } from 'effect';
2
- import { ConfigService } from '../config';
3
- declare const AccessDeniedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
4
- readonly _tag: "AccessDeniedError";
5
- } & Readonly<A>;
6
- export declare class AccessDeniedError extends AccessDeniedError_base<{
7
- readonly path: string;
8
- }> {
9
- }
10
- export declare const isAllowed: (path: string, rules: {
11
- allow: readonly string[];
12
- deny: readonly string[];
13
- }) => boolean;
14
- declare const AccessService_base: Effect.Service.Class<AccessService, "AccessService", {
15
- readonly accessors: true;
16
- readonly effect: Effect.Effect<{
17
- check: (path: string) => Effect.Effect<void, never, never> | Effect.Effect<never, AccessDeniedError, never>;
18
- }, never, ConfigService>;
19
- }>;
20
- export declare class AccessService extends AccessService_base {
21
- }
22
- export {};
23
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;;;;AAE1C,qBAAa,iBAAkB,SAAQ,uBAAsC;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;CAAG;AAEL,eAAO,MAAM,SAAS,GACpB,MAAM,MAAM,EACZ,OAAO;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,KAC3D,OAIF,CAAC;;;;sBAWoB,MAAM;;;AAT5B,qBAAa,aAAc,SAAQ,kBAgBlC;CAAG"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AccessService = exports.isAllowed = exports.AccessDeniedError = void 0;
7
- const effect_1 = require("effect");
8
- const micromatch_1 = __importDefault(require("micromatch"));
9
- const config_1 = require("../config");
10
- class AccessDeniedError extends effect_1.Data.TaggedError('AccessDeniedError') {
11
- }
12
- exports.AccessDeniedError = AccessDeniedError;
13
- const isAllowed = (path, rules) => {
14
- if (micromatch_1.default.isMatch(path, [...rules.deny]))
15
- return false;
16
- if (micromatch_1.default.isMatch(path, [...rules.allow]))
17
- return true;
18
- return false;
19
- };
20
- exports.isAllowed = isAllowed;
21
- class AccessService extends effect_1.Effect.Service()('AccessService', {
22
- accessors: true,
23
- effect: effect_1.Effect.gen(function* () {
24
- const { config } = yield* config_1.ConfigService;
25
- const rules = config.firestore.rules;
26
- return {
27
- check: (path) => (0, exports.isAllowed)(path, rules)
28
- ? effect_1.Effect.void
29
- : effect_1.Effect.fail(new AccessDeniedError({ path })),
30
- };
31
- }),
32
- }) {
33
- }
34
- exports.AccessService = AccessService;
35
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAsC;AACtC,4DAAoC;AACpC,sCAA0C;AAE1C,MAAa,iBAAkB,SAAQ,aAAI,CAAC,WAAW,CAAC,mBAAmB,CAEzE;CAAG;AAFL,8CAEK;AAEE,MAAM,SAAS,GAAG,CACvB,IAAY,EACZ,KAA4D,EACnD,EAAE;IACX,IAAI,oBAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,oBAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEF,MAAa,aAAc,SAAQ,eAAM,CAAC,OAAO,EAAiB,CAChE,eAAe,EACf;IACE,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,sBAAa,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QAErC,OAAO;YACL,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CACtB,IAAA,iBAAS,EAAC,IAAI,EAAE,KAAK,CAAC;gBACpB,CAAC,CAAC,eAAM,CAAC,IAAI;gBACb,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC;CACH,CACF;CAAG;AAhBJ,sCAgBI"}