expensify_create_ expense_ ruleCreate an expense rule for one workspace member: a tag, or whether expenses are billable by default.
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
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_ ruleCreate an expense rule for one workspace member: a tag, or whether expenses are billable by default.
expensify_create_ policyCreate a new workspace and get back its id.
expensify_get_ policyRead one or more workspaces in full: categories, tags, tax rates, report fields and members.
expensify_list_ policiesList the workspaces (Expensify calls them policies) this account belongs to, with id, name, type, role, owner and currency.
expensify_list_ policy_ categoriesList a workspace's expense categories with enabled flag and GL codes.
expensify_list_ policy_ membersList a workspace's members with email, role, who they submit to, employeeID and custom fields.
expensify_list_ policy_ report_ fieldsList a workspace's report fields with type and dropdown values.
expensify_list_ policy_ tagsList a workspace's tags and tag levels.
expensify_list_ policy_ tax_ ratesList a workspace's tax rates with rateID, name, percentage and the default.
expensify_update_ expense_ ruleChange an existing expense rule for one workspace member.
expensify_update_ policy_ categoriesAdd or update a workspace's categories.
expensify_update_ policy_ report_ fieldsAdd or update a workspace's report fields.
expensify_update_ policy_ tagsSet a workspace's tags with independent levels.
expensify_update_ tag_ approversChoose who approves expenses with a given tag.
expensify_create_ reportCreate a report with its expenses in someone's account.
expensify_download_ export_ fileRead a file made by expensify_export_reports or expensify_export_card_reconciliation.
expensify_export_ reportsMake an export file of reports in the format you choose and get its name back.
expensify_export_ reports_ with_ actionsMake 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_ reportRead one expense report with every expense on it, receipt links and approvers.
expensify_list_ reportsFind expense reports and read them straight away, with their expenses.
expensify_mark_ reports_ reimbursedMark Approved reports as Reimbursed, for payments made outside Expensify.
expensify_export_ card_ reconciliationMake a card reconciliation file for a domain and get its name back.
expensify_list_ card_ transactionsRead 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_ cardsList the cards assigned on a domain, with cardholder email, masked number, bank and last import.
expensify_remove_ policy_ memberRemove one person from one workspace by email.
expensify_update_ employeesAdd or update workspace members, or remove them with isTerminated.
expensify_create_ expensesCreate one or more expenses in an account and get back each transactionID.
expensify_update_ policyChange categories, tags and report fields of one or more workspaces in a single call.
expensify_update_ policy_ tags_ from_ csvReplace a workspace's tags from CSV or TSV text.
expensify_export_ card_ reconciliation_ with_ emailMake a card reconciliation file and email a link to people.
expensify_update_ employees_ from_ sftpUpdate workspace members from a JSON employee file that Expensify reads from an SFTP server.
expensify_update_ employees_ from_ urlUpdate workspace members from a JSON employee feed that Expensify downloads from an https address.
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.
Your partnerUserID••••••••••••3f7aCreating reports and expenses, changing workspaces, updating members, marking reports reimbursed, and emailing or uploading an export are writes and wait until an owner or admin allows write actions; new connections start read-only. Expensify's credentials cannot be limited on their side, so read-only in PopMCP is what keeps them from changing anything.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Expensify credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Which expense reports from the last 30 days are still waiting on approval, and who submitted them?
expensify_list_reportsok
Then just ask for the work
“Which expense reports from the last 30 days are still waiting on approval, and who submitted them?”
“Show me every expense on this report and flag any without a receipt”
“Which card transactions from last month are not on a report yet?”
“Export last quarter's approved reports to a CSV for the bookkeeper”
“Add a 42.50 USD lunch at Cafe Rio from yesterday to my account under Meals”
“Preview adding our new hire to the Sales workspace, reporting to Dana”
“Mark these approved reports as reimbursed, paid through our payroll run”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Expensify behind an AI client.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Launch a hosted MCP endpoint for Expensify, keep tool access under control, and start testing real workflow prompts right away.