
Export corporate card transactions for a domain by date range. Set transactiontype to 'Unreported' for only card expenses not yet on a report, or 'All' for every one. Requires a domain admin credential. Use getdomain_cards to see the cards on a domain.
List all corporate cards registered on a domain. Returns card details including bank, card name, number, and assigned employee. Use the domain from your company email (e.g. mycompany.com).
Add or update employees on a policy. Each employee needs email and manager email. Note: this API is deprecated by Expensify. Use list_policies first to find policy IDs.
Create one or more standalone expenses. Each expense needs merchant, amount (cents), currency, and date. Optionally attach to a report or policy. Use get_policy to check valid categories/tags.
List all accessible Expensify policies (workspaces). Returns policy IDs, names, types, and roles. Use this first to get policy IDs needed by other tools.
Get detailed policy config including categories, tags, report fields, employees, and tax settings. Use list_policies first to find policy IDs.
Create a new Expensify policy (workspace). Returns the new policy ID. Use 'team' for small groups or 'corporate' for organizations with advanced features.
Add, update, or replace expense categories on a policy. Each category needs a name and enabled flag. Use 'merge' to add/update only the listed categories or 'replace' to delete every category not listed. Call get_policy with fields ['categories'] first to see what exists.
Set the tags on a policy. Tags group expenses by project or department, organised into named levels each holding its own tags. This replaces the whole tag set: any level not listed is removed. Call get_policy with fields ['tags'] first and re-send the levels you want to keep.
Export expense reports with transactions. Requires one of startdate, reportidlist, or approvedafter to scope the export. Dates are yyyy-MM-dd; enddate is required when startdate or approvedafter is over a year old, and startdate..enddate cannot exceed one year. Use listpolicies to verify policy IDs.
Create a new expense report with transactions. Requires policy ID (use list_policies), employee email, title, and at least one expense with date, merchant, and amount in cents.
Mark approved reports as REIMBURSED (the only status the API supports). Select reports by ID (use exportreports to find IDs) or by date range. Reports not in APPROVED are skipped and listed in skippedreports. Returns the IDs actually updated.
Validate Expensify partner credentials by checking API access

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that lets your agents access data and functionality from Expensify via tools. Your agents can invoke these tools to pull expense reports, submit expenses, reconcile corporate card transactions, manage spend policies, and more.
Expensify doesn't offer an official MCP server, but you can use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
<code class="blog_inline-code">export_reports</code>: retrieves expense reports from Expensify filtered by date range, employee, or policy — the primary tool for reconciliation agents and finance summary workflows<code class="blog_inline-code">create_expenses</code>: submits one or more expense line items to an existing report, used when agents need to log expenses automatically based on an external trigger<code class="blog_inline-code">export_card_transactions</code>: pulls corporate card transaction data for a given domain and date range, enabling agents to identify unreconciled charges or flag out-of-policy spend<code class="blog_inline-code">create_report</code>: opens a new expense report under a specified policy, useful when agents need to group expenses into a fresh report before submitting for approval<code class="blog_inline-code">update_report_status</code>: advances or reverts a report's status in the approval workflow, allowing agents to programmatically submit, approve, or reopen reports based on business logic<code class="blog_inline-code">list_policies</code>: returns all spend policies available in the account, giving agents the context they need to validate expenses or assign new reports to the correct policyHere are just a few reasons:
You can take the following steps:
1. Create your Merge Agent Handler account and navigate to Tool Packs.
2. Create a new Tool Pack, then find and enable the Expensify connector. Choose which tools to include — enable read tools for reporting and reconciliation workflows, or add write tools like create_expenses and update_report_status if your agent needs to create or modify data.
3. Add a Registered User inside the Tool Pack. This is the identity context under which your agent operates. Merge generates a unique MCP URL scoped to this user once it's created.
4. From the Registered User detail page, authenticate Expensify by completing the credential flow. Merge stores and manages the credentials going forward.
5. Copy the MCP URL from the Tool Pack detail page and generate an API key from Settings. You'll need both to connect your agent.
6. Add the MCP server to your agent or IDE using the MCP URL and API key. Your Expensify tools will now be accessible through that endpoint.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Expensify without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. A finance analyst, for example, can access Expensify to reconcile expenses and review reports, NetSuite to close books and track spend, and Google Sheets to report on budget vs. actuals; while a sales rep can leverage Expensify to submit and track travel expenses, Salesforce to manage pipeline and accounts, and Gmail to handle customer outreach.
Every tool call an employee's AI makes to Expensify is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now