Tally MCP Server

by dhananjay1405• 104•• Scanned•Claim this listing•Request removal

Tally Prime MCP (Model Context Protocol) Server implementation to feed Tally ERP data to popular LLM like Claude, ChatGPT supporting MCP

Tally MCP Server is an open-source mcp server by dhananjay1405, written mainly in TypeScript, with 104 GitHub stars and the MIT license. Its code was last updated Nov 1, 2026.

Tally Prime MCP Server

Tally Prime MCP (Model Context Protocol) Server implementation to feed Tally Prime ERP data to popular LLM like Claude, ChatGPT supporting MCP client. This MCP Server helps expose functionalities of Tally to LLM directly.

Prerequisites

  • Tally Prime (Silver / Gold)
  • Node JS

Ensure below things are pre-installed and setup:

  • Ensure to download & install Node JS from official website
  • XML Port of Tally Prime must be enabled (F1 > Settings > Connectivity > Client/Server configuration) with below settings
TallyPrime acts as = Server
Port = 9000

Note: Kindly avoid using Educational version of Tally Prime, which has limitations of date range. It will result in invalid / partial data being fed to LLM, leading to highly degraded & incorrect responses.

Download

Avoid cloning repository directly. Utility is available for download (with required dependencies) on below link <br> https://excelkida.com/resource/tally-mcp-server-v7.12.zip

One-click installer extension for Claude Desktop<br> https://excelkida.com/resource/tally-mcp-server-v7.12.mcpb

Last updated: version 7.12 [25-Oct-2026]

Refer docs/CHANGELOG.md for details

Contact

Project developed & maintained by:

Dhananjay Gokhale <br> (Chartered Accountant)

Email: info@excelkida.com <br> Whatsapp: (+91) 90284-63366

Supported Platform

Implementation was tested on below AI platform

PlatformLocalRemote
Claude AI:heavy_check_mark::heavy_check_mark:
ChatGPT:heavy_check_mark::heavy_check_mark:
Grok:heavy_check_mark:
Mistral:heavy_check_mark:
LM Studio:heavy_check_mark:

Setup (Local)

This mode of setup is to be used when MCP Client (like Claude Desktop, Perplexity etc.) and Tally Prime both exists in local PC. MCP Client software itself runs the MCP Server internally in such scenario.

Simply download & extract zip file somewhere on the disk. Assuming that we downloaded & extracted zip file on below path (folder)

D:\Software\Tally MCP Server
<image src="https://excelkida.com/image/github/explorer-tally-mcp-server.png" height="265" width="766" />

A sample setup for few popular tools is demonstrated.

Claude Desktop

Video tutorial: Claude Desktop (extension)

Desktop version of Claude AI supports loading of local MCP server. Ensure you have Pro / Team / Max / Enterprise subscription of Claude, which supports higher limit compared to Free. MCP makes multiple calls to Tally for validation and inference, which might exhaust free limits quickly. Download Claude Desktop from following link claude.ai/download

One-click installation (via Extension)

Go to menu > File > Settings

<image src="https://excelkida.com/image/github/claude-desktop-settings-menu.png" height="185" width="335">

Extensions > Advance Settings

<image src="https://excelkida.com/image/github/claude-desktop-settings-extension.png" height="553" width="928">

Click on install extension button

<image src="https://excelkida.com/image/github/claude-desktop-extension-page.png" height="619" width="868">

Browse the extension file (with file extension mcpb) download at the start

<image src="https://excelkida.com/image/github/claude-desktop-extension-install.png" height="843" width="696">

A dialog window will appear asking Do you want to install Tally Prime? click Install button, which would install the Tally MCP Server

Installation via Config file (via Developer menu)

Go to menu > File > Settings > Developer

<image src="https://excelkida.com/image/github/claude-desktop-developer-setting.png" height="751" width="1045" />

This will open My Computer window. Right click and edit claude_desktop_config.json file (via Notepad) with as below JSON

{
  "mcpServers": {
	  "Tally Prime": {
		  "command": "node",
		  "args": ["D:\\Software\\Tally MCP Server\\dist\\index.mjs"]
	  }
  }
}

Note: single slash in folder path needs to be substituted with double slash

Save the file. Close Claude Desktop (menu > File > Exit) and again re-launch it.

Verify by clicking on Tools button and check if Tally Prime appears in the list (screenshot below)

<image src="https://excelkida.com/image/github/claude-desktop-tally-mcp-server-tool-display.png" height="595" width="722" />

ChatGPT Desktop

Video tutorial: ChatGPT Desktop

Download & install ChatGPT Desktop from Microsoft Store. Login to it.

Go to Edit > Settings

Navigate to Integration > Plugins. Click Add button and choose Add MCP Server

<image src="https://excelkida.com/image/github/chatgpt-desktop-plugin-add-mcp.png" height="798" width="1228">

