Python SDK for NORNR, the control plane between AI agent intent and real-world execution. Provides MCP server integration for governed spend, approvals, audit trails, and budget controls.
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and error handling. nornr.request_spend has a complex input object (business_context) with no nested schema details. nornr.review_bundle accepts empty input but lacks guidance on what it returns. Neither tool documents output schemas, error cases, or recovery paths. Descriptions are present but generic (194-char baseline suggests room for improvement). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear semantic differences (request_spend is destructive, review_bundle is read-only). Parameter descriptions exist but lack constraints, ranges, or format guidance.
Request spend approval for an agent action with amount, destination, counterparty, purpose, and optional business context
Review the bundle of queued spend requests and get approval status
nornr.review_bundle has empty input schema ({}) with no description of what it returns or when to call it. LLM cannot infer output structure or purpose.
business_context parameter in nornr.request_spend is typed as 'object' with no nested schema. LLM cannot validate structure or know which fields are required/optional.
No output schemas documented for either tool. LLM cannot plan downstream calls or extract required fields (e.g., does review_bundle return approval status, timestamps, or bundle ID?).
No error handling guidance. What happens if spend request exceeds budget? If counterparty is invalid? LLM has no recovery path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Tool annotations missing. nornr.request_spend is destructive (creates spend request) but lacks destructiveHint. nornr.review_bundle is read-only but lacks readOnlyHint. Agents cannot distinguish safe from unsafe operations.