Skip to main content
Glama
svharivinod

TallyPrime MCP Server

by svharivinod

TallyPrime MCP Server

Talk to your TallyPrime accounting data using plain English — powered by Claude AI.


What is this?

If you've ever used TallyPrime, you know the drill — open the app, navigate through menus, set date ranges, find the right report, and read through dense numbers. It works, but it's not exactly conversational.

This project changes that.

TallyPrime MCP Server connects TallyPrime to Claude (Anthropic's AI assistant) using a protocol called MCP (Model Context Protocol). Once set up, you can simply ask Claude things like:

  • "What are my outstanding receivables as of today?"

  • "Create a sales invoice for ABC Traders for ₹50,000 with 18% GST"

  • "Show me the P&L for FY 2025-26"

  • "Which company is currently open in Tally?"

And Claude will fetch the answer directly from your TallyPrime data — no menu navigation needed.


Related MCP server: Tally Prime MCP Server

Why do we need this?

TallyPrime is powerful, but it was designed for accountants who know exactly where every report lives. For everyone else — business owners, managers, founders — it can feel like a maze.

Here are the real problems this project solves:

Getting information is slow. To check outstanding receivables you need to open Tally, navigate to the right report, set the date, wait for it to load, and read through rows of numbers. With this project, you just ask. Claude fetches it in seconds.

You need to know Tally's language. Tally has its own terminology — voucher types, ledger groups, TDL reports. Most people just want answers, not a lesson in accounting software navigation.

Tally has no modern API. Unlike modern software, TallyPrime doesn't have a REST API or webhook system. It communicates over an old XML protocol called TDL. This project handles all of that complexity so you never have to think about it.

AI cannot access desktop software. Claude is a cloud-based AI — it has no way to open TallyPrime or read your data directly. This MCP server acts as the secure bridge between them.

Creating entries is repetitive. Typing the same kind of voucher every day — same ledgers, same format — is tedious. With this project you can describe the transaction in plain English and Claude creates it in Tally.

In short: this project removes the friction between your brain and your accounting data.


How it works

TallyPrime has a built-in Gateway Server that accepts XML requests on port 9000. This project acts as the bridge — it translates Claude's tool calls into the XML that TallyPrime understands, sends them, parses the response, and returns clean readable text back to Claude.

Architecture

┌─────────────────────────────────────────┐
│                  You                    │
│          (ask in plain English)         │
└──────────────────┬──────────────────────┘
                   │
       ┌───────────┴───────────┐
       │                       │
┌──────▼───────┐       ┌───────▼──────┐
│    Claude    │       │   Claude.ai  │
│   Desktop   │       │  (web/cloud) │
│ (stdio mode) │       │  (SSE mode)  │
└──────┬───────┘       └───────┬──────┘
       │    MCP Protocol       │
       └───────────┬───────────┘
                   │
┌──────────────────▼──────────────────────┐
│         TallyPrime MCP Server           │
│                                         │
│  ┌────────────┐   ┌─────────────────┐   │
│  │ server.py  │   │ server_http.py  │   │
│  │  (stdio)   │   │   (HTTP/SSE)    │   │
│  └─────┬──────┘   └────────┬────────┘   │
│        └─────────┬─────────┘            │
│                  │                      │
│      ┌───────────▼──────────────┐       │
│      │       17 MCP Tools       │       │
│      │  Company · Ledgers ·     │       │
│      │  Vouchers · Reports      │       │
│      └───────────┬──────────────┘       │
│                  │                      │
│   ┌──────────────┴──────────────┐       │
│   │                             │       │
│ ┌─▼────────────┐  ┌─────────────▼──┐   │
│ │tally_client  │  │  xml_builder   │   │
│ │ (HTTP calls) │  │ (TDL XML)      │   │
│ └──────────────┘  └────────────────┘   │
└──────────────────┬──────────────────────┘
                   │ XML over HTTP (port 9000)
        [Cloudflare Tunnel for cloud mode]
                   │
┌──────────────────▼──────────────────────┐
│        TallyPrime Gateway Server        │
│          (your Windows machine)         │
└──────────────────┬──────────────────────┘
                   │
┌──────────────────▼──────────────────────┐
│          Your accounting data           │
└─────────────────────────────────────────┘

Local mode (Claude Desktop): Everything runs on your machine. Claude Desktop launches the MCP server as a subprocess and communicates over stdio. Your Tally data never leaves your computer.

Cloud mode (Claude.ai): The MCP server runs on a cloud host. A Cloudflare Tunnel exposes your local TallyPrime to the internet securely so the cloud server can reach it.


Architecture Components Explained

Here is what each piece in the architecture diagram actually does and why it exists.

You

The starting point. You type a plain English question or instruction in Claude Desktop or Claude.ai. You don't need to know anything about XML, TDL, or how TallyPrime works internally.

Claude Desktop

Anthropic's official desktop app for Windows and Mac. It supports MCP servers — meaning it can launch local tools and connect to them. In this project, Claude Desktop reads claude_desktop_config.json and automatically starts the tallyprime-mcp server every time it opens. Communication happens over stdio (stdin/stdout) — completely local, no internet required.

Claude.ai (web)

The browser version of Claude at claude.ai. It can also connect to MCP servers, but only ones hosted on the internet. This is why the cloud mode requires a running HTTP server and a Cloudflare Tunnel.

server.py (stdio mode)

The entry point for Claude Desktop. When Claude Desktop launches tallyprime-mcp, this file is what runs. It uses FastMCP's stdio transport to read tool calls from Claude and send responses back. Think of it as the local receptionist — it receives Claude's requests and routes them to the right tool.

server_http.py (HTTP/SSE mode)

The entry point for Claude.ai cloud. It runs a lightweight web server using uvicorn and starlette, exposing three endpoints — /health, /sse, and /messages. Claude.ai connects via SSE (Server-Sent Events) — a persistent HTTP connection that stays open while Claude is working.

17 MCP Tools

Each tool is a Python function that Claude can call by name. Claude reads the tool's description and decides on its own when to use it and what parameters to pass. The tools are organized into four files — company.py, ledgers.py, vouchers.py, and reports.py. Every tool catches errors gracefully and returns a clean text response to Claude.

tally_client.py

The async HTTP client that actually talks to TallyPrime. It sends XML requests to http://localhost:9000, reads the response, and parses it into Python dictionaries. It also handles all the error scenarios — connection failures, timeouts, malformed XML, and TallyPrime error responses.

xml_builder.py

A library of functions that build TDL (Tally Definition Language) XML strings. TallyPrime only understands XML in a very specific format — this file knows all those formats so the rest of the code doesn't have to. Every Tally operation (get ledgers, create voucher, fetch report) has its own XML builder function here.

Cloudflare Tunnel

Only needed for cloud mode. TallyPrime runs on your local Windows machine behind a firewall — the internet can't reach it directly. Cloudflare Tunnel creates a secure outbound connection from your machine to Cloudflare's network, giving you a public URL (like https://xyz.trycloudflare.com) that forwards traffic to your local port 9000. Free to use, no account required for temporary tunnels.

TallyPrime Gateway Server

TallyPrime's built-in server that listens on port 9000. You enable it via F12 → Advanced Configuration → Enable ODBC Server. It accepts XML requests and responds with XML data from your active company. This is the only part of the architecture that Tally itself provides — everything else in this repo is built around it.

Your accounting data

The ledgers, vouchers, and reports stored in TallyPrime's database on your machine. This is what everything in this project is ultimately trying to make accessible through natural language.


The 17 MCP Tools

This project registers 17 tools that Claude can call. Each tool is a Python function with a name, description, and input parameters. Claude reads the descriptions and decides on its own which tool to use based on what you ask.

Company (1 tool)

Tool

What it does

get_active_company

Returns the name of the company currently open in TallyPrime

Ledgers & Groups (4 tools)

Tool

What it does

get_all_ledgers

Lists all ledgers with their parent group and closing balance

get_ledger

Gets details and voucher history for a specific ledger by name

get_all_groups

Lists all account groups with their parent hierarchy

create_ledger

Creates a new ledger under a specified group with optional opening balance

Vouchers (6 tools)

Tool

What it does

get_vouchers

Fetches vouchers from the Day Book for a date range, with optional type filter

create_sales_voucher

Creates a sales invoice with party, sales ledger, amount, and optional GST

create_purchase_voucher

Creates a purchase invoice with supplier, purchase ledger, amount, and optional GST

create_payment_voucher

Creates a payment entry (money going out) from a bank/cash ledger

create_receipt_voucher

Creates a receipt entry (money coming in) into a bank/cash ledger

create_journal_voucher

Creates a journal entry with a debit ledger and credit ledger

Reports (6 tools)

Tool

What it does

get_trial_balance

Returns the trial balance for a given date range

get_balance_sheet

Returns the balance sheet as of a specific date

get_profit_loss

Returns the profit and loss statement for a date range

get_stock_summary

Returns the stock/inventory summary as of a specific date

get_daybook

Returns all vouchers across all types for a date range

get_outstanding_receivables

Returns bills receivable — money owed to you — as of a date

Example prompts for each category

Company:
  "Which company is currently open in Tally?"

Ledgers:
  "Show me all ledgers"
  "Get details for ABC Traders ledger"
  "Create a ledger called XYZ Suppliers under Sundry Creditors"

Vouchers:
  "Show all sales vouchers for April 2025"
  "Create a sales invoice for ABC Traders for ₹50,000 + 18% GST dated today"
  "Record a payment of ₹15,000 from HDFC Bank to Office Rent"
  "Pass a journal entry: debit Depreciation, credit Machinery, ₹10,000"

Reports:
  "Get the P&L for FY 2025-26"
  "Show balance sheet as of 31 March 2026"
  "What are my outstanding receivables as of today?"
  "Show day book for last week"

What can it do?

Company

What you ask

What happens

"Which company is open in Tally?"

Returns the active company name

Ledgers & Groups

What you ask

What happens

"Show me all ledgers"

Lists all ledgers with group and closing balance

"Get details for ledger ABC Traders"

Returns voucher history for that ledger

"Show all account groups"

Lists all groups with parent hierarchy

"Create a new ledger called XYZ under Sundry Debtors"

Creates the ledger in Tally

Vouchers

What you ask

What happens

"Show sales vouchers for April 2025"

Returns all sales entries for that period

"Create a sales invoice for ABC Traders, ₹50,000 + 18% GST"

Creates the voucher in Tally

"Record a purchase from Supplier X for ₹30,000"

Creates a purchase voucher

"Record a payment of ₹10,000 from HDFC Bank to Office Rent"

Creates a payment voucher

"Record receipt of ₹25,000 from customer DEF into SBI account"

Creates a receipt voucher

"Pass a journal entry: debit Repairs, credit Bank, ₹5,000"

Creates a journal voucher

Reports

What you ask

What happens

"Get trial balance for Q1 2025"

Returns trial balance for the period

"Show balance sheet as of 31 March 2026"

Returns balance sheet

"Get P&L for FY 2025-26"

Returns profit and loss statement

"Show stock summary as of today"

Returns inventory summary

"Get day book for last week"

Returns all vouchers for that period

"What are my outstanding receivables?"

Returns bills receivable report


Project Structure

tallyprime-mcp/
├── src/
│   └── tallyprime_mcp/
│       ├── config.py           # Reads settings from .env file
│       ├── server.py           # Runs in Claude Desktop (stdio mode)
│       ├── server_http.py      # Runs in cloud for Claude.ai (HTTP/SSE mode)
│       ├── tally_client.py     # Talks to TallyPrime via XML over HTTP
│       ├── xml_builder.py      # Builds the XML requests TallyPrime understands
│       └── tools/
│           ├── company.py      # get_active_company
│           ├── ledgers.py      # ledger and group tools
│           ├── vouchers.py     # voucher read and create tools
│           └── reports.py      # financial report tools
├── .env.example                # Template for your configuration
├── .gitignore                  # Keeps .env and cache out of git
├── Dockerfile                  # For cloud deployment
├── pyproject.toml              # Package config and dependencies
└── README.md                   # This file

Requirements

  • Python 3.11 or higher (tested on Python 3.14)

  • TallyPrime 3.x or later running on Windows

  • Claude Desktop (for local use) or a cloud server (for Claude.ai)


Installation

Step 1 — Clone the repo

git clone https://github.com/svharivinod/tallyprime-mcp
cd tallyprime-mcp

Step 2 — Install dependencies

pip install -e .

This installs everything: mcp, httpx, uvicorn, starlette, python-dotenv.

Step 3 — Create your .env file

copy .env.example .env   # Windows
cp .env.example .env     # Mac/Linux

Open .env and set your Tally URL:

TALLY_URL=http://localhost:9000
TALLY_TIMEOUT=30

TallyPrime Setup

TallyPrime needs its Gateway Server switched on before this project can talk to it.

  1. Open TallyPrime

  2. Press F12 → click Advanced Configuration

  3. Set Enable ODBC ServerYes

  4. Confirm Port is 9000

  5. Press Enter to save

To verify it's working, run:

python -c "import httpx; r = httpx.get('http://localhost:9000'); print(r.text)"

You should see: <RESPONSE>TallyPrime Server is Running</RESPONSE>


Connecting to Claude Desktop

Claude Desktop is Anthropic's desktop app that supports MCP servers. Download it from: https://claude.ai/download

Step 1 — Find or create the config file

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

Step 2 — Add this configuration

{
  "mcpServers": {
    "tallyprime": {
      "command": "C:\\Users\\YOUR_USERNAME\\AppData\\Local\\Programs\\Python\\Python314\\Scripts\\tallyprime-mcp.exe",
      "env": {
        "TALLY_URL": "http://localhost:9000"
      }
    }
  }
}

To find the exact path of tallyprime-mcp.exe on your machine, run:

where.exe tallyprime-mcp

Step 3 — Restart Claude Desktop

Fully quit Claude Desktop (right-click system tray → Quit) and reopen it.

Step 4 — Verify

Click the + button in the chat input → Connectors → you should see tallyprime listed with a blue toggle.


Connecting to Claude.ai (Cloud Mode)

For Claude.ai to reach TallyPrime (which runs locally on Windows), you need to:

  1. Expose TallyPrime via a tunnel

  2. Run this server in HTTP/SSE mode

  3. Connect Claude.ai to your server URL

Step 1 — Create a tunnel with Cloudflare

Install cloudflared from: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

Then run on your Windows machine:

cloudflared tunnel --url http://localhost:9000

You'll get a URL like https://random-name.trycloudflare.com. Copy it.

Step 2 — Update your .env

TALLY_URL=https://random-name.trycloudflare.com
MCP_API_KEY=your-strong-random-secret
MCP_PORT=8000

Step 3 — Start the HTTP server

tallyprime-mcp-http

Step 4 — Connect Claude.ai

Go to Claude.ai → Settings → Integrations → Add MCP Server:

URL:   https://your-server-domain.com/sse
Token: your-strong-random-secret

Environment Variables

Variable

Default

Description

TALLY_URL

http://localhost:9000

TallyPrime Gateway URL

TALLY_TIMEOUT

30

Request timeout in seconds

MCP_HOST

0.0.0.0

HTTP server bind host (cloud mode)

MCP_PORT

8000

HTTP server port (cloud mode)

MCP_API_KEY

(empty)

Bearer token to protect cloud endpoint. Leave blank to disable auth.


Date Format

All dates use YYYYMMDD format. Examples:

Human date

YYYYMMDD format

1 April 2025

20250401

31 March 2026

20260331

15 August 2025

20250815


Known Issues and How We Solved Them

Building this wasn't completely straightforward. Here's what we ran into and how we fixed it — so you know what to do if you hit the same things.

TallyPrime returns invalid XML characters

Tally's XML responses sometimes contain control characters that Python's XML parser rejects. We solved this by cleaning the response with a regex before parsing:

clean = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f]', '', xml_text)

"List of Companies" report doesn't exist in TallyPrime

The List of Companies report name returns an error in TallyPrime. Instead, we use the List of Accounts request which includes SVCURRENTCOMPANY in its response headers — and extract the company name from there using regex.

Python 3.14 asyncio compatibility

Python 3.14 removed asyncio.get_event_loop() in the main thread. We fixed this by letting FastMCP handle its own event loop instead of setting one up manually.

Claude Desktop needs full path to the executable

Claude Desktop doesn't always inherit Windows PATH. Using just "command": "tallyprime-mcp" sometimes fails. The fix is to use the full path:

C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python314\\Scripts\\tallyprime-mcp.exe

Run where.exe tallyprime-mcp in PowerShell to find yours.

TallyClient context manager error

The MCP tools were failing with "Use TallyClient as an async context manager". We fixed send_xml() to create a temporary httpx client when called without a context manager, so tools work in both modes.

pip install -e . fails when Claude Desktop is running

Windows locks the .exe file when it's in use. The fix: kill Claude Desktop first with taskkill /F /IM "Claude.exe", then reinstall.


Cloud Deployment

Docker

docker build -t tallyprime-mcp .
docker run -d -p 8000:8000 \
  -e TALLY_URL=https://your-tunnel.trycloudflare.com \
  -e MCP_API_KEY=your-secret \
  tallyprime-mcp

Railway (easiest)

  1. Push this repo to GitHub

  2. Go to railway.app → New Project → Deploy from GitHub

  3. Add environment variables: TALLY_URL, MCP_API_KEY

  4. Railway auto-detects the Dockerfile and deploys


Security Notes

  • Never commit your .env file — it's already in .gitignore

  • Always set a strong MCP_API_KEY when running in cloud mode

  • The .env.example file is safe to commit — it has no real values

  • Your TallyPrime data never leaves your network in local/stdio mode


Tech Stack

Layer

Technology

MCP framework

mcp 1.27+ (Anthropic's official Python SDK)

HTTP client

httpx (async)

XML parsing

xml.etree.ElementTree + regex fallback

Cloud server

uvicorn + starlette

Config

python-dotenv

Packaging

hatchling via pyproject.toml


License

MIT — free to use, modify and distribute.


Available Tools

17 tools
create_journal_voucherB

Create a journal voucher in TallyPrime (adjustment or contra entry).

Args: date: Voucher date YYYYMMDD. debit_ledger: Ledger to debit. credit_ledger: Ledger to credit. amount: Journal amount. narration: Optional description.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
debit_ledgerYes
credit_ledgerYes
amountYes
narrationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description lacks behavioral details such as side effects, required permissions, or response format. It merely states the action without disclosing what happens or what the output contains, despite an output schema being present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, conveying purpose and parameter details in two compact sections. Every sentence adds value, though the Args section could be formatted more clearly as a list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with an output schema, the description covers parameter usage but omits the output structure. It is adequate but leaves the agent guessing about the return value or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by specifying date format (YYYYMMDD), ledger roles (debit/credit), amount as a number, and narration as optional. This adds meaningful context beyond the schema's property titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a journal voucher in TallyPrime, specifying it's for adjustment or contra entries. This distinguishes it from sales, payment, or purchase vouchers, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings like create_payment_voucher or create_purchase_voucher. The description does not mention prerequisites, scenarios, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ledgerA

Create a new ledger in TallyPrime.

Args: name: Name for the new ledger. group: Parent group (e.g. 'Sundry Debtors', 'Bank Accounts'). opening_balance: Opening balance. Positive=Debit, Negative=Credit. Default 0.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
groupYes
opening_balanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It only mentions the action and parameters, but does not disclose side effects, authorization requirements, error behavior, or whether the operation is idempotent. The sign convention for opening_balance is helpful, but overall behavioral context is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a clear first sentence stating the purpose, followed by parameter definitions in a structured list. It is efficient and front-loaded, though could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately explains the parameters for a simple creation tool. It doesn't cover behavioral aspects like idempotency or error handling, which are important for a mutation tool. However, the presence of an output schema (not described) reduces the need to explain return values. Overall, it is minimally viable but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter: 'name' for the ledger name, 'group' with examples like 'Sundry Debtors', and 'opening_balance' with its sign convention (positive=Debit, negative=Credit) and default value of 0. This adds substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new ledger in TallyPrime', specifying the action ('Create'), the resource ('ledger'), and the context ('in TallyPrime'). This distinguishes it from sibling tools like create_journal_voucher, which create different entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. It only describes the tool itself without indicating prerequisites, exclusivity, or situations where another tool would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_payment_voucherA

Create a payment voucher in TallyPrime (money going out).

Args: date: Voucher date YYYYMMDD. bank_ledger: Bank or cash ledger to pay from. expense_ledger: Expense or party ledger to debit. amount: Payment amount. narration: Optional description or reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
bank_ledgerYes
expense_ledgerYes
amountYes
narrationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only states creation without disclosing side effects, permissions, or return value. Minimal behavioral context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One-sentence purpose followed by bulleted args. No superfluous text; every sentence adds value. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers inputs adequately but lacks preconditions (e.g., ledgers must exist) and error conditions. Output schema exists, so return value details are forgone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters are described with added semantics: date format YYYYMMDD, ledger roles, and narration optionality. Compensates for 0% schema coverage by adding meaning beyond types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create a payment voucher in TallyPrime (money going out)', specifying verb and resource. It distinguishes from sibling tools like create_receipt_voucher (money coming in).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for outgoing payments via 'money going out', but no explicit when-to-use or when-not-to-use compared to alternative voucher types like journal or purchase vouchers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_purchase_voucherB

Create a purchase invoice in TallyPrime.

Args: date: Voucher date YYYYMMDD. party_ledger: Supplier ledger name. purchase_ledger: Purchase account ledger name. amount: Invoice amount excluding tax. narration: Optional description. tax_ledger: GST or tax ledger name (optional). tax_amount: Tax amount (optional, default 0).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
party_ledgerYes
purchase_ledgerYes
amountYes
narrationNo
tax_ledgerNo
tax_amountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks details on side effects, return values, prerequisites (e.g., ledger existence), or error conditions. It only describes the creation action without behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence summary followed by a bullet-point list of parameters. Every sentence adds value, and the structure is easy to parse for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (7 params, no annotations, output schema not described), the description lacks context on return values, prerequisites, and differentiation from sibling tools like create_payment_voucher. It is incomplete for full autonomous use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds essential meaning for all 7 parameters: date format, role of party_ledger and purchase_ledger, tax handling, and narration. Some parameter roles could be more explicit, but overall effective.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a purchase invoice in TallyPrime', specifying the exact verb (create), resource (purchase invoice), and system. This uniquely identifies the tool among siblings like create_sales_voucher.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like create_sales_voucher or create_payment_voucher. The description does not mention scenarios or prerequisites, leaving usage context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_receipt_voucherA

Create a receipt voucher in TallyPrime (money coming in).

Args: date: Voucher date YYYYMMDD. bank_ledger: Bank or cash ledger receiving the payment. party_ledger: Customer ledger to credit. amount: Receipt amount. narration: Optional description or reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
bank_ledgerYes
party_ledgerYes
amountYes
narrationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. However, it only describes the action without mentioning side effects, permissions, or system behavior. For a creation tool, it does not state that it records a transaction in TallyPrime or any consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a one-line intro followed by a bullet-like list of args. Every sentence adds useful information, and the structure allows quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists but the description does not explain return values, which is acceptable per guidelines. However, for a creation tool, it lacks context on what happens after voucher creation (e.g., confirmation, error handling). The parameter explanations are complete, but overall context is minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It provides concise explanations for each parameter, including date format (YYYYMMDD), roles of bank_ledger and party_ledger, and optional narration. This adds value beyond the schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a receipt voucher with the parenthetical 'money coming in', distinguishing it from sibling tools like create_payment_voucher. The verb 'create' and resource 'receipt voucher' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'money coming in' implicitly guides when to use this tool versus other voucher creations (e.g., payment voucher for money going out), but there is no explicit when-not-to-use guidance or mention of alternatives. The context is clear but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_sales_voucherA

Create a sales invoice in TallyPrime.

Args: date: Voucher date YYYYMMDD. party_ledger: Customer ledger name (must exist in Tally). sales_ledger: Sales account ledger name. amount: Invoice amount excluding tax. narration: Optional description or invoice number. tax_ledger: GST or tax ledger name (optional). tax_amount: Tax amount (optional, default 0).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
party_ledgerYes
sales_ledgerYes
amountYes
narrationNo
tax_ledgerNo
tax_amountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only mentions that party_ledger must exist in Tally and the date format. It does not describe error handling, side effects, required permissions, or success conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for purpose followed by a clear argument list. No redundant information, and the most important info (purpose) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 7 parameters and the existence of an output schema, the description covers all parameters adequately but lacks usage guidance and behavioral context. It does not mention prerequisites like company selection or constraints on date range.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides detailed parameter info: date format, ledger existence requirement, amount excluding tax, optional narration, and tax fields with defaults. This adds significant meaning beyond the schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Create a sales invoice in TallyPrime.' The verb 'Create' and resource 'sales invoice' are clear. It distinguishes from sibling tools like create_purchase_voucher and create_receipt_voucher by specifying 'sales invoice'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating sales invoices but does not explicitly state when to use this tool over alternatives like create_purchase_voucher. No exclusions or alternative suggestions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_active_companyA

Get the currently active company open in TallyPrime.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states 'Get', implying read-only, but does not mention idempotency, authentication requirements, or any side effects. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, directly states purpose with no superfluous words. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters and an output schema present, the description is sufficient. It tells the agent exactly what the tool does, and the output schema details the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters; baseline is 4. The description adds value by specifying that the tool retrieves the 'currently active company open in TallyPrime', clarifying what is returned beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Get' and the resource 'currently active company open in TallyPrime'. It uniquely identifies the tool's function among siblings, which focus on creating vouchers/ledgers or retrieving other data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or exclusions. The agent must infer context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_groupsA

Get all account groups defined in TallyPrime.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses read-only behavior but lacks details like return format or that it returns all groups without filtering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, direct sentence with no unnecessary words, perfectly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is sufficient. Could mention that it returns all groups without filtering, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is 100%, so baseline 4 applies. The description does not need to add parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all account groups in TallyPrime, using a specific verb and resource, and distinguishes it from sibling tools like get_all_ledgers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., get_all_ledgers, get_daybook), nor any context for typical workflow integration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_ledgersA

Get all ledgers in TallyPrime with their group and closing balance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are given, so the description bears full responsibility for behavioral disclosure. It indicates the tool retrieves all ledgers, implying a read-only operation, but does not mention any behavioral traits such as performance implications, sorting, or pagination. It is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise, front-loaded, and contains no extraneous information. It efficiently communicates the tool's function without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple list retrieval with an output schema likely detailing the return structure. The description covers the key output fields (group and closing balance) and is suitable for a low-complexity tool. However, it could mention that the list is unfiltered or always returns all ledgers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the input schema, so the description adds value by stating what will be returned (all ledgers with group and closing balance). The schema coverage is 100% (by default), and the description compensates by clarifying the output content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and resource 'all ledgers', clearly stating the action and scope. It also specifies 'with their group and closing balance', adding detail that distinguishes it from siblings like 'get_ledger' (single ledger) and 'create_ledger' (create operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or when not to use it. For example, it does not mention that for a specific ledger, 'get_ledger' might be more appropriate, or that this tool returns all ledgers without filtering.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balance_sheetA

Get the Balance Sheet from TallyPrime as of a specific date.

Args: as_of_date: Date YYYYMMDD (e.g. '20250331').

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks behavioral disclosure beyond stating it retrieves a balance sheet. It does not mention that it is a read-only operation, response format, or any potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus an args block. It is front-loaded with the main purpose and immediately provides parameter details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description does not need to explain return values. It adequately covers the tool's input and purpose, though it could briefly mention what the balance sheet includes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value by specifying the exact format for the as_of_date parameter (YYYYMMDD) and providing an example, which is not present in the input schema. Schema description coverage is 0%, so this compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Get), the resource (Balance Sheet), and the context (from TallyPrime as of a specific date). It distinguishes itself from sibling tools like get_profit_loss or get_trial_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or suggest other tools for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daybookA

Get the Day Book (all vouchers) from TallyPrime for a date range.

Args: from_date: Start date YYYYMMDD. to_date: End date YYYYMMDD.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateYes
to_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. Only describes what it does, with no mention of safety (read-only), permissions, side effects, or return behavior. Lacks necessary behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence for purpose, two lines for args. No redundant information. Front-loaded with key action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values are covered. Low complexity tool, but missing usage guidelines and behavioral transparency. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description includes useful param details (date format YYYYMMDD) for both parameters. Adds meaning beyond schema titles, fully compensating for coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves the Day Book (all vouchers) from TallyPrime filtered by date range. Verb and resource are specific, and it distinguishes from sibling tools like get_vouchers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage (for date range), but no explicit guidance on when to prefer this over alternatives like get_vouchers or other get tools. No when-not-to-use or exclusions provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ledgerB

Get details and recent vouchers for a specific ledger.

Args: name: Exact ledger name as it appears in TallyPrime (case-sensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states 'Get' (implying read-only) but does not mention safety, idempotency, error behavior, authentication, or rate limits. This is insufficient for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the purpose, with no extraneous words. It is optimally concise for a simple tool with one parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 required param, no nested objects, output schema exists), the description covers the core purpose and parameter semantics. However, it lacks details on what 'details' entail, whether pagination exists for vouchers, or error handling when the ledger is not found. The presence of an output schema mitigates the need to describe return values, but other gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no descriptions in schema), so the description compensates by adding that 'name' is the 'Exact ledger name as it appears in TallyPrime (case-sensitive).' This provides meaningful formatting and case-sensitivity details beyond the schema's type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get details and recent vouchers for a specific ledger,' using a specific verb and resource. It distinguishes from siblings like 'get_all_ledgers' (which returns all ledgers) and 'get_vouchers' (which lacks ledger specificity). However, 'details' is vague but acceptable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'get_all_ledgers' or 'get_vouchers.' The description implies usage for a specific ledger but does not state when not to use it or provide alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_outstanding_receivablesA

