Koskamo

Zovo Tally Import MCP

Converts bank statements in various formats into Tally-compatible XML files for Payment, Receipt, and Contra vouchers. It handles Indian accounting formats, maps narration keywords to ledgers, and generates an Excel review sheet for verification before import.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Zovo Tally Import MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://tally-import.zovo.one/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Convert bank statement PDFs to Tally XML
  • Generate Payment, Receipt, and Contra vouchers
  • Map narration keywords to specific ledgers
  • Create Excel review sheets for voucher verification

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
tally-import 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Turns bank statements into Tally Prime / Tally ERP 9 import XML. Use convert_statement_to_tally for an attached statement file; use generate_tally_vouchers for rows the user pasted, typed or showed in a photo (convert them into transaction objects first). Ask for the bank ledger name as it appears in Tally if the user has not given it, but do not block on it.

Tools

2 advertised

convert_statement_to_tally — Convert bank statement to Tally XML
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user attaches a bank statement (text PDF, CSV or Excel from net banking) and wants it as Tally XML: "bank statement to tally xml", "import bank statement in tally prime", "excel to tally". Builds Payment, Receipt and Contra vouchers against the bank ledger, maps narrations to ledgers with keyword rules (unmatched rows go to a suspense ledger), checks each voucher balances and that opening + rows = closing, and returns the vouchers XML, a ledgers XML and an Excel review sheet. Does not read scans or photos (use generate_tally_vouchers with the rows you can read), does not post into Tally, and is not for GST returns or sales invoices.

