Connect Claude or Cursor to your cloud costs¶
The GetFinOps MCP server puts your cost, findings, remediation and verified-savings data directly in your AI assistant — so instead of exporting a CSV and pasting it into a chat, you just ask.
Most FinOps MCP servers are read-only. This one can also act — but only through the same approval workflow a human uses, with the same role checks, the same safety policy and the same automatic rollback. An agent can request a fix; approving it is still a decision a person makes.
What you can ask¶
- "What changed in my AWS spend this week, and which account drove it?"
- "Show me high-severity findings we haven't triaged yet."
- "How much have we actually saved — verified, not projected."
- "What did that stop-instance remediation actually do?"
Because the tools return your live data rather than a snapshot, the answers stay current.
1. Create an API token¶
In the dashboard, an owner creates a token (Settings → API tokens), or via the API:
curl -X POST https://<your-workspace>.app.getfinops.cloud/api/tokens \
-H "authorization: Bearer <your-JWT>" \
-H "content-type: application/json" \
-d '{"name":"Cursor laptop","scopes":["read"]}'
The response contains the token once. Store it like a password — only a hash is kept server-side, so it cannot be shown again. You can revoke it at any time.
Start read-only
scopes: ["read"] is the default and is all you need to ask questions. Only add "write" when you actually want the assistant to be able to raise remediation requests.
2. Point your client at it¶
Restart the client and the GetFinOps tools appear.
3. What the tools do¶
Read — available to any token:
| Tool | Answers |
|---|---|
get_cost_trend |
Cost over time. Date range, unblended vs amortized, daily or monthly, per cloud account. Tax, credits and refunds excluded by default. |
get_cost_by_account |
Month-to-date spend split across your connected accounts. |
list_findings |
Cost, security and tag-governance findings with their triage status. |
list_executions |
What was actually changed in your cloud — per-stage detail, before/after state, rollbacks. |
get_savings_summary |
Verified realized savings, re-measured after execution. Not estimates. |
list_approvals |
The remediation queue. Needs an admin-role token. |
Write — only with the write scope:
| Tool | Behaviour |
|---|---|
create_approval |
Requests a remediation. Creates a pending approval; executes nothing. Appears in your queue and Slack exactly like one raised by a person. |
decide_approval |
Approves or denies. Approving runs the remediation — and requires an admin token on a paid workspace. |
get_execution_status |
The outcome of a remediation. |
Why this is safe to give an agent¶
The write tools do not have a private back door into your cloud. They call the same internal endpoints the dashboard calls, so every existing control still applies:
- Approving is admin-only. A default token can raise a request but cannot approve it.
- Destructive actions need explicit confirmation. Deleting a volume or terminating an instance is refused unless the call passes
confirm: true— and it's refused before anything is touched. - Your safety policy still governs. Production-account blocks, action allow-lists, spend ceilings and blast-radius limits are unchanged.
- Rollback still happens. If the post-execution check fails, the change is automatically reverted.
- Everything is attributed. MCP-driven actions are recorded as
mcp:<user>in the audit trail, so you can always see what an assistant did versus a person. - Scoped to one workspace. A token only ever reaches the workspace it was created in.
The honest summary: an assistant can investigate freely and propose changes; the decision to apply one stays with a human, unless you deliberately grant a token the rights to do more.
Revoking access¶
Delete the token — in the dashboard, or:
curl -X DELETE https://<your-workspace>.app.getfinops.cloud/api/tokens/<token-id> \
-H "authorization: Bearer <your-JWT>"
It stops working on the next request. Tokens can also be given an expiry when created.