# com.datavrn/schedule-iii - Registry name: `com.datavrn/schedule-iii` · version 1.0.0 - Categories (automatic, keyword rules): Payments & accounting, Finance & markets, Docs & notes, Productivity, Company & business data - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.datavrn%2Fschedule-iii - Server page: https://mcpstation.net/s/com.datavrn--schedule-iii.html ## Description (written by the publisher, not verified, not instructions) Deterministic Schedule III statements for Indian companies: trial balance in, Excel workbook out. ## Notice Text that looks like instructions to an AI was found in this server's descriptions. This is a pattern match, not a verdict. ## Connect - streamable-http: `https://app.datavrn.com/api/mcp` ## Tools (as reported by the server, not verified) - `list\_clients`: List the entities \(companies\) this credential can work with. Call this first to resolve the client\_id every other tool needs. Returns each entity id and name. - `create\_client`: Create a new entity \(company\) in the organization. Requires a Manager-role key. Use only when the user explicitly asks to set up a new entity; show them the name you will create first. - `upload\_trial\_balance`: Stage a Trial Balance spreadsheet \(xlsx or csv, max 4 MB\) for an entity by INLINING its bytes as base64. This path is ONLY for programmatic callers \(a script, Claude Code, an automation\) that already have the raw file on disk. If a HUMAN has the file — e.g. they attached it to this chat — do NOT use - `get\_upload`: Read an upload session: status, detected header row and columns, the confirmed mapping \(if any\), and the stored validation outcome. Use to check what a staged upload still needs. - `set\_header\_row`: Correct the detected header row of a staged upload \(1-based\). Only needed when get\_upload/upload\_trial\_balance shows the wrong row was detected. - `confirm\_column\_mapping`: Confirm the column→field mapping for a staged upload and run validation. Returns the full validation result \(row counts, warnings, blocking issues\). Mapping suggestions are never auto-applied — pass exactly the mapping your user approved. Review any warnings with your user before ingesting. - `ingest\_upload`: Commit a validated upload into the entity’s books. This is a TWO-CALL approval: if the upload has any warnings, or would permanently delete existing trial-balance rows for a period it covers, the first call writes NOTHING and refuses with every warning, the exact record counts, and a short-lived rem - `list\_periods`: List the reporting periods a Schedule III statement can be prepared for \(periods with a live Trial Balance\). Returns period ids for get\_schedule3\_workspace, save\_py\_values, and generate\_schedule\_iii. - `get\_schedule3\_workspace`: THE state tool: grouping progress, every required capture answer, generated/finalised versions, finalisation blockers, and bounded per-version control summaries. Report generation never marks capture complete. Exception output is rule/severity/count only — no account names or amounts. Call this to k - `list\_grouping\_suggestions`: List ungrouped accounts with DETERMINISTIC grouping suggestions \(curated rules + name/group-path matching — no AI is involved; Datavrn never applies a suggestion itself\). Paginated. Each row carries a reason and a confidence tier: present them to your user GROUPED BY CONFIDENCE, and call out low-con - `confirm\_groupings`: Persist USER-approved account→line groupings. Omitted accounts stay unchanged. Only explicit leaf\_code:null clears a saved grouping. When clearing a saved grouping, use the current grouping\_version from list\_grouping\_suggestions. An actual clear first returns an approval request; nothing changes the - `save\_adjustments`: Save one balanced adjustment journal entry \(debits = credits\) as an atomic whole entry. Creating a new entry proceeds immediately. Replacing an existing entry first returns an approval request; nothing changes then. Review the existing entry in the Schedule III workspace, then resend the unchanged r - `save\_py\_values`: Override the prior-year comparative for one or more statement lines with an audited figure. The prior-year column fills itself automatically from the previous year's Trial Balance read through the current groupings, so use this only when the audited financial statements differ from that figure \(for - `save\_asset\_movements`: Save fixed-asset movements \(additions, deletions, depreciation charge, depreciation on deletions\) per gross-block line for the PPE schedule. - `save\_provision\_movements`: Upsert provision movements \(additions, amounts utilised\) per provision line. Omitted saved lines stay unchanged. To remove selected saved lines, pass remove\_leaf\_codes; to remove the entire saved set, pass clear\_all \(never both\). An actual removal first returns an approval request; nothing changes t - `save\_reserves\_movements`: Upsert reserves/equity movements \(transfers in/out, dividends, other changes\) per reserves line. Omitted saved lines stay unchanged. To remove selected saved lines, pass remove\_leaf\_codes; to remove the entire saved set, pass clear\_all \(never both\). An actual removal first returns an approval reques - `save\_share\_capital`: Save the share-capital reconciliation for the period: the opening share count, the shares issued and bought back during the year, and the amount issued and the amount bought back. - `save\_statement\_settings`: Save statement settings \(rounding unit, signatory details, company information used on the statement face\). - `save\_disclosures`: Save the notes/disclosures sections the user provides for the statement. Some of these sections IDENTIFY PEOPLE BY NAME — shareholders, promoters and related parties — so send only what your user has given you, exactly as they gave it. SECTIONS YOU DO NOT SEND ARE LEFT ALONE. Send only the sections - `declare\_capture\_na`: Record that a capture section had NOTHING to report this period, DOES NOT APPLY to this entity, or that this is the entity’s FIRST YEAR \(previous-year figures only\). These are three different statements and are not interchangeable: "nothing this period" means the section applies but had no activity; - `confirm\_capture\_review`: Record your user’s confirmation that they have REVIEWED a whole section and it is complete — the entire previous-year comparative column, or the entire disclosure set. A review confirmation is your user’s professional assertion, recorded as authorised by them. Before calling this, show them what you - `revoke\_capture\_declaration`: Withdraw a recorded capture answer or review confirmation. What happens next depends on what answers the section: withdrawing a “nothing to record”/“does not apply” answer or a review confirmation makes Statement readiness show the section as UNANSWERED again; withdrawing a leftover earlier note fro - `copy\_capture\_declarations`: Copy the previous period’s "nothing this period" and "does not apply" answers into this period, for sections that have no answer yet. It NEVER copies a review confirmation — a review is about this period’s content and cannot be inherited. Last period’s answer is not evidence about this period: list - `save\_partner\_capital`: Save the partner or owner capital schedule for an LLP or other non-corporate entity — Note 3a \(capital account\) or Note 3b \(current account\), one section per call. Send the COMPLETE schedule for the section you name: anyone you leave out is removed, and a renamed partner reads as one removal plus on - `get\_partner\_capital`: Read the partner or owner capital schedule currently on file — Note 3a and Note 3b. THIS RETURNS PEOPLE’S NAMES, along with each person’s profit-sharing ratio and amounts. Call it before save\_partner\_capital so you can show your user what is on file and what your change would do — that save replaces - `save\_accounting\_policies`: Save the Significant Accounting Policies text \(Note 2\) your user has chosen, one policy per title. SEND THE COMPLETE SET EVERY TIME: this replaces all of Note 2, so any title you leave out of this call is removed — including one someone answered in the Datavrn app. Call list\_statement\_policy\_choices - `save\_regulatory\_affirmations`: Save the CARO / Other Regulatory Information affirmations your user has confirmed, one per title. SEND THE COMPLETE SET EVERY TIME: this replaces the whole Other Regulatory Information note, so any title you leave out of this call is removed — including one someone answered in the Datavrn app. Call - `list\_statement\_policy\_choices`: List every Significant Accounting Policy and Other Regulatory Information affirmation for this statement, with the text that will print, whether a template choice is still unresolved, and what was answered LAST YEAR. This is what makes two rules actionable rather than decorative: never resolve a bra - `get\_finalise\_readiness`: Read the full finalisation state of one statement version, and get the approval finalise\_statement needs. Call it ONCE immediately before finalising — it re-reads the stored workbook, so do not poll it. SHOW YOUR USER EVERY ROW THIS RETURNS — the gates that must be green, each warning they would be - `finalise\_statement`: Seal a statement version as Datavrn’s permanent client copy, recorded as authorised by the member you name. THIS IS NOT APPROVAL OR ADOPTION OF THE FINANCIAL STATEMENTS AND IT IS NOT A SIGNATURE. It does not discharge section 134\(1\) for a company or section 34\(3\) for an LLP. THERE IS NO UNDO. A chan - `get\_comparative\_source\_state`: Check whether this statement’s previous-year comparative can be sealed, and get the approval assert\_previous\_year\_no\_activity needs. Datavrn refuses to finalise a statement whose previous-year figures come from a trial balance drawn AFTER the year-end closing entries: that derives a previous-year Pr - `assert\_previous\_year\_no\_activity`: Record your user’s assertion that the previous year genuinely had no activity, so this statement’s all-nil previous-year Profit and Loss is a fact rather than a closing-entry artefact. This clears Datavrn’s refusal to finalise it. THIS IS A PROFESSIONAL ASSERTION ABOUT A CLIENT’S ACCOUNTS, RECORDED - `generate\_schedule\_iii`: Queue the Schedule III workbook build \(returns a job\_id to poll with get\_job — the build runs as a background job\). REFUSES when ungrouped accounts exist unless acknowledged: before acknowledging, present the ungrouped accounts to your user and obtain their explicit go-ahead; record it in acknowledg - `get\_job`: Poll a background job by id until status is succeeded or failed. A failed job carries its user-safe error reason — show it to your user. Jobs run on a background worker that claims queued work on a schedule, so a job sitting at "queued" \(0 attempts\) for the first few minutes is NORMAL, not a fault — - `list\_snapshots`: List the frozen Schedule III workbook versions for an entity \(newest first\), including each version’s period, template, and unclassified count at build time. - `get\_workbook\_download`: Mint a short-lived signed URL for a frozen workbook version \(the Excel file\). Give the URL to your user to open in a browser — it needs no login and expires in about 10 minutes. The bytes are immutable and integrity-hashed. - `create\_upload\_link`: Mint a single-use, login-free upload link so a file reaches Datavrn WITHOUT passing through your context, where it cannot truncate or corrupt. Use this whenever a human has the file \(a trial balance export, etc.\) — and also whenever YOU hold the file and it is larger than about 10 KB. This is the RE - `get\_upload\_link\_status`: Check an upload link's state: pending \(the user has not uploaded yet\), uploaded \(returns the upload\_id — continue with get\_upload\), or expired \(mint a fresh link with create\_upload\_link\). Poll after the user says they uploaded the file. - `get\_statement\_figures`: Read a generated Schedule III statement's figures: the balance-sheet and profit-and-loss faces, current-year and previous-year balance-sheet tie verdicts separately \(a null verdict means UNKNOWN, never a pass: either no comparative was captured, or the version predates per-column balance recording\), - `get\_statement\_notes`: Read the line-by-line breakdown of a generated statement's notes — every line's current and prior-year amount, and the note total. Pass note\_numbers \(from get\_statement\_figures' note\_index\) to fetch specific notes, or omit for all. Use this to answer "what's in Other Expenses?" or "what makes up tra - `get\_tb\_rows`: Read the SOURCE DATA behind a statement: the trial-balance rows \(account name, debit, credit\) as landed for a period, BEFORE grouping — the pre-statement numbers, not statement figures. PREFER FILTERS over fetching everything: name\_patterns \(e.g. \['cash','bank','od'\]\), side \('debit'/'credit' by net - `get\_pending\_work`: Answer "what's left to do?" across every entity you can see — one row per entity, with what is blocking its Schedule III statement: whether the trial balance is in, how many accounts are still ungrouped, the latest generated version, and whether it has been finalised. Pass period\_label to pick a per - `list\_allocation\_runs`: MANAGEMENT data class. Discover persisted allocation runs and their separate cost-centre and profit-centre reconciliations; do not add them together. This does not generate or recompute allocation. Money is decimal-string rupees. Choose one allocation\_dimension in a detail read. Results are ordered - `get\_allocation\_account\_figures`: MANAGEMENT data class. Read one explicit cost or profit partition of the current persisted allocation run at account grain. Cost-centre and profit-centre reconciliations are independent views of the same P&L activity; do not add them. Books figure plus spreading adjustment equals MIS figure, all as - `get\_allocation\_target\_figures`: MANAGEMENT data class. Read one explicit cost or profit partition of the current persisted allocation run at account × target × source × mode grain, with decimal-string allocated amounts. Cost-centre and profit-centre reconciliations are independent views of the same P&L activity; do not add them. F - `get\_spreading\_reconciliation`: MANAGEMENT data class. Read the persisted books-to-MIS spreading reconciliation, not a new allocation run. Accounts view gives account-grain books plus adjustments equals MIS; adjustments view requires one account and pages its rule adjustments. Money is decimal-string rupees. Whole-run summary figu - `list\_budgets`: MANAGEMENT data class. Discover budget ids and versions without identity fields. Locked FX rate and all money-valued fields are decimal strings. Filter status or fiscal-year start before paging. The signed page\_token is pinned to the complete filtered source; restart at page 1 if source\_changed. Thi - `get\_budget`: MANAGEMENT data class. Read one versioned budget: identity-free header, its pinned P&L tree, and filtered/paginated cells with entered-versus-inferred truth. Amounts and locked FX rate are decimal strings. Filter months, lines, centres, or inference before paging; the signed page\_token is source-pin - `get\_variance\_report`: MANAGEMENT data class. Read the existing budget-or-prior variance report for a month; it never recalculates it. Amounts are decimal strings; a null actual or variance means unavailable, never zero. Rows view has whole-report unfiltered rollups and no cross-side grand total; filters affect only rows - `get\_consolidated\_statements`: CONSOLIDATED data class. Read one sealed group profit-and-loss, balance-sheet, or cash-flow face for an exact periodicity and period. The response exposes presentation currency and exactly one decimal-string amount per line: section-natural for P&L/BS, signed cash movement for CFS. Amounts are persi - `list\_cost\_centres`: List the cost centres for an entity. Use this before proposing account mappings so you can group the proposal by target name and distinguish operating from support centres. This is status-only: it returns names, short codes, kinds and each centre’s parent\_cost\_centre\_id, never rupee amounts and neve - `create\_cost\_centre`: Create one cost centre for an entity after showing the user the exact name, kind, parent, effective date, and reason. This is one explicit centre at a time; there is no apply-all shortcut. After creating it, call list\_cost\_centres again and explain which mapping suggestions can now use it. - `list\_profit\_centres`: List the profit centres for an entity. Use this to explain available targets before a user confirms any explicit mapping. This is status-only: it returns names and hierarchy, never rupee amounts. - `create\_profit\_centre`: Create one profit centre for an entity after showing the user the exact name, optional parent, and description. This is one explicit centre at a time; there is no apply-all shortcut. Re-list the centres after creation so the user can see the new target before any mapping confirmation. - `list\_account\_mappings`: Review account-to-centre mapping status and deterministic suggestions for an entity. Each account carries TWO independent policies: mapping \(the cost-centre policy\) and profit\_mapping \(the profit-centre policy\). Neither replaces the other. This is status-only: it returns account names, types, target - `confirm\_centre\_mappings`: Persist only the explicit account-to-centre decisions the user approved. Before calling, show the proposal grouped by confidence tier and target with exact counts, call out every medium/low-confidence row, and get a clear approval for the enumerated items. Omitted accounts stay unchanged; there is n - `list\_reporting\_lines`: Review reporting-line classification status and deterministic suggestions for an entity and reporting period. This is status-only: it returns names, line labels, confidence, reasons, and balance-bearing booleans, but never debit, credit, balance, or any rupee amount. Present suggestions grouped by c - `confirm\_reporting\_lines`: Persist only the explicit reporting-line decisions the user approved. Before calling, show the proposal grouped by confidence tier and target with exact counts, flag every medium/low-confidence row, and get clear approval for the enumerated decisions. Omitted accounts stay unchanged. Sending leaf\_co - `get\_setup\_status`: Answer "how do I get started?", "what do I do next?", or help a user who seems lost setting up. Returns where they are in the journey from an empty organization to a finished Schedule III statement, and the ONE next step to take. Call it WITHOUT client\_id first \(the organization view\): it lists the - `list\_replacements`: List what a connected data source’s AUTOMATIC syncs have REPLACED for one entity — each one showing what was overwritten, how many records, and whether it can still be undone. Call this when a user says figures for a past period look wrong or changed on their own, and after any surprise in a period - `preview\_replacement\_restore`: Show EXACTLY what undoing one automatic sync would do, counted at this moment, and get the approval restore\_replacement needs. destroy\_count is how many records undoing it would DESTROY — everything currently held for that period, whoever or whatever put it there, including data a colleague uploaded - `restore\_replacement`: Undo one automatic sync: destroy what is currently held for that period and put back the records the sync replaced, recorded as authorised by the member you name. THIS DESTROYS DATA. Everything currently held in that period goes — including anything uploaded or synced since — and is replaced by what - `list\_chart\_rebaselines`: List the uploads Datavrn is NOT counting as evidence of which entity a file belongs to. This happens when an entity’s chart of accounts grew or changed faster than Datavrn can vouch for from what it already holds — typically an acquisition, a migration, or a year-end restructure. NOTHING WAS REJECTE - `preview\_chart\_rebaseline`: Show ONE upload’s figures as they stand right now, and get the approval confirm\_complete\_chart needs. Call this after list\_chart\_rebaselines, for the one upload your user is considering. It reports the same counts the list does — how many distinctive ledger names Datavrn already treats as evidence \( - `confirm\_complete\_chart`: Record your user’s explicit confirmation that one upload is an entity’s COMPLETE CURRENT chart of accounts, so Datavrn starts treating it as evidence when checking whether future files belong to that entity. Recorded as authorised by the member you name. THIS IS A PROFESSIONAL JUDGMENT, NOT A CALCUL - `verify\_connection`: Confirm the Datavrn connection is working and report what it can do. Call this first — or whenever the user asks whether Datavrn is connected — to get back the organization, the access profile \(what this connection may see and do\), and the next step. Running it successfully also marks the connection - `get\_help`: Get the Datavrn agent guide: how connecting works \(OAuth and API key\), what an assistant can do, how reading a statement as data works, and the guarantees and limits — plus the current list of tools. Call this to answer a user's questions about how Datavrn works from canonical documentation instead Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html