The Axiom MCP connector routes your AI agent's tool calls to Axiom's own MCP server through Scalekit. Each user signs in to Axiom once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 26 tools.
- Tools
- 26
- What they doRead · write · destructive
- 15 · 8 · 315 read8 write3 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Axiom MCP connection
In AgentKit > Connections, create an Axiom MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Axiom MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'axiommcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Axiom MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'axiommcp_check_monitors',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "axiommcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Axiom MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="axiommcp_check_monitors",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolaxiommcp_check_monitorsList all monitors and their current status, showing which are firing or healthy.Read-onlyCheckMonitors
List all monitors and their current status, showing which are firing or healthy.
Inputs
This tool takes no inputs.
axiommcp_export_dashboardExport a dashboard configuration as JSON for backup or sharing.Read-onlyExportDashboard
Export a dashboard configuration as JSON for backup or sharing.
Inputs
dashboardUidstringrequired- The dashboard UID (stable external identifier). You can find UIDs using the `listDashboards()` tool.
axiommcp_get_dashboardGet details and configuration of a specific dashboard by ID.Read-onlyGetDashboard
Get details and configuration of a specific dashboard by ID.
Inputs
dashboardIdstringrequired- The dashboard UID. You can find a list of dashboards using the `listDashboards()` tool.
axiommcp_get_dataset_fieldsList all fields in an events or traces dataset.Read-onlyGetDatasetFields
List all fields in an events or traces dataset. Use this to understand the schema before writing APL queries. Do not use for otel-metrics-v1 datasets — use listMetrics() instead.
Inputs
datasetNamestringrequired- The dataset name.
axiommcp_get_metric_tag_valuesGet all values for a specific tag within a metrics dataset (kind otel-metrics-v1) over a given time range.Read-onlyGetMetricTagValues
Get all values for a specific tag within a metrics dataset (kind otel-metrics-v1) over a given time range. Useful for discovering filter values before querying with queryMetrics.
Inputs
datasetNamestringrequired- The dataset name. You can find an list of datasets using the `listDatasets()` tool.
tagstringrequired- The tag name to list values for.
endTimestring- End time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now".default
now startTimestring- Start time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now-30m".default
now-30m
axiommcp_get_monitor_historyGet the alert history for a specific monitor, including when it fired and resolved.Read-onlyGetMonitorHistory
Get the alert history for a specific monitor, including when it fired and resolved.
Inputs
monitorIdstringrequired- The monitor ID. You can find an list of monitors using the `checkMonitors()` tool.
endTimestring- End time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now".default
now startTimestring- Start time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now-30m".default
now-30m
axiommcp_get_saved_queriesList all saved APL queries in the Axiom workspace.Read-onlyGetSavedQueries
List all saved APL queries in the Axiom workspace.
Inputs
This tool takes no inputs.
axiommcp_list_dashboardsList all dashboards in the Axiom workspace.Read-onlyListDashboards
List all dashboards in the Axiom workspace.
Inputs
This tool takes no inputs.
axiommcp_list_datasetsList all available datasets.Read-onlyListDatasets
List all available datasets. The "kind" column determines which tools to use next: - events / otel.traces / other: use queryDataset() (APL) and getDatasetFields() - otel-metrics-v1: start with listMetrics() to inspect metric definitions and choose query strategy, then use queryMetrics(), searchMetrics(), listMetricTags(), and getMetricTagValues() — do NOT use queryDataset() or getDatasetFields() for these
Inputs
This tool takes no inputs.
axiommcp_list_metricsList all available metric names with metadata (type, temporality, and unit) in a metrics dataset (kind otel-metrics-v1) over a given time range, defaulting to the last 30 minutes.Read-onlyListMetrics
List all available metric names with metadata (type, temporality, and unit) in a metrics dataset (kind otel-metrics-v1) over a given time range, defaulting to the last 30 minutes. Start here when query semantics matter.
Inputs
datasetNamestringrequired- The dataset name. You can find an list of datasets using the `listDatasets()` tool.
endTimestring- End time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now".default
now startTimestring- Start time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now-30m".default
now-30m
axiommcp_list_notifiersList all notifiers (notification channels such as email, Slack, PagerDuty) configured in the workspace.Read-onlyListNotifiers
List all notifiers (notification channels such as email, Slack, PagerDuty) configured in the workspace.
Inputs
This tool takes no inputs.
axiommcp_query_datasetQuery Axiom datasets using Axiom Processing Language (APL).Read-onlyQueryDataset
Query Axiom datasets using Axiom Processing Language (APL). Use for events, otel.traces, and other non-metrics datasets. Returns query results including matching events.
Inputs
aplstringrequired- The APL query to execute.
endTimestring- End time for the query (ISO 8601 or 'now').
startTimestring- Start time for the query (ISO 8601 or relative like '-1h').
axiommcp_query_metricsQuery OTel metrics from Axiom using MPL (Metrics Processing Language), not APL, over a given time range (defaults to the last 30 minutes).Read-onlyQueryMetrics
Query OTel metrics from Axiom using MPL (Metrics Processing Language), not APL, over a given time range (defaults to the last 30 minutes). Use for otel-metrics-v1 datasets.
Inputs
datasetNamestringrequired- The dataset name. You can find an list of datasets using the `listDatasets()` tool.
mplstringrequired- The metrics query string. Format: <dataset>:<metric> | <operations>
endTimestring- End time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now".default
now startTimestring- Start time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now-30m".default
now-30m
axiommcp_search_metricsSearch tag values across all metrics in a dataset (kind otel-metrics-v1) for a specific entity name (a service, host, or region) and return the metric names associated with it, along with type, temporality, and unit metadata.Read-onlySearchMetrics
Search tag values across all metrics in a dataset (kind otel-metrics-v1) for a specific entity name (a service, host, or region) and return the metric names associated with it, along with type, temporality, and unit metadata. Use a time window of at least 3 hours, since recently-ingested data can take up to 2 hours to become searchable.
Inputs
datasetNamestringrequired- The dataset name. You can find an list of datasets using the `listDatasets()` tool.
valuestringrequired- The entity name to search for across all tag values (e.g. a service name "checkout-service", a host "prod-worker-1", a region "us-east-1"). The search matches this exact string against tag values -- use the canonical name as it appears in your infrastructure.
endTimestring- End time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now".default
now startTimestring- Start time for the query range. A fixed (RFC3339) or relative (now, now-5m) time value. Defaults to "now-30m".default
now-30m
axiommcp_create_dashboardCreate a new dashboard in the Axiom workspace from a full dashboard JSON document.WriteCreateDashboard
Create a new dashboard in the Axiom workspace from a full dashboard JSON document. The document must include name, owner, charts, layout, refreshTime, schemaVersion, and the dashboard time window; sections are optional.
Inputs
dashboardJsonstringrequired- The full dashboard document as a JSON string. Include name, owner, charts (array), layout (array), refreshTime (15, 60, or 300), schemaVersion (2), timeWindowStart, and timeWindowEnd. Optional: Add sections as an ordered array of {id, title, defaultCollapsed?}. Use a unique UUID for each section id. Assign charts with chart.sectionId. Omit sectionId for ungrouped charts and all SmartFilter charts.
messagestring- Optional audit/change note for this operation.
uidstring- Optional custom UID for the dashboard. If omitted, the server generates one.
axiommcp_create_monitorCreate a new Axiom monitor using a JSON payload for Threshold, MatchEvent, or AnomalyDetection.WriteCreateMonitor
Create a new Axiom monitor using a JSON payload for Threshold, MatchEvent, or AnomalyDetection. Provide name, type, intervalMinutes, rangeMinutes, notifierIds, and at least one of aplQuery or mplQuery.
Inputs
monitorJsonstringrequired- The full monitor configuration as a JSON string. Must include name, type, intervalMinutes, rangeMinutes, and at least one of aplQuery or mplQuery. Include notifierIds to set notifiers; omit notifierIds during update to keep existing notifiers.
axiommcp_create_notifierCreate a new Axiom notifier using a JSON payload.WriteCreateNotifier
Create a new Axiom notifier using a JSON payload. The payload must include name and properties; configure one notification channel such as email, slack, webhook, customWebhook, pagerduty, opsgenie, discord, discordWebhook, or microsoftTeams. For custom webhooks, use properties.customWebhook with required url and body, plus optional headers and secretHeaders; body supports Go-template variables such as .Action, .MonitorID, .Body, .Title, and .Value.
Inputs
notifierJsonstringrequired- The full notifier configuration as a JSON string. Must include name and properties. Configure one channel inside properties, such as email, slack, webhook, customWebhook, pagerduty, opsgenie, discord, discordWebhook, or microsoftTeams. For customWebhook, include required url and body, plus optional headers and secretHeaders; body supports Go-template variables such as .Action, .MonitorID, .Body, .Title, and .Value.
axiommcp_send_feedbackShare feedback about the Axiom MCP server experience, such as a misleading tool description, a confusing result or error message, a missing capability, or praise for something that worked well.WriteSendFeedback
Share feedback about the Axiom MCP server experience, such as a misleading tool description, a confusing result or error message, a missing capability, or praise for something that worked well. Never include sensitive information (log or query contents, dataset values, credentials, tokens, or personal data).
Inputs
categorystringrequired- The kind of feedback: tool-description (misleading/unclear description), tool-result (confusing or unhelpful output), error-message (error did not help recovery), missing-capability (something you needed does not exist), performance (slow or resource-heavy), praise (something worked well), or other.one of
tool-descriptiontool-resulterror-messagemissing-capabilityperformancepraiseother feedbackstringrequired- The feedback itself. Keep it generic and actionable. NEVER include sensitive information: no log or query contents, dataset values, credentials, tokens, personal data, or anything from the user's environment.
toolNamestring- Optional: the name of the MCP tool the feedback is about, e.g. queryDataset.
axiommcp_update_dashboardUpdate an existing dashboard by UID with a full replacement dashboard JSON document (not just its name or description).WriteUpdateDashboard
Update an existing dashboard by UID with a full replacement dashboard JSON document (not just its name or description). Supports optimistic concurrency via the version and overwrite parameters.
- Idempotent
Inputs
dashboardJsonstringrequired- The full dashboard document as a JSON string. Include name, owner, charts (array), layout (array), refreshTime (15, 60, or 300), schemaVersion (2), timeWindowStart, and timeWindowEnd. Optional: Add sections as an ordered array of {id, title, defaultCollapsed?}. Use a unique UUID for each section id. Assign charts with chart.sectionId. Omit sectionId for ungrouped charts and all SmartFilter charts.
dashboardUidstringrequired- The dashboard UID (stable external identifier). You can find UIDs using the `listDashboards()` tool.
messagestring- Optional audit/change note for this operation.
overwriteboolean- When true (default), bypasses version checks and applies last-write-wins. When false, the version parameter is required.default
true versionnumber- The current dashboard version number. Required when overwrite is false. Get this from exportDashboard().
axiommcp_update_dashboard_chartPatch a single chart in an existing dashboard by chart ID using a JSON merge-patch document, rather than individual chart fields.WriteUpdateDashboardChart
Patch a single chart in an existing dashboard by chart ID using a JSON merge-patch document, rather than individual chart fields. Supports optimistic concurrency via the version and overwrite parameters.
- Idempotent
Inputs
chartIdstringrequired- The chart ID inside the dashboard charts array.
chartPatchJsonstringrequired- A JSON merge-patch object for a single dashboard chart. Include only fields to change. Set sectionId to an existing section UUID to move the chart into that section, or set sectionId to null to make it ungrouped. Keep SmartFilter charts ungrouped. If id is present, it matches chartId.
dashboardUidstringrequired- The dashboard UID (stable external identifier). You can find UIDs using the `listDashboards()` tool.
messagestring- Optional audit/change note for this operation.
overwriteboolean- When true (default), bypasses version checks and applies last-write-wins. When false, the version parameter is required.default
true versionnumber- The current dashboard version number. Required when overwrite is false. Get this from exportDashboard().
axiommcp_update_monitorUpdate an existing Axiom monitor by ID using a full monitor JSON payload.WriteUpdateMonitor
Update an existing Axiom monitor by ID using a full monitor JSON payload. Omit notifierIds to keep the monitor's existing notifiers, or set notifierIds to [] to remove them. Use checkMonitors() to find monitor IDs before updating.
- Idempotent
Inputs
monitorIdstringrequired- The monitor ID. You can find an list of monitors using the `checkMonitors()` tool.
monitorJsonstringrequired- The full monitor configuration as a JSON string. Must include name, type, intervalMinutes, rangeMinutes, and at least one of aplQuery or mplQuery. Include notifierIds to set notifiers; omit notifierIds during update to keep existing notifiers.
axiommcp_update_notifierUpdate an existing notifier by ID using a full notifier JSON payload.WriteUpdateNotifier
Update an existing notifier by ID using a full notifier JSON payload. The payload must include name and properties; configure one channel inside properties.
- Idempotent
Inputs
notifierIdstringrequired- The notifier ID. You can find notifier IDs using the `listNotifiers()` tool.
notifierJsonstringrequired- The full notifier configuration as a JSON string. Must include name and properties. Configure one channel inside properties, such as email, slack, webhook, customWebhook, pagerduty, opsgenie, discord, discordWebhook, or microsoftTeams. For customWebhook, include required url and body, plus optional headers and secretHeaders; body supports Go-template variables such as .Action, .MonitorID, .Body, .Title, and .Value.
axiommcp_delete_dashboardDelete a dashboard by ID.DestructiveDeleteDashboard
Delete a dashboard by ID.
Inputs
dashboardUidstringrequired- The dashboard UID (stable external identifier). You can find UIDs using the `listDashboards()` tool.
axiommcp_delete_monitorDelete a monitor by ID.DestructiveDeleteMonitor
Delete a monitor by ID.
Inputs
monitorIdstringrequired- The monitor ID. You can find an list of monitors using the `checkMonitors()` tool.
axiommcp_delete_notifierDelete a notifier by ID.DestructiveDeleteNotifier
Delete a notifier by ID.
Inputs
notifierIdstringrequired- The notifier ID. You can find notifier IDs using the `listNotifiers()` tool.
No tools match.