Dialyne

com.dialynePublished by dialyne.comOfficial publisherv1.0.0Updated Nov 7, 2026

Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowCommunication & Collaboration

Overview

AI-generated overview

Lets an assistant place real outbound phone calls to French (+33) numbers via a voice agent and get back a written outcome, summary and transcript.

What you can do
  • Place, schedule, cancel and list calls to French numbers with a plain-language task, and read status, outcome and summary
  • Answer a question the voice agent asks mid-call, request extra time, or hand the live call over to the user's phone
  • Schedule a callback and place the same call to a list of numbers on Pro and Enterprise plans, then read batch progress
  • Check remaining prepaid call minutes and account limits
  • Read or change how the voice agent introduces itself, including name, tone and opening line
When to use it
Useful when the user wants an errand done by phone in France without calling themselves: booking a table, moving an appointment, asking a business a question, or following up on an order or claim. Also suited to checking results of earlier calls or running a small batch of identical calls on a paid plan.
Requirements
Remote MCP endpoint; no local install. Sign-in through OAuth 2.1 on first tool call, or an API key sent as an Authorization Bearer header for clients without a browser. A funded Dialyne account with prepaid or subscription minutes; calls are billed per minute.
Before you install
Calls are real and cost money per minute of conversation, with prepaid credits expiring after 30 days. The assistant can place, transfer, reschedule and cancel calls on the user's behalf, so confirm each request first. Codes or card details passed to the call are stored masked but still leave the user's control; prefer transferring the call for payments. Transcripts are kept up to 90 days. Marketing, prospecting and mass calling are refused.

Installation

In SourceWeft

  1. Open Dialyne in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.dialyne%2Fdialyne/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "dialyne": {
      "type": "http",
      "url": "https://mcp.dialyne.com/mcp"
    }
  }
}

README

[Dialyne]

Dialyne — real phone calls in France for AI agents

Website: https://dialyne.com · MCP server: https://mcp.dialyne.com/mcp · API: https://api.dialyne.com · Dashboard: https://app.dialyne.com · Docs: https://dialyne.com/docs/ · For agents: https://dialyne.com/llms.txt

Dialyne gives an AI agent a phone line in France. The agent describes a task in plain language ("book a table for 4 on Friday around 8 pm for Martin"); Dialyne's voice agent calls the French number, introduces itself as the user's virtual assistant (an AI), navigates the phone menu, waits on hold, talks to the person, and returns a written result: outcome, summary and transcript.

This repository is the public showcase: MCP connection files for each client, an agent skill, examples and docs. The Dialyne service itself is hosted and closed-source; nothing here runs a server.

  • 🇫🇷 French numbers (+33): landlines and mobiles. Calls are placed whenever the user asks, day or night; automatic retries (busy line, no answer) stay within 08:00–21:00 in the callee's time zone; a callback time the callee asks for is kept as they said it.
  • 🤖 By default the agent says "Hello, this is Léa, 's virtual assistant" and answers yes if asked whether it is an AI (EU AI Act art. 50). The user can customise how it introduces itself; it never denies being an AI. No marketing, prospecting or mass calling.
  • ☎️ Phone menus (voice and keypad), hold time, questions to your agent during the call, hand-over to a human.
  • 📝 Text only: no audio is recorded or returned. Transcripts are deleted automatically (after 90 days, or sooner if the user chooses).

Connect

The server uses OAuth 2.1 (dynamic client registration, PKCE). Paste the URL; your client opens a Dialyne sign-in page the first time a tool is called. Agents without a browser can send an API key as Authorization: Bearer <key> instead. Never put a key in a URL.

