Go SDK
Official Go SDK for integrating MCPulse analytics into your Go MCP servers.
Installation
go get github.com/sirrobot01/mcpulse-go
Quick Start
Basic Usage
package main
import (
"context"
"fmt"
mcpulse "github.com/sirrobot01/mcpulse-go"
)
func main() {
ctx := context.Background()
// Create configuration
config := mcpulse.DefaultConfig("my-mcp-server")
config.GRPCEndpoint = "localhost:9090"
config.APIKey = "your-api-key"
// Create middleware
middleware, err := mcpulse.NewMiddleware(ctx, config)
if err != nil {
panic(err)
}
defer middleware.Close(ctx)
// Track a tool call
result, err := middleware.TrackToolCall(ctx, "calculate", map[string]interface{}{
"operation": "add",
"a": 5,
"b": 3,
}, func(ctx context.Context, params map[string]interface{}) (interface{}, error) {
a := params["a"].(int)
b := params["b"].(int)
return a + b, nil
})
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
Configuration
config := mcpulse.Config{
ServerID: "my-mcp-server",
Transport: mcpulse.TransportGRPC, // or TransportREST
// Endpoints
GRPCEndpoint: "localhost:9090",
// Authentication
APIKey: "your-api-key",
// Collection settings
EnableParamCollection: true,
AsyncCollection: true,
BufferSize: 100,
FlushInterval: 5 * time.Second,
MaxBatchSize: 1000,
// Privacy
SanitizeParams: true,
SensitiveKeys: []string{"password", "token", "api_key"},
// Sampling
SampleRate: 1.0, // 1.0 = 100%, 0.1 = 10%
// Retry
MaxRetries: 3,
RetryBackoff: 1 * time.Second,
// Timeout
Timeout: 10 * time.Second,
}
Features
Middleware Pattern
Track tool calls automatically:
result, err := middleware.TrackToolCall(ctx, "tool_name", params, handler)
Session Tracking
Group related calls:
sessionMgr := mcpulse.NewSessionManager(middleware)
ctx, session := sessionMgr.StartSession(ctx)
// All tracked calls use this session
result, _ := middleware.TrackToolCall(ctx, "search", params, handler)
Direct Client
For manual control:
client, err := mcpulse.New(ctx, mcpulse.ClientOptions{
Transport: mcpulse.TransportGRPC,
GRPCEndpoint: "localhost:9090",
})
defer client.Close()
metrics := []mcpulse.ToolCallMetric{
{
ID: "metric-1",
Timestamp: time.Now(),
ServerID: "my-server",
ToolName: "calculate",
DurationMS: 42,
Status: "success",
},
}
result, err := client.IngestMetrics(ctx, metrics)
Streaming (gRPC only)
Stream batches of metrics:
batches := make(chan []mcpulse.ToolCallMetric)
go func() {
defer close(batches)
for i := 0; i < 10; i++ {
batches <- []mcpulse.ToolCallMetric{/* metrics */}
}
}()
result, err := client.IngestMetricsStream(ctx, batches)
API Reference
Middleware
NewMiddleware(ctx, config)
- Create middleware instanceTrackToolCall(ctx, toolName, params, handler)
- Track with automatic metricsFlush(ctx)
- Flush buffered metricsClose(ctx)
- Close and cleanup
Client
New(ctx, opts)
- Create low-level clientIngestMetrics(ctx, metrics)
- Send batchIngestMetricsStream(ctx, batches)
- Stream batches (gRPC only)Close()
- Close connection
Session
NewSession()
- Create session with generated IDWithSession(ctx, session)
- Add session to contextGetSessionID(ctx)
- Get session ID from context
Examples
See the examples directory for complete examples.