Tally MCP Server
An MCP server that lets Claude read from and write to TallyPrime via its built-in XML/HTTP gateway.
README
<p align="center"> <img src="assets/icon.png" alt="Tally MCP Server" width="180"> </p>
Tally MCP Server
A Model Context Protocol (MCP) server that lets Claude read from and write to TallyPrime via its built-in XML/HTTP gateway.
How it works
Claude Desktop <--stdio--> ┐
├─ this MCP server <--HTTP/XML--> TallyPrime (localhost:9000)
Remote MCP client <--HTTP--> ┘
Locally, Claude Desktop launches this server as a stdio process. Remotely, it can also run as an HTTP server. Either way, tool calls get translated into Tally's XML request format, sent to Tally's HTTP gateway, and returned as cleaned-up JSON. There's also an optional local SQL cache (PGLite) for ad-hoc queries beyond the fixed report tools.
Prerequisites
- Node.js 18+
- TallyPrime installed, running, with a company open
- Tally's HTTP gateway enabled:
F1 (Help) > Settings > Connectivity > Client/Server configurationand set TallyPrime acts as toBothorServer, port9000(default).
Setup
npm install
npm run build
Configure Claude Desktop
Option A — Extension (recommended): package as a .dxt and install
with one click. See docs/EXTENSION_PACKAGING.md.
Option B — manual config: edit your Claude Desktop config file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add:
{
"mcpServers": {
"tally": {
"command": "node",
"args": ["D:\\Projects\\Tally-MCP-Server\\dist\\index.js"],
"env": {
"TALLY_URL": "http://localhost:9000"
}
}
}
}
Restart Claude Desktop. You should see a hammer/tools icon indicating the
tally server is connected.
Available tools
17 tools total — read (ledgers, stock, groups, voucher types, cost centres,
day book, ledger vouchers, company info, P&L, balance sheet, trial balance,
stock summary, bills receivable/payable), write (create ledger, group,
stock item, voucher), and SQL cache (sync_to_sql, query_sql). Full
reference with args: docs/TOOLS.md.
Dates use DD-MM-YYYY format, matching Tally's convention.
Running remotely (HTTP)
TALLY_MCP_TOKEN=<secret> npm run start:http
Docs
- docs/ARCHITECTURE.md — request flow, file responsibilities
- docs/TALLY_XML_GUIDE.md — how Tally's XML gateway works, gotchas
- docs/TOOLS.md — full tool reference + how to add a new tool
- docs/SQL_CACHE.md — the PGLite SQL cache, schema, examples
- docs/HTTP_DEPLOYMENT.md — running as a remote HTTP server
- docs/EXTENSION_PACKAGING.md — packaging as a
.dxtClaude Desktop Extension
Project structure
src/
tally.ts Tally HTTP client: sends XML, handles connection/timeout errors
clean.ts Normalizes Tally's raw XML->JSON into predictable JSON
templates.ts Renders the Nunjucks XML templates in templates/
db.ts PGLite SQL cache: sync_to_sql / query_sql
tools.ts MCP tool definitions + XML request builders
server.ts Shared MCP Server construction (used by both entry points)
index.ts stdio entry point (local Claude Desktop)
http-server.ts HTTP entry point (remote clients)
templates/
*.xml.njk Nunjucks templates for each Tally XML request shape
manifest.json Claude Desktop Extension (.dxt) manifest
Environment variables
| Variable | Default | Purpose |
|---|---|---|
TALLY_URL |
http://localhost:9000 |
Tally's HTTP gateway address |
PORT |
3939 |
Port for npm run start:http |
TALLY_MCP_TOKEN |
(unset) | Bearer token required on the HTTP server's /mcp endpoint if set |
Troubleshooting
- "Could not reach TallyPrime" — Tally isn't running, or the HTTP gateway isn't enabled on port 9000.
- "Tally returned an empty response" — Tally is running but no company is open.
create_ledger/create_voucherfails with errors — check that the parent group / ledger names exactly match what exists in Tally (names are case-sensitive and must match exactly).
Roadmap / not yet supported
- Editing or deleting existing vouchers/ledgers/masters
- Inventory vouchers (Stock Journal, Manufacturing Journal, etc.)
- GST-specific reports (GSTR-1, GSTR-3B)
- Multi-company support (currently always targets whichever company is open)
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.