Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Better Stack in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Better Stack uptime monitoring and incident management: monitors and heartbeats with availability and response times, incidents with acknowledge, escalate and resolve, on-call calendars, escalation policies, status pages and status reports, and the configured integrations.
Try asking
Example prompts for Better Stack
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Better Stack, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Better Stack + Microsoft Copilot
Better Stack uptime monitoring and incident management: monitors and heartbeats with availability and response times, incidents with acknowledge, escalate and resolve, on-call calendars, escalation policies, status pages and status reports, and the configured integrations.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
BETTER_STACK_API_TOKEN
Step 1 — Get credentials
Setting up takes about 2 minutes. The connector uses the Better Stack Incidents API (formerly Better Uptime, https://incidents.betterstack.com/api).
- Open https://betterstack.com/settings/api-tokens/0, pick your team and copy or create a token under Incidents API tokens. This team-scoped token is the simplest choice.
- A global API token (https://betterstack.com/settings/global-api-tokens) also works and reaches every team. With it the AI passes
team_nameto filter lists, and it is required when creating monitors, heartbeats or incidents. - Paste the token into
BETTER_STACK_API_TOKEN. Writes need a token with write access. - Install the connector and run
better_stack_list_monitorsto check the token.
What it reads:
- Uptime monitors with status (
up,down,paused,validating,maintenance), URL, type, frequency, regions and last check, one monitor's full configuration, its availability (SLA) for a date range and its response times per region over the last 24 hours. Monitor groups and the monitors in a group. - Heartbeats for cron jobs and background tasks with their ping URL, period, grace and status, their availability, and heartbeat groups.
- Incidents, newest first, with cause, status, start, acknowledge and resolve times and who did it, filtered by date range, monitor, heartbeat, resolved or acknowledged; one incident with the failing response; its timeline of alerts, acknowledgements, escalations, comments and status page updates; and its comments.
- Who is on call: on-call calendars with the person on call now, a calendar at a given moment (
defaultfor the team's default calendar), and the shifts in a time window. Escalation policies with their steps and the severities with their alert channels. - Status pages, the resources they show with availability and daily history, status reports and their updates.
- Configuration: incoming and outgoing webhooks, Slack integrations and metadata records such as service owner or environment.
What it writes: monitors (better_stack_create_monitor, better_stack_update_monitor, better_stack_pause_monitor and better_stack_resume_monitor around planned work); heartbeats (better_stack_create_heartbeat returns the ping URL the job must call after each run, better_stack_update_heartbeat); incidents (better_stack_create_incident, better_stack_acknowledge_incident, better_stack_escalate_incident, better_stack_resolve_incident, better_stack_reopen_incident, better_stack_add_incident_comment); status pages (better_stack_create_status_report, better_stack_add_status_update as things change, better_stack_update_status_report to change the title or reschedule a maintenance).
Every tool is on at install, the writing ones included. Creating an incident, escalating it and publishing a status report alert real people or public subscribers, so the AI confirms with you first; notify_subscribers: false keeps a status report quiet. Resolving an incident of a monitor that still fails opens a new incident on its next check. A status report is closed by an update that sets every affected resource to resolved.
Data formats: answers follow JSON:API: data (one object or a list) with id, type, attributes and relationships; related users and status updates come in included. Ids are numeric strings. Times are ISO 8601 in UTC; date filters (from, to) take YYYY-MM-DD. Availability is a percentage (99.98); downtime, incident lengths and response times are in seconds. Incident status is Started, Acknowledged or Resolved. Monitor passwords, Playwright environment variables and policy incident tokens are left out of the answers.
Paging: lists return pagination.next, a URL that is null on the last page; the AI calls again with page set to the page number in that URL. per_page is 50 by default and up to 250; incidents default to 10 and allow 50.
Common errors: 401 means a wrong or revoked token, or a Telemetry token instead of an Incidents one. 403 is a token without write access, 404 an unknown id or an id of another team, 422 a validation error whose errors names the field, 429 the rate limit.
The connector does not cover Better Stack Telemetry (logs, metrics, dashboards) and does not delete monitors, heartbeats, incidents or status pages.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Microsoft Copilot
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Microsoft Copilot uses MCP servers through agents built in Copilot Studio: you add AnythingMCP to an agent as a tool, then publish the agent to Microsoft 365 Copilot and Teams. Copilot Studio connects from Microsoft's cloud over Streamable HTTP, which AnythingMCP supports.
- In Copilot Studio, open your agent (or create one), go to Tools and choose Add a tool → New tool → Model Context Protocol.
- Enter a Server name (for example
AnythingMCP), a Server description that says what the connector does, and the Server URLhttps://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID. Copilot Studio uses the description to decide when to call the server. - Under authentication, choose API key, set Type to Header and the header name to
X-API-Key, then select Create. - In Add tool, choose Create a new connection, paste an MCP API key from AnythingMCP (MCP Servers → your server → API keys) and select Add to agent.
- Try it in the agent's Test pane: ask for something that needs the
Better Stacktools. - Select Publish, then Channels → Microsoft 365 and Microsoft Teams, keep Make agent available in Microsoft Copilot selected and choose Add channel. See agent in Teams installs it for you; in Microsoft 365 Copilot, type @ and pick the agent.
Prefer per-user sign-in? Choose OAuth 2.0 → Dynamic discovery instead of an API key: each user then signs in to AnythingMCP the first time the agent calls it.
Self-hosting? Use your instance's public HTTPS address instead of https://cloud.anythingmcp.com. Copilot Studio connects from Microsoft's cloud, so localhost does not work.
Available tools
| Tool | What it does |
|---|---|
better_stack_list_monitors | List the team's uptime monitors with their status (up, down, paused, validating, maintenance), URL, type, check frequency, regions and last… |
better_stack_get_monitor | Get one monitor with its full configuration: type, URL, status, check frequency, regions, alert channels, escalation policy, maintenance… |
better_stack_create_monitor | Create an uptime monitor: an HTTP check (status, expected status code, keyword present or absent), a server or port check (ping, TCP, UDP… |
better_stack_update_monitor | Change a monitor: only the fields you pass are updated (URL, name, frequency, regions, alert channels, escalation policy, group… |
better_stack_pause_monitor | Pause a monitor: Better Stack stops checking it and sends no alerts until it is resumed |
better_stack_resume_monitor | Resume a paused monitor: checks and alerts start again with the monitor's existing settings |
better_stack_get_monitor_availability | Availability summary (SLA) of a monitor for a date range: availability percentage, total downtime in seconds, number of incidents, longest… |
better_stack_get_monitor_response_times | Response times of a monitor's checks over the last 24 hours, per region, oldest first: the total response time in seconds for each check |
better_stack_list_monitor_groups | List the monitor groups (the folders monitors are sorted into on the dashboard), with their name, paused flag and team |
better_stack_get_monitor_group | Get one monitor group by id: its name, sort index, paused flag, team and timestamps |
better_stack_list_monitor_group_monitors | List the monitors inside one monitor group, with the same fields as better_stack_list_monitors; paged with page and per_page |
better_stack_list_heartbeats | List heartbeat (cron job) monitors: name, status, expected period and grace in seconds, the ping URL the job must call, paused flag and… |
better_stack_get_heartbeat | Get one heartbeat monitor with its ping URL, period, grace, status, alert channels, escalation policy and maintenance window |
better_stack_create_heartbeat | Create a heartbeat monitor for a cron job or background task |
better_stack_update_heartbeat | Change a heartbeat monitor: name, period, grace, alert channels, group, escalation policy, or pause and resume it with paused |
better_stack_get_heartbeat_availability | Availability summary of a heartbeat for a date range: availability percentage, total downtime in seconds, number of incidents, longest and… |
better_stack_list_heartbeat_groups | List the heartbeat groups, with their name, paused flag, sort index and team |
better_stack_list_incidents | List incidents, newest first: name, cause, status (Started, Acknowledged, Resolved), start, acknowledge and resolve times and who did it… |
better_stack_get_incident | Get one incident with its cause, status, timestamps, who acknowledged and resolved it, alert channels, escalation policy, metadata and the… |
better_stack_get_incident_timeline | Timeline of an incident, newest first: alerts sent, acknowledgements, escalations, comments, status page updates and the captured responses |
better_stack_create_incident | Open a manual incident and alert the on-call person through the chosen channels (call, SMS, e-mail, push), optionally escalating with a… |
better_stack_acknowledge_incident | Acknowledge an ongoing incident: further escalation stops while the incident stays open until it is resolved |
better_stack_resolve_incident | Resolve an ongoing incident |
better_stack_reopen_incident | Reopen a resolved incident, for example when the problem came back right after it was marked as resolved |
better_stack_escalate_incident | Escalate an ongoing incident to a team member, a team, an on-call calendar, an escalation policy or the whole organization, choosing the… |
better_stack_list_incident_comments | List the comments posted on an incident, with their text (Markdown), author and timestamps |
better_stack_add_incident_comment | Post a comment on an incident, for example a status note or the root cause; it appears in the incident timeline |
better_stack_list_on_call_calendars | List on-call calendars (schedules) with their name, team and whether each is the team's default, plus who is on call right now |
better_stack_get_on_call_calendar | Who is on call on a calendar, now or at a given date and time: names, e-mails, phone numbers and holiday status of the on-call users |
better_stack_list_on_call_events | List the shifts of an on-call calendar in a time window: who is on call (e-mails), start and end time, and whether the shift is an override |
better_stack_list_escalation_policies | List escalation policies with their steps (who is alerted, after how many minutes, with which severity), repeat settings and fallback policy |
better_stack_get_escalation_policy | Get one escalation policy with its ordered steps, step members (users, on-call, Slack, webhooks), wait times, repeat count and fallback… |
better_stack_list_severities | List the severities (urgencies) of the team, with the alert channels each one uses (call, SMS, e-mail, push, critical alert) |
better_stack_list_status_pages | List the status pages: company name, subdomain and custom domain, published flag, overall state (operational, degraded, downtime… |
better_stack_get_status_page | Get one status page with its domain, overall state, published and subscribable flags, history length, design and access settings |
better_stack_list_status_page_resources | List the resources shown on a status page (monitors, heartbeats, groups) with their public name, current status, availability and daily… |
better_stack_list_status_reports | List the status reports (incident announcements and maintenance windows) on a status page with title, type, start and end, affected… |
better_stack_get_status_report | Get one status report on a status page with its type, start and end, affected resources, overall state and its status updates (in… |
better_stack_create_status_report | Publish a status report on a public status page: an incident announcement or a planned maintenance, with the affected resources and a first… |
better_stack_update_status_report | Change a status report's title or its start and end time, for example to reschedule a maintenance |
better_stack_list_status_updates | List the status updates posted on a status report, with message, publish time, affected resources and whether subscribers were notified |
better_stack_add_status_update | Post a new update on a status report, e.g. investigating, identified, monitoring or resolved; set every affected resource to resolved to… |
better_stack_list_incoming_webhooks | List the incoming webhook integrations that open and resolve incidents from other tools, with their name, URL and the rules for starting… |
better_stack_list_outgoing_webhooks | List the outgoing webhook integrations that Better Stack calls on incident and monitor events, with their name, target URL and triggers |
better_stack_list_slack_integrations | List the Slack integrations of the team: workspace, channel and the kinds of notifications sent there |
better_stack_list_metadata | List metadata records (key and values) attached to monitors, heartbeats, incidents and integrations, e.g. service owner or environment… |
Example prompts
- "Is anything down right now? List the monitors that are down with their URL and last check."
- "What was the availability of the monitor for https://shop.example.com last month, and what was the longest incident?"
- "Who is on call on the default calendar this Saturday at 22:00?"
- "Show the open incidents with their cause and timeline, then acknowledge the one on the payments API."
- "Post a planned maintenance on our status page for Sunday 02:00 to 03:00 UTC affecting the API, without notifying subscribers. Show me the text first."
FAQ
Which Copilot is this for? Microsoft 365 Copilot at work, through agents built in Copilot Studio. The Microsoft Copilot app for personal accounts has no option to add your own MCP server.
What do I need? A work account with access to Copilot Studio (a license or a trial) to build the agent. People who use it in Microsoft 365 Copilot or Teams need access to the agent: share it with them, or ask an admin to publish it to the organization. If your organization applies data policies to Power Platform connectors, they cover MCP servers too.
The agent doesn't call the tools. Check that the header name is exactly X-API-Key and that the key belongs to the same MCP server as the URL, and make the server description specific: Copilot Studio uses it to decide when to call the server. Publish the agent again after each change; in an open chat, type "start over" to get the new version.
Next steps
- Connector landing page
- Connect to Claude
- Connect to ChatGPT
- Connect to Cursor
- Connect to Gemini
- Connect to Meta Muse
Was this guide helpful?