convert_statement_to_tally input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file"
  ],
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The bank statement to convert: a text PDF, or the CSV or Excel (.xlsx) download from net banking, e.g. hdfc-april-2026.pdf."
    },
    "company": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Optional Tally company name, e.g. Sharma Traders 2026-27. Leave empty to import into the company open in Tally."
    },
    "date_order": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Order of numeric dates: DMY (default, 02/04/2026 = 2 April) or MDY. Detected from the file when a day is above 12."
    },
    "auto_contra": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Book ATM withdrawals and cash deposits as Contra vouchers against the cash ledger. Default true."
    },
    "bank_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Your bank ledger name exactly as in Tally, e.g. HDFC Bank A/c. Default: Bank Account."
    },
    "cash_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Cash ledger for ATM withdrawals and cash deposits (booked as Contra), e.g. Cash. Default: Cash."
    },
    "ledger_rules": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "side": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional: out (withdrawals only), in (deposits only) or both (default)."
                      },
                      "group": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional Tally group for the ledgers file, e.g. Indirect Expenses, Sundry Creditors, Bank Accounts."
                      },
                      "match": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Text to look for in the narration, case-insensitive, whole words, e.g. SALARY or AMAZON (AMAZ* matches a word start)."
                      },
                      "ledger": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Tally ledger to post matching rows to, e.g. Salary Payable."
                      },
                      "voucher_type": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional: payment, receipt or contra. Use contra for transfers to your own other bank or cash account."
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "string",
                    "maxLength": 300
                  }
                ]
              },
              "maxItems": 200
            },
            {
              "type": "string",
              "maxLength": 8000
            },
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Narration keyword to ledger rules, first match wins, e.g. [{\"match\":\"SALARY\",\"ledger\":\"Salary Payable\"},{\"match\":\"GST\",\"ledger\":\"GST Payable\"}] or text \"SALARY=Salary Payable; RENT=Rent\". Rows that match no rule go to the suspense ledger."
    },
    "statement_year": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Year for dates printed without one, e.g. 2026, or a financial year like \"FY 2026-27\" (April to December 2026, January to March 2027)."
    },
    "closing_balance": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Closing balance if the file has none, e.g. 98450.00. With the opening balance it proves no row is missing."
    },
    "opening_balance": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Opening balance if the file has none, e.g. 125000.50 or \"1,25,000.50 Cr\". Used to check the total."
    },
    "suspense_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Ledger for rows that match no rule, e.g. Suspense. Default: Suspense."
    },
    "bank_ledger_group": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Group of the bank ledger in the ledgers file: Bank Accounts (default) or Bank OD A/c."
    },
    "voucher_type_names": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "contra": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            },
            "payment": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            },
            "receipt": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Only if you renamed voucher types in Tally, e.g. {\"payment\":\"Bank Payment\",\"receipt\":\"Bank Receipt\"}. Defaults: Payment, Receipt, Contra."
    }
  }
}
convert_statement_to_tally output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "source",
    "bank_ledger",
    "vouchers",
    "totals",
    "reconciliation",
    "xml_check",
    "financial_years",
    "ledgers",
    "preview",
    "not_imported",
    "not_imported_count",
    "unread_lines",
    "suspense_count",
    "warnings",
    "downloads",
    "import_steps"
  ],
  "properties": {
    "source": {
      "type": "object",
      "required": [
        "file",
        "type"
      ],
      "properties": {
        "file": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "totals": {
      "type": "object",
      "required": [
        "deposits",
        "withdrawals",
        "net"
      ],
      "properties": {
        "net": {
          "type": "number"
        },
        "deposits": {
          "type": "number"
        },
        "withdrawals": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "ledgers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "group",
          "vouchers",
          "debit",
          "credit"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "debit": {
            "type": "number"
          },
          "group": {
            "type": "string"
          },
          "credit": {
            "type": "number"
          },
          "vouchers": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "preview": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "type",
          "ledger",
          "amount",
          "narration"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "ledger": {
            "type": "string"
          },
          "narration": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "vouchers": {
      "type": "object",
      "required": [
        "total",
        "payment",
        "receipt",
        "contra"
      ],
      "properties": {
        "total": {
          "type": "number"
        },
        "contra": {
          "type": "number"
        },
        "payment": {
          "type": "number"
        },
        "receipt": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "tally_xml",
        "ledgers_xml",
        "xlsx"
      ],
      "properties": {
        "xlsx": {
          "type": "string"
        },
        "tally_xml": {
          "type": "string"
        },
        "ledgers_xml": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "xml_check": {
      "type": "string"
    },
    "bank_ledger": {
      "type": "string"
    },
    "import_steps": {
      "type": "string"
    },
    "not_imported": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "reason"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "unread_lines": {
      "type": "number"
    },
    "ledgers_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "preview_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "status",
        "opening_balance",
        "closing_balance",
        "computed_closing",
        "difference",
        "formula"
      ],
      "properties": {
        "status": {
          "enum": [
            "PASS",
            "DIFFERENCE",
            "UNVERIFIED"
          ],
          "type": "string"
        },
        "formula": {
          "type": "string"
        },
        "difference": {
          "type": [
            "number",
            "null"
          ]
        },
        "closing_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "opening_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "computed_closing": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "suspense_count": {
      "type": "number"
    },
    "financial_years": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "not_imported_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
convert_statement_to_tally annotations
{
  "title": "Convert bank statement to Tally XML",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
generate_tally_vouchers — Make Tally vouchers from transactions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants bank statement to Tally XML from rows they pasted, typed or showed in a statement photo or table: "bank statement to tally entry", "tally xml format for bank statement". First convert what the user gave into transaction objects (date, narration, withdrawal or deposit, balance, optional ledger); pass raw pasted text in `text` only if you cannot. Returns Payment, Receipt and Contra vouchers against the bank ledger, keyword ledger rules with a suspense fallback, a balance check to the paisa, the vouchers XML, a ledgers XML and an Excel review sheet. Do not use when a statement file is attached (use convert_statement_to_tally); does not post into Tally or file GST.

generate_tally_vouchers input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "text": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000000
        },
        {
          "type": "null"
        }
      ],
      "description": "Fallback only: pasted statement text or CSV when you cannot build the objects, e.g. \"02/04/2026 NEFT ACME 25,000.00 Cr 1,45,000.00\"."
    },
    "company": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Optional Tally company name, e.g. Sharma Traders 2026-27. Leave empty to import into the company open in Tally."
    },
    "date_order": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Order of numeric dates: DMY (default, 02/04/2026 = 2 April) or MDY. Detected from the file when a day is above 12."
    },
    "auto_contra": {
      "type": [
        "boolean",
        "string",
        "null"
      ],
      "description": "Book ATM withdrawals and cash deposits as Contra vouchers against the cash ledger. Default true."
    },
    "bank_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Your bank ledger name exactly as in Tally, e.g. HDFC Bank A/c. Default: Bank Account."
    },
    "cash_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Cash ledger for ATM withdrawals and cash deposits (booked as Contra), e.g. Cash. Default: Cash."
    },
    "ledger_rules": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "side": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional: out (withdrawals only), in (deposits only) or both (default)."
                      },
                      "group": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional Tally group for the ledgers file, e.g. Indirect Expenses, Sundry Creditors, Bank Accounts."
                      },
                      "match": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Text to look for in the narration, case-insensitive, whole words, e.g. SALARY or AMAZON (AMAZ* matches a word start)."
                      },
                      "ledger": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Tally ledger to post matching rows to, e.g. Salary Payable."
                      },
                      "voucher_type": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Optional: payment, receipt or contra. Use contra for transfers to your own other bank or cash account."
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "string",
                    "maxLength": 300
                  }
                ]
              },
              "maxItems": 200
            },
            {
              "type": "string",
              "maxLength": 8000
            },
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Narration keyword to ledger rules, first match wins, e.g. [{\"match\":\"SALARY\",\"ledger\":\"Salary Payable\"},{\"match\":\"GST\",\"ledger\":\"GST Payable\"}] or text \"SALARY=Salary Payable; RENT=Rent\". Rows that match no rule go to the suspense ledger."
    },
    "transactions": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "ref": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Cheque or reference number if shown, e.g. 000123 or UTR N1234."
                      },
                      "date": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Transaction date, e.g. 2026-04-02 or 02/04/2026 or 02-Apr-2026."
                      },
                      "amount": {
                        "type": [
                          "number",
                          "string",
                          "null"
                        ],
                        "description": "Alternative to withdrawal/deposit: one signed amount (money in positive, money out negative), or an amount with Dr/Cr, e.g. \"4,500.00 Dr\"."
                      },
                      "ledger": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Optional Tally ledger for this row if the user said it, e.g. Office Rent. Overrides the rules."
                      },
                      "balance": {
                        "type": [
                          "number",
                          "string",
                          "null"
                        ],
                        "description": "Running balance after the row if shown, e.g. \"1,20,500.00 Cr\"."
                      },
                      "deposit": {
                        "type": [
                          "number",
                          "string",
                          "null"
                        ],
                        "description": "Deposit (credit) amount, money in, e.g. 25000. Leave empty for a withdrawal."
                      },
                      "narration": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Narration or description as printed, e.g. NEFT-ACME TRADERS-INV 114."
                      },
                      "withdrawal": {
                        "type": [
                          "number",
                          "string",
                          "null"
                        ],
                        "description": "Withdrawal (debit) amount, money out, e.g. 4500 or \"1,25,000.00\". Leave empty for a deposit."
                      },
                      "voucher_type": {
                        "type": [
                          "string",
                          "number",
                          "null"
                        ],
                        "description": "Optional: payment, receipt or contra for this row."
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "number",
                        "null"
                      ]
                    }
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "maxItems": 20001
            },
            {
              "type": "string",
              "maxLength": 2000000
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "The bank rows as objects in statement order, e.g. [{\"date\":\"02/04/2026\",\"narration\":\"NEFT-ACME TRADERS\",\"deposit\":\"25,000.00\"},{\"date\":\"03/04/2026\",\"narration\":\"ATM WDL MG ROAD\",\"withdrawal\":5000}]. Pasted statement text is also accepted."
    },
    "statement_year": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Year for dates printed without one, e.g. 2026, or a financial year like \"FY 2026-27\" (April to December 2026, January to March 2027)."
    },
    "closing_balance": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Closing balance if the file has none, e.g. 98450.00. With the opening balance it proves no row is missing."
    },
    "opening_balance": {
      "type": [
        "number",
        "string",
        "null"
      ],
      "description": "Opening balance if the file has none, e.g. 125000.50 or \"1,25,000.50 Cr\". Used to check the total."
    },
    "suspense_ledger": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Ledger for rows that match no rule, e.g. Suspense. Default: Suspense."
    },
    "bank_ledger_group": {
      "type": [
        "string",
        "number",
        "null"
      ],
      "description": "Group of the bank ledger in the ledgers file: Bank Accounts (default) or Bank OD A/c."
    },
    "voucher_type_names": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "contra": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            },
            "payment": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            },
            "receipt": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 60
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Only if you renamed voucher types in Tally, e.g. {\"payment\":\"Bank Payment\",\"receipt\":\"Bank Receipt\"}. Defaults: Payment, Receipt, Contra."
    }
  }
}
generate_tally_vouchers output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "source",
    "bank_ledger",
    "vouchers",
    "totals",
    "reconciliation",
    "xml_check",
    "financial_years",
    "ledgers",
    "preview",
    "not_imported",
    "not_imported_count",
    "unread_lines",
    "suspense_count",
    "warnings",
    "downloads",
    "import_steps"
  ],
  "properties": {
    "source": {
      "type": "object",
      "required": [
        "file",
        "type"
      ],
      "properties": {
        "file": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "totals": {
      "type": "object",
      "required": [
        "deposits",
        "withdrawals",
        "net"
      ],
      "properties": {
        "net": {
          "type": "number"
        },
        "deposits": {
          "type": "number"
        },
        "withdrawals": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "ledgers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "group",
          "vouchers",
          "debit",
          "credit"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "debit": {
            "type": "number"
          },
          "group": {
            "type": "string"
          },
          "credit": {
            "type": "number"
          },
          "vouchers": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "preview": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "type",
          "ledger",
          "amount",
          "narration"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "ledger": {
            "type": "string"
          },
          "narration": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "vouchers": {
      "type": "object",
      "required": [
        "total",
        "payment",
        "receipt",
        "contra"
      ],
      "properties": {
        "total": {
          "type": "number"
        },
        "contra": {
          "type": "number"
        },
        "payment": {
          "type": "number"
        },
        "receipt": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "tally_xml",
        "ledgers_xml",
        "xlsx"
      ],
      "properties": {
        "xlsx": {
          "type": "string"
        },
        "tally_xml": {
          "type": "string"
        },
        "ledgers_xml": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "xml_check": {
      "type": "string"
    },
    "bank_ledger": {
      "type": "string"
    },
    "import_steps": {
      "type": "string"
    },
    "not_imported": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "reason"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "unread_lines": {
      "type": "number"
    },
    "ledgers_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "preview_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "status",
        "opening_balance",
        "closing_balance",
        "computed_closing",
        "difference",
        "formula"
      ],
      "properties": {
        "status": {
          "enum": [
            "PASS",
            "DIFFERENCE",
            "UNVERIFIED"
          ],
          "type": "string"
        },
        "formula": {
          "type": "string"
        },
        "difference": {
          "type": [
            "number",
            "null"
          ]
        },
        "closing_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "opening_balance": {
          "type": [
            "number",
            "null"
          ]
        },
        "computed_closing": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": false
    },
    "suspense_count": {
      "type": "number"
    },
    "financial_years": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "not_imported_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
generate_tally_vouchers annotations
{
  "title": "Make Tally vouchers from transactions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

tally-import-widget — Zovo Tally Import view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Tally Import.

tally-import-widget URI
ui://widget/tally-import-v1-1.0.0-3ec88f3bd8802a71667a1c78e5eaeb26a80b1aee786811f0f9bcdceb88eab693.html

MIME type: text/html;profile=mcp-app

tally-import-widget-legacy — Zovo Tally Import view (previous versions)

Advertised by the server during the last successful anonymous check.

tally-import-widget-legacy URI template
ui://widget/tally-import-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
506 ms
95th percentile latency
506 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 506 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-tally-import-mcp https://tally-import.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-tally-import-mcp --url https://tally-import.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-tally-import-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-tally-import-mcp": {
      "url": "https://tally-import.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-tally-import-mcp": {
      "type": "streamableHttp",
      "url": "https://tally-import.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-tally-import-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-tally-import-mcp": {
      "type": "http",
      "url": "https://tally-import.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-tally-import-mcp https://tally-import.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://tally-import.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "zovo-tally-import-mcp": {
      "serverUrl": "https://tally-import.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Zovo Tally Import MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.