# Sellsy MCP by usefulapi (remote · sellsy.usefulapi.io)

Search and read Sellsy companies, contacts, opportunities, invoices and tasks; create records.

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

## Components

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

## Channel facts

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

## 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 Sellsy MCP by usefulapi server?

Sellsy MCP by usefulapi is a hosted endpoint at https://sellsy.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-sellsy 'https://sellsy.usefulapi.io/mcp'
```

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-sellsy": {
      "type": "http",
      "url": "https://sellsy.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-02 (score 18, −49)

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

### 2026-11-01 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

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

- [security improvement] Authorization: partial → pass
- [functional improvement] MCP protocol: fail → pass
- [functional] New prompt “add_a_company_individual_or_contact”
- [functional] New prompt “create_a_task_or_add_a_note_to_a_record”
- [functional] New prompt “create_an_opportunity_for_a_customer”
- [functional] New prompt “find_late_or_unpaid_invoices”
- [functional] New prompt “look_up_a_company_with_its_contacts_and_quotes”
- [functional] New prompt “review_open_opportunities_in_the_pipeline”
- [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 63, 0)

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

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

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

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

- [functional] Server version: 1.2.0 → 1.4.0

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

- [functional] Server version: 1.1.0 → 1.2.0

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

- [functional improvement] Stability: unverified → 0.03

## MCP tools (44)

### `sellsy_search` (~134 tokens)

Search across Sellsy

Free-text search over companies, individuals, contacts, opportunities, items, documents and staff in one call (GET /search). Use it to find a record by name, email or number when you do not know its type. Needs the search.read scope.

Input parameters:

- `archived` (boolean): true = only archived records.
- `limit` (integer): Records per page, 1-100 (default 25).
- `q` (string, required): The text to search for.
- `type` (array): Restrict to these object types or subtypes (e.g. company.client, document.invoice). Omit to search everything.

### `sellsy_list_companies` (~216 tokens)

List companies

List companies (customers, prospects, suppliers) with paging. Needs companies.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: name, id, created_at, updated_at.

### `sellsy_search_companies` (~341 tokens)

Search companies

Search companies by name, email, type (prospect/client/supplier), reference, VAT, SIRET, country, postal code, creation or update date. Needs companies.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: name (exact), email (exact), type ("prospect"|"client"|"supplier" or an array), is_archived (bool), siret, vat, reference [..],…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: name, id, created_at, updated_at.

### `sellsy_get_company` (~99 tokens)

Get a company

Get one company by id. Needs companies.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Company id.

### `sellsy_list_company_contacts` (~132 tokens)

List a company's contacts

List the contacts linked to one company (GET /companies/{id}/contacts). Needs companies.read and contacts.read.

Input parameters:

- `company_id` (integer, required): Company id.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…

### `sellsy_list_individuals` (~218 tokens)

List individuals

List individuals (private customers, prospects, suppliers) with paging. Needs individuals.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: name, id, created_at, updated_at.

### `sellsy_search_individuals` (~312 tokens)

Search individuals

Search individuals by name, email, type, reference, country, postal code, creation or update date. Needs individuals.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: name (exact), email (exact), type ("prospect"|"client"|"supplier" or an array), is_archived (bool), reference [..], id [ids], co…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: name, id, created_at, updated_at.

### `sellsy_get_individual` (~100 tokens)

Get an individual

Get one individual by id. Needs individuals.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Individual id.

### `sellsy_list_contacts` (~210 tokens)

List contacts

List contacts (people at companies) with paging. Needs contacts.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, name, created_at.

### `sellsy_search_contacts` (~297 tokens)

Search contacts

Search contacts by last name, email, phone, linked company or individual, creation date. Needs contacts.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: last_name, email, phone_number, mobile_number, companies [company ids], individuals [individual ids], id [ids], is_linked (bool)…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, name, created_at.

### `sellsy_get_contact` (~99 tokens)

Get a contact

Get one contact by id. Needs contacts.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Contact id.

### `sellsy_list_opportunities` (~212 tokens)

List opportunities

List sales opportunities with paging. Needs opportunities.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, created, step_rank, due_date, amount.

### `sellsy_search_opportunities` (~343 tokens)

Search opportunities

Search opportunities by name, number, pipeline, step, status (open/won/lost/cancelled/closed/late), amount, owner or due date. Needs opportunities.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: name, number, pipeline [pipeline ids], step [step ids], statuses ["open"|"won"|"lost"|"cancelled"|"closed"|"late"], amount {min,…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, created, step_rank, due_date, amount.

### `sellsy_get_opportunity` (~100 tokens)

Get an opportunity

Get one opportunity by id. Needs opportunities.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Opportunity id.

### `sellsy_list_opportunity_pipelines` (~122 tokens)

List opportunity pipelines

List the sales pipelines (needed to create an opportunity: pipeline id and step id). Needs opportunities.read.

Input parameters:

- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…

### `sellsy_list_pipeline_steps` (~121 tokens)

List the steps of a pipeline

List the steps of one opportunity pipeline. Needs opportunities.read.

Input parameters:

- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `pipeline_id` (integer, required): Pipeline id.

### `sellsy_list_estimates` (~217 tokens)

List estimates

List estimates (quotes) with paging. Needs estimates.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, numero, created, date, expiry_date, number, amount.

### `sellsy_search_estimates` (~356 tokens)

Search estimates

Search estimates by status, number, date, currency, owner, contact or related company/individual/opportunity. Needs estimates.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: status ["draft"|"sent"|"read"|"accepted"|"refused"|"expired"|"advanced"|"partialinvoiced"|"invoiced"|"cancelled"], number (exact…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, numero, created, date, expiry_date, number, amount.

### `sellsy_get_estimate` (~106 tokens)

Get an estimate

Get one estimate by id, with its rows and amounts. Needs estimates.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Estimate id.

### `sellsy_list_invoices` (~212 tokens)

List invoices

List invoices with paging. Needs invoices.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, number, created, date, amount, due_date.

### `sellsy_search_invoices` (~371 tokens)

Search invoices

Search invoices by status (draft/due/payinprogress/paid/late/cancelled), number, date, currency, owner, or related company/individual/opportunity. Use it for unpaid or late invoices. Needs invoices.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: status ["draft"|"due"|"payinprogress"|"paid"|"late"|"cancelled"], number (exact), currency, date {start,end} dates YYYY-MM-DD, c…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, number, created, date, amount, due_date.

### `sellsy_get_invoice` (~107 tokens)

Get an invoice

Get one invoice by id, with its rows, amounts and status. Needs invoices.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Invoice id.

### `sellsy_list_invoice_payments` (~125 tokens)

List an invoice's payments

List the payments linked to one invoice. Needs invoices.read and payments.read.

Input parameters:

- `invoice_id` (integer, required): Invoice id.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…

### `sellsy_list_orders` (~214 tokens)

List orders

List orders with paging. Needs orders.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, number, created, date, amount, due_date, order_status.

### `sellsy_search_orders` (~315 tokens)

Search orders

Search orders by status or delivery status, or related company/individual/opportunity. Needs orders.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: status ["draft"|"sent"|"read"|"accepted"|"expired"|"advanced"|"invoiced"|"partialinvoiced"|"cancelled"], order_status ["none"|"w…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, number, created, date, amount, due_date, order_status.

### `sellsy_get_order` (~99 tokens)

Get an order

Get one order by id. Needs orders.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Order id.

### `sellsy_list_credit_notes` (~212 tokens)

List credit notes

List credit notes with paging. Needs credit-notes.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, number, created, date, amount.

### `sellsy_get_credit_note` (~104 tokens)

Get a credit note

Get one credit note by id. Needs credit-notes.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Credit note id.

### `sellsy_list_items` (~213 tokens)

List items

List catalog items (products, services, shipping, packaging) with paging. Needs items.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, created_at.

### `sellsy_search_items` (~254 tokens)

Search items

Search catalog items by name, reference or type. Needs items.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: name, reference, type ["product"|"service"|"shipping"|"packaging"], is_archived (bool).
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, created_at.

### `sellsy_get_item` (~100 tokens)

Get an item

Get one catalog item by id. Needs items.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Item id.

### `sellsy_search_payments` (~266 tokens)

Search payments

Search payments by status (pending/confirmed/rejected/failed/refund) or related company/individual. Needs payments.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: status ["pending"|"confirmed"|"rejected"|"failed"|"refund"], related_objects [{type,id}].
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, paid_date.

### `sellsy_list_tasks` (~203 tokens)

List tasks

List tasks with paging. Needs tasks.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, due_date.

### `sellsy_search_tasks` (~313 tokens)

Search tasks

Search tasks by status (todo/done), owner, assignee, label, due date or related record. Needs tasks.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: statuses ["todo"|"done"], owners [staff ids], assigned_staffs [staff ids], labels [label ids], priority {min,max} 0-1, companies…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, due_date.

### `sellsy_get_task` (~99 tokens)

Get a task

Get one task by id. Needs tasks.read.

Input parameters:

- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `id` (integer, required): Task id.

### `sellsy_list_task_labels` (~118 tokens)

List task labels

List the task labels (a label id is required to create a task). Needs tasks.read.

Input parameters:

- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…

### `sellsy_search_comments` (~287 tokens)

Search comments (notes)

Search comments and notes by author, date, parent comment or the company/individual/contact they are attached to. Needs comments.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `filters` (object): Search filters as an object. Unknown keys are refused by Sellsy. Keys: owners [staff ids], companies [ids], individuals [ids], contacts [ids], parent_id, related_objects [{type,id}], created {start,e…
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, updated, created.

### `sellsy_list_staffs` (~220 tokens)

List staff members

List the staff members of the account (the list may hold only yourself, depending on the Sellsy plan). Needs staffs.read.

Input parameters:

- `direction` (string): Sort direction (default asc).
- `embed` (array): Related objects to include (each may need an extra scope and is null without it), e.g. ["invoicing_address","main_contact","cf.1542"].
- `field` (array): Only return these fields, e.g. ["id","name"] or ["address.id"], to keep replies small.
- `limit` (integer): Records per page, 1-100 (default 25).
- `offset`: Paging cursor. Leave out for the first page. If the previous reply's pagination.offset is a string, pass it back unchanged for the next page. Only a number sets numeric paging: then pass the previous…
- `order` (string): Sort field: id, name.

### `sellsy_create_company` (~135 tokens)

Create a company

WRITE: create a company record in Sellsy (a prospect, client or supplier). Needs companies.write. Nothing is sent to the company.

Input parameters:

- `email` (string)
- `main_activity_description` (string)
- `mobile_number` (string)
- `name` (string, required): Company name.
- `note` (string)
- `number_of_employees` (integer)
- `owner_id` (integer): Staff id of the owner.
- `phone_number` (string)
- `reference` (string): Your own reference.
- `type` (string, required): Relationship type.
- `website` (string)

### `sellsy_create_individual` (~127 tokens)

Create an individual

WRITE: create an individual (a private person as prospect, client or supplier) in Sellsy. Needs individuals.write.

Input parameters:

- `civility` (string)
- `email` (string)
- `first_name` (string)
- `last_name` (string, required): Last name.
- `mobile_number` (string)
- `note` (string)
- `owner_id` (integer): Staff id of the owner.
- `phone_number` (string)
- `reference` (string)
- `type` (string, required): Relationship type.
- `website` (string)

### `sellsy_create_contact` (~116 tokens)

Create a contact

WRITE: create a contact (a person) in Sellsy. It is not linked to a company by this call. Needs contacts.write.

Input parameters:

- `civility` (string)
- `email` (string)
- `first_name` (string)
- `last_name` (string, required): Last name.
- `mobile_number` (string)
- `note` (string)
- `owner_id` (integer): Staff id of the owner.
- `phone_number` (string)
- `position` (string): Job title.

### `sellsy_create_opportunity` (~199 tokens)

Create an opportunity

WRITE: create a sales opportunity linked to a company, individual or contact. Needs a pipeline id and one of its step ids (see sellsy_list_opportunity_pipelines and sellsy_list_pipeline_steps). Needs opportunities.write.

Input parameters:

- `amount` (string): Potential amount as a decimal string, e.g. "1500.00" (account currency).
- `assigned_staff_ids` (array)
- `contact_ids` (array)
- `due_date` (string): Due date YYYY-MM-DD.
- `name` (string, required): Opportunity name.
- `note` (string)
- `owner_id` (integer): Staff id of the owner (default: the API client's staff).
- `pipeline` (integer, required): Pipeline id.
- `probability` (integer)
- `related` (array, required): Who it is for: one company or one individual (required), plus optional contacts.
- `step` (integer, required): Step id inside that pipeline.

### `sellsy_create_comment` (~94 tokens)

Add a comment (note)

WRITE: add a comment (note) to a company, individual, contact, opportunity or document. Visible to the Sellsy staff, not sent to the customer. Needs comments.write.

Input parameters:

- `description` (string, required): The comment text.
- `mentioned_staff_ids` (array): Staff to notify.
- `related_id` (integer, required): Id of that record.
- `related_type` (string, required): What it is attached to.

### `sellsy_create_task` (~188 tokens)

Create a task

WRITE: create a task, optionally attached to a record and assigned to staff. Needs a label id (see sellsy_list_task_labels) and a due date-time. Needs tasks.write.

Input parameters:

- `assigned_staff_ids` (array)
- `description` (string)
- `due_date` (string, required): Due date and time, ISO 8601 with offset, e.g. 2026-11-03T09:00:00+01:00.
- `is_private` (boolean)
- `label_id` (integer, required): Task label id.
- `owner_id` (integer): Staff id of the owner.
- `priority` (integer): Priority level, 0 or 1.
- `related_id` (integer): Id of that record.
- `related_type` (string): Record the task is about (give related_id too).
- `title` (string)

## Diagnostics

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

## Score history

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

## Common questions

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

Sellsy MCP by usefulapi is listed in the public MCP registry as io.usefulapi/sellsy. Search and read Sellsy companies, contacts, opportunities, invoices and tasks; create records. This page covers its hosted endpoint (https://sellsy.usefulapi.io/mcp).

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

Sellsy 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 Sellsy MCP by usefulapi server expose?

Sellsy MCP by usefulapi exposes 44 tools: sellsy_search, sellsy_list_companies, sellsy_search_companies, sellsy_get_company, sellsy_list_company_contacts, and 39 more. Their descriptions and schemas cost roughly 8,426 tokens of context every time the server is loaded.

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

Its publisher declares no required credentials for Sellsy 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 Sellsy MCP by usefulapi server still maintained?

Sellsy 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://sellsy.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/sellsy/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-sellsy/sellsy.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-sellsy/sellsy.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-sellsy/sellsy
