> **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 Grafana

The Grafana connector lets your AI agent act in each user's Grafana account. Each user connects their own Grafana access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 36 tools.

**Authentication:** Bearer Token
**Categories:** Monitoring, Developer Tools
**Tools:** 36: 28 read, 8 write, 0 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=GRAFANA)

## 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 Grafana connection

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

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 = 'grafana'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Grafana:', 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: 'grafana_current_user_get',
     toolInput: {},
   })
   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 = "grafana"
   identifier = "user_123"

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

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

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Grafana credentials there. 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: 'grafana_alert_group_list',
  toolInput: {},
  connector: 'grafana',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="grafana_alert_group_list",
    tool_input={},
    connection_name="grafana",
    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.

### `grafana_alert_group_list`

List Alert Groups · Read-only

List Grafana Alertmanager alerts grouped the way notification policies group them.
Returns an array of groups, each with its group labels, receiver and the alerts in it.
Use grafana_alert_group_list to see alerts as they are batched into notifications. Use grafana_alert_list for a flat list of alerts.

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

Inputs:

- `active` (`boolean`, optional): Include active alerts. Defaults to true. Default: `true`.
- `filter` (`array`, optional): Label matchers to filter alerts, each in Prometheus matcher syntax. Example: ["severity=\"critical\"", "team=~\"api|web\""].
- `inhibited` (`boolean`, optional): Include inhibited alerts. Defaults to true. Default: `true`.
- `receiver` (`string`, optional): Regular expression matching the contact point (receiver) name to filter alerts by. Example: oncall-.*.
- `silenced` (`boolean`, optional): Include silenced alerts. Defaults to true. Default: `true`.

Example input: `{}`

### `grafana_alert_list`

List Alerts · Read-only

List alert instances currently held by Grafana's built-in Alertmanager, filtered by state, labels or contact point.
Returns an array of alerts with labels, annotations (such as summary), startsAt, endsAt, status (state, silencedBy, inhibitedBy), receivers and generatorURL.
Use grafana_alert_list to see what is firing right now. Use grafana_alert_group_list for the same alerts grouped by notification policy, and grafana_alert_rule_status_list for rule-level state including pending rules.

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

Inputs:

- `active` (`boolean`, optional): Include active alerts. Defaults to true. Default: `true`.
- `filter` (`array`, optional): Label matchers to filter alerts, each in Prometheus matcher syntax. Example: ["severity=\"critical\"", "team=~\"api|web\""].
- `inhibited` (`boolean`, optional): Include inhibited alerts. Defaults to true. Default: `true`.
- `receiver` (`string`, optional): Regular expression matching the contact point (receiver) name to filter alerts by. Example: oncall-.*.
- `silenced` (`boolean`, optional): Include silenced alerts. Defaults to true. Default: `true`.

Example input: `{}`

### `grafana_alert_rule_get`

Get Alert Rule · Read-only

Get the full definition of one Grafana-managed alert rule by UID.
Returns the rule with its title, condition, queries (data), for duration, labels, annotations, folder and rule group, and notification settings.
Use grafana_alert_rule_get to read how a rule is built. Use grafana_alert_rule_status_list to find rule UIDs and see their current state.

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

Inputs:

- `rule_uid` (`string`, required): UID of the alert rule, from grafana_alert_rule_status_list or the rule's URL in Grafana. Example: ddbhspyaw3k00e.

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

### `grafana_alert_rule_status_list`

List Alert Rule Statuses · Read-only

List Grafana-managed alert rules with their current evaluation state, health and alert instances, grouped by folder and rule group.
Returns data.groups, each with its rules (name, uid, state, health, lastEvaluation, labels, annotations and alerts), plus totals and groupNextToken for paging.
Use grafana_alert_rule_status_list to see which rules are firing, pending or erroring. Use grafana_alert_rule_get for one rule's full definition and grafana_alert_list for the Alertmanager's view of firing alerts.

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

Inputs:

