# Placetel MCP by usefulapi (remote · placetel.usefulapi.io)

Read Placetel calls, recordings, numbers and routing; edit contacts, start calls, send SMS.

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

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

## Channel facts

- Endpoint: `https://placetel.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.3`

## 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-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - 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.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3795 tokens (~135/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 29 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: 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 Placetel MCP by usefulapi server?

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

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-placetel": {
      "type": "http",
      "url": "https://placetel.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-10-25 (score 62)

First indexed and scored.

## MCP tools (28)

### `placetel_get_account` (~54 tokens)

Get account

The Placetel account this API key belongs to: user id, name, email, company, platform (e.g. PROFI), primary SIP user id and the numbers the key may use. GET /me.

### `placetel_list_users` (~169 tokens)

List users

List the web users of the account (main account and sub-users) with name, email, login, type, permissions and numbers. Filter by name, email, login or type. GET /users.

Input parameters:

- `email` (string): Filter by email.
- `first_name` (string): Filter by first name.
- `last_name` (string): Filter by last name.
- `login` (string): Filter by login.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `type` (string): Only the main account or only sub-users.

### `placetel_list_sip_users` (~159 tokens)

List SIP users (extensions)

List SIP users (phone extensions, softphones, fax and trunk lines) with extension number (did), caller id, type, online state and registrations. SIP passwords and PINs are never returned. GET /sip_users.

Input parameters:

- `description` (string): Filter by description.
- `did` (integer): Filter by internal extension number.
- `name` (string): Filter by name.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `username` (string): Filter by SIP username.

### `placetel_get_sip_user` (~81 tokens)

Get SIP user

One SIP user (extension) by id: sipuid, extension, caller id, type, linked web user, online state and call settings. The SIP password and PINs are never returned. GET /sip_users/{id}.

Input parameters:

- `sip_user_id` (integer, required): Placetel SIP user id (from placetel_list_sip_users).

### `placetel_list_calls` (~185 tokens)

List incoming calls

Incoming calls (accepted, missed, blocked, voicemail) on one day, today by default: caller number, called number, duration, matching contact, voicemail file URL and unread flag. For a different day pass date. GET /calls.

Input parameters:

- `date` (string): Day to list, yyyy-mm-dd (default: today).
- `from_number` (string): Only calls from this caller number.
- `order` (string): Sort order by time.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `to_number` (string): Only calls to this of your numbers.
- `type` (string): Call outcome filter.

### `placetel_get_call` (~56 tokens)

Get call

One incoming call by id: caller, called number, type, duration, contact, voicemail file URL. GET /calls/{id}.

Input parameters:

- `call_id` (integer, required): Placetel call id (from placetel_list_calls).

### `placetel_list_call_detail_records` (~123 tokens)

List call detail records

Call detail records (billing view) for one day: from, to, answering SIP user, length in seconds, cost amount and description. date is required. GET /call_detail_records.

Input parameters:

- `date` (string, required): Day to list, yyyy-mm-dd.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.

### `placetel_list_recordings` (~170 tokens)

List call recordings

Call recordings with direction, from, to, duration, time and the file URL. Filter by direction, number or day. GET /recordings.

Input parameters:

- `date` (string): Only recordings of this day, yyyy-mm-dd.
- `direction` (array): Directions to include, e.g. ["in","out"].
- `from` (string): Only recordings from this number.
- `order` (string): Sort order by time.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `to` (string): Only recordings to this number.

### `placetel_list_contacts` (~316 tokens)

List contacts

List the shared phone-book contacts with names, company, phone/mobile/fax numbers, emails, tags and blocked flag. Filter by name, company, email, number or update time. search_number finds a contact by any of its numbers. GET /contacts.

Input parameters:

- `blocked` (boolean): Only blocked (true) or only non-blocked (false) contacts.
- `company` (string): Filter by company.
- `email` (string): Filter by private email.
- `email_work` (string): Filter by work email.
- `first_name` (string): Filter by first name.
- `last_name` (string): Filter by last name.
- `mobile` (string): Filter by private mobile.
- `mobile_work` (string): Filter by work mobile.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `phone` (string): Filter by private phone.
- `phone_work` (string): Filter by work phone.
- `search_number` (string): Find the contact that owns this phone number (any of its number fields).
- `speeddial` (integer): Filter by speed-dial code.
- `updated_since` (string): Only contacts updated at or after this date/time.
- `updated_until` (string): Only contacts updated at or before this date/time.

