Skip to content

Connect AI Tools (MCP) ​

Infrly runs a remote Model Context Protocol (MCP) server, so any MCP-compatible AI tool can read your Infrly account and answer questions like "why did my last deploy fail?", "is my API healthy?" or "what am I spending this month?".

Infrly doesn't run an AI of its own and isn't tied to any vendor. Your tool (an editor assistant, a coding agent, a chat app) does the thinking and asks Infrly's MCP server for data. Access is read-only: nothing through MCP can create, change, deploy, restart or delete anything, and it can't touch billing.

Connection details ​

Every client needs the same three things:

SettingValue
Server URLhttps://mcp.getinfrly.com/mcp
TransportStreamable HTTP (sometimes labeled "HTTP" or "remote")
AuthenticationHTTP header Authorization: Bearer <your access token>

Set up before October 2026 with https://mcp.infrlyapp.com/mcp? That address keeps working with the same token; you don't need to change anything.

Infrly authenticates with a personal access token sent as a header, not with an OAuth sign-in flow. Use a client that lets you set a custom header on a remote server; all the clients below do. For clients that only run local (stdio) servers, see Any other client.

MCP access requires a validated payment method on your account. Using it costs nothing extra.

1. Create an access token ​

  1. Make sure your account has a validated card under Billing.
  2. Open Account (bottom-left menu → Account) and find Access tokens.
  3. Click New token, give it a name you'll recognize (for example "Cursor on work laptop"), and pick an expiry (7 days to 1 year, 90 by default).
  4. Copy the token. It's shown only once. Infrly stores only a hash of it, so nobody (including Infrly) can show it to you again. If you lose it, revoke it and create a new one.

Tokens look like infrly_pat_…. Treat one like a password: don't paste it into chats, commit it to a repository or share it.

Keep the token out of config files

Most clients can read the token from an environment variable, so config files (including ones you commit) never contain it. The examples below use INFRLY_TOKEN:

bash
export INFRLY_TOKEN="infrly_pat_…"   # add to your shell profile, or use your OS keychain / secret manager

Create a separate token for each tool or machine. Then you can revoke one without breaking the others, and the Used … time on each token shows which ones are active.

2. Check the token (optional) ​

This works without any AI tool and confirms the URL, token and payment method in one step:

bash
curl -s https://mcp.getinfrly.com/mcp \
  -H "Authorization: Bearer $INFRLY_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

A JSON list of tools means everything works. An error message tells you what to fix (see Troubleshooting).

3. Configure your client ​

Pick your tool. Each one points at the same server URL and sends the same header; only the config format differs. After changing a config, restart the tool or reload its MCP servers.

VS Code (GitHub Copilot) ​

Add to .vscode/mcp.json in a workspace, or to your user configuration (Command Palette → MCP: Open User Configuration). VS Code asks for the token once and stores it securely:

json
{
  "inputs": [
    { "type": "promptString", "id": "infrly-token", "description": "Infrly access token", "password": true }
  ],
  "servers": {
    "infrly": {
      "type": "http",
      "url": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer ${input:infrly-token}" }
    }
  }
}

Then open Copilot Chat in Agent mode; Infrly's tools appear in the tools picker.

JetBrains IDEs, Visual Studio and other Copilot IDEs ​

GitHub Copilot supports MCP in JetBrains IDEs, Visual Studio, Xcode and Eclipse. In Copilot Chat, switch to Agent mode and open the MCP configuration from the tools icon. In JetBrains IDEs the headers go under requestInit:

json
{
  "servers": {
    "infrly": {
      "url": "https://mcp.getinfrly.com/mcp",
      "requestInit": {
        "headers": { "Authorization": "Bearer infrly_pat_YOUR_TOKEN" }
      }
    }
  }
}

In Visual Studio, add the server with the + button in the tools dialog: type HTTP, the URL above, and an Authorization header.

Cursor ​

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

