# Famulor (remote · mcp.famulor.io)

AI voice agents: assistants, calls, campaigns, leads, knowledge bases, WhatsApp, SMS & SIP trunks.

- Trust score: 79/100 (medium)
- Change this week: +10
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.famulor.io`: 79/100 (this document), [markdown](https://verifymcp.io/servers/io-famulor-famulor-mcp/mcp.md), [page](https://verifymcp.io/servers/io-famulor-famulor-mcp/mcp)
- npm · `famulor-mcp`: 67/100, [markdown](https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp.md), [page](https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp)

## Channel facts

- Endpoint: `https://mcp.famulor.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.3.1`

## 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-08-03.

- **Endpoint Security**: 94/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 is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - 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**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 5685 tokens (~74/item across 76 items; 76 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 80/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 29% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http io-famulor-famulor-mcp https://mcp.famulor.io/mcp
```

### Codex

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

### opencode

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

### OpenClaw

```bash
openclaw mcp add io-famulor-famulor-mcp --url https://mcp.famulor.io/mcp --transport streamable-http
```

### Hermes

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

### Other

```json
{
  "mcpServers": {
    "io-famulor-famulor-mcp": {
      "type": "http",
      "url": "https://mcp.famulor.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-08-03 (score 79, +1)

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

### 2026-08-01 (score 78, +1)

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

### 2026-07-31 (score 77, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 72, +1)

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

### 2026-07-29 (score 71, +1)

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

### 2026-07-28 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes. Other categories moved too: Tool Coverage rose 1.

### 2026-07-27 (score 69, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 69)

First indexed and scored.

## MCP tools (76)

### `get_me` (~21 tokens)

Get the authenticated Famulor user profile, including total balance.

Output parameters:

- `email` (string)
- `name` (string)
- `total_balance` (number)

### `get_assistants` (~49 tokens)

List all AI assistants on the Famulor account (paginated). Returns the assistant configurations including their fixed variable names.

Input parameters:

- `page` (integer)
- `per_page` (integer)

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `get_outbound_assistants` (~19 tokens)

List all outbound-capable assistants.

Output parameters:

- `result` (array)

### `get_phone_numbers` (~33 tokens)

List phone numbers eligible to be attached to an assistant (filter by inbound/outbound).

Input parameters:

- `type` (string)

Output parameters:

- `result` (array)

### `get_models` (~28 tokens)

List available LLM / multimodal / dualplex model IDs.

Input parameters:

- `type` (string)

Output parameters:

- `result` (array)

### `get_voices` (~36 tokens)

List voices compatible with a given engine mode and optional language.

Input parameters:

- `language_id` (integer)
- `mode` (string)

Output parameters:

- `result` (array)

### `get_languages` (~14 tokens)

List all supported assistant languages.

Output parameters:

- `result` (array)

### `get_synthesizer_providers` (~23 tokens)

List custom TTS providers selectable on an assistant.

Output parameters:

- `result` (array)

### `get_transcriber_providers` (~22 tokens)

List custom STT providers selectable on a pipeline assistant.

Output parameters:

- `result` (array)

### `create_assistant` (~713 tokens)

Create a new AI assistant. Required: name, voice_id, language_id, type, mode, timezone, initial_message, system_prompt, and either llm_model_id (pipeline) or multimodal_model_id (multimodal/dualplex). For multimodal/dualplex, knowledgebase_mode must be "function_call" when a knowledgebase is attached.

Input parameters:

- `allow_interruptions` (boolean)
- `ambient_sound` (string)
- `ambient_sound_volume` (number)
- `chat_llm_fallback_id` (integer)
- `conversation_ended_retrigger` (boolean)
- `conversation_ended_webhook_url` (string)
- `conversation_inactivity_timeout` (integer)
- `enable_noise_cancellation` (boolean)
- `end_call_on_voicemail` (boolean)
- `endpoint_sensitivity` (number)
- `endpoint_type` (string)
- `filler_config` (object)
- `fillers` (boolean)
- `folder_id` (integer|null): Folder to place the assistant in (one folder per assistant). See list_folders. Send null to remove.
- `include_recording_in_webhook` (boolean)
- `initial_message` (string, required): First message spoken at call start (max 200 chars)
- `interrupt_sensitivity` (number)
- `is_webhook_active` (boolean)
- `knowledgebase_id` (integer)
- `knowledgebase_mode` (string)
- `label_ids` (array): Label IDs to tag the assistant with (an assistant can carry multiple labels). See list_labels.
- `language_id` (integer, required): Primary language ID from get_languages
- `llm_model_id` (integer): Required for mode=pipeline
- `llm_temperature` (number)
- `max_duration` (integer)
- `max_initial_silence_duration` (integer)
- `max_silence_duration` (integer)
- `min_interrupt_words` (integer)
- `mode` (string, required)
- `multimodal_model_id` (integer): Required for mode=multimodal/dualplex
- `name` (string, required): Display name of the assistant (max 255 chars)
- `phone_number_id` (integer|null)
- `post_call_evaluation` (boolean)
- `post_call_schema` (array)
- `record` (boolean)
- `reengagement_interval` (integer)
- `reengagement_prompt` (string)
- `ringing_time` (integer)
- `secondary_language_ids` (array): Additional language IDs the assistant can speak
- `send_webhook_only_on_completed` (boolean)
- `speech_speed` (number)
- `synthesizer_provider_id` (integer)
- `system_prompt` (string, required): System prompt defining behavior
- `timezone` (string, required): IANA timezone, e.g. "Europe/Berlin"
- `tool_ids` (array)
- `tools` (array)
- `transcriber_provider_id` (integer)
- `tts_emotion_enabled` (boolean)
- `turn_detection_threshold` (number)
- `type` (string, required): Assistant call direction
- `variables` (object)
- `voice_id` (integer, required): Voice ID from get_voices
- `voice_mail_message` (string)
- `voice_similarity` (number)
- `voice_stability` (number)
- `wait_for_customer` (boolean)
- `webhook_url` (string|null)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_assistant` (~666 tokens)

Update an existing assistant (partial). Only the fields you send are changed.

Input parameters:

- `allow_interruptions` (boolean)
- `ambient_sound` (string)
- `ambient_sound_volume` (number)
- `chat_llm_fallback_id` (integer)
- `conversation_ended_retrigger` (boolean)
- `conversation_ended_webhook_url` (string)
- `conversation_inactivity_timeout` (integer)
- `enable_noise_cancellation` (boolean)
- `end_call_on_voicemail` (boolean)
- `endpoint_sensitivity` (number)
- `endpoint_type` (string)
- `filler_config` (object)
- `fillers` (boolean)
- `folder_id` (integer|null): Folder to place the assistant in (one folder per assistant). See list_folders. Send null to remove.
- `id` (integer, required): Assistant ID to update
- `include_recording_in_webhook` (boolean)
- `initial_message` (string): First message spoken at call start (max 200 chars)
- `interrupt_sensitivity` (number)
- `is_webhook_active` (boolean)
- `knowledgebase_id` (integer)
- `knowledgebase_mode` (string)
- `label_ids` (array): Label IDs to tag the assistant with (an assistant can carry multiple labels). See list_labels.
- `language_id` (integer): Primary language ID from get_languages
- `llm_model_id` (integer): Required for mode=pipeline
- `llm_temperature` (number)
- `max_duration` (integer)
- `max_initial_silence_duration` (integer)
- `max_silence_duration` (integer)
- `min_interrupt_words` (integer)
- `mode` (string)
- `multimodal_model_id` (integer): Required for mode=multimodal/dualplex
- `name` (string): Display name of the assistant (max 255 chars)
- `phone_number_id` (integer|null)
- `post_call_evaluation` (boolean)
- `post_call_schema` (array)
- `record` (boolean)
- `reengagement_interval` (integer)
- `reengagement_prompt` (string)
- `ringing_time` (integer)
- `secondary_language_ids` (array): Additional language IDs the assistant can speak
- `send_webhook_only_on_completed` (boolean)
- `speech_speed` (number)
- `synthesizer_provider_id` (integer)
- `system_prompt` (string): System prompt defining behavior
- `timezone` (string): IANA timezone, e.g. "Europe/Berlin"
- `tool_ids` (array)
- `tools` (array)
- `transcriber_provider_id` (integer)
- `tts_emotion_enabled` (boolean)
- `turn_detection_threshold` (number)
- `type` (string): Assistant call direction
- `variables` (object)
- `voice_id` (integer): Voice ID from get_voices
- `voice_mail_message` (string)
- `voice_similarity` (number)
- `voice_stability` (number)
- `wait_for_customer` (boolean)
- `webhook_url` (string|null)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_assistant` (~26 tokens)

Permanently delete an assistant. Cannot be undone.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `enable_assistant_inbound_webhook` (~45 tokens)

Enable inbound-call webhook notifications for an assistant.

Input parameters:

- `assistant_id` (integer, required)
- `webhook_url` (string, required): HTTPS URL that receives the webhook payload

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `disable_assistant_inbound_webhook` (~27 tokens)

Disable inbound-call webhook notifications.

Input parameters:

- `assistant_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `enable_assistant_conversation_ended_webhook` (~42 tokens)

Enable conversation-ended (chat) webhook for an assistant.

Input parameters:

- `assistant_id` (integer, required)
- `webhook_url` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `disable_assistant_conversation_ended_webhook` (~31 tokens)

Disable conversation-ended (chat) webhook.

Input parameters:

- `assistant_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `disable_assistant_webhook` (~28 tokens)

Disable the post-call webhook for an assistant.

Input parameters:

- `assistant_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `make_call` (~54 tokens)

Initiate an outbound AI phone call with a configured assistant.

Input parameters:

- `assistant_id` (string, required): Assistant UUID or ID
- `phone_number` (string, required): E.164-formatted destination number
- `variables` (object)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `get_call` (~23 tokens)

Retrieve a single call by ID.

Input parameters:

- `call_id` (string, required)

### `list_calls` (~40 tokens)

List calls with pagination and optional assistant filter.

Input parameters:

- `assistant_id` (string)
- `page` (integer)
- `per_page` (integer)

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `delete_call` (~25 tokens)

Delete a call record. Cannot be undone.

Input parameters:

- `call_id` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_conversations` (~75 tokens)

List conversations across your assistants with cursor pagination and filters.

Input parameters:

- `assistant_id` (integer)
- `cursor` (string)
- `customer_phone` (string)
- `external_identifier` (string)
- `per_page` (integer)
- `type` (string)
- `whatsapp_sender_phone` (string)

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `get_conversation` (~28 tokens)

Get the full message history of a chat conversation by UUID.

Input parameters:

- `uuid` (string, required)

### `create_conversation` (~48 tokens)

Start a new chat session with an assistant (widget=paid, test=free).

Input parameters:

- `assistant_id` (string, required)
- `type` (string)
- `variables` (object)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `send_message` (~45 tokens)

Send a user message in an existing chat conversation and get the assistant reply.

Input parameters:

- `message` (string, required): User message (max 2000 chars)
- `uuid` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `enable_conversation_ai` (~29 tokens)

Re-enable AI replies for a conversation after a human takeover.

Input parameters:

- `uuid` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `disable_conversation_ai` (~30 tokens)

Disable AI replies for a conversation so a human can take over.

Input parameters:

- `uuid` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_campaigns` (~32 tokens)

List all campaigns you own (call, WhatsApp, SMS), including channel, schedule windows, and fallback config.

Output parameters:

- `result` (array)

### `get_campaign` (~31 tokens)

Get a single campaign by ID. Same fields as list_campaigns.

Input parameters:

- `id` (integer, required): Campaign ID

### `create_campaign` (~515 tokens)

Create a draft call, WhatsApp, or SMS campaign. Starts in draft — add leads, then start with update_campaign_status. For channel=call require assistant_id; for whatsapp require whatsapp_sender_id + whatsapp_template_id; for sms require sms_from_phone_number_id + sms_body.

Input parameters:

- `allowed_days` (array)
- `allowed_hours_end_time` (string): Legacy single-window end HH:MM
- `allowed_hours_start_time` (string): Legacy single-window start HH:MM if schedule_windows omitted
- `assistant_id` (integer): Required for channel=call. OUTBOUND assistant you own.
- `channel` (string): Defaults to call
- `fallback_channel` (string): Optional call→text follow-up after max call retries
- `fallback_sms_body` (string)
- `fallback_sms_from_phone_number_id` (integer)
- `fallback_variable_mapping` (object): WhatsApp template placeholder → lead variable for fallback
- `fallback_whatsapp_sender_id` (integer)
- `fallback_whatsapp_template_id` (integer)
- `goal_completion_variable` (string)
- `mark_complete_when_no_leads` (boolean)
- `max_calls_in_parallel` (integer): Concurrent calls (max 10)
- `max_retries` (integer): 1–5
- `messages_per_minute` (integer): Per-campaign send rate 1–10 (WhatsApp/SMS)
- `name` (string, required): Campaign name (max 255 chars)
- `phone_number_ids` (array): Outbound from-number IDs
- `retry_interval` (integer): Minutes between retries (10–4320)
- `retry_on_goal_incomplete` (boolean)
- `retry_on_voicemail` (boolean)
- `schedule_windows` (array): Daily windows [{start:"HH:MM", end:"HH:MM"}]. Overnight when end < start.
- `scheduled_start_at` (string): Optional ISO datetime for auto-start
- `sms_body` (string): Required for channel=sms. Max 1600 chars. Supports {{variable}}.
- `sms_from_phone_number_id` (integer): Required for channel=sms. SMS-capable number.
- `text_variable_mapping` (object): Template placeholder → lead variable
- `timezone` (string): IANA timezone, e.g. Europe/Berlin
- `whatsapp_sender_id` (integer): Required for channel=whatsapp
- `whatsapp_template_id` (integer): Required for channel=whatsapp. Approved template on that sender.

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_campaign_status` (~47 tokens)

Start or stop a call, WhatsApp, or SMS campaign. Starting validates channel config, schedule, and balance.

Input parameters:

- `action` (string, required)
- `campaign_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_campaign` (~29 tokens)

Delete a campaign. Running campaigns are stopped first. Cannot be undone.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_leads` (~29 tokens)

List leads with pagination.

Input parameters:

- `page` (integer)
- `per_page` (integer)

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `create_lead` (~108 tokens)

Create a new lead in a campaign. IMPORTANT: variable names come from the associated assistant configuration and are fixed; only their values can be supplied here.

Input parameters:

- `allow_dupplicate` (boolean)
- `campaign_id` (integer, required)
- `phone_number` (string, required): E.164 format, e.g. +491234567890
- `secondary_contacts` (array)
- `variables`: Either an object (key/value pairs matching assistant variables) or an array of such objects.

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_lead` (~57 tokens)

Update a lead. Variables are merged with existing ones.

Input parameters:

- `campaign_id` (integer)
- `id` (integer, required)
- `phone_number` (string)
- `status` (string)
- `variables` (object)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_lead` (~20 tokens)

Delete a lead.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `send_sms` (~71 tokens)

Send an SMS from one of your Famulor phone numbers (must be SMS-capable). Costs are deducted from your balance.

Input parameters:

- `body` (string, required): Message body (max 300 chars)
- `from` (integer, required): Phone number ID
- `to` (string, required): Recipient in E.164 format

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_mid_call_tools` (~25 tokens)

List mid-call tools (HTTP integrations callable by an assistant during a call).

Output parameters:

- `result` (array)

### `get_mid_call_tool` (~26 tokens)

Get a single mid-call tool by ID.

Input parameters:

- `id` (integer, required)

### `create_mid_call_tool` (~100 tokens)

Create a new mid-call HTTP tool.

Input parameters:

- `description` (string, required): When the AI should use it (max 255 chars)
- `endpoint` (string, required): HTTPS URL to call
- `headers` (array)
- `method` (string, required)
- `name` (string, required): Tool identifier: lowercase letters and underscores, starts with a letter
- `schema` (array)
- `timeout` (integer): Seconds, 1-30

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_mid_call_tool` (~81 tokens)

Update a mid-call tool. headers/schema fully replace existing values when provided.

Input parameters:

- `description` (string)
- `endpoint` (string)
- `headers` (array)
- `id` (integer, required)
- `method` (string)
- `name` (string)
- `schema` (array)
- `timeout` (integer)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_mid_call_tool` (~23 tokens)

Delete a mid-call tool.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_knowledgebases` (~18 tokens)

List all knowledge bases on the account.

Output parameters:

- `data` (array)

### `get_knowledgebase` (~24 tokens)

Get a knowledge base by ID.

Input parameters:

- `id` (integer, required)

### `create_knowledgebase` (~40 tokens)

Create a new knowledge base.

Input parameters:

- `description` (string): Optional, max 255 chars
- `name` (string, required): Max 255 chars

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_knowledgebase` (~39 tokens)

Rename or describe an existing knowledge base.

Input parameters:

- `description` (string)
- `id` (integer, required)
- `name` (string)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_knowledgebase` (~23 tokens)

Delete a knowledge base permanently.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_documents` (~24 tokens)

List documents in a knowledge base.

Input parameters:

- `knowledgebase_id` (integer, required)

Output parameters:

- `data` (array)

### `get_document` (~32 tokens)

Get a single document by ID.

Input parameters:

- `document_id` (integer, required)
- `knowledgebase_id` (integer, required)

### `create_document` (~127 tokens)

Add a website (URL-scraped) document to a knowledge base. File uploads (pdf/txt/docx) must use the Famulor dashboard or a direct multipart/form-data call.

Input parameters:

- `description` (string): Optional, max 255 chars
- `knowledgebase_id` (integer, required)
- `links` (array)
- `name` (string, required): Max 255 chars
- `relative_links_limit` (integer)
- `type` (string, required): Only website is supported via MCP
- `url` (string): Main URL to scrape (required if links is not set)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_document` (~51 tokens)

Update a document name or description. Content cannot be changed.

Input parameters:

- `description` (string)
- `document_id` (integer, required)
- `knowledgebase_id` (integer, required)
- `name` (string)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_document` (~33 tokens)

Delete a document from a knowledge base.

Input parameters:

- `document_id` (integer, required)
- `knowledgebase_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_all_phone_numbers` (~26 tokens)

List every phone number on the account (regardless of SMS or subscription status).

Output parameters:

- `data` (array)

### `search_phone_numbers` (~63 tokens)

Search for purchasable phone numbers via the Famulor provider.

Input parameters:

- `contains` (string): Digits the number should contain (numeric only, max 10)
- `country_code` (string): ISO 3166-1 alpha-2, default DE

Output parameters:

- `result` (array)

### `purchase_phone_number` (~30 tokens)

Purchase a phone number returned by search_phone_numbers (monthly subscription).

Input parameters:

- `phone_number` (string, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_phone_number` (~86 tokens)

Update a phone number you own. Currently sets the nickname — a short human-readable label (max 50 chars) shown next to the number. Send null/empty to clear it. Granted (shared) numbers cannot be updated.

Input parameters:

- `id` (integer, required): Phone number ID to update
- `nickname` (string|null): Short label, max 50 chars. null clears it.

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `release_phone_number` (~25 tokens)

Release (cancel) a purchased phone number.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_folders` (~67 tokens)

List assistant folders (paginated), each with its assistants_count. Folders group assistants, e.g. per customer or brand; an assistant belongs to at most one folder.

Input parameters:

- `page` (integer)
- `per_page` (integer): 1-100, default 15

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `create_folder` (~58 tokens)

Create a folder to group assistants. Assign assistants via the folder_id field on create_assistant / update_assistant.

Input parameters:

- `color` (string): Badge color
- `name` (string, required): Folder name (max 255 chars, unique per account)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_folder` (~66 tokens)

Rename a folder or change its color (partial — only sent fields change).

Input parameters:

- `color` (string|null): New badge color, or null to remove
- `id` (integer, required): Folder ID
- `name` (string): New name (max 255 chars, unique per account)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_folder` (~33 tokens)

Delete a folder. Assistants inside are NOT deleted — they just become uncategorized.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_labels` (~57 tokens)

List assistant labels (paginated), each with its assistants_count. Labels are tags; an assistant can carry multiple labels across folders.

Input parameters:

- `page` (integer)
- `per_page` (integer): 1-100, default 15

Output parameters:

- `current_page` (number)
- `data` (array)
- `from` (number|null)
- `last_page` (number)
- `next_page_url` (string|null)
- `per_page` (number)
- `prev_page_url` (string|null)
- `to` (number|null)
- `total` (number)

### `create_label` (~68 tokens)

Create a label to tag assistants (e.g. "inbound", "outbound"). Assign via the label_ids field on create_assistant / update_assistant.

Input parameters:

- `color` (string): Badge color
- `name` (string, required): Label name (max 255 chars, unique per account)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_label` (~66 tokens)

Rename a label or change its color (partial — only sent fields change).

Input parameters:

- `color` (string|null): New badge color, or null to remove
- `id` (integer, required): Label ID
- `name` (string): New name (max 255 chars, unique per account)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_label` (~37 tokens)

Delete a label. It is removed from all assistants it was assigned to — the assistants themselves are NOT affected.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `list_sip_trunks` (~19 tokens)

List all SIP trunks on the account.

Output parameters:

- `data` (array)

### `get_sip_trunk` (~25 tokens)

Get a SIP trunk by ID.

Input parameters:

- `id` (integer, required)

### `create_sip_trunk` (~150 tokens)

Provision a new SIP trunk (extension or DID number).

Input parameters:

- `allowed_inbound_ips` (array)
- `country_code` (string, required): ISO 3166-2, e.g. US/GB/DE
- `inbound_authorization_type` (string, required)
- `outbound_proxy` (boolean)
- `phone_number` (string, required): Extension (1-15 chars) or E.164 number
- `sip_address` (string, required): SIP server without port
- `sip_calling_format` (string, required)
- `sip_password` (string, required): Min 3 chars
- `sip_trunk_type` (string, required)
- `sip_username` (string, required): 3-128 chars

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `update_sip_trunk` (~103 tokens)

Update a SIP trunk (partial).

Input parameters:

- `allowed_inbound_ips` (array)
- `country_code` (string)
- `id` (integer, required)
- `inbound_authorization_type` (string)
- `outbound_proxy` (boolean)
- `phone_number` (string)
- `sip_address` (string)
- `sip_calling_format` (string)
- `sip_password` (string)
- `sip_username` (string)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `delete_sip_trunk` (~27 tokens)

Delete a SIP trunk by phone-number ID.

Input parameters:

- `id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `get_whatsapp_senders` (~40 tokens)

List WhatsApp Business senders. status defaults to "online" — pass "all" to see all.

Input parameters:

- `status` (string)

Output parameters:

- `data` (array)

### `get_whatsapp_templates` (~40 tokens)

List approved templates for a WhatsApp sender (status defaults to "approved").

Input parameters:

- `sender_id` (integer, required)
- `status` (string)

Output parameters:

- `data` (array)

### `get_whatsapp_session_status` (~41 tokens)

Check whether a 24h messaging window is open for a recipient.

Input parameters:

- `recipient_phone` (string, required)
- `sender_id` (integer, required)

### `send_whatsapp_template` (~70 tokens)

Send a WhatsApp template message (required when initiating or outside the 24h window).

Input parameters:

- `recipient_name` (string)
- `recipient_phone` (string, required): E.164
- `sender_id` (integer, required)
- `template_id` (integer, required)
- `variables` (object)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `send_whatsapp_freeform` (~64 tokens)

Send a freeform WhatsApp message. Requires an open 24h session (use get_whatsapp_session_status to check).

Input parameters:

- `message` (string, required): Max 4096 chars
- `recipient_phone` (string, required)
- `sender_id` (integer, required)

Output parameters:

- `data` (object|array|null)
- `message` (string)

### `generate_ai_reply` (~79 tokens)

Generate a context-aware AI reply for a customer message. The system keeps conversation state per customer_identifier (e.g. phone, email, CRM ID).

Input parameters:

- `assistant_id` (integer, required)
- `customer_identifier` (string, required): Stable per-customer ID; max 255 chars
- `message` (string, required)
- `variables` (object)

Output parameters:

- `data` (object|array|null)
- `message` (string)

## Diagnostics

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

## Score history

- 2026-08-03: 79
- 2026-08-02: 78
- 2026-08-01: 78
- 2026-07-31: 77
- 2026-07-30: 72
- 2026-07-29: 71
- 2026-07-28: 70
- 2026-07-27: 69
- 2026-07-26: 69

## Links

- Remote endpoint: https://mcp.famulor.io/mcp
- Repository: https://github.com/bekservice/Famulor-MCP
- Website: https://www.famulor.io/
- Changelog RSS feed: https://verifymcp.io/servers/io-famulor-famulor-mcp/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-famulor-famulor-mcp/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-famulor-famulor-mcp/mcp
