Account AI for Tally — a Model Context Protocol (MCP) server that connects Claude and other AI assistants to Tally Prime accounting software.
Account AI for Tally demonstrates solid tool design with clear, domain-specific naming and comprehensive descriptions. All 9 tools have explicit schemas with typed parameters and detailed descriptions (avg 180 chars). Tool names follow verb_noun convention (query-, list-, chart-, trial-, profit-, balance-, stock-, ledger-, create-). However, output schemas are documented only in descriptions, not as formal JSON Schema objects. Error handling guidance is minimal, tools lack recovery hints or actionable error messages. Parameter descriptions are strong but some lack explicit format constraints (e.g., date format stated in description but not as regex pattern). The create-voucher tool has complex nested array input (ledgerEntries) but lacks validation rules for balanced entries.
Fetch Balance Sheet as on a date. Returns fields: ledger_name, group_name, closing_balance. Negative closing_balance = asset (debit), positive = liability (credit). Tip: fetch chart-of-accounts first for group hierarchy. Result cached in an in-memory SQL table — use query-database with the returned tableID.
Fetch the full chart of accounts (group hierarchy) from Tally. Returns fields: group_name, group_parent, bs_pl (BS=Balance Sheet, PL=Profit & Loss), dr_cr (D=Debit, C=Credit), affects_gross_profit (Y/N). The group/parent columns form a tree in flat format. Fetch this before using trial-balance, profit-loss, or balance-sheet to understand the GL structure. Result is cached in an in-memory SQL table — use query-database with the returned tableID for analysis.
Create a new voucher in Tally. Supports journal, sales, purchase, receipt, payment, contra, and other voucher types. Provide ledger entries with amounts and optional narration. Returns success status and created voucher details.
Fetch ledger account details for a date range. Returns fields: date, reference_number, particulars, debit, credit, balance. Result cached in an in-memory SQL table — use query-database with the returned tableID.
List all master records of a given type from Tally. Use this to look up valid names before creating vouchers or other masters. Collections: group (account groups), ledger (GL accounts/parties), vouchertype, unit (UOM), godown (warehouse), stockgroup, stockitem (inventory), costcategory, costcentre, attendancetype, company, currency, gstin, gstclassification. Returns tab-separated list of names.
Output schemas documented only in descriptions, not as formal JSON Schema. LLMs cannot parse unstructured text to infer response structure for downstream tool chaining.
create-voucher lacks validation rules for ledger entries. No guidance on balanced debit/credit requirement, required fields per entry type, or error recovery if entry validation fails.
No error handling guidance. Tools lack recovery hints (e.g., 'If date range is invalid, try...') or actionable error messages. Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 71 | <=2025-11-25 | v2 |
Fetch Profit & Loss statement for a date range. Returns fields: ledger_name, group_name, amount. Negative amount = expense (debit), positive = income (credit). Tip: fetch chart-of-accounts first for group hierarchy. Result cached in an in-memory SQL table — use query-database with the returned tableID.
Run SQL queries on cached Tally data. Other tools (trial-balance, ledger-account, etc.) cache their results in temporary in-memory SQL tables and return a tableID. Use this tool to query those tables with standard SQL (SQLite dialect) for aggregation, filtering, sorting, and joins. Dates are stored as 'YYYY-MM-DD' text — use SQLite date functions (date(), strftime()) rather than DuckDB-style date_trunc. Tables auto-expire after 15 minutes. Returns tab-separated output.
Fetch inventory stock summary for a date range. Returns fields: name (stock item), parent (stock group), opening_quantity, opening_value, inward_quantity, inward_value, outward_quantity, outward_value, closing_quantity, closing_value. Result cached in an in-memory SQL table — use query-database with the returned tableID.
Fetch trial balance for a date range. Returns fields: ledger_name, group_name, opening_balance, net_debit, net_credit, closing_balance. Tip: fetch chart-of-accounts first to understand group hierarchy. Result cached in an in-memory SQL table — use query-database with the returned tableID.
Date format constraints stated in descriptions but not formalized as regex patterns or format declarations in schema. LLMs may pass invalid dates.
targetCompany parameter accepts free-form strings with guidance to 'validate using list-master'. No enum constraint or validation. LLMs may pass invalid company names.