### `placetel_get_contact` (~44 tokens)

Get contact

One contact by id with all its fields. GET /contacts/{id}.

Input parameters:

- `contact_id` (integer, required): Placetel contact id (from placetel_list_contacts).

### `placetel_list_numbers` (~189 tokens)

List phone numbers

List the phone numbers of the account with number, E.164 form, name, description, site, activation state and the routing object id that answers them. GET /numbers.

Input parameters:

- `activated` (boolean): Only activated (true) or deactivated (false) numbers (Profi plans).
- `description` (string): Filter by description.
- `name` (string): Filter by name.
- `number` (string): Filter by number.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `prefix` (string): Filter by area-code prefix.
- `site_id` (integer): Only numbers of this site (see placetel_list_sites).

### `placetel_get_number` (~59 tokens)

Get phone number

One phone number by id: number, E.164, name, site, carrier, activation state and routing id. GET /numbers/{id}.

Input parameters:

- `number_id` (integer, required): Placetel number id (from placetel_list_numbers).

### `placetel_list_number_profiles` (~65 tokens)

List number profiles

The routing profiles of a phone number (for example Standard, Holiday, Night) and which one is active. Needs a Placetel plan with number profiles. GET /numbers/{number_id}/profiles.

Input parameters:

- `number_id` (integer, required): Placetel number id.

### `placetel_list_routings` (~152 tokens)

List routings

List routing objects (what happens to an incoming call: forward, group, routing plan, IVR, queue, voicemail, API) with their settings and time settings. Filter by update time. GET /routings.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `updated_since` (string): Only routings updated at or after this date/time.
- `updated_until` (string): Only routings updated at or before this date/time.

### `placetel_get_routing` (~68 tokens)

Get routing

One routing object by its id or by the phone number it answers. GET /routings/{number_or_id}.

Input parameters:

- `number_or_id` (string, required): A routing id (e.g. 4711) or a phone number (e.g. 022112345678).

### `placetel_list_routing_plans` (~99 tokens)

List routing plans

List routing plans (time-based call distribution plans) with name, description, ring duration and object counts. GET /routing_plans.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.

### `placetel_list_groups` (~124 tokens)

List groups

List ring groups (ring_all, hunt, monitoring) with members. Filter by name, description or type. GET /groups.

Input parameters:

- `description` (string): Filter by description.
- `name` (string): Filter by name.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `type` (string): Group type.

### `placetel_list_sites` (~84 tokens)

List sites

List company sites (locations) with address and prefix. GET /sites.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.

### `placetel_list_faxes` (~150 tokens)

List faxes

In- and outbound faxes with from/to number, status, pages, duration, type and the file URL. Filter by direction or number. GET /faxes.

Input parameters:

- `from_number` (string): Only faxes from this number.
- `order` (string): Sort order.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `to_number` (string): Only faxes to this number.
- `type` (string): Direction filter.

### `placetel_get_fax` (~59 tokens)

Get fax

One fax by id: numbers, status, status info, pages, retries, report and file URL. GET /faxes/{id}.

Input parameters:

- `fax_id` (integer, required): Placetel fax id (from placetel_list_faxes).

### `placetel_list_call_center_queues` (~102 tokens)

List call center queues

List call-center queues with name, ring time, loops and prompts. Use the ids to filter call-center calls. GET /call_center_queues.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.

### `placetel_list_call_center_agents` (~94 tokens)

List call center agents

List call-center agents with name, status, extension, priority and last call time. GET /call_center_agents.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.

### `placetel_list_call_center_calls` (~149 tokens)

List call center calls

Call-center calls of one day with queue, agent, from/to, answer status, start/end time and time spent in queue. date is required; narrow to queues with queue_ids. GET /call_center_calls.

Input parameters:

- `date` (string, required): Day to list, yyyy-mm-dd.
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-100 (default 25). Not every endpoint honours it; keep paging until a page is empty.
- `queue_ids` (array): Only these queue ids (see placetel_list_call_center_queues).

