Example: Basic Server¶
Minimal MCP server with DataHub tools.
Complete Code¶
package main
import (
"context"
"log"
"os"
"github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/txn2/mcp-datahub/pkg/client"
"github.com/txn2/mcp-datahub/pkg/tools"
)
func main() {
// Create MCP server
server := mcp.NewServer(&mcp.Implementation{
Name: "basic-datahub-server",
Version: "1.0.0",
}, nil)
// Create DataHub client from environment
datahubClient, err := client.New(client.Config{
URL: os.Getenv("DATAHUB_URL"),
Token: os.Getenv("DATAHUB_TOKEN"),
})
if err != nil {
log.Fatalf("Failed to create DataHub client: %v", err)
}
defer datahubClient.Close()
// Create toolkit and register all tools
toolkit := tools.NewToolkit(datahubClient)
toolkit.RegisterAll(server)
log.Println("Starting basic DataHub MCP server...")
// Run with stdio transport
if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil {
log.Fatalf("Server error: %v", err)
}
}
Configuration¶
Set these environment variables:
Build and Run¶
# Initialize module
go mod init basic-server
go mod tidy
# Build
go build -o basic-server
# Run
./basic-server
Claude Desktop Configuration¶
{
"mcpServers": {
"datahub": {
"command": "/path/to/basic-server",
"env": {
"DATAHUB_URL": "https://your-datahub.example.com",
"DATAHUB_TOKEN": "your_token"
}
}
}
}
Available Tools¶
This example registers all 11 DataHub tools:
datahub_searchdatahub_get_entitydatahub_get_schemadatahub_get_lineagedatahub_get_queriesdatahub_get_glossary_termdatahub_list_tagsdatahub_list_domainsdatahub_list_data_productsdatahub_get_data_productdatahub_list_connections
Selective Registration¶
To register only specific tools:
toolkit := tools.NewToolkit(datahubClient)
toolkit.Register(server,
tools.ToolSearch,
tools.ToolGetEntity,
tools.ToolGetSchema,
)
With Custom Configuration¶
toolkit := tools.NewToolkit(datahubClient, tools.Config{
DefaultLimit: 20,
MaxLimit: 100,
MaxLineageDepth: 5,
})
Next Steps¶
- With Authentication: Add JWT authentication
- Combined Trino: Add Trino query execution