Appearance
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:
| Setting | Value |
|---|---|
| Server URL | https://mcp.getinfrly.com/mcp |
| Transport | Streamable HTTP (sometimes labeled "HTTP" or "remote") |
| Authentication | HTTP 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
- Make sure your account has a validated card under Billing.
- Open Account (bottom-left menu → Account) and find Access tokens.
- 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).
- 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 managerCreate 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
Authorizationrequest header (Anthropic currently offers header authentication for connectors as a beta). - Individual use: connect through the
mcp-remotebridge (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/mcpThe 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-remotebridge as the server command:npx -y mcp-remote https://mcp.getinfrly.com/mcp --header "Authorization:${INFRLY_AUTH}", withINFRLY_AUTHset toBearer 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
apifailed. Read the build logs and tell me why." - "Show me the last 100 lines of logs for
web-appand look for errors." - "Is
apiclose to its memory limit this week?" - "Did the
nightly-synccron job succeed last night?" - "What am I spending this month, per service?"
- "Which environment variables does
apihave? IsDATABASE_URLset?"
Available tools
| Tool | What it returns |
|---|---|
list_projects | Your projects and how many services each has |
list_services | All services (optionally one project's) with kind, plan, status and URL |
get_service | One service's status: latest deployment, firing alerts, domains, plan and limits, build settings |
list_deployments | Deployment history with status, commit and error message |
get_deployment_logs | Build and deploy logs of one deployment (last 1–1000 lines, optionally errors only or milestones only) |
get_service_logs | Recent output of a running Web Service or Static Site, or the last few runs of a Cron Job (1–500 lines) |
list_cron_executions | Recent Cron Job runs with status, duration, exit reason and cost |
get_service_metrics | CPU, memory or disk usage over the last hour, week or month, compared with the plan limit |
get_billing_summary | Spend so far this month per service, whether a card is on file, and recent invoices |
list_environment_variable_names | Environment 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 Unauthorizedon 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:
| Limit | Value |
|---|---|
| Requests per token | 60 per minute |
| Requests per account (all tokens) | 120 per minute |
Application-log reads (get_service_logs) per account | 12 per minute |
| Request body size | 64 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
| Symptom | Cause and fix |
|---|---|
401 Unauthorized | The 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 Requests | You hit a rate limit. Wait for the number of seconds in Retry-After. |
| The tool shows no Infrly tools | Restart 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 Infrly | It 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 see | Copy the ID from list_services. Names aren't IDs, and deleted services aren't available. |
| Logs say they're unavailable | The service hasn't been deployed yet, or it's a database. Runtime logs only exist while an instance is running. |