# smallinvoice MCP by usefulapi (remote · smallinvoice.usefulapi.io)

Read smallinvoice contacts, invoices, offers, projects and hours; create contacts and invoices.

- Trust score: 18/100 (low)
- Change this week: −45
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `smallinvoice.usefulapi.io`: 18/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice.md), [page](https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice)

## Channel facts

- Endpoint: `https://smallinvoice.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.12.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the smallinvoice MCP by usefulapi server?

smallinvoice MCP by usefulapi is a hosted endpoint at https://smallinvoice.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-smallinvoice 'https://smallinvoice.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-smallinvoice": {
      "url": "https://smallinvoice.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-smallinvoice": {
      "type": "http",
      "url": "https://smallinvoice.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-smallinvoice]
url = "https://smallinvoice.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-smallinvoice": {
      "type": "remote",
      "url": "https://smallinvoice.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-smallinvoice --url 'https://smallinvoice.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-smallinvoice:
    url: "https://smallinvoice.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-smallinvoice": {
      "Transport": "http",
      "Url": "https://smallinvoice.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-smallinvoice -t streamable-http -u 'https://smallinvoice.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-smallinvoice": {
      "type": "http",
      "url": "https://smallinvoice.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-01 (score 18, −49)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.20 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-10-31 (score 67, +3)

- [security improvement] Authorization: partial → pass
- [functional improvement] MCP protocol: fail → pass
- [functional] New prompt “add_a_customer_company”
- [functional] New prompt “check_the_invoices_of_a_customer”
- [functional] New prompt “create_an_invoice_for_a_customer”
- [functional] New prompt “find_a_customer_or_supplier”
- [functional] New prompt “review_hours_and_efforts_per_project”
- [functional] New prompt “review_offers_and_order_confirmations”
- [functional] MCP protocol version: 2025-06-18 → 2025-11-25
- [functional] Server version: 1.8.0 → 1.10.0
- [functional] Server version: 1.7.0 → 1.8.0
- [functional] Server version: 1.6.2 → 1.7.0

### 2026-10-30 (score 64, +1)

- [functional] Server version: 1.6.1 → 1.6.2
- [functional] Server version: 1.6.0 → 1.6.1

### 2026-10-29 (score 63, 0)

- [functional] Server version: 1.5.0 → 1.6.0
- [functional] Server version: 1.4.0 → 1.5.0

### 2026-10-28 (score 63, 0)

- [functional] Server version: 1.2.0 → 1.4.0

### 2026-10-27 (score 63, +1)

- [functional] Server version: 1.1.0 → 1.2.0

### 2026-10-26 (score 62, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-25 (score 62)

First indexed and scored.

## MCP tools (27)

### `smallinvoice_get_owner` (~40 tokens)

Get the account owner

The smallinvoice account the API client belongs to (the owner's id and details). A cheap check that the connection works. GET /auth/owner.

### `smallinvoice_list_contacts` (~257 tokens)

List contacts

List contacts (customers and suppliers): name, type (company or person), relation, e-mail, currency. Add with=main_address for the address. Needs the "contact" scope. GET /contacts. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_contact` (~83 tokens)

Get a contact

One contact by id, with its fields. Add with=main_address for the main address. Needs the "contact" scope. GET /contacts/{id}.

Input parameters:

- `id` (integer, required): The contact id (from smallinvoice_list_contacts).
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_contact_addresses` (~81 tokens)

List a contact's addresses

All addresses of one contact. Needs the "contact" scope. GET /contacts/{contactId}/addresses.

Input parameters:

- `contact_id` (integer, required): The contact id.
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).

### `smallinvoice_list_contact_people` (~83 tokens)

List a contact's people

The contact persons of one company contact. Needs the "contact" scope. GET /contacts/{contactId}/people.

Input parameters:

- `contact_id` (integer, required): The contact id.
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).

### `smallinvoice_list_contact_groups` (~235 tokens)

List contact groups

List the contact groups. Needs the "contact" scope. GET /contacts/configuration/groups. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_invoices` (~272 tokens)

List invoices

List invoices: number, contact, dates, total, currency, status. Filter by contact_id or a JSON filter. Needs the "invoice" scope. GET /receivables/invoices. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `contact_id` (integer): Only documents of this contact (customer) id.
- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_invoice` (~81 tokens)

Get an invoice

One invoice by id with its positions, totals and status. Needs the "invoice" scope. GET /receivables/invoices/{id}.

Input parameters:

- `id` (integer, required): The invoice id (from smallinvoice_list_invoices).
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_invoice_payments` (~87 tokens)

List payments of an invoice

The payments recorded on one invoice. Needs the "invoice" scope. GET /receivables/invoices/{invoiceId}/payments.

Input parameters:

- `invoice_id` (integer, required): The invoice id.
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).

### `smallinvoice_list_offers` (~262 tokens)

List offers

List offers (quotes). Filter by contact_id or a JSON filter. Needs the "offer" scope. GET /receivables/offers. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `contact_id` (integer): Only documents of this contact (customer) id.
- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_offer` (~82 tokens)

Get an offer

One offer (quote) by id with its positions and totals. Needs the "offer" scope. GET /receivables/offers/{id}.

Input parameters:

- `id` (integer, required): The offer id (from smallinvoice_list_offers).
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_order_confirmations` (~264 tokens)

List order confirmations

List order confirmations. Filter by contact_id or a JSON filter. Needs the "order_confirmation" scope. GET /receivables/order-confirmations. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `contact_id` (integer): Only documents of this contact (customer) id.
- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_order_confirmation` (~72 tokens)

Get an order confirmation

One order confirmation by id. Needs the "order_confirmation" scope. GET /receivables/order-confirmations/{id}.

Input parameters:

- `id` (integer, required): The order confirmation id.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_delivery_notes` (~264 tokens)