Get outstanding receivables (money owed to you) from TallyPrime.

Args: as_of_date: Date YYYYMMDD. Defaults to today if not provided. party_name: Filter by a specific customer name (optional).

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateNo
party_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes parameter behavior (default date, optional filter) but does not disclose whether the tool is read-only, has side effects, or requires specific permissions. More detail is needed for a complete behavioral picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for purpose, then a clear args list. Every sentence is necessary and efficient, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional parameters) and the presence of an output schema (so return values are already documented), the description covers all essential aspects: purpose and parameter semantics. It is complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains both parameters: 'as_of_date' with format 'YYYYMMDD' and default behavior, and 'party_name' as an optional filter. This adds significant meaning beyond the schema, which only has empty defaults and string types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get outstanding receivables (money owed to you) from TallyPrime', using a specific verb and resource. This distinguishes it from sibling tools like creation vouchers or other reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for retrieving receivables but provides no explicit guidance on when to use this tool versus alternatives or when not to use it. Given sibling tools are mostly creation-oriented, the context is clear but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profit_lossA

Get the Profit and Loss statement from TallyPrime.

Args: from_date: Start date YYYYMMDD (e.g. '20250401'). to_date: End date YYYYMMDD (e.g. '20260331').

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateYes
to_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description only says 'Get' implying read-only but lacks details on response format, limitations, or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and clear, though could be more structured with separate sections.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values are covered, but missing usage guidelines and behavioral transparency make it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description adds date format (YYYYMMDD) and examples, significantly enhancing parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets the Profit and Loss statement from TallyPrime, specifying the resource and system, and distinguishes from sibling tools like get_balance_sheet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, no prerequisites or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_summaryA

