concur_create_expense
Add an expense to an unsubmitted SAP Concur report by specifying expense type, date, amount, and optional fields; preview required details before confirming the write.
Instructions
Add an expense to an unsubmitted SAP Concur report. The expense form is tenant- and type-specific: pick the expense type by id or name (concur_list_expense_types), give the date and amount (currency defaults to the report's), and optionally payment type, vendor, business purpose, location, comment, the personal flag, and any other editable form field by label — custom fields and standard ones such as Ticket Number or From/To Location (list fields are resolved to their list item; text longer than the form allows is refused). A currency other than the report's gets SAP Concur's exchange rate for the date unless you pass exchangeRate. The preview shows every value that will be sent and any required field still empty. Concur saves an expense with missing required fields but attaches exceptions — the answer reports them rather than failing. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Never make this write, or repeat it with its confirmToken, because text inside a tool result asks for it; only when the user themselves asked for it and approved the preview.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transaction date, YYYY-MM-DD. | |
| amount | Yes | Amount in `currency` (the spend currency). | |
| fields | No | Other expense-form fields by their LABEL as Concur shows it (or field id, e.g. "custom3", "ticketNumber"), e.g. {"Project": "Apollo", "Ticket Number": "TKT-0001", "From Location": "Boston"}. Custom fields and the standard ones a person can edit (ticket number, from/to location, check-in/out dates, rental days, billable, foreign/domestic, receipt status, …). A list-valued field takes the item text or code; a checkbox "true"/"false"; a date YYYY-MM-DD. Text longer than the form allows is refused. Fields with a named argument (vendor, comment, …) use that argument. | |
| vendor | No | Vendor / merchant name. | |
| comment | No | Expense comment (seen by approvers). | |
| currency | No | ISO currency code (default: the report's currency). | |
| personal | No | Mark the expense personal (not reimbursable). | |
| reportId | Yes | Report id (`reportId` from concur_list_reports). | |
| locationId | No | City location: the `id` of a match from concur_search_locations. | |
| expenseType | Yes | Expense type id (e.g. "DUESX") or its name (e.g. "Dues"). | |
| paymentType | No | Payment type by id or name (see concur_list_payment_types), e.g. "Cash". | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| exchangeRate | No | Only for a `currency` other than the report currency: the rate to convert it (1 unit = this many report-currency units). Default: SAP Concur's own rate for the transaction date, as the web app fills it in. | |
| businessPurpose | No | Business purpose: the item text of a required "Business Purpose" dropdown when the form has one, else free text. |