Nightingale

MCP endpoint built into the Nightingale alerting server for alerts, rules, metrics and logs

Official · CCF Open Source Go Local · Streamable HTTP DevOps and monitoring

68 popularity score ★ 13k

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http nightingale http://127.0.0.1:17000/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "nightingale": {
      "url": "http://127.0.0.1:17000/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "nightingale": {
      "type": "http",
      "url": "http://127.0.0.1:17000/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.nightingale]
url = "http://127.0.0.1:17000/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http nightingale http://127.0.0.1:17000/mcp

What it does

Nightingale is a self-hosted alerting system that evaluates rules against metrics, logs and SQL data sources and routes notifications to channels such as Slack, PagerDuty, email and Jira. Its main n9e process carries an MCP endpoint at /mcp over Streamable HTTP, so there is no separate MCP process to install: an MCP client connects to a running Nightingale instance with a personal token or an OAuth access token.

Through it a client can list firing and past alerts, read and edit alert rules, run PromQL instant and range queries, search Loki, Elasticsearch or OpenSearch logs, and manage dashboards, notification rules, channels and templates, data sources, mutes, users, teams and roles. Every call is passed to Nightingale's own HTTP API inside the process with the caller's credential, so that user's API permissions and business-group checks apply.

The tool code is not in the Nightingale repository itself: v9.2.0 embeds the toolsets of the separate n9e-mcp-server project (pinned commit 2992f7fecbf7), which registers 74 tools across 13 toolsets (pkg/api/*.go at that commit); the embedding code describes it as about 60. Only read tools are exposed unless MCPEnableWriteTools is set to true in the [HTTP.A2A] section, and MCPToolsets can narrow the toolsets; an unknown toolset name is dropped with a warning rather than widening access (aiagent/a2a/mcp.go).

What it needs

A running Nightingale server (binaries for Linux amd64/arm64, the bundled Docker Compose stack, or the Helm chart) reachable from the client; HTTP.TokenAuth must be enabled (on in the standalone default config, off in some deployment examples such as the compose-bridge config) and HTTP.A2A.DisableMCP left false. A Nightingale user account and a personal token from Profile, Token management. OAuth instead needs the built-in authorization server or an external OIDC provider configured first.

Limits

Write tools are off by default and need MCPEnableWriteTools = true plus a restart. Once enabled there is no server-side approval step per call; any confirmation must come from the client. query_range downsamples to max_points (1000 by default) and marks results truncated; query_logs returns 200 entries by default and rejects ranges over 7 days. targets and busi_groups offer one listing tool each. The read-only switch only controls which tools are registered; data-source credentials still decide what queries can reach. The path is /mcp, not /api/n9e/mcp.

Who it suits

Suits teams already running Nightingale who want an assistant to triage alerts, query metrics and logs, or help maintain alert and notification rules, with access governed by existing Nightingale users and roles. Because it is part of the server, it needs no extra process, but it is only useful against a Nightingale instance. Those who want the MCP side to run as a separate local process against a remote Nightingale can use the standalone n9e-mcp-server that the docs point to, which offers the same tool table over stdio. Keep the default read-only mode unless the client should change rules, users or data sources.

Tools 60 of 74

list_active_alerts
List alerts that are currently firing
get_active_alert
Show one firing alert
list_history_alerts
List past alert events
get_history_alert
Show one past alert event
list_alert_rules
List alert rules
get_alert_rule
Show one alert rule
create_alert_rule
Create an alert rule (write)
update_alert_rule
Change an alert rule (write)
import_alert_rules
Bulk-import rules in Nightingale JSON (write)
import_prom_rules
Bulk-import Prometheus YAML rules (write)
clone_alert_rules_to_bgs
Copy rules into other business groups (write)
toggle_alert_rules
Enable or disable several rules at once (write)
list_dashboards
List dashboards
get_dashboard
Show a dashboard's metadata
get_dashboard_pure
Return a dashboard's full panel JSON
create_dashboard
Create a dashboard (write)
update_dashboard_meta
Change a dashboard's name and metadata (write)
update_dashboard_panels
Replace a dashboard's panels (write)
set_dashboard_public
Change a dashboard's public visibility (write)
clone_dashboard
Duplicate a dashboard (write)
list_notify_rules
List notification rules
get_notify_rule
Show one notification rule
list_notify_channels
List notification channels
get_notify_channel
Show one notification channel
list_notify_templates
List message templates
create_notify_rules
Create notification rules (write)
update_notify_rule
Change a notification rule (write)
test_notify_rule
Send a test run of a notification rule
create_notify_channel
Add a notification channel (write)
update_notify_channel
Change a notification channel (write)
create_notify_template
Add a message template (write)
update_notify_template
Change a template's settings (write)
update_notify_template_content
Change a template's body (write)
list_datasources
List data sources in brief
list_datasources_full
List data sources with full settings
get_datasource
Show one data source
list_datasource_plugins
List supported data source types
upsert_datasource
Create or update a data source after a connection check (write)
set_datasource_status
Enable or disable data sources (write)
list_users
List users
get_user
Show one user
list_user_groups
List teams
get_user_group
Show one team
create_user
Create a user (write)
update_user_profile
Change a user's profile and roles (write)
reset_user_password
Set a new password for a user (write)
create_user_group
Create a team (write)
update_user_group
Change a team (write)
add_user_group_members
Add users to a team (write)
list_roles
List roles
list_operations
List permission operations
list_role_operations
List the operations granted to a role
create_role
Create a role (write)
update_role
Change a role (write)
bind_role_operations
Replace a role's granted operations (write)
query_instant
Run a PromQL query at one point in time
query_range
Run a PromQL query over a time range
query_logs
Search logs in Loki, Elasticsearch or OpenSearch
list_log_indices
List Elasticsearch or OpenSearch indices
list_log_fields
List the fields of a log index

Similar servers