Savi MCP server

Connect AI assistants to Savi Finance with the hosted Model Context Protocol (MCP) server: endpoint, sign-in flow and available tools.

Use with an AI agent

Export this page as Markdown or bundle it with a task for your agent.

Try a task
Preview the prompt that will be copied

The Savi MCP server is a remote Model Context Protocol server. It lets an AI assistant read and manage your Savi accounts, transactions, goals, categories, tags and more, using the same data as the Savi apps.

Server URL

text
https://mcp.financesavi.com/mcp

Add this URL as a custom or remote MCP server in your client. Clients that implement the MCP authorization spec need no other configuration: they discover the authorization server, register themselves and open a browser window for you to sign in. See Authentication for the full flow.

Connect a client

Choose your client to open its available one-click connection or generate a configuration. Savi handles sign-in through OAuth; you do not need to create or paste a token.

Connect your MCP client

Choose your AI workspace and prepare a secure Savi connection.

Streamable HTTP · OAuth

Choose your MCP client

Select where your AI workspace runs.

Used as the key in your client configuration.
One-click integration

Cursor install prompt

Open Cursor's MCP install prompt with the Savi server URL pre-filled.

Open in Cursor

Generated defaults contain no bearer token. Sign in through Savi OAuth after setup.

Configuration

Copy this entry into your client to finish setup.

File.cursor/mcp.json
mcp.json
{
  "mcpServers": {
    "savi": {
      "url": "https://mcp.financesavi.com/mcp"
    }
  }
}
Setup commands and configuration for all clients
Claude Code
bash
claude mcp add --transport http savi https://mcp.financesavi.com/mcp

Cursor uses .cursor/mcp.json; VS Code uses .vscode/mcp.json. The Claude Desktop JSON option uses claude_desktop_config.json with the third-party mcp-remote bridge and requires Node.js. The Add to Claude button opens a pre-filled remote connector form.

To install in Cursor, choose Cursor in the connection generator and select Open in Cursor. Cursor asks you to confirm the Savi MCP server; after installation, connect and complete Savi sign-in in your browser. For manual setup, add the generated server entry to a project.cursor/mcp.json or your personal ~/.cursor/mcp.json. See the Cursor MCP guide for details.

  1. The client discovers Savi's authorization server and registers itself.
  2. Your browser opens a Savi page. Sign in with your email and the 6-digit code.
  3. Review what the app is asking for and approve it. Untick Allow changes to give read-only access.
  4. You are returned to the client, which can now call the tools below.

Verify your first read-only call

  1. Confirm the connection. Return to the client after consent. Start or reconnect the Savi server and inspect its discovered tools. Seeing a sign-in page alone does not verify the connection.
  2. Check your identity. Call get_current_user_info with no arguments. A successful result confirms that the client can act as the signed-in user.
  3. Read your accounts. Call list_accounts with no arguments. An empty list is a valid result when you have no accounts. Use IDs returned by this call for later account operations.
  4. Inspect the result. Check for a top-level JSON-RPC error, then result.isError. The local playground checks input and envelope shapes; only a call from your connected client verifies real access.
Copy this first-call prompt into your connected assistant
Use Savi get_current_user_info to confirm which user is signed in, then list_accounts to summarize my accounts. Make read-only calls only; do not create, update, or delete anything. If a call fails, explain the error instead of inventing data.

In VS Code, use MCP: List Servers to inspect the server and select its tools in chat. Client trust and individual tool approvals are separate from Savi's OAuth consent; keep each approval visible while exploring.

Verify with MCP Inspector

For a client-independent walkthrough, install Node.js 22.19 or newer and launch the official MCP Inspector:

bash
npx @modelcontextprotocol/inspector --server-url https://mcp.financesavi.com/mcp --transport http

Open the authenticated local URL printed in the terminal. Complete OAuth using the email-code and consent pages, then inspect the tools and run the two read-only calls above. Use the protocol and network views to distinguish an HTTP failure from a tool error. Keep Inspector's local session token private.

Connection troubleshooting

What you seeWhat to do
401 before sign-inThis starts OAuth discovery. Let the client follow the WWW-Authenticate metadata URL. An API email-code token cannot replace an MCP OAuth token.
Sign-in succeeds but no tools appearReturn to the client, reconnect or start the server, and enable Savi tools. Check host trust and tool selection. Use Inspector to isolate client setup from the Savi connection.
Consent was denied or the callback failedRestart authorization in the client. For a custom OAuth client, match the registered redirect URI exactly and use the same PKCE verifier. Do not reuse a single-use authorization code.
A write reports insufficient scopeA read-only grant cannot write. Reauthorize only if you intend to allow changes, then review the requested permissions. Retrying the same call does not add scope.
A session request returns 404Start a new initialization handshake without the old session ID. Let your MCP SDK manage the new session.
A tool returns isError: trueRead its content and verify the arguments, ownership, and current IDs. Check whether a write completed before retrying after a timeout.

Endpoints

All endpoints are served from https://mcp.financesavi.com.

