Connect your AI Agents to Expensify in minutes

Available tools
export_card_transactions
Export corporate card transactions for a domain by date range. Two-step: generates reconciliation file then downloads. Returns transaction details including merchant, amount, and card info.
get_domain_cards
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).
update_employees
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_expenses
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_policies
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_policy
Get detailed policy config including categories, tags, report fields, employees, and tax settings. Use list_policies first to find policy IDs.
create_policy
Create a new Expensify policy (workspace). Returns the new policy ID. Use 'team' for small groups or 'corporate' for organizations with advanced features.
update_categories
Add, update, or replace expense categories on a policy. Use 'merge' to add/update or 'replace' to overwrite all. Use get_policy first to see existing categories.
update_tags
Add, update, or replace tags on a policy. Tags are used to categorize expenses (e.g., by project or department). Use get_policy first to see existing tags.
export_reports
Export expense reports with transactions by date range, status, or ID. Two-step: generates file then downloads. Use list_policies first to verify policy IDs.
create_report
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.
update_report_status
Update report status to REIMBURSED (only supported status via API). Filter by report IDs or date range. Reports must be in APPROVED state first.

How to set up Merge Agent Handler
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}FAQs on using Merge's Expensify MCP server
FAQs on using Merge's Expensify MCP server
Explore other MCP servers built and managed by Merge









































Ready to try it out?
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now
