Skip to main content
Glama

Genkit MCP

Official
by firebase
main.go4.5 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. package main import ( "context" "fmt" "os" "github.com/firebase/genkit/go/ai" "github.com/firebase/genkit/go/core/logger" "github.com/firebase/genkit/go/genkit" "github.com/firebase/genkit/go/plugins/googlegenai" "github.com/firebase/genkit/go/plugins/mcp" ) // MCP Client Example - connects to time server func clientExample() { ctx := context.Background() // Initialize Genkit with Google AI g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{})) // Create and connect to MCP time server client, err := mcp.NewGenkitMCPClient(mcp.MCPClientOptions{ Name: "mcp-time", Version: "1.0.0", Stdio: &mcp.StdioConfig{ Command: "uvx", Args: []string{"mcp-server-time", "--local-timezone=America/New_York"}, }, }) if err != nil { logger.FromContext(ctx).Error("Failed to create MCP client", "error", err) return } // Get tools and generate response tools, _ := client.GetActiveTools(ctx, g) logger.FromContext(ctx).Info("Found MCP time tools", "count", len(tools), "client", "mcp-time") var toolRefs []ai.ToolRef for _, tool := range tools { toolRefs = append(toolRefs, tool) } response, err := genkit.Generate(ctx, g, ai.WithModelName("googleai/gemini-2.5-pro-preview-05-06"), ai.WithPrompt("Convert the current time from New York to London timezone."), ai.WithTools(toolRefs...), ai.WithToolChoice(ai.ToolChoiceAuto), ) if err != nil { logger.FromContext(ctx).Error("Generation failed", "error", err) } else { logger.FromContext(ctx).Info("Generation completed", "response", response.Text()) } // Disconnect from server logger.FromContext(ctx).Info("Disconnecting from MCP server", "client", "mcp-time") client.Disconnect() logger.FromContext(ctx).Info("Disconnected from MCP server", "client", "mcp-time") } // MCP Host Example - connects to time server and demonstrates both tools and resources func managerExample() { ctx := context.Background() // Initialize Genkit with Google AI g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{})) // Create and connect to MCP time server host, _ := mcp.NewMCPHost(g, mcp.MCPHostOptions{ Name: "time-example", MCPServers: []mcp.MCPServerConfig{ { Name: "time", Config: mcp.MCPClientOptions{ Name: "mcp-time", Version: "1.0.0", Stdio: &mcp.StdioConfig{ Command: "uvx", Args: []string{"mcp-server-time", "--local-timezone=America/New_York"}, }, }, }, }, }) // Get tools and resources from MCP servers tools, _ := host.GetActiveTools(ctx, g) logger.FromContext(ctx).Info("Found MCP tools", "count", len(tools)) var toolRefs []ai.ToolRef for _, tool := range tools { toolRefs = append(toolRefs, tool) } response, err := genkit.Generate(ctx, g, ai.WithModelName("googleai/gemini-2.5-pro-preview-05-06"), ai.WithPrompt("What time is it in New York and Tokyo?"), ai.WithTools(toolRefs...), ai.WithToolChoice(ai.ToolChoiceAuto), ) if err != nil { logger.FromContext(ctx).Error("Generation failed", "error", err) } else { logger.FromContext(ctx).Info("Generation completed", "response", response.Text()) } // Disconnect from server host.Disconnect(ctx, "time") logger.FromContext(ctx).Info("Disconnected from MCP server", "server", "time") } func main() { if len(os.Args) < 2 { fmt.Println("Usage: go run main.go [manager|client]") fmt.Println(" manager - MCP Host example with time server (tools & resources)") fmt.Println(" client - MCP Client example with time server") os.Exit(1) } ctx := context.Background() switch os.Args[1] { case "client": logger.FromContext(ctx).Info("Running MCP Client example") clientExample() case "manager": logger.FromContext(ctx).Info("Running MCP Host example") managerExample() default: fmt.Printf("Unknown example: %s\n", os.Args[1]) fmt.Println("Use 'client' or 'manager'") os.Exit(1) } }

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