Skip to article
Team & accountPremium · early access

MCP agent access

Connect Claude Code and Cursor, check ChatGPT compatibility, and use workspace resources and tools.

8 min read

This guide covers Premium features. Premium is in early access and cannot be bought yet.

Connection details

Cheapmonit is a remote MCP server at https://cheapmonit.com/api/v1/mcp. It uses Streamable HTTP and the same workspace-scoped API keys as the REST API. No separate MCP account, local server package, or browser session is required.

Create a Read key in Workspace settings → API keys for inspection. Read and write also permits monitor changes and incident acknowledgement. Keys require the workspace owner’s Premium plan, which remains in early access and is not available to buy. For self-hosting, replace the origin; locally use http://localhost:8088/api/v1/mcp.

Client compatibility — checked 14 October 2026
ClientDirect connectionAuthentication
Claude CodeSupportedStreamable HTTP with a configured Bearer header
CursorSupportedRemote MCP URL with a configured Bearer header
ChatGPT custom MCP appNot supported by this server’s current authenticationChatGPT cannot present a custom API key; an OAuth-capable integration is required

Load your key

The configurations below reference CHEAPMONIT_API_KEY rather than storing the token in the file. Set it in the environment that starts your client. A terminal export does not automatically reach an application already running or launched from a desktop icon.

In Bash, the prompt below reads the key without echoing its value or placing the value in the command history. Use your OS or organization’s secret management when starting clients another way.

Set the environment variable in Bash
read -rs -p 'Cheapmonit API key: ' CHEAPMONIT_API_KEY
export CHEAPMONIT_API_KEY
printf '\n'

Keep the key out of source control and chat. Claude Code uses ${CHEAPMONIT_API_KEY}; Cursor uses ${env:CHEAPMONIT_API_KEY}. These are different client configuration syntaxes.

Connect Claude Code

The CLI setup is local to this project. The JSON alternative needs type http. A connection requires a valid key and Premium access.

  1. Load CHEAPMONIT_API_KEY in your terminal, then run the CLI command below from the project where you want the connection. The single quotes keep the variable reference literal in the saved configuration.
  2. Alternatively, merge the JSON example into .mcp.json at the project root. Use one configuration for this server name; preserve any existing servers.
  3. Start Claude Code from that environment. Approve a project server if prompted, then open /mcp and check cheapmonit. Ask it to list monitors without changing anything.
Add the HTTP server with the CLI
claude mcp add --transport http --scope local cheapmonit \
  https://cheapmonit.com/api/v1/mcp \
  --header 'Authorization: Bearer ${CHEAPMONIT_API_KEY}'
Project configuration alternative — .mcp.json
{
  "mcpServers": {
    "cheapmonit": {
      "type": "http",
      "url": "https://cheapmonit.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${CHEAPMONIT_API_KEY}"
      }
    }
  }
}
Inspect the configured server
claude mcp get cheapmonit
claude mcp list

Connect Cursor

Cursor expands ${env:CHEAPMONIT_API_KEY} in the Authorization header. Restart the application after changing the environment. Missing tools usually mean the server is disabled, the key is invalid, or the account lacks Premium access.

  1. Export CHEAPMONIT_API_KEY before starting Cursor. If Cursor is already running, fully quit it and start it from that terminal so it receives the variable.
  2. Merge the JSON below into .cursor/mcp.json in the project. For a personal configuration available across projects, use ~/.cursor/mcp.json instead.
  3. Open Cursor’s MCP settings, enable cheapmonit, and check the connection. In Agent, ask for a monitor list with no changes.
Cursor configuration — .cursor/mcp.json
{
  "mcpServers": {
    "cheapmonit": {
      "url": "https://cheapmonit.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${env:CHEAPMONIT_API_KEY}"
      }
    }
  }
}
Start Cursor from the configured terminal
cursor .

ChatGPT: direct connection is not available yet

ChatGPT’s custom MCP apps cannot send a customer-provided API key. Cheapmonit requires a workspace Bearer key and has no OAuth flow, so entering its URL in ChatGPT will fail authentication.

A direct authenticated ChatGPT connection needs an OAuth-capable integration. Do not put an API key in the server URL or an OAuth client ID field, or disable authentication.

Use Claude Code or Cursor with the configurations above. OpenAI API applications have different authentication options; they are separate from ChatGPT.

Checked against official OpenAI documentation on 14 October 2026.

Resources and resource templates

Resources return private workspace data as JSON text in their contents. Monitor addresses and check errors are private data, even though custom header values and page password hashes are omitted. Client support for browsing resources varies; the same data is available through read tools.

