100+ integrations are ready to connect to your AI.Connect your first MCP

Expensify MCP server for your AI

Ask which reports are waiting on approval, reconcile the month's card spend, add expenses, and keep workspace categories, tags and members up to date, from your AI client.

PopMCPExpensify

Which expense reports from the last 30 days are still waiting on approval, and who submitted them?

Supported Expensify tools

Every job in the Expensify Integration Server, from report and card exports to creating expenses and provisioning members, with the export templates and file downloads handled for you.

32 tools in the full catalog: 14 read and 18 write. 27 load by default, and the rest are found with tool search.

expensify_create_expense_rule

Create an expense rule for one workspace member: a tag, or whether expenses are billable by default.

expensify_create_policy

Create a new workspace and get back its id.

expensify_get_policy

Read one or more workspaces in full: categories, tags, tax rates, report fields and members.

expensify_list_policies

List the workspaces (Expensify calls them policies) this account belongs to, with id, name, type, role, owner and currency.

expensify_list_policy_categories

List a workspace's expense categories with enabled flag and GL codes.

expensify_list_policy_members

List a workspace's members with email, role, who they submit to, employeeID and custom fields.

expensify_list_policy_report_fields

List a workspace's report fields with type and dropdown values.

expensify_list_policy_tags

List a workspace's tags and tag levels.

expensify_list_policy_tax_rates

List a workspace's tax rates with rateID, name, percentage and the default.

expensify_update_expense_rule

Change an existing expense rule for one workspace member.

expensify_update_policy_categories

Add or update a workspace's categories.

expensify_update_policy_report_fields

Add or update a workspace's report fields.

expensify_update_policy_tags

Set a workspace's tags with independent levels.

expensify_update_tag_approvers

Choose who approves expenses with a given tag.

expensify_create_report

Create a report with its expenses in someone's account.

expensify_download_export_file

Read a file made by expensify_export_reports or expensify_export_card_reconciliation.

expensify_export_reports

Make an export file of reports in the format you choose and get its name back.

expensify_export_reports_with_actions

Make an export file and then act on it: label the reports as exported so later exports skip them, email a link to people, or upload the file to an SFTP server.

expensify_get_report

Read one expense report with every expense on it, receipt links and approvers.

expensify_list_reports

Find expense reports and read them straight away, with their expenses.

expensify_mark_reports_reimbursed

Mark Approved reports as Reimbursed, for payments made outside Expensify.

expensify_export_card_reconciliation

Make a card reconciliation file for a domain and get its name back.

expensify_list_card_transactions

Read card transactions on a domain straight away, with card, cardholder, merchant, dates, amounts in cents and the report each is on (none for unreported).

expensify_list_domain_cards

List the cards assigned on a domain, with cardholder email, masked number, bank and last import.

expensify_remove_policy_member

Remove one person from one workspace by email.

expensify_update_employees

Add or update workspace members, or remove them with isTerminated.

expensify_create_expenses

Create one or more expenses in an account and get back each transactionID.

expensify_update_policy

Change categories, tags and report fields of one or more workspaces in a single call.

expensify_update_policy_tags_from_csv

Replace a workspace's tags from CSV or TSV text.

expensify_export_card_reconciliation_with_email

Make a card reconciliation file and email a link to people.

expensify_update_employees_from_sftp

Update workspace members from a JSON employee file that Expensify reads from an SFTP server.

expensify_update_employees_from_url

Update workspace members from a JSON employee feed that Expensify downloads from an https address.

Connect Expensify to Claude, ChatGPT and Claude Code

Credentials off one Expensify screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

Sign in to Expensify, open expensify.com/tools/integrations and copy the partnerUserID and partnerUserSecret the page shows you, then paste both into PopMCP. The secret is shown only once. There is no app to register. The connection acts as the account you signed in with, so sign in as someone with the access the AI should have.

partnerUserIDYour partnerUserID
partnerUserSecret••••••••••••3f7a
ConnectionVerified

Then just ask for the work

  • “Which expense reports from the last 30 days are still waiting on approval, and who submitted them?”

    • list_reports
  • “Show me every expense on this report and flag any without a receipt”

    • get_report
  • “Which card transactions from last month are not on a report yet?”

    • list_card_transactions
  • “Export last quarter's approved reports to a CSV for the bookkeeper”

    • export_reports
    • download_export_file
  • “Add a 42.50 USD lunch at Cafe Rio from yesterday to my account under Meals”

    • list_policy_categories
    • create_expenses
  • “Preview adding our new hire to the Sales workspace, reporting to Dana”

    • list_policies
    • update_employees
  • “Mark these approved reports as reimbursed, paid through our payroll run”

    • mark_reports_reimbursed

Use Expensify from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Expensify MCP server questions

What teams ask before putting Expensify behind an AI client.

What does PopMCP need to connect Expensify?

Two values, the partnerUserID and partnerUserSecret. Sign in to Expensify and open expensify.com/tools/integrations, which shows them. Copy both straight away, because the secret is shown only once. Paste them into PopMCP, which stores them encrypted and checks them by reading your workspace list. They never reach your AI client.

Whose access does the AI get?

The access of the person who was signed in when the credentials were made. Changing a workspace takes a workspace admin, and card tools take a domain admin. Expensify refuses anything beyond that person's role. To stop any changes at all, leave the connection read-only in PopMCP, since Expensify's credentials cannot be limited on their side.

Do I have to write export templates?

No. Expensify's exports normally need a template written in its FreeMarker language. PopMCP supplies one, so you get a file with the usual columns, or the records directly in chat. Anyone who wants their own columns can still pass a template.

Can the AI approve or pay a report?

No. Expensify's API has no way to submit, approve or reject a report, or to delete a report or expense. The one status change it allows is marking an Approved report as Reimbursed, for a payment made outside Expensify. That records the payment and moves no money.

Why was creating a report refused with Not authorized to authenticate as user?

Expensify has not turned that on for your account yet. Creating reports in someone's account needs a domain and workspace admin, and a request to concierge@expensify.com to enable it. Creating expenses in someone else's account also needs Expensify's approval. PopMCP says so when it happens, and retrying will not help.

How much can it read at once?

One date range can cover at most a year, and Expensify offers no paging, so a large period is read in smaller date ranges. The account can send 5 requests every 10 seconds and 20 every 60 seconds. If that limit is hit, the AI is told to wait a minute and send calls one at a time.

Can it add or remove people?

Yes, as a write. It can add, update and remove workspace members, and it can preview any change first without making it. Invited people get Expensify's email unless you ask to skip it. Each person needs a stable employee ID, because Expensify uses it to spot a changed email address and merge the two.

Do I have to run or host the Expensify MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

How do I connect Expensify to Claude Code?

Connect Expensify in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Expensify on the consent screen. The Expensify tools are then available in that session, and no Expensify credential is stored on your machine.

Why do only 27 of the 32 tools load by default?

Loading 32 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 27-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 32 here. A trigger is something PopMCP watches for you: 7 Expensify events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Expensify.

Connect Expensify to your AI in minutes

Launch a hosted MCP endpoint for Expensify, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP