Skip to main content
Glama

DataDog MCP Server

by Believe-SA
main.go3.31 kB
// cmd/server/main.go package main import ( "context" "log" "os" "github.com/chussenot/datadog-mcp/internal/client" v1 "github.com/chussenot/datadog-mcp/internal/tools/v1" "github.com/chussenot/datadog-mcp/internal/types" "github.com/modelcontextprotocol/go-sdk/mcp" ) func main() { ctx := context.Background() log.Println("🚀 Starting DataDog MCP server...") // Get configuration from environment apiKey := os.Getenv("DD_API_KEY") if apiKey == "" { log.Fatal("❌ DD_API_KEY environment variable is required") } site := os.Getenv("DATADOG_SITE") if site == "" { site = "datadoghq.eu" log.Printf("📝 Using default site: %s", site) } // Create DataDog client with authentication ddClient, err := client.NewDataDogClient(apiKey, site) if err != nil { log.Fatalf("❌ Failed to create DataDog client: %v", err) } // Create server with options opts := &mcp.ServerOptions{ Instructions: "DataDog MCP server for monitoring, dashboards, and metrics", InitializedHandler: func(ctx context.Context, req *mcp.InitializedRequest) { log.Println("✅ Client session initialized - DataDog tools are now available") }, } server := mcp.NewServer(&mcp.Implementation{ Name: "datadog-mcp", Version: "1.0.0", }, opts) log.Println("📝 Registering DataDog v1 tools...") // Register dashboard tools mcp.AddTool(server, &mcp.Tool{ Name: "v1_list_dashboards", Description: "List all dashboards in DataDog (API v1)", }, func(ctx context.Context, req *mcp.CallToolRequest, args types.ListDashboardsArgs) (*mcp.CallToolResult, any, error) { return v1.ListDashboards(ctx, ddClient, args) }) mcp.AddTool(server, &mcp.Tool{ Name: "v1_get_dashboard", Description: "Get details of a specific dashboard (API v1)", }, func(ctx context.Context, req *mcp.CallToolRequest, args types.GetDashboardArgs) (*mcp.CallToolResult, any, error) { return v1.GetDashboard(ctx, ddClient, args) }) // Register event tools mcp.AddTool(server, &mcp.Tool{ Name: "v1_list_events", Description: "List events from DataDog (API v1)", }, func(ctx context.Context, req *mcp.CallToolRequest, args types.ListEventsArgs) (*mcp.CallToolResult, any, error) { return v1.ListEvents(ctx, ddClient, args) }) mcp.AddTool(server, &mcp.Tool{ Name: "v1_create_event", Description: "Create a new event in DataDog (API v1)", }, func(ctx context.Context, req *mcp.CallToolRequest, args types.CreateEventArgs) (*mcp.CallToolResult, any, error) { return v1.CreateEvent(ctx, ddClient, args) }) // Register connection test tool mcp.AddTool(server, &mcp.Tool{ Name: "v1_test_connection", Description: "Test DataDog API v1 connectivity and authentication", }, func(ctx context.Context, req *mcp.CallToolRequest, args struct{}) (*mcp.CallToolResult, any, error) { return v1.TestConnection(ctx, ddClient) }) log.Println("✅ DataDog tools registered successfully") log.Printf("🔄 Starting server over stdio for site: %s", site) // Add logging transport for debugging transport := &mcp.LoggingTransport{ Transport: &mcp.StdioTransport{}, Writer: os.Stderr, } // Run over stdio (great for local MCP clients) if err := server.Run(ctx, transport); err != nil { log.Printf("❌ Server failed: %v", err) log.Fatal(err) } }

Latest Blog Posts

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/Believe-SA/datadog-mcp'

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