- `dashboard_uid` (`string`, optional): Only return rules linked to this dashboard UID. Example: cIBgcSjkk.
- `folder_uid` (`string`, optional): Only return rules in this folder UID. Example: nErXDvCkzz.
- `group_limit` (`integer`, optional): Maximum number of rule groups to return in this page. Example: 50.
- `group_next_token` (`string`, optional): Pagination token from the previous response's groupNextToken. Example: eyJmIjoibkVyWER2Q2t6eiJ9.
- `health` (`array`, optional): Only return rules with this health: ok, error or nodata. Example: ["error"].
- `limit_alerts` (`integer`, optional): Maximum number of alert instances returned per rule. Example: 10.
- `panel_id` (`integer`, optional): Only return rules linked to this panel ID; requires Dashboard UID. Example: 2.
- `receiver_name` (`string`, optional): Only return rules that notify this contact point. Example: oncall-email.
- `rule_group` (`array`, optional): Only return rules in these rule groups. Example: ["api-alerts"].
- `rule_name_search` (`string`, optional): Case-insensitive substring to match against rule titles. Example: latency.
- `rule_type` (`string`, optional): Only return alerting or recording rules. One of: `alerting`, `recording`.
- `state` (`array`, optional): Only return rules in these states: normal (or inactive), pending, alerting (or firing), nodata, error, recovering. Example: ["firing", "pending"].

Example input: `{}`

### `grafana_annotation_get`

Get Annotation · Read-only

Get one Grafana annotation by ID.
Returns the annotation's id, dashboardUID, panelId, time, timeEnd, text, tags and author.
Use grafana_annotation_get to read a single annotation. Use grafana_annotation_list to search annotations by time, dashboard or tag.

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

Inputs:

- `annotation_id` (`string`, required): ID of the annotation to retrieve, from grafana_annotation_list. Example: 1234.

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

### `grafana_annotation_list`

List Annotations · Read-only

List Grafana annotations, filtered by time range, dashboard, panel, alert rule, user, type or tags.
Returns an array of annotations with id, dashboardUID, panelId, time, timeEnd, text, tags and the user who created them.
Use grafana_annotation_list to find deployment markers, incidents or alert events in a time window. Use grafana_annotation_get for one annotation and grafana_annotation_tag_list to discover tags.

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

Inputs:

- `alert_uid` (`string`, optional): Only return annotations created by the alert rule with this UID. Example: ddbhspyaw3k00e.
- `dashboard_uid` (`string`, optional): Only return annotations on this dashboard UID. Example: cIBgcSjkk.
- `from` (`integer`, optional): Only return annotations after this time, in epoch milliseconds. Example: 1735689600000.
- `limit` (`integer`, optional): Maximum number of annotations to return. Example: 100.
- `match_any` (`boolean`, optional): If true, match annotations with any of the tags; if false, they must have all of them.
- `panel_id` (`integer`, optional): Only return annotations on this panel ID (use with Dashboard UID). Example: 2.
- `tags` (`array`, optional): Only return organization annotations with these tags. Example: ["deploy", "api"].
- `to` (`integer`, optional): Only return annotations before this time, in epoch milliseconds. Example: 1735776000000.
- `type` (`string`, optional): Return only alert annotations (alert) or only user-created annotations (annotation). One of: `alert`, `annotation`.
- `user_uid` (`string`, optional): Only return annotations created by the user with this UID. Example: fdbhrt9dgknpcb.

Example input: `{}`

### `grafana_annotation_tag_list`

List Annotation Tags · Read-only

List the tags used on Grafana annotations, with how often each is used, optionally filtered by text.
Returns result.tags, an array of tag and count pairs.
Use grafana_annotation_tag_list to discover tags before filtering grafana_annotation_list.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of tags to return. Defaults to 100.
- `tag` (`string`, optional): Text to filter tag names by. Example: deploy.

Example input: `{}`

### `grafana_current_user_get`

Get Current User · Read-only

Get the Grafana user or service account that the connection's token authenticates as.
Returns id, uid, login, email, name, orgId, isGrafanaAdmin and theme.
Use grafana_current_user_get to check which identity and organization the connection uses. Use grafana_org_get for organization details.

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

Inputs: none.

Example input: `{}`

### `grafana_dashboard_get`

Get Dashboard · Read-only

Get one Grafana dashboard by UID through the dashboard.grafana.app API.
Returns the Dashboard object: metadata (name, resourceVersion, generation, folder annotation) and spec, the full dashboard JSON with panels, variables and time settings.
Use grafana_dashboard_get to read or copy a dashboard's definition before grafana_dashboard_update. Use grafana_dashboard_search to find the UID first.

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

