Skip to main content
Glama
ComplyEaze Bridge: TallyPrime MCP server for Claude Desktop

ComplyEaze Bridge: TallyPrime MCP server for Claude Desktop

Official

outstandings

Read-only

Retrieve receivable and payable totals, ageing, top parties, and open bills from Tally's paired bills reports, with an optional as-of date for point-in-time outstanding balances.

Instructions

Answer what is outstanding: receivable and payable totals from Tally's own paired bills reports, ageing, the top parties and the open bills, on a freshly observed supported product and mode and a date valid for the operation. as_of is optional: left out, it is this computer's date (tally_status today), and the date used is always returned as result.as_of, whatever the state. open_bills_total counts every open bill in the requested direction, all of which totals and the ageing cover, and open_bills_shown counts the bills on this page (limit is not lowered when the response size shortens the page): when shown is less than total, say so plainly, for example "showing 500 of 1,240 open bills; the totals and the ageing cover all 1,240" (on a later page, the bills from offset + 1; on a partial read, both counts and the sentence cover the base-currency ledgers only, so say so in it), and ask for the next bills with offset set to next_offset. receivable and payable follow the sign of each bill's balance, as Tally's own Bills Receivable and Bills Payable reports scope them, not the type of party: a customer's advance or a credit note raised to a customer appears under payable, and a supplier's advance or a debit note raised to a supplier under receivable, because those reports carry no bill type. That holds for an advance or a note kept as its own bill: an on-account advance goes to the unallocated figure instead, and a credit note set against an open invoice reduces that invoice. Measured on one synthetic book (TallyPrime Silver 7.1). Read a bill's kind as a direction, not as owed by a customer or owed to a supplier. An unallocated amount's direction is the sign of the party's net unallocated balance, so an on-account receipt and an on-account payment on one party net into one figure. A book with several Currency masters is read through the INR base Tally identifies. If it has ledgers kept in another currency (foreign_currency_ledgers_excluded, each with its currency) or base-currency ledgers whose balance Tally shows in another currency (base_currency_ledgers_mixed_excluded, each set aside with all its bills), the state is partial with partial_reason currency_ledgers_excluded and partial_reasons naming the lists that are not empty: figures cover its base-currency ledgers only, under base_currency_ledgers, never a total for the whole book, and both lists are always present, paged like the bills. Each unallocated party carries ledger_bill_wise, opening_balance (the ledger's opening as of the start of the books, with Tally's sign, so a debit opening is negative, never interpreted; absent when Tally sent none, which is unknown, not zero) and a composition: not_bill_wise_ledger (the ledger keeps no bills) or bill_wise_ledger_components_not_separated (what is left on a bill-wise ledger after its named bills: on-account entries, an unallocated opening, notes with no reference and anything else, not told apart). amount is a magnitude and direction says which side; unallocated.totals.by_composition splits the gross, receivable and payable apart, by those two over every party in the requested direction before paging (a row saved without one counts under composition_not_observed). No unallocated figure is labelled on-account. Party detail: with party (a ledger name) and detail, the result also carries a detail object for that party at the same as-of. The detail's ledger_match names the ledger read, how (matched: exact, or case_or_spacing, which the answer should mention by naming the ledger read) and any similar_ledgers that differ from it only in case or whitespace. Passing detail is the request to read the company's vouchers from the start of the books (or, for a named bill that Tally's bills reports list, from the earliest date they list for it) to as_of; nothing is read for a party detail without it. bill_trail (optionally one reference) lists every allocation of each bill in vouchers that are neither cancelled nor optional, oldest first, with state tied (the signed allocations equal Tally's own balance for that bill, or zero for a bill the report no longer lists), trail_does_not_tie (both numbers shown) or bill_identity_ambiguous (more than one native row or bill date for one reference, or a native row dated differently from the allocations; nothing is merged, and the native dates are shown). Naming a reference starts the read at the earliest date the reports list for it, so allocations dated earlier are not read, and a reference that carries two bill dates over the whole history, and is ambiguous there, can tie when named. The detail's own state is bills_listed, or for an empty list not_bill_wise_ledger or no_named_bill_for_party (no named bill in the vouchers or in Tally's list: a ledger that keeps no bills, one that is not a party's and a party with no bills are not told apart). The company's two change marks are read before the bills and again after the vouchers, and a detail whose marks moved is refused (voucher_window_changed_during_read); a change that moves neither mark is not seen (a letter-case-only rename of a ledger moved neither, in one book), and allocations that net to zero can still read tied. unadjusted lists the party's on-account, advance and pending note allocations and compares their on-account sum with the party's unallocated amount: tied means the two figures are equal, not that the composition is proven (components that net to zero are not seen); residual_not_explained_by_vouchers gives the difference and whether it equals the ledger's opening balance; no_residual_row_for_party (with residual null) means Tally lists no unallocated amount for the ledger (a zero residual, a ledger that is not a party's and a name that matched no row are not told apart), so nothing is tied; not_bill_wise_ledger lists no rows. Its rows are row_amounts: as_allocated: each amount is the allocation as made, never net of what later allocations adjusted against its reference, so an advance shows what was received, not what is left; what is still open on a reference is Tally's own native_balance beside the row, null when the reports do not list the reference or list it more than once (so no balance is chosen), told apart only by native_rows. Either detail is window_returned_no_vouchers, with nothing tied or listed, when the voucher read returned no voucher (that read is not corroborated). Cost and limits: the detail reads the whole company's vouchers (window.company_vouchers_read), costing a vouchers read over the same span, which is unmeasured on a large book, and any refusal of that read fails the whole outstandings call. Only when that read needs too many requests is the party read by its ledger alone (window_scope ledger_scoped, window.party_vouchers_read), and only for a ledger matched alone whose name its vouchers carry as stored, in single-spaced ASCII letters and digits with no operator word; otherwise the refusal stands and its window_scope says why. One foreign-currency composite voucher anywhere in the window fails it (voucher_amount_invalid, or bill_allocation_amount_invalid on an allocation). At most 128 data requests are sent (each sent twice, as every read is, with its census and the company marks besides), each holding at most 42 vouchers before anything is measured, so a window of more than 5,376 of the company's vouchers is refused unless the party is read by its ledger, and a smaller one may be. The refusals are trail_window_too_large (name a reference that open_bills lists for the party, and the read starts at that bill's date), named_bill_window_too_large (a reference was named already, so nothing narrows it further) and unadjusted_window_too_large (nothing narrows it, so it is not available for that party on that book), each with reads.needed_at_least against reads.allowed; a refusal comes before any data request when the count shows it, otherwise when a measured part does, with window listing any part already read. The detail needs a complete read (detail_requires_a_complete_read, with the read's own partial_reason) and refuses rather than cuts an answer of over 500 allocations: trail_too_large (name a reference) or unadjusted_detail_too_large (nothing narrows it). The limit counts allocations, not bills, so a party with very many opening bills can meet agent_response_too_large instead. For a ledger's master record (its group, opening balance and, with fields=compliance, GSTIN and party details), use ledger_masters instead. Each call appends metadata-only receipt lines (tool, company, counts, request and response fingerprints; no book content) to ComplyEaze Bridge's local log on this computer; it writes nothing to Tally.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "company_guid": "<company_guid>"
    },
    "name": "outstandings"
  }
}

