# Famulor (npm · famulor-mcp)

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

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

## Components

- remote · `mcp.famulor.io`: 79/100, [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 (this document), [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

- Registry: `npm`
- Package: `famulor-mcp`
- Version: `0.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-04.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects hono 4.12.33, reached via @modelcontextprotocol/sdk > hono. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (122 of 124), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 52 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 5252 tokens (~70/item across 75 items; 75 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 79/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 25% 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 io-famulor-famulor-mcp -- npx -y famulor-mcp
```

### Codex

```bash
codex mcp add io-famulor-famulor-mcp -- npx -y famulor-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-famulor-famulor-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "famulor-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-famulor-famulor-mcp --command npx --arg -y --arg famulor-mcp
```

### Hermes

```yaml
mcp_servers:
  io-famulor-famulor-mcp:
    command: "npx"
    args: ["-y", "famulor-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "io-famulor-famulor-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "famulor-mcp"
      ]
    }
  }
}
```

## 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-04 (score 67, 0)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-03 (score 67, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 63, +22)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional regression] Maintenance: pass → unverified
- [functional regression] License: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-07-31 (score 41, −36)

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

### 2026-07-30 (score 77, +52)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional regression] Security disclosure: unverified → fail
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

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

- [functional regression] Security disclosure: fail → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-28 (score 24, −19)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 43)

First indexed and scored.

## MCP tools (75)

### `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` (~15 tokens)

List all outbound calling campaigns.

Output parameters:

- `result` (array)

### `create_campaign` (~167 tokens)

Create a new outbound campaign tied to an outbound-capable assistant.

Input parameters:

- `allowed_days` (array)
- `allowed_hours_end_time` (string): H:i, e.g. "17:00"
- `allowed_hours_start_time` (string): H:i, e.g. "09:00"
- `assistant_id` (integer, required)
- `goal_completion_variable` (string)
- `mark_complete_when_no_leads` (boolean)
- `max_calls_in_parallel` (integer)
- `max_retries` (integer)
- `name` (string, required): Campaign name (max 255 chars)
- `retry_interval` (integer)
- `retry_on_goal_incomplete` (boolean)
- `retry_on_voicemail` (boolean)
- `timezone` (string)

Output parameters:

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

### `update_campaign_status` (~30 tokens)

Start or stop a campaign.

Input parameters:

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

Output parameters:

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

### `delete_campaign` (~23 tokens)

Delete a campaign. 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: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp#diagnostics

## Score history

- 2026-08-04: 67
- 2026-08-03: 67
- 2026-08-02: 63
- 2026-08-01: 41
- 2026-07-31: 41
- 2026-07-30: 77
- 2026-07-29: 25
- 2026-07-28: 24
- 2026-07-27: 43

## Links

- npm package: https://www.npmjs.com/package/famulor-mcp
- Socket report: https://socket.dev/npm/package/famulor-mcp
- Repository: https://github.com/bekservice/Famulor-MCP
- Website: https://www.famulor.io/
- Changelog RSS feed: https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-famulor-famulor-mcp/famulor-mcp
