> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the AppSignal MCP server

The AppSignal MCP connector routes your AI agent's tool calls to AppSignal's own MCP server through Scalekit. Each user signs in to AppSignal once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 25 tools.

**Authentication:** OAuth2.1/DCR
**Categories:** Monitoring, Developer Tools
**Tools:** 25: 15 read, 8 write, 2 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=APPSIGNALMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the AppSignal MCP connection

   In **AgentKit > Connections**, create an AppSignal MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for AppSignal MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   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.actions

   const connector = 'appsignalmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize AppSignal MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'appsignalmcp_get_applications',
     toolInput: { context: 'YOUR_CONTEXT' },
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_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.actions

   connection_name = "appsignalmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize AppSignal MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={"context":"YOUR_CONTEXT"},
       tool_name="appsignalmcp_get_applications",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'appsignalmcp_discover_metrics',
  toolInput: {
    app_environment: 'production',
    app_name: 'AppSignal',
    context: '<context>',
  },
  connector: 'appsignalmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="appsignalmcp_discover_metrics",
    tool_input={
        "app_environment": "production",
        "app_name": "AppSignal",
        "context": "<context>",
    },
    connection_name="appsignalmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `appsignalmcp_discover_metrics`

Discover Metrics · Read-only

Retrieve metric categories and dashboards, the metrics available within a specific category, or the visuals configured on a specific dashboard.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment (e.g. "production", "staging"). Not case-sensitive.
- `app_name` (`string`, required): Name of the AppSignal application (e.g. "AppSignal" or "Project Name")
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `metric_subject` (`string`, optional): What to inspect. One of:
- a metric category name (e.g. "performance_metrics", "host_metrics", "custom_metrics")
- "dashboard:<dashboard_id>" to list the visuals on a specific dashboard
Omit this argument to get the overview of all categories and dashboards.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_anomaly_incidents`

Get Anomaly Incidents · Read-only

List AppSignal anomaly detection alerts, filtered by state or trigger ID, with page/per_page pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to list alerts from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found
- `app_name` (`string`, required): Name of the AppSignal application to list alerts from (e.g. "AppSignal" or "Project Name")
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `page` (`integer`, optional): Page number for pagination (1-based, defaults to 1). Each page shows 50 alerts. Use this to view beyond the first page
- `per_page` (`integer`, optional): Number of alerts per page (defaults to 50). Use this to request fewer results per page
- `state` (`string`, optional): Optional state to filter by. Valid values: "open", "closed", "warmup", "cooldown", "archived". Shows all states if not specified
- `trigger_id` (`string`, optional): Optional trigger ID to filter incidents by. Only returns incidents generated by this specific trigger. Use get_triggers to find trigger IDs.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_app_resources`

Get App Resources · Read-only