In the MCP settings page enter / apply below options or values <br> Name = Tally Prime (or any other value) <br> Command to launch = node <br> Arguments = D:\Software\Tally MCP Server\dist\index.mjs (or other path)

<image src="https://excelkida.com/image/github/chatgpt-desktop-stdio-settings.png" height="884" width="866">

Click Save button

Close & Re-Open ChatGPT Desktop app

Setup (Cloud)

This mode of setup is to be used, when using browser-based MCP client like ChatGPT, Claude AI, Copilot, OR mobile-based app for these LLM which cannot access Tally Prime running inside local PC. In this scenario, MCP Server needs to run as web-server, internally connected to Tally securely. Setup is quite complicated, and is covered in detail in docs folder of this project.

Available Tools

This server currently exposes 20 MCP tools.

metadata-collection

Returns metadata for supported collections.

Input No input.

Output JSON array with objects containing:

  1. collection
  2. description

query-option-values

Returns predefined option values used by input fields.

Input

ArgumentDescription
optionNameSupported: country-state

Output JSON array of option values for the selected option name.

metadata-fields

Returns field metadata for a selected collection.

Input

ArgumentDescription
collectionCollection name. Use metadata-collection to discover valid values

Output JSON array of field metadata containing field name, description (if any), and normalized datatype (string, number, date, boolean).

query-database

Runs SQL query on in-memory pglite tables previously created by reporting tools.

Input

ArgumentDescription
sqlSELECT query only
outputFormatOne of JSON Array of Objects, JSON with Schema and Rows, CSV, Markdown Table. Default is JSON Array of Objects which is preferred format

Output Query result in tab-separated text format.

query-collection

Queries a Tally collection for selected fields and caches output in an in-memory table.

Input

ArgumentDescription
collectionCollection name
fieldsArray of field names to fetch
targetCompany (optional)Company name (defaults to active company)
fromDate (optional)Date in YYYY-MM-DD
toDate (optional)Date in YYYY-MM-DD

Output JSON: { "tableID": "..." }

list-master

Fetches list of masters for validation and auto-completion.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
collectionOne of: group, ledger, vouchertype, unit, godown, stockgroup, stockitem, costcategory, costcentre, attendancetype, company, currency, gstin, gstclassification
containsFilter (optional)filter to apply CONTAINS operation to restrict values

Output JSON: { "list": [ ... ] }

chart-of-accounts

Extracts Chart of Accounts (or Group hierarchy) useful for preparing Balance Sheet, Profit and Loss, Trial Balance

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)

Output JSON: { "tableID": "..." } with columns:

  1. ledger_name
  2. group_name
  3. primary_group
  4. bs_pl (boolean) [true = Profit & Loss / false = Balance Sheet]
  5. dr_cr (boolean) [true = Debit / false = Credit]
  6. affects_gross_profit (boolean) [true = Affects Gross Profit / false = Does not affect Gross Profit]
  7. sort_position (number)

trial-balance

Fetches trial balance for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD
group_name (optional)Filter by group name

Output JSON: { "tableID": "..." } with columns:

  1. ledger_name
  2. group_name
  3. opening_balance (number) [negative = Debit / positive = Credit]
  4. net_debit
  5. net_credit
  6. closing_balance (number) [negative = Debit / positive = Credit]

profit-loss

Fetches profit and loss data for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD

Output JSON: { "tableID": "..." } with columns:

  1. ledger_name
  2. group_name
  3. closing_balance (number) [negative = Debit / positive = Credit]

balance-sheet

Fetches balance sheet data for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD

Output JSON: { "tableID": "..." } with columns:

  1. ledger_name
  2. group_name
  3. closing_balance (number) [negative = Debit / positive = Credit]

stock-summary

Fetches stock item summary for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD
stockGroup (optional)Filter by stock group name

Output JSON: { "tableID": "..." } with columns:

  1. stock_item_name
  2. stock_group_name
  3. opening_quantity (number)
  4. opening_value (number) [negative = Debit / positive = Credit]
  5. inward_quantity (number)
  6. inward_value (number)
  7. outward_quantity (number)
  8. outward_value (number)
  9. closing_quantity (number)
  10. closing_value (number) [negative = Debit / positive = Credit]

ledger-balance

Returns ledger closing balance as on date.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
ledgerNameExact ledger name
toDateDate in YYYY-MM-DD

Output JSON: { "amount": number } where negative = Debit and positive = Credit.

stock-item-balance

Returns stock item closing quantity as on date.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
itemNameExact stock item name
toDateDate in YYYY-MM-DD

Output JSON: { "quantity": number, "unit_of_measurement": string } when found.

bills-outstanding

Fetches receivable/payable bill-wise outstanding as on date.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
naturereceivable or payable
toDateDate in YYYY-MM-DD

Output JSON: { "tableID": "..." } with columns:

  1. bill_date
  2. reference_number
  3. outstanding_amount
  4. party_name
  5. overdue_days

