mcp-prom-haskell
A sophisticated MCP server for Prometheus queries demonstrating advanced Haskell practices
Documentation
MCP Prometheus Server
Overview
A production-ready Model Context Protocol (MCP) server implementation in Haskell that provides Claude Desktop with access to Prometheus metrics and queries. Built with Haskell best practices including proper exception handling, strict evaluation patterns, and comprehensive error recovery.
"The Adeon Special" - v1.0.1 incorporates advanced Haskell techniques to avoid common footguns and ensure thread-safe, robust operation.
Features
- ๐ Claude Desktop Integration - Seamless MCP protocol support
- ๐ Complete Prometheus API - Query, discover, and explore metrics
- ๐ 5 Powerful Tools - From instant queries to metric discovery
- ๐ก๏ธ Production Ready - Comprehensive error handling and logging
- ๐งต Thread Safe - Strict evaluation prevents lazy I/O hangs
- ๐ง Haskell Best Practices - Proper exception handling, no SomeException anti-patterns
- ๐งช Test Coverage - Unit and integration tests included
Quick Start
Option 1: Use Pre-built Binary (Recommended)
1. Clone the repository:
git clone https://github.com/drewstreib/mcp-prom-haskell.git
cd mcp-prom-haskell/mcp-prometheus-server2. Use the pre-built binary:
./testbin/mcp-prometheus-server --prometheus-url http://your-prometheus-server:9090Option 2: Build from Source
make build
# Binary will be in testbin/mcp-prometheus-serverOption 3: Docker (Development)
# Start test Prometheus instance
docker-compose up -d prometheus
# Build and run
docker build -t mcp-prometheus-server .
docker run -it --rm \
--network mcp-prometheus-server_mcp-network \
-e PROMETHEUS_URL=http://prometheus:9090 \
mcp-prometheus-serverClaude Desktop Configuration
Add to your Claude Desktop configuration file:
macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
Windows: `%APPDATA%\Claude\claude_desktop_config.json`
Linux: `~/.config/claude/claude_desktop_config.json`
{
"mcpServers": {
"prometheus": {
"command": "/path/to/mcp-prom-haskell/mcp-prometheus-server/testbin/mcp-prometheus-server",
"args": [
"--prometheus-url",
"http://your-prometheus-server:9090"
]
}
}
}Replace `/path/to/` with your actual path to the repository.
Available Tools
1. `prometheus_query`
Execute instant PromQL queries at a specific point in time.
Example: "What's the current CPU usage?"
rate(node_cpu_seconds_total[5m])2. `prometheus_query_range`
Execute queries over a time range for trending and analysis.
Example: "Show me memory usage over the last hour"
node_memory_Active_bytes3. `prometheus_series`
Find time series matching specific label selectors.
Example: "What metrics are available for the node-exporter job?"
4. `prometheus_metrics`
List all available metric names in the system.
Example: "What metrics can I query?"
5. `prometheus_labels`
Discover all label names used across metrics.
Example: "What labels are available for filtering?"
Haskell Implementation Details
This server showcases production-ready Haskell practices:
Exception Handling
- No `SomeException` anti-pattern - Only catches specific, recoverable exceptions
- `IOException` for I/O operations - Handles stdin/stdout failures gracefully
- `HttpException` for network calls - Provides detailed Prometheus connection errors
Thread Safety & Performance
- BangPatterns for strict evaluation - Prevents lazy I/O hangs in logging
- Structured logging with timestamps - Thread-safe, atomic log writes
- UTF-8 text handling - Proper Unicode support throughout
JSON-RPC Compliance
- Proper notification handling - No responses to notifications per spec
- Type-safe message parsing - Comprehensive error recovery
- Protocol version matching - Full Claude Desktop compatibility
Manual Installation
Prerequisites
- GHC 9.12+ and Cabal 3.0+
- Or use GHCup (recommended):
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | shBuilding
git clone https://github.com/drewstreib/mcp-prom-haskell.git
cd mcp-prom-haskell/mcp-prometheus-server
make buildTesting
Run Tests with Docker
docker-compose run --rm mcp-prometheus-server-testRun Tests Manually
# Unit tests only
cabal test
# With integration tests (requires Prometheus)
export PROMETHEUS_URL=http://your-prometheus-server:9090
cabal testConfiguration
Environment Variables
- `PROMETHEUS_URL` - URL of your Prometheus server (default: `http://your-prometheus-server:9090`)
Command Line Options
mcp-prometheus-server --prometheus-url http://prometheus:9090Development
Project Structure
mcp-prometheus-server/
โโโ app/ # Main executable
โโโ src/ # Library source code
โ โโโ MCP/ # MCP protocol implementation
โ โโโ Prometheus/ # Prometheus client
โโโ test/ # Test suites
โโโ Dockerfile # Docker image definition
โโโ docker-compose.yml # Development environmentAdding New Endpoints
1. Add the client function in `src/Prometheus/Client.hs`
2. Add the tool definition in `src/MCP/Server.hs`
3. Add tests in `test/IntegrationSpec.hs`
4. Update documentation
Troubleshooting
Docker Issues
Container exits immediately: The MCP server expects stdio interaction. Use `-it` flags:
docker run -it --rm mcp-prometheus-server:latestCannot connect to Prometheus: Ensure containers are on the same network:
docker network create mcp-net
docker run --network mcp-net ...Build Issues
Cabal dependency errors: Update your package index:
cabal updateGHC version mismatch: Use GHCup to install the correct version:
ghcup install ghc 9.6.4
ghcup set ghc 9.6.4Contributing
We welcome contributions! See ROADMAP.md for planned features.
1. Fork the repository
2. Create a feature branch
3. Add tests for new functionality
4. Ensure all tests pass
5. Submit a pull request
License
BSD 3-Clause License - see LICENSE file for details.
Acknowledgments
- Special thanks to Adeon for invaluable guidance on Haskell best practices, exception handling patterns, and avoiding common lazy evaluation footguns
- Built with the Model Context Protocol
- Powered by Prometheus
- Written in Haskell
"The Adeon Special" - v1.0.1
This release represents production-ready Haskell code that avoids common pitfalls:
- โ No `SomeException` anti-patterns
- โ Strict evaluation in I/O-heavy functions
- โ Thread-safe logging patterns
- โ Proper JSON-RPC notification handling
- โ Comprehensive error recovery without crashes
Frequently asked questions
What is mcp-prom-haskell?
mcp-prom-haskell is A sophisticated MCP server for Prometheus queries demonstrating advanced Haskell practices
How do I install mcp-prom-haskell?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is mcp-prom-haskell open source?
Yes โ it is hosted on GitHub at https://github.com/drewstreib/mcp-prom-haskell.
Related MCP tools
Playwright MCP server TypeScript-based implementation. Trusted by 22000+ developers. Trusted by 22000+ developers. Trusted by 22000+ developers.
MCP Server for Ghidra Java-based implementation. Trusted by 6400+ developers. Trusted by 6400+ developers. Trusted by 6400+ developers.
Official Notion MCP Server TypeScript-based implementation. Trusted by 3400+ developers. Trusted by 3400+ developers. Trusted by 3400+ developers.
Directory for Awesome MCP Servers TypeScript-based implementation. Trusted by 1900+ developers. Trusted by 1900+ developers.
๐งฉ MCP Gateway - A lightweight gateway service that instantly transforms existing MCP Servers and APIs into MCP servers with zero code changes.
MCP server for Grafana Go-based implementation. Trusted by 1700+ developers. Trusted by 1700+ developers. Trusted by 1700+ developers.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP