Production-grade MCP servers for Indian enterprise systems: Tally, Zoho Books, GST. Agents that can do books and file taxes in India.
Four well-structured GST tools with complete JSON schemas, clear descriptions (100-200 chars), and proper parameter typing. All tools declare input schemas with zod validation. Naming follows verb_noun pattern (gst_validate_*, gst_einvoice_*, gst_reconcile_*). Descriptions explain WHAT, WHEN, and output. However, output schemas are not documented in tool definitions, LLMs cannot see what fields to expect from responses. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool composition is sound (each does one thing), but parameter descriptions lack format constraints (e.g., 'date must be YYYY-MM-DD' is stated but not enforced via regex in schema). Security: no secrets in params (good), but no audit logging or permission gates visible.
Build the canonical NIC e-invoice JSON payload (v1.01) for one invoice: computes per-item IGST/CGST/SGST splits, totals and round-off. Pure computation; nothing is sent anywhere.
Generate an IRN for an invoice. Dry-run (default) builds the payload and, when seller_public_key_pem is provided, the encrypted NIC request envelope. Execution requires a configured IRP client (mock by default).
Reconcile your purchase register against GSTR-2B. Classifies every invoice as matched (exact/fuzzy), mismatched (value/tax deltas), missing in 2B (supplier has not filed) or missing in books, and quantifies ITC at risk vs excess claim risk.
Validate a GSTIN: mod-36 checksum, state code lookup, PAN extraction and entity type. Use before quoting any GSTIN in filings or e-invoices.
Output schemas not documented. Tool definitions show input schemas but no return type documentation. LLMs cannot plan downstream calls or extract fields without seeing what each tool returns.
Error handling lacks recovery guidance. No visible error classification (retryable vs user-fixable vs fatal) or actionable error messages. Agents cannot self-correct on validation failures.
Parameter format constraints stated in descriptions but not enforced in schema. E.g., 'date must be YYYY-MM-DD' is text; should be a format: 'date-time' or pattern in zod. LLMs cannot parse text constraints reliably.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
gst_einvoice_generate accepts seller_public_key_pem as a parameter. Cryptographic keys should never be tool parameters, use server-side secret injection via environment or vault. Keys in params leak into logs and traces.
No dry-run or confirmation pattern for write operations. gst_einvoice_generate has a dry_run flag (good), but gst_reconcile_2b and others lack confirmation steps. Agents can make irreversible mistakes without safeguards.