Model Context Protocol server for managing Concur expense reports and entries using the v4 API
The server provides 4 tools with basic descriptions and partial schema support. However, multiple critical gaps prevent higher scoring: (1) schemas lack complete parameter validation details (no min/max for limit, no enums, no format constraints); (2) descriptions are minimal (10-80 chars, well below the 194-char baseline) and lack actionable guidance on when to use each tool or what to do on failure; (3) error responses are present in code but descriptions don't explain error recovery paths; (4) no output schema documentation visible; (5) parameter descriptions are sparse, 'limit' and 'report_id' lack usage examples or constraints. The tools follow basic naming conventions (verb_noun) but lack the sophistication needed for agent-driven tool selection. Code shows good error handling internally (try/catch with custom exceptions), but this doesn't translate to the tool interface LLMs interact with.
Create a new Concur expense report.
Create a new expense entry within a report.
Delete an expense entry from a report.
Delete an expense report.
Get guide on performing batch operations with v4 APIs.
Get guide on best practices for working with Concur v4 APIs.
Get detailed information about a specific Concur expense report.
Get guide on debugging and troubleshooting Concur API calls.
Parameter descriptions lack actionable constraints. 'limit' parameter has no min/max bounds, error guidance, or default rationale. Users/LLMs cannot reason about valid values.
Tool descriptions are too brief (10-80 chars vs 194-char baseline). They lack context on WHEN to call the tool, WHAT it returns, and what to do on failure. Insufficient for LLM decision-making.
No documented output schemas. Code returns Dict[str, Any] but response structure is not documented for the LLM. LLMs cannot plan downstream calls or extract required fields without explicit schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 8 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Get guide on error handling patterns and best practices for Concur v4 API.
Get detailed information about a specific expense entry.
Get list of available expense types.
Get guide on handling pagination with v4 API endpoints.
Get list of available payment types.
Get comprehensive guide on v4 API authentication setup and OAuth2 password grant flow.
Get comprehensive guide on managing expense entries with v4 APIs including CRUD operations.
Get comprehensive guide on managing expense reports with v4 APIs including list, create, and delete operations.
List Concur expense reports for the authenticated user.
List expense entries within a report.
Test the connection to Concur by attempting to authenticate.
Update an existing expense entry.
Error recovery guidance missing from tool descriptions. Code catches exceptions and returns error dicts, but tool descriptions don't tell LLMs what to do on failure (retry? ask user? try alternative tool?).
create_concur_report has optional parameters (purpose, business_purpose, currency_code, country) with no guidance on defaults or mutual exclusivity. Defaults like 'USD' and 'US' may not match user context.
Parameter 'report_id' in get_concur_report_details has no format or example guidance. LLMs don't know whether to pass UUIDs, numeric IDs, or alphanumeric codes.
No pagination support visible in list_concur_reports beyond limit. No offset, cursor, or total_count documented. Large result sets could blow context windows.