Expensify MCP Server for Cloudflare Workers
22 tools available in the Expensify MCP server. Each tool can be called by AI assistants to perform specific actions.
expensify_get_policiesGet list of policies accessible to the authenticated user.
Returns all policies the partner has access to, including policy ID, name, type, and owner.
Args:
Returns: List of policies with their details.
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"adminOnly": {
"type": "boolean",
"default": false,
"description": "Only return policies where user is admin"
}
}
}expensify_get_policyGet detailed information about a specific policy.
Returns policy details including categories, tags, report fields, employees, and tax configuration.
Args:
Returns: Detailed policy information.
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
},
"policyId": {
"type": "string",
"description": "Policy ID"
}
}
}expensify_create_policyCreate a new expense policy.
Args:
Returns: The created policy ID.
{
"type": "object",
"required": [
"name",
"plan"
],
"properties": {
"name": {
"type": "string",
"description": "Policy name"
},
"plan": {
"enum": [
"team",
"corporate"
],
"type": "string",
"description": "Policy plan type"
}
}
}expensify_update_categoriesUpdate expense categories for a policy.
Allows enabling/disabling categories and setting GL codes.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"categoriesJson"
],
"properties": {
"policyId": {
"type": "string",
"description": "Policy ID"
},
"categoriesJson": {
"type": "string",
"description": "JSON string of categories to update"
}
}
}expensify_update_tagsUpdate expense tags for a policy.
Allows managing multi-level tag hierarchies.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"tagsJson"
],
"properties": {
"policyId": {
"type": "string",
"description": "Policy ID"
},
"tagsJson": {
"type": "string",
"description": "JSON string of tags to update"
}
}
}expensify_update_report_fieldsUpdate custom report fields for a policy.
Allows adding text, dropdown, or date fields to reports.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"reportFieldsJson"
],
"properties": {
"policyId": {
"type": "string",
"description": "Policy ID"
},
"reportFieldsJson": {
"type": "string",
"description": "JSON string of report fields"
}
}
}expensify_get_employeesGet employees for a policy.
Returns list of employees with their roles and reporting structure.
Args:
Returns: List of employees.
{
"type": "object",
"required": [
"policyId"
],
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
},
"policyId": {
"type": "string",
"description": "Policy ID"
}
}
}expensify_update_employeeUpdate employee settings in a policy.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"employeeEmail"
],
"properties": {
"isAdmin": {
"type": "boolean",
"description": "Whether employee is admin"
},
"policyId": {
"type": "string",
"description": "Policy ID"
},
"employeeID": {
"type": "string",
"description": "External employee ID"
},
"managerEmail": {
"type": "string",
"description": "Manager's email"
},
"approvalLimit": {
"type": "number",
"description": "Approval limit amount"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
},
"overLimitApprover": {
"type": "string",
"description": "Over-limit approver email"
}
}
}expensify_add_employeeAdd an employee to a policy.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"employeeEmail"
],
"properties": {
"role": {
"type": "string",
"description": "Employee role"
},
"policyId": {
"type": "string",
"description": "Policy ID"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
}
}
}expensify_remove_employeeRemove an employee from a policy.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"employeeEmail"
],
"properties": {
"policyId": {
"type": "string",
"description": "Policy ID"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
}
}
}expensify_export_reportsExport expense reports with their transactions.
Returns reports matching the specified filters with full transaction details.
Args:
Returns: List of reports with their transactions.
{
"type": "object",
"required": [
"startDate",
"endDate"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum reports to return"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
},
"endDate": {
"type": "string",
"description": "End date (YYYY-MM-DD)"
},
"policyId": {
"type": "string",
"description": "Filter by policy ID"
},
"startDate": {
"type": "string",
"description": "Start date (YYYY-MM-DD)"
},
"employeeEmail": {
"type": "string",
"description": "Filter by submitter email"
}
}
}expensify_create_reportCreate a new expense report.
Args:
Returns: The created report ID.
{
"type": "object",
"required": [
"title",
"employeeEmail"
],
"properties": {
"title": {
"type": "string",
"description": "Report title"
},
"policyId": {
"type": "string",
"description": "Policy ID"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
}
}
}expensify_update_report_statusUpdate the status of expense reports.
Can update by report ID or by date range filter.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"enum": [
"APPROVED",
"REIMBURSED"
],
"type": "string",
"description": "New status"
},
"endDate": {
"type": "string",
"description": "Filter by end date"
},
"policyId": {
"type": "string",
"description": "Filter by policy"
},
"reportId": {
"type": "string",
"description": "Report ID to update"
},
"startDate": {
"type": "string",
"description": "Filter by start date"
}
}
}expensify_mark_exportedMark reports as exported with a label.
Used to track which reports have been exported to external systems.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"reportIds",
"exportLabel"
],
"properties": {
"reportIds": {
"type": "string",
"description": "Comma-separated report IDs to mark"
},
"exportLabel": {
"type": "string",
"description": "Export label to apply"
}
}
}expensify_download_report_pdfDownload expense reports as PDF.
Returns base64-encoded PDF data for the specified reports.
Args:
Returns: Base64-encoded PDF data.
{
"type": "object",
"required": [
"reportIds"
],
"properties": {
"reportIds": {
"type": "string",
"description": "Comma-separated report IDs to download"
}
}
}expensify_create_expenseCreate one or more expenses.
Expenses are created in the user's default unreported report or assigned policy.
Args:
Returns: Created transaction ID(s).
{
"type": "object",
"required": [
"employeeEmail",
"expensesJson"
],
"properties": {
"policyId": {
"type": "string",
"description": "Policy ID"
},
"expensesJson": {
"type": "string",
"description": "JSON array of expense objects"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
}
}
}expensify_get_categoriesGet expense categories for a policy.
Returns all categories with their enabled status and GL codes.
Args:
Returns: List of categories.
{
"type": "object",
"required": [
"policyId"
],
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
},
"policyId": {
"type": "string",
"description": "Policy ID"
}
}
}expensify_get_tagsGet expense tags for a policy.
Returns all tags including multi-level tag hierarchies.
Args:
Returns: List of tags.
{
"type": "object",
"required": [
"policyId"
],
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
},
"policyId": {
"type": "string",
"description": "Policy ID"
}
}
}expensify_create_expense_ruleCreate an expense rule for automatic tag/billable assignment.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"employeeEmail"
],
"properties": {
"tag": {
"type": "string",
"description": "Tag to apply"
},
"billable": {
"type": "boolean",
"description": "Billable status to set"
},
"policyId": {
"type": "string",
"description": "Policy ID"
},
"applyWhen": {
"enum": [
"tag",
"category",
"merchant"
],
"type": "string",
"description": "When to apply rule"
},
"matchValue": {
"type": "string",
"description": "Value to match"
},
"employeeEmail": {
"type": "string",
"description": "Employee email"
}
}
}expensify_get_domain_cardsGet corporate cards for a domain.
Returns list of corporate card assignments with card details and owners.
Args:
Returns: List of corporate cards.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Domain name"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string"
}
}
}expensify_export_reconciliationExport card transaction reconciliation data.
Exports corporate card transaction data for reconciliation.
Args:
Returns: Reconciliation data.
{
"type": "object",
"required": [
"startDate",
"endDate"
],
"properties": {
"feed": {
"type": "string",
"description": "Card feed name"
},
"domain": {
"type": "string",
"description": "Domain name"
},
"endDate": {
"type": "string",
"description": "End date (YYYY-MM-DD)"
},
"startDate": {
"type": "string",
"description": "Start date (YYYY-MM-DD)"
},
"reportedOnly": {
"type": "boolean",
"description": "Only reported transactions"
}
}
}expensify_update_tag_approverSet or clear an approver for a specific tag.
Routes expenses with this tag to the specified approver.
Args:
Returns: Success confirmation.
{
"type": "object",
"required": [
"policyId",
"tagName",
"approverEmail"
],
"properties": {
"tagName": {
"type": "string",
"description": "Tag name"
},
"policyId": {
"type": "string",
"description": "Policy ID"
},
"approverEmail": {
"type": "string",
"description": "Approver email (empty string to clear)"
}
}
}