ledger-account

Fetches ledger account statement for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
ledgerNameLedger name
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD

Output JSON: { "tableID": "..." } with columns:

  1. guid
  2. date
  3. voucher_type
  4. voucher_number
  5. alternate_ledger
  6. party_name
  7. amount (number) [negative = Debit / positive = Credit]
  8. narration

stock-item-account

Fetches stock item account statement for period.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
itemNameStock item name
fromDateDate in YYYY-MM-DD
toDateDate in YYYY-MM-DD

Output JSON: { "tableID": "..." } with columns:

  1. date
  2. voucher_type
  3. voucher_number
  4. party_ledger
  5. quantity
  6. amount (number) [negative = Debit / positive = Credit]
  7. narration
  8. tracking_number
  9. voucher_category

ledger-create-update

Creates or updates one or more ledger.

Note: This tool has ability to modify existing ledger. Always backup your Company before instructing this tool.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
mastersArray of ledger master objects to create/update

Master ledger object accepts following

PropertyDescription
nameLedger name or New Ledger name (during update)
_nameExisting ledger name
parentGroup under which ledger would exists
openingBalance(optional) Opening Balance of the Ledger
isBillWise(optional) flag to set Bill-by-Bill referencing
billCreditPeriod(optional) Credit Period for bill in days
mailingDetails(optional) Business Name for mailing purpose, country, state, pincode, address
gstRegistrationDetails(optional) GST registration details like GST Number, Registration Type, Place of Supply (state)

Output JSON result returned by import operation (success/failure details).

delete-master

Delete one (or more) masters from Tally

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
collectionType of master or collection to delete. One of: group, ledger, vouchertype, unit, godown, stockgroup, stockitem, costcategory, costcentre, attendancetype, company, currency, gstin, gstclassification
namearray of name(s) of master to be deleted

Output JSON result returned by delete operation (count of deleted, skipped, etc).

voucher-journal

Creates one (or more) Journal vouchers in Tally.

Input

ArgumentDescription
targetCompany (optional)Company name (defaults to active company)
vouchersArray of journal voucher objects to create

Voucher object accepts following

PropertyDescription
isoptional(optional) Set to true to create Optional voucher
dateVoucher date in YYYY-MM-DD
voucherType(optional) Voucher type (defaults to Journal and must belong to Journal parent)
voucherNumber(optional) Voucher number
narration(optional) Narration text
accountingEntryArray of accounting lines (minimum 2 lines and sum of amount must be zero)

Accounting entry object accepts following

PropertyDescription
ledgerNameLedger name
amountAmount for the line (positive = Credit / negative = Debit)

Output JSON result returned by import operation (success/failure details).

set-company

Sets active company context in Tally Prime.

Input

ArgumentDescription
companyNameCompany name to activate

Output JSON string: "OK" on success.

set-period

Sets active reporting period context in Tally Prime.

Input

ArgumentDescription
fromDateStart date in YYYY-MM-DD
toDateEnd date in YYYY-MM-DD

Output JSON string: "OK" on success.

Environment Variables

End-users are free to hard-code few settings which needs to be applied

VariableDescription
TALLY_PORTPort Number of XML Server of Tally (optional, default is 9000)
TALLY_HOSTHost name or IP where XML Server is running (optional, default is localhost)
BLOCK_WRITEControls if MCP completely block access of write functionality. Setting this flag to value 1 will completely hide write functionality tools from the tool list. [ 0 = Allow , 1 = Block ] (optional, default is 0 i.e. allowed). Not applicable for Claude Desktop (as it offers graphical switch to disable write functionality)
PORTTally MCP Server port number. Applicable only if Tally Prime MCP Server is deployed as Remote MCP server (optional, default is 3000). Not applicable for Claude Desktop
MCP_DOMAINDomain name of Tally MCP Server website (optional, default is https://localhost:9000). Not applicable for Claude Desktop
PASSWORDPassword for the OAuth Login front-end page to authenticate genuine user (kindly set this to some complex password default is password). Not applicable for Claude Desktop

Tally MCP Server alternatives

View more →

Similar mcp servers in Other, ranked by GitHub stars. Compare licence, recent activity and scan status before you choose.

NameStarsLicenceLast updatedScan
Tally MCP Server (this page)
dhananjay1405
104MITNov 1, 2026Scanned, no flagged issues
Github MCP Server
github
34kMITOct 30, 2026Scanned, no flagged issues
Fastapi MCP
tadata-org
12kMITNov 24, 2025Scanned, no flagged issues
GhidraMCP
LaurieWired
12kApache-2.0Oct 10, 2026Scanned, no flagged issues
MCP Go
mark3labs
9.2kMITOct 30, 2026Scanned, no flagged issues
Git MCP
idosal
8.5kApache-2.0May 8, 2026Scanned, no flagged issues