mcp-server-smallinvoice
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SMALLINVOICE_DRY_RUN | No | Set to '1' to prevent write operations from reaching the API | |
| SMALLINVOICE_CLIENT_ID | Yes | OAuth2 client ID — smallinvoice Home → Users → API V2 → New client | |
| SMALLINVOICE_TOKEN_FILE | No | Path to persist rotating tokens (default: ~/.aiwerk/smallinvoice-tokens.json) | |
| SMALLINVOICE_NO_SNAPSHOT | No | Set to '1' to disable pre-write entity snapshots | |
| SMALLINVOICE_ACCESS_TOKEN | No | Pre-loaded access token; lazily refreshed if absent or expired | |
| SMALLINVOICE_SNAPSHOT_DIR | No | Directory for pre-write snapshots (default: ~/.aiwerk/smallinvoice-snapshots) | |
| SMALLINVOICE_CLIENT_SECRET | Yes | OAuth2 client secret | |
| SMALLINVOICE_REFRESH_TOKEN | Yes | Initial refresh token from the OAuth bootstrap flow (rotates per call) | |
| SMALLINVOICE_API_TIMEOUT_MS | No | Request timeout in ms (default: 30000) | |
| SMALLINVOICE_SNAPSHOT_FAIL_OPEN | No | Set to '1' to log a warning instead of blocking when a snapshot fails |
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 |
|---|---|
| get_ownerA | Returns data of authenticated resource owner |
| get_profileA | Returns data of authenticated user's profile |
| list_product_categoriesB | Returns list of product categories |
| create_product_categoryB | Creates new product category |
| list_service_categoriesB | Returns list of service categories |
| create_service_categoryC | Creates new service category |
| get_product_categoryA | Returns data of specified product category |
| update_product_categoryC | Updates specified product category |
| get_service_categoryB | Returns data of specified service category |
| update_service_categoryB | Updates specified service category |
| delete_product_categoriesB | Deletes specified product categories |
| delete_service_categoriesC | Deletes specified service categories |
| list_unitsB | Returns list of units |
| get_unitC | Returns data of specified unit |
| list_productsC | Returns list of products |
| create_productC | Creates new product |
| get_productA | Returns data of specified product |
| update_productB | Updates specified product |
| delete_productsC | Deletes specified products |
| list_servicesC | Returns list of services |
| create_serviceC | Creates new service |
| get_serviceB | Returns data of specified service |
| update_serviceC | Updates specified service |
| delete_servicesC | Deletes specified services |
| list_bank_accountsA | Returns list of bank accounts |
| create_bank_accountB | Creates new bank account |
| get_bank_accountB | Returns data of specified bank account |
| update_bank_accountB | Updates specified bank account |
| delete_bank_accountsA | Deletes specified bank accounts |
| list_exchange_ratesB | Returns list of currency exchange rates |
| create_exchange_rateC | Creates new currency exchange rate |
| get_exchange_rateB | Returns data of specified currency exchange rate |
| update_exchange_rateB | Updates specified currency exchange rate |
| delete_exchange_ratesA | Deletes specified currency exchange rates |
| list_contact_accountsB | Returns list of accounts for specified contact |
| create_contact_accountB | Creates new account for specified contact |
| get_contact_accountC | Returns data of specified account |
| update_contact_accountC | Updates specified account |
| delete_contact_accountsC | Deletes specified accounts |
| list_contact_addressesB | Returns list of addresses for specified contact |
| create_contact_addressB | Creates new address for specified contact |
| get_contact_addressB | Returns data of specified address |
| update_contact_addressB | Updates specified address |
| delete_contact_addressesB | Deletes specified addresses |
| list_contact_groupsC | Returns list of contact groups |
| create_contact_groupB | Creates new contact group |
| get_contact_groupB | Returns data of specified contact group |
| update_contact_groupC | Updates specified group |
| delete_contact_groupsC | Deletes specified groups |
| list_contactsC | Returns list of contacts |
| create_contactC | Creates new contact |
| get_contactC | Returns data of specified contact |
| update_contactC | Updates specified contact |
| delete_contactsA | Deletes specified contacts |
| assign_contact_groupsC | Assigns groups to specified contact |
| remove_contact_groupsB | Removes groups from specified contact |
| list_lettersB | Returns list of letters |
| create_letterC | Creates new letter |
| get_letterB | Returns data of specified letter |
| update_letterC | Updates specified letter |
| download_letter_pdfB | Gets pdf of specified letter |
| get_letter_previewB | Gets preview of specified letter |
| change_letter_statusA | Changes status of specified letter |
| send_letter_by_postA | Sends specified letter by post (SENDS BY POST — irreversible) |
| send_letter_by_emailB | Sends specified letter by email (SENDS REAL EMAIL — irreversible) |
| delete_lettersC | Deletes specified letters |
| list_contact_peopleB | Returns list of people for specified contact |
| create_contact_personA | Creates new person for specified contact |
| get_contact_personB | Returns data of specified person |
| update_contact_personC | Updates specified person |
| delete_contact_peopleB | Deletes specified people |
| list_remindersC | Returns list of reminders |
| create_reminderC | Creates new reminder |
| get_reminderA | Returns data of specified reminder |
| update_reminderB | Updates specified reminder |
| delete_remindersC | Deletes reminders |
| list_isrsC | Returns list of ISRs |
| get_isrB | Returns data of specified ISR |
| list_delivery_notesB | Returns list of delivery notes |
| create_delivery_noteC | Creates new delivery note |
| get_delivery_noteA | Returns data of specified delivery note |
| update_delivery_noteB | Updates specified delivery note |
| download_delivery_note_pdfB | Gets pdf of specified delivery note |
| get_delivery_note_previewB | Gets preview of specified delivery note |
| change_delivery_note_statusB | Changes status of specified delivery note |
| send_delivery_note_by_postA | Sends specified delivery note by post (SENDS BY POST — irreversible) |
| send_delivery_note_by_emailA | Sends specified delivery note by email (SENDS REAL EMAIL — irreversible) |
| delete_delivery_notesC | Deletes specified delivery notes |
| list_invoicesB | Returns list of invoices |
| create_invoiceC | Creates new invoice |
| get_invoiceB | Returns data of specified invoice |
| update_invoiceB | Updates specified invoice |
| download_invoice_pdfA | Gets pdf of specified invoice |
| get_invoice_previewB | Gets preview of specified invoice |
| change_invoice_statusC | Changes status of specified invoice |
| send_invoice_by_postA | Sends specified invoice by post (SENDS BY POST — irreversible) |
| send_invoice_by_emailA | Sends specified invoice by email (SENDS REAL EMAIL — irreversible) |
| delete_invoicesC | Deletes specified invoices |
| list_offersB | Returns list of offers |
| create_offerC | Creates new offer |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 146 tools
Most tools are cleanly separated by resource prefix (e.g., list_invoices, create_product), making selection straightforward. Minor ambiguity exists between get_owner and get_profile, and between activities/efforts/working_hours, which could confuse agents in time-tracking contexts.
The naming pattern is highly consistent: list_/create_/get_/update_/delete_ plus standardized document actions like download_*_pdf, get_*_preview, and send_*_by_email. Small deviations such as record_invoice_payment and singular delete_invoice_payment break the pattern slightly but do not undermine overall predictability.
At 146 tools, this is an extreme overload for an MCP server, far beyond the 25+ threshold and even the 50+ extreme case. Even though the domain is broad, the enormous surface area will overwhelm agents and create selection overhead, suggesting the need for consolidation or dynamic tool discovery.
The server covers the core invoicing/ERP lifecycle well, with full CRUD on contacts, products, invoices, offers, delivery notes, and projects, plus domain-specific actions like PDF generation and sending. Missing mutability for units, ISRs, and activities are notable but minor gaps that do not block primary workflows.