MCP agent access
Connect Claude Code and Cursor, check ChatGPT compatibility, and use workspace resources and tools.
8 min readThis 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 | Direct connection | Authentication |
|---|---|---|
| Claude Code | Supported | Streamable HTTP with a configured Bearer header |
| Cursor | Supported | Remote MCP URL with a configured Bearer header |
| ChatGPT custom MCP app | Not supported by this server’s current authentication | ChatGPT 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.
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.
- 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.
- Alternatively, merge the JSON example into .mcp.json at the project root. Use one configuration for this server name; preserve any existing servers.
- 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.
claude mcp add --transport http --scope local cheapmonit \
https://cheapmonit.com/api/v1/mcp \
--header 'Authorization: Bearer ${CHEAPMONIT_API_KEY}'{
"mcpServers": {
"cheapmonit": {
"type": "http",
"url": "https://cheapmonit.com/api/v1/mcp",
"headers": {
"Authorization": "Bearer ${CHEAPMONIT_API_KEY}"
}
}
}
}claude mcp get cheapmonit
claude mcp listConnect 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.
- 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.
- Merge the JSON below into .cursor/mcp.json in the project. For a personal configuration available across projects, use ~/.cursor/mcp.json instead.
- Open Cursor’s MCP settings, enable cheapmonit, and check the connection. In Agent, ask for a monitor list with no changes.
{
"mcpServers": {
"cheapmonit": {
"url": "https://cheapmonit.com/api/v1/mcp",
"headers": {
"Authorization": "Bearer ${env:CHEAPMONIT_API_KEY}"
}
}
}
}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.
| URI | Contents |
|---|---|
| cheapmonit://workspace/monitors | Monitor list with latest checks and seven-day uptime |
| cheapmonit://workspace/incidents | Latest 200 workspace incidents |
| cheapmonit://workspace/reports | Reliability report for the last 30 days |
| cheapmonit://workspace/status-pages | Workspace status pages, sections, and components |
| cheapmonit://workspace/monitors/{id} | One monitor |
| cheapmonit://workspace/monitors/{id}/checks | Latest 200 checks for that monitor |
| cheapmonit://workspace/monitors/{id}/uptime?days=30 | Uptime over 7, 30, or 90 UTC days; default 7 |
| cheapmonit://workspace/reports?days=7 | Report 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.
| Tool | Access | Arguments |
|---|---|---|
| list_monitors | Read | {} |
| get_monitor | Read | id |
| get_monitor_checks | Read | id |
| get_monitor_uptime | Read | id; optional days (7, 30, 90; default 7) |
| list_incidents | Read | {} |
| get_report | Read | Optional days (7, 30, 90; default 30) or month (YYYY-MM) |
| list_status_pages | Read | {} |
| create_monitor | Write | name, url, and optional monitor settings |
| update_monitor | Write | id and only the monitor settings to change |
| delete_monitor | Write | id; permanently removes the monitor and history |
| acknowledge_incident | Write | id 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.
Use Cheapmonit to list my monitors and explain any open outages.
Do not change settings or acknowledge incidents.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.
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.
| Symptom | Likely cause | Action |
|---|---|---|
| 401 | Missing, expired, revoked, or incorrectly expanded key | Check the configured environment and Authorization header; never paste the key into logs |
| 403 | Owner lacks Premium, or a browser Origin is rejected | Verify the owner’s plan; a supplied Origin must exactly match the configured app origin |
| 404 at the MCP URL | Wrong domain/path, or this server version has not been deployed | Use /api/v1/mcp and verify the running deployment includes MCP |
| 405 after opening the URL | Browser sent GET to the MCP endpoint | Use an HTTP MCP client or the authenticated POST check above |
| 400 / 415 during connection | Wrong transport, protocol, Accept, or Content-Type | Use Streamable HTTP, application/json bodies, and Accept for JSON plus text/event-stream |
| 429 | REST/MCP key or client-address budget exhausted | Respect Retry-After; reduce polling and automatic retries |
| Write tools missing or refused | Read key or stale discovery after a scope change | Choose the required scope and refresh the client’s tool list |
| ChatGPT asks for OAuth or rejects the key | This server has no compatible authenticated ChatGPT connection | See the ChatGPT compatibility section; do not remove authentication |