Invoice processing demo using Temporal workflows and MCP (Model Context Protocol)
Single tool with complete schema and reasonable description, but significant gaps in parameter documentation and error handling. The process_invoice tool has a well-structured input schema with nested objects and array items, but lacks descriptions for several nested properties (e.g., the 'invoice' parameter itself has no description). Output schema is not documented. No error recovery guidance. Tool naming is clear (verb_noun pattern), but the server lacks composition patterns for multi-step workflows (approve/reject/status tools exist in durable_sync_mcp but not visible in the evaluated server.py). Conservative scoring reflects STDIO transport limitations and incomplete parameter documentation.
Start invoice processing through validation, approval, and payment. Kicks off a Temporal workflow that validates the invoice against the ERP system, then waits for human approval before processing payments. Returns the workflow_id and run_id needed to check status or approve/reject.
Missing parameter descriptions for nested objects. The 'invoice' parameter itself lacks a description; only leaf properties (invoice_id, customer, lines) are documented. LLMs cannot infer the purpose of the invoice wrapper object.
No output schema documented. Tool returns {workflow_id, run_id} but the description does not specify the return type or field names. LLMs must infer structure from the docstring alone.
No error handling or recovery guidance. If Temporal client connection fails or workflow start fails, the tool will raise an unhandled exception. Description does not explain prerequisites (Temporal server must be running) or what to do on failure.
STDIO transport only. Server cannot be used by hosted MCP clients or remote agents. Hard cap at 50 for protocol readiness.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Missing tool composition. The durable_sync_mcp/server.py file shows approve_invoice, reject_invoice, and invoice_status tools exist, but they are not included in the evaluated server.py. This breaks the workflow chain, process_invoice returns workflow_id/run_id, but no tools are visible to act on them.