### `placetel_create_contact` (~224 tokens)

Create contact

WRITE: create a contact in the shared Placetel phone book. Give at least a name, company or number. Nothing is sent to the contact. POST /contacts.

Input parameters:

- `address` (string): Private address.
- `address_work` (string): Work address.
- `blocked` (boolean): true = calls from this contact are blocked.
- `company` (string): Company.
- `email` (string): Private email address.
- `email_work` (string): Work email address.
- `fax` (string): Private fax number.
- `fax_work` (string): Work fax number.
- `first_name` (string): First name.
- `last_name` (string): Last name.
- `mobile` (string): Private mobile number.
- `mobile_work` (string): Work mobile number.
- `phone` (string): Private phone number.
- `phone_work` (string): Work phone number.
- `speeddial` (string): Speed-dial code.
- `tags` (array): Tags (replaces the existing tags on update; [] clears them).

### `placetel_update_contact` (~244 tokens)

Update contact

WRITE: update the given fields of a contact (omitted fields stay; an empty string clears a text field). tags replaces the whole tag list; blocked=true blocks the caller. PUT /contacts/{id}.

Input parameters:

- `address` (string): Private address.
- `address_work` (string): Work address.
- `blocked` (boolean): true = calls from this contact are blocked.
- `company` (string): Company.
- `contact_id` (integer, required): Placetel contact id.
- `email` (string): Private email address.
- `email_work` (string): Work email address.
- `fax` (string): Private fax number.
- `fax_work` (string): Work fax number.
- `first_name` (string): First name.
- `last_name` (string): Last name.
- `mobile` (string): Private mobile number.
- `mobile_work` (string): Work mobile number.
- `phone` (string): Private phone number.
- `phone_work` (string): Work phone number.
- `speeddial` (string): Speed-dial code.
- `tags` (array): Tags (replaces the existing tags on update; [] clears them).

### `placetel_activate_number_profile` (~90 tokens)

Activate number profile

WRITE: switch the active routing profile of a phone number (for example to Holiday or Night). This changes LIVE call handling for that number immediately: callers are routed differently. Find ids with placetel_list_number_profiles. PUT /numbers/{number_id}/profiles.

Input parameters:

- `number_id` (integer, required): Placetel number id.
- `profile_id` (integer, required): Id of the profile to activate.

### `placetel_initiate_call` (~135 tokens)

Initiate call

WRITE: start a real phone call. Placetel rings the given SIP user's phone first and, once answered, dials the target number. This places an actual call and call charges apply. Do not use without the user's explicit request. POST /calls.

Input parameters:

- `from_name` (string): Name shown for the call.
- `sipuid` (string, required): SIP user that is rung first, e.g. 7771234567@fpbx.de (the sipuid from placetel_list_sip_users).
- `target` (string, required): Number to call, e.g. +4922112345678.

### `placetel_send_sms` (~91 tokens)

Send SMS

WRITE: send a real SMS to a phone number from the Placetel account. The recipient receives it immediately and SMS charges apply; it cannot be recalled. Do not use without the user's explicit request and exact text. POST /sms.

Input parameters:

- `message` (string, required): The exact message text (sent unchanged).
- `recipient` (string, required): Recipient number, e.g. +4915112345678.

## Diagnostics

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

## Score history

- 2026-10-25: 62

## Common questions

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

Placetel MCP by usefulapi is listed in the public MCP registry as io.usefulapi/placetel. Read Placetel calls, recordings, numbers and routing; edit contacts, start calls, send SMS. This page covers its hosted endpoint (https://placetel.usefulapi.io/mcp).

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

Placetel MCP by usefulapi scores 62 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 Placetel MCP by usefulapi server expose?

Placetel MCP by usefulapi exposes 28 tools: placetel_get_account, placetel_list_users, placetel_list_sip_users, placetel_get_sip_user, placetel_list_calls, and 23 more. Their descriptions and schemas cost roughly 3,535 tokens of context every time the server is loaded.

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

Yes. Placetel MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

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

Placetel MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 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://placetel.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/placetel/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-placetel/placetel.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-placetel/placetel.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-placetel/placetel