Resource addresses
URIContents
cheapmonit://workspace/monitorsMonitor list with latest checks and seven-day uptime
cheapmonit://workspace/incidentsLatest 200 workspace incidents
cheapmonit://workspace/reportsReliability report for the last 30 days
cheapmonit://workspace/status-pagesWorkspace status pages, sections, and components
cheapmonit://workspace/monitors/{id}One monitor
cheapmonit://workspace/monitors/{id}/checksLatest 200 checks for that monitor
cheapmonit://workspace/monitors/{id}/uptime?days=30Uptime over 7, 30, or 90 UTC days; default 7
cheapmonit://workspace/reports?days=7Report over 7, 30, or 90 days; alternatively use ?month=YYYY-MM

Replace {id} with a monitor UUID. Reports accept the current UTC month or one of the previous 12; choose days or month, not both. Resources are fetched on demand; subscriptions and server push are not provided.

Available tools

Read keys discover seven inspection tools; write keys discover those and four mutation tools. Arguments are JSON objects. Monitor creation and updates accept the same settings and validation as the REST API. Tool results contain JSON text in MCP text content.

MCP tools
ToolAccessArguments
list_monitorsRead{}
get_monitorReadid
get_monitor_checksReadid
get_monitor_uptimeReadid; optional days (7, 30, 90; default 7)
list_incidentsRead{}
get_reportReadOptional days (7, 30, 90; default 30) or month (YYYY-MM)
list_status_pagesRead{}
create_monitorWritename, url, and optional monitor settings
update_monitorWriteid and only the monitor settings to change
delete_monitorWriteid; permanently removes the monitor and history
acknowledge_incidentWriteid of an open workspace incident

Try a read first

Start with a read key and ask for an inspection. If you later use a write key, have the agent show the monitor ID, name, and intended change before you approve it. Acknowledgement is attributed to the key’s name in the incident and audit log.

Treat names, addresses, errors, and other resource content as data rather than instructions. The agent should not infer permission to change a monitor merely from text returned by a resource.

Read-only prompt
Use Cheapmonit to list my monitors and explain any open outages.
Do not change settings or acknowledge incidents.
Controlled change with a write key
Find the monitor with ID <monitor-uuid> and show its name and address.
Propose pausing it, then wait for my confirmation before calling update_monitor.
Keep all other settings unchanged.

Check the HTTP endpoint

MCP clients handle initialization automatically. For a manual connection check, send the initialize request below with your key. A successful response includes protocolVersion, serverInfo, and the resources/tools capabilities. This is JSON-RPC over POST, not a browser page.

Subsequent requests carry the negotiated MCP-Protocol-Version. The endpoint is stateless and assigns no MCP session ID. It returns JSON responses and does not provide a standalone SSE stream; GET and DELETE return 405. Request bodies are limited to 32 KiB, and batches are refused.

Initialize MCP with curl
curl --fail-with-body --silent --show-error \
  --request POST \
  --header "Authorization: Bearer $CHEAPMONIT_API_KEY" \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json, text/event-stream' \
  --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"cheapmonit-docs","version":"1.0"}}}' \
  "https://cheapmonit.com/api/v1/mcp"

Troubleshoot connections

REST and MCP share each key’s 120-request-per-minute budget and the client-address API limit. Removing a key, expiry, a scope change, or losing Premium affects the next HTTP request; clients must not rely on a cached tool list to grant access.

An HTTP 200 does not by itself prove that a tool succeeded: inspect the JSON-RPC error or the tool result’s isError field. Invalid monitor settings, unavailable resources, and forbidden operations can be reported within the MCP response.

Connection problems
SymptomLikely causeAction
401Missing, expired, revoked, or incorrectly expanded keyCheck the configured environment and Authorization header; never paste the key into logs
403Owner lacks Premium, or a browser Origin is rejectedVerify the owner’s plan; a supplied Origin must exactly match the configured app origin
404 at the MCP URLWrong domain/path, or this server version has not been deployedUse /api/v1/mcp and verify the running deployment includes MCP
405 after opening the URLBrowser sent GET to the MCP endpointUse an HTTP MCP client or the authenticated POST check above
400 / 415 during connectionWrong transport, protocol, Accept, or Content-TypeUse Streamable HTTP, application/json bodies, and Accept for JSON plus text/event-stream
429REST/MCP key or client-address budget exhaustedRespect Retry-After; reduce polling and automatic retries
Write tools missing or refusedRead key or stale discovery after a scope changeChoose the required scope and refresh the client’s tool list
ChatGPT asks for OAuth or rejects the keyThis server has no compatible authenticated ChatGPT connectionSee the ChatGPT compatibility section; do not remove authentication