0xteamhq/mcp-grafana
If you are the rightful owner of mcp-grafana and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Model Context Protocol (MCP) server for Grafana enables seamless interaction between AI assistants and Grafana dashboards, datasources, alerts, and more, using a TypeScript/JavaScript implementation.
@leval/mcp-grafana
Complete TypeScript/JavaScript implementation of the Model Context Protocol (MCP) server for Grafana, enabling AI assistants to interact with Grafana dashboards, datasources, alerts, incidents, and more.
🚀 Features
- 43 Comprehensive Tools: Complete Grafana functionality via MCP
- Multiple MCP Clients Support: Works with Claude Desktop, Claude Code, Cursor, Zed, Codex
- Type-Safe Implementation: Built with TypeScript for reliability
- Easy Installation: Available via npm/npx - no compilation needed
- Production Ready: Comprehensive error handling and logging
- Full Authentication Support: Service accounts, API keys, basic auth, mTLS
📦 Installation
Option 1: Global Installation
npm install -g @leval/mcp-grafana
Option 2: Run with npx (no installation)
npx @leval/mcp-grafana
Option 3: Local Development
git clone https://github.com/levalhq/mcp-grafana.git
cd mcp-grafana
npm install
npm run build
🔧 Configuration
Environment Variables
Create a .env file in your project root:
# Required
GRAFANA_URL=https://your-grafana-instance.com
# Authentication (use one)
GRAFANA_SERVICE_ACCOUNT_TOKEN=glsa_xxxxxxxxxxxx # Recommended
# OR
GRAFANA_USERNAME=username # Basic auth
GRAFANA_PASSWORD=password
# Optional
DEBUG=true # Enable debug logging
TLS_CERT_FILE=/path/to/cert.pem # mTLS certificate
TLS_KEY_FILE=/path/to/key.pem # mTLS key
TLS_CA_FILE=/path/to/ca.pem # Custom CA certificate
TLS_SKIP_VERIFY=true # Skip TLS verification
🤖 MCP Client Configuration
Claude Desktop
Config File Locations:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Configuration:
{
"mcpServers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
Usage:
- Save the configuration file
- Restart Claude Desktop
- Look for the MCP icon (🔌) in the interface
- Ask Claude: "What dashboards are available in my Grafana?"
Claude Code (VS Code Extension)
{
"claude.mcpServers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
Or configure globally in VS Code settings:
- Open Command Palette (
Cmd/Ctrl + Shift + P) - Search for "Preferences: Open User Settings (JSON)"
- Add the
claude.mcpServersconfiguration
Usage:
- Open Claude panel in VS Code
- The MCP server will start automatically
- Ask: "Show me the error rate from our Prometheus metrics"
Cursor
Configuration: Add to .cursor/settings.json in your project root:
{
"ai.mcpServers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
Or configure globally:
- Open Cursor Settings (
Cmd/Ctrl + ,) - Go to "Features" → "AI" → "MCP Servers"
- Add the Grafana server configuration
Usage:
- Press
Cmd/Ctrl + Kto open AI chat - The MCP indicator will show when connected
- Try: "Analyze the Loki logs for errors in the last hour"
Zed
Configuration: Add to ~/.config/zed/settings.json:
{
"assistant": {
"version": "2",
"mcp_servers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
}
Usage:
- Open Assistant panel (
Cmd/Ctrl + ?) - The MCP server starts automatically
- Ask: "List all datasources and their types"
Codex (GitHub Copilot Workspace)
Configuration: Add to .github/codex/mcp-config.json:
{
"servers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
Usage:
- Open Codex workspace
- The MCP server connects automatically
- Use in prompts: "Create a dashboard based on our current metrics"
Continue.dev
Configuration: Add to ~/.continue/config.json:
{
"models": [...],
"mcpServers": {
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
}
Usage:
- Open Continue panel in your IDE
- MCP connection status shown in status bar
- Ask: "What alerts are currently firing?"
Windsurf
Configuration: Add to .windsurf/mcp-servers.json:
{
"grafana": {
"command": "npx",
"args": ["@leval/mcp-grafana"],
"env": {
"GRAFANA_URL": "https://your-grafana.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxxxxxxxxxxx"
}
}
}
Usage:
- Windsurf automatically detects and connects to MCP servers
- Use Cascade AI with Grafana context
📚 Available Tools (43 Total)
Dashboard Management (5 tools)
| Tool | Description | Example Usage |
|---|---|---|
search_dashboards | Search for dashboards | "Find dashboards with 'cpu' in the name" |
get_dashboard_by_uid | Get complete dashboard JSON | "Show me the dashboard with UID abc123" |
get_dashboard_summary | Get dashboard metadata | "Summarize the monitoring dashboard" |
get_dashboard_property | Extract specific properties | "Get all panel titles from dashboard xyz" |
update_dashboard | Create or update dashboards | "Add a new panel to track memory usage" |
Data Sources (3 tools)
| Tool | Description | Example Usage |
|---|---|---|
list_datasources | List all datasources | "What datasources are configured?" |
get_datasource_by_uid | Get datasource by UID | "Show details for datasource uid-123" |
get_datasource_by_name | Get datasource by name | "Get the Prometheus datasource config" |
Prometheus (5 tools)
| Tool | Description | Example Usage |
|---|---|---|
query_prometheus | Execute PromQL queries | "Show CPU usage for the last hour" |
list_prometheus_metric_names | List available metrics | "What metrics are available?" |
list_prometheus_label_names | List label names | "Show all Prometheus labels" |
list_prometheus_label_values | Get label values | "What values exist for the 'env' label?" |
list_prometheus_metric_metadata | Get metric metadata | "Describe the node_cpu_seconds metric" |
Loki Logs (5 tools)
| Tool | Description | Example Usage |
|---|---|---|
query_loki_logs | Execute LogQL queries | "Show error logs from the API service" |
query_loki_stats | Get log stream statistics | "How many log entries in the last day?" |
list_loki_label_names | List log label names | "What labels are in our logs?" |
list_loki_label_values | Get log label values | "Show all namespaces in logs" |
find_error_pattern_logs | Find error patterns | "Analyze error patterns in production" |
Incident Management (4 tools)
| Tool | Description | Example Usage |
|---|---|---|
list_incidents | List incidents | "Show all active incidents" |
get_incident | Get incident details | "Details for incident INC-123" |
create_incident | Create new incident | "Create a critical incident for API outage" |
add_activity_to_incident | Add notes to incidents | "Add update to incident INC-123" |
Additional Categories
- Alerting (3 tools): Alert rules, contact points
- OnCall (5 tools): Schedules, shifts, on-call users
- Sift (4 tools): Investigations, slow request analysis
- Pyroscope (4 tools): Profiling data, performance analysis
- Admin (2 tools): User and team management
- Navigation (1 tool): Generate Grafana deeplinks
- Asserts (1 tool): Entity assertions
🔒 Security
Creating a Service Account Token (Recommended)
-
In Grafana UI:
- Go to Administration → Service accounts
- Click "Add service account"
- Name it (e.g., "mcp-server")
- Click "Create"
- Click "Add service account token"
- Generate token and copy it
-
Required Permissions:
dashboards:read- View dashboardsdatasources:read- View datasourcesalert.rules:read- View alert ruleslogs:read- Query Lokimetrics:read- Query Prometheusincidents:write- Manage incidents (if needed)
Best Practices
- Use service account tokens instead of API keys
- Store tokens in environment variables, not in code
- Use read-only permissions where possible
- Enable TLS/mTLS for production environments
- Regularly rotate tokens
🧪 Testing
Quick Test
# Test connection
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-grafana.com/api/org
# Test with the MCP server
npx @leval/mcp-grafana --debug
Run Test Suite
# Clone the repository
git clone https://github.com/levalhq/mcp-grafana.git
cd mcp-grafana
# Install dependencies
npm install
# Run tests
npm test
# Test with your Grafana instance
node test/test-connection.js
node test/test-api.js
📊 Performance
- Startup time: < 1 second
- Tool registration: < 100ms for all 43 tools
- Query response: 200-500ms typical
- Memory usage: ~50MB baseline
- Connection pooling: Reuses HTTP connections
🐛 Troubleshooting
MCP Server Not Starting
# Check if running correctly
npx @leval/mcp-grafana --debug
# Should output:
# Starting MCP Grafana server with stdio transport...
# MCP server started with stdio transport
Connection Issues
# Test your credentials
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-grafana.com/api/org
# Check response - should return org details
Client Not Detecting Server
- Verify configuration file location
- Check JSON syntax is valid
- Restart the client application
- Look for MCP indicator in UI
- Check client logs for errors
Common Error Messages
| Error | Solution |
|---|---|
| "Authentication failed" | Check your service account token |
| "No datasources found" | Verify datasource permissions |
| "Tool not found" | Ensure all tools are enabled |
| "Connection timeout" | Check network and Grafana URL |
| "Permission denied" | Add required permissions to service account |
📈 Advanced Configuration
Disable Specific Tool Categories
npx @leval/mcp-grafana \
--disable-incident \
--disable-oncall \
--disable-sift
Custom TLS Configuration
export TLS_CERT_FILE=/path/to/cert.pem
export TLS_KEY_FILE=/path/to/key.pem
export TLS_CA_FILE=/path/to/ca.pem
npx @leval/mcp-grafana
Debug Mode
npx @leval/mcp-grafana --debug
# Or
export DEBUG=true
npx @leval/mcp-grafana
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
# Fork and clone
git clone https://github.com/levalhq/mcp-grafana.git
cd mcp-grafana
# Install dependencies
npm install
# Make changes and test
npm test
# Build
npm run build
# Submit PR
Feature Status
All features from the original Go implementation have been migrated:
- ✅ Core MCP server with stdio transport
- ✅ Dashboard operations (search, retrieve, update, create)
- ✅ Data source management
- ✅ Prometheus queries and metadata
- ✅ Loki log queries and label exploration
- ✅ Incident management and timeline
- ✅ Alert management and contact points
- ✅ OnCall schedules and shifts
- ✅ Sift investigations and analysis
- ✅ Pyroscope profiling
- ✅ Authentication methods (API key, service account, basic auth, mTLS)
- ✅ TLS configuration and custom CA support
📄 License
Apache-2.0 - See file for details
📦 NPM Package
This package is published on npm as @leval/mcp-grafana
# Install globally
npm install -g @leval/mcp-grafana
# Or use directly with npx
npx @leval/mcp-grafana
# View package info
npm info @leval/mcp-grafana
🆘 Support
- NPM Package: npmjs.com/package/@leval/mcp-grafana
- GitHub Issues: github.com/levalhq/mcp-grafana/issues
- Documentation: Grafana Docs
- MCP Protocol: modelcontextprotocol.io
🎉 Acknowledgments
This TypeScript implementation provides full feature parity with the original Go version, with improved npm ecosystem integration and support for all major MCP clients.
Made with ❤️ for the Grafana and AI community