json
{
  "mcpServers": {
    "infrly": {
      "url": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer ${env:INFRLY_TOKEN}" }
    }
  }
}

Windsurf (Devin Desktop) ​

Add to mcp_config.json (~/.config/devin/mcp_config.json; older Windsurf versions use ~/.codeium/windsurf/mcp_config.json):

json
{
  "mcpServers": {
    "infrly": {
      "serverUrl": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer ${env:INFRLY_TOKEN}" }
    }
  }
}

Claude Code ​

bash
claude mcp add --transport http infrly https://mcp.getinfrly.com/mcp \
  --header "Authorization: Bearer $INFRLY_TOKEN"

To share the setup through a project's .mcp.json, reference the variable instead of the value:

json
{
  "mcpServers": {
    "infrly": {
      "type": "http",
      "url": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer ${INFRLY_TOKEN}" }
    }
  }
}

Claude Desktop and Claude.ai ​

  • Organization plans: an organization admin can add Infrly as a custom connector with the URL above and an Authorization request header (Anthropic currently offers header authentication for connectors as a beta).
  • Individual use: connect through the mcp-remote bridge (needs Node.js). In Claude Desktop, open Settings → Developer → Edit Config and add:
json
{
  "mcpServers": {
    "infrly": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.getinfrly.com/mcp", "--header", "Authorization:${INFRLY_AUTH}"],
      "env": { "INFRLY_AUTH": "Bearer infrly_pat_YOUR_TOKEN" }
    }
  }
}

OpenAI Codex ​

Add to ~/.codex/config.toml. Codex reads the token from the environment variable you name:

toml
[mcp_servers.infrly]
url = "https://mcp.getinfrly.com/mcp"
bearer_token_env_var = "INFRLY_TOKEN"

Gemini CLI ​

bash
gemini mcp add --transport http --header "Authorization: Bearer $INFRLY_TOKEN" infrly https://mcp.getinfrly.com/mcp

The command expands $INFRLY_TOKEN when you run it. Or add it to ~/.gemini/settings.json yourself:

json
{
  "mcpServers": {
    "infrly": {
      "httpUrl": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer infrly_pat_YOUR_TOKEN" }
    }
  }
}

Zed ​

In settings.json (Settings → AI → MCP Servers, or ~/.config/zed/settings.json):

json
{
  "context_servers": {
    "infrly": {
      "url": "https://mcp.getinfrly.com/mcp",
      "headers": { "Authorization": "Bearer infrly_pat_YOUR_TOKEN" }
    }
  }
}

Any other client ​

  • Clients with remote (Streamable HTTP) servers and custom headers: use the connection details. The config usually looks like the Cursor example with a different key name for the URL.
  • Clients that only support local (stdio) servers: run the mcp-remote bridge as the server command: npx -y mcp-remote https://mcp.getinfrly.com/mcp --header "Authorization:${INFRLY_AUTH}", with INFRLY_AUTH set to Bearer infrly_pat_….
  • Clients that only offer OAuth sign-in (no header field) can't connect directly yet; use the bridge above if they run local servers.

Infrly's MCP server follows the MCP specification (protocol versions 2024-11-05 through 2025-11-25) and only publishes tools, so any spec-compliant client works.

4. Ask away ​

Some things to try in your tool's chat or agent mode:

  • "List my Infrly services and tell me which ones aren't running."
  • "My last deploy of api failed. Read the build logs and tell me why."
  • "Show me the last 100 lines of logs for web-app and look for errors."
  • "Is api close to its memory limit this week?"
  • "Did the nightly-sync cron job succeed last night?"
  • "What am I spending this month, per service?"
  • "Which environment variables does api have? Is DATABASE_URL set?"

Available tools ​

