First Public Release 🎉
The Horreum MCP Server is a Source MCP adapter that provides standardized access to Horreum performance testing databases for Domain-specific MCP servers and AI assistants.
- Read Operations: Tests, schemas, runs, datasets, label values
- Write Operations: Run uploads with full metadata support
- Advanced Filtering: By test, schema, time ranges, and label values
- Natural Language Time Queries: "last week", "yesterday", "last 30 days"
Ask questions in plain English:
curl -X POST "http://localhost:3000/api/query" \
-H "Content-Type: application/json" \
-d '{"query": "Show me CPU usage for test XYZ where transaction rate is 2000"}'Supports OpenAI, Anthropic, Google Gemini, and Azure OpenAI.
- STDIO: Direct integration with AI clients (Claude Desktop, Cline, etc.)
- HTTP/SSE: Remote connections for distributed deployments
- REST API: Server-to-server integration (
/api/tools/*)
- Multi-Architecture Containers: amd64 and arm64 support
- Observability: Structured logging, correlation IDs, Prometheus metrics
- Enterprise Support: Custom CA certificates, SSL/TLS configuration
- Kubernetes/OpenShift: Complete deployment manifests
Designed as a Source MCP for Domain MCP integration:
AI Assistant → Domain MCP → Source MCP (Horreum) → Horreum DB
Docker/Podman:
podman run -d \
-e HORREUM_BASE_URL=https://horreum.example.com \
-e HORREUM_TOKEN=your-token \
-e HTTP_AUTH_TOKEN=mcp-token \
-p 3000:3000 \
ghcr.io/dustinblack/horreum-mcp:0.1.0Kubernetes/OpenShift:
kubectl apply -f https://raw.githubusercontent.com/dustinblack/horreum-mcp/v0.1.0/docs/deployment/kubernetes-deployment.mdgit clone https://github.com/dustinblack/horreum-mcp.git
cd horreum-mcp
git checkout v0.1.0
npm install
npm run build
npm startexport HORREUM_BASE_URL=https://horreum.example.com
export HORREUM_TOKEN=your-horreum-token
export HTTP_AUTH_TOKEN=your-mcp-token
export HTTP_PORT=3000npm start# Health check
curl http://localhost:3000/health
# List tests
curl -X POST http://localhost:3000/api/tools/list_tests \
-H "Authorization: Bearer your-mcp-token" \
-H "Content-Type: application/json" \
-d '{"limit": 10}'
# Natural language query (requires LLM configuration)
curl -X POST http://localhost:3000/api/query \
-H "Authorization: Bearer your-mcp-token" \
-H "Content-Type: application/json" \
-d '{"query": "Show me tests that failed in the last week"}'| Variable | Required | Description | Default |
|---|---|---|---|
HORREUM_BASE_URL |
Yes | Horreum server URL | - |
HORREUM_TOKEN |
No | Authentication token | - |
HORREUM_TLS_VERIFY |
No | Verify SSL certificates | true |
HORREUM_TLS_CA_FILE |
No | Custom CA certificate path | - |
| Variable | Required | Description | Default |
|---|---|---|---|
HTTP_PORT |
No | Server port | 3000 |
HTTP_AUTH_TOKEN |
No | Bearer token for auth | - |
| Variable | Required | Description | Example |
|---|---|---|---|
LLM_PROVIDER |
No | LLM provider | gemini |
LLM_API_KEY |
No | LLM API key | - |
LLM_MODEL |
No | Model identifier | gemini-2.0-flash-exp |
LLM_GEMINI_ENDPOINT |
No | Custom Gemini endpoint | - |
LLM_GEMINI_PROJECT |
No | Google Cloud Project ID | - |
| Variable | Required | Description | Default |
|---|---|---|---|
LOG_LEVEL |
No | Logging level | info |
Complete configuration guide: docs/user-guide/configuration.md
- Quick Start Guide
- Configuration Guide
- Kubernetes Deployment
- Domain MCP Integration
- Natural Language Queries
- AI Client Setup
- Development History
list_tests- List all tests with optional filteringget_test- Get detailed test information
get_schema- Retrieve schema definitionlist_schemas- List all schemas
list_runs- List runs with filtering and paginationget_run- Get complete run informationget_run_data- Get run data payloadget_run_metadata- Get run metadataget_run_summary- Get run summarylist_runs_by_schema- List runs by schema IDget_run_count- Count runs matching criterialist_all_runs- List all runs (admin)upload_run- Upload new test run
list_datasets- List datasets with filteringget_dataset- Get dataset informationget_dataset_summary- Get dataset summary
get_run_label_values- Get label values for a runget_test_label_values- Get aggregated label values for a testget_dataset_label_values- Get label values for a dataset
ping- Health check and version info
Connect Claude Desktop or other AI clients directly to Horreum:
{
"mcpServers": {
"horreum": {
"command": "node",
"args": ["/path/to/horreum-mcp/build/index.js"],
"env": {
"HORREUM_BASE_URL": "https://horreum.example.com",
"HORREUM_TOKEN": "your-token"
}
}
}
}Build specialized performance analysis tools:
# Domain MCP calls Horreum MCP
response = await horreum_adapter.get_test_label_values(
test_name="boot-time-test",
labels=["boot_duration", "kernel_version"],
from_time="last week"
)Ask questions about your performance data:
curl -X POST http://localhost:3000/api/query \
-H "Content-Type: application/json" \
-d '{
"query": "Compare CPU usage between run 12345 and run 12346"
}'Automated performance testing workflows:
# Upload test results
curl -X POST http://localhost:3000/api/tools/upload_run \
-H "Authorization: Bearer $TOKEN" \
-d @test-results.json
# Query recent failures
curl -X POST http://localhost:3000/api/tools/list_runs \
-d '{"test": "my-test", "from": "last 24 hours"}'- Bearer Token Authentication: Secure HTTP endpoints
- SSL/TLS Support: Custom CA certificates for corporate environments
- Secret Scanning: Pre-commit hooks prevent credential leaks
- Container Scanning: Trivy security scanning in CI/CD
- Dependency Audits: Automated npm audit checks
The Horreum MCP Server implements a Source MCP pattern:
┌─────────────────┐
│ AI Assistant │ (Claude, ChatGPT, etc.)
└────────┬────────┘
│
┌────────▼────────┐
│ Domain MCP │ (Performance analysis, boot time, etc.)
└────────┬────────┘
│
┌────────▼────────┐
│ Source MCP │ ← This project
│ (Horreum) │
└────────┬────────┘
│
┌────────▼────────┐
│ Horreum DB │
└─────────────────┘
This architecture enables:
- Domain experts to build specialized tools without Horreum expertise
- Multiple domains to share one Source MCP
- Flexibility to swap data sources without changing Domain MCP code
- Streaming Responses: Foundation implemented, endpoint integration deferred to future release
- Write Operations: Limited to run uploads; test/schema creation not yet supported
- Dataset Comparisons: CSV export planned for Phase 13
- Language: TypeScript
- Runtime: Node.js 20 LTS
- MCP SDK: @modelcontextprotocol/sdk v1.18.1
- Test Coverage: 97 passing tests
- License: Apache 2.0
- Container Registry: ghcr.io/dustinblack/horreum-mcp
- Supported Architectures: linux/amd64, linux/arm64
- Horreum 0.19: Full support for latest Horreum API
- Source MCP Contract: v1.0.0 compliance
- MCP Protocol: Compatible with all standard MCP clients
- Built on the Model Context Protocol
- Integrates with Horreum from the Hyperfoil project
- AI-assisted development by Claude Sonnet 4.5, GPT-5, Gemini 2.5 Pro
Apache License 2.0 - See LICENSE for details
- Repository: https://github.com/dustinblack/horreum-mcp
- Issues: https://github.com/dustinblack/horreum-mcp/issues
- Container Images: https://github.com/dustinblack/horreum-mcp/pkgs/container/horreum-mcp
- Horreum Project: https://horreum.hyperfoil.io/
- Model Context Protocol: https://modelcontextprotocol.io/
Full Changelog: CHANGELOG.md