Skip to main content
Glama

Genkit MCP

Official
by firebase
telemetry.go5.66 kB
// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // SPDX-License-Identifier: Apache-2.0 package firebase import ( "log/slog" "os" "github.com/firebase/genkit/go/plugins/googlecloud" sdktrace "go.opentelemetry.io/otel/sdk/trace" "golang.org/x/oauth2/google" ) // FirebaseTelemetryOptions provides comprehensive configuration for Firebase telemetry. // This matches the Google Cloud plugin options for full compatibility, with Firebase-specific // project ID resolution that checks FIREBASE_PROJECT_ID first. // // Environment Variables: // - GENKIT_ENV: Set to "dev" to disable export unless ForceDevExport is true // - FIREBASE_PROJECT_ID: Project ID for telemetry if not provided inline // - GOOGLE_CLOUD_PROJECT: Project ID for telemetry if not provided inline // - GCLOUD_PROJECT: Project ID for telemetry if not provided inline type FirebaseTelemetryOptions struct { // ProjectID is the Firebase/Google Cloud project ID. // If empty, will be auto-detected from environment variables in priority order: // 1. FIREBASE_PROJECT_ID, 2. GOOGLE_CLOUD_PROJECT, 3. GCLOUD_PROJECT ProjectID string // Credentials for authenticating with Google Cloud. // If nil, uses Application Default Credentials (ADC). // Primarily intended for use in environments outside of GCP. // On GCP, credentials will typically be inferred from the environment via ADC. Credentials *google.Credentials // Sampler controls trace sampling. If nil, uses AlwaysOnSampler. // Examples: AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler Sampler sdktrace.Sampler // MetricExportIntervalMillis controls metrics export frequency. // Google Cloud requires minimum 5000ms. Defaults to 5000 (dev) or 300000 (prod). MetricExportIntervalMillis *int // MetricExportTimeoutMillis controls metrics export timeout. // Defaults to match MetricExportIntervalMillis. MetricExportTimeoutMillis *int // DisableMetrics disables metric export to Google Cloud. // Traces and logs may still be exported. Defaults to false. DisableMetrics bool // DisableTraces disables trace export to Google Cloud. // Metrics and logs may still be exported. Defaults to false. DisableTraces bool // DisableLoggingInputAndOutput disables input/output logging. // Defaults to false (input/output logging enabled). DisableLoggingInputAndOutput bool // ForceDevExport forces telemetry export even in development environment. // Defaults to false (only exports in production unless forced). ForceDevExport bool } // EnableFirebaseTelemetry enables comprehensive telemetry export to Genkit Monitoring, // backed by Google Cloud Observability (Cloud Logging, Metrics, and Trace). // // Example usage: // // // Basic usage - uses environment variables for project ID // firebase.EnableFirebaseTelemetry(nil) // g, err := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{})) // // // With full configuration // firebase.EnableFirebaseTelemetry(&firebase.FirebaseTelemetryOptions{ // ProjectID: "my-firebase-project", // ForceDevExport: true, // DisableLoggingInputAndOutput: false, // DisableMetrics: false, // DisableTraces: false, // MetricExportIntervalMillis: &[]int{10000}[0], // 10 seconds // }) // g, err := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{})) func EnableFirebaseTelemetry(options *FirebaseTelemetryOptions) { if options == nil { options = &FirebaseTelemetryOptions{} } initializeTelemetry(options) } // initializeTelemetry is the internal function that sets up Firebase telemetry. func initializeTelemetry(options *FirebaseTelemetryOptions) { slog.Debug("Initializing Firebase Genkit Monitoring.") if options == nil { options = &FirebaseTelemetryOptions{} } projectID := resolveFirebaseProjectID(options.ProjectID) if projectID == "" { slog.Warn("Firebase project ID not found. Set FIREBASE_PROJECT_ID, GOOGLE_CLOUD_PROJECT, or GCLOUD_PROJECT environment variable, or pass ProjectID in options.") } gcOptions := &googlecloud.GoogleCloudTelemetryOptions{ ProjectID: projectID, Credentials: options.Credentials, Sampler: options.Sampler, MetricExportIntervalMillis: options.MetricExportIntervalMillis, MetricExportTimeoutMillis: options.MetricExportTimeoutMillis, DisableMetrics: options.DisableMetrics, DisableTraces: options.DisableTraces, DisableLoggingInputAndOutput: options.DisableLoggingInputAndOutput, ForceDevExport: options.ForceDevExport, } googlecloud.EnableGoogleCloudTelemetry(gcOptions) } // resolveFirebaseProjectID resolves the Firebase project ID from various sources. // Priority: 1) Provided projectID, 2) FIREBASE_PROJECT_ID, 3) GOOGLE_CLOUD_PROJECT, 4) GCLOUD_PROJECT func resolveFirebaseProjectID(projectID string) string { if projectID != "" { return projectID } if envID := os.Getenv("FIREBASE_PROJECT_ID"); envID != "" { return envID } if envID := os.Getenv("GOOGLE_CLOUD_PROJECT"); envID != "" { return envID } return os.Getenv("GCLOUD_PROJECT") }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/firebase/genkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server