diff --git a/src/apiv2.ts b/src/apiv2.ts index c4fb07d9c39..c9b716f9609 100644 --- a/src/apiv2.ts +++ b/src/apiv2.ts @@ -19,15 +19,16 @@ import * as FormData from "form-data"; const pkg = require("../package.json"); const CLI_VERSION: string = pkg.version; -const agent = detectAIAgent(); -const agentStr = agent === "unknown" ? "" : ` agent-name/${agent}`; -const platform = isFirebaseMcp() ? "FirebaseMCP" : "FirebaseCLI"; -const clientVersion = `${platform}/${CLI_VERSION}${agentStr}`; - -export const STANDARD_HEADERS: Record = { - Connection: "keep-alive", - "User-Agent": clientVersion, - "X-Client-Version": clientVersion, +export const standardHeaders: () => Record = () => { + const agent = detectAIAgent(); + const agentStr = agent === "unknown" ? "" : ` agent-name/${agent}`; + const platform = isFirebaseMcp() ? "FirebaseMCP" : "FirebaseCLI"; + const clientVersion = `${platform}/${CLI_VERSION}${agentStr}`; + return { + Connection: "keep-alive", + "User-Agent": clientVersion, + "X-Client-Version": clientVersion, + }; }; // Don't use this one. @@ -309,7 +310,7 @@ export class Client { if (!reqOptions.headers) { reqOptions.headers = new Headers(); } - for (const [h, v] of Object.entries(STANDARD_HEADERS)) { + for (const [h, v] of Object.entries(standardHeaders())) { if (!reqOptions.headers.has(h)) { reqOptions.headers.set(h, v); } diff --git a/src/bin/mcp.ts b/src/bin/mcp.ts index 6ad168b1a7f..ff48e8cea31 100644 --- a/src/bin/mcp.ts +++ b/src/bin/mcp.ts @@ -4,6 +4,7 @@ import { resolve } from "path"; import { parseArgs } from "util"; import { useFileLogger } from "../logger"; import { FirebaseMcpServer } from "../mcp/index"; +import { setFirebaseMcp } from "../env"; import { markdownDocsOfPrompts } from "../mcp/prompts/index.js"; import { markdownDocsOfResources } from "../mcp/resources/index.js"; import { markdownDocsOfTools } from "../mcp/tools/index.js"; @@ -82,7 +83,7 @@ export async function mcp(): Promise { } if (earlyExit) return; - process.env.IS_FIREBASE_MCP = "true"; + setFirebaseMcp(true); useFileLogger(); const activeFeatures = (values.only || "") .split(",") diff --git a/src/env.ts b/src/env.ts index 70014af79a7..782d1652d05 100644 --- a/src/env.ts +++ b/src/env.ts @@ -8,8 +8,13 @@ export function isFirebaseStudio() { return googleIdxFolderExists; } +let isFirebaseMcpFlag = false; export function isFirebaseMcp() { - return !!process.env.IS_FIREBASE_MCP; + return isFirebaseMcpFlag; +} + +export function setFirebaseMcp(value: boolean) { + isFirebaseMcpFlag = value; } // Detect if the CLI was invoked by a coding agent, based on well-known env vars. diff --git a/src/gcp/cloudsql/fbToolsAuthClient.ts b/src/gcp/cloudsql/fbToolsAuthClient.ts index 53791303fca..be6ecc575a5 100644 --- a/src/gcp/cloudsql/fbToolsAuthClient.ts +++ b/src/gcp/cloudsql/fbToolsAuthClient.ts @@ -39,7 +39,7 @@ export class FBToolsAuthClient extends AuthClient { public async getRequestHeaders(): Promise> { const token = await this.getAccessToken(); return { - ...apiv2.STANDARD_HEADERS, + ...apiv2.standardHeaders(), Authorization: `Bearer ${token.token}`, }; }