Storno CLI
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_loginA | Authenticate with the Storno.ro API using email and password. Returns JWT access and refresh tokens, and stores them in the session config for all subsequent requests. Must be called before any other tool if STORNO_TOKEN is not set. |
| auth_registerA | Create a new Storno.ro user account. A default organization is automatically created. Returns JWT tokens on success. |
| auth_refreshA | Refresh an expired JWT access token using the refresh token. Both tokens are rotated. The new tokens are stored in the session config. Use when the current token has expired. |
| auth_meA | Get the current authenticated user profile including organization memberships and subscription plan. Returns flat JSON with user, organization, memberships, and subscription. |
| auth_update_profileA | Update the authenticated user's profile. Can update name, phone, timezone, quiet-hours preference, preferences, or change password (requires currentPassword when changing password). |
| auth_forgot_passwordA | Request a password reset email. Always returns success to prevent user enumeration — the email is only sent if the account exists. The reset link is valid for 1 hour. |
| auth_reset_passwordA | Reset a user password using the token received via email from auth_forgot_password. The token is single-use and expires after 1 hour. All existing sessions are revoked on success. |
| companies_listA | List all companies belonging to the authenticated user's organization. Returns company details including CIF, addresses, bank info, sync settings, and ANAF token status. Use this to find company UUIDs for the companies_select tool. |
| companies_getA | Get detailed information for a specific company by UUID. Returns all configuration settings, bank info, sync settings, and ANAF token validity status. |
| companies_createA | Create a new company by providing its CIF (Romanian tax identification number). The system automatically validates the CIF with ANAF and retrieves official registration data (name, address, VAT status). The CIF can be provided with or without the RO prefix. |
| companies_updateA | Update configuration settings for a company. Note: core ANAF data (CIF, registration number, VAT status, official address) cannot be modified as they are synced from official ANAF sources. Only editable fields like contact info, bank details, and sync settings can be changed. |
| companies_deleteA | Permanently delete a company and all associated data (invoices, clients, products, ANAF tokens). This triggers an asynchronous cascade deletion. Only Owner or Admin roles can delete companies. This action cannot be undone. |
| companies_upload_logoB | Upload a logo image for a company. Accepts PNG, JPG, or SVG files up to 2MB. The logo appears on PDF documents (invoices, proformas, delivery notes, receipts). |
| companies_delete_logoB | Remove the logo from a company. PDFs will no longer include the company logo. |
| companies_toggle_syncA | Toggle ANAF SPV / e-Factura synchronization on or off for a specific company. Calls POST /api/v1/companies/{uuid}/toggle-sync — flips the company's syncEnabled boolean. Requires COMPANY_EDIT permission. Enabling fails with 422 (messageKey ERR_SYNC_ENABLE_NO_TOKEN) when the company has no valid ANAF OAuth token; connect via anaf_create_token_link first. Returns { syncEnabled, message }. To enable on a fresh company, the recipe is: companies_list → anaf_create_token_link (open the URL, complete OAuth) → anaf_validate_cif → companies_toggle_sync. |
| companies_set_activeA | Set the organization-level active company by UUID. Calls PUT /api/v1/companies/{uuid}/set-active on the server and returns the updated list of all companies with the new active company reflected. Requires COMPANY_EDIT permission. Use companies_list first to find available company UUIDs. |
| companies_selectA | Select the active company for the current session. This sets the X-Company header used by all subsequent invoice, client, product, and other company-scoped requests. Call companies_list first to find available company UUIDs. |
| invoices_listA | List invoices for the active company with pagination, filtering, and sorting. Supports filtering by status (draft/issued/sent_to_provider/validated/rejected/cancelled), direction (incoming/outgoing), date range, client, and search term. Returns paginated results with totals. |
| invoices_getA | Get complete details for a specific invoice by UUID, including all line items, payment history, events timeline, attachments, client and supplier info, XML/PDF generation status, and ANAF submission details. |
| invoices_createA | Create a new draft invoice. Requires at least one line item and either a clientId or receiverName/receiverCif. The invoice starts in "draft" status and can be edited until issued. Use invoices_issue to finalize and generate XML/PDF. |
| invoices_updateA | Update an existing draft invoice. Only invoices with status "draft" can be updated. When updating the lines array, the entire array is replaced — include all lines you want to keep. Once issued, use invoices_cancel instead. |
| invoices_deleteA | Permanently delete a draft invoice. Only invoices with status "draft" can be deleted. This action is irreversible. For issued invoices, use invoices_cancel instead. |
| invoices_issueA | Issue a draft invoice. Validates the data, assigns a series number, generates UBL 2.1 XML, generates PDF (Pro plan), and changes status from "draft" to "issued". Once issued, the invoice cannot be edited. Use invoices_submit to send to ANAF e-Factura. |
| invoices_submitA | Submit an issued invoice to the ANAF e-Factura system. The invoice must be in "issued" status. Changes status to "sent_to_provider". ANAF validates the invoice asynchronously — poll invoices_get or use invoices_events to check validation result. |
| invoices_validateA | Validate an invoice before issuing or submitting. Returns a list of errors and warnings. Use mode "quick" for fast validation (basic rules) or "full" for comprehensive UBL Schematron and CIUS-RO compliance checks. |
| invoices_cancelA | Cancel an issued invoice. Requires a cancellation reason (minimum 10 characters). Changes status to "cancelled". Cancelled invoices remain in the system for record-keeping. Use invoices_restore to undo an accidental cancellation. |
| invoices_sync_clientA | Resync a single invoice with its client's current profile data (receiver name, CUI/CNP, buyer snapshot, VAT rules). Only allowed while the invoice has not been uploaded to ANAF (or was rejected) and is not cancelled. Cached XML/PDF files are invalidated so they regenerate with the corrected data. Use clients_sync_invoices to resync all unsent invoices of a client at once. |
| invoices_restoreA | Restore a cancelled invoice back to "draft" status. Only for accidental cancellations. Cannot restore if the invoice was submitted to ANAF, has credit notes, or has recorded payments. The invoice can then be edited and reissued. |
| invoices_pdfA | Download the PDF representation of an invoice. Returns base64-encoded binary data with content type. Requires Pro plan. PDF is generated automatically on issue or on-demand when first requested. |
| invoices_xmlB | Download the UBL 2.1 XML file for an issued invoice. Returns the XML text content. The XML is the format required for ANAF e-Factura submission and conforms to CIUS-RO and EN 16931 standards. |
| invoices_emailA | Send an invoice via email with optional PDF and XML attachments. Use invoices_email_defaults first to get pre-filled subject and body. Emails are sent asynchronously via queue. PDF attachment requires Pro plan. |
| invoices_email_defaultsA | Get pre-filled email content for an invoice based on the company email template. Returns suggested "to", "cc", "subject", and "body" with template variables already substituted. Use this to populate the email form before calling invoices_email. |
| invoices_email_historyA | Get the complete history of emails sent for an invoice, including delivery status, open/click tracking, bounce information, and who sent each email. Useful for audit trails and verifying client received the invoice. |
| invoices_eventsA | Get the complete timeline of events for an invoice: status changes, ANAF submissions, validations, emails sent, payments received, and user actions. Useful for audit trails, debugging, and understanding invoice lifecycle history. |
| invoices_attachmentsA | Download a file attachment from an invoice. Returns base64-encoded binary data with the MIME type. Get attachment UUIDs from invoices_get (the "attachments" array). Supports PDF, images, Word, Excel, ZIP, and other file types. |
| invoices_verify_signatureA | Verify the ANAF digital signature on a validated invoice. Checks certificate validity, signature cryptographic integrity, and XML content integrity. Requires Pro plan and the invoice must be in "validated" status (ANAF-signed). |
| invoices_export_csvA | Export a filtered list of invoices to CSV format. Accepts the same filters as invoices_list (status, direction, date range, client, etc.). Returns CSV text with UTF-8 BOM for Excel compatibility. Max 10,000 invoices; use invoices_export_zip for large exports with files. |
| invoices_export_zipA | Export a set of invoices (by UUID list) to a ZIP archive containing PDFs, XMLs, and a CSV summary. Processed asynchronously — returns an exportId and statusUrl. Poll the statusUrl or wait for webhook. Requires Pro plan. Max 100 invoices per export. |
| invoices_bulk_deleteA | Delete multiple draft invoices in batch. Only invoices with status "draft" can be deleted. This action is irreversible. Returns count of deleted invoices and any per-item errors. |
| invoices_bulk_cancelB | Cancel multiple invoices in batch with an optional reason. Returns count of cancelled invoices and any per-item errors. |
| invoices_bulk_stornoA | Create storno (refund/credit note) invoices for multiple invoices in batch. Only outgoing invoices with status "issued" or "validated" are eligible. Returns count of created storno invoices and any per-item errors. |
| invoices_bulk_mark_paidA | Mark multiple invoices as fully paid in batch. Creates payment records for each invoice's remaining balance. paymentMethod defaults to "bank_transfer". Returns count of updated invoices and any per-item errors. |
| invoices_export_saga_xmlA | Export invoices in Saga XML format for accounting software integration (e.g., Saga C). Accepts the same filters as invoices_export_csv. Returns XML text content. |
| invoices_export_receipts_saga_xmlA | Export payment receipts (incasari) in Saga XML format. Exports all outgoing invoice payments for accounting software integration. Use accountCash/accountBank/accountCard to override the chart-of-accounts for this export (defaults come from the company’s stored SAGA settings; SAGA requires the leaf analytic for cards, e.g. 5125.2). |
| invoices_export_payments_saga_xmlA | Export supplier payments (plati) in Saga XML format. Exports all incoming invoice payments for accounting software integration. Use accountCash/accountBank/accountCard to override the chart-of-accounts for this export (defaults come from the company’s stored SAGA settings). |
| invoices_export_efactura_zipB | Export e-Factura XML files as a ZIP archive. For large batches (>100 invoices), the export is processed asynchronously and returns a job ID to poll for completion. |
| invoices_share_links_listB | List all share links for an invoice, including view counts, expiry info, and status (active/revoked/expired). |
| invoices_share_links_createB | Create a new shareable link for an invoice. Returns the share URL, token, and expiry date. The link allows the recipient to view the invoice without authentication. |
| invoices_share_links_revokeB | Revoke/delete a share link for an invoice, making it permanently inaccessible. Get linkId from invoices_share_links_list. |
| clients_listA | List clients for the active company. Results are grouped alphabetically by name and can be filtered by type (company/individual) or searched by name, CUI/CNP, or email. |
| clients_getA | Get detailed information about a specific client by UUID, including invoice summary statistics (total count, unpaid amount, overdue amount, total revenue) and a list of the 10 most recent invoices. |
| clients_createA | Create a new client manually. Supports both company and individual client types. Company details (address, VAT, bank account, etc.) can be auto-filled using clients_anaf_lookup or clients_from_registry before calling this tool. |
| clients_updateA | Update an existing client by UUID. All fields are optional — only the provided fields will be updated. |
| clients_sync_invoicesA | Resync all unsent invoices with the client's current profile data (name, CUI, tax details). Unlike the automatic propagation on client update (current month only), this also rewrites older invoices, as long as they were not uploaded to ANAF and are not cancelled. Cached XML/PDF files are invalidated so they regenerate with the new data. Returns the number of invoices updated. |
| clients_deleteB | Permanently delete a client by UUID. Clients with existing invoices or documents cannot be deleted. |
| clients_bulk_deleteB | Delete multiple clients in a single request. Accepts up to 100 client UUIDs. Clients with existing documents will be skipped or cause an error depending on server configuration. |
| clients_anaf_lookupA | Look up company details by CUI in the ANAF public registry without creating a client. Returns pre-filled form data (name, address, VAT status, registration number, etc.) that can be used to populate a clients_create call. |
| clients_vies_lookupA | Validate a VAT code against the EU VIES system. Returns whether the VAT number is valid and the registered company name/address. Use this to verify EU intra-community VAT numbers before applying reverse charge. |
| clients_from_registry | Create a client by looking up a CUI in the ANAF registry and auto-filling all available details (name, address, VAT status, registration number, etc.). Use this instead of clients_create when you only have a CUI and want the company details resolved automatically. |
| clients_export_csvB | Export all clients for the active company as a CSV file. Returns base64-encoded binary data representing the CSV file contents. |
| clients_export_saga_xmlC | Export clients in Saga XML format for import into Saga accounting software. Returns the XML document as text. |
| products_listA | List products for the active company. Products are sync-only and are automatically extracted from invoice line items during ANAF synchronization — they cannot be manually created or edited. Results can be filtered by active status and searched by name, code, or description. |
| products_getB | Get detailed information about a specific product by UUID, including usage statistics (total usage count, total revenue generated, average quantity, first and last usage dates). |
| products_updateA | Update an existing product by UUID. All fields are optional — only provided fields are changed. Useful for assigning product codes (so sales can be grouped per plan/SKU), fixing names, or adjusting default prices on sync-created products. Pass code=null to clear a code. |
| product_categories_listA | List all product categories for the active company, ordered by sortOrder then name. Categories appear as a chip strip above the POS product grid and double as fallback colour swatches for products that don't have their own colour. |
| product_categories_createB | Create a new POS product category. Categories are scoped to a single company. |
| product_categories_updateA | Update a product category. All fields optional; omitted fields stay unchanged. Pass color=null to clear the swatch. |
| product_categories_deleteA | Delete a product category. Products that were in the category lose the assignment (categoryId is set to null) but are not deleted. |
| payments_listA | List all payments recorded for a specific invoice, ordered by payment date (most recent first). Returns payment amount, date, method, reference number, and notes. The sum of payments determines the invoice amountPaid and balance. |
| payments_createA | Record a payment received for an invoice. Updates the invoice amountPaid and balance, and automatically changes invoice status to "partially_paid" or "paid" as appropriate. Supports partial payments with full details (method, reference, notes). |
| payments_deleteA | Permanently delete a recorded payment from an invoice. Updates the invoice amountPaid and balance, and may change the invoice status back to "unpaid" or "partially_paid". This action is irreversible — use with caution for corrections. |
| defaults_invoice | Get all default values and dropdown options needed for invoice creation. Returns VAT rates, currencies with symbols, payment terms (in days), units of measure, payment methods, and current BNR exchange rates for EUR/USD/GBP/CHF relative to RON. Always fetch this before creating invoices — never hardcode these values. |
| vat_category_codes_list | List all available VAT category codes with their i18n message keys. Codes: S (standard rate), Z (zero-rated), E (exempt from tax), AE (reverse charge), K (exempt for export), L (intra-community supply), O (outside scope), M (margin scheme). Does not require authentication. |
| vat_rates_listA | List all VAT rates configured for the active company, sorted by display position. Returns rate percentage, display label, e-Factura category code, and which rate is the default. Common Romanian rates: 19% (standard), 9% (reduced), 5% (super-reduced), 0% (exempt). |
| vat_rates_createA | Create a new VAT rate for the active company. If isDefault is true, any existing default rate is demoted. If this is the first VAT rate, it automatically becomes the default. Common e-Factura category codes: S=standard, AA=reduced, E=exempt, O=outside scope, Z=zero rated, AE=reverse charge. |
| vat_rates_updateA | Update an existing VAT rate. Note: changing the rate percentage does not retroactively affect existing invoices — those preserve the original rate. Only updates display label, category code, default status, or position. At least one field must be provided. |
| vat_rates_deleteA | Soft-delete a VAT rate. The rate is marked as deleted but not physically removed, preserving historical invoice integrity. Cannot delete the default rate (set another as default first) or the last remaining rate. Existing invoices are not affected. |
| bank_accounts_listA | List all bank accounts configured for the active company. Returns IBAN, bank name, currency, and which account is the default per currency. Bank accounts appear on invoices as payment instructions. |
| bank_accounts_createA | Add a new bank account to the active company. For type=bank, IBAN is required and must be unique within the company. For type=cash (the till that backs POS / cash-register reports), IBAN is optional and openingBalance/openingBalanceDate enable cash-register tracking. A company can have at most one cash account. If isDefault is true, any existing default account for that currency is demoted. |
| bank_accounts_updateA | Update an existing bank account. Can update type, IBAN, bank name, currency, default status, or initial opening balance. Once openingBalance has been persisted with a value > 0 it locks — further changes are rejected and corrections must be made via cash movements. At least one field must be provided. |
| bank_accounts_deleteA | Permanently delete a bank account. Cannot delete the last bank account for a company or the default account (set another as default first). Existing invoices that referenced this account retain the IBAN in their stored data. |
| cash_register_balanceA | Live snapshot of the till — opening balance, cash in/out since opening, manual movements, and current balance. Returns { configured: false } if no cash-type bank account exists or its opening balance is not set. |
| cash_register_ledgerA | Daily cash ledger across the requested date range. Each day bucket includes opening balance, chronological entries (receipts, cash payments, manual movements), totals, and closing balance. Range capped at 366 days. |
| cash_register_movements_listA | List manual cash movements (deposits, withdrawals, miscellaneous) in a date range. Receipts and invoice payments are NOT returned here — use cash_register_ledger for the full picture. |
| cash_register_movements_createA | Record a manual cash movement (deposit, withdrawal, or miscellaneous). Direction is auto-set for deposits (out) and withdrawals (in); for kind=other, direction must be supplied. movementDate cannot be earlier than the cash account opening date. |
| cash_register_movements_updateA | Update a manual cash movement. All fields optional; omitted fields keep their current value. Currency cannot be changed. Changing kind between deposit/withdrawal re-applies auto-direction. |
| cash_register_movements_deleteA | Permanently delete a manual cash movement. Receipts and invoice payments cannot be deleted via this endpoint — use their respective resources. |
| document_series_listA | List all document series for the active company, optionally filtered by type. Document series define the numbering prefixes for invoices (e.g., "FAC"), proformas ("PRO"), credit notes, and delivery notes. Each series tracks the current and next available number. |
| document_series_createA | Create a new document series. The prefix must be unique per company and document type. Common patterns: "FAC" for invoices, "FAC2026" for annual series, "PRO" for proformas. Use currentNumber to set the starting number (default: 0, so first document gets number 1). |
| document_series_updateA | Update an existing document series. Only "currentNumber" and "active" can be changed — prefix and type are immutable after creation. Use active=false to deactivate a series (e.g., at end of fiscal year). Changing currentNumber affects the next document number, use with extreme caution to avoid duplicates. |
| document_series_set_defaultA | Set a document series as the default for its type. The default series is auto-selected when creating new documents of that type. Only one series can be default per type. |
| document_series_deleteA | Permanently delete a document series. Cannot delete a series that has been used for any documents. Consider marking as inactive (active=false) instead, to preserve referential integrity and the audit trail. Only delete if the series was created by mistake and never used. |
| proforma_invoices_listA | List proforma invoices for the selected company with optional filtering by status, date range, client, and search term. Returns paginated results. |
| proforma_invoices_getB | Get complete details for a specific proforma invoice including all line items, client information, and calculated totals. |
| proforma_invoices_createB | Create a new proforma invoice in draft status with line items. Supports multiple currencies, discounts, and optional references. |
| proforma_invoices_updateA | Update an existing proforma invoice. Only invoices in draft status can be updated. Replaces all line items with the provided array. |
| proforma_invoices_deleteA | Permanently delete a proforma invoice. Only draft proforma invoices can be deleted. Use cancel for sent/accepted/rejected proformas to preserve audit trail. |
| proforma_invoices_sendB | Mark a proforma invoice as sent to the client. Transitions status from draft to sent. Once sent, the proforma becomes read-only. |
| proforma_invoices_acceptB | Mark a proforma invoice as accepted by the client. Transitions status to accepted. Once accepted, the proforma is ready to be converted to a final invoice. |
| proforma_invoices_rejectA | Mark a proforma invoice as rejected by the client. Optionally provide a rejection reason and notes. Once rejected, the proforma cannot be converted to an invoice. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/stornoro/storno-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server