ClientHow
Claude (claude.ai, Desktop)Settings › Connectors › Add custom connector › https://mcp.dialyne.com/mcp
ChatGPTSettings › Connectors (developer mode) › Create › URL above, authentication OAuth
Claude Codeclaude mcp add --transport http dialyne https://mcp.dialyne.com/mcp — or install this repo as a plugin (.claude-plugin/)
CursorInstall this repo as a plugin (.cursor-plugin/), or ~/.cursor/mcp.json: {"mcpServers": {"dialyne": {"url": "https://mcp.dialyne.com/mcp"}}}
VS Code / Copilot.vscode/mcp.json: {"servers": {"dialyne": {"type": "http", "url": "https://mcp.dialyne.com/mcp"}}}
Codex / ChatGPT pluginsplugin.json + mcp.json at the root (Agent Plugins format) and .codex-plugin/plugin.json
Gemini CLIgemini extensions install https://github.com/dialyne/dialyne-mcp (gemini-extension.json)
OpenAI Responses API{"type": "mcp", "server_label": "dialyne", "server_url": "https://mcp.dialyne.com/mcp", "headers": {"Authorization": "Bearer <key>"}, "require_approval": "always"}
Hermes, OpenClawSkill in skills/dialyne-phone-call/ + API key in DIALYNE_API_KEY
n8nexamples/n8n/ (HTTP Request nodes), or the MCP Client tool with the URL above

Step-by-step instructions an agent can follow on its own: llms-install.md.

Tools

ToolWhat it does
place_phone_callCalls a French number with a task in plain language; returns a call_id immediately (the call runs 1–10 min in the background). Optional language, scheduled_at, voice, idempotency_key.
get_callStatus and written result; waits up to 50 s for news (answered, on hold, question, transfer, end). Repeat until done=true.
answer_call_questionRelays the user's answer when the voice agent asks something during the call (within ~45 s).
hold_call_questionAsks the callee for one more minute when the user needs time to answer a pending question (only if the callee agrees; never more than 2 minutes per question).
transfer_call_to_userHands the live call over to the user's phone.
schedule_callbackCalls the same number again later with the same task.
cancel_callCancels a scheduled call or hangs up a live one.
list_callsPast and scheduled calls, searchable.
get_account_balanceMinutes of conversation left and account limits.
configure_agent_identityReads or changes how the voice agent introduces itself (name, tone, opening line, answer to "who is calling?", AI mention in the opening). Name and tone change freely; any other change needs the user's explicit, logged acceptance of the warning it returns.
place_batch_callsPlaces the same call to a list of French numbers (Pro and Enterprise plans, 100 numbers at most); returns a batch_id and one call_id per number. Never for marketing or mass calling.
get_batch_callsProgress and results of a batch: counts by status, successes, refused numbers, and each call's outcome and summary.

Typical flow: place_phone_call → get_call(wait_seconds=25) until done → answer_call_question if a pending_question appears → report outcome and summary. Full reference: https://dialyne.com/docs/mcp

Example

User: Call Le Lys on 05 34 00 11 22 and book a table for 4 on Friday around 8 pm, name Martin. I prefer indoors.

Agent: place_phone_call(phone_number="+33534001122", task="Book a table for 4 on Friday around 8 pm for Martin. 7:30-9 pm is fine. Indoors preferred.") → get_call(...) → the restaurant asks "terrace or indoors?" → answer_call_question(call_id, "Indoors, please") → get_call(...)

Agent: Done: table for 4 on Friday at 7:45 pm, indoors, under Martin. 20:00 was full.

Code examples: curl, Python, TypeScript, n8n.

Rules built into the service

  • Recommended identity by default: the agent introduces itself as the user's virtual assistant and says it is an AI whenever asked. The user can change this with configure_agent_identity; a change away from the recommended settings only applies after the user accepts a warning, which is logged, and the user is then responsible for those settings. One rule never changes: the agent never denies being an AI. Agents must show the warning to their user and never accept it on their behalf.
  • Calls are placed whenever the user asks, day or night; automatic retries (busy line, no answer) stay within 08:00–21:00 in the callee's time zone; a callback time the callee asks for is kept as they said it.
  • Only what French law forbids is refused: marketing, prospecting, surveys, mass calling (French Consumer Code art. L223-1 forbids phone canvassing of consumers without consent), threats, harassment and impersonation.
  • Codes and card details: the user decides. Write a value as [secret: value] and Dialyne masks it in what it stores (card numbers are masked automatically); for a payment, prefer handing the call to the user.
  • At most 5 calls per number per day across all customers; a person who asks not to be called again is blocked for every customer.
  • Emergency, short and premium-rate numbers are refused.

Details: https://dialyne.com/legal/cgu

Pricing

Same call quality on every plan; busy and unanswered calls are free; billed per second; hold time 0.04 € per minute.

  • Starter: 0.20 € per minute of conversation, prepaid top-ups from 10 € (50 minutes). Credits are valid 30 days after each top-up. 5 test minutes after sign-up.
  • Pro: 99 € per month + 0.17 € per minute, team and higher limits.
  • Enterprise: on quote — [email protected].

Your phone number is free while your account is active. Details: https://dialyne.com/tarifs/

Repository layout

assets/                          Dialyne logo (light, dark) and app iconserver.json                      MCP Registry entry (com.dialyne/dialyne, remote only)plugin.json, mcp.json            Agent Plugins manifest (Cursor, Codex/ChatGPT).claude-plugin/plugin.json       Claude Code plugin (+ .mcp.json).cursor-plugin/plugin.json       Cursor plugin.codex-plugin/plugin.json        Codex / ChatGPT presentation overlaygemini-extension.json            Gemini CLI extensionskills/dialyne-phone-call/      Agent skill (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, OpenClaw)llms-install.md                  Install steps for AI agentsexamples/                        curl, Python, TypeScript, n8n

Support and security

License

MIT for everything in this repository (see LICENSE). The Dialyne service is subject to its own terms of service.

Source: README.md at commit ce47ab1

Tools

12

place_phone_call

Place a phone call in France

Place a real outbound phone call to a number in France (+33) and get back a written result: a voice agent carries out the task you describe (book a table, move an appointment, ask a business a question, follow up on an order or a claim). Compliance: the service's rules require the voice agent to disclose it is an AI assistant at the start of every call (EU AI Act art. 50), and calls are placed only on the user's explicit request. The only exception is a callee the user confirms already knows an AI will call (ai_disclosure; not recommended). The voice agent opens by saying it is an AI assistant calling on behalf of the user; if the callee objects to the call, it ends the call politely and the number is never called again by this service. It navigates phone menus (voice or keypad), waits on hold and talks with the person who answers. No audio is returned or recorded: you get a written outcome, a summary and, on request, the transcript (text kept 90 days at most). When to use: the user explicitly asked you to phone a specific French business or person, and the number and the task are confirmed. Number found by you: if the number did not come from the user (you found it by web search, in memory or in a document), STOP before calling: show the number to the user, ask "Shall I call this number?" and call only after they confirm in a later message. Missing details: do not quiz the user for every detail before calling. Give the facts you already have in task; if the callee asks for something the user did not give, get_call shows it as pending_question and you ask the user then. When not to use: marketing, sales prospecting, surveys, debt collection, mass or repeated calling (unlawful in France and refused); impersonating another person, an authority or a bank; threats or harassment; asking the callee for their codes, passwords, card details or a money transfer, gift cards or crypto (claiming money owed to the user is fine); dictating a payment code (3-

Parameterstaskrequiredvoicelanguagephone_numberrequiredscheduled_atai_disclosureoutside_hoursvoice_settingsidempotency_keycallee_informed_confirmation

get_call

Get call status and result

Get the status and written result of a call placed with place_phone_call (outcome, summary, pending question, transcript on request), optionally waiting for news. Compliance: read-only; transcripts are text only (no audio is recorded) and are kept 90 days at most. Use it to follow a call in progress (repeat until done=true), to see whether the voice agent is waiting for the user's answer (pending_question), and to read the final outcome and summary to report to the user. Read-only: it never places, changes or ends a call. Returns: status (scheduled, in_progress, retry_scheduled, completed, cancelled, failed), done, outcome (success, failed, voicemail, no_answer, busy, callback_requested, callee_objected), summary, pending_question {question_id, text}, new events since after_event_id, last_event_id and next_step. A call that is busy or not answered is retried automatically (status retry_scheduled), except on lines where every call needs a new request from the user (event callback_suggested: ask the user). callee_objected means the person asked not to be called again: the transcript was deleted and the number can no longer be called; tell the user.

Parameterscall_idrequiredwait_secondsafter_event_idresponse_format

answer_call_question

Answer the voice agent's question during a call

Send the user's answer to a question the voice agent asked during a live call (shown by get_call as pending_question) and get confirmation that it was relayed. Compliance: the same rules as the task apply; an answer that threatens, impersonates someone, asks the callee for codes, card details or a transfer, or dictates a payment code or a full card with its security code is refused before anything is sent. Use it only when get_call shows a pending_question. The answer is spoken to the person on the line, so it must be the user's real information or decision: if you do not know it, ask the user and relay their words; never invent personal details. If the callee asks for a code (SMS, verification, delivery), a password or a card detail, ask the user: they decide whether to give it (write it as [secret: value] so it is masked in stored transcripts) or to decline, or to take the call themselves with transfer_call_to_user. During a live call, answer quickly: after about 45 seconds without an answer (pending_question.seconds_left) the voice agent offers the callee a callback; if you need to ask your human, call hold_call_question first (one extra minute, only if the callee agrees). If the call then ended with the question still open and a callback is scheduled (get_call shows status retry_scheduled with a pending_question), the answer is still accepted: it is kept and given at the start of the callback (sending the same answer again is harmless). Any other ended call fails with wrong_call_state. Then continue with get_call.

Parametersanswerrequiredcall_idrequiredquestion_id

transfer_call_to_user

Transfer a live call to the user

Transfer a live call to the user's own phone so they can talk to the callee themselves, and get the transfer request confirmed. Compliance: the voice agent tells the callee it is handing over to the person it calls for; recommended whenever a payment or sensitive data is needed. The voice agent tells the callee it is passing the call over, rings user_phone_number, connects both sides without hanging up, then leaves the call. Use it only when the user asked to take over the conversation (or accepted when you offered) and can pick up their phone now. Fails if the call is not in progress. Follow progress with get_call: transfer events go requested → ringing → connected (or failed, in which case the voice agent stays on the line).

Parameterscall_idrequireduser_phone_numberrequired

schedule_callback

Schedule a callback of a finished call

Schedule a new attempt of a finished call (same number, same task) at the time the user chose and get the scheduled time back, for instance when the callee said 'call back tomorrow after 3 pm'. Compliance: only on the user's request; limited to 3 callbacks within 14 days, at the exact time the user chose (no calling-hours window); turned off on lines where every call needs a new request from the user (error callbacks_disabled). Use it only after get_call shows done=true. To call another number or do a different task, use place_phone_call instead. The time is kept as given (at least 2 minutes from now); at most 14 days ahead and 3 callbacks per call. A real call will be placed at that time and paid like any call; cancel it with cancel_call.

Parameterscall_idrequiredcallback_atrequired

cancel_call

Cancel a scheduled or live call

Cancel a call that is scheduled or in progress (including a scheduled callback or automatic retry) and get the cancelled status back. Compliance: stops any further attempt to that number for this call; nothing is charged beyond the time already spoken. A live call is hung up immediately; only the time already spoken is paid and the reserved credit is released. A scheduled call will not be placed. Use it when the user changes their mind or the task is no longer needed. Cannot be undone. Cancelling an already cancelled call has no further effect; a call that already ended cannot be cancelled.

Parameterscall_idrequired

list_calls

List calls

List this account's calls, newest first, and get for each one its call_id, phone number, status, outcome, task and one-line summary. Compliance: read-only, limited to this account's own calls; transcripts older than 90 days are deleted. Use it to find a call_id, to check whether a number was already called recently before placing a new call, or to answer questions such as 'what happened with my call to the garage?'. Read-only. For the full result and transcript of one call, use get_call with response_format='detailed'.

Parameterslimitqueryoutcome

get_account_balance

Get remaining call time

Read the remaining call time on this account and get the minutes of conversation left on the prepaid credit (subscription minutes included, with their expiry date) and the account limits (simultaneous calls, calls per day). Compliance: read-only; no payment can be made from here (only the account owner adds credit, in the web app). Use it before a long call (e.g. one with a long hold) or after place_phone_call failed for insufficient credit. Read-only. Credit cannot be added from here: if it is low, tell the user to add credit from their account in the web app.

Takes no parameters.

hold_call_question

Ask the callee for one more minute to answer the agent's question

Get one more minute to answer the voice agent's pending question: the request is passed to the voice agent, which asks the callee. Compliance: the extension happens ONLY if the callee agrees; the voice agent asks them politely and never makes anyone wait more than 2 minutes in total for one question. Use it as soon as get_call shows a pending_question you cannot answer yourself (you need to ask your human): call hold_call_question first, then ask your human. Once per question (+60 seconds). The voice agent asks the callee "can you hold for another minute, or shall I call you back?": if they agree, pending_question.seconds_left grows by 60; if they would rather be called back, the agent arranges a callback and your answer, sent later with answer_call_question, is given at the callback. Follow it with get_call (event question_hold: accepted, callee_prefers_callback or not_possible). Not for a finished call, nor when you already know the answer (just answer).

Parameterscall_idrequiredquestion_id

place_batch_calls

Place the same call to a list of numbers in France

Place the same call to a list of numbers in France (Pro and Enterprise plans) and get back a batch_id with one call_id per number. Compliance: the AI disclosure is always made; marketing, prospecting, surveys and mass calling of people who did not expect it are unlawful and refused; anti-harassment limits per number apply. Use it when the user explicitly asks to make the same kind of call to several numbers they provide (e.g. confirm tomorrow's appointments with their own customers, ask several garages for a quote). The account's limits apply: calls run a few at a time (simultaneous-call limit; the rest wait their turn), the batch is refused if it exceeds the calls left for the last 24 hours, automatic retries and calls still waiting 15 minutes after the requested time stay within 08:00-21:00 callee's time. Each call is paid like a single call. Returns immediately; follow it with get_batch_calls, or each call with get_call. Starter accounts get plan_feature_required: tell the user.

Parametersnametaskrequiredvoicelanguagescheduled_atphone_numbersrequired

get_batch_calls

Get the progress of a batch of calls

Get the progress and results of a batch of calls: counts by status, successes, refused numbers and, for each call, its call_id, status, outcome and summary. Compliance: read-only, limited to this account's own batches. Use it after place_batch_calls to report results to the user. Read-only. For one call's transcript, use get_call with response_format='detailed'. To stop a single call, use cancel_call.

Parametersbatch_idrequired

configure_agent_identity

Read or change how the voice agent introduces itself

Read or change how the voice agent introduces itself on the user's calls: name, tone, opening line, answer to "who is calling?", introduction and the AI mention in the opening. Compliance: the recommended settings (default) say "Hello, this is Léa, <user>'s virtual assistant. I'm calling about…" and answer yes when asked if it is an AI (EU AI Act art. 50); the agent never denies being an AI, whatever the settings. Call it with no argument to read the current identity, a preview of what the agent will say, and the warning. Name and tone can be changed freely. Any other change is a deviation from the recommended settings: the first attempt returns the warning (error responsibility_acceptance_required) and changes nothing. Show the warning text to the user word for word; only if the user explicitly accepts, call again with the same changes plus accept_responsibility=true and warning_version. The acceptance is logged with a timestamp and the user becomes responsible for those settings. Refused whatever the acceptance: texts claiming the agent is human, or presenting it as police, government or a bank. When to use: the user asks to rename the agent, change how it introduces itself or its tone. When not to use: a one-off greeting for a single call (put it in place_phone_call's task instead). Side effects: changes the settings for every new call of the account (calls already scheduled keep their identity). Idempotent.

Parameterstonefirst_nameintroductionopening_linewarning_versionreset_to_recommendedaccept_responsibilityai_mention_in_openingwho_is_calling_answer

Version history

1
  1. v1.0.0LatestNov 7, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts