- Brand
- Better Stack
- Category
- Developer Tools
- Primary Subcategory
- Observability, Monitoring & Incident Response
Integration details
Description
Observability for AI agents: query your logs, traces, metrics, and errors with SQL, build dashboards and chart alerts, manage uptime monitors, respond to incidents, see who's on-call, and publish status page reports. You can also create and link error issues in Linear or Jira and search Better Stack's docs without leaving the chat. Connects to your Better Stack account.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Observability, Monitoring & Incident Response
- Secondary Subcategories
- None listed
- Brand
- Better Stack
- Access
- Account required
- First tracked
- 2026-09-24
- Tool count
- 148
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Better Stack
Get updates when Better Stack’s Discoverability Score or category rank changes.
Competing in ChatGPT Observability, Monitoring & Incident Response
View Category148 tools agents can invoke
Acknowledge an ongoing incident
acknowledge_incident
Add a new chart to a dashboard. Use the `section` parameter to organize charts into named sections — sections are auto-created if they don't exist, and charts are auto-positioned within them. **REQUIRED**: the `query`'s FROM must reference a source, either `{{source}}` or a source-type variable defined via `set_dashboard_variable` (e.g. `{{redis_source}}`). A query with no source is rejected with guidance to define it first. Dashboard chart queries run against the metrics collection: use `sum(logs_count)` (or the matching `sum(<row_type>_count)` for the source), `avgMerge(value_avg)`, `label('tag')`. Do NOT use `JSONExtract(raw, …)` — that is for live-tail charts and `query` only; dashboards have no `raw` column. Call `metrics_query_help` with the source ID **and `context: 'chart_query'`** for available metrics/labels and chart-query-style examples. **Workflow:** 1. Call `chart_building_help` for chart types, units, and settings. 2. Call `metrics_query_help` with `context: 'chart_query'` to see the source's metrics schema and chart-query examples. 3. Verify the query with `render_chart` (runs it and surfaces errors automatically) or with `query`. Use `{{source}}`, `{{start_time}}`, `{{end_time}}`, `{{time}}` variables for integration with dashboard filters. Queries can also reference custom dashboard variables — `{{var}}` (required) or `[[ AND col = {{var}} ]]` (optional clause, dropped while the variable is empty); define them with `set_dashboard_variable`.
add_chart_to_dashboard
Add a section divider to a dashboard. Sections span the full width and help organize charts into groups. Charts and sections at or below the insertion point are shifted down to make room
add_dashboard_section
Add a member to an escalation step of an escalation policy, for example an outgoing webhook (type webhook) so the step fires it, or a user, an on-call calendar or a Slack integration. With new_step, the member goes alone into a new escalation step at step_number instead, and the steps from there on move one later: a webhook in a new step 1 fires first, and next_step_wait_minutes gives it time before the people in the next step are notified. The policy keeps its other steps and members
add_escalation_policy_step_member
Add a resource (monitor, heartbeat, or group) to a status page. Provide the `resource_type` and `resource_id` of the thing to display, plus a `public_name` shown to visitors (usually the resource's own name). Use `status_page_sections` to find the section to place it in; when omitted the resource is added to the status page's first section.
create_status_page_resource
Change a team member's role. Identify the member by `email` or `user_id` (from team_members) and pass the target `role_id` (from team_roles). The admin role cannot be assigned, and an existing admin's role cannot be changed, via the API. Pending invitations can't have their role changed — cancel and re-invite instead. With an OAuth token you must be on the team and your role there must be at or above the member's current role, as on the team members page. If the token can reach more than one team, pass `team_id` (or `team_name`).
change_team_member_role
Edit an existing chart name, query, type, or settings. Only provide the fields you want to change. **If changing the query:** the new query's FROM must reference a source, either `{{source}}` or a source-type variable defined via `set_dashboard_variable` (queries with no source are rejected). Dashboard chart queries run against the metrics collection: use `sum(logs_count)` (or the matching `sum(<row_type>_count)` for the source), `avgMerge(value_avg)`, `label('tag')`. `JSONExtract(raw, …)` only works in live-tail charts — dashboards have no `raw` column. Verify the new query with `render_chart` (runs it and surfaces errors automatically) or with `query` before saving. Queries can also reference custom dashboard variables — `{{var}}` (required) or `[[ AND col = {{var}} ]]` (optional clause, dropped while the variable is empty); define them with `set_dashboard_variable`. Call `chart_building_help` for chart/settings reference and `metrics_query_help` with `context: 'chart_query'` for the source's metrics schema and chart-query-style examples. Use `dashboard` first to find the chart ID.
edit_chart
Edit an existing chart alert configuration. Only provide the fields you want to change. Call chart_alert_help for configuration reference. Use chart_alerts or chart_alert first to find the alert ID
edit_chart_alert
Edit an existing dashboard's name or source eligibility. Only provide the fields you want to change. Use dashboard first to find the dashboard ID.
edit_dashboard
Edit an existing dashboard section. Only provide the fields you want to change. Use dashboard first to find the section ID
edit_dashboard_section
Create a new application in Better Stack. Returns the created application details including ID, ingestion token, ingesting host URL, retention settings, and platform-specific integration documentation links with next steps for configuration
create_application
Create a catalog relation with its primary and added attributes in one call. Add records with `upsert_catalog_records` afterwards. See `catalog_relations` for how the catalog works. Propose the relation to the user first (its name, matching, attributes and a few example records) and create it once they agree. For a relation describing services, add `Dependencies`, `Connections` and `Type` as added attributes, so the Dependencies map can draw its records. ## Rules - Name primary attributes after metadata keys incidents really carry. Check recent incidents' metadata with `incidents` and `incident` first: a key no incident carries never matches. - Reference teams, team members, escalation policies and other Better Stack objects as objects, like `{"type": "Team", "name": "Platform"}`, never as their names in text. - Never invent records. Every row comes from a source the user pointed you to (code, Terraform, Kubernetes, a Backstage catalog, the service map) or from the user. - Prefer `upsert_catalog_records` to removing records and adding them again: it keeps every record it doesn't name, while removing them all empties the relation.
create_catalog_relation
Create a new chart alert on an existing chart. The chart must support alerts (line_chart, bar_chart, or tail_chart with time variables; Number charts take no new alerts). Call chart_alert_help for configuration reference. Use chart or dashboard first to find the chart ID
create_chart_alert
Create a secure cloud connection for direct ClickHouse query access to logs, spans, and metrics data. Returns connection credentials (host, port, username, password), sample queries for each data type, and cURL command examples. Connections expire after 1 hour by default
create_cloud_connection
Create a Better Stack Collector, the agent that collects logs, metrics and traces from a Docker host, a Docker Swarm or a Kubernetes cluster. Returns the collector details, the collector secret needed to install it, the ID of the source its data goes to, and the installation guide for its platform
create_collector
Create a new dashboard. Optionally use a template to start with pre-configured charts. Call chart_building_help for guidance on dashboard structure and layout. Optionally specify a source_id to preconfigure the dashboard with that source. Returns the new dashboard ID which can be used with add_chart_to_dashboard to add charts
create_dashboard
Post a comment on an error so the findings land in the conversation the team reads in Better Stack. The comment is written as the user whose token made the call and marked as posted via MCP, so a team member can tell it apart from one typed in the app; a call made with an API token is attributed to the API instead. When the error is linked to a Linear issue whose integration syncs comments, the comment is posted on that issue too. Use error_comments to read the conversation back.
create_error_comment
Get a single-use URL to upload a file (a log, a screenshot, a trace) to, and attach it with a tool that takes `attachment_upload_ids`, such as `create_incident_comment`. The answer is a `curl` command that uploads the file from a shell, so this needs one: Claude Code, or claude.ai's code execution with this MCP server's domain allowed. Run the command, then pass the upload id to the tool. One file of up to 10 MB per URL, 10 upload URLs and 10 uploads a minute. The URL expires after 15 minutes, the uploaded file after a day, and only you can attach it.
create_file_upload
Create a new heartbeat that expects a periodic request from a cron job, worker, or other background task, and alerts when that request stops arriving. Provide a `name` for the heartbeat. The heartbeat reports down once no request is received within `period` seconds plus the `grace` window. Use the returned heartbeat URL as the endpoint your job pings on every successful run.
create_heartbeat
Create a new incident providing a summary of the issue, requester email, and other optional details. Notification channels (call, sms, email, critical_alert) all default to false, so an incident with none of them set reaches nobody unless an escalation policy handles it.
create_incident
Create a comment on an incident. To attach files, upload each one with create_file_upload first and pass the upload_id values it returns in attachment_upload_ids
create_incident_comment
Create an issue for an error in Linear, or a work item in Jira, through the team's integration and link the two. The issue gets Better Stack's standard body (error type, message, call site, stack trace, occurrence counts and a link back) and the integration's configured defaults for team or space, work type, assignee, labels and priority. Better Stack then posts every change to the error state as a comment on the issue. An error that already has an issue through the integration is reported, not duplicated; use link_error_issue to attach an issue that already exists.
create_error_issue
Create a new metric expression (extract-metrics-from-logs rule) on a source. `sql_expression` runs against each log row; log fields live inside the `raw` JSON column — use `JSONExtract(raw, 'path', 'Nullable(Type)')`. The `Nullable(...)` wrapper is required. Nested paths use positional args: `JSONExtract(raw, 'request', 'headers', 'user-agent', 'Nullable(String)')`. Call `source_fields` to see what fields exist. Pass `aggregations` (e.g. `["avg", "count"]`) for an aggregated metric, or omit / pass `[]` for a label (group-by column). Prefer `build_type: new_data` (default). `historical_logs` re-runs the rule over every stored log — expensive; only when the user explicitly asks.
create_metric_expression
Create a new monitor that tracks the availability of a website, host, or service. Provide the `url` to monitor. For ping, TCP, UDP, SMTP, POP, IMAP, and DNS monitors this is the host (e.g. `example.com`) rather than a full URL. The monitor starts checking immediately unless `paused` is set to true.
create_monitor
Register a release for an errors application, so it appears the moment it deploys instead of when its first error arrives. Returns the release ID, usable with remove_release
create_release
Create a new log source in Better Stack. Returns the created source details including ID, ingestion token, ingesting host URL, retention settings, and platform-specific integration documentation links with next steps for configuration. To set up a Better Stack Collector on Docker, Docker Swarm or Kubernetes, use create_collector instead
create_source
Create a new status page report
create_status_page_report
Create a new status update for an existing status page report
create_status_page_report_update
Create a section (resource group) on a status page to group resources under a heading
create_status_page_section
Change the settings of a Slack integration, as on Integrations › Slack › Configure. Only the parameters you pass change. channel_invitees, alert_options and status_page_update_resources replace the whole list
edit_slack_integration
Edit an existing application in Better Stack - rename it, pause or resume ingesting, or set its VRL transformations, including the exception grouping program. Only provide the fields you want to change. Use applications or application first to find the application ID.
edit_application
Escalate an ongoing incident to a user, team, on-call calendar, escalation policy, or the whole organization. A policy brings its own notification channels; every other target needs at least one of call, sms, email, push or critical_alert.
escalate_incident
Execute a ClickHouse SQL query to retrieve logs, traces/spans, errors, and metrics from telemetry data. Write the query as a template and the server builds the collections for you, as Better Stack's dashboards and AI SRE do: - `FROM {{source}}` reads the source's recent and historical rows of `source_type` together (for metrics, its metrics collection), scoped to the source - `{{start_time}}` and `{{end_time}}` are the `start_time` and `end_time` arguments, e.g. `WHERE dt >= {{start_time}} AND dt < {{end_time}}` - `{{time}}` buckets `dt` to an interval that suits the range (`toStartOfInterval(dt, INTERVAL '<n> second')`); `{{interval_seconds}}` is that interval A template needs `source_type`, `start_time` and `end_time`, and no `table`. A query without `{{...}}` runs exactly as written, needs `table` and must name its `remote(...)` and `s3Cluster(...)` collections itself. - **IMPORTANT**: Use `query_help` to get instructions on how to create the correct query for logs and spans - **IMPORTANT**: Use `errors_query_help` to get instructions on how to create the correct query for errors - **IMPORTANT**: Use `metrics_query_help` to get instructions on how to create the correct query for metrics - Before a query over more than a few hours of logs, spans or other events, call `query_windows` with the same arguments: it says whether the range fits one call and, if not, the time windows that do. A template of either shape below needs no such call: `query` splits its range itself - A template listing the newest rows (`ORDER BY dt DESC LIMIT n`, filtered by `dt >= {{start_time}} AND dt < {{end_time}}`, with no aggregate, `GROUP BY`, `DISTINCT` or subquery) whose range is too wide for one call is read one time window at a time, newest first, until it has its n rows; the result says how far it read and where to continue - A template that only adds up or combines (`count()`, `countIf()`, `sum()`, `sumIf()`, `min()`, `max()`, beside the `GROUP BY` columns it selects; `ORDER BY` and `LIMIT` on those), filtered by `dt >= {{start_time}} AND dt < {{end_time}}`, with no `HAVING`, `DISTINCT` or subquery, whose range is too wide for one call but holds at most 300,000,000 rows is run in time windows, several at once, and the windows' rows merged; the result says how far it read
query
Export a dashboard configuration as JSON. Returns the complete dashboard data structure including charts, sections, presets, and settings
export_dashboard
Get every setting of a Slack integration: notification type, channel invitees, who Slack users can alert, and the notification options
slack_integration
Get comprehensive details of a specific application including its configuration, VRL transformations (the exception grouping program among them), retention settings, ingestion details, custom bucket settings (if configured)
application
Get available escalation policies for an incident
available_incident_escalation_policies
Show one catalog relation with its records, one column per attribute, paginated. Objects read as `Platform (Team 123)`, so a record can name them again by `name` or `item_id`. See `catalog_relations` for how the catalog works.
catalog_relation
Get detailed information about a specific chart alert including its configuration, SQL queries, status, and current incident info. Use chart_alerts first to find the alert ID
chart_alert
Get instructions for creating and configuring chart alerts, including alert types, operators, configuration fields, supported chart types, and common mistakes. Call this before creating or editing chart alerts
chart_alert_help
Get comprehensive instructions for building charts and dashboards, including chart types, units, axis settings, column mapping, legend placement, layout tips, and common mistakes. Call this before creating or editing charts
chart_building_help
Get detailed information about a specific chart including its SQL queries, configuration, and settings. Use dashboard first to find the chart ID
chart
Get detailed information about a specific dashboard including its charts, sections, layout, template variables, and configuration. Use this to understand a dashboard structure before modifying it
dashboard
Get instructions for writing a ClickHouse query to use inside a Better Stack **Dashboard** chart (or chart alert). The query uses template variables (`{{source}}`, `{{time}}`, `{{start_time}}`, `{{end_time}}`) and runs against the source's metrics collection — it is meant to be saved as a dashboard chart via `add_chart_to_dashboard` / `edit_chart`, NOT run directly. To instead write an ad-hoc query you will run directly via `query` or `render_chart`, use `metrics_query_help`.
dashboard_query_help
Read the conversation on an error: comments left in the app, comments posted by an agent over MCP, replies written in the error Slack thread, and comments synced in from a linked Linear issue. Every entry names its author and, when it did not come from the app, how it was posted; a comment left on one occurrence of the error names that event.
error_comments
Get comprehensive details of a specific error including its type, message, call site information, first occurrence, current state (unhandled, unresolved, ignored, resolved, or reoccurred), and linked Linear/Jira issues
error
Get comprehensive instructions for building SQL ClickHouse queries for error tracking, including both error patterns (metrics) and individual exceptions. Explains when to use each source and provides examples for common use cases
errors_query_help
Get detailed information about a specific escalation policy
escalation_policy
Get detailed information about a specific exploration (saved Explore query) including its sources, chart type, template variables, saved time range, and query. Use this to understand an exploration before modifying its source or variables
exploration
Get instructions for writing a ClickHouse query to use inside the Better Stack **Explore logs** page (and live-tail charts) for log and span data. The query uses template variables (`{{source}}`, `{{time}}`, `{{start_time}}`, `{{end_time}}`) and reads fields from the `raw` JSON column — it is meant to be used in the Explore UI, NOT run directly. To instead write an ad-hoc logs/spans query you will run directly via `query`, use `query_help`.
explore_logs_query_help
Better Stack ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Better Stack's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Better Stack alternatives on ChatGPT?
As of 2026-11-02, Better Stack competes with API Status Check, Averth, Biggy, Birdie, Connhex, Datadog, Durabull: BullMQ & Redis Admin, elmah.io MCP and 23 more in ChatGPT Observability, Monitoring & Incident Response, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.