Inputs:

- `dashboard_uid` (`string`, required): UID of the dashboard to retrieve. In the /apis endpoints this is the object's metadata.name; it is the uid shown in the dashboard URL (/d/<uid>/...) and in grafana_dashboard_search results. Example: cIBgcSjkk.
- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `api_version` (`string`, optional): Version of the dashboard.grafana.app API to call. v1beta1 is served by Grafana 12 and later; v1 is the version shown in the latest Grafana docs. Defaults to v1beta1. One of: `v1beta1`, `v1`. Default: `v1beta1`.

Example input: `{"dashboard_uid":"<dashboard_uid>","namespace":"<namespace>"}`

### `grafana_dashboard_list`

List Dashboards · Read-only

List dashboards in a Grafana namespace through the dashboard.grafana.app API, one page at a time.
Returns a DashboardList with items (each with metadata.name as the dashboard UID, metadata.annotations and the full spec) and metadata.continue for the next page.
Use grafana_dashboard_list to page through all dashboards. Use grafana_dashboard_search to find dashboards by title or tag, and grafana_dashboard_get for a single dashboard.

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

Inputs:

- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `api_version` (`string`, optional): Version of the dashboard.grafana.app API to call. v1beta1 is served by Grafana 12 and later; v1 is the version shown in the latest Grafana docs. Defaults to v1beta1. One of: `v1beta1`, `v1`. Default: `v1beta1`.
- `continue_token` (`string`, optional): Pagination token from the previous response's metadata.continue field. Pass it with the same filters to fetch the next page; omit it for the first page.
- `label_selector` (`string`, optional): Kubernetes-style label selector to filter dashboards by their labels. Example: team=platform.
- `limit` (`integer`, optional): Maximum number of dashboards to return in one page. If more exist, the response's metadata.continue holds a token for the next page. Example: 50.

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

### `grafana_dashboard_search`

Search Dashboards and Folders · Read-only

Search dashboards and folders in Grafana by title, tag, folder or starred status.
Returns a list of hits with uid, title, type (dash-db or dash-folder), url, tags and folder uid/title.
Use grafana_dashboard_search to find dashboards or folders by name or tag. Use grafana_dashboard_list to page through every dashboard in a namespace, and grafana_dashboard_get to read one dashboard's full JSON.

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

Inputs:

- `dashboard_uids` (`array`, optional): Only return dashboards with these UIDs. Example: ["cIBgcSjkk"].
- `folder_uids` (`array`, optional): Only return dashboards inside these folder UIDs. Pass an empty string to search top-level folders. Example: ["nErXDvCkzz"].
- `limit` (`integer`, optional): Maximum number of results per page (max 5000). Example: 100.
- `page` (`integer`, optional): Page number, starting at 1, used with limit as the page size. Example: 2.
- `permission` (`string`, optional): Set to Edit to return only dashboards and folders the caller can edit. Defaults to View. One of: `View`, `Edit`.
- `query` (`string`, optional): Text to match against dashboard and folder titles. Example: api latency.
- `sort` (`string`, optional): Sort order of results: alpha-asc or alpha-desc. Defaults to alpha-asc. One of: `alpha-asc`, `alpha-desc`.
- `starred` (`boolean`, optional): If true, only return dashboards the authenticated user or service account has starred.
- `tag` (`array`, optional): Only return dashboards that have all of these tags. Example: ["production", "api"].
- `type` (`string`, optional): Restrict results to folders (dash-folder) or dashboards (dash-db). Omit to return both. One of: `dash-db`, `dash-folder`.

Example input: `{}`

### `grafana_datasource_get`

Get Data Source · Read-only

Get one Grafana data source by UID.
Returns the data source's uid, name, type, url, access mode, database, jsonData settings and readOnly flag (secrets are never returned).
Use grafana_datasource_get to inspect one data source's configuration. Use grafana_datasource_list to find UIDs and grafana_datasource_health_check to test connectivity.

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

Inputs:

- `datasource_uid` (`string`, required): UID of the data source. Find it with grafana_datasource_list or in the data source's settings URL (/connections/datasources/edit/<uid>). Example: P8E80F9AEF21F6940.

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

### `grafana_datasource_health_check`

Check Data Source Health · Read-only

