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
@@ -1,60 +1,110 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.McpServerService = exports.McpServerError = void 0;
3
+ exports.FirebaseMcpServer = exports.McpServerError = void 0;
4
4
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
5
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
6
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
- const effect_1 = require("effect");
8
- const access_1 = require("../access");
9
7
  const config_1 = require("../config");
10
- const firebase_1 = require("../firebase");
8
+ const project_1 = require("../project");
11
9
  const tools_1 = require("../tools");
12
- class McpServerError extends effect_1.Data.TaggedError('McpServerError') {
10
+ class McpServerError extends Error {
11
+ cause;
12
+ _tag = 'McpServerError';
13
+ constructor(message, cause) {
14
+ super(message);
15
+ this.cause = cause;
16
+ this.name = 'McpServerError';
17
+ }
13
18
  }
14
19
  exports.McpServerError = McpServerError;
15
- class McpServerService extends effect_1.Effect.Service()('McpServerService', {
16
- accessors: true,
17
- dependencies: [
18
- effect_1.Layer.provide(firebase_1.FirebaseService.Default, config_1.ConfigService.Default),
19
- effect_1.Layer.provide(access_1.AccessService.Default, config_1.ConfigService.Default),
20
- config_1.ConfigService.Default,
20
+ const toErrorResult = (code, message, details) => ({
21
+ content: [
22
+ {
23
+ type: 'text',
24
+ text: JSON.stringify({
25
+ success: false,
26
+ error: { code, message, details },
27
+ }),
28
+ },
21
29
  ],
22
- effect: effect_1.Effect.gen(function* () {
23
- const runtime = yield* effect_1.Effect.runtime();
24
- const runPromise = effect_1.Runtime.runPromise(runtime);
25
- const context = yield* effect_1.Effect.context();
26
- const mcpServer = new mcp_js_1.McpServer({ name: 'firebase-mcp', version: '0.1.0' }, { capabilities: { tools: {} } });
27
- mcpServer.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
28
- tools: tools_1.allToolDefinitions,
29
- }));
30
- mcpServer.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
30
+ isError: true,
31
+ });
32
+ class FirebaseMcpServer {
33
+ appConfig;
34
+ projectContexts = new Map();
35
+ mcpServer;
36
+ configPath;
37
+ constructor() {
38
+ this.configPath = (0, config_1.getConfigPath)();
39
+ this.mcpServer = new mcp_js_1.McpServer({ name: 'firebase-mcp', version: '0.1.0' }, { capabilities: { tools: {} } });
40
+ }
41
+ async start() {
42
+ const { exit } = (0, config_1.loadConfig)(this.configPath).fork();
43
+ const result = await exit;
44
+ if (result._tag === 'err')
45
+ throw result.error;
46
+ if (result._tag === 'die')
47
+ throw result.cause;
48
+ this.appConfig = result.value;
49
+ this.mcpServer.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools: tools_1.allToolDefinitions }));
50
+ this.mcpServer.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
51
+ const name = request.params.name;
31
52
  const args = request.params.arguments ?? {};
32
- return runPromise((0, tools_1.dispatchTool)(request.params.name, args).pipe(effect_1.Effect.provide(context))).catch((cause) => ({
33
- content: [
34
- {
35
- type: 'text',
36
- text: JSON.stringify({
37
- success: false,
38
- error: { code: 'INTERNAL_ERROR', message: String(cause) },
39
- }),
40
- },
41
- ],
42
- isError: true,
43
- }));
44
- });
45
- return {
46
- start() {
47
- return effect_1.Effect.tryPromise({
48
- try: () => mcpServer.server.connect(new stdio_js_1.StdioServerTransport()),
49
- catch: (cause) => new McpServerError({
50
- message: 'Failed to connect stdio transport',
51
- cause,
52
- }),
53
+ if (name === tools_1.GET_CONFIG) {
54
+ return (0, tools_1.getConfig)(this.appConfig);
55
+ }
56
+ if (name === tools_1.RELOAD_CONFIG) {
57
+ return (0, tools_1.reloadConfig)(async () => {
58
+ const { exit: cfgExit } = (0, config_1.loadConfig)(this.configPath).fork();
59
+ const cfgResult = await cfgExit;
60
+ if (cfgResult._tag !== 'ok') {
61
+ throw cfgResult._tag === 'err'
62
+ ? cfgResult.error
63
+ : cfgResult.cause;
64
+ }
65
+ this.projectContexts.clear();
66
+ this.appConfig = cfgResult.value;
67
+ return { projects: Object.keys(cfgResult.value.projects) };
53
68
  });
54
- },
55
- };
56
- }),
57
- }) {
69
+ }
70
+ const projectId = typeof args.projectId === 'string' ? args.projectId : null;
71
+ if (!projectId) {
72
+ return toErrorResult('MISSING_PROJECT_ID', 'projectId is required. Call get_config to see available projects.');
73
+ }
74
+ const projectConfig = this.appConfig.projects[projectId];
75
+ if (!projectConfig) {
76
+ return toErrorResult('PROJECT_NOT_FOUND', `Project "${projectId}" not found in config. Call get_config to see available projects.`, { projectId, available: Object.keys(this.appConfig.projects) });
77
+ }
78
+ const { projectId: _stripped, ...toolArgs } = args;
79
+ let ctx;
80
+ try {
81
+ ctx = await this.getOrInitProject(projectId, projectConfig);
82
+ }
83
+ catch (cause) {
84
+ return toErrorResult('FIREBASE_INIT_ERROR', `Failed to initialize Firebase for project "${projectId}": ${String(cause)}`);
85
+ }
86
+ const { exit: toolExit } = (0, tools_1.dispatchTool)(ctx, name, toolArgs).fork();
87
+ const toolResult = await toolExit;
88
+ if (toolResult._tag === 'ok')
89
+ return toolResult.value;
90
+ return toErrorResult('INTERNAL_ERROR', `Unexpected error: ${String(toolResult._tag === 'err' ? toolResult.error : toolResult.cause)}`);
91
+ });
92
+ await this.mcpServer.server.connect(new stdio_js_1.StdioServerTransport());
93
+ }
94
+ getOrInitProject(projectId, config) {
95
+ const cached = this.projectContexts.get(projectId);
96
+ if (cached)
97
+ return cached;
98
+ const { exit } = (0, project_1.createProjectContext)(config).fork();
99
+ const promise = exit.then((result) => {
100
+ if (result._tag === 'ok')
101
+ return result.value;
102
+ this.projectContexts.delete(projectId);
103
+ throw result._tag === 'err' ? result.error : result.cause;
104
+ });
105
+ this.projectContexts.set(projectId, promise);
106
+ return promise;
107
+ }
58
108
  }
