Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

voicehook

REMOTE · VOICEHOOK.AI

Talk with your agents. A voice call in the browser that your agent can start or join.

Available components

66 Trust /100

Last scanned (20 hours ago)

Scores higher than 55% of remote servers

Reachable. Last reached 23 Oct 2026.

Category Communication

Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability56
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 7125 tokens (~339/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
  • Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 89% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 +1
    • Tool “helper_show” rewrote its description, which is the text the model reads security
    • Tool “show” rewrote its description, which is the text the model reads security
    • “helper_show” added an optional parameter “data” cosmetic
    • “helper_show” added an optional parameter “name” cosmetic
    • “show” added an optional parameter “data” cosmetic
    • “show” added an optional parameter “name” cosmetic
    • “show” reworded the description of “file_id” cosmetic
  • 22 Oct 26 0
    • Tool “create_call” rewrote its description, which is the text the model reads security
    • Tool “decide” rewrote its description, which is the text the model reads security
    • Tool “decisions” rewrote its description, which is the text the model reads security
    • Tool “helper_decide” rewrote its description, which is the text the model reads security
    • Tool “helper_next” rewrote its description, which is the text the model reads security
    • Tool “join” rewrote its description, which is the text the model reads security
    • Tool “next” rewrote its description, which is the text the model reads security
    • Tool “show” rewrote its description, which is the text the model reads security
    • Schema quality: 6000 → 6900 ▼ functional
    • New tool “helper_show” functional
    • “show” added an optional parameter “file_id” cosmetic
    • “decide” reworded the description of “context” cosmetic
    • “helper_decide” reworded the description of “context” cosmetic
    • Tool “decisions” changed its title: List open decisions → List decisions and helper boards cosmetic
  • 21 Oct 26 0
    • Tool “activity” rewrote its description, which is the text the model reads security
    • Tool “decide” rewrote its description, which is the text the model reads security
    • Tool “helper_activity” rewrote its description, which is the text the model reads security
    • Tool “helper_decide” rewrote its description, which is the text the model reads security
    • Tool “helper_next” rewrote its description, which is the text the model reads security
    • Tool “helper_status” rewrote its description, which is the text the model reads security
    • Tool “join” rewrote its description, which is the text the model reads security
    • Tool “next” rewrote its description, which is the text the model reads security
    • Tool “status” rewrote its description, which is the text the model reads security
    • Schema quality: 267 → 300 ▼ functional
    • New tool “decisions” functional
    • “activity” added an optional parameter “context” cosmetic
    • “activity” added an optional parameter “faq” cosmetic
    • “decide” added an optional parameter “faq” cosmetic
    • “decide” added an optional parameter “no_question” cosmetic
    • “helper_activity” added an optional parameter “context” cosmetic
    • “helper_activity” added an optional parameter “faq” cosmetic
    • “helper_decide” added an optional parameter “faq” cosmetic
    • “helper_decide” added an optional parameter “no_question” cosmetic
    • “helper_status” added an optional parameter “meta” cosmetic
    • “status” added an optional parameter “meta” cosmetic
    • “create_call” reworded the description of “solo” cosmetic
  • 20 Oct 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “helper_decide”, which the server declares destructive security
    • New tool “helper_status”, which the server declares destructive security
    • Tool “create_call” rewrote its description, which is the text the model reads security
    • Tool “decide” rewrote its description, which is the text the model reads security
    • Tool “join” rewrote its description, which is the text the model reads security
    • Tool “next” rewrote its description, which is the text the model reads security
    • Tool “show” rewrote its description, which is the text the model reads security
    • Tool “status” rewrote its description, which is the text the model reads security
    • Schema quality: 2710 → 5077 ▼ functional
    • New tool “add_vocab” functional
    • New tool “call_me” functional
    • New tool “helper_activity” functional
    • New tool “helper_credential” functional
    • New tool “helper_next” functional
    • New tool “notify_me” functional
    • New tool “ui” functional
    • “decide” added an optional parameter “context” cosmetic
    • “join” added an optional parameter “status_every” cosmetic
    • “show” added an optional parameter “large” cosmetic
    • “show” reworded the description of “image” cosmetic
  • 19 Oct 26 0
    • Tool “join” rewrote its description, which is the text the model reads security
    • “create_call” added an optional parameter “solo” cosmetic
    • “join” added an optional parameter “voice” cosmetic
  • 18 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 17 Oct 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Probed https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=voicehook.ai CN=YE2,O=Let's Encrypt,C=US 8 Oct 2026 6 Jan 2027 ECDSA 256 ECDSA-SHA384 570e7133887c2efcfad1dac9821b3fbeabb
SANs: voicehook.ai
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of voicehook.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
voicehook.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin
permissions-policy microphone=(self), display-capture=(self), camera=(), geolocation=(), payment=(), usb=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry Verified 200
http (plaintext) http://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry HTTPS enforced 308 https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry
MCP tools · 21 exposed · ~6,848 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
activity ~143

Append one line (3-8 words) to the activity feed on the call page, shown as a timestamped line. Never spoken. context and faq: hidden background of this line for the voicebot.

NameTypeReqDescription
context––Hidden background of this entry for the voicebot (what, why, current state), max 2000 chars, never shown on the page.
faq––Up to 3 likely follow-up questions with prepared answers [{q, a}] (max 200 chars each), hidden, for the voicebot.
sessionstringyesThe `session` value returned by join.
textstringyes3-8 words.

Structured output declared, but exposes no named fields.

No examples provided.

add_vocab ~217

Teach the call's speech recognition words it keeps mishearing (product names, people, jargon). Adds to the vocabulary of the account that pays for this call (add only: never deletes, never returns the account's list; the person manages it on their account page). terms: words to recognize; fixes: {wrong, right} = a known mishearing and the correct word (right is added to the terms too). Max 20 entries per call of this tool, 100 per call, 50 characters each. Corrections apply right away, the word list from the next sentence or the next call. 409: guest call without an account. Returns added {terms, fixes}, total, call_left, reloaded.

NameTypeReqDescription
fixes––Known mishearings: [{"wrong": "Erzähli", "right": "Trello"}].
sessionstringyesThe `session` value returned by join.
terms––Words or short phrases to recognize, e.g. ["Trello"].

Structured output declared, but exposes no named fields.

No examples provided.

call_me ~189

Phone the human who owns this call on their own confirmed phone number, e.g. when a long task is done, you are stuck, or you need a decision and they are not on the call page. You never pass a number. Their account rules decide (opt-in, allowed reasons, quiet hours, calls per day, budget, credit); a refusal returns {status: refused, why}. Otherwise returns {status: answered|no_answer|busy|failed|insufficient, phone_call_id, billed_eur} after the call. reason: done | blocked | decision. message: max 200 characters, said when they pick up.

NameTypeReqDescription
message––Optional: what to tell them when they pick up, max 200 chars.
reasonstringyesWhy you call: done, blocked or decision.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

create_call ~407

Start a new voicehook.ai voice call. `lang` = the language of the person being called (de or en, default de). Returns `human_url` (the link for the person; whoever opens it starts the call, on their own free allowance or credit), `share_text` (a ready message with human_url and the hint that the link needs a normal browser, because an app's built-in browser blocks the microphone), `operator_invite_url` (the agent's own link for `join`), `room` and `expires_in` (seconds until an unopened link expires, 30 min); `local_cli_hint` only for a local client with a shell (Claude Code, Cursor, VS Code and similar). join with operator_invite_url waits for the person (up to 200 s in Claude clients, else 50 s) and returns waiting_for_human with `next_action` until they open human_url; it can be repeated until the link expires (410), also from a background job over the HTTPS bridge. Errors: 429 = too many new calls right now. Hard rule: after create_call, show share_text to your user as text first, then call join at once and repeat it until it returns `session` (or start a background job that joins over the HTTPS bridge and wakes you); never end your turn before that. Then keep calling next in a loop.

NameTypeReqDescription
langstring–Language of the person you are calling (default de).
modestring––
name––Optional label for your own reference (not shown in the call; your name in the call comes from join).
solo––true or left out (default) = solo call: the voicebot speaks as each joining agent, every agent in its own voice and in first person; more agents may join (e.g. a second model next to you). false = th…

Structured output declared, but exposes no named fields.

No examples provided.

decide ~588

