Expense MCP (beta)

Connect Findity expense functionality to Claude, ChatGPT, Gemini, or an agent you build yourself, using the Model Context Protocol.

This guide covers what the Findity Expense MCP server exposes, how to connect it from the major assistant clients, and what people realistically use it for. It is not an API reference — the MCP server is a surface over the Expense API, and the underlying endpoints are documented there.

ℹ️

The Expense MCP is in beta. Access is granted to partners who have registered interest — contact your Findity representative before following this guide. Behaviour, tool names, and the server URL may change before general availability.

What it is

The Model Context Protocol (MCP) is an open standard for connecting AI assistants to external systems. An MCP server publishes a set of callable tools; an MCP-compatible client — Claude, ChatGPT, Gemini, a coding agent, or something you build — discovers those tools and calls them on the user's behalf.

The Findity Expense MCP server publishes Findity's expense functionality as such a set of tools. A user asks their assistant a question in natural language, the assistant calls the relevant Findity tool, and the result lands in Findity exactly as if the user had done it in the app.

ℹ️

MCP is a protocol, not a product with a screen. There is no Findity MCP interface — the assistant is the interface. Results are visible in the standard Findity web and mobile views.

Two things follow from this that shape everything below:

  • The server acts as one authenticated user. It does not introduce a new permission model. It reuses the same login, the same roles, and the same approval flows as any other Findity client.
  • Partners can build against it, not just connect to it. An off-the-shelf assistant is the fastest route, but the same server backs a custom agent — which is what the Slack and Teams section is about.

This is a different server from the Docs MCP, which exposes Findity's API documentation to coding assistants. The Docs MCP helps a developer write an integration; the Expense MCP handles actual expenses.

Tools it exposes

This isn't a full API reference — see the Expense API docs for that — but it helps to know the shape of what's available before you start asking an assistant to use it.

AreaToolWhat it does
Identity & organizationsget_my_infoBasic info about the signed-in user (name, email, id).
list_organizationsOrganizations the user belongs to, with permissions and approval settings.
get_countersPending approvals, rejections, and inbox counts across all orgs.
Receipts & contentupload_base64_fileUploads a receipt/document as base64. Returns a content id.
get_content_tokenShort-lived token/URL for uploading or downloading a file directly.
get_content_infoMetadata for an uploaded content item.
scan_contentRuns OCR/AI scan on a receipt; returns extracted fields and raw text.
Expense draftsstart_expense_draftStarts a new expense draft, optionally pre-filled from a scan.
open_expense_draftOpens an existing saved expense for editing.
update_expense_draftApplies field values to an open draft.
list_field_optionsPicker options for a list-type field on a draft.
set_subsistence_routeSets the full travel route for an international per-diem draft.
save_expense_draftCommits an open draft as a new expense.
discard_expense_draftDiscards an open draft without saving.
Expense actions & lookupslist_loose_expensesExpenses not yet added to a report.
submit_expenseSubmits a single loose expense directly.
delete_expensePermanently deletes a draft expense.
Report draftsstart_report_draftStarts a new expense report draft.
open_report_draftOpens an existing saved report for editing.
update_report_draftApplies field values to an open report draft.
save_report_draftCommits an open report draft as a new/updated report.
discard_report_draftDiscards an open report draft without saving.
Report actions & lookupslist_expense_reportsReports for an organization, with status filters.
submit_expense_reportSubmits a draft report for approval/processing.
delete_expense_reportPermanently deletes a draft report.
Approvalslist_approvalsReports awaiting the signed-in user's approval.
get_approval_report_fieldsFull field details for a report within an approval.
get_approval_expense_fieldsFull field details for an expense record within an approval.
approve_expense_reportApproves a report.
reject_expense_reportRejects one or more expense records with comments.
Confirmationask_confirmationConfirm/cancel prompt shown before any destructive action, single or batch.
User settingsget_user_settingsThe signed-in user's personal settings as editable fields.
update_user_settingsApplies values to a settings draft.
list_settings_field_optionsPicker options for a list-type settings field.
save_user_settingsCommits settings changes.
discard_user_settingsDiscards a settings draft without saving.
Guestslist_guestsResolves ambiguous or partial participant names for an organization.
MemoryrememberSaves or updates a persistent memory for the user.
get_memoriesReturns all memories saved for the user.
forgetDeletes a saved memory by key.
⚠️

Destructive tools (delete_expense, delete_expense_report, submit_expense, submit_expense_report, approve_expense_report, reject_expense_report, and their batch equivalents) always route through ask_confirmation first. An assistant that calls one of these directly without confirming is not behaving as designed.