Run the plugin health check for one Grafana data source, the same check as Save & test in the UI.
Returns a status (OK or ERROR) and a message describing the result.
Use grafana_datasource_health_check to confirm a data source can reach its backend. Use grafana_datasource_get to read its settings.

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

Inputs:

- `datasource_uid` (`string`, required): UID of the data source to check. Example: P8E80F9AEF21F6940.

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

### `grafana_datasource_list`

List Data Sources · Read-only

List all data sources configured in the current Grafana organization.
Returns an array of data sources with uid, name, type (e.g. prometheus, loki), url, access mode and isDefault.
Use grafana_datasource_list to find a data source UID for grafana_datasource_query. Use grafana_datasource_get for one data source's full settings.

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

Inputs: none.

Example input: `{}`

### `grafana_folder_get`

Get Folder · Read-only

Get one Grafana folder by UID through the folder.grafana.app API.
Returns the Folder object: metadata (name, resourceVersion, parent folder annotation) and spec (title, description).
Use grafana_folder_get to read a folder's title and parent. Use grafana_folder_list or grafana_dashboard_search to find folder UIDs.

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

Inputs:

- `folder_uid` (`string`, required): UID of the folder to retrieve (its metadata.name, also shown in the folder URL /dashboards/f/<uid>/). Example: nErXDvCkzz.
- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `api_version` (`string`, optional): Version of the folder.grafana.app API to call. v1 is documented as available in Grafana 12 and later; v1beta1 is the earlier version. Defaults to v1. One of: `v1`, `v1beta1`. Default: `v1`.

Example input: `{"folder_uid":"<folder_uid>","namespace":"<namespace>"}`

### `grafana_folder_list`

List Folders · Read-only

List folders in a Grafana namespace through the folder.grafana.app API, one page at a time.
Returns a FolderList with items (metadata.name as the folder UID, spec.title, parent folder annotation) and metadata.continue for the next page.
Use grafana_folder_list to browse all folders. Use grafana_dashboard_search with type dash-folder to find folders by title, and grafana_folder_get for one folder.

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

Inputs:

- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `api_version` (`string`, optional): Version of the folder.grafana.app API to call. v1 is documented as available in Grafana 12 and later; v1beta1 is the earlier version. Defaults to v1. One of: `v1`, `v1beta1`. Default: `v1`.
- `continue_token` (`string`, optional): Pagination token from the previous response's metadata.continue field. Pass it with the same filters to fetch the next page; omit it for the first page.
- `label_selector` (`string`, optional): Kubernetes-style label selector to filter folders by their labels. Example: team=platform.
- `limit` (`integer`, optional): Maximum number of folders to return in one page. If more exist, the response's metadata.continue holds a token for the next page. Example: 50.

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

### `grafana_library_element_get`

Get Library Panel · Read-only

Get one Grafana library panel by UID.
Returns the element's uid, name, kind, type, description, folderUid, version, model (the panel JSON) and meta such as connectedDashboards.
Use grafana_library_element_get to read a reusable panel's definition. Use grafana_library_element_list to find UIDs.

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

Inputs:

- `library_element_uid` (`string`, required): UID of the library panel, from grafana_library_element_list. Example: V--OrYHnz.

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

### `grafana_library_element_list`

List Library Panels · Read-only

List library panels (reusable panels shared across dashboards) in Grafana, with search, folder filter and paging.
Returns result.elements, each with uid, name, kind, type, description, folderUid and model, plus totalCount, page and perPage.
Use grafana_library_element_list to find reusable panels. Use grafana_library_element_get to read one panel's full model.

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

Inputs:

- `folder_filter_uids` (`string`, optional): Comma-separated folder UIDs to filter by. Example: nErXDvCkzz,abc123.
- `page` (`integer`, optional): Page number, starting at 1. Defaults to 1.
- `per_page` (`integer`, optional): Number of results per page. Defaults to 100.
- `search_string` (`string`, optional): Text matched against library panel names and descriptions. Example: latency.
- `sort_direction` (`string`, optional): Sort by name ascending (alpha-asc) or descending (alpha-desc). One of: `alpha-asc`, `alpha-desc`.
- `type_filter` (`string`, optional): Comma-separated panel types to filter by. Example: timeseries,stat.

Example input: `{}`

### `grafana_org_get`

Get Current Organization · Read-only

Get the Grafana organization the token belongs to.
Returns the organization's id, name and address.
Use grafana_org_get to confirm which organization the connection works in. Use grafana_org_user_list for its members.

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

Inputs: none.

Example input: `{}`

### `grafana_org_user_list`

List Organization Users · Read-only

List users in the current Grafana organization, optionally filtered by text. Requires an org admin token.
Returns an array of users with userId, uid, login, email, name, role (Viewer, Editor or Admin) and lastSeenAt.
Use grafana_org_user_list to look up people and their roles. Use grafana_team_member_list for a team's members.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of users to return. Example: 100.
- `query` (`string`, optional): Text matched against login, email and name. Example: jane.

Example input: `{}`

### `grafana_public_dashboard_list`

List Shared Dashboards · Read-only

List dashboards that are shared externally (public dashboards) in the current Grafana organization.
Returns publicDashboards, each with uid, accessToken, title, dashboardUid, slug and isEnabled, plus paging totals.
Use grafana_public_dashboard_list to audit which dashboards are reachable without login.

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

Inputs: none.

Example input: `{}`

### `grafana_silence_get`

Get Silence · Read-only

Get one silence from Grafana's built-in Alertmanager by ID.
Returns the silence's id, matchers, startsAt, endsAt, createdBy, comment and status.
Use grafana_silence_get to check a single silence. Use grafana_silence_list to find silence IDs.

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

Inputs:

- `silence_id` (`string`, required): ID of the silence, from grafana_silence_list or grafana_silence_create. Example: 7d8c5f0a-1b2c-4d3e-9f8a-0b1c2d3e4f5a.

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

### `grafana_silence_list`

List Silences · Read-only

List silences in Grafana's built-in Alertmanager, optionally filtered by label matchers.
Returns an array of silences with id, matchers, startsAt, endsAt, createdBy, comment and status (active, pending or expired).
Use grafana_silence_list to see which alerts are muted. Use grafana_silence_get for one silence and grafana_silence_create to add one.

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

Inputs:

- `filter` (`array`, optional): Label matchers to filter silences, in Prometheus matcher syntax. Example: ["alertname=\"HighLatency\""].

Example input: `{}`

### `grafana_snapshot_get`

Get Dashboard Snapshot · Read-only

Get one Grafana dashboard snapshot by key, including the frozen dashboard JSON and data.
Returns meta (created, expires, url) and dashboard, the snapshot's dashboard model with embedded data.
Use grafana_snapshot_get to read what a shared snapshot captured. Use grafana_snapshot_list to find snapshot keys.

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

Inputs:

- `snapshot_key` (`string`, required): Key of the snapshot, from grafana_snapshot_list or the snapshot URL (/dashboard/snapshot/<key>). Example: Jt9Qk4PQ3EHqOzw8ZzDpLqB2C0nVt6Zu.

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

### `grafana_snapshot_list`

List Dashboard Snapshots · Read-only

List dashboard snapshots in the current Grafana organization, optionally filtered by name.
Returns an array of snapshots with id, name, key, created, expires and external flags.
Use grafana_snapshot_list to find a snapshot key. Use grafana_snapshot_get to read a snapshot's dashboard data.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of snapshots to return. Defaults to 1000.
- `query` (`string`, optional): Text matched against snapshot names. Example: incident.

Example input: `{}`

### `grafana_team_get`

Get Team · Read-only

Get one Grafana team by ID.
Returns the team's id, uid, name, email, avatarUrl and memberCount.
Use grafana_team_get to read a team's details. Use grafana_team_search to find team IDs and grafana_team_member_list for its members.

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

Inputs:

- `team_id` (`string`, required): Numeric ID of the team, from grafana_team_search. Example: 7.

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

### `grafana_team_member_list`

List Team Members · Read-only

List the members of one Grafana team.
Returns an array of members with userId, login, email, name and their team permission.
Use grafana_team_member_list to see who is on a team. Use grafana_org_user_list for everyone in the organization.
Requires a team ID from grafana_team_search.

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

Inputs:

- `team_id` (`string`, required): Numeric ID of the team, from grafana_team_search. Example: 7.

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

### `grafana_team_search`

Search Teams · Read-only

