Skip to main content
Glama
BilalAtique

expensify-mcp

by BilalAtique

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
EXPENSIFY_DRY_RUNNoWhen 'false' (the literal string) mutations are executed; any other value runs in dry-run mode.true
EXPENSIFY_MAX_BATCH_SIZENoMaximum number of records per write operation.100
EXPENSIFY_PARTNER_USER_IDYesYour Expensify partner user ID (integration user ID).
EXPENSIFY_ALLOWED_POLICY_IDSNoOptional comma-separated list of policy IDs that mutations are allowed to touch.
EXPENSIFY_PARTNER_USER_SECRETYesYour Expensify partner user secret (integration secret).

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
expensify_list_policiesA

List Expensify policies (workspaces) the authenticated account can see. Returns id, name, owner, role, type and output currency for each. Start here when you need a policy ID for any other tool.

expensify_get_policyA

Fetch configuration for one or more policies: categories, tags, report fields, tax rates, and the employee roster. Use this to discover valid category and tag names before creating expenses, since the API rejects values that do not already exist on the policy.

expensify_get_domain_cardsA

List corporate/domain card assignments, including bank source and import history. Requires domain admin rights on the account.

expensify_export_reportsA

Start an export of expense reports and return the generated filename. Filter by report IDs, date range, or approval state. Pass the returned filename to expensify_download_file to get the contents. Supply a freemarker template to control the columns, or omit it for a default CSV of reportID, name, status, date, merchant, amount, currency, category and tag.

This is the only API that enumerates reports — there is no list-reports job. Use it to count or inspect reports.

expensify_export_card_reconciliationA

Export company card transactions for a given feed and date range, including transactions not yet attached to a report. Returns a filename to pass to expensify_download_file.

expensify_download_fileA

Download the contents of a file produced by expensify_export_reports or expensify_export_card_reconciliation, using the filename those tools return.

expensify_create_expensesA

Create one or more expenses on a user account. Amounts are INTEGER CENTS (1234 = $12.34) and dates must be yyyy-MM-dd. Category and tag values must already exist on the policy — call expensify_get_policy first to check. Set externalID per expense to make re-runs traceable. Expenses can be attached to an existing report via reportID, or left standalone.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_create_reportA

Create an expense report on a policy, optionally with expenses attached in the same call. Returns the new reportID. Note: this creates the report in an unsubmitted state — the Expensify API cannot submit it for approval or approve it. Amounts are integer cents; dates are yyyy-MM-dd.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_mark_reports_reimbursedA

Mark already-APPROVED reports as REIMBURSED. This records that payment happened outside Expensify — it does NOT move money and does NOT approve anything. Reports not already in Approved state will be rejected by the API. This is the only report-status transition the API supports.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_create_policyA

Create a new Expensify policy (workspace). Returns the new policyID.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_update_policy_categoriesA

Add, update, or replace expense categories on a policy. action="merge" upserts the supplied categories and leaves others untouched. action="replace" DELETES every category not listed in this call — use with care. maxExpenseAmount is in integer cents.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_update_policy_tagsA

Add, update, or replace tags on a policy. Tags are grouped into lists; each group has a name and its own tags array.

DATA LOSS WARNING (verified against the live API): a tag group is replaced WHOLESALE even with action="merge". Any tag already in the group but absent from your payload is DELETED. Always call expensify_get_policy first, then send the full existing tag list plus your additions. action="merge" only protects OTHER groups, not tags within the groups you send.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_update_employeesA

Add or update members on a policy, including role, manager, approval limits and routing. Members are matched by email and updated in place. employeeEmail, managerEmail and employeeID are required for each record. To remove someone use expensify_remove_employees.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_remove_employeesA

Remove members from a policy. Sets isTerminated on each record, which is how the API removes someone from their assigned policy.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_update_tag_approversA

Set or clear the approver for individual tags on a policy. Pass an empty string as approver to clear one. Only single-level tags are supported. Tag names must already exist on the policy.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_create_expense_ruleB

Create an expense rule that automatically applies a tag or billable status for an employee on a policy.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

expensify_update_expense_ruleA

Modify an existing expense rule by its ruleID.

WRITES to Expensify. Dry-run is currently ON — this will preview only.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BilalAtique/expensify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server