Put a question for the person on the call's Decision Board (shown as #number with buttons; the person can also answer by voice, also freely). Meant for every question the person decides: yes/no, A/B, an approval, picking a value. A question only spoken via say leaves no button and no decision event. Without options it is a yes/no question (buttons Yes/No); options: 2 to 3, max 40 characters each, recommend = index of the recommended option. question: max 160 characters. Longer or more: 422, never cut. Returns id and number. The answer arrives later as a `next` event {type: decision, id, number, verdict: yes|no|option|other|unclear, option?, text? (their own answer, or for unclear the request to ask it again more simply), by}. context: the background the person opens with the arrow next to the question on the card and Delta uses to explain it, only what the reader needs, nothing internal, one short line per part (Was / Warum / Bei Ja / Bei Nein, or What / Why / If yes / If no; lines starting with '- ' show as bullet points); faq: the 3 likely follow-up questions with prepared answers, shown below it as questions and answers. Without context and faq the card shows no arrow; without context and 3 faq the result carries `warnings` (no error). Change an open one with id plus new fields, remove it with id and delete true. no_question = id of a question_check event, alone: confirms that line was no question to the person. Decisions marked auto (detected automatically) are answered only by a human; changing or deleting them gives 403.

NameTypeReqDescription
context––Background (max 1500 chars) the person opens with the arrow next to the question; Delta explains from it. Only reader-relevant, one line per part: Was / Warum / Bei Ja / Bei Nein.
deleteboolean–true = remove the decision `id`.
faq––Up to 3 likely follow-up questions with prepared answers [{q, a}] (max 200 chars each), hidden, for the voicebot. Without context and 3 faq the result carries `warnings`.
id––Id of an open decision to change or delete.
no_question––Id of a question_check event: confirms the line was no question to the person (pass it alone).
options––Optional: 2 to 3 answer options, max 40 characters each; leave out for a yes/no question.
question––The question, max 160 chars (required when creating).
recommend––Index (0-based) of your recommended option.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

decisions ~231

Lists every OPEN decision on the call's Decision Board, from all agents in the call and their helper sessions (relay, MCP, bridge), oldest number first. Returns count and open: [{id, number, question, options, recommend, agent, from (asking label, with the helper name), sender? (helper session), state, at (created, epoch), age_s, mine (asked by this session or one of its helpers), context? (background, also shown on the card behind the arrow)}]. Also recent: the last decided ones, newest first (same fields plus verdict, option, text, by, decided_age_s; auto = put on the board by the server), and boards: every helper session's status board in the room [{from, name, doing, open, done, state?, age_s (since its last update), meta? (context/faq, shortened)}], newest first: read-only overview for the main agent. Errors: 503 = voicebot not (yet) in the call.

NameTypeReqDescription
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

helper_activity ~202

For a helper session that is not in the call: appends one line (3-8 words) to the call's activity feed as 'Helper <label>: <helper_name>: <text>'. Never spoken verbatim. context and faq: hidden background of this line for the voicebot. Returns the line.

NameTypeReqDescription
context––Hidden background of this entry for the voicebot (what, why, current state), max 2000 chars, never shown on the page.
credentialstringyesHelper credential `token` from helper_credential or POST /api/helper/credential.
faq––Up to 3 likely follow-up questions with prepared answers [{q, a}] (max 200 chars each), hidden, for the voicebot.
helper_namestringyesName of this helper session, 1-40 chars (shown on the call page as `from`).
textstringyes3-8 words.

Structured output declared, but exposes no named fields.

No examples provided.

helper_credential ~179

For the agent in the call (`session`): returns a helper credential `token` (with `url` and `expires_in`) that lets other sessions working for the same person add their own status board, decisions and activity lines to this call without joining (no voice, no chip). `label` = name of the helper's machine, max 22 chars, shown as 'Helper <label>: <helper_name>'. rotate true makes every earlier helper credential of this call invalid. The credential works only for the helper_* tools and /api/activity/relay*, never for say or join, and ends with the call.

NameTypeReqDescription
labelstringyesMachine label of the helper, max 22 chars.
rotateboolean–true = invalidate earlier helper credentials.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

helper_decide ~394

