← Back to sign in

Extrack MCP connector

Last updated: May 12, 2026

Overview

Extrack exposes a remote Model Context Protocol (MCP) server over HTTPS with OAuth 2.0 (Amazon Cognito). Assistants such as Claude fetch your workspace context in one bundled call (accounts, people, categories, and recent pending drafts) and then create, read, or delete transaction drafts before you post them in the web app.

There is no separate desktop “MCP binary” to install; the connector is a hosted endpoint you attach in your assistant's connector settings.

Claude.ai (web)

  1. Open Settings → Connectors → Add custom connector.
  2. URL: Paste the HTTPS MCP endpoint for your Extrack environment. For Claude.ai we recommend …/api on your MCP host (Streamable HTTP — not the REST API). …/mcp is also supported. Use the exact URL your operator provides.
  3. Advanced → OAuth Client ID: Use the public Cognito app client ID for the Extrack web app (same client the browser uses). Leave the client secret empty unless your operator instructs otherwise.
  4. Complete sign-in when prompted. The Cognito **app client** must list each assistant's OAuth redirect (Claude: https://claude.ai/api/mcp/auth_callback, https://claude.com/api/mcp/auth_callback; ChatGPT and others: the URL shown in that product's connector settings). Same requirement for Managed Login and classic Hosted UI.

Prerequisites

  • An Extrack account and a workspace where the service is deployed and healthy.
  • The automation inbox capability on your profile. Without it, draft tools return 403, and account / people listing (which the agent needs to resolve ids before drafting) is also gated.
    • Today: enabled for platform / workspace admins and for users who have had the capability assigned to them.
    • At general availability: bundled with every VIP subscription — upgrading the plan will turn the connector on without any additional setup.
  • Transaction drafts must be enabled on the backend (draft storage configured). If not, draft routes may be unavailable.

Tools

ToolPurpose
extrack_get_contextSingle bundled read — returns the workspace's open accounts, people directory, categories, and the most recent pending transaction drafts (up to 20). Call this once at the start of the conversation so the assistant can pass real ids to every create tool instead of fanning out per-resource list calls.
extrack_create_transaction_draftCreate a generic draft — expense, income, or transfer — using real account ids from the context bundle, separate expense & income amounts, date, an optional category name, an external reference, and draft-level split IOUs (with real person ids).
extrack_create_split_expense_draftOne-shot Splitwise-style split: total expense + paid-from account + per-person allocations. The web app ensures each person's Lent receivable when you post.
extrack_create_lend_money_draft“I lent money to X” — a 100% IOU draft to one person from your chosen account.
extrack_create_repayment_draft“X paid me back” — a transfer draft from the person's Lent receivable to your cash account.
extrack_get_transaction_draftFetch one draft by id.
extrack_delete_transaction_draftDelete a draft without posting to the ledger.

Posting real transactions: Drafts are stored as plaintext on the server for staging. Open the Extrack web app (Automation inbox or the transaction flow with a draft id) to complete posting. The app removes the draft after a successful create. Lending, split, and repayment drafts carry split intents rather than real receivable ids — the web client resolves or creates the right per-person Lent account before writing the transaction.

Agent rules the connector ships

The Extrack MCP server sends a short set of agent rules with the MCP instructions so compliant clients (Claude, Cursor, ChatGPT) apply them without extra prompting.

  • Context first. Call extrack_get_context once at the start of the conversation, then reuse its accounts / persons / categories / recentDrafts arrays for the rest of the turn. The assistant should not re-list before every create — one bundled GET avoids the extra round-trips that used to make tool calls slow.
  • Real ids only. Every extrack_create_* tool expects real accountId / debitAccountId / creditAccountId / personId values copied verbatim from the context bundle. The assistant must never guess or invent UUIDs.
  • Ask before picking. When more than one account or person could plausibly match your wording, the assistant lists the candidates back to you and asks which one to use rather than auto-selecting.
  • Duplicate awareness (advisory). recentDrafts is part of the context bundle. If a new request clearly matches an existing pending draft (same title, amount, and day), the assistant flags the conflict before creating. This is not server-enforced — the server no longer blocks a create on a suspected duplicate, so there is no separate confirmDuplicate step.

Troubleshooting

  • 403 on draft tools: confirm your user has the automation inbox capability and a compatible API version.
  • TLS / certificate errors: The MCP hostname must present a valid certificate for that host. Use the HTTPS URL your operator provides.
  • Cursor — "Failed to complete OAuth exchange" / MCP Logs: After you sign in, the IDE exchanges the authorization code for tokens by calling Amazon Cognito (/oauth2/token), not the Extrack MCP Lambda. Until that succeeds, Cursor never sends Authorization: Bearer, so API logs may show missing_bearer — that is expected until the exchange works. In the browser devtools Network tab, find the failed token request and read Cognito's JSON error (e.g. invalid_grant, invalid_client). Common fixes: add cursor://anysphere.cursor-mcp/oauth/callback to the same Cognito app client allowed callback URLs as the web client id; use Logout in MCP settings and reconnect in a single flow; avoid duplicate or stale callbacks ("Ignoring OAuth callback" in the log).
  • Claude.ai / Cursor — "Authorization with the MCP server failed" (Cognito invalid_grant): Amazon Cognito does not support RFC 8707 resource indicators, so the token exchange fails whenever the preceding /oauth2/authorize carried a resource= parameter — and MCP clients add that parameter automatically. The Extrack remote MCP works around this by publishing itself as the OAuth Authorization Server: it serves /.well-known/oauth-authorization-server and proxies /oauth2/authorize + /oauth2/token to Cognito with resource stripped. If a connector still fails, confirm the metadata document at /.well-known/oauth-protected-resource/api (or …/mcp if that is your connector path) advertises this MCP origin (not the Cognito issuer) under authorization_servers. If the browser still opens Cognito’s hosted UI with resource= on the authorize URL, remove the connector and add it again using a different path (e.g. switch from /mcp to /api) so Claude refetches OAuth metadata.
  • Other clients: Use the same HTTPS MCP URL and OAuth where the product supports Streamable HTTP MCP with your identity provider.

Security & privacy

  • Treat OAuth tokens as secrets; do not paste them into shared prompts.
  • Use HTTPS for every hop. See the Privacy Policy for how Extrack handles data.