PathMethodPurpose
/mcpPOST, GET, DELETEMCP streamable HTTP transport. Requires a bearer token.
/.well-known/oauth-protected-resourceGETProtected resource metadata (RFC 9728).
/.well-known/oauth-authorization-serverGETAuthorization server metadata (RFC 8414).
/registerPOSTDynamic client registration (RFC 7591).
/authorizeGETStart sign-in in a browser.
/tokenPOSTExchange an authorization code or a refresh token for tokens.
/revokePOSTRevoke an access or refresh token (RFC 7009).

Tools

The server exposes 69 tools. Tools act as the signed-in user, so none takes a user ID. Browse the complete tool reference.

Test clocks for time-based flows

Test clocks create isolated transaction feeds and goal timelines for integration tests. They let an agent exercise scheduled activity without waiting for real bank posts or changing the user's financial records. Start with create_test_clock, then use its returned clock.id with advance_test_clock and read_test_clock.

create_test_clock arguments
{
  "frozenTime": "2026-10-02T00:00:00Z",
  "transactions": [
    {
      "at": "2026-10-03T00:00:00Z",
      "name": "Simulated payroll",
      "amount": 2500,
      "currency": "CAD",
      "type": "INCOME"
    }
  ],
  "goals": [
    {
      "name": "Emergency fund",
      "targetAmount": 1000,
      "initialAmount": 100,
      "contributions": [
        {
          "at": "2026-10-03T00:00:00Z",
          "amount": 150
        },
        {
          "at": "2026-10-04T00:00:00Z",
          "amount": 250
        }
      ]
    }
  ]
}

The clock exposes due transactions and contributions as posted, with later events listed as pending. Read them through these test-clock tools; they do not appear in the ordinary transaction or goal lists. Its schedule is immutable after creation, simulated time cannot move backwards, and the maximum time is returned as maxTime. Clocks expire after seven days; use delete_test_clock to clean up sooner. Creating, advancing, and deleting require the write scope; reading requires read.

Read-only and write access

Every tool is either read-only or changes data. Tokens carry the read scope, the write scope, or both, and a tool call without the required scope is rejected. When you approve a connection you can untick Allow changes to give an assistant read-only access. Each tool also advertises MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) so clients can warn before deleting anything. The tool reference lists the effect and scope of each tool.

Session lifecycle

  1. Complete OAuth sign-in and send initialize to negotiate the protocol version and capabilities.
  2. Send notifications/initialized, then discover tools with tools/list.
  3. Invoke a tool with tools/call. Include the negotiated protocol version and the server-issued Mcp-Session-Id on subsequent HTTP requests. Send Accept: application/json, text/event-stream and handle both JSON and SSE responses.
  4. Keep session handling in your MCP SDK or host client. A raw tool frame alone does not establish a session.

Protocol negotiation comes from the server's initialization response. These frames describe Savi's current session-based transport; copying a newer specification's sessionless flow does not change the deployed server.

User confirmations and sensitive input

When implementing an MCP server workflow that needs explicit user confirmation before a consequential action, request it with MCP elicitation. Clients should proceed only when the response action is accept; decline and cancel are not approval. In protocol version 2026-07-28, elicitation is delivered through multi-round-trip requests, not the legacy server-initiated request flow.

Never ask users to enter passwords, API keys, access tokens, or payment credentials in a free-text message or form-mode elicitation. Use URL-mode elicitation to send them to a trusted HTTPS flow where the credentials go directly to your service and stay out of the MCP client and model context. Do not put secrets in the URL.

MCP Sampling was deprecated in protocol version 2026-07-28 (July 28, 2026). New implementations should not adopt it; if your server needs model generation, integrate directly with the model provider API. See the official Sampling guidance.

Protocol errors and tool errors

A protocol failure returns a top-level JSON-RPC error object. A tool operation can instead return a result with isError: true. Check both layers before consuming content; valid JSON and a successful HTTP exchange do not prove that the operation succeeded.

Illustrative protocol error
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid tool arguments"
  }
}
Illustrative tool execution error
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "content": [
      {
        "type": "text",
        "text": "The operation could not be completed."
      }
    ]
  }
}

Each tool reference includes a local playground for inspecting these envelopes and validating arguments. The examples simulate protocol shapes; they do not access your data.

Resources and prompts

The public tool manifest includes every tool's complete nested input schema, annotations, and scope. Each tool page also includes its full JSON Schema in raw Markdown and copied agent prompts.

Savi currently registers tools only. It does not advertise MCP resources, resource templates, resource subscriptions, or server prompt templates. The natural-language examples below are tasks you give your assistant, rather than entries returned by prompts/list. Use the tool reference for supported capabilities.

Rate limit

Each signed-in user can make up to 300 MCP requests per minute. Beyond that the server answers 429 with a Retry-After header.

Example prompts

  • “Where did my household spending change this month?”
  • “List my last 20 transactions over $100.”
  • “Create a savings goal for a $3,000 vacation.”