For a helper session that is not in the call: puts its own question on the Decision Board, shown with the sender 'Helper <label>: <helper_name>'. Same fields and limits as decide (question max 160 chars, 2-3 options max 40 chars each, recommend = index, context = background shown behind the arrow next to the question and used by Delta, faq = 3 follow-up questions with prepared answers; without them the result carries warnings). Change or delete only own questions (same credential and from), else 403. Returns id and number; the answer comes from helper_next, never from the main agent's next.

NameTypeReqDescription
context––Background (max 1500 chars) the person opens with the arrow next to the question; Delta explains from it. Only reader-relevant, one line per part: Was / Warum / Bei Ja / Bei Nein.
credentialstringyesHelper credential `token` from helper_credential or POST /api/helper/credential.
deleteboolean–true = remove the decision `id`.
faq––Up to 3 likely follow-up questions with prepared answers [{q, a}] (max 200 chars each), hidden, for the voicebot. Without context and 3 faq the result carries `warnings`.
helper_namestringyesName of this helper session, 1-40 chars (shown on the call page as `from`).
id––Id of an own open decision to change or delete.
no_question––Id of a question_check event from helper_next: confirms the line was no question to the person (pass it alone).
options––Optional: 2 to 3 answer options, max 40 characters each.
question––The question, max 160 chars (required when creating).
recommend––Index (0-based) of the recommended option.

Structured output declared, but exposes no named fields.

No examples provided.

helper_next ~228

For a helper session that is not in the call: returns the answers to its own questions (same credential and helper_name) as events [{type: decision, id, number, verdict: yes|no|option|other, option?, text?, by}], plus question_check events (a status or activity line of this helper reads like a question to the person: id, quote, wait_s, text; answered by helper_decide with the question or with no_question = id), plus user_turn events (the person addressed this helper by name in the call: text as transcribed, to, ts), waiting up to `timeout` seconds (0-25) when none is there. At most 50 kept per helper, gone when the call ends.

NameTypeReqDescription
credentialstringyesHelper credential `token` from helper_credential or POST /api/helper/credential.
helper_namestringyesName of this helper session, 1-40 chars (shown on the call page as `from`).
timeoutnumber–Seconds to wait, 0-25.

Structured output declared, but exposes no named fields.

No examples provided.

helper_show ~348

For a helper session that is not in the call: puts a card on the person's call page (never spoken), shown with the sender 'Helper <label>: <helper_name>'. kind: text (default), code, link (exactly one http(s) URL) or image (`image` = SVG text or base64 PNG/JPEG/WebP, never a URL). Same checks and limits as show: text 4000 chars, title 80, SVG 300 KB, raster 1024 KB, at most 10 images a minute. An image returns ok only after a call page loaded it (shown = number of pages); otherwise an error says why (nobody in the call, image did not load). Files: kind pdf, csv or md with `data` = base64 and `name` (pdf max 10 MB, csv/md max 2 MB); the server shows and confirms them itself.

NameTypeReqDescription
credentialstringyesHelper credential `token` from helper_credential or POST /api/helper/credential.
data––kind pdf, csv or md: the file as base64.
helper_namestringyesName of this helper session, 1-40 chars (shown on the call page as `from`).
image––kind image: SVG text or base64 PNG/JPEG/WebP (SVG max 300 KB, raster max 1 MB).
kind–––
name––kind pdf, csv or md: file name.
text––Card text, max 4000 chars (code: the code; link: the URL).
title––Optional title, max 80 chars.

Structured output declared, but exposes no named fields.

No examples provided.

helper_status ~310

For a helper session that is not in the call: sets its own status board on the call page, shown as 'Helper <label>: <helper_name>' below the main agent; the main agent's board stays as it is. Same limits as status (doing max 400 chars, open / done max 10 items). meta: Per entry hidden background for the voicebot, never shown on the page: context (max 2000 chars) and faq (up to 3 follow-up questions with prepared answers). Without context and 3 faq on an entry the result carries `warnings` (no error). Empty doing, open and done removes the helper's board. Returns ok and, when context or faq is missing on an entry, warnings.