Search teams in the current Grafana organization by name, with paging.
Returns totalCount, page, perPage and teams, each with id, uid, name, email and memberCount.
Use grafana_team_search to find a team ID. Use grafana_team_get for one team and grafana_team_member_list for its members.

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

Inputs:

- `name` (`string`, optional): Return only the team with exactly this name. Example: Platform.
- `page` (`integer`, optional): Page number, starting at 1. Defaults to 1.
- `perpage` (`integer`, optional): Teams per page. Defaults to 1000. Example: 50.
- `query` (`string`, optional): Return teams whose name contains this text. Example: platform.

Example input: `{}`

### `grafana_annotation_create`

Create Annotation · Write

Create a Grafana annotation (a point or a time region) on a dashboard panel, or an organization-wide annotation when no dashboard is given.
Returns a message and the new annotation's id.
Use grafana_annotation_create to mark deployments, incidents or other events on graphs. Use grafana_annotation_update to change an existing annotation.

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

Inputs:

- `text` (`string`, required): Annotation text shown on hover; may contain HTML links. Example: Deployed api v2.3.1.
- `dashboard_uid` (`string`, optional): UID of the dashboard to attach the annotation to. Leave blank for an organization annotation. Example: cIBgcSjkk.
- `data` (`object`, optional): Optional free-form JSON data stored with the annotation. Example: {"version": "2.3.1"}.
- `panel_id` (`integer`, optional): ID of the panel on that dashboard to attach the annotation to. Example: 2.
- `tags` (`array`, optional): Tags for the annotation. Example: ["deploy", "api"].
- `time` (`integer`, optional): Event time in epoch milliseconds. Defaults to now if omitted. Example: 1735689600000.
- `time_end` (`integer`, optional): End time in epoch milliseconds, which turns the annotation into a region. Example: 1735693200000.

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

### `grafana_annotation_update`

Update Annotation · Write

Update one or more fields of a Grafana annotation: text, tags, time, time end or data. Fields left blank are not changed.
Returns a confirmation message.
Use grafana_annotation_update to correct or extend an existing annotation. Use grafana_annotation_create for a new one.
Requires the annotation ID from grafana_annotation_list.

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

Inputs:

- `annotation_id` (`string`, required): ID of the annotation to update, from grafana_annotation_list. Example: 1234.
- `data` (`object`, optional): New free-form JSON data. Example: {"version": "2.3.2"}.
- `tags` (`array`, optional): New full list of tags; replaces the existing tags. Example: ["deploy", "hotfix"].
- `text` (`string`, optional): New annotation text. Example: Deployed api v2.3.2 (hotfix).
- `time` (`integer`, optional): New event time in epoch milliseconds. Example: 1735689600000.
- `time_end` (`integer`, optional): New end time in epoch milliseconds for a region annotation. Example: 1735693200000.

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

### `grafana_dashboard_create`

Create Dashboard · Write

Create a dashboard in a Grafana namespace through the dashboard.grafana.app API, optionally inside a folder.
Returns the created Dashboard object with metadata.name (the dashboard UID), resourceVersion and spec.
Use grafana_dashboard_create for a new dashboard. Use grafana_dashboard_update to change an existing one.
Requires a folder UID from grafana_folder_list or grafana_dashboard_search to place it in a folder.

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

Inputs:

- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `spec` (`object`, required): Dashboard JSON model: the same JSON you see in Grafana's dashboard settings → JSON Model. It needs a title and usually holds panels, templating, time and schemaVersion; do not include id or uid here (the UID comes from the Dashboard UID input). Example: {"title": "API Latency", "panels": [], "schemaVersion": 41, "time": {"from": "now-6h", "to": "now"}}.
- `api_version` (`string`, optional): Version of the dashboard.grafana.app API to call. v1beta1 is served by Grafana 12 and later; v1 is the version shown in the latest Grafana docs. Defaults to v1beta1. One of: `v1beta1`, `v1`. Default: `v1beta1`.
- `dashboard_uid` (`string`, optional): UID to give the new dashboard (its metadata.name). Up to 40 letters, digits, '-' or '_'. Leave blank to let Grafana generate one with the 'Name Prefix' input or a default prefix. Example: api-latency.
- `folder_uid` (`string`, optional): UID of the folder to create the dashboard in (sets the grafana.app/folder annotation). Leave blank for the root (General) level. Example: nErXDvCkzz.
- `generate_name` (`string`, optional): Prefix for a server-generated UID (metadata.generateName), used only when Dashboard UID is blank. Defaults to 'dash-' if both are blank. Example: api-.

