create_ledger
Create a new ledger in TallyPrime by specifying its name, parent group, and optional opening balance. Positive balance indicates debit, negative indicates credit.
Instructions
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.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| group | Yes | ||
| opening_balance | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- MCP tool handler for 'create_ledger' – decorated with @mcp.tool() inside register(). Takes name, group, opening_balance and delegates to client.create_ledger().
@mcp.tool() async def create_ledger(name: str, group: str, opening_balance: float = 0.0) -> str: """ 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. """ try: result = await client.create_ledger(name, group, opening_balance) if result["success"]: return f"Ledger '{name}' created successfully under '{group}'." return f"Failed to create ledger: {result['message']}" except TallyError as e: return f"Error: {e}" - The function signature serves as the schema – typed parameters (name: str, group: str, opening_balance: float = 0.0) with docstring describing each arg.
async def create_ledger(name: str, group: str, opening_balance: float = 0.0) -> str: """ 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. """ - src/tallyprime_mcp/tools/ledgers.py:6-6 (registration)Registration entry point – the register() function is called with the MCP server instance, which decorates all tool functions including create_ledger.
def register(mcp, client: TallyClient): - TallyClient.create_ledger() – the client method that sends the XML request to TallyPrime. Delegates XML building to xml_builder.create_ledger_xml() and parses the import result.
async def create_ledger(self, name: str, group: str, opening_balance: float = 0.0) -> dict: from .xml_builder import create_ledger_xml return self._check_import_result(self._parse(await self.send_xml(create_ledger_xml(name, group, opening_balance)))) - create_ledger_xml() – builds the TallyPrime XML request string for creating a ledger, including optional opening balance tag (Dr/Cr based on sign).
def create_ledger_xml(name: str, group: str, opening_balance: float = 0.0) -> str: bal_tag = "" if opening_balance != 0.0: dr_cr = "Dr" if opening_balance > 0 else "Cr" bal_tag = f"<OPENINGBALANCE>{abs(opening_balance)} {dr_cr}</OPENINGBALANCE>" return f"""<ENVELOPE> <HEADER> <TALLYREQUEST>Import Data</TALLYREQUEST> </HEADER> <BODY> <IMPORTDATA> <REQUESTDESC> <REPORTNAME>All Masters</REPORTNAME> </REQUESTDESC> <REQUESTDATA> <TALLYMESSAGE xmlns:UDF="TallyUDF"> <LEDGER NAME="{name}" ACTION="Create"> <NAME>{name}</NAME> <PARENT>{group}</PARENT> {bal_tag} </LEDGER> </TALLYMESSAGE> </REQUESTDATA> </IMPORTDATA> </BODY> </ENVELOPE>"""