fix(sap-concur): correct Cash Advance v4.1 paths, add SCIM filter param

- Update Cash Advance create/get/issue tools from /cashadvance/v4/ to /cashadvance/v4.1/ to match the live API
- Add filter query param to list_users (SCIM v4.1 supports filtering by userName, employeeNumber, externalId)
- Regenerate docs MDX

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Waleed Latif
2026-05-06 19:21:15 -07:00
co-authored by Claude Opus 4.7
parent b74fc86f80
commit 6f8b574af0
7 changed files with 30 additions and 20 deletions
+10 -9
View File
@@ -67,7 +67,7 @@ Approve an expense report as a manager (PATCH /expensereports/v4/reports/\{repor
### `sap_concur_associate_attendees`
Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/context/TRAVELER/reports/\{reportId\}/expenses/\{expenseId\}/attendees).
Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/context/\{contextType\}/reports/\{reportId\}/expenses/\{expenseId\}/attendees).
#### Input
@@ -96,7 +96,7 @@ Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/co
### `sap_concur_create_cash_advance`
Create a cash advance (POST /cashadvance/v4/cashadvances).
Create a cash advance (POST /cashadvance/v4.1/cashadvances).
#### Input
@@ -686,7 +686,7 @@ Get a budget item header by ID (GET /budget/v4/budgetItemHeader/\{id\}).
### `sap_concur_get_cash_advance`
Get a cash advance (GET /cashadvance/v4/cashadvances/\{cashadvanceId\}).
Get a cash advance (GET /cashadvance/v4.1/cashadvances/\{cashAdvanceId\}).
#### Input
@@ -988,7 +988,7 @@ Get expense itemizations (GET /expensereports/v4/users/\{userId\}/context/\{cont
| `password` | string | No | Password \(only for password grant\) |
| `companyUuid` | string | No | Company UUID for multi-company access tokens |
| `userId` | string | Yes | Concur user UUID |
| `contextType` | string | Yes | Access context \(TRAVELER per the v4 spec\) |
| `contextType` | string | Yes | Access context: TRAVELER, MANAGER, or PROXY |
| `reportId` | string | Yes | Expense report ID |
| `expenseId` | string | Yes | Expense ID |
@@ -1426,7 +1426,7 @@ Get a single user by UUID (GET /profile/identity/v4.1/Users/\{id\}).
### `sap_concur_issue_cash_advance`
Issue a cash advance (POST /cashadvance/v4/cashadvances/\{cashadvanceId\}/issue).
Issue a cash advance (POST /cashadvance/v4.1/cashadvances/\{cashAdvanceId\}/issue).
#### Input
@@ -1651,7 +1651,7 @@ List expenses on a report (GET /expensereports/v4/users/\{userId\}/context/\{con
| `password` | string | No | Password \(only for password grant\) |
| `companyUuid` | string | No | Company UUID for multi-company access tokens |
| `userId` | string | Yes | Concur user UUID |
| `contextType` | string | Yes | Access context \(TRAVELER per the v4 spec\) |
| `contextType` | string | Yes | Access context: TRAVELER, MANAGER, or PROXY |
| `reportId` | string | Yes | Expense report ID |
#### Output
@@ -2081,10 +2081,10 @@ List travel profile summaries (GET /api/travelprofile/v2.0/summary). LastModifie
| `username` | string | No | Username \(only for password grant\) |
| `password` | string | No | Password \(only for password grant\) |
| `companyUuid` | string | No | Company UUID for multi-company access tokens |
| `lastModifiedDate` | string | Yes | Required ISO 8601 date \(YYYY-MM-DD or full timestamp\) |
| `lastModifiedDate` | string | Yes | Required UTC datetime in YYYY-MM-DDThh:mm:ss format |
| `page` | number | No | 1-based page number |
| `itemsPerPage` | number | No | Items per page \(max 200\) |
| `active` | string | No | Status filter \(sent as Status query param\): "Active" or "Inactive". Omit for all. |
| `active` | string | No | Active filter \(sent as Active query param\): "1" \(active\) or "0" \(inactive\). Omit for all. |
| `travelConfigs` | string | No | Comma-separated travel configuration ids |
#### Output
@@ -2238,6 +2238,7 @@ List Concur user identities (GET /profile/identity/v4.1/Users).
| `companyUuid` | string | No | Company UUID for multi-company access tokens |
| `count` | number | No | Max number of users to return \(default 100, max 1000\) |
| `cursor` | string | No | SCIM v4.1 pagination cursor returned by a prior call |
| `filter` | string | No | SCIM filter expression. Supported attributes: userName, employeeNumber, externalId. |
| `attributes` | string | No | Comma-separated list of attributes to include in the response |
| `excludedAttributes` | string | No | Comma-separated list of attributes to exclude from the response |
@@ -2318,7 +2319,7 @@ Recall a submitted expense report (PATCH /expensereports/v4/users/\{userId\}/con
### `sap_concur_remove_all_attendees`
Remove all attendees from an expense (DELETE /expensereports/v4/users/\{userId\}/context/TRAVELER/reports/\{reportId\}/expenses/\{expenseId\}/attendees).
Remove all attendees from an expense (DELETE /expensereports/v4/users/\{userId\}/context/\{contextType\}/reports/\{reportId\}/expenses/\{expenseId\}/attendees).
#### Input
@@ -11570,11 +11570,11 @@
},
{
"name": "Associate Attendees",
"description": "Associate attendees with an expense (POST /expensereports/v4/users/{userId}/context/TRAVELER/reports/{reportId}/expenses/{expenseId}/attendees)."
"description": "Associate attendees with an expense (POST /expensereports/v4/users/{userId}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/attendees)."
},
{
"name": "Remove All Attendees",
"description": "Remove all attendees from an expense (DELETE /expensereports/v4/users/{userId}/context/TRAVELER/reports/{reportId}/expenses/{expenseId}/attendees)."
"description": "Remove all attendees from an expense (DELETE /expensereports/v4/users/{userId}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/attendees)."
},
{
"name": "List Report Comments",
@@ -11666,15 +11666,15 @@
},
{
"name": "Create Cash Advance",
"description": "Create a cash advance (POST /cashadvance/v4/cashadvances)."
"description": "Create a cash advance (POST /cashadvance/v4.1/cashadvances)."
},
{
"name": "Get Cash Advance",
"description": "Get a cash advance (GET /cashadvance/v4/cashadvances/{cashadvanceId})."
"description": "Get a cash advance (GET /cashadvance/v4.1/cashadvances/{cashAdvanceId})."
},
{
"name": "Issue Cash Advance",
"description": "Issue a cash advance (POST /cashadvance/v4/cashadvances/{cashadvanceId}/issue)."
"description": "Issue a cash advance (POST /cashadvance/v4.1/cashadvances/{cashAdvanceId}/issue)."
},
{
"name": "List Itineraries (Trips)",
@@ -9,7 +9,7 @@ import type { ToolConfig } from '@/tools/types'
export const createCashAdvanceTool: ToolConfig<CreateCashAdvanceParams, SapConcurProxyResponse> = {
id: 'sap_concur_create_cash_advance',
name: 'SAP Concur Create Cash Advance',
description: 'Create a cash advance (POST /cashadvance/v4/cashadvances).',
description: 'Create a cash advance (POST /cashadvance/v4.1/cashadvances).',
version: '1.0.0',
params: {
datacenter: {
@@ -67,7 +67,7 @@ export const createCashAdvanceTool: ToolConfig<CreateCashAdvanceParams, SapConcu
headers: () => ({ 'Content-Type': 'application/json' }),
body: (params) => ({
...baseProxyBody(params),
path: `/cashadvance/v4/cashadvances`,
path: `/cashadvance/v4.1/cashadvances`,
method: 'POST',
body: params.body,
}),
@@ -10,7 +10,7 @@ import type { ToolConfig } from '@/tools/types'
export const getCashAdvanceTool: ToolConfig<GetCashAdvanceParams, SapConcurProxyResponse> = {
id: 'sap_concur_get_cash_advance',
name: 'SAP Concur Get Cash Advance',
description: 'Get a cash advance (GET /cashadvance/v4/cashadvances/{cashadvanceId}).',
description: 'Get a cash advance (GET /cashadvance/v4.1/cashadvances/{cashAdvanceId}).',
version: '1.0.0',
params: {
datacenter: {
@@ -70,7 +70,7 @@ export const getCashAdvanceTool: ToolConfig<GetCashAdvanceParams, SapConcurProxy
const cashAdvanceId = trimRequired(params.cashAdvanceId, 'cashAdvanceId')
return {
...baseProxyBody(params),
path: `/cashadvance/v4/cashadvances/${encodeURIComponent(cashAdvanceId)}`,
path: `/cashadvance/v4.1/cashadvances/${encodeURIComponent(cashAdvanceId)}`,
method: 'GET',
}
},
@@ -10,7 +10,7 @@ import type { ToolConfig } from '@/tools/types'
export const issueCashAdvanceTool: ToolConfig<IssueCashAdvanceParams, SapConcurProxyResponse> = {
id: 'sap_concur_issue_cash_advance',
name: 'SAP Concur Issue Cash Advance',
description: 'Issue a cash advance (POST /cashadvance/v4/cashadvances/{cashadvanceId}/issue).',
description: 'Issue a cash advance (POST /cashadvance/v4.1/cashadvances/{cashAdvanceId}/issue).',
version: '1.0.0',
params: {
datacenter: {
@@ -76,7 +76,7 @@ export const issueCashAdvanceTool: ToolConfig<IssueCashAdvanceParams, SapConcurP
const cashAdvanceId = trimRequired(params.cashAdvanceId, 'cashAdvanceId')
return {
...baseProxyBody(params),
path: `/cashadvance/v4/cashadvances/${encodeURIComponent(cashAdvanceId)}/issue`,
path: `/cashadvance/v4.1/cashadvances/${encodeURIComponent(cashAdvanceId)}/issue`,
method: 'POST',
body: params.body ?? {},
}
+8
View File
@@ -68,6 +68,13 @@ export const listUsersTool: ToolConfig<ListUsersParams, SapConcurProxyResponse>
visibility: 'user-or-llm',
description: 'SCIM v4.1 pagination cursor returned by a prior call',
},
filter: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'SCIM filter expression. Supported attributes: userName, employeeNumber, externalId.',
},
attributes: {
type: 'string',
required: false,
@@ -92,6 +99,7 @@ export const listUsersTool: ToolConfig<ListUsersParams, SapConcurProxyResponse>
query: buildListQuery({
count: params.count,
cursor: params.cursor,
filter: params.filter,
attributes: params.attributes,
excludedAttributes: params.excludedAttributes,
}),
+1
View File
@@ -327,6 +327,7 @@ export interface GetItineraryParams extends SapConcurBaseParams {
export interface ListUsersParams extends SapConcurBaseParams {
count?: number
cursor?: string
filter?: string
attributes?: string
excludedAttributes?: string
}