59
- exports.McpServerService = McpServerService;
109
+ exports.FirebaseMcpServer = FirebaseMcpServer;
60
110
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAAA,oEAAoE;AACpE,wEAAiF;AACjF,iEAG4C;AAC5C,mCAAsD;AACtD,sCAA0C;AAC1C,sCAA0C;AAC1C,0CAA8C;AAC9C,oCAA4D;AAE5D,MAAa,cAAe,SAAQ,aAAI,CAAC,WAAW,CAAC,gBAAgB,CAGnE;CAAG;AAHL,wCAGK;AAEL,MAAa,gBAAiB,SAAQ,eAAM,CAAC,OAAO,EAAoB,CACtE,kBAAkB,EAClB;IACE,SAAS,EAAE,IAAI;IACf,YAAY,EAAE;QACZ,cAAK,CAAC,OAAO,CAAC,0BAAe,CAAC,OAAO,EAAE,sBAAa,CAAC,OAAO,CAAC;QAC7D,cAAK,CAAC,OAAO,CAAC,sBAAa,CAAC,OAAO,EAAE,sBAAa,CAAC,OAAO,CAAC;QAC3D,sBAAa,CAAC,OAAO;KACtB;IACD,MAAM,EAAE,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,gBAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,OAAO,EAElC,CAAC;QAEJ,MAAM,SAAS,GAAG,IAAI,kBAAS,CAC7B,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;QAEF,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACtE,KAAK,EAAE,0BAAkB;SAC1B,CAAC,CAAC,CAAC;QAEJ,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAChC,gCAAqB,EACrB,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC5C,OAAO,UAAU,CACf,IAAA,oBAAY,EAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAC1C,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CACxB,CACF,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClB,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;yBAC1D,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;QACN,CAAC,CACF,CAAC;QAEF,OAAO;YACL,KAAK;gBACH,OAAO,eAAM,CAAC,UAAU,CAAC;oBACvB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,+BAAoB,EAAE,CAAC;oBAC/D,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,cAAc,CAAC;wBACjB,OAAO,EAAE,mCAAmC;wBAC5C,KAAK;qBACN,CAAC;iBACL,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;CACH,CACF;CAAG;AA/DJ,4CA+DI"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ type Ok<A> = {
2
+ _tag: 'ok';
3
+ value: A;
4
+ };
5
+ type Err<E> = {
6
+ _tag: 'err';
7
+ error: E;
8
+ };
9
+ type Die = {
10
+ _tag: 'die';
11
+ cause?: unknown;
12
+ };
13
+ export type Exit<A, E> = Ok<A> | Err<E> | Die;
14
+ export declare const Exit: {
15
+ ok: <A>(value: A) => Exit<A, never>;
16
+ err: <E>(error: E) => Exit<never, E>;
17
+ die: (cause?: unknown) => Exit<never, never>;
18
+ isOk: <A, E>(e: Exit<A, E>) => e is Ok<A>;
19
+ isErr: <A, E>(e: Exit<A, E>) => e is Err<E>;
20
+ isDie: <A, E>(e: Exit<A, E>) => e is Die;
21
+ };
22
+ export declare class Task<A, E> {
23
+ private readonly effect;
24
+ private constructor();
25
+ run(signal: AbortSignal): Promise<Exit<A, E>>;
26
+ fork(): {
27
+ exit: Promise<Exit<A, E>>;
28
+ abort: () => void;
29
+ };
30
+ map<B>(f: (a: A) => B): Task<B, E>;
31
+ flatMap<B, E2>(f: (a: A) => Task<B, E2>): Task<B, E | E2>;
32
+ tap(f: (a: A) => void | PromiseLike<void>): Task<A, E>;
33
+ mapError<E2>(f: (e: E) => E2): Task<A, E2>;
34
+ catchAll<B, E2>(f: (e: E) => Task<B, E2>): Task<A | B, E2>;
35
+ catchWhen<K extends keyof E, V extends E[K], B, E2>(key: K, value: V, handler: (e: Extract<E, Record<K, V>>) => Task<B, E2>): Task<A | B, E2 | Exclude<E, Record<K, V>>>;
36
+ filter<B extends A, E2>(predicate: (a: A) => a is B, onFalse: (a: A) => E2): Task<B, E | E2>;
37
+ filter<E2>(predicate: (a: A) => boolean, onFalse: (a: A) => E2): Task<A, E | E2>;
38
+ tapError(f: (e: E) => void | PromiseLike<void>): Task<A, E>;
39
+ static succeed<A>(value: A): Task<A, never>;
40
+ static fail<E>(error: E): Task<never, E>;
41
+ static die(cause?: unknown): Task<never, never>;
42
+ static never(): Task<never, never>;
43
+ static sync<A>(thunk: () => A): Task<A, never>;
44
+ static lazy<A, E>(thunk: () => Task<A, E>): Task<A, E>;
45
+ static attempt<A, E>(options: {
46
+ try: () => A | PromiseLike<A>;
47
+ catch: (error: unknown) => E;
48
+ }): Task<A, E>;
49
+ static gen<Eff extends Task<any, any>, T>(f: () => Generator<Eff, T, any>): Task<T, Eff extends Task<any, infer E> ? E : never>;
50
+ [Symbol.iterator](): Generator<Task<A, E>, A, any>;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Task = exports.Exit = void 0;
4
+ exports.Exit = {
5
+ ok: (value) => ({ _tag: 'ok', value }),
6
+ err: (error) => ({ _tag: 'err', error }),
7
+ die: (cause) => ({ _tag: 'die', cause }),
8
+ isOk: (e) => e._tag === 'ok',
9
+ isErr: (e) => e._tag === 'err',
10
+ isDie: (e) => e._tag === 'die',
11
+ };
12
+ const abortIfNeeded = (signal) => signal.aborted ? exports.Exit.die(signal.reason) : null;
13
+ const tryCatch = async (f) => {
14
+ try {
15
+ return await f();
16
+ }
17
+ catch (cause) {
18
+ return exports.Exit.die(cause);
19
+ }
20
+ };
21
+ class Task {
22
+ effect;
23
+ constructor(effect) {
24
+ this.effect = effect;
25
+ }
26
+ run(signal) {
27
+ const aborted = abortIfNeeded(signal);
28
+ if (aborted)
29
+ return Promise.resolve(aborted);
30
+ return tryCatch(() => this.effect(signal));
31
+ }
32
+ fork() {
33
+ const controller = new AbortController();
34
+ return {
35
+ exit: this.run(controller.signal),
36
+ abort: () => controller.abort(),
37
+ };
38
+ }
39
+ map(f) {
40
+ return new Task(async (signal) => {
41
+ const exit = await this.run(signal);
42
+ if (!exports.Exit.isOk(exit))
43
+ return exit;
44
+ return tryCatch(() => exports.Exit.ok(f(exit.value)));
45
+ });
46
+ }
47
+ flatMap(f) {
48
+ return new Task(async (signal) => {
49
+ const exit = await this.run(signal);
50
+ if (!exports.Exit.isOk(exit))
51
+ return exit;
52
+ return f(exit.value).run(signal);
53
+ });
54
+ }
55
+ tap(f) {
56
+ return new Task(async (signal) => {
57
+ const exit = await this.run(signal);
58
+ if (!exports.Exit.isOk(exit))
59
+ return exit;
60
+ return tryCatch(async () => {
61
+ await f(exit.value);
62
+ return exit;
63
+ });
64
+ });
65
+ }
66
+ mapError(f) {
67
+ return new Task(async (signal) => {
68
+ const exit = await this.run(signal);
69
+ if (!exports.Exit.isErr(exit))
70
+ return exit;
71
+ return tryCatch(() => exports.Exit.err(f(exit.error)));
72
+ });
73
+ }
74
+ catchAll(f) {
75
+ return new Task(async (signal) => {
76
+ const exit = await this.run(signal);
77
+ if (!exports.Exit.isErr(exit))
78
+ return exit;
79
+ return f(exit.error).run(signal);
80
+ });
81
+ }
82
+ catchWhen(key, value, handler) {
83
+ return new Task(async (signal) => {
84
+ const exit = await this.run(signal);
85
+ if (!exports.Exit.isErr(exit))
86
+ return exit;
87
+ if (exit.error?.[key] === value) {
88
+ return handler(exit.error).run(signal);
89
+ }
90
+ return exit;
91
+ });
92
+ }
93
+ filter(predicate, onFalse) {
94
+ return new Task(async (signal) => {
95
+ const exit = await this.run(signal);
96
+ if (!exports.Exit.isOk(exit))
97
+ return exit;
98
+ return tryCatch(() => {
99
+ if (predicate(exit.value))
100
+ return exports.Exit.ok(exit.value);
101
+ return exports.Exit.err(onFalse(exit.value));
102
+ });
103
+ });
104
+ }
105
+ tapError(f) {
106
+ return new Task(async (signal) => {
107
+ const exit = await this.run(signal);
108
+ if (!exports.Exit.isErr(exit))
109
+ return exit;
110
+ return tryCatch(async () => {
111
+ await f(exit.error);
112
+ return exit;
113
+ });
114
+ });
115
+ }
116
+ static succeed(value) {
117
+ return new Task(async () => exports.Exit.ok(value));
118
+ }
119
+ static fail(error) {
120
+ return new Task(async () => exports.Exit.err(error));
121
+ }
122
+ static die(cause) {
123
+ return new Task(async () => exports.Exit.die(cause));
124
+ }
125
+ static never() {
126
+ return new Task((signal) => new Promise((resolve) => {
127
+ const interval = setInterval(() => { }, 2 ** 31 - 1);
128
+ signal.addEventListener('abort', () => {
129
+ clearInterval(interval);
130
+ resolve(exports.Exit.die(signal.reason));
131
+ });
132
+ }));
133
+ }
134
+ static sync(thunk) {
135
+ return new Task(() => tryCatch(() => exports.Exit.ok(thunk())));
136
+ }
137
+ static lazy(thunk) {
138
+ return new Task((signal) => tryCatch(() => thunk().run(signal)));
139
+ }
140
+ static attempt(options) {
141
+ return new Task(async () => {
142
+ try {
143
+ return exports.Exit.ok(await options.try());
144
+ }
145
+ catch (error) {
146
+ return exports.Exit.err(options.catch(error));
147
+ }
148
+ });
149
+ }
150
+ static gen(f) {
151
+ return new Task(async (signal) => {
152
+ const iterator = f();
153
+ let state = iterator.next();
154
+ while (!state.done) {
155
+ const aborted = abortIfNeeded(signal);
156
+ if (aborted)
157
+ return aborted;
158
+ const exit = await state.value.run(signal);
159
+ if (exports.Exit.isOk(exit)) {
160
+ state = iterator.next(exit.value);
161
+ }
162
+ else {
163
+ return exit;
164
+ }
165
+ }
166
+ return exports.Exit.ok(state.value);
167
+ });
168
+ }
169
+ [Symbol.iterator]() {
170
+ const self = this;
171
+ return (function* () {
172
+ return (yield self);
173
+ })();
174
+ }
175
+ }
176
+ exports.Task = Task;
177
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,15 @@
1
1
  import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import { Effect } from 'effect';
3
- import { FirebaseService } from '../../firebase';
4
- declare const AuthGetUserError_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 & {
2
+ import type { ProjectContext } from '../../project';
3
+ import { Task } from '../../task';
4
+ export declare class AuthGetUserError extends Error {
5
+ readonly cause?: unknown | undefined;
5
6
  readonly _tag: "AuthGetUserError";
6
- } & Readonly<A>;
7
- export declare class AuthGetUserError extends AuthGetUserError_base<{
8
- readonly message: string;
9
- readonly cause?: unknown;
10
- }> {
7
+ constructor(message: string, cause?: unknown | undefined);
11
8
  }
12
- declare const AuthUserNotFoundError_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 & {
13
- readonly _tag: "AuthUserNotFoundError";
14
- } & Readonly<A>;
15
- export declare class AuthUserNotFoundError extends AuthUserNotFoundError_base<{
9
+ export declare class AuthUserNotFoundError extends Error {
16
10
  readonly identifier: string;
17
- }> {
11
+ readonly _tag: "AuthUserNotFoundError";
12
+ constructor(identifier: string);
18
13
  }
19
14
  export declare const GET_USER: "get_user";
20
15
  export interface GetUserArgs {
@@ -22,6 +17,5 @@ export interface GetUserArgs {
22
17
  email?: string;
23
18
  }
24
19
  export declare const getUserDefinition: Tool;
25
- export declare const getUser: (input: GetUserArgs) => Effect.Effect<unknown, AuthGetUserError | AuthUserNotFoundError, FirebaseService>;
26
- export {};
20
+ export declare const getUser: (ctx: ProjectContext, input: GetUserArgs) => Task<unknown, AuthGetUserError | AuthUserNotFoundError>;
27
21
  //# sourceMappingURL=get_user.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get_user.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/get_user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;;;;AAGjD,qBAAa,gBAAiB,SAAQ,sBAAqC;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;AAEL,qBAAa,qBAAsB,SAAQ,2BAEzC;IACA,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;CAAG;AAEL,eAAO,MAAM,QAAQ,EAAG,UAAmB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,iBAAiB,EAAE,IAiB/B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,OAAO,WAAW,sFA2CtC,CAAC"}
1
+ {"version":3,"file":"get_user.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/get_user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,qBAAa,gBAAiB,SAAQ,KAAK;IAEZ,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IADrD,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;gBAChC,OAAO,EAAE,MAAM,EAAW,KAAK,CAAC,EAAE,OAAO,YAAA;CAItD;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAElC,QAAQ,CAAC,UAAU,EAAE,MAAM;IADvC,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;gBAC5B,UAAU,EAAE,MAAM;CAIxC;AAED,eAAO,MAAM,QAAQ,EAAG,UAAmB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,iBAAiB,EAAE,IAsB/B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,EAAE,OAAO,WAAW,4DAqC3D,CAAC"}
@@ -1,13 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getUser = exports.getUserDefinition = exports.GET_USER = exports.AuthUserNotFoundError = exports.AuthGetUserError = void 0;
4
- const effect_1 = require("effect");
5
- const firebase_1 = require("../../firebase");
4
+ const task_1 = require("../../task");
6
5
  const normalize_1 = require("../normalize");
7
- class AuthGetUserError extends effect_1.Data.TaggedError('AuthGetUserError') {
6
+ class AuthGetUserError extends Error {
7
+ cause;
8
+ _tag = 'AuthGetUserError';
9
+ constructor(message, cause) {
10
+ super(message);
11
+ this.cause = cause;
12
+ this.name = 'AuthGetUserError';
13
+ }
8
14
  }
9
15
  exports.AuthGetUserError = AuthGetUserError;
10
- class AuthUserNotFoundError extends effect_1.Data.TaggedError('AuthUserNotFoundError') {
16
+ class AuthUserNotFoundError extends Error {
17
+ identifier;
18
+ _tag = 'AuthUserNotFoundError';
19
+ constructor(identifier) {
20
+ super(`User not found: ${identifier}`);
21
+ this.identifier = identifier;
22
+ this.name = 'AuthUserNotFoundError';
23
+ }
11
24
  }
12
25
  exports.AuthUserNotFoundError = AuthUserNotFoundError;
13
26
  exports.GET_USER = 'get_user';
@@ -25,20 +38,21 @@ exports.getUserDefinition = {
25
38
  type: 'string',
26
39
  description: 'The email address of the user.',
27
40
  },
41
+ projectId: {
42
+ type: 'string',
43
+ description: 'Project key as defined in firebase-mcp.json',
44
+ },
28
45
  },
46
+ required: ['projectId'],
29
47
  },
30
48
  };
31
- const getUser = (input) => effect_1.Effect.gen(function* () {
49
+ const getUser = (ctx, input) => task_1.Task.gen(function* () {
32
50
  if (!input.uid && !input.email) {
33
- return yield* effect_1.Effect.fail(new AuthGetUserError({
34
- message: 'Either uid or email must be provided',
35
- }));
51
+ return yield* task_1.Task.fail(new AuthGetUserError('Either uid or email must be provided'));
36
52
  }
37
- const { auth } = yield* firebase_1.FirebaseService;
38
- const userRecord = yield* effect_1.Effect.tryPromise({
39
- try: () => input.uid
40
- ? auth().getUser(input.uid)
41
- : auth().getUserByEmail(input.email),
53
+ const auth = ctx.auth();
54
+ const userRecord = yield* task_1.Task.attempt({
55
+ try: () => input.uid ? auth.getUser(input.uid) : auth.getUserByEmail(input.email),
42
56
  catch: (cause) => {
43
57
  const code = cause != null &&
44
58
  typeof cause === 'object' &&
@@ -47,14 +61,9 @@ const getUser = (input) => effect_1.Effect.gen(function* () {
47
61
  ? cause.code
48
62
  : '';
49
63
  if (code === 'auth/user-not-found') {
50
- return new AuthUserNotFoundError({
51
- identifier: input.uid ?? input.email ?? '',
52
- });
64
+ return new AuthUserNotFoundError(input.uid ?? input.email ?? '');
53
65
  }
54
- return new AuthGetUserError({
55
- message: `Failed to fetch user: ${input.uid ?? input.email}`,
56
- cause,
57
- });
66
+ return new AuthGetUserError(`Failed to fetch user: ${input.uid ?? input.email}`, cause);
58
67
  },
59
68
  });
60
69
  return (0, normalize_1.normalizeValue)({
@@ -1 +1 @@
1
- {"version":3,"file":"get_user.js","sourceRoot":"","sources":["../../../src/tools/auth/get_user.ts"],"names":[],"mappings":";;;AACA,mCAAsC;AAEtC,6CAAiD;AACjD,4CAA8C;AAE9C,MAAa,gBAAiB,SAAQ,aAAI,CAAC,WAAW,CAAC,kBAAkB,CAGvE;CAAG;AAHL,4CAGK;AAEL,MAAa,qBAAsB,SAAQ,aAAI,CAAC,WAAW,CACzD,uBAAuB,CAGvB;CAAG;AAJL,sDAIK;AAEQ,QAAA,QAAQ,GAAG,UAAmB,CAAC;AAO/B,QAAA,iBAAiB,GAAS;IACrC,IAAI,EAAE,gBAAQ;IACd,WAAW,EACT,2FAA2F;IAC7F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAC9C;SACF;KACF;CACF,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,KAAkB,EAAE,EAAE,CAC5C,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CACvB,IAAI,gBAAgB,CAAC;YACnB,OAAO,EAAE,sCAAsC;SAChD,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,0BAAe,CAAC;IAExC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;QAC1C,GAAG,EAAE,GAAG,EAAE,CACR,KAAK,CAAC,GAAG;YACP,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,CAAC,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAM,CAAC;QACzC,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE;YACxB,MAAM,IAAI,GACR,KAAK,IAAI,IAAI;gBACb,OAAO,KAAK,KAAK,QAAQ;gBACzB,MAAM,IAAI,KAAK;gBACf,OAAQ,KAA2B,CAAC,IAAI,KAAK,QAAQ;gBACnD,CAAC,CAAE,KAA0B,CAAC,IAAI;gBAClC,CAAC,CAAC,EAAE,CAAC;YAET,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBACnC,OAAO,IAAI,qBAAqB,CAAC;oBAC/B,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;YAED,OAAO,IAAI,gBAAgB,CAAC;gBAC1B,OAAO,EAAE,yBAAyB,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC5D,KAAK;aACN,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,IAAA,0BAAc,EAAC;QACpB,GAAG,UAAU,CAAC,MAAM,EAAE;QACtB,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KACtE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AA3CQ,QAAA,OAAO,WA2Cf"}
1
+ {"version":3,"file":"get_user.js","sourceRoot":"","sources":["../../../src/tools/auth/get_user.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './get_user';
2
2
  export * from './list_users';
3
+ export * from './read';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./get_user"), exports);
18
18
  __exportStar(require("./list_users"), exports);
19
+ __exportStar(require("./read"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,yCAAuB"}
@@ -1,13 +1,10 @@
1
1
  import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import { Effect } from 'effect';
3
- import { FirebaseService } from '../../firebase';
4
- declare const AuthListUsersError_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 & {
2
+ import type { ProjectContext } from '../../project';
3
+ import { Task } from '../../task';
4
+ export declare class AuthListUsersError extends Error {
5
+ readonly cause?: unknown | undefined;
5
6
  readonly _tag: "AuthListUsersError";
6
- } & Readonly<A>;
7
- export declare class AuthListUsersError extends AuthListUsersError_base<{
8
- readonly message: string;
9
- readonly cause?: unknown;
10
- }> {
7
+ constructor(message: string, cause?: unknown | undefined);
11
8
  }
12
9
  export declare const LIST_USERS: "list_users";
13
10
  export interface ListUsersArgs {
@@ -15,9 +12,8 @@ export interface ListUsersArgs {
15
12
  pageToken?: string;
16
13
  }
17
14
  export declare const listUsersDefinition: Tool;
18
- export declare const listUsers: (input: ListUsersArgs) => Effect.Effect<{
15
+ export declare const listUsers: (ctx: ProjectContext, input: ListUsersArgs) => Task<{
19
16
  users: unknown[];
20
17
  nextPageToken: string | null;
21
- }, AuthListUsersError, FirebaseService>;
22
- export {};
18
+ }, AuthListUsersError>;
23
19
  //# sourceMappingURL=list_users.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list_users.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/list_users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;;;;AAGjD,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;AAEL,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,EAAE,IAmBjC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,aAAa;;;uCAsB1C,CAAC"}
1
+ {"version":3,"file":"list_users.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/list_users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,qBAAa,kBAAmB,SAAQ,KAAK;IAEd,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IADrD,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAU;gBAClC,OAAO,EAAE,MAAM,EAAW,KAAK,CAAC,EAAE,OAAO,YAAA;CAItD;AAED,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,EAAE,IAwBjC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,KAAK,cAAc,EAAE,OAAO,aAAa;;;sBAmB/D,CAAC"}