Get the Stock Summary (inventory) from TallyPrime as of a date.

Args: as_of_date: Date YYYYMMDD (e.g. '20260516').

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. It implies a read-only operation with 'Get', but does not mention side effects, authorization needs, or return format (though output schema exists). The description is adequate but lacks explicit behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is extremely concise with two clear sentences, no redundant information, and front-loaded purpose. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one required parameter and an output schema, the description covers purpose and parameter format adequately. It lacks behavioral transparency but is otherwise complete for a simple date-filtered query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds essential format guidance ('Date YYYYMMDD') and an example, which is meaningful beyond the schema's string type declaration. It compensates well for the lack of schema-level parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves Stock Summary (inventory) from TallyPrime as of a specific date, using action verb 'Get' and specifying the resource and context, which distinguishes it from siblings like 'get_balance_sheet' or 'create_sales_voucher'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly clear that this tool is for inventory summary queries, and sibling tool names (e.g., 'get_balance_sheet', 'get_profit_loss') indicate different reports, but no explicit when-to-use or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trial_balanceA

Get the Trial Balance from TallyPrime.

Args: from_date: Start date YYYYMMDD (e.g. '20250401'). to_date: End date YYYYMMDD (e.g. '20250930').

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateYes
to_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states the purpose without disclosing behavior such as read-only nature, data freshness, or any side effects. Minimal value added beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and includes parameter documentation in a clear docstring format. However, it could be slightly more structured (e.g., separate sections). No wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values need not be described. The description covers both required parameters with format examples. It is sufficient for a simple retrieval tool, though lacks context on what the trial balance report contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema has 0% description coverage, the description explicitly documents both parameters with format examples (YYYYMMDD), adding meaning beyond the schema properties which only have titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the Trial Balance from TallyPrime', with a specific verb and resource. This distinguishes it from sibling tools like get_balance_sheet and get_profit_loss, which produce different financial reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., get_balance_sheet). There is no mention of prerequisites, context, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vouchersA

Fetch vouchers from TallyPrime Day Book for a date range.

Args: from_date: Start date YYYYMMDD (e.g. '20250401'). to_date: End date YYYYMMDD (e.g. '20250430'). voucher_type: Filter — 'Sales', 'Purchase', 'Payment', 'Receipt', 'Journal'. Empty = all.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_dateYes
to_dateYes
voucher_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits but only states 'Fetch vouchers' (implying read-only). It omits details on authentication, rate limits, pagination, result limits, or error handling, which are critical for a data fetching tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single sentence stating purpose followed by a bulleted parameter list. Every element is necessary, and the format is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose and parameter semantics adequately. Since an output schema exists, the lack of return value details is less critical. However, it could mention pagination or behavior for empty results. Overall, it is nearly complete for this moderate-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates by explaining date formats (YYYYMMDD with examples) and voucher_type filter options (list of values, empty = all). This adds significant meaning beyond the schema's titles and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch vouchers from TallyPrime Day Book for a date range', specifying the verb (fetch), resource (vouchers), source (Day Book), and scope (date range). This distinguishes it from sibling tools like get_ledger or get_daybook, which focus on different data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_daybook or the create_* voucher tools. The description lacks when-not-to-use scenarios or comparisons, leaving the agent to infer context from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 17 tool updatesv0.1.0
    • First observedcreate_journal_voucher
    • First observedcreate_ledger
    • First observedcreate_payment_voucher
    • First observedcreate_purchase_voucher
    • First observedcreate_receipt_voucher
    • First observedcreate_sales_voucher
    • First observedget_active_company
    • First observedget_all_groups
    • First observedget_all_ledgers
    • First observedget_balance_sheet
    • First observedget_daybook
    • First observedget_ledger
    • First observedget_outstanding_receivables
    • First observedget_profit_loss
    • First observedget_stock_summary
    • First observedget_trial_balance
    • First observedget_vouchers