Example input: `{"namespace":"<namespace>","spec":{}}`

### `grafana_dashboard_update`

Update Dashboard · Write

Replace a Grafana dashboard's JSON model through the dashboard.grafana.app API, optionally moving it to another folder and recording a version message.
Returns the updated Dashboard object with the new resourceVersion and generation.
Use grafana_dashboard_update to change an existing dashboard; it replaces the whole spec, so start from grafana_dashboard_get. Use grafana_dashboard_create for a new dashboard.
Requires the dashboard UID and its current JSON from grafana_dashboard_get.

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

Inputs:

- `dashboard_uid` (`string`, required): UID of the dashboard to update. In the /apis endpoints this is the object's metadata.name; it is the uid shown in the dashboard URL (/d/<uid>/...) and in grafana_dashboard_search results. Example: cIBgcSjkk.
- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `spec` (`object`, required): The complete new dashboard JSON model. This replaces the existing spec, so send every panel and setting you want to keep. the same JSON you see in Grafana's dashboard settings → JSON Model. It needs a title and usually holds panels, templating, time and schemaVersion; do not include id or uid here (the UID comes from the Dashboard UID input). Example: {"title": "API Latency", "panels": [], "schemaVersion": 41, "time": {"from": "now-6h", "to": "now"}}.
- `api_version` (`string`, optional): Version of the dashboard.grafana.app API to call. v1beta1 is served by Grafana 12 and later; v1 is the version shown in the latest Grafana docs. Defaults to v1beta1. One of: `v1beta1`, `v1`. Default: `v1beta1`.
- `folder_uid` (`string`, optional): UID of the folder the dashboard should be in (grafana.app/folder annotation). This is a full replace: pass the current folder UID to keep the dashboard where it is, or leave blank to put it at the root level. Example: nErXDvCkzz.
- `message` (`string`, optional): Commit message saved in the dashboard's version history (grafana.app/message annotation). Example: Add error-rate panel.

Example input: `{"dashboard_uid":"<dashboard_uid>","namespace":"<namespace>","spec":{}}`

### `grafana_datasource_query`

Query Data Sources · Write

Run one or more queries against Grafana data sources (Prometheus, Loki, SQL and others), including server-side expressions, over a time range.
Returns results keyed by refId, each with frames of fields and values.
Use grafana_datasource_query to fetch metric, log or table data. Use grafana_alert_rule_status_list for alert rule state and grafana_dashboard_get for the queries a dashboard uses.
Requires data source UIDs and types from grafana_datasource_list.

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

Inputs:

- `from` (`string`, required): Start of the time range: epoch milliseconds as a string, or a relative Grafana time such as now-1h. Example: now-1h.
- `queries` (`array`, required): Queries to run. Each query needs a refId (a short label such as A), a datasource object with the data source's uid (and type), and the query fields that data source type expects, such as expr for Prometheus or Loki, or rawSql for SQL data sources. intervalMs and maxDataPoints are optional. Example: [{"refId": "A", "datasource": {"uid": "P8E80F9AEF21F6940", "type": "prometheus"}, "expr": "sum(rate(http_requests_total[5m]))", "intervalMs": 60000, "maxDataPoints": 500}].
- `to` (`string`, required): End of the time range: epoch milliseconds as a string, or a relative Grafana time such as now. Example: now.
- `debug` (`boolean`, optional): If true, Grafana adds debugging information to the response.

Example input: `{"from":"<from>","queries":[],"to":"<to>"}`

### `grafana_folder_create`

Create Folder · Write

Create a folder in a Grafana namespace through the folder.grafana.app API, optionally nested under a parent folder.
Returns the created Folder object with metadata.name (the folder UID) and spec.title.
Use grafana_folder_create for a new folder. Use grafana_folder_update to rename or move an existing one.

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

Inputs:

- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `title` (`string`, required): Title of the new folder. Example: Platform Team.
- `api_version` (`string`, optional): Version of the folder.grafana.app API to call. v1 is documented as available in Grafana 12 and later; v1beta1 is the earlier version. Defaults to v1. One of: `v1`, `v1beta1`. Default: `v1`.
- `description` (`string`, optional): Optional folder description. Example: Dashboards owned by the platform team.
- `folder_uid` (`string`, optional): UID to give the new folder (its metadata.name). Up to 40 letters, digits, '-' or '_'. Leave blank to let Grafana generate one. Example: platform-team.
- `parent_folder_uid` (`string`, optional): UID of an existing folder to create this one inside (grafana.app/folder annotation; needs nested folders). Leave blank for a top-level folder. Example: nErXDvCkzz.

Example input: `{"namespace":"<namespace>","title":"<title>"}`

### `grafana_folder_update`

Update Folder · Write

Replace a Grafana folder's title, description and parent through the folder.grafana.app API.
Returns the updated Folder object with the new resourceVersion.
Use grafana_folder_update to rename or move a folder; it replaces the whole folder, so pass the current parent folder to keep a nested folder in place. Use grafana_folder_create for a new folder.
Requires the folder UID from grafana_folder_list or grafana_folder_get.

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

Inputs:

- `folder_uid` (`string`, required): UID of the folder to update (its metadata.name, also shown in the folder URL /dashboards/f/<uid>/). Example: nErXDvCkzz.
- `namespace` (`string`, required): Grafana API namespace that scopes the request to an organization or stack. Use 'default' for the default organization on self-managed Grafana, 'org-<org_id>' for another organization (e.g. org-2), or 'stacks-<stack_id>' on Grafana Cloud (the stack ID is the instance ID shown in the Grafana Cloud portal under your stack's Details). Example: default.
- `title` (`string`, required): New title for the folder. Example: Platform Team (prod).
- `api_version` (`string`, optional): Version of the folder.grafana.app API to call. v1 is documented as available in Grafana 12 and later; v1beta1 is the earlier version. Defaults to v1. One of: `v1`, `v1beta1`. Default: `v1`.
- `description` (`string`, optional): Folder description after the update. Leave blank to clear it. Example: Dashboards owned by the platform team.
- `parent_folder_uid` (`string`, optional): UID of the folder this one should sit under (grafana.app/folder annotation). This is a full replace: pass the current parent to keep a nested folder in place, a different UID to move it, or leave blank for the top level. Example: nErXDvCkzz.

Example input: `{"folder_uid":"<folder_uid>","namespace":"<namespace>","title":"<title>"}`

### `grafana_silence_create`

Create Silence · Write

Create a silence in Grafana's built-in Alertmanager that mutes matching alerts for a time window, or update an existing silence by passing its ID.
Returns the silence ID.
Use grafana_silence_create to mute alerts during maintenance or while an incident is handled. Use grafana_silence_list to see existing silences.

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

Inputs:

- `comment` (`string`, required): Reason for the silence. Example: Planned database maintenance.
- `created_by` (`string`, required): Name of the person or system creating the silence. Example: oncall-bot.
- `ends_at` (`string`, required): When the silence ends, as an RFC 3339 timestamp. Must be after Starts At. Example: 2026-10-14T10:00:00Z.
- `matchers` (`array`, required): Label matchers that select which alerts to mute; an alert is silenced when it matches all of them. Each matcher has a label name, a value, isRegex (true to treat the value as a regular expression) and isEqual (false to negate the match; defaults to true). Example: [{"name": "alertname", "value": "HighLatency", "isRegex": false, "isEqual": true}].
- `starts_at` (`string`, required): When the silence starts, as an RFC 3339 timestamp. Example: 2026-10-14T08:00:00Z.
- `silence_id` (`string`, optional): ID of an existing silence to update instead of creating a new one. Leave blank to create. Example: 7d8c5f0a-1b2c-4d3e-9f8a-0b1c2d3e4f5a.

Example input: `{"comment":"<comment>","created_by":"<created_by>","ends_at":"<ends_at>","matchers":[{"name":"alertname","value":"HighLatency","isRegex":false,"isEqual":true}],"starts_at":"<starts_at>"}`

## Related

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

- [Microsoft Entra ID](/agentkit/connectors/microsoftentraid/): Scalekit connector, OAuth, 82 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools
- [1Password](/agentkit/connectors/onepassword/): Scalekit connector, Access token, 4 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 |
