← WebMCP Directory

Tool tree

bahi.naklitechie.com

Finance & CryptoTools verified
Website
Double-entry books for an Indian business in one browser tab: invoices, GST returns, TDS and TCS, inventory and your CA's review, kept in one file on your own disk.
Explore capabilities
    describe_toolsAnswer

    Every tool with its kind, JSON-schema input and approval rule, the person-only acts no agent can perform, and the UI routes not yet covered. Start here.

    View tool JSON
    {
      "name": "describe_tools",
      "kind": "answer",
      "impl": "imperative",
      "description": "Every tool with its kind, JSON-schema input and approval rule, the person-only acts no agent can perform, and the UI routes not yet covered. Start here.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_statusAnswer

    Whether a .khata is open and writable, the route and mode this tab shows, which doors are open, and how many proposals wait for the person.

    View tool JSON
    {
      "name": "get_status",
      "kind": "answer",
      "impl": "imperative",
      "description": "Whether a .khata is open and writable, the route and mode this tab shows, which doors are open, and how many proposals wait for the person.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    run_selftestAction

    Declaration, handler, door and route parity assertions. The check that guards this surface.

    View tool JSON
    {
      "name": "run_selftest",
      "kind": "act",
      "impl": "imperative",
      "description": "Declaration, handler, door and route parity assertions. The check that guards this surface.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_file_infoAnswer

    Company identity, file name, versions, save status and integrity heads of the open .khata. Needs an open .khata.

    View tool JSON
    {
      "name": "get_file_info",
      "kind": "answer",
      "impl": "imperative",
      "description": "Company identity, file name, versions, save status and integrity heads of the open .khata. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    save_fileAction

    Write the in-memory books to the open .khata on disk, the same path as Ctrl+S. Approved writes already save on their own. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "save_file",
      "kind": "act",
      "impl": "imperative",
      "description": "Write the in-memory books to the open .khata on disk, the same path as Ctrl+S. Approved writes already save on their own. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    verify_integrityAction

    Walk the audit hash chain and verify every ECDSA signature. Needs an open .khata.

    View tool JSON
    {
      "name": "verify_integrity",
      "kind": "act",
      "impl": "imperative",
      "description": "Walk the audit hash chain and verify every ECDSA signature. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_audit_entriesAnswer

    The most recent audit-log entries, newest first. Read your own writes back and confirm attribution; includePayload shows the agentCall record. Needs an open .khata.

    View tool JSON
    {
      "name": "list_audit_entries",
      "kind": "answer",
      "impl": "imperative",
      "description": "The most recent audit-log entries, newest first. Read your own writes back and confirm attribution; includePayload shows the agentCall record. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 20
          },
          "includePayload": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_customersAnswer

    Customers, paged. Archived ones are hidden unless includeArchived, as in the UI. Needs an open .khata.

    View tool JSON
    {
      "name": "list_customers",
      "kind": "answer",
      "impl": "imperative",
      "description": "Customers, paged. Archived ones are hidden unless includeArchived, as in the UI. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "maxLength": 200,
            "description": "Filter by name (substring)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "includeArchived": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_vendorsAnswer

    Vendors, paged, with their RCM and TDS settings. Needs an open .khata.

    View tool JSON
    {
      "name": "list_vendors",
      "kind": "answer",
      "impl": "imperative",
      "description": "Vendors, paged, with their RCM and TDS settings. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "maxLength": 200,
            "description": "Filter by name (substring)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "includeArchived": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_itemsAnswer

    Items and services, paged, with HSN/SAC, unit and default rate in paise. Needs an open .khata.

    View tool JSON
    {
      "name": "list_items",
      "kind": "answer",
      "impl": "imperative",
      "description": "Items and services, paged, with HSN/SAC, unit and default rate in paise. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "maxLength": 200,
            "description": "Filter by name (substring)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "includeArchived": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_accountsAnswer

    Chart-of-accounts entries: id, name and type. Journal lines and receipts name accounts by id. Needs an open .khata.

    View tool JSON
    {
      "name": "list_accounts",
      "kind": "answer",
      "impl": "imperative",
      "description": "Chart-of-accounts entries: id, name and type. Journal lines and receipts name accounts by id. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "maxLength": 200,
            "description": "Filter by name (substring)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 500
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "includeArchived": {
            "type": "boolean",
            "default": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_trial_balanceAnswer

    Trial balance as of a date, with the Dr = Cr tie check. Amounts in paise. Needs an open .khata.

    View tool JSON
    {
      "name": "get_trial_balance",
      "kind": "answer",
      "impl": "imperative",
      "description": "Trial balance as of a date, with the Dr = Cr tie check. Amounts in paise. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "asOf": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Omit for every posting to date."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_balance_sheetAnswer

    Balance sheet as of a date. Asset balances carry the same sign the UI renders. Needs an open .khata.

    View tool JSON
    {
      "name": "get_balance_sheet",
      "kind": "answer",
      "impl": "imperative",
      "description": "Balance sheet as of a date. Asset balances carry the same sign the UI renders. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "asOf": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_day_bookAnswer

    Every voucher posted in a date range, both ends inclusive. Needs an open .khata.

    View tool JSON
    {
      "name": "get_day_book",
      "kind": "answer",
      "impl": "imperative",
      "description": "Every voucher posted in a date range, both ends inclusive. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_account_ledgerAnswer

    One account's ledger lines over a date range. Needs an open .khata.

    View tool JSON
    {
      "name": "get_account_ledger",
      "kind": "answer",
      "impl": "imperative",
      "description": "One account's ledger lines over a date range. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "accountId",
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_receivables_agingAnswer

    Receivables aged into buckets as of a date (default today). Needs an open .khata.

    View tool JSON
    {
      "name": "get_receivables_aging",
      "kind": "answer",
      "impl": "imperative",
      "description": "Receivables aged into buckets as of a date (default today). Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "asOf": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_stock_on_handAnswer

    Closing stock per item per godown. Needs an open .khata.

    View tool JSON
    {
      "name": "get_stock_on_hand",
      "kind": "answer",
      "impl": "imperative",
      "description": "Closing stock per item per godown. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "integer",
            "minimum": 1
          },
          "godownId": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_stock_valuationAnswer

    Closing stock valuation as of a date, by each item's WAC or FIFO method. Needs an open .khata.

    View tool JSON
    {
      "name": "get_stock_valuation",
      "kind": "answer",
      "impl": "imperative",
      "description": "Closing stock valuation as of a date, by each item's WAC or FIFO method. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "asOf": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_gstr1Answer

    GSTR-1 outward-supplies data for a period, in the portal JSON shape (rupees, as the portal wants). Needs an open .khata.

    View tool JSON
    {
      "name": "get_gstr1",
      "kind": "answer",
      "impl": "imperative",
      "description": "GSTR-1 outward-supplies data for a period, in the portal JSON shape (rupees, as the portal wants). Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "periodStart": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "periodEnd": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "periodStart",
          "periodEnd"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_gstr3bAnswer

    GSTR-3B summary for a period, in paise. Needs an open .khata.

    View tool JSON
    {
      "name": "get_gstr3b",
      "kind": "answer",
      "impl": "imperative",
      "description": "GSTR-3B summary for a period, in paise. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "periodStart": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "periodEnd": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "periodStart",
          "periodEnd"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_form26qAnswer

    Quarterly TDS return data: Form 26Q up to FY 2025-26, Form 140 from FY 2026-27 (formName in the result). Needs an open .khata.

    View tool JSON
    {
      "name": "get_form26q",
      "kind": "answer",
      "impl": "imperative",
      "description": "Quarterly TDS return data: Form 26Q up to FY 2025-26, Form 140 from FY 2026-27 (formName in the result). Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fyStartYear": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2200,
            "description": "2025 for FY 2025-26."
          },
          "quarter": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          }
        },
        "required": [
          "fyStartYear",
          "quarter"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    post_journalAction

    Post a balanced double-entry journal voucher. Total debits must equal total credits. A date inside a filed period posts as an amendment, as in the UI. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "post_journal",
      "kind": "act",
      "impl": "imperative",
      "description": "Post a balanced double-entry journal voucher. Total debits must equal total credits. A date inside a filed period posts as an amendment, as in the UI. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lines": {
            "type": "array",
            "minItems": 2,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "accountId": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Account id from list_accounts."
                },
                "debit": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Debit in integer paise (₹1,500.00 = 150000)."
                },
                "credit": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Credit in integer paise."
                }
              },
              "required": [
                "accountId"
              ]
            }
          },
          "narration": {
            "type": "string",
            "maxLength": 2000
          },
          "voucherRef": {
            "type": "string",
            "maxLength": 120
          },
          "postedAt": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "lines"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_invoiceAction

    Raise and post a sales invoice: header, lines, GST routing (CGST+SGST intra-state, IGST inter-state), ledger entry and stock effect, exactly as the invoice form does. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_invoice",
      "kind": "act",
      "impl": "imperative",
      "description": "Raise and post a sales invoice: header, lines, GST routing (CGST+SGST intra-state, IGST inter-state), ledger entry and stock effect, exactly as the invoice form does. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "minimum": 1,
            "description": "Customer id from list_customers."
          },
          "lines": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                },
                "quantity": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "A number of units, not paise."
                },
                "rate": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Price per unit in integer paise (₹150.00 = 15000)."
                },
                "taxRate": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1,
                  "description": "GST rate as a decimal fraction: 0.18 for 18%. Passing 18 is refused."
                },
                "hsnSac": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "itemId": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 1,
                  "description": "Item id from list_items. Links the line to the item master and its stock."
                },
                "cess": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Cess in integer paise. null derives it from the HSN table."
                },
                "discount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Line discount in integer paise."
                }
              },
              "required": [
                "description",
                "quantity",
                "rate"
              ]
            }
          },
          "invoiceDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "invoiceNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated from the series when omitted."
          },
          "series": {
            "type": "string",
            "maxLength": 60,
            "description": "Invoice series; defaults to Domestic."
          },
          "placeOfSupply": {
            "type": "string",
            "maxLength": 8,
            "pattern": "^[A-Z]{2}$",
            "description": "Two-letter state code; defaults to the customer's state."
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "isComposition": {
            "type": "boolean",
            "default": false
          },
          "advanceAllocations": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object",
              "properties": {
                "advanceId": {
                  "type": "integer",
                  "minimum": 1
                },
                "amount": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Integer paise of the advance to adjust against this invoice."
                }
              },
              "required": [
                "advanceId",
                "amount"
              ]
            },
            "description": "Open advances of this customer to adjust against the invoice; see list_advances."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "customerId",
          "lines"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_purchaseSensitive Action

    Record and post a vendor purchase: header, lines, ITC and reverse-charge routing, ledger entry and stock effect, exactly as the purchase form does. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_purchase",
      "kind": "transact",
      "impl": "imperative",
      "description": "Record and post a vendor purchase: header, lines, ITC and reverse-charge routing, ledger entry and stock effect, exactly as the purchase form does. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "vendorId": {
            "type": "integer",
            "minimum": 1,
            "description": "Vendor id from list_vendors."
          },
          "billNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "The vendor's own document number."
          },
          "lines": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                },
                "quantity": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "A number of units, not paise."
                },
                "rate": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Price per unit in integer paise (₹150.00 = 15000)."
                },
                "taxRate": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1,
                  "description": "GST rate as a decimal fraction: 0.18 for 18%. Passing 18 is refused."
                },
                "hsnSac": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "itemId": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 1,
                  "description": "Item id from list_items. Links the line to the item master and its stock."
                },
                "cess": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 0,
                  "maximum": 2147483647,
                  "description": "Cess in integer paise. null derives it from the HSN table."
                }
              },
              "required": [
                "description",
                "quantity",
                "rate"
              ]
            }
          },
          "billDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "internalRef": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated when omitted."
          },
          "placeOfSupply": {
            "type": "string",
            "maxLength": 8,
            "pattern": "^[A-Z]{2}$"
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "reverseCharge": {
            "type": "boolean",
            "default": false
          },
          "itcEligible": {
            "type": "boolean",
            "default": true
          },
          "aiAssisted": {
            "type": "boolean",
            "default": false,
            "description": "Set by the person's own Smart Capture when it drafted this purchase."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "vendorId",
          "billNumber",
          "lines"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_paymentSensitive Action

    Record and post a customer receipt allocated against that customer's invoices. The receipt amount is the sum of the allocations; an unallocated receipt is an advance, a different voucher. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_payment",
      "kind": "transact",
      "impl": "imperative",
      "description": "Record and post a customer receipt allocated against that customer's invoices. The receipt amount is the sum of the allocations; an unallocated receipt is an advance, a different voucher. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "minimum": 1
          },
          "bankAccountId": {
            "type": "integer",
            "minimum": 1,
            "description": "The bank or cash account id from list_accounts."
          },
          "allocations": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "invoiceId": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "An invoice of this customer."
                },
                "amount": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2147483647,
                  "description": "Integer paise applied to this invoice."
                }
              },
              "required": [
                "invoiceId",
                "amount"
              ]
            }
          },
          "paymentDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "paymentNumber": {
            "type": "string",
            "maxLength": 60
          },
          "paymentMode": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "cash",
              "cheque",
              "neft",
              "rtgs",
              "imps",
              "upi",
              "card",
              "other"
            ]
          },
          "reference": {
            "type": "string",
            "maxLength": 120
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "customerId",
          "bankAccountId",
          "allocations"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_credit_noteAction

    Raise and post a credit note against an invoice: full reversal, or partial by amount pro-rated over every line. Known gap: cess on the invoice is not reversed. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_credit_note",
      "kind": "act",
      "impl": "imperative",
      "description": "Raise and post a credit note against an invoice: full reversal, or partial by amount pro-rated over every line. Known gap: cess on the invoice is not reversed. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "invoiceId": {
            "type": "integer",
            "minimum": 1
          },
          "cnDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "cnNumber": {
            "type": "string",
            "maxLength": 60
          },
          "reason": {
            "type": "string",
            "maxLength": 60,
            "enum": [
              "sales-return",
              "rate-difference",
              "discount",
              "deficiency",
              "other"
            ]
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "amount": {
            "type": "integer",
            "minimum": 1,
            "description": "Integer paise for a partial note. Omit for a full reversal."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "invoiceId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_debit_noteAction

    Raise and post a debit note against a purchase: full reversal, or partial by amount pro-rated over every line. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_debit_note",
      "kind": "act",
      "impl": "imperative",
      "description": "Raise and post a debit note against a purchase: full reversal, or partial by amount pro-rated over every line. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "purchaseId": {
            "type": "integer",
            "minimum": 1
          },
          "dnDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "dnNumber": {
            "type": "string",
            "maxLength": 60
          },
          "reason": {
            "type": "string",
            "maxLength": 60,
            "enum": [
              "purchase-return",
              "rate-difference",
              "quality",
              "other"
            ]
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "amount": {
            "type": "integer",
            "minimum": 1,
            "description": "Integer paise for a partial note. Omit for a full reversal."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "purchaseId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_invoicesAnswer

    Sales invoices of every status, newest first, with the amounts allocated, adjusted and still outstanding (paise). Needs an open .khata.

    View tool JSON
    {
      "name": "list_invoices",
      "kind": "answer",
      "impl": "imperative",
      "description": "Sales invoices of every status, newest first, with the amounts allocated, adjusted and still outstanding (paise). Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "customerId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this customer's invoices."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_paymentsAnswer

    Customer receipts, newest first, with mode, reference and bank account. Needs an open .khata.

    View tool JSON
    {
      "name": "list_payments",
      "kind": "answer",
      "impl": "imperative",
      "description": "Customer receipts, newest first, with mode, reference and bank account. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "customerId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this customer's receipts."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_advancesAnswer

    Customer advances, newest first, with the taxable value, the amount adjusted against invoices and the open balance. Needs an open .khata.

    View tool JSON
    {
      "name": "list_advances",
      "kind": "answer",
      "impl": "imperative",
      "description": "Customer advances, newest first, with the taxable value, the amount adjusted against invoices and the open balance. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "customerId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this customer's advances."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_purchasesAnswer

    Posted purchases, latest bill date first, with reverse-charge and ITC flags. Needs an open .khata.

    View tool JSON
    {
      "name": "list_purchases",
      "kind": "answer",
      "impl": "imperative",
      "description": "Posted purchases, latest bill date first, with reverse-charge and ITC flags. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "vendorId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this vendor's purchases."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_credit_notesAnswer

    Posted credit notes, latest first, with the invoice each one reverses. Needs an open .khata.

    View tool JSON
    {
      "name": "list_credit_notes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Posted credit notes, latest first, with the invoice each one reverses. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "customerId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this customer's credit notes."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_debit_notesAnswer

    Posted debit notes, latest first, with the bill each one reverses. Needs an open .khata.

    View tool JSON
    {
      "name": "list_debit_notes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Posted debit notes, latest first, with the bill each one reverses. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "vendorId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this vendor's debit notes."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_delivery_challansAnswer

    Delivery challans, latest first, with party, vehicle and return status. Needs an open .khata.

    View tool JSON
    {
      "name": "list_delivery_challans",
      "kind": "answer",
      "impl": "imperative",
      "description": "Delivery challans, latest first, with party, vehicle and return status. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_eway_billsAnswer

    E-way bills, latest first, with the document each one covers. Needs an open .khata.

    View tool JSON
    {
      "name": "list_eway_bills",
      "kind": "answer",
      "impl": "imperative",
      "description": "E-way bills, latest first, with the document each one covers. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_stock_transfersAnswer

    Inter-branch stock transfers, latest first, in both directions. Needs an open .khata.

    View tool JSON
    {
      "name": "list_stock_transfers",
      "kind": "answer",
      "impl": "imperative",
      "description": "Inter-branch stock transfers, latest first, in both directions. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Earliest document date, inclusive."
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Latest document date, inclusive."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 100
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_sales_registerAnswer

    Posted invoices in a date range, oldest first, with tax columns and their totals. Needs an open .khata.

    View tool JSON
    {
      "name": "get_sales_register",
      "kind": "answer",
      "impl": "imperative",
      "description": "Posted invoices in a date range, oldest first, with tax columns and their totals. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_purchase_registerAnswer

    Posted purchases in a date range, oldest first, with tax columns and their totals. Needs an open .khata.

    View tool JSON
    {
      "name": "get_purchase_register",
      "kind": "answer",
      "impl": "imperative",
      "description": "Posted purchases in a date range, oldest first, with tax columns and their totals. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_pnlAnswer

    Income less expense over every posting, per account, with totals and net profit. Labels are the account names frozen at posting. Needs an open .khata.

    View tool JSON
    {
      "name": "get_pnl",
      "kind": "answer",
      "impl": "imperative",
      "description": "Income less expense over every posting, per account, with totals and net profit. Labels are the account names frozen at posting. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_dashboardAnswer

    The dashboard's figures: cash flow, the current GST liability, receivables aging, top customers by outstanding, and recent activity. Needs an open .khata.

    View tool JSON
    {
      "name": "get_dashboard",
      "kind": "answer",
      "impl": "imperative",
      "description": "The dashboard's figures: cash flow, the current GST liability, receivables aging, top customers by outstanding, and recent activity. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "topCustomers": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 5
          },
          "recentActivity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 10
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_stock_movementsAnswer

    Every stock movement in a date range, newest first. Needs an open .khata.

    View tool JSON
    {
      "name": "list_stock_movements",
      "kind": "answer",
      "impl": "imperative",
      "description": "Every stock movement in a date range, newest first. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "itemId": {
            "type": "integer",
            "minimum": 1
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5000,
            "default": 1000
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_stock_registerAnswer

    One item's movements over a date range, oldest first. Quantities are signed: issues are negative. Needs an open .khata.

    View tool JSON
    {
      "name": "get_stock_register",
      "kind": "answer",
      "impl": "imperative",
      "description": "One item's movements over a date range, oldest first. Quantities are signed: issues are negative. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "itemId",
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_batchesAnswer

    Batches that still hold stock, by item, with expiry and remaining quantity and value. Needs an open .khata.

    View tool JSON
    {
      "name": "list_batches",
      "kind": "answer",
      "impl": "imperative",
      "description": "Batches that still hold stock, by item, with expiry and remaining quantity and value. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "integer",
            "minimum": 1,
            "description": "Only this item's batches."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "default": 500
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_reorder_alertsAnswer

    Items at or below their reorder level, with how short each one is and its preferred vendor. Needs an open .khata.

    View tool JSON
    {
      "name": "get_reorder_alerts",
      "kind": "answer",
      "impl": "imperative",
      "description": "Items at or below their reorder level, with how short each one is and its preferred vendor. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_stock_agingAnswer

    Batches with stock, bucketed by age as of today: 0–30, 31–60, 61–90 and over 90 days. Needs an open .khata.

    View tool JSON
    {
      "name": "get_stock_aging",
      "kind": "answer",
      "impl": "imperative",
      "description": "Batches with stock, bucketed by age as of today: 0–30, 31–60, 61–90 and over 90 days. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_inventory_summaryAnswer

    The inventory dashboard: total stock value, items valued, items to reorder, expired batches still holding stock, and the aging buckets' totals. Needs an open .khata.

    View tool JSON
    {
      "name": "get_inventory_summary",
      "kind": "answer",
      "impl": "imperative",
      "description": "The inventory dashboard: total stock value, items valued, items to reorder, expired batches still holding stock, and the aging buckets' totals. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_godownsAnswer

    Active godowns, the default first. Needs an open .khata.

    View tool JSON
    {
      "name": "list_godowns",
      "kind": "answer",
      "impl": "imperative",
      "description": "Active godowns, the default first. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_invoice_seriesAnswer

    Invoice number series with prefix, suffix, starting number, FY reset and what each is the default for. Needs an open .khata.

    View tool JSON
    {
      "name": "list_invoice_series",
      "kind": "answer",
      "impl": "imperative",
      "description": "Invoice number series with prefix, suffix, starting number, FY reset and what each is the default for. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_cmp08Answer

    CMP-08 for a quarter: aggregate turnover from posted invoices and tax at the composition rate. Refused when the composition scheme is off, as the screen does. Needs an open .khata.

    View tool JSON
    {
      "name": "get_cmp08",
      "kind": "answer",
      "impl": "imperative",
      "description": "CMP-08 for a quarter: aggregate turnover from posted invoices and tax at the composition rate. Refused when the composition scheme is off, as the screen does. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fyStartYear": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2200,
            "description": "2025 for FY 2025-26."
          },
          "quarter": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "description": "Q1 = Apr–Jun … Q4 = Jan–Mar."
          }
        },
        "required": [
          "fyStartYear",
          "quarter"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_form27eqAnswer

    Quarterly TCS return data (Form 27EQ up to FY 2025-26, Form 143 from FY 2026-27), with the validation errors the screen shows. Needs an open .khata.

    View tool JSON
    {
      "name": "get_form27eq",
      "kind": "answer",
      "impl": "imperative",
      "description": "Quarterly TCS return data (Form 27EQ up to FY 2025-26, Form 143 from FY 2026-27), with the validation errors the screen shows. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fyStartYear": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2200,
            "description": "2025 for FY 2025-26."
          },
          "quarter": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "description": "Q1 = Apr–Jun … Q4 = Jan–Mar."
          }
        },
        "required": [
          "fyStartYear",
          "quarter"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_form27d_summaryAnswer

    TDS per vendor for a quarter: the figures each TDS certificate carries (Form 16A, Form 131 from FY 2026-27). The tool keeps its old name; Form 27D is the TCS certificate. The PDF itself is the screen's. Needs an open .khata.

    View tool JSON
    {
      "name": "get_form27d_summary",
      "kind": "answer",
      "impl": "imperative",
      "description": "TDS per vendor for a quarter: the figures each TDS certificate carries (Form 16A, Form 131 from FY 2026-27). The tool keeps its old name; Form 27D is the TCS certificate. The PDF itself is the screen's. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fyStartYear": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2200,
            "description": "2025 for FY 2025-26."
          },
          "quarter": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "description": "Q1 = Apr–Jun … Q4 = Jan–Mar."
          }
        },
        "required": [
          "fyStartYear",
          "quarter"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_tax_sectionsAnswer

    TDS or TCS sections in force on a date, each with its id, return code, section reference, rates (individual, other, no PAN) and thresholds. From 2026-04-01 these are the Income-tax Act, 2025 sections; old ids such as 194C resolve to them by date.

    View tool JSON
    {
      "name": "list_tax_sections",
      "kind": "answer",
      "impl": "imperative",
      "description": "TDS or TCS sections in force on a date, each with its id, return code, section reference, rates (individual, other, no PAN) and thresholds. From 2026-04-01 these are the Income-tax Act, 2025 sections; old ids such as 194C resolve to them by date.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "tds",
              "tcs"
            ]
          },
          "date": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          }
        },
        "required": [
          "kind"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    lookup_gst_rateAnswer

    The GST rate bands in force on a date and, given an HSN/SAC code, the rate the reference table assigns it then. Pass the rate on as taxRate.

    View tool JSON
    {
      "name": "lookup_gst_rate",
      "kind": "answer",
      "impl": "imperative",
      "description": "The GST rate bands in force on a date and, given an HSN/SAC code, the rate the reference table assigns it then. Pass the rate on as taxRate.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hsnSac": {
            "type": "string",
            "maxLength": 20
          },
          "date": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_challan_templatesAnswer

    The tax-payment challan templates Bahi prepares data sheets for.

    View tool JSON
    {
      "name": "list_challan_templates",
      "kind": "answer",
      "impl": "imperative",
      "description": "The tax-payment challan templates Bahi prepares data sheets for.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_challan_templateAnswer

    The data sheet for one challan, prefilled with the company's identity. Bahi submits nothing; the person takes it to the portal. Needs an open .khata.

    View tool JSON
    {
      "name": "get_challan_template",
      "kind": "answer",
      "impl": "imperative",
      "description": "The data sheet for one challan, prefilled with the company's identity. Bahi submits nothing; the person takes it to the portal. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "PMT-06",
              "DRC-03",
              "ITNS-280",
              "ITNS-281",
              "ITNS-282",
              "ITNS-283",
              "ECR",
              "ESI",
              "PTRC",
              "LWF",
              "CUSTOM"
            ]
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_bank_accountsAnswer

    Bank and cash accounts, by id, as the reconciliation screen lists them. Needs an open .khata.

    View tool JSON
    {
      "name": "list_bank_accounts",
      "kind": "answer",
      "impl": "imperative",
      "description": "Bank and cash accounts, by id, as the reconciliation screen lists them. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_bank_reconciliationAnswer

    One bank account's ledger lines over a period with their cleared status, the book balance for the period, and the last saved reconciliation. Needs an open .khata.

    View tool JSON
    {
      "name": "get_bank_reconciliation",
      "kind": "answer",
      "impl": "imperative",
      "description": "One bank account's ledger lines over a period with their cleared status, the book balance for the period, and the last saved reconciliation. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        },
        "required": [
          "accountId",
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_annotationsAnswer

    CA annotations on entries and documents, newest first. Needs an open .khata.

    View tool JSON
    {
      "name": "list_annotations",
      "kind": "answer",
      "impl": "imperative",
      "description": "CA annotations on entries and documents, newest first. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "open",
              "resolved"
            ]
          },
          "targetType": {
            "type": "string",
            "maxLength": 40
          },
          "targetId": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_customerAction

    Add a customer. A GSTIN, when given, must be well formed and agree with the state. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_customer",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a customer. A GSTIN, when given, must be well formed and agree with the state. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "gstin": {
            "type": "string",
            "maxLength": 15,
            "description": "GSTIN; its first two digits must match the state."
          },
          "pan": {
            "type": "string",
            "maxLength": 10,
            "description": "PAN, e.g. ABCPE1234F. Taken from the GSTIN when omitted; must match it when both are given. TDS and TCS rates depend on it."
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "email": {
            "type": "string",
            "maxLength": 200
          },
          "phone": {
            "type": "string",
            "maxLength": 40
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "openingBalance": {
            "type": "integer",
            "minimum": -2147483647,
            "maximum": 2147483647,
            "description": "Opening balance in integer paise."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_customerAction

    Change a customer's details. Fields left out keep their values; an empty string clears one. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_customer",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a customer's details. Fields left out keep their values; an empty string clears one. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "gstin": {
            "type": "string",
            "maxLength": 15,
            "description": "GSTIN; its first two digits must match the state."
          },
          "pan": {
            "type": "string",
            "maxLength": 10,
            "description": "PAN, e.g. ABCPE1234F. Taken from the GSTIN when omitted; must match it when both are given. TDS and TCS rates depend on it."
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "email": {
            "type": "string",
            "maxLength": 200
          },
          "phone": {
            "type": "string",
            "maxLength": 40
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "openingBalance": {
            "type": "integer",
            "minimum": -2147483647,
            "maximum": 2147483647,
            "description": "Opening balance in integer paise."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "customerId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_vendorAction

    Add a vendor, with its reverse-charge flag and default TDS section. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_vendor",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a vendor, with its reverse-charge flag and default TDS section. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "gstin": {
            "type": "string",
            "maxLength": 15,
            "description": "GSTIN; its first two digits must match the state."
          },
          "pan": {
            "type": "string",
            "maxLength": 10,
            "description": "PAN, e.g. ABCPE1234F. Taken from the GSTIN when omitted; must match it when both are given. TDS and TCS rates depend on it."
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "email": {
            "type": "string",
            "maxLength": 200
          },
          "phone": {
            "type": "string",
            "maxLength": 40
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "openingBalance": {
            "type": "integer",
            "minimum": -2147483647,
            "maximum": 2147483647,
            "description": "Opening balance in integer paise."
          },
          "rcmApplicable": {
            "type": "boolean",
            "description": "True when the vendor's supplies fall under reverse charge."
          },
          "tdsSection": {
            "type": "string",
            "maxLength": 20,
            "description": "Default TDS section id from list_tax_sections, e.g. 1023 (contractors, Income-tax Act 2025). An old-Act id such as 194C still works: each payment resolves it to the section in force on its date."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_vendorAction

    Change a vendor's details. Fields left out keep their values; an empty string clears one. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_vendor",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a vendor's details. Fields left out keep their values; an empty string clears one. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "vendorId": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "gstin": {
            "type": "string",
            "maxLength": 15,
            "description": "GSTIN; its first two digits must match the state."
          },
          "pan": {
            "type": "string",
            "maxLength": 10,
            "description": "PAN, e.g. ABCPE1234F. Taken from the GSTIN when omitted; must match it when both are given. TDS and TCS rates depend on it."
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "email": {
            "type": "string",
            "maxLength": 200
          },
          "phone": {
            "type": "string",
            "maxLength": 40
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "openingBalance": {
            "type": "integer",
            "minimum": -2147483647,
            "maximum": 2147483647,
            "description": "Opening balance in integer paise."
          },
          "rcmApplicable": {
            "type": "boolean",
            "description": "True when the vendor's supplies fall under reverse charge."
          },
          "tdsSection": {
            "type": "string",
            "maxLength": 20,
            "description": "Default TDS section id from list_tax_sections, e.g. 1023 (contractors, Income-tax Act 2025). An old-Act id such as 194C still works: each payment resolves it to the section in force on its date."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "vendorId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_itemAction

    Add an item or service. A goods item with inventory and an opening quantity posts its opening stock into the default godown. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Add an item or service. A goods item with inventory and an opening quantity posts its opening stock into the default godown. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "isService": {
            "type": "boolean"
          },
          "hsnSac": {
            "type": "string",
            "maxLength": 20
          },
          "unit": {
            "type": "string",
            "maxLength": 20
          },
          "defaultRate": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "description": "Default price per unit in integer paise."
          },
          "taxRate": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "GST rate as a decimal fraction: 0.18 for 18%."
          },
          "enableInventory": {
            "type": "boolean",
            "description": "Track stock for this item (goods only)."
          },
          "valuationMethod": {
            "type": "string",
            "maxLength": 4,
            "enum": [
              "wac",
              "fifo"
            ]
          },
          "trackBatches": {
            "type": "boolean"
          },
          "reorderLevel": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100000000
          },
          "preferredVendorId": {
            "type": "integer",
            "minimum": 0,
            "description": "Vendor id; 0 clears it."
          },
          "openingQty": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100000000,
            "description": "Opening stock quantity. Only on creation, or while the item has no movements."
          },
          "openingValue": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "description": "Opening stock value in integer paise."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_itemAction

    Change an item. Opening stock changes only while the item has no stock movements, as in the item form. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Change an item. Opening stock changes only while the item has no stock movements, as in the item form. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "itemId": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "isService": {
            "type": "boolean"
          },
          "hsnSac": {
            "type": "string",
            "maxLength": 20
          },
          "unit": {
            "type": "string",
            "maxLength": 20
          },
          "defaultRate": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "description": "Default price per unit in integer paise."
          },
          "taxRate": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "GST rate as a decimal fraction: 0.18 for 18%."
          },
          "enableInventory": {
            "type": "boolean",
            "description": "Track stock for this item (goods only)."
          },
          "valuationMethod": {
            "type": "string",
            "maxLength": 4,
            "enum": [
              "wac",
              "fifo"
            ]
          },
          "trackBatches": {
            "type": "boolean"
          },
          "reorderLevel": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100000000
          },
          "preferredVendorId": {
            "type": "integer",
            "minimum": 0,
            "description": "Vendor id; 0 clears it."
          },
          "openingQty": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100000000,
            "description": "Opening stock quantity. Only on creation, or while the item has no movements."
          },
          "openingValue": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647,
            "description": "Opening stock value in integer paise."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "itemId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_bank_accountAction

    Add a bank account under Bank Accounts, for receipts and payments. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_bank_account",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a bank account under Bank Accounts, for receipts and payments. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_invoice_seriesAction

    Add an invoice number series: prefix, suffix, starting number and FY reset. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_invoice_series",
      "kind": "act",
      "impl": "imperative",
      "description": "Add an invoice number series: prefix, suffix, starting number and FY reset. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 60
          },
          "prefix": {
            "type": "string",
            "maxLength": 30
          },
          "suffix": {
            "type": "string",
            "maxLength": 30
          },
          "startingNumber": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100000000
          },
          "resetOnFy": {
            "type": "boolean"
          },
          "defaultFor": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "",
              "domestic",
              "export",
              "sez-wp",
              "sez-wop",
              "bos",
              "credit-note"
            ],
            "description": "The document kind this series numbers by default; an empty string for none."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name",
          "prefix"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_invoice_seriesAction

    Change an invoice series. Fields left out keep their values. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_invoice_series",
      "kind": "act",
      "impl": "imperative",
      "description": "Change an invoice series. Fields left out keep their values. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "seriesId": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "maxLength": 60
          },
          "prefix": {
            "type": "string",
            "maxLength": 30
          },
          "suffix": {
            "type": "string",
            "maxLength": 30
          },
          "startingNumber": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100000000
          },
          "resetOnFy": {
            "type": "boolean"
          },
          "defaultFor": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "",
              "domestic",
              "export",
              "sez-wp",
              "sez-wop",
              "bos",
              "credit-note"
            ],
            "description": "The document kind this series numbers by default; an empty string for none."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "seriesId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_godownAction

    Add a godown or warehouse. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_godown",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a godown or warehouse. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "isDefault": {
            "type": "boolean",
            "description": "Make this the default godown; the previous default stops being one."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_godownAction

    Change a godown. Fields left out keep their values. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_godown",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a godown. Fields left out keep their values. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "godownId": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "isDefault": {
            "type": "boolean",
            "description": "Make this the default godown; the previous default stops being one."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "godownId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_companyAction

    Change the company's identity, address, FY start or composition scheme. Every changed field gets its own audit entry and history row. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "update_company",
      "kind": "act",
      "impl": "imperative",
      "description": "Change the company's identity, address, FY start or composition scheme. Every changed field gets its own audit entry and history row. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "tradeName": {
            "type": "string",
            "maxLength": 200
          },
          "companyType": {
            "type": "string",
            "maxLength": 30,
            "enum": [
              "",
              "proprietorship",
              "partnership",
              "llp",
              "private-limited",
              "public-limited",
              "huf",
              "other"
            ]
          },
          "gstin": {
            "type": "string",
            "maxLength": 15
          },
          "tan": {
            "type": "string",
            "maxLength": 10
          },
          "state": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "address": {
            "type": "string",
            "maxLength": 500
          },
          "fyStart": {
            "type": "string",
            "maxLength": 10,
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "description": "Financial-year start date, YYYY-MM-DD."
          },
          "compositionEnabled": {
            "type": "boolean"
          },
          "compositionType": {
            "type": "string",
            "maxLength": 12,
            "enum": [
              "trader",
              "restaurant",
              "service"
            ]
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_advanceAction

    Record a customer advance received before supply. The amount is gross of GST: the taxable value is backed out at taxRate and the tax split CGST+SGST intra-state, IGST inter-state. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_advance",
      "kind": "act",
      "impl": "imperative",
      "description": "Record a customer advance received before supply. The amount is gross of GST: the taxable value is backed out at taxRate and the tax split CGST+SGST intra-state, IGST inter-state. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "minimum": 1
          },
          "bankAccountId": {
            "type": "integer",
            "minimum": 1,
            "description": "Bank or cash account id from list_bank_accounts."
          },
          "amount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2147483647,
            "description": "Amount received, including GST, in integer paise."
          },
          "taxRate": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "GST rate as a decimal fraction; 0.18 for 18%."
          },
          "natureOfSupply": {
            "type": "string",
            "maxLength": 10,
            "enum": [
              "services",
              "goods"
            ]
          },
          "placeOfSupply": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^([A-Z]{2})?$",
            "description": "Two-letter state code, e.g. MH. An empty string clears it."
          },
          "paymentMode": {
            "type": "string",
            "maxLength": 10,
            "enum": [
              "cash",
              "cheque",
              "neft",
              "rtgs",
              "imps",
              "upi",
              "card",
              "other"
            ]
          },
          "advanceDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "advanceNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated when omitted."
          },
          "reference": {
            "type": "string",
            "maxLength": 120
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "customerId",
          "bankAccountId",
          "amount"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_vendor_paymentSensitive Action

    Pay a vendor, withholding TDS when a section applies: Dr Sundry Creditors (gross) / Cr Bank (net) / Cr TDS Payable. Records the Form 26Q deduction. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_vendor_payment",
      "kind": "transact",
      "impl": "imperative",
      "description": "Pay a vendor, withholding TDS when a section applies: Dr Sundry Creditors (gross) / Cr Bank (net) / Cr TDS Payable. Records the Form 26Q deduction. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "vendorId": {
            "type": "integer",
            "minimum": 1
          },
          "bankAccountId": {
            "type": "integer",
            "minimum": 1
          },
          "amount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2147483647,
            "description": "Gross amount before TDS, in integer paise."
          },
          "tdsSection": {
            "type": "string",
            "maxLength": 20,
            "description": "TDS section id from list_tax_sections, e.g. 1023. An old-Act id (194C) resolves to the section in force on the payment date. Empty or omitted for none."
          },
          "tdsRate": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Overrides the section's rate; decimal fraction."
          },
          "paymentMode": {
            "type": "string",
            "maxLength": 10,
            "enum": [
              "neft",
              "rtgs",
              "imps",
              "upi",
              "cheque",
              "cash"
            ]
          },
          "paymentDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "paymentNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated when omitted."
          },
          "reference": {
            "type": "string",
            "maxLength": 120
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "vendorId",
          "bankAccountId",
          "amount"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_tcs_collectionAction

    Record TCS collected from a customer: the Form 27EQ row and Dr Sundry Debtors / Cr TCS Payable. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_tcs_collection",
      "kind": "act",
      "impl": "imperative",
      "description": "Record TCS collected from a customer: the Form 27EQ row and Dr Sundry Debtors / Cr TCS Payable. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "minimum": 1
          },
          "section": {
            "type": "string",
            "maxLength": 20,
            "description": "TCS section id from list_tax_sections, in force on the collection date."
          },
          "taxableAmount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2147483647
          },
          "rate": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Overrides the section's rate; decimal fraction."
          },
          "collectionDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "invoiceId": {
            "type": "integer",
            "minimum": 1,
            "description": "The invoice the collection relates to, if any."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "customerId",
          "section",
          "taxableAmount"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_delivery_challanAction

    Goods leaving or returning without a sale. Moves stock; posts no ledger entry. outward-return names a vendor; the other types name a customer. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_delivery_challan",
      "kind": "act",
      "impl": "imperative",
      "description": "Goods leaving or returning without a sale. Moves stock; posts no ledger entry. outward-return names a vendor; the other types name a customer. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "challanType": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "outward-job",
              "outward-sample",
              "outward-return",
              "inward-return"
            ]
          },
          "customerId": {
            "type": "integer",
            "minimum": 1
          },
          "vendorId": {
            "type": "integer",
            "minimum": 1
          },
          "lines": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "itemId": {
                  "type": "integer",
                  "minimum": 1
                },
                "description": {
                  "type": "string",
                  "maxLength": 500
                },
                "quantity": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "itemId",
                "quantity"
              ]
            }
          },
          "challanDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "challanNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated when omitted."
          },
          "destination": {
            "type": "string",
            "maxLength": 200
          },
          "vehicleNo": {
            "type": "string",
            "maxLength": 20
          },
          "transporter": {
            "type": "string",
            "maxLength": 200
          },
          "reason": {
            "type": "string",
            "maxLength": 200
          },
          "isReturnable": {
            "type": "boolean"
          },
          "expectedReturnDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "lines"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_eway_billAction

    Draft an e-way bill from a posted invoice or a delivery challan. The portal issues the number; record it with record_eway_bill_number. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_eway_bill",
      "kind": "act",
      "impl": "imperative",
      "description": "Draft an e-way bill from a posted invoice or a delivery challan. The portal issues the number; record it with record_eway_bill_number. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sourceType": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "invoice",
              "delivery-challan"
            ]
          },
          "sourceId": {
            "type": "integer",
            "minimum": 1
          },
          "transporterName": {
            "type": "string",
            "maxLength": 200
          },
          "transporterId": {
            "type": "string",
            "maxLength": 20
          },
          "vehicleNo": {
            "type": "string",
            "maxLength": 20
          },
          "vehicleType": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "regular",
              "over-dimensional"
            ]
          },
          "mode": {
            "type": "string",
            "maxLength": 10,
            "enum": [
              "road",
              "rail",
              "air",
              "ship"
            ]
          },
          "distanceKm": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10000
          },
          "reasonCode": {
            "type": "string",
            "maxLength": 2,
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "8"
            ]
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "sourceType",
          "sourceId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    record_eway_bill_numberAction

    Record the number the e-way bill portal issued for a draft; the bill becomes generated. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "record_eway_bill_number",
      "kind": "act",
      "impl": "imperative",
      "description": "Record the number the e-way bill portal issued for a draft; the bill becomes generated. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ewbId": {
            "type": "integer",
            "minimum": 1
          },
          "ewbNumber": {
            "type": "string",
            "maxLength": 20
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "ewbId",
          "ewbNumber"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    create_stock_transferAction

    Record an outbound inter-GSTIN stock transfer with IGST per line. Returns the payload the receiving branch imports; saving it as a file is the person's. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "create_stock_transfer",
      "kind": "act",
      "impl": "imperative",
      "description": "Record an outbound inter-GSTIN stock transfer with IGST per line. Returns the payload the receiving branch imports; saving it as a file is the person's. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "toGstin": {
            "type": "string",
            "maxLength": 15
          },
          "toState": {
            "type": "string",
            "maxLength": 2,
            "pattern": "^[A-Z]{2}$"
          },
          "lines": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "type": "object",
              "properties": {
                "itemId": {
                  "type": "integer",
                  "minimum": 1
                },
                "quantity": {
                  "type": "number",
                  "exclusiveMinimum": 0
                },
                "rate": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Integer paise per unit."
                },
                "taxRate": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                }
              },
              "required": [
                "itemId",
                "quantity",
                "rate"
              ]
            }
          },
          "transferDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Defaults to today."
          },
          "transferNumber": {
            "type": "string",
            "maxLength": 60,
            "description": "Generated when omitted."
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "toGstin",
          "toState",
          "lines"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    save_bank_reconciliationAction

    Save a reconciliation of one bank account over a period: the ledger lines cleared against the statement and the statement's closing balance. Bahi works out the book balance, the uncleared totals and the difference. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "save_bank_reconciliation",
      "kind": "act",
      "impl": "imperative",
      "description": "Save a reconciliation of one bank account over a period: the ledger lines cleared against the statement and the statement's closing balance. Bahi works out the book balance, the uncleared totals and the difference. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Reconciled through this date."
          },
          "statementBalance": {
            "type": "integer",
            "minimum": -2147483647,
            "maximum": 2147483647,
            "description": "Closing balance per the bank statement, integer paise."
          },
          "clearedLineIds": {
            "type": "array",
            "maxItems": 20000,
            "items": {
              "type": "integer",
              "minimum": 1
            },
            "description": "line_id values from get_bank_reconciliation that the statement shows."
          },
          "notes": {
            "type": "string",
            "maxLength": 2000
          },
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [
          "accountId",
          "from",
          "to",
          "statementBalance"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    save_snapshotAction

    Save the books and keep the previous on-disk state as a manual snapshot inside the .khata, retained indefinitely. Waits for the person's approval: returns {status:"pending_approval", proposalId}; call get_proposal for the outcome. Needs an open .khata.

    View tool JSON
    {
      "name": "save_snapshot",
      "kind": "act",
      "impl": "imperative",
      "description": "Save the books and keep the previous on-disk state as a manual snapshot inside the .khata, retained indefinitely. Waits for the person's approval: returns {status:\"pending_approval\", proposalId}; call get_proposal for the outcome. Needs an open .khata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "agentName": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[A-Za-z0-9._-]{1,60}$",
            "description": "Your name for the audit log: the actor becomes agent:<agentName>. Letters, digits, dot, dash and underscore only."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    set_themeAction

    Switch this browser's colour theme. A local preference; the books are untouched.

    View tool JSON
    {
      "name": "set_theme",
      "kind": "act",
      "impl": "imperative",
      "description": "Switch this browser's colour theme. A local preference; the books are untouched.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "theme": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "crisp-paper",
              "sakura-wash",
              "asagi-haze",
              "kinari-washi",
              "sumi"
            ]
          }
        },
        "required": [
          "theme"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_proposalsAnswer

    Proposals staged in this tab, newest first, with their status: pending, applied, rejected, withdrawn or failed.

    View tool JSON
    {
      "name": "list_proposals",
      "kind": "answer",
      "impl": "imperative",
      "description": "Proposals staged in this tab, newest first, with their status: pending, applied, rejected, withdrawn or failed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "maxLength": 20,
            "enum": [
              "pending",
              "applied",
              "rejected",
              "withdrawn",
              "failed"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 50
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_proposalAnswer

    One proposal: its status and, once applied, its result (for example the new invoiceId).

    View tool JSON
    {
      "name": "get_proposal",
      "kind": "answer",
      "impl": "imperative",
      "description": "One proposal: its status and, once applied, its result (for example the new invoiceId).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "maxLength": 80
          }
        },
        "required": [
          "proposalId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    withdraw_proposalAction

    Take back a pending proposal so the person no longer sees it.

    View tool JSON
    {
      "name": "withdraw_proposal",
      "kind": "act",
      "impl": "imperative",
      "description": "Take back a pending proposal so the person no longer sees it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "maxLength": 80
          }
        },
        "required": [
          "proposalId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    list_routesAnswer

    Every UI route with its group, keywords and actions — the first door's index.

    View tool JSON
    {
      "name": "list_routes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Every UI route with its group, keywords and actions — the first door's index.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/"
    }
    navigateAction

    Show a UI route in this tab. The route must exist in list_routes.

    View tool JSON
    {
      "name": "navigate",
      "kind": "act",
      "impl": "imperative",
      "description": "Show a UI route in this tab. The route must exist in list_routes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "route": {
            "type": "string",
            "maxLength": 80
          }
        },
        "required": [
          "route"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }