naftiko: 1.0.0-alpha2 info: label: SAP Concur Expense Reporting and Approval description: 'Unified workflow capability for the full expense report lifecycle in SAP Concur: creating reports, adding expense entries, submitting for approval, tracking approval status, and monitoring reimbursement payment batches. Designed for finance teams, expense managers, and ERP integration partners managing employee expense reimbursement end-to-end.' tags: - Expense Management - Financial Management - Approval Workflow - Reimbursement - SAP Concur created: '2026-05-02' modified: '2026-05-06' binds: - namespace: env keys: CONCUR_OAUTH_TOKEN: CONCUR_OAUTH_TOKEN capability: consumes: - type: http namespace: concur-expense-report baseUri: https://us.api.concursolutions.com/api/v3.0 description: SAP Concur Expense Report v3 API authentication: type: bearer token: '{{CONCUR_OAUTH_TOKEN}}' resources: - name: expense-reports path: /expense/reports description: Expense report collection operations: - name: list-expense-reports method: GET description: List expense reports for the current user inputParameters: - name: approvalStatusCode in: query type: string required: false description: Filter by approval status code - name: paymentStatusCode in: query type: string required: false description: Filter by payment status code - name: limit in: query type: integer required: false description: Number of records to return (max 100) - name: offset in: query type: string required: false description: Pagination offset outputRawFormat: json outputParameters: - name: result type: object value: $. - name: create-expense-report method: POST description: Create a new expense report outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: Name: '{{tools.name}}' Purpose: '{{tools.purpose}}' PolicyID: '{{tools.policyId}}' - name: expense-report-by-id path: /expense/reports/{id} description: Single expense report operations operations: - name: get-expense-report method: GET description: Retrieve a specific expense report by ID inputParameters: - name: id in: path type: string required: true description: The expense report ID outputRawFormat: json outputParameters: - name: result type: object value: $. - name: update-expense-report method: PUT description: Update an expense report inputParameters: - name: id in: path type: string required: true description: The expense report ID outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: Name: '{{tools.name}}' Purpose: '{{tools.purpose}}' - name: delete-expense-report method: DELETE description: Delete a draft expense report inputParameters: - name: id in: path type: string required: true description: The expense report ID outputRawFormat: json outputParameters: - name: result type: object value: $. - name: expense-entries path: /expense/entries description: Expense entry collection operations: - name: list-expense-entries method: GET description: List expense entries for a report inputParameters: - name: reportID in: query type: string required: true description: The expense report ID - name: limit in: query type: integer required: false description: Number of records to return outputRawFormat: json outputParameters: - name: result type: object value: $. - name: create-expense-entry method: POST description: Create a new expense entry within a report outputRawFormat: json outputParameters: - name: result type: object value: $. body: type: json data: ReportID: '{{tools.reportId}}' ExpenseTypeCode: '{{tools.expenseTypeCode}}' TransactionDate: '{{tools.transactionDate}}' TransactionAmount: '{{tools.transactionAmount}}' TransactionCurrencyCode: '{{tools.currencyCode}}' BusinessPurpose: '{{tools.businessPurpose}}' VendorDescription: '{{tools.vendor}}' - name: expense-entry-by-id path: /expense/entries/{id} description: Single expense entry operations operations: - name: get-expense-entry method: GET description: Retrieve a specific expense entry by ID inputParameters: - name: id in: path type: string required: true description: The expense entry ID outputRawFormat: json outputParameters: - name: result type: object value: $. - name: delete-expense-entry method: DELETE description: Delete an expense entry from a draft report inputParameters: - name: id in: path type: string required: true description: The expense entry ID outputRawFormat: json outputParameters: - name: result type: object value: $. - name: payment-batches path: /expense/paymentbatches description: Payment batch management operations: - name: list-payment-batches method: GET description: List payment batches for reimbursement inputParameters: - name: limit in: query type: integer required: false description: Number of records to return outputRawFormat: json outputParameters: - name: result type: object value: $. - name: expense-group-configs path: /expense/expensegroupconfigurations description: Expense policy configuration operations: - name: list-expense-group-configurations method: GET description: List expense group policy configurations outputRawFormat: json outputParameters: - name: result type: object value: $. exposes: - type: rest port: 8080 namespace: expense-reporting-api description: Unified REST API for expense report lifecycle management and approval workflow. resources: - path: /v1/reports name: reports description: Expense report management operations: - method: GET name: list-reports description: List expense reports with status filtering call: concur-expense-report.list-expense-reports with: approvalStatusCode: rest.approvalStatusCode paymentStatusCode: rest.paymentStatusCode limit: rest.limit outputParameters: - type: object mapping: $. - method: POST name: create-report description: Create a new expense report call: concur-expense-report.create-expense-report outputParameters: - type: object mapping: $. - path: /v1/reports/{id} name: report-detail description: Single expense report operations operations: - method: GET name: get-report description: Get an expense report by ID call: concur-expense-report.get-expense-report with: id: rest.id outputParameters: - type: object mapping: $. - method: PUT name: update-report description: Update an expense report call: concur-expense-report.update-expense-report with: id: rest.id outputParameters: - type: object mapping: $. - method: DELETE name: delete-report description: Delete a draft expense report call: concur-expense-report.delete-expense-report with: id: rest.id outputParameters: - type: object mapping: $. - path: /v1/entries name: entries description: Expense entry line items operations: - method: GET name: list-entries description: List expense entries for a report call: concur-expense-report.list-expense-entries with: reportID: rest.reportID outputParameters: - type: object mapping: $. - method: POST name: create-entry description: Add an expense entry to a report call: concur-expense-report.create-expense-entry outputParameters: - type: object mapping: $. - path: /v1/entries/{id} name: entry-detail description: Single expense entry operations: - method: GET name: get-entry description: Get an expense entry by ID call: concur-expense-report.get-expense-entry with: id: rest.id outputParameters: - type: object mapping: $. - method: DELETE name: delete-entry description: Delete an expense entry call: concur-expense-report.delete-expense-entry with: id: rest.id outputParameters: - type: object mapping: $. - path: /v1/payment-batches name: payment-batches description: Reimbursement payment batch tracking operations: - method: GET name: list-payment-batches description: List payment batches for reimbursement call: concur-expense-report.list-payment-batches outputParameters: - type: object mapping: $. - path: /v1/configurations name: configurations description: Expense group policy configuration operations: - method: GET name: list-configurations description: List expense group configurations and policies call: concur-expense-report.list-expense-group-configurations outputParameters: - type: object mapping: $. - type: mcp port: 9090 namespace: expense-reporting-mcp transport: http description: MCP server for AI-assisted expense report management and approval tracking. tools: - name: list-expense-reports description: List expense reports with optional filtering by approval status (A_PEND, A_APPR, A_FILE) or payment status (P_NOTP, P_PROC, P_PAID). hints: readOnly: true openWorld: true call: concur-expense-report.list-expense-reports with: approvalStatusCode: tools.approvalStatusCode paymentStatusCode: tools.paymentStatusCode limit: tools.limit outputParameters: - type: object mapping: $. - name: get-expense-report description: Retrieve full details of a specific expense report including status, totals, and owner information. hints: readOnly: true openWorld: false call: concur-expense-report.get-expense-report with: id: tools.id outputParameters: - type: object mapping: $. - name: create-expense-report description: Create a new expense report for an employee. Requires a report name and optional business purpose and policy ID. hints: readOnly: false destructive: false call: concur-expense-report.create-expense-report with: name: tools.name purpose: tools.purpose policyId: tools.policyId outputParameters: - type: object mapping: $. - name: update-expense-report description: Update an existing draft expense report's name or purpose. hints: readOnly: false destructive: false idempotent: true call: concur-expense-report.update-expense-report with: id: tools.id name: tools.name purpose: tools.purpose outputParameters: - type: object mapping: $. - name: delete-expense-report description: Delete a draft expense report that has not been submitted. hints: readOnly: false destructive: true idempotent: true call: concur-expense-report.delete-expense-report with: id: tools.id outputParameters: - type: object mapping: $. - name: list-expense-entries description: List all expense line items within a specific expense report. Requires the reportID parameter. hints: readOnly: true openWorld: true call: concur-expense-report.list-expense-entries with: reportID: tools.reportID outputParameters: - type: object mapping: $. - name: get-expense-entry description: Retrieve a specific expense entry with full details. hints: readOnly: true openWorld: false call: concur-expense-report.get-expense-entry with: id: tools.id outputParameters: - type: object mapping: $. - name: create-expense-entry description: Add a new expense line item to a draft expense report. Requires report ID, expense type code, transaction date, amount, and currency. hints: readOnly: false destructive: false call: concur-expense-report.create-expense-entry with: reportId: tools.reportId expenseTypeCode: tools.expenseTypeCode transactionDate: tools.transactionDate transactionAmount: tools.transactionAmount currencyCode: tools.currencyCode businessPurpose: tools.businessPurpose vendor: tools.vendor outputParameters: - type: object mapping: $. - name: delete-expense-entry description: Remove an expense entry from a draft expense report. hints: readOnly: false destructive: true idempotent: true call: concur-expense-report.delete-expense-entry with: id: tools.id outputParameters: - type: object mapping: $. - name: list-payment-batches description: List payment batches containing approved expense reports ready for employee reimbursement. Useful for ERP payment reconciliation. hints: readOnly: true openWorld: true call: concur-expense-report.list-payment-batches outputParameters: - type: object mapping: $. - name: list-expense-group-configurations description: List expense group policy configurations showing available expense types, payment types, and approval workflow settings. hints: readOnly: true openWorld: true call: concur-expense-report.list-expense-group-configurations outputParameters: - type: object mapping: $.