CLI + MCP server for the BearingPoint xflow (SAP Fiori) timesheet apps
Server defines 18 tools with reasonable descriptions and input schemas. Naming follows verb_noun convention (session_status, sso_login, std_read, std_book, std_delete). Descriptions are present and contextual (avg ~150 chars), explaining WHAT each tool does and WHEN to use it. However, critical gaps exist: (1) array-type parameters (entries in std_book, std_delete, mp_book, mp_delete) lack detailed schema documentation of their item structure, LLMs cannot infer what fields belong in each entry; (2) no output schemas documented anywhere, agents don't know what fields to expect from responses; (3) error handling is minimal, no recovery guidance or categorization; (4) tool duplication (std_* vs mp_* prefixes) creates 9 near-identical pairs, increasing cognitive load without clear differentiation in descriptions; (5) no tool annotations (readOnlyHint, destructiveHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Composition is reasonable, tools chain logically (calendar → orders → book), but lack of output documentation breaks the chain.
Book time on the timesheet: one or more entries (attendance type, order, sales order, hours, date). Returns what was booked.
The calendar for a date range: which days are working days, which are holidays, and which are weekends. Needed to compute the hours per day when booking time.
Chargeable sales orders (RKDAUF) that can be booked: customer projects, internal projects, etc. Needed to fill the `salesOrder` field when booking time.
Delete timesheet entries: one or more entries by date and order. Returns what was deleted.
Non-chargeable receiver orders (RAUFNR) that can be booked: administration, training, etc. Needed to fill the `order` field when booking time.
Read the timesheet for a date range: what time is already booked, on which orders, and how many hours are left to book.
Array parameters (entries in std_book, std_delete, mp_book, mp_delete) lack documented item schema. The itemSchema Zod object is defined in code but not exposed in tool registration, LLMs cannot see what fields belong in each entry (attendanceType, order, salesOrder, salesOrderItem, shortText, date, hours). This forces agents to guess or fail.
No output schemas documented for any tool. Agents do not know what fields to expect from responses (e.g., does std_read return {booked: [], remaining: {}} or {entries: [], summary: {}}?). This breaks tool chaining and forces agents to reason about response structure.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2025-06-18+ | v2 |
Sales order items (RKDPOS) for a chargeable sales order. Needed to fill the `salesOrderItem` field when the order has multiple items.
The SAP user behind the stored session (checks that the session still works)
Whether an SAP session is available (calls SAP to check; an expired session is renewed silently through the persistent browser profile when possible). Returns the SAP user when logged in, and whether the identity provider's sign-in is remembered.
Establish a session through the persistent browser profile: silently when the identity provider still remembers this browser, otherwise in a browser window where you sign in yourself (no password passes through the tool)
Book time on the timesheet: one or more entries (attendance type, order, sales order, hours, date). Returns what was booked.
The calendar for a date range: which days are working days, which are holidays, and which are weekends. Needed to compute the hours per day when booking time.
Chargeable sales orders (RKDAUF) that can be booked: customer projects, internal projects, etc. Needed to fill the `salesOrder` field when booking time.
Delete timesheet entries: one or more entries by date and order. Returns what was deleted.
Non-chargeable receiver orders (RAUFNR) that can be booked: administration, training, etc. Needed to fill the `order` field when booking time.
Read the timesheet for a date range: what time is already booked, on which orders, and how many hours are left to book.
Sales order items (RKDPOS) for a chargeable sales order. Needed to fill the `salesOrderItem` field when the order has multiple items.
The SAP user behind the stored session (checks that the session still works)
Tool duplication: 9 pairs of std_* and mp_* tools (user, calendar, non_chargeable_orders, chargeable_orders, sales_order_items, read, book, delete) with nearly identical descriptions. Descriptions do not explain when to use std_read vs mp_read (Standard vs Multiproject timesheet). LLMs will struggle to pick the right variant.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels declared in metadata (READ_ONLY, WRITE, DESTRUCTIVE). Agents cannot infer safety properties from tool definitions alone.
Error handling is minimal. No recovery guidance (e.g., 'If session expired, call sso_login'), no error categorization (retryable vs user-fixable vs fatal), and no actionable error messages. Agents cannot self-correct on failures.