TallyPrime MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TallyPrime MCP ServerWhat are my outstanding receivables as of today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Returns the name of the company currently open in TallyPrime |
Ledgers & Groups (4 tools)
Tool | What it does |
| Lists all ledgers with their parent group and closing balance |
| Gets details and voucher history for a specific ledger by name |
| Lists all account groups with their parent hierarchy |
| Creates a new ledger under a specified group with optional opening balance |
Vouchers (6 tools)
Tool | What it does |
| Fetches vouchers from the Day Book for a date range, with optional type filter |
| Creates a sales invoice with party, sales ledger, amount, and optional GST |
| Creates a purchase invoice with supplier, purchase ledger, amount, and optional GST |
| Creates a payment entry (money going out) from a bank/cash ledger |
| Creates a receipt entry (money coming in) into a bank/cash ledger |
| Creates a journal entry with a debit ledger and credit ledger |
Reports (6 tools)
Tool | What it does |
| Returns the trial balance for a given date range |
| Returns the balance sheet as of a specific date |
| Returns the profit and loss statement for a date range |
| Returns the stock/inventory summary as of a specific date |
| Returns all vouchers across all types for a date range |
| 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 fileRequirements
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-mcpStep 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/LinuxOpen .env and set your Tally URL:
TALLY_URL=http://localhost:9000
TALLY_TIMEOUT=30TallyPrime Setup
TallyPrime needs its Gateway Server switched on before this project can talk to it.
Open TallyPrime
Press F12 → click Advanced Configuration
Set Enable ODBC Server → Yes
Confirm Port is 9000
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.jsonMac:
~/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-mcpStep 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:
Expose TallyPrime via a tunnel
Run this server in HTTP/SSE mode
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:9000You'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=8000Step 3 — Start the HTTP server
tallyprime-mcp-httpStep 4 — Connect Claude.ai
Go to Claude.ai → Settings → Integrations → Add MCP Server:
URL: https://your-server-domain.com/sse
Token: your-strong-random-secretEnvironment Variables
Variable | Default | Description |
|
| TallyPrime Gateway URL |
|
| Request timeout in seconds |
|
| HTTP server bind host (cloud mode) |
|
| HTTP server port (cloud mode) |
| (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 |
|
31 March 2026 |
|
15 August 2025 |
|
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.exeRun 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-mcpRailway (easiest)
Push this repo to GitHub
Go to railway.app → New Project → Deploy from GitHub
Add environment variables:
TALLY_URL,MCP_API_KEYRailway auto-detects the Dockerfile and deploys
Security Notes
Never commit your
.envfile — it's already in.gitignoreAlways set a strong
MCP_API_KEYwhen running in cloud modeThe
.env.examplefile is safe to commit — it has no real valuesYour TallyPrime data never leaves your network in local/stdio mode
Tech Stack
Layer | Technology |
MCP framework |
|
HTTP client |
|
XML parsing |
|
Cloud server |
|
Config |
|
Packaging |
|
License
MIT — free to use, modify and distribute.
Available Tools
17 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| debit_ledger | Yes | ||
| credit_ledger | Yes | ||
| amount | Yes | ||
| narration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| group | Yes | ||
| opening_balance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| bank_ledger | Yes | ||
| expense_ledger | Yes | ||
| amount | Yes | ||
| narration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| party_ledger | Yes | ||
| purchase_ledger | Yes | ||
| amount | Yes | ||
| narration | No | ||
| tax_ledger | No | ||
| tax_amount | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| bank_ledger | Yes | ||
| party_ledger | Yes | ||
| amount | Yes | ||
| narration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| party_ledger | Yes | ||
| sales_ledger | Yes | ||
| amount | Yes | ||
| narration | No | ||
| tax_ledger | No | ||
| tax_amount | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| from_date | Yes | ||
| to_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | No | ||
| party_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| from_date | Yes | ||
| to_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| from_date | Yes | ||
| to_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| from_date | Yes | ||
| to_date | Yes | ||
| voucher_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
17 tool updates
v0.1.0- First observed
create_journal_voucher - First observed
create_ledger - First observed
create_payment_voucher - First observed
create_purchase_voucher - First observed
create_receipt_voucher - First observed
create_sales_voucher - First observed
get_active_company - First observed
get_all_groups - First observed
get_all_ledgers - First observed
get_balance_sheet - First observed
get_daybook - First observed
get_ledger - First observed
get_outstanding_receivables - First observed
get_profit_loss - First observed
get_stock_summary - First observed
get_trial_balance - First observed
get_vouchers
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
AI for Tally Prime and Tally ERP 9. Hosted MCP server to ask your accounts in any language.
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables Large Language Models to access and query Tally Prime ERP data, including financial reports, masters, and inventory summaries, via the Model Context Protocol.76MIT
- AlicenseNot gradedqualityCmaintenanceConnects Tally Prime ERP data to AI assistants via MCP, enabling natural language queries for financial reports, stock summaries, and ledger balances.MIT
- AlicenseNot gradedqualityDmaintenanceBridges Tally Prime ERP with AI assistants, enabling querying financial reports, managing masters, creating vouchers, and analyzing GST data through natural language.AGPL 3.0
- FlicenseNot gradedqualityDmaintenanceGives AI models native-level control over TallyPrime ERP, covering 169+ tools across all functional modules including masters, vouchers, reports, GST, payroll, and more.-