Discover available resources in an AppSignal application: users, notifiers, namespaces, dashboards, log sources, log views, log line actions, deploy markers, and uptime monitors.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to get resources from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to get resources from (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `deploy_marker_namespace` (`string`, optional): Optional filter for the "deploy_markers" section: only return deploys for this namespace (e.g. "web", "background"). Ignored when deploy_markers is not requested.
- `deploy_marker_revision` (`string`, optional): Optional filter for the "deploy_markers" section: only return deploys whose revision starts with this value. A short revision (e.g. "abc1234") from a previous call works. Ignored when deploy_markers is not requested.
- `sections` (`array`, optional): Optional list of resource sections to retrieve. Valid values: "users", "notifiers", "namespaces", "dashboards", "log_sources", "log_views", "log_line_actions", "deploy_markers", "uptime_monitors". If not specified, returns all sections.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_applications`

Get Applications · Read-only

Retrieve all AppSignal applications the user has access to.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task

Example input: `{"context":"<context>"}`

### `appsignalmcp_get_exception_incidents`

Get Exception Incidents · Read-only

List and search AppSignal exceptions and errors, filtered by date range, states, namespaces, or deploy revision, with page/per_page pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to list incidents from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found
- `app_name` (`string`, required): Name of the AppSignal application to list incidents from (e.g. "AppSignal" or "Project Name")
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `end` (`string`, optional): End of time range to search (ISO 8601 format, e.g. "2023-07-07T23:59:59Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time like "2026-06-26T20") are rejected. Required if start is provided
- `namespaces` (`string`, optional): Optional comma-separated list of namespaces to filter by (e.g. "web,background"). Shows all namespaces if not specified
- `page` (`integer`, optional): Page number for pagination (1-based, defaults to 1). Each page shows 50 incidents. Use this to view beyond the first page
- `per_page` (`integer`, optional): Number of incidents per page (defaults to 50). Use this to request fewer results per page
- `revision` (`string`, optional): Optional deploy revision to scope incidents to a specific deploy. Use "last" to filter by the most recent deploy, or pass a revision hash (e.g. a git SHA). A short revision prefix works too (matched case-insensitively); if it matches more than one deploy, the most recent wins. Use get_app_resources(sections: ["deploy_markers"]) to list available revisions. Ignored when start/end (timeframe) is provided.
- `start` (`string`, optional): Start of time range to search (ISO 8601 format, e.g. "2023-07-01T00:00:00Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time like "2026-06-26T20") are rejected. If omitted, shows incidents since last deploy
- `states` (`string`, optional): Optional comma-separated list of states to filter by. Valid values: "open", "closed", "wip" (work in progress). Shows all states if not specified

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_incident`

Get Incident · Read-only

Get detailed information about a specific AppSignal incident by incident number.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment where the incident occurred (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application where the incident occurred (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `number` (`number`, required): The incident number to retrieve. This is the numeric ID shown in AppSignal URLs and API responses.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","number":1}`

### `appsignalmcp_get_log_lines`

Get Log Lines · Read-only

Query log lines for an AppSignal application using AppSignal's expression query syntax.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to query logs from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to query logs from (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `query` (`string`, required): Expression query to filter log lines. Can be an empty string to retrieve all logs. Supports: =, !=, :, !:, >, <, >=, <=, AND, OR, parentheses. Examples: "severity=error", "message:timeout AND hostname=web-1", ""
- `end` (`string`, optional): End of time range (ISO 8601 format, e.g. "2025-01-01T11:00:00Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time like "2026-06-26T20") are rejected. Defaults to now.
- `limit` (`integer`, optional): Maximum number of log lines to return (1-100, default 50).
- `order` (`string`, optional): Sort order for results. "desc" returns newest first (default), "asc" returns oldest first. One of: `asc`, `desc`.
- `source_ids` (`array`, optional): IDs of log sources to query. If omitted, all sources for the application are queried. Use get_app_resources(sections: ["log_sources"]) to find available source IDs.
- `start` (`string`, optional): Start of time range (ISO 8601 format, e.g. "2025-01-01T10:00:00Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time like "2026-06-26T20") are rejected. Defaults to one query window ago. Must be within your account's query window of end.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","query":"<query>"}`

### `appsignalmcp_get_metric_names`

Get Metric Names · Read-only

Retrieve all metric names for the given AppSignal application.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to get metric names from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to get metric names from (e.g. "AppSignal" or "Project Name").
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_metric_tags`

Get Metric Tags · Read-only

Retrieve all tag combinations and metric type for a specific metric.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment containing the metric (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the metric (e.g. "AppSignal" or "Project Name").
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `metric_name` (`string`, required): Name of the metric to get tag combinations for. Use get_metric_names to find available metrics.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","metric_name":"<metric_name>"}`

### `appsignalmcp_get_metrics_list`

Get Metrics List · Read-only

Retrieve aggregated metric data for a given time range, metric, type, and tag combinations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment containing the metric (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the metric (e.g. "AppSignal" or "Project Name").
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `end` (`string`, required): End of time range to search (ISO 8601 format, e.g. "2023-07-07T23:59:59Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time) are rejected.
- `metric_name` (`string`, required): Name of the metric to get aggregated metric data for. Use get_metric_names to find available metrics.
- `metric_type` (`string`, required): The metric type/field to query. Valid values: count, counter, gauge, mean, p90, p95. Use get_metric_tags to find the available type for your metric. One of: `count`, `counter`, `gauge`, `mean`, `p90`, `p95`.
- `start` (`string`, required): Start of time range to search (ISO 8601 format, e.g. "2023-07-01T00:00:00Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time) are rejected.
- `tags` (`array`, optional): Tag combinations to filter metrics. Each tag has a 'key' and 'value'. You can use wildcards '*' for partial matches on values. Use get_metric_tags to find valid combinations for your metric.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","end":"2023-07-07T23:59:59Z","metric_name":"<metric_name>","metric_type":"count","start":"2023-07-01T00:00:00Z"}`

### `appsignalmcp_get_metrics_timeseries`

Get Metrics Timeseries · Read-only

Retrieve timeseries data for a given time range, metric, type, and tag combinations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment containing the metric (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the metric (e.g. "AppSignal" or "Project Name").
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `end` (`string`, required): End of time range to search (ISO 8601 format, e.g. "2023-07-07T23:59:59Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time) are rejected.
- `metric_name` (`string`, required): Name of the metric to get timeseries data for. Use get_metric_names to find available metrics.
- `metric_type` (`string`, required): The metric type/field to query. Valid values: count, counter, gauge, mean, p90, p95. Use get_metric_tags to find the available type for your metric. One of: `count`, `counter`, `gauge`, `mean`, `p90`, `p95`.
- `start` (`string`, required): Start of time range to search (ISO 8601 format, e.g. "2023-07-01T00:00:00Z"). Must be a complete date-time including the time of day; partial values (a date only, or a truncated time) are rejected.
- `tags` (`array`, optional): Tag combinations to filter metrics. Each tag has a 'key' and 'value'. You can use wildcards '*' for partial matches on values. Use get_metric_tags to find valid combinations for your metric.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","end":"2023-07-07T23:59:59Z","metric_name":"<metric_name>","metric_type":"count","start":"2023-07-01T00:00:00Z"}`

### `appsignalmcp_get_more_tools`

Get More Tools · Read-only

Check for additional tools whenever a task might benefit from specialized capabilities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `description` (`string`, required): A description of your goal and what kind of tool would help accomplish it.

Example input: `{"context":"<context>","description":"<description>"}`

### `appsignalmcp_get_performance`

Get Performance · Read-only

Performance overview: sample-based performance incidents and slow actions from traces.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to query (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `end` (`string`, optional): End of time range (ISO 8601 format, e.g. "2025-01-07T23:59:59Z"). Must be a complete date-time including the time of day. Required if start is provided.
- `namespaces` (`string`, optional): Optional comma-separated list of namespaces to filter by (e.g. "web,background"). Shows all namespaces if not specified. Applies to both performance incidents and OTel actions.
- `page` (`integer`, optional): Page number for pagination (1-based, defaults to 1). Each page shows 50 incidents. Paginates sample-based incidents only; OTel actions are returned as a complete ranked list.
- `per_page` (`integer`, optional): Number of incidents per page (defaults to 50). Use this to request fewer results per page. Paginates sample-based incidents only.
- `revision` (`string`, optional): Optional deploy revision to scope incidents to a specific deploy. Use "last" for the most recent deploy, or pass a revision hash. Only applies to sample-based incidents. Ignored when start/end is provided.
- `start` (`string`, optional): Start of time range (ISO 8601 format, e.g. "2025-01-01T00:00:00Z"). Must be a complete date-time including the time of day. For sample-based incidents, defaults to the most recent deploy. For OTel actions, defaults to 24 hours ago.
- `states` (`string`, optional): Optional comma-separated list of states to filter by. Valid values: "open", "closed", "wip" (work in progress). Only applies to sample-based performance incidents, ignored for OTel actions.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_traces`

Get Traces · Read-only

Query performance and error traces, inspect span trees, and view span details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment name (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `action_name` (`string`, optional): The action name to find traces for (e.g. "BlogPostsController#index", "Sidekiq::SomeWorker#perform", "SampleTimelineQuery"). Required for performance traces. Not needed for error traces (use digest instead).
- `digest` (`string`, optional): The exception incident digest to find error traces for. Get this value from get_incident or get_exception_incidents. When provided, queries error traces instead of performance traces. Cannot be combined with namespace/action_name.
- `end` (`string`, optional): End of time range (ISO 8601 format, e.g. "2025-01-01T11:00:00Z"). Must be a complete date-time including the time of day. Defaults to now. Performance traces only.
- `include_sensitive` (`boolean`, optional): When true, includes HTTP headers, request parameters, and session data in span detail output. Only applies in span detail mode (requires span_id). Defaults to false.
- `limit` (`integer`, optional): Maximum number of traces to return (1-100, default 25). List mode only.
- `min_duration_ms` (`number`, optional): Minimum trace duration in milliseconds (performance trace list mode only). Only return traces slower than this threshold.
- `namespace` (`string`, optional): The namespace to search in (e.g. "web", "background", "graphql"). Required for performance traces. Not needed for error traces (use digest instead).
- `span_id` (`string`, optional): The span ID to inspect within a trace. Requires trace_id. Returns full span details including tags (e.g. user_id, hostname), span attributes, and timing. Use trace mode first (with trace_id, without span_id) to find span IDs.
- `start` (`string`, optional): Start of time range (ISO 8601 format, e.g. "2025-01-01T10:00:00Z"). Must be a complete date-time including the time of day. Defaults to 24 hours ago. Performance traces only.
- `trace_id` (`string`, optional): The trace ID to inspect. When provided, returns the full span tree for this trace. Combine with span_id to get detailed information about a specific span. Use list mode first (without trace_id) to find trace IDs.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_get_triggers`

Get Triggers · Read-only

List anomaly detection triggers for an AppSignal application.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to list triggers from (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to list triggers from (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `kind` (`string`, optional): Optional trigger kind to filter by (e.g. 'Advanced', 'HostCPUUsage', 'Performance'; see manage_trigger's kind enum for the full list of valid values).
- `metric_name` (`string`, optional): Optional metric name to filter triggers by. Only returns triggers monitoring this specific metric.
- `page` (`integer`, optional): Page number for pagination (1-based, defaults to 1). Each page shows 50 triggers.
- `tags` (`array`, optional): Optional tags to filter triggers by. Only returns triggers with matching tag filters.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_create_dashboard_visual`

Create Dashboard Visual · Write

Create a visual component (timeseries or Big Number tile) on an AppSignal dashboard.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `app_environment` (`string`, required): Environment containing the dashboard (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the dashboard (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `dashboard_id` (`string`, required): ID of the dashboard where you want to add the visual. Use manage_dashboard to create dashboards if needed.
- `title` (`string`, required): Title for the visual component. This will be displayed as the chart title and should clearly describe what metrics are being shown.
- `description` (`string`, optional): Optional description providing additional context about what the visual shows.
- `display` (`string`, optional): Timeseries visuals only. Display type: "line" (default), "area", or "area_relative". One of: `line`, `area`, `area_relative`.
- `draw_null_as_zero` (`boolean`, optional): Timeseries visuals only. Whether to draw null/missing data points as zero values. Default: false (gaps will be shown for missing data).
- `format` (`string`, optional): Format for displaying values. One of: number, percent, duration, throughput, size. One of: `number`, `percent`, `duration`, `throughput`, `size`.
- `format_input` (`string`, optional): Unit of the incoming value. Only applies when format is "size", and is ignored for every other format. One of: bit, byte, kilobit, kilobyte, megabyte. One of: `bit`, `byte`, `kilobit`, `kilobyte`, `megabyte`.
- `line_label` (`string`, optional): Timeseries visuals only. Customizable label for lines in the chart. Supports replacements: %name%, %field%, %tag% (where tag is the tag name). Defaults to %name% if not specified.
- `metric` (`object`, optional): Big Number (type: "number") visuals only. Single metric to display. Requires: name (the metric name), field (one of mean, p90, p95, count, gauge, counter), aggregate (one of max, min, avg, sum, first, last), and optional tags. Required when type is "number".
- `metrics` (`array`, optional): Timeseries visuals only. Array of metrics to display. Each metric requires: name (the metric name), fields (array of field aggregations: mean, p90, p95, count, gauge, counter), and optional tags (tag filters/groupings). Required when type is "timeseries".
- `min_y_axis` (`number`, optional): Timeseries visuals only. Minimum value for the Y-axis. Useful for setting a baseline or zoom level.
- `tags` (`array`, optional): Timeseries visuals only. Global tags applied to every metric in this visual. Individual metric tags will be merged with these.
- `type` (`string`, optional): Visual type. One of: timeseries, number. Defaults to "timeseries". "timeseries": line/area chart with one or more metrics over time (use the `metrics` field). "number": single-value KPI tile with one aggregated metric (use the `metric` field). One of: `timeseries`, `number`.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","dashboard_id":"<dashboard_id>","title":"<title>"}`

### `appsignalmcp_manage_dashboard`

Manage Dashboard · Write

Create or update an AppSignal dashboard (title and description only).

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to create/update the dashboard in (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to create/update the dashboard in (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `title` (`string`, required): Title of the dashboard. This will be displayed as the main heading and should clearly describe the dashboard's purpose.
- `description` (`string`, optional): Optional description of the dashboard's purpose and contents. Use this to provide context about what metrics or data the dashboard shows.
- `id` (`string`, optional): Dashboard ID for updating an existing dashboard. If provided, the tool will update the existing dashboard. If not provided, a new dashboard will be created.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","title":"<title>"}`

### `appsignalmcp_manage_incident_note`

Manage Incident Note · Write

Create or update a note on an AppSignal incident. Supports linking GitHub issues via URL.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment containing the incident (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the incident (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `content` (`string`, required): Content of the note. Markdown formatting is supported. Include a full GitHub issue URL (e.g. https://github.com/owner/repo/issues/123) to automatically link that issue to the incident when GitHub is configured.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `number` (`number`, required): The incident number to add or update a note on. This is the numeric ID shown in AppSignal URLs and API responses.
- `id` (`string`, optional): Optional id of an existing note to update. When provided, the note's content is replaced instead of creating a new note. You can only edit notes you authored.

Example input: `{"app_environment":"production","app_name":"AppSignal","content":"<content>","context":"<context>","number":1}`

### `appsignalmcp_manage_log_line_action`

Manage Log Line Action · Write

Create or update a log line action (trigger, filter, or metrics type).

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment name. Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application. Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `action_type` (`string`, optional): Type of action. Required when creating a new action. Cannot be changed on update. One of: `trigger`, `filter`, `metrics`.
- `id` (`string`, optional): ID of an existing log line action to update. If provided, updates the existing action. If not provided, creates a new action.
- `log_line_metrics` (`array`, optional): Metric definitions for "metrics" type actions. Required when creating a metrics action. When updating, replaces all existing metric definitions.
- `name` (`string`, optional): Name of the log line action. Required when creating a new action.
- `query` (`string`, optional): Query expression to match against log lines. Required when creating a new action.
- `source_ids` (`array`, optional): List of log source IDs this action applies to. If empty or not provided, the action applies to all log sources.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_manage_trigger`

Manage Trigger · Write

Create or update an anomaly detection trigger to monitor a metric threshold. Triggers are immutable: updating one archives the old trigger and creates a new one, so all fields must be provided on both create and update.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment to create/update the trigger in (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application to create/update the trigger in (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `comparison_operator` (`string`, required): The comparison operator for the threshold condition. One of: `<`, `>`, `<=`, `>=`, `==`, `!=`.
- `condition_value` (`number`, required): The threshold value to compare against. For example, 500.0 for "response time > 500ms" or 80.0 for "disk usage > 80%".
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `cooldown_duration` (`integer`, required): Number of minutes the condition must no longer be met before an alert is closed. Use 0 for immediate closing.
- `field` (`string`, required): The metric field to compare against. One of: `gauge`, `mean`, `p90`, `p95`, `counter`, `count`.
- `kind` (`string`, required): The trigger kind/classification. Use "Advanced" for custom metrics. One of: `Advanced`, `HostCPUUsage`, `HostDiskIO`, `HostDiskUsage`, `HostLoadAverage`, `HostMemoryUsage`, `HostNetworkTraffic`, `HostSwapUsage`, `UptimeMonitor`, `UptimeMonitorSslExpiration`, `QueueTime`, `Performance`, `Throughput`, `ExceptionRate`, `ExceptionCount`, `TracePerformance`, `TracePerformanceAction`, `TraceThroughput`, `TraceErrorRate`, `TraceErrorCount`.
- `metric_name` (`string`, required): The metric this trigger monitors. Use get_metric_names() to discover available metrics for the application.
- `warmup_duration` (`integer`, required): Number of minutes the condition must be met before an alert is opened. Use 0 for immediate alerting, higher values to avoid false positives.
- `dashboard_id` (`string`, optional): Dashboard ID to link in notifications.
- `description` (`string`, optional): Description of what this trigger monitors and what to do when it fires.
- `format` (`string`, optional): The data format of the metric (e.g. "duration", "size", "number", "percent").
- `format_input` (`string`, optional): The input size for the "size" format (e.g. "kilobyte", "megabyte").
- `id` (`string`, optional): ID of an existing trigger to update. If provided, the existing trigger will be archived and a new one created with the same version chain. If not provided, a new trigger is created.
- `name` (`string`, optional): Display name for the trigger. If not provided, the metric name is used.
- `no_match_is_zero` (`boolean`, optional): If true, treat missing metric data as 0. Useful for counters that may not report when there's no activity. Defaults to false.
- `notifier_ids` (`array`, optional): List of notifier IDs to send alerts to. Defaults to empty list if not provided.
- `tags` (`array`, optional): Tag filters to scope which metrics are included. Values support wildcards (*).

Example input: `{"app_environment":"production","app_name":"AppSignal","comparison_operator":"<","condition_value":1,"context":"<context>","cooldown_duration":1,"field":"gauge","kind":"Advanced","metric_name":"<metric_name>","warmup_duration":1}`

### `appsignalmcp_reorder_log_line_actions`

Reorder Log Line Actions · Write

Reorder log line actions to change their execution order during log ingestion.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `action_ids` (`array`, required): Ordered list of log line action IDs defining the new execution order.
- `app_environment` (`string`, required): The environment of the AppSignal app (e.g. production, staging).
- `app_name` (`string`, required): The name of the AppSignal app.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task

Example input: `{"action_ids":[],"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_update_dashboard_visual`

Update Dashboard Visual · Write

Update a visual component on an AppSignal dashboard.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_environment` (`string`, required): Environment containing the visual (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application containing the visual (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `visual_id` (`string`, required): ID of the visual component to update. You can find visual IDs from dashboard listings (discover_metrics) or create responses.
- `description` (`string`, optional): New description. If not provided, the current description is kept. Set to an empty string to remove the description.
- `display` (`string`, optional): Timeseries visuals only. Display type: "line", "area", or "area_relative". If not provided, the current display type is kept. One of: `line`, `area`, `area_relative`.
- `draw_null_as_zero` (`boolean`, optional): Timeseries visuals only. Whether to draw null/missing data points as zero values. If not provided, current setting is kept.
- `format` (`string`, optional): Format for displaying values. One of: number, percent, duration, throughput, size. If not provided, the current format is kept. One of: `number`, `percent`, `duration`, `throughput`, `size`.
- `format_input` (`string`, optional): Unit of the incoming value. Only applies when format is "size", and is cleared for every other format. One of: bit, byte, kilobit, kilobyte, megabyte. If not provided, the current format_input is kept. One of: `bit`, `byte`, `kilobit`, `kilobyte`, `megabyte`.
- `line_label` (`string`, optional): Timeseries visuals only. Customizable label for lines in the chart. Supports replacements: %name%, %field%, %tag%. If not provided, current line_label is kept.
- `metric` (`object`, optional): Big Number (type: "number") visuals only. Replaces the entire metric definition. If not provided, the existing metric is kept.
- `metrics` (`array`, optional): Timeseries visuals only. Replaces the entire array of metrics. If not provided, existing metrics are kept.
- `min_y_axis` (`number`, optional): Timeseries visuals only. Minimum value for the Y-axis. If not provided, current min_y_axis is kept.
- `tags` (`array`, optional): Timeseries visuals only. Global tags applied to every metric in this visual. If provided, these replace existing global tags.
- `title` (`string`, optional): New title. If not provided, the current title is kept.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","visual_id":"<visual_id>"}`

### `appsignalmcp_update_incidents`

Update Incidents · Write

Bulk update AppSignal incidents: change state, severity, assign or unassign team members.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `app_environment` (`string`, required): Environment containing the incidents (e.g. "production", "staging"). Not case-sensitive. Closest matches are suggested if not found. Common values are "production", "staging", "development".
- `app_name` (`string`, required): Name of the AppSignal application containing the incidents (e.g. "AppSignal" or "Project Name"). Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `assign_users` (`array`, optional): List of user IDs to assign as handlers for these incidents. These users must be members of the application.
- `incidents` (`array`, optional): List of incident numbers to update. These are the numeric IDs shown in the AppSignal UI and incident lists.
- `severity` (`string`, optional): New severity level to set for all listed incidents. One of: `untriaged`, `critical`, `high`, `low`, `none`, `informational`.
- `state` (`string`, optional): New state to set for all listed incidents. One of: `open`, `closed`, `wip`.
- `unassign_users` (`array`, optional): List of user IDs to remove as handlers from these incidents. Only removes the listed users, others remain assigned.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>"}`

### `appsignalmcp_archive_trigger`

Archive Trigger · Destructive

Archive an anomaly detection trigger by providing the trigger ID. This closes all associated alerts and incidents.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `app_environment` (`string`, required): Environment name. Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application. Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `id` (`string`, required): ID of the trigger to archive. Use get_triggers() to find trigger IDs.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","id":"<id>"}`

### `appsignalmcp_delete_log_line_action`

Delete Log Line Action · Destructive

Delete a log line action by providing the action ID.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `app_environment` (`string`, required): Environment name. Not case-sensitive. Closest matches are suggested if not found.
- `app_name` (`string`, required): Name of the AppSignal application. Not case-sensitive.
- `context` (`string`, required): Describe why you are calling this tool and how it fits into your overall task
- `id` (`string`, required): ID of the log line action to delete. Use get_app_resources(sections: ["log_line_actions"]) to find action IDs.

Example input: `{"app_environment":"production","app_name":"AppSignal","context":"<context>","id":"<id>"}`

## Related

Other Monitoring connectors ([all 22](/agentkit/connectors/?category=monitoring)):

- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools
- [PagerDuty](/agentkit/connectors/pagerduty/): Scalekit connector, OAuth, 71 tools
- [Agency Analytics MCP server](/agentkit/connectors/agencyanalyticsmcp/): Vendor MCP, OAuth, 35 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