What it can access

A session runs as the user who signed in, with exactly the access that user has in the Findity app.

ScopeAccess
The signed-in user's own expenses and reportsYes — read and write.
Expenses awaiting the signed-in user's approvalYes, if that user is configured as an approver.
Any other user's expensesNo.
Organisation-wide expense dataNo.

Actions taken through the MCP route through the same roles and approval flows as any other client. Submitting an expense through an assistant puts it into normal approval routing; approving one through an assistant is the same approval the user could perform in the app.

⚠️

There is no separate control for MCP access in beta. Access mirrors app access — a user who can log in to Findity can connect the MCP server, and a user who cannot, cannot. Partners and organisation admins cannot enable it for a subset of users, restrict it, or apply MCP-specific permissions on top of an existing role.

Out of scope in beta

  • Retrieving expenses across the organisation
  • Acting on behalf of another user
  • Forwarding approved expenses to external systems

Before you start

  1. Confirm with Findity that the Expense MCP is enabled for your environment.
  2. Have Findity credentials for the user who will be signing in. Access follows that user's existing role, so test with an account that has the permissions you want to demonstrate — including approver rights if you plan to try the approval flows.
  3. Use an MCP-compatible client that supports remote servers over HTTP. Clients that only support locally-installed servers cannot reach a hosted endpoint.

Connect the server

Server URL

https://api.findity.com/api/mcp

White label partners use their own prefix in place of api:

https://{partner-prefix}.findity.com/api/mcp

There is nothing to install and no API key to issue. On first use the client opens a browser window and prompts for a Findity sign-in, exactly as the app does. Once signed in, the client holds the session and the tools become available to the assistant.

In Claude Desktop or claude.ai, open Settings → Connectors → Add custom connector, give it a name such as Findity, and paste the server URL. Claude opens a browser window for the Findity sign-in and the connector appears as enabled when it completes.

In Claude Code, add it from the terminal:

claude mcp add --transport http findity https://api.findity.com/api/mcp

Then run /mcp in a session to complete the sign-in and confirm the server is connected.


📘

Client menus move between releases. If the paths above do not match what you see, look for the section your client uses for MCP servers, remote servers, or connectors — the only value it needs is the server URL.

Verify the connection

Ask the assistant something that requires a tool call and has an unambiguous answer, such as:

What expenses are currently waiting for my approval?

A working connection produces an answer drawn from Findity, and the client shows the tool call it made. An assistant that answers in general terms without calling a tool is not connected — check that the connector is enabled for the current conversation, not just added to the account.

What you can ask it to do

The assistant decides which tools to call from what the user asks, so there are no commands to memorise. Two patterns are worth calling out separately, because they need different things from the person using them.

Everyday questions and actions

Single requests, answered in one or two tool calls. These are the ones that remove a context switch — the user stays in the assistant instead of opening Findity.

Submit this receipt as a travel expense on my Berlin trip report.

What's the status of my March expense report?

Which expenses are waiting for my approval?

How much have I spent on client entertainment this quarter?

Agent-assisted work

Longer sequences where the assistant does the repetitive part and the user stays in the loop on the decisions.

Bulk capture. The user uploads a batch of receipts at once. The agent categorises each one, drafts a description, assembles them into an expense, and submits it for approval — turning an evening of item-by-item entry into one review pass.

Approver triage. An approver has the agent work through their own approval queue, surfacing which items sit below threshold and within policy, and approving those on the user's instruction. The approvals are the user's own, made with the user's own rights.


📘

Both patterns run inside a session the user has authenticated. Neither is organisation-wide automation, and neither runs on a schedule — the agent works while the user is there.

Troubleshooting

SymptomWhat to check
The client shows the server as added but no tools appearThe sign-in did not complete. Remove and re-add the connector, and watch for the browser window — some clients open it behind the active window.
The assistant answers without calling a Findity toolThe connector is added but not enabled for that conversation. Enable it per chat where the client requires it.
Sign-in succeeds, but expenses are missingThe session is running as a different Findity user than expected, or the user's role does not include what you are asking for. Confirm which account completed the sign-in.
A partner environment does not connectCheck the prefix in the URL. Partners connect through https://{partner-prefix}.findity.com/api/mcp, not the default host.
The client cannot reach the server at allThe client only supports locally-installed MCP servers, or the environment blocks outbound access to the Findity host.

Next steps


Did this page help you?