NameTypeReqDescription
credentialstringyesHelper credential `token` from helper_credential or POST /api/helper/credential.
doingstring–Current step + ETA, max 400 chars.
done––Done items, max 10.
helper_namestringyesName of this helper session, 1-40 chars (shown on the call page as `from`).
meta––Per entry hidden background for the voicebot, never shown on the page: context (max 2000 chars) and faq (up to 3 follow-up questions with prepared answers). Without context and 3 faq on an entry the…
open––Open items, max 10.

Structured output declared, but exposes no named fields.

No examples provided.

join ~787

Connect to a voicehook.ai voice call as the agent behind its voicebot. invite_url: the full invite link including ?invite= (from the person or from create_call). label: the text on the agent's chip in the call, max 22 characters (longer is rejected). model: the model id the agent runs on (internal, not shown). greet (default true): the voicebot speaks a short greeting with the label in the call language right after the join (or when the person is back, if they are out). Returns `session` (the handle for every other tool, valid until the call ends, after 10 min without next or say, or after leave), `room`, `lang` (call language), `idle_timeout_s`, `peers`, `humans_present` (people in the call; 0 plus `human_away` = the person is out right now), `solo` (true = solo call: the voicebot speaks as you, in your voice, first person; other agents may join with their own voices) and `context` (lang, mode, functions, skill_url, status_every = seconds between the voicebot's status summaries). With a link from create_call, join waits for the person (up to 200 s in Claude clients, else 50 s, with progress every 10 s) and then returns status waiting_for_human (not an error, with share_text and `next_action`) while the link is still unopened. `local_cli_hint` only for a local client with a shell (Claude Code, Cursor, VS Code and similar). Errors: 403 invalid invite, 409 no person in the room, 410 link expired or call over, 429 too many joins, 503 server restarting (the call stays valid). MCP and bridge connect one agent to the call; activity lines are only what that agent writes. For several agents or sessions on one machine in one call, the voicehook-agent CLI (pro tool) feeds the live activity log, status and decisions of all local sessions into the call automatically; MCP and bridge run on the server and cannot see the user's local sessions. Hard rule: after create_call, show share_text to your user as text first, then call join at once and repeat it until it returns `session`…

NameTypeReqDescription
greetboolean–true (default) = the voicebot greets for you right after the join, in the call language: 'Hallo, hier ist <label>. Worum geht es?' / 'Hi, this is <label>. What can I do for you?'.
invite_urlstringyesInvite link https://voicehook.ai/r/<room>?invite=... (max 2048 chars)
label––Text on your chip in the call, max 22 characters: your session or chat name, else your model name. Too long is rejected.
modelstring–Exact model id you run on (internal, not shown).
name––Old name of `label` (still accepted).
quietboolean–Accepted for compatibility with the HTTPS bridge; no effect here.
status_every––Optional seconds between the voicebot's own status summaries of your board, activity and decisions (default 60; 0 = only when the person asks; 10..59 or whole minutes up to 3600). The person can chan…
voice––Optional Chirp3-HD voice for the agent in normal mode, short name (e.g. Puck) or full name; invalid values are ignored. In a one-agent call the voicebot speaks in this voice.

Structured output declared, but exposes no named fields.

No examples provided.

leave ~61

Leave the call (optionally speaking `say` first, e.g. a short goodbye). The session handle is invalid afterwards.

NameTypeReqDescription
say––Optional goodbye, max 4000 chars.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

next ~752

Wait (up to `timeout` seconds, max 50) for the next event in the call and return it. Event `type`: user (`text` = what the person said; after a pause also `missed` = earlier turns, oldest first, and `away_s`), revise (queued says were replaced; reason user_stop = the person said stop; reason stale + stale:true = your says waited over 60 s unspoken and were dropped (items = seq + text): do not repeat them, if still relevant say ONE short current summary), status_request (the person asked what the agent is doing), decision (answer to a decide question: id, number, verdict yes|no|option|other, option, text, by), helper_decision (the human answered a helper session's question: from, label, id, number, question, verdict, option, text, by; a routing hint, never speak or answer it: send it to that session so it continues), question_check (a status or activity line of this agent reads like a question to the person: id, quote, wait_s, text; answered by decide with the question, or by decide with no_question = id; without either, after wait_s the server puts it on the Decision Board itself, marked as detected automatically, answered only by a human), timeout (nothing happened; reconnect true = server restart), human_left / human_rejoined (the person dropped out / is back; greeted true = the join greeting was just spoken), voicebot_left / voicebot_back (the voicebot dropped out, e.g. a server update; a new one usually joins within ~20 s, says are not heard until then / it is back after `seconds`, say works again), operator (another agent addressed this one: addressed_to_you), data (another agent sent data with send_data: from, kind, payload or url + file_id; never spoken), context (the call language changed, new context), superseded (a newer next call replaced this one), ended (the call is over; detail live_budget, wallet_empty, free_limit or review_budget = budget used up (quota), unspoken says were dropped). Every answer has `humans_present`; user events and `operators_said…

NameTypeReqDescription
sessionstringyesThe `session` value returned by join.
timeoutnumber–Seconds to wait, max 50.

Structured output declared, but exposes no named fields.

No examples provided.

notify_me ~204

Reach the human who owns this call when they are not on the call page: an SMS to their own confirmed number with a single-use link back into this call (valid 10 min, opens only logged in or with the PIN from the SMS); if they do not open it within 2 minutes, a phone call follows. Prefer this over call_me. Their account rules decide (opt-in, reasons, quiet hours, per day, budget, credit); a refusal returns {status: refused, why}. Otherwise {status: sms_sent|sms_failed|insufficient, phone_call_id, billed_eur, link_valid_s, fallback_call_in_s}. reason: done | blocked | decision. message: max 120 characters, in the SMS.

NameTypeReqDescription
message––Optional short text for the SMS, max 120 chars.
reasonstringyesWhy: done, blocked or decision.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

say ~130

The voicebot speaks `text` aloud in the call (verbatim in normal mode; in a live room the voice rephrases it and the answer has verbatim false, mode live_paraphrase). mode: append (default, queued after earlier says), overwrite (replaces this agent's says that have not started yet), revise (like overwrite, and next then returns a revise event). Returns ok and seq.

NameTypeReqDescription
modestring––
sessionstringyesThe `session` value returned by join.
textstringyesWhat to say, max 4000 chars.

Structured output declared, but exposes no named fields.

No examples provided.

send_data ~385

Send JSON, text or a file to other agents in this call (silent data channel: never spoken, never shown to the human, never to the voicebot; the human only sees one activity line 'Data to B: name (size)'). to: the other agent's label (as on its chip), its identity, or "*" for all other agents; unknown -> 404 with the labels in the call. kind json: payload any JSON; text: payload a string; file: payload = base64 of the file plus name and mime, or file_id of a file uploaded with the REST endpoint POST /api/bridge/upload (files over about 11 KB, up to 10 MB). The whole packet is max 15000 bytes inline (413 otherwise; base64 makes a file 4/3 larger). Receivers get it in next as type data {from, from_identity, kind, id, name?, mime?, payload | url + file_id, size?}; url is a path, served at https://voicehook.ai<url> with the header Authorization: Bearer <session>. Returns id, to (labels), size.

NameTypeReqDescription
file_id––kind file: id from POST /api/bridge/upload.
id––Optional own message id (1-64 of [A-Za-z0-9._-]); else the server makes one.
kindstringyes–
mime––Optional media type, e.g. application/json.
name––Optional name, e.g. result.json.
payload––json: any JSON value; text: a string; file: base64 of the file. Leave out with file_id.
sessionstringyesThe `session` value returned by join.
tostringyesLabel or identity of the receiver, or "*" for all other agents.

Structured output declared, but exposes no named fields.

No examples provided.

show ~518

Put a card on the person's call page (never spoken): text, code, a link or an image. kind: text (default), code (monospace with copy button), link (exactly one http(s) URL, shown as a tappable link), image (`image` = SVG text or base64 PNG/JPEG/WebP, line breaks, a data:image/...;base64, prefix and missing padding are accepted; or `file_id` of an image uploaded with the REST endpoint POST /api/bridge/upload, which keeps large base64 out of the tool call). A new card appears as a small preview top left; panel cards opens the cards view, board, log or decisions open those panels, none closes them. large: true opens the cards view big in the middle with this card at full size (diagrams, swimlanes; implies panel cards). SVG may draw anything (no scripts, no foreignObject, no external references). Files (reports, tables): kind pdf (preview with page turning and download), csv (table preview of the first rows and download) or md (Markdown, rendered safely, and download) with `data` = the file as base64 and `name` = file name (e.g. report.pdf), or `file_id` from POST /api/bridge/upload. Limits: text 4000 chars, title 80, SVG 300 KB, raster 1024 KB, pdf 10 MB, csv and md 2 MB (UTF-8).

NameTypeReqDescription
data––kind pdf, csv or md: the file as base64 (pdf max 10 MB, csv/md max 2 MB UTF-8).
file_id––kind image, pdf, csv or md: id from POST /api/bridge/upload (same call, same limits and checks); instead of image or data.
image––kind image: SVG text or base64 PNG/JPEG/WebP (SVG max 300 KB, raster max 1 MB).
kind–––
large––Open the cards view big in the middle with this card at full size.
name––kind pdf, csv or md: file name shown on the card and used for the download.
panel–––
sessionstringyesThe `session` value returned by join.
text––Card text, max 4000 chars (code: the code; link: the URL).
title––Optional title, max 80 chars.

Structured output declared, but exposes no named fields.

No examples provided.

status ~373

Replace the agent's status board on the call page with this one (never spoken; the voicebot answers the person's questions about progress from it). Progress only: questions for the person belong on the Decision Board (decide). doing: current step and ETA (max 400 chars). open / done: max 10 items each, 200 chars per item. faq: up to 6 question/answer pairs the voicebot can answer directly. meta: Per entry hidden background for the voicebot, never shown on the page: context (max 2000 chars) and faq (up to 3 follow-up questions with prepared answers). Without context and 3 faq on an entry the result carries `warnings` (no error). emoji (optional): An emoji shown on the agent's chip in the call, from the listed set. Empty string removes it, left out keeps it. Whole board max 2000 chars. Returns ok, humans_present and, when context or faq is missing on an entry, warnings.

NameTypeReqDescription
doingstring–Current step + ETA, max 400 chars.
done––Done items, max 10.
emoji––An emoji shown on the agent's chip in the call, from the listed set. "" removes it.
faq––Max 6 pairs [{"q": "question", "a": "short answer"}].
meta––Per entry hidden background for the voicebot, never shown on the page: context (max 2000 chars) and faq (up to 3 follow-up questions with prepared answers). Without context and 3 faq on an entry the…
open––Open items, max 10.
sessionstringyesThe `session` value returned by join.

Structured output declared, but exposes no named fields.

No examples provided.

ui ~202

Change the person's call page right away, like their own clicks: cmd window (win log=activity, dec=decisions, board=status board, wrap=transcript, cards; state open, close, min, medium, large, max), cmd layout (preset halves, quarters, thirds, bigmid, bar), cmd move (win + slot l, m, r, b, tl, tr, bl, br, main, side; optional preset), cmd focus (project voicehook, salesengine, kunden, sonstiges or all: only that project's sections stay open in activity, status and decisions). Never spoken. Only when the person asks for it or it clearly helps (e.g. open decisions after asking one).

NameTypeReqDescription
cmdstringyes–
preset–––
project–––
sessionstringyesThe `session` value returned by join.
slot–––
state–––
win–––

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the voicehook MCP server?

voicehook is a hosted endpoint at https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry, 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.

remote · voicehook.ai

# add to Claude Code
claude mcp add --transport http voicehook-ai-voicehook 'https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry'
Common questions

What is the voicehook MCP server?

voicehook is an MCP server listed in the public MCP registry as io.github.voicehook-ai/voicehook. Talk with your agents. A voice call in the browser that your agent can start or join. This page covers its hosted endpoint (https://voicehook.ai/mcp?utm_source=mcpregistry&utm_campaign=d11-registry).

Is the voicehook MCP server safe to use?

voicehook scores 66 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 voicehook MCP server expose?

voicehook exposes 21 tools: create_call, join, next, say, status, and 16 more. Their descriptions and schemas cost roughly 6,848 tokens of context every time the server is loaded.

Does the voicehook MCP server require authentication?

No. We connected to voicehook without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the voicehook MCP server still maintained?

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