Input Schema

NameRequiredDescriptionDefault
topNoHow many parties to rank by gross exposure (default 25). It ranks parties only; page the bills with offset and limit.
as_ofNoOptional: the day the open bills are read as of (YYYYMMDD or YYYY-MM-DD). Left out, this computer's date, and the date used is returned as result.as_of.
limitNoThe most rows to return on this page. The default and the maximum are this server's row limit (500 unless it is configured otherwise).
partyNoOptional, for detail: a party ledger's name, spelled as in the book or differing only in ASCII case and spaces. A ledger whose own name differs in case or symbols from the spelling its vouchers carry is reached by either; `ledger_match` shows its own name and, when different, `ledger_row_spelling`, the spelling its vouchers carry. The bills are matched on the voucher spelling; what Tally's outstandings reports call such a ledger is not measured, so a detail that finds no bill for a party that has some is not proof it has none.
detailNoOptional, with party: bill_trail (each bill's allocations) or unadjusted (the party's on-account, advance and pending note allocations). It reads the company's vouchers; the description gives its cost and limits.
offsetNoHow many rows to skip before this page: 0, the default, is the first page.
directionNoreceivable, payable or both (the default). Direction follows the sign of each bill's balance, not the type of party.both
referenceNoOptional, with detail=bill_trail: one bill reference as open_bills lists it; the read then starts at the earliest date the reports list for that bill.
ageing_basisNoWhich date each open bill is aged from: due_date (the default) or bill_date. A bill whose date is after as_of has no age yet.due_date
company_guidYesThe company's company_guid, as list_companies returns it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changedv0.4.3
    • addedInput schema / properties / ageing_basis / description
      Added value: +"Which date each open bill is aged from: due_date (the default) or bill_date. A bill whose date is after as_of has no age yet."
    • addedInput schema / properties / as_of / description
      Added value: +"Optional: the day the open bills are read as of (YYYYMMDD or YYYY-MM-DD). Left out, this computer's date, and the date used is returned as result.as_of."
    • addedInput schema / properties / company_guid / description
      Added value: +"The company's company_guid, as list_companies returns it."
    • addedInput schema / properties / detail / description
      Added value: +"Optional, with party: bill_trail (each bill's allocations) or unadjusted (the party's on-account, advance and pending note allocations). It reads the company's vouchers; the description gives its cost and limits."
    • addedInput schema / properties / direction / description
      Added value: +"receivable, payable or both (the default). Direction follows the sign of each bill's balance, not the type of party."
    • removedInput schema / properties / limit / default
      Removed value: -500
    • addedInput schema / properties / limit / description
      Added value: +"The most rows to return on this page. The default and the maximum are this server's row limit (500 unless it is configured otherwise)."
    • addedInput schema / properties / offset / description
      Added value: +"How many rows to skip before this page: 0, the default, is the first page."
    • addedInput schema / properties / party / description
      Added value: +"Optional, for detail: a party ledger's name, spelled as in the book or differing only in ASCII case and spaces. A ledger whose own name differs in case or symbols from the spelling its vouchers carry is reached by either; `ledger_match` shows its own name and, when different, `ledger_row_spelling`, the spelling its vouchers carry. The bills are matched on the voucher spelling; what Tally's outstandings reports call such a ledger is not measured, so a detail that finds no bill for a party that has some is not proof it has none."
    • addedInput schema / properties / reference / description
      Added value: +"Optional, with detail=bill_trail: one bill reference as open_bills lists it; the read then starts at the earliest date the reports list for that bill."
    • addedInput schema / properties / top / description
      Added value: +"How many parties to rank by gross exposure (default 25). It ranks parties only; page the bills with offset and limit."
  2. First observedv0.4.1

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already establish read-only and non-destructive behavior, but the description adds extensive operational context: voucher-window costs, request and allocation limits, refusal modes, partial currency states, change-detection behavior and local metadata-only logging. It also says explicitly that it writes nothing to Tally.

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

Conciseness2/5

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

The first sentence is front-loaded, but the rest is a very long, dense wall of clauses that is hard to scan. Much of the content is relevant, but the structure and length work against quick comprehension.

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?

There is no output schema, so the description must explain return behavior, and it does: result.as_of, paged bill counts, next_offset, unallocated composition, detail states, partial states and refusal modes are all described. Given the tool's complexity, an agent has enough information to interpret and call it 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 coverage is 100%, so the baseline is 3, but the description adds substantial meaning beyond the schema: as_of defaulting and echo behavior, limit counting allocations not bills, direction following bill-balance sign rather than party type, and the requirement that detail be used with party.

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 opening sentence states a specific resource and scope: receivable and payable totals, ageing, top parties and open bills from Tally's paired bills reports. It also distinguishes one sibling by saying that a ledger master record should use ledger_masters instead.

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 through its scope and gives one explicit alternative, ledger_masters for master records, plus conditions for party detail. It does not clearly state when to choose outstandings over related siblings such as trial_balance, balance_sheet or ledger_movement.

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