ToolWhat it returns
list_projectsYour projects and how many services each has
list_servicesAll services (optionally one project's) with kind, plan, status and URL
get_serviceOne service's status: latest deployment, firing alerts, domains, plan and limits, build settings
list_deploymentsDeployment history with status, commit and error message
get_deployment_logsBuild and deploy logs of one deployment (last 1–1000 lines, optionally errors only or milestones only)
get_service_logsRecent output of a running Web Service or Static Site, or the last few runs of a Cron Job (1–500 lines)
list_cron_executionsRecent Cron Job runs with status, duration, exit reason and cost
get_service_metricsCPU, memory or disk usage over the last hour, week or month, compared with the plan limit
get_billing_summarySpend so far this month per service, whether a card is on file, and recent invoices
list_environment_variable_namesEnvironment variable names and whether each is used at build or runtime

Runtime logs work the same way as in the dashboard: they're live, not stored history (see Deployment & Runtime Logs). Databases and Key Value instances don't have application logs.

What MCP never gives out ​

  • Environment variable values. Only names. MCP has no way to read values at all.
  • Credentials: database and Key Value passwords, connection strings, GitHub tokens, session data, payment card details, invoice payment links.
  • Anything from other accounts. Every request is limited to your own projects and services. IDs from other accounts return "not found".

As an extra safeguard, Infrly masks common secret formats (passwords in URLs, API_KEY=… lines, bearer tokens, cloud and payment-provider keys, private keys) in logs and commands before returning them. That masking catches common patterns only. The real protection is not printing secrets in your app's or build's output in the first place.

Logs are untrusted input

Logs contain whatever your code, dependencies and visitors produced, so they could contain text written to manipulate an AI ("ignore previous instructions…"). Infrly labels log output as untrusted, and MCP access is read-only, so such text can't make Infrly change anything. Still review what your AI tool suggests before acting on it in other tools.

Manage and revoke access ​

On Account → Access tokens you can see each token's name, prefix (infrly_pat_Ab12…), when it was last used and when it expires.

  • Revoke a token there when a machine is lost, someone leaves, or you're done with a tool. Revocation is immediate; the tool gets 401 Unauthorized on its next request.
  • Expired tokens stop working automatically and disappear from the list. Create a new one when that happens.
  • Removing your last payment method pauses MCP for all your tokens (within about a minute). They work again once a validated card is back.
  • "Log out all devices" signs out browser sessions only. It doesn't revoke access tokens; revoke those separately.
  • You can have up to 10 active tokens.

Limits ​

To keep the service fast and fair, requests are rate limited:

LimitValue
Requests per token60 per minute
Requests per account (all tokens)120 per minute
Application-log reads (get_service_logs) per account12 per minute
Request body size64 KB

Going over a limit returns 429 Too Many Requests with a Retry-After header; clients retry automatically or you can try again shortly. Repeated requests with invalid tokens from one IP address are blocked for a few minutes.

Troubleshooting ​

SymptomCause and fix
401 UnauthorizedThe token is missing, mistyped, expired or revoked. Check the header is exactly Authorization: Bearer infrly_pat_…, or create a new token.
403 "requires a validated payment method"Add or re-validate a card under Billing.
429 Too Many RequestsYou hit a rate limit. Wait for the number of seconds in Retry-After.
The tool shows no Infrly toolsRestart the tool (or reload its MCP servers) after editing its config. Check the tool's MCP log: a 401 means the header isn't being sent (for example an unset INFRLY_TOKEN). If the tool only supports local servers, use mcp-remote (Any other client).
The tool opens a browser sign-in for InfrlyIt didn't find an Authorization header in the config and fell back to OAuth, which Infrly doesn't offer. Add the header as shown for your tool.
"Service not found" for a service you can seeCopy the ID from list_services. Names aren't IDs, and deleted services aren't available.
Logs say they're unavailableThe service hasn't been deployed yet, or it's a database. Runtime logs only exist while an instance is running.

Next ​

Infrly — You commit. We ship. Need something custom? support@infrlyapp.com