Bukku accounting API tools for Claude via Model Context Protocol
Bukku MCP has clear, well-structured tool definitions with consistent naming (verb_noun pattern) and solid descriptions. All 8 tools have descriptions (avg 120 chars) and input schemas using Zod. However, output schemas are undocumented, responses are JSON-stringified without field documentation. Parameter descriptions are present but generic (e.g., 'Updated data' for journal-entry update). Error handling returns structured errors via transformHttpError/transformNetworkError, but recovery guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination details for search-accounts despite supporting page/page_size. Overall solid foundation but lacks LLM-optimized output documentation and error recovery patterns.
Archive an account (hide from active lists). Use this instead of delete for accounts with transaction history. Archived accounts are hidden by default but can be reactivated.
Create a new journal entry. Use list-accounts to find valid account IDs for line items. Journal entries must have balanced debits and credits (total debits = total credits).
Delete a location for multi-branch accounting. API may restrict deletion if location is referenced by transactions. Archive instead if deletion fails.
Get a location for multi-branch accounting by ID
Search and filter accounts from the chart of accounts. Supports filtering by category and archived status. For a quick cached account lookup (e.g., to find account IDs for journal entries), use list-accounts instead.
Output schemas undocumented. All tools return JSON.stringify(result) without field documentation. LLMs cannot plan downstream calls or extract specific fields reliably.
Journal entry tools (create/update) have vague 'data' parameter: type 'object' with description 'Journal entry data including journal_items array...' No schema for nested structure. LLM must guess field names and types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Agents cannot infer safety properties without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Unarchive an account (restore to active lists).
Update an existing journal entry. If updating line items, journal entries must have balanced debits and credits (total debits = total credits).
Update an existing location for multi-branch accounting
Error handling returns structured errors but lacks recovery guidance. 'search-accounts' error does not suggest 'try with fewer filters' or 'check account exists'. Agents cannot self-correct.
update-location and create-journal-entry have generic parameter descriptions ('Updated data', 'Journal entry data'). LLMs cannot infer required vs optional fields or valid value ranges.