TDQS

A3.8/5.0

Scored across 17 tools

Disambiguation5/5

Each tool has a unique and clear purpose. Voucher creation tools are separated by type (journal, payment, purchase, receipt, sales), and query tools target distinct reports (balance sheet, profit/loss, trial balance, etc.). No overlaps or ambiguity.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., create_journal_voucher, get_balance_sheet). No mixing of styles or irregular naming.

Tool Count5/5

17 tools is appropriate for an accounting server covering voucher creation, ledger management, and financial reports. The number is well-scoped without being overwhelming or too sparse.

Completeness4/5

The set covers core CRUD operations for vouchers and ledgers, and provides essential financial reports. However, it lacks update/delete operations for vouchers and ledgers, and misses some advanced features like GST filing.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Large Language Models to access and query Tally Prime ERP data, including financial reports, masters, and inventory summaries, via the Model Context Protocol.
    76
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects Tally Prime ERP data to AI assistants via MCP, enabling natural language queries for financial reports, stock summaries, and ledger balances.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Bridges Tally Prime ERP with AI assistants, enabling querying financial reports, managing masters, creating vouchers, and analyzing GST data through natural language.
    AGPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Gives AI models native-level control over TallyPrime ERP, covering 169+ tools across all functional modules including masters, vouchers, reports, GST, payroll, and more.
    -