List delivery notes

List delivery notes. Filter by contact_id or a JSON filter. Needs the "delivery_note" scope. GET /receivables/delivery-notes. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `contact_id` (integer): Only documents of this contact (customer) id.
- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_delivery_note` (~73 tokens)

Get a delivery note

One delivery note by id. Needs the "delivery_note" scope. GET /receivables/delivery-notes/{id}.

Input parameters:

- `id` (integer, required): The delivery note id.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_products` (~235 tokens)

List catalog products

List the catalog's products (articles). Needs the "catalog" scope. GET /catalog/products. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_services` (~233 tokens)

List catalog services

List the catalog's services. Needs the "catalog" scope. GET /catalog/services. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_units` (~253 tokens)

List units

List the units (piece, hour, ...) with their ids, which an invoice position's unit_id refers to. Needs the "configuration" scope. GET /catalog/configuration/units. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_bank_accounts` (~243 tokens)

List bank accounts

List the account's bank accounts (as printed on documents). Needs the "configuration" scope. GET /configuration/bank-accounts. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_projects` (~231 tokens)

List projects

List projects. Needs the "project" scope. GET /reporting/projects. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_get_project` (~71 tokens)

Get a project

One project by id. Needs the "project" scope. GET /reporting/projects/{id}.

Input parameters:

- `id` (integer, required): The project id (from smallinvoice_list_projects).
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_working_hours` (~242 tokens)

List working hours

List recorded working hours (time tracking entries). Needs the "working_hours" scope. GET /reporting/working-hours. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_efforts` (~242 tokens)

List efforts

List efforts (expenses and services recorded against projects). Needs the "effort" scope. GET /reporting/efforts. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_activities` (~243 tokens)

List activities

List activities (the kinds of work that hours are booked on). Needs the "activity" scope. GET /reporting/activities. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_list_cost_units` (~237 tokens)

List cost units

List cost units. Needs the "cost_unit" scope. GET /reporting/cost-units. Returns count, total, next_offset (pass it as offset for the next page) and the items.

Input parameters:

- `filter` (string): Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"n…
- `limit` (integer): Items per page (default 100, max 200).
- `offset` (integer): Items to skip (paging: the previous reply's next_offset).
- `q` (string): Optional free-text search over several fields.
- `sort` (string): Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several.
- `with` (string): Optional extra fields to include, comma separated (e.g. 'main_address' on contacts).

### `smallinvoice_create_contact` (~205 tokens)

Create a contact

WRITE: creates a new company contact (customer) in smallinvoice, with its main address. Needs the "contact" scope. POST /contacts. Nothing is sent to anyone. Private persons are not supported here (smallinvoice needs more fields for them): create those in smallinvoice. Check smallinvoice_list_contacts first so you do not create a duplicate.

Input parameters:

- `city` (string, required): Main address: city.
- `country` (string, required): Main address: ISO country code, e.g. CH.
- `currency` (string): ISO currency, e.g. CHF or EUR.
- `email` (string): E-mail address.
- `name` (string, required): Company name, as printed on documents.
- `postcode` (string, required): Main address: postcode.
- `relation` (array): Relation codes (default ['CL'] = client, as in the vendor's example). See the vendor docs for the others.
- `street` (string, required): Main address: street and number.

### `smallinvoice_create_invoice` (~204 tokens)

Create an invoice

WRITE: creates a new invoice for a contact. Needs the "invoice" scope. POST /receivables/invoices. It is only created: it is NOT sent by e-mail or post and its status is not changed; the user reviews it in smallinvoice. Not idempotent: calling it twice creates two invoices. Use smallinvoice_list_contacts / smallinvoice_list_units first for the ids.

Input parameters:

- `contact_address_id` (integer, required): The id of the contact's address to print (smallinvoice_list_contact_addresses, or main_address_id on the contact).
- `contact_id` (integer, required): The contact (customer) id.
- `currency` (string, required): ISO currency, e.g. CHF.
- `date` (string, required): Invoice date, yyyy-mm-dd.
- `due` (string, required): Due date, yyyy-mm-dd.
- `language` (string, required): Document language: de, en, fr or it.
- `positions` (array, required): The invoice positions.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice#diagnostics

## Score history

- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 18
- 2026-10-31: 67
- 2026-10-30: 64
- 2026-10-29: 63
- 2026-10-28: 63
- 2026-10-27: 63
- 2026-10-26: 62
- 2026-10-25: 62

## Common questions

### What is the smallinvoice MCP by usefulapi server?

smallinvoice MCP by usefulapi is listed in the public MCP registry as io.usefulapi/smallinvoice. Read smallinvoice contacts, invoices, offers, projects and hours; create contacts and invoices. This page covers its hosted endpoint (https://smallinvoice.usefulapi.io/mcp).

### Is the smallinvoice MCP by usefulapi server safe to use?

smallinvoice MCP by usefulapi scores 18 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the smallinvoice MCP by usefulapi server expose?

smallinvoice MCP by usefulapi exposes 27 tools: smallinvoice_get_owner, smallinvoice_list_contacts, smallinvoice_get_contact, smallinvoice_list_contact_addresses, smallinvoice_list_contact_people, and 22 more. Their descriptions and schemas cost roughly 4,875 tokens of context every time the server is loaded.

### Does the smallinvoice MCP by usefulapi server require authentication?

Its publisher declares no required credentials for smallinvoice MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the smallinvoice MCP by usefulapi server still maintained?

smallinvoice MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://smallinvoice.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/smallinvoice/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-smallinvoice/smallinvoice
