# Patch MCP (remote · www.patchmcp.com)

AI phone calls from your verified number, with answers, transcripts and recordings.

- Trust score: 81/100 (high trust)
- Change this week: +1
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `www.patchmcp.com`: 81/100 (this document), [markdown](https://verifymcp.io/servers/com-patchmcp-patch/www.md), [page](https://verifymcp.io/servers/com-patchmcp-patch/www)

## Channel facts

- Endpoint: `https://www.patchmcp.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 11/100
  - TLS not yet verified: we couldn't open a connection to check the certificate.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS not yet verified: we couldn't read the response headers to check for it.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but we couldn't connect to verify it.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the Patch MCP server?

Patch MCP is a hosted endpoint at https://www.patchmcp.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-patchmcp-patch 'https://www.patchmcp.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-patchmcp-patch": {
      "url": "https://www.patchmcp.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-patchmcp-patch": {
      "type": "http",
      "url": "https://www.patchmcp.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-patchmcp-patch]
url = "https://www.patchmcp.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-patchmcp-patch": {
      "type": "remote",
      "url": "https://www.patchmcp.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-patchmcp-patch --url 'https://www.patchmcp.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-patchmcp-patch:
    url: "https://www.patchmcp.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-patchmcp-patch": {
      "Transport": "http",
      "Url": "https://www.patchmcp.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-patchmcp-patch -t streamable-http -u 'https://www.patchmcp.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-patchmcp-patch": {
      "type": "http",
      "url": "https://www.patchmcp.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 81, 0)

- [security regression] Endpoint reachability: reachable → unreachable
- [security regression] Stability: fail → unverified
- [security regression] HSTS header: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] TLS certificate: pass → unverified
- [security regression] Transport: pass → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Schema quality: Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.

### 2026-11-04 (score 81, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “list_voices” rewrote its description, which is the text the model reads
- [security] Tool “place_call” rewrote its description, which is the text the model reads
- [security] Tool “update_account” rewrote its description, which is the text the model reads

### 2026-11-03 (score 80, +1)

- [security regression] A breaking change shipped without a version bump: still 0.4.0
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “search_phone_numbers” rewrote its description, which is the text the model reads
- [security] Tool “update_phone_number” rewrote its description, which is the text the model reads
- [functional regression] “search_phone_numbers” added a required parameter “reuse_only”, so existing callers break
- [cosmetic] “place_call” reworded the description of “timezone”
- [cosmetic] “place_call” made “timezone” optional
- [cosmetic] “search_phone_numbers” made “area_code” optional

### 2026-11-02 (score 79, −1)

- [security regression] Tool “discard_agent_draft” was removed
- [security regression] Tool “get_onboarding” was removed
- [security regression] Tool “get_phone_number_settings” was removed
- [security regression] Tool “list_calls” was removed
- [security regression] Tool “list_numbers” was removed
- [security regression] Tool “publish_agent” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “set_agent_connectors”, which the server declares destructive
- [security] Tool “add_common_connector” rewrote its description, which is the text the model reads
- [security] Tool “connect_connector” rewrote its description, which is the text the model reads
- [security] Tool “create_billing_portal” rewrote its description, which is the text the model reads
- [security] Tool “create_connector” rewrote its description, which is the text the model reads
- [security] Tool “execute_subscription_change” rewrote its description, which is the text the model reads
- [security] Tool “get_account” rewrote its description, which is the text the model reads
- [security] Tool “get_agent” rewrote its description, which is the text the model reads
- [security] Tool “get_connector_tools” rewrote its description, which is the text the model reads
- [security] Tool “get_phone_number” rewrote its description, which is the text the model reads
- [security] Tool “get_voice_preview” rewrote its description, which is the text the model reads
- [security] Tool “list_activity” rewrote its description, which is the text the model reads
- [security] Tool “list_connectors” rewrote its description, which is the text the model reads
- [security] Tool “list_phone_numbers” rewrote its description, which is the text the model reads
- [security] Tool “place_call” rewrote its description, which is the text the model reads
- [security] Tool “preview_subscription_change” rewrote its description, which is the text the model reads
- [security] Tool “remove_connector” rewrote its description, which is the text the model reads
- [security] Tool “reset_agent” rewrote its description, which is the text the model reads
- [security] Tool “resume_operation” rewrote its description, which is the text the model reads
- [security] Tool “set_default_phone_number” rewrote its description, which is the text the model reads
- [security] Tool “set_onboarding” rewrote its description, which is the text the model reads
- [security] Tool “start_agent_test” rewrote its description, which is the text the model reads
- [security] Tool “update_account” rewrote its description, which is the text the model reads
- [security] Tool “update_agent” rewrote its description, which is the text the model reads
- [security] Tool “add_common_connector” no longer declares itself destructive
- [security] Tool “connect_connector” no longer declares itself destructive
- [security] Tool “create_billing_portal” no longer declares itself destructive
- [security] Tool “create_connector” no longer declares itself destructive
- [security] Tool “set_onboarding” no longer declares itself destructive
- [security] Tool “start_agent_test” no longer declares itself destructive
- [functional regression] Schema quality: pass → fail
- [functional regression] “execute_subscription_change” added a required parameter “user_authorized”, so existing callers break
- [functional regression] “get_voice_preview” added a required parameter “provider_voice_id”, so existing callers break
- [functional regression] “list_activity” added a required parameter “kind”, so existing callers break
- [functional regression] “create_connector” dropped the required parameter “headerName”
- [functional regression] “get_voice_preview” dropped the required parameter “voice_id”
- [functional regression] “reset_agent” dropped the required parameter “apply”
- [functional regression] “update_agent” dropped the required parameter “apply”
- [functional regression] “update_agent” dropped the required parameter “changes”
- [functional regression] “update_agent” dropped the required parameter “direction”
- [functional regression] “update_agent” dropped the required parameter “number_id”
- [functional regression] “update_agent” dropped the required parameter “revision”
- [functional] Schema quality: fair → good
- [functional] Server version: 0.3.0 → 0.4.0
- [cosmetic] “get_phone_number” added an optional parameter “number_id”
- [cosmetic] “place_call” added an optional parameter “number_id”
- [cosmetic] “create_connector” dropped the optional parameter “assignments”
- [cosmetic] “create_connector” dropped the optional parameter “clientId”
- [cosmetic] “create_connector” dropped the optional parameter “clientSecret”
- [cosmetic] “create_connector” dropped the optional parameter “issuer”
- [cosmetic] “create_connector” dropped the optional parameter “token”
- [cosmetic] “place_call” dropped the optional parameter “source_number_id”
- [cosmetic] “remove_connector” dropped the optional parameter “assignments”

### 2026-10-31 (score 80, +1)

- [security] The server rewrote its instructions, which are the text every model session reads

### 2026-10-30 (score 79, −1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “add_common_connector”, which the server declares destructive
- [security] New tool “claim_phone_number”, which the server declares destructive
- [security] New tool “connect_connector”, which the server declares destructive
- [security] New tool “create_billing_portal”, which the server declares destructive
- [security] New tool “create_connector”, which the server declares destructive
- [security] New tool “create_voice”, which the server declares destructive
- [security] New tool “create_voice_upload”, which the server declares destructive
- [security] New tool “delete_voice”, which the server declares destructive
- [security] New tool “discard_agent_draft”, which the server declares destructive
- [security] New tool “execute_subscription_change”, which the server declares destructive
- [security] New tool “get_forwarding_carrier”, which the server declares destructive
- [security] New tool “publish_agent”, which the server declares destructive
- [security] New tool “remove_connector”, which the server declares destructive
- [security] New tool “rename_voice”, which the server declares destructive
- [security] New tool “reset_agent”, which the server declares destructive
- [security] New tool “resume_operation”, which the server declares destructive
- [security] New tool “revoke_authorized_app”, which the server declares destructive
- [security] New tool “set_default_phone_number”, which the server declares destructive
- [security] New tool “set_onboarding”, which the server declares destructive
- [security] New tool “start_agent_test”, which the server declares destructive
- [security] New tool “stop_agent_test”, which the server declares destructive
- [security] New tool “update_account”, which the server declares destructive
- [security] New tool “update_agent”, which the server declares destructive
- [security] New tool “update_billing_profile”, which the server declares destructive
- [security] New tool “update_phone_number”, which the server declares destructive
- [security] New tool “verify_voice”, which the server declares destructive
- [security] Tool “get_call” rewrote its description, which is the text the model reads
- [security] Tool “place_call” rewrote its description, which is the text the model reads
- [functional regression] Tool coverage: 100% → 15%
- [functional improvement] Tool coverage: 86% → 100%
- [functional improvement] Schema quality: fail → pass
- [functional improvement] Tool “list_phone_numbers” now declares an output schema
- [functional] Schema quality: excellent → fair
- [functional] Destructive annotations: pass → 100
- [functional] Server version: 0.2.0 → 0.3.0
- [functional] New tool “get_account”
- [functional] New tool “get_agent”
- [functional] New tool “get_agent_test”
- [functional] New tool “get_agent_test_listener”
- [functional] New tool “get_billing”
- [functional] New tool “get_call_diagnostics”
- [functional] New tool “get_call_listener”
- [functional] New tool “get_capabilities”
- [functional] New tool “get_connector_tools”
- [functional] New tool “get_forwarding_instructions”
- [functional] New tool “get_number_claim”
- [functional] New tool “get_onboarding”
- [functional] New tool “get_operation”
- [functional] New tool “get_phone_number_settings”
- [functional] New tool “get_voice_preview”
- [functional] New tool “list_activity”
- [functional] New tool “list_agents”
- [functional] New tool “list_authorized_apps”
- [functional] New tool “list_connectors”
- [functional] New tool “list_numbers”
- [functional] New tool “list_test_scenarios”
- [functional] New tool “list_voices”
- [functional] New tool “preview_subscription_change”
- [functional] New tool “search_phone_numbers”
- [cosmetic] “place_call” added an optional parameter “request_id”

### 2026-10-29 (score 80, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “end_call” rewrote its description, which is the text the model reads
- [security] Tool “get_call” rewrote its description, which is the text the model reads
- [security] Tool “get_phone_number” rewrote its description, which is the text the model reads
- [security] Tool “place_call” rewrote its description, which is the text the model reads
- [cosmetic] “place_call” reworded the description of “locale”
- [cosmetic] “place_call” reworded the description of “user_name”

### 2026-10-28 (score 80, −3)

- [security regression] Stability: 0.47 → fail
- [security regression] A breaking change shipped without a version bump: still 0.2.0
- [security regression] Tool “estimate_call” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “get_call” rewrote its description, which is the text the model reads
- [security] Tool “get_phone_number” rewrote its description, which is the text the model reads
- [security] Tool “place_call” rewrote its description, which is the text the model reads
- [functional regression] Tool coverage: 100% → 86%
- [functional regression] “place_call” added a required parameter “timezone”, so existing callers break
- [functional] New tool “list_phone_numbers”
- [cosmetic] “place_call” added an optional parameter “source_number_id”
- [cosmetic] “place_call” reworded the description of “locale”

## MCP tools (52)

### `get_capabilities` (~28 tokens)

Start here to discover Patch actions, granted permissions, feature prerequisites and the next tools to call.

### `place_call` (~1140 tokens)

Place one real phone call FROM the selected outbound number (the authenticated user’s verified personal number by default) to accomplish a specific objective (book a table, ask a question, chase an order). A real-time voice agent handles the call, including automated phone menus and hold queues. Its default opening says who it is calling for and states the call's purpose. Use get_agent and update_agent for number settings and inbound greeting/instructions. Outbound greeting and system instructions are read-only through MCP; use objective and context for call-specific facts. Changes apply directly to new calls. Call facts are added automatically. The recording disclosure belongs in the first spoken turn that advances the objective, whether asking a question, making a request, or giving task-related details. Brief introductory chatter or an acknowledgment of a request to hold may come first. Naturally include “on a recorded line” in the introduction or response, using a natural equivalent in the selected call language. Returns immediately with a call_id and resolved locale, language, and voice; the call proceeds in the background and typically takes 2–5 minutes — poll get_call (pass wait_seconds to long-poll) until the status is terminal. The response includes a listen_url: a private web link where the user can hear the call live, watch the transcript, and stop the call — offer it to the user. Calls in Central America, Europe, North America, and South America, subject to route availability; never for emergencies. Calls involving a non-US/Canadian number require a paid plan from the first call. Rates vary by caller ID and destination; the response includes an estimated provider cost for one minute, including per-call costs. This estimate is not a final charge. Paid usage follows telephone, AI and any lookup costs, including unsuccessful attempts, and can update after the call. Calls can be placed at any time of day, any day of the week, and the user is responsible for…

Input parameters:

- `callee_name` (string): Who is being called, e.g. "Zuni Café". Improves the conversation and the logs.
- `context` (string): Extra facts the agent may reveal if asked (e.g. party preferences, callback number policy).
- `locale` (string): Language the voice agent should use for the entire call. Choose one of the advertised BCP 47 tags for the active speech provider. The objective and context may be written in another language. Default…
- `number_id` (string): Account phone assignment ID from list_phone_numbers; omit to use the account default.
- `objective` (string, required): What the call should achieve, with all needed specifics and acceptable fallbacks. E.g. "Book a table for 2 tonight at 19:30 under 'Iddo'. Acceptable window 19:00–20:30."
- `request_id` (string): Optional retry key. Reuse the same UUID and arguments after a lost response to avoid a second call.
- `timezone` (string): Optional callee local IANA timezone, for example America/Chicago or Europe/London. Supply it when known from reliable context. If omitted, Patch uses phone-prefix timezone metadata when it identifies…
- `to` (string, required): Destination phone number in E.164, e.g. +14155551234. Supported: Central America, Europe, North America, and South America (Telnyx regions; Caribbean excluded). Destination country codes: BZ, CR, SV,…
- `user_name` (string): The user name supplied to the voice agent for the call, e.g. "Sam" or "Sam at Acme". The default introduction uses the saved name when explaining who the call is for; a custom introduction follows th…

### `get_call` (~432 tokens)

Get the status and, once terminal, the structured resolution of a call started with place_call. Returns instantly by default. Pass wait_seconds (max 50) to have the server hold the request and return early on any status change — fewer round trips while a call is in progress. Terminal statuses: completed, answered_silently, no_answer, busy, voicemail, failed, rejected, canceled, declined_recording, opted_out. rejected means safety screening declined the objective before dialing; error.message and resolution.summary explain why. Terminal calls include a `resolution` {outcome: achieved|partially_achieved|not_achieved|no_conversation|unknown, summary, commitments[], follow_ups[], key_facts[]} — read it before the transcript; it is the answer. unknown means the outcome could not be determined; review the transcript. Completed calls also carry the transcript (may be marked transcript_truncated) and a recording_url the user can listen to (private links expire after ~1 hour; on staging, fetch with the same OAuth Authorization: Bearer header). The resolution can lag the terminal status by a few seconds while it is extracted. Calls include the resolved locale, language, voice, and is_public; public calls return token-free listen and recording URLs that remain accessible while public. Use set_call_visibility only when the user explicitly asks to publish or make private. Every call includes a listen_url — the call page for the user (live audio + transcript while in progress; recording + transcript once ended). ended_by='user' on a canceled call means the user deliberately stopped it from that page — don't retry. recording_status=processing means the LiveKit session recording is being finalized and copied to private storage separately from the result. A recording can fail or be unavailable. Call get_call again, or pass wait_seconds on an already-terminal call to wait for a recording state change.

Input parameters:

- `call_id` (string, required): The id returned by place_call.
- `wait_seconds` (integer): 0 (default) = instant status check. Up to 50 = server-side long-poll.

### `set_call_visibility` (~135 tokens)

Make a call owned by the authenticated user public or private. Calls are private by default. Only publish when the user explicitly asks: a public call exposes its objective, phone numbers, transcript, result and audio to anyone with its permanent, token-free listen_url, including live audio while in progress. Set is_public to false to disable token-free access again; existing private signed links remain valid until they expire. Public visitors cannot stop the call or change visibility.

Input parameters:

- `call_id` (string, required): The id of a call owned by this account.
- `is_public` (boolean, required): true publishes the call; false makes it private again.

### `end_call` (~82 tokens)

End an in-progress call early. Patch requests disconnection by deleting the LiveKit room; a spoken farewell is not guaranteed. Check get_call for the resulting status. Use when the user changes their mind or the call is no longer needed. Available transcript snapshots are retained and the resolution is extracted separately.

Input parameters:

- `call_id` (string, required): The id returned by place_call.

### `list_phone_numbers` (~66 tokens)

List this account's phone numbers, active direction availability and default_number_id. Use number_id to select a source for place_call. Accepts calls:read or numbers:read; management settings and workspace_revision are included only with numbers:read. Does not expose agent instructions or voices.

### `get_phone_number` (~72 tokens)

Read one owned number by number_id; omit it to inspect the default outbound number. Accepts calls:read or numbers:read. Number-management settings, revision, recovery deadline and workspace_revision require numbers:read. Does not place a call or expose agent instructions or voices.

Input parameters:

- `number_id` (string)

### `list_activity` (~90 tokens)

Read owned history newest first. kind=call (default) requires calls:read and returns call statuses, resolution summaries/outcomes and listen links. kind=test requires configuration:read and returns finished synthetic tests. kind=all requires both permissions. Pass next_cursor unchanged with the same kind to fetch older entries.

Input parameters:

- `cursor` (string)
- `kind` (string, required)
- `limit` (integer, required)

### `get_account` (~39 tokens)

Read your profile, caller verification, revision, account defaults, setup progress and notices. Use update_account for profile changes and set_onboarding for setup state.

### `update_account` (~62 tokens)

Update supplied profile, account-wide mode (standard or beta), language and voice defaults using the revision from get_account. Language and voice defaults require configuration permission. Internal system prompts are not exposed through MCP.

Input parameters:

- `changes` (object, required)
- `revision` (string, required)

### `set_onboarding` (~63 tokens)

Save only setup progress: choose inbound/outbound intent and mark the checklist checkout, complete or skipped. Checkout records progress only; this tool never opens payment, buys a plan or acquires a number.

Input parameters:

- `intent` (string)
- `status` (string, required)

### `list_authorized_apps` (~29 tokens)

List applications authorized to access this account. These are distinct from external tools used by voice agents.

### `revoke_authorized_app` (~33 tokens)

Disconnect an authorized application. Revoking the current application ends this MCP connection.

Input parameters:

- `client_id` (string, required)

### `list_agents` (~20 tokens)

Find the identifiers and revisions of your inbound and outbound agents.

### `search_phone_numbers` (~97 tokens)

Find included US or Canadian numbers. Plus automatically prefers any unclaimed Patch number in the requested country, then falls back to area-code search. Pro plans use area-code search so the user can choose a number. Plus can use reuse_only without an area code to check its existing inventory. Offers expire; claim the chosen offer.

Input parameters:

- `area_code` (string)
- `country` (string, required)
- `reuse_only` (boolean, required)

### `claim_phone_number` (~50 tokens)

Acquire an offered number using your plan allowance. Reuse request_id after an interrupted response.

Input parameters:

- `label` (string, required)
- `offer_id` (string, required)
- `request_id` (string, required)

### `get_number_claim` (~25 tokens)

Read provisioning progress for a number claim.

Input parameters:

- `claim_id` (string, required)

### `update_phone_number` (~87 tokens)

Change a label, inbound/outbound availability or retention preference using the number revision. Enabling an unpublished direction activates its initial defaults; saved drafts and existing live settings are preserved.

Input parameters:

- `inbound` (boolean)
- `label` (string)
- `number_id` (string, required)
- `outbound` (boolean)
- `retained` (boolean)
- `revision` (integer, required)

### `set_default_phone_number` (~39 tokens)

Choose the default outbound number using workspace_revision from get_phone_number.

Input parameters:

- `number_id` (string, required)
- `workspace_revision` (integer, required)

### `get_forwarding_carrier` (~32 tokens)

Suggest forwarding instructions for the verified personal number during inbound onboarding. Carrier lookups are cached for a day.

### `get_forwarding_instructions` (~62 tokens)

Get carrier-specific steps for forwarding an existing phone to an owned Patch number. The user or carrier must activate forwarding; Patch cannot activate it remotely.

Input parameters:

- `mode` (string, required)
- `number_id` (string, required)
- `provider` (string)

### `get_agent` (~58 tokens)

Read active user-configurable settings and revision. Inbound includes editable greeting/instructions; outbound prompt text and Patch internal system prompts are not exposed. Settings are null until configured.

Input parameters:

- `direction` (string, required)
- `number_id` (string, required)

### `update_agent` (~68 tokens)

Apply supplied settings directly to an agent for future calls using the revision from get_agent. Inbound greeting and instructions are editable. Outbound greeting and system instructions are not exposed or editable through MCP; supply per-call facts in place_call objective and context. Use set_agent_connectors separately for external connections.

### `reset_agent` (~55 tokens)

Reset user-configurable agent settings to defaults for future calls. Removes active external connection assignments and requires connector permission when assignments exist.

Input parameters:

- `direction` (string, required)
- `number_id` (string, required)
- `revision` (integer, required)

### `list_voices` (~51 tokens)

List voices for the current account mode. Change mode with update_account. Beta offers Phonic stock voices only; assign their ID using phonicVoice in update_agent. Standard uses voice and supports entitled custom voices.

### `get_voice_preview` (~60 tokens)

Get a short-lived playable URL using provider_voice_id from list_voices, or Claudia's provider ID. Use the provider identity here; clone management uses voice_id. Built-in catalog voices already include sample URLs.

Input parameters:

- `provider_voice_id` (string, required)

### `create_voice_upload` (~55 tokens)

Create an expiring audio upload URL. PUT the file bytes there, then call create_voice with the upload_id and the user’s own-voice consent.

Input parameters:

- `filename` (string, required)
- `request_id` (string, required)

### `create_voice` (~62 tokens)

Clone an uploaded sample of the user’s own voice. consent must represent the user’s explicit permission; never infer consent.

Input parameters:

- `consent` (string, required)
- `label` (string, required)
- `request_id` (string, required)
- `upload_id` (string, required)

### `rename_voice` (~30 tokens)

Rename one of your voice clones.

Input parameters:

- `label` (string, required)
- `voice_id` (string, required)

### `delete_voice` (~43 tokens)

Delete your voice clone and its provider samples. A voice in an active call cannot be deleted.

Input parameters:

- `request_id` (string, required)
- `voice_id` (string, required)

### `verify_voice` (~38 tokens)

Refresh provider verification status. If verification is still required, the user must complete the provider’s verification with support.

Input parameters:

- `voice_id` (string, required)

### `list_connectors` (~59 tokens)

Read this account's saved voice-agent connections, authorization state and common providers. Returns setup_url for entering API keys or custom OAuth credentials on the website. Reads stored metadata only; does not contact providers, discover tools, assign agents or invoke external actions.

### `get_connector_tools` (~61 tokens)

Read the cached individual tool definitions for an owned connection. These functions are exposed separately to the voice agent on calls after set_agent_connectors assigns the connection. This read does not invoke them, refresh discovery or return credentials.

Input parameters:

- `connector_id` (string, required)

### `create_connector` (~131 tokens)

Save a hosted voice-agent MCP connection requiring no credentials or standard browser OAuth, without contacting it or assigning agents. Never ask for or submit API keys, tokens, client secrets or credential-bearing URLs in chat. For API-key or custom OAuth setup, send the user to setup_url from list_connectors, then use the saved connector_id. Next use connect_connector for browser authorization and discovery, then set_agent_connectors to grant access.

Input parameters:

- `authType` (string, required)
- `name` (string, required)
- `request_id` (string, required)
- `transport` (string, required)
- `url` (string, required)

### `connect_connector` (~79 tokens)

Contact an owned connection to discover or refresh its individual voice-agent tools. May begin third-party OAuth and return authorization_url for the user to approve; never collect verification codes or credentials in chat. Does not invoke external tools or change agent assignments. Inspect get_connector_tools after authorization.

Input parameters:

- `connector_id` (string, required)
- `request_id` (string, required)

### `add_common_connector` (~78 tokens)

Create or return a managed Exa web-search connection using this account's existing paid entitlement. New connections are unassigned. Does not subscribe, charge, search, discover tools or change assignments. Next use connect_connector, inspect get_connector_tools and explicitly set_agent_connectors.

Input parameters:

- `provider` (string, required)
- `request_id` (string, required)

### `set_agent_connectors` (~106 tokens)

Replace the external connections available to one active voice agent for future calls. Review get_connector_tools and obtain authorization for those capabilities first. Every discovered function is exposed individually to the voice agent; it may invoke those external actions within its call instructions. An empty connector_ids list removes access. Does not invoke tools or change unrelated agent settings.

Input parameters:

- `connector_ids` (array, required)
- `direction` (string, required)
- `number_id` (string, required)
- `revision` (integer, required)

### `remove_connector` (~70 tokens)

Delete an owned connection and its saved credentials. Also revoke that connection from every assigned agent without applying unrelated settings. Requires configuration permission when an agent assignment is removed. Does not invoke external tools or revoke consent at the third-party provider.

Input parameters:

- `connector_id` (string, required)
- `request_id` (string, required)

### `list_test_scenarios` (~31 tokens)

List synthetic test scenarios and available responder outcomes. Tests use fictional data and never invoke connected external tools.

### `start_agent_test` (~145 tokens)

Run one isolated synthetic conversation against the active agent settings at the supplied revision. Outbound supports preset or custom fictional scenarios; inbound requires custom_scenario. Uses LiveKit test rooms and may consume AI usage. Never dials a phone number, publishes settings or invokes connected external tools.

Input parameters:

- `custom_scenario` (object)
- `direction` (string, required)
- `number_id` (string, required)
- `request_id` (string, required)
- `responder_outcome` (string): An outcome ID from list_test_scenarios, or custom fictional facts for the responder. Omit to use the first outcome.
- `revision` (integer, required)
- `scenario` (string, required)

### `get_agent_test` (~31 tokens)

Read a synthetic test’s status, transcript, result and transcript expiry.

Input parameters:

- `test_id` (string, required)

### `get_agent_test_listener` (~40 tokens)

Get a short-lived, subscribe-only LiveKit credential for listening to your running synthetic test from a compatible client.

Input parameters:

- `test_id` (string, required)

### `stop_agent_test` (~27 tokens)

Stop your synthetic test and retain its captured result.

Input parameters:

- `test_id` (string, required)

### `get_call_diagnostics` (~50 tokens)

Read private diagnostic events for an owned call. Public call visibility never grants access to diagnostics.

Input parameters:

- `call_id` (string, required)
- `cursor` (string, required)
- `limit` (integer, required)

### `get_call_listener` (~38 tokens)

Get a short-lived, subscribe-only LiveKit credential for listening to your active call from a compatible client.

Input parameters:

- `call_id` (string, required)

### `resume_operation` (~93 tokens)

Recover an interrupted number claim, voice clone or subscription attempt owned by this account and the original authorization grant. Requires that operation's original permissions. May reconcile number provisioning, find the exact existing provider voice, or retry the persisted subscription request with its original idempotency key. Never creates a replacement request or authorizes new spending. Completed results and definitive failures are returned without repeating provider actions.

Input parameters:

- `operation_id` (string, required)

### `get_operation` (~39 tokens)

Recover a request’s durable outcome. A running/needs_attention operation must not be retried under a new ID.

Input parameters:

- `operation_id` (string, required)

### `get_billing` (~46 tokens)

Read plans, usage, subscription state, payment-method summary and invoices. Reconciles subscription state with Stripe; use invoice_cursor for older invoices.

Input parameters:

- `invoice_cursor` (string)

### `preview_subscription_change` (~121 tokens)

Create a 15-minute quote for starting a subscription, changing its plan, canceling renewal at period end, or undoing cancellation/a scheduled downgrade. Returns immediate charges, monthly list price, effective time and allowances. May read Stripe and save a local quote; does not charge or change a subscription. Show the complete quote to the user and obtain explicit approval before execute_subscription_change. Each preview creates a new quote.

Input parameters:

- `action` (string, required)
- `plan` (string)
- `promotion_code` (string)
- `trial` (boolean)

### `execute_subscription_change` (~145 tokens)

Apply the exact, unexpired quote the user explicitly approved after seeing its immediate charges, recurring price, effective time and limits. May charge a saved payment method, change the subscription, cancel renewal or undo a scheduled change. Set user_authorized=true only after that approval; never infer permission to spend. Reuse the same request_id and arguments after a lost response. Return any payment/authentication URL for the user to complete; never collect payment credentials in chat.

Input parameters:

- `quote_id` (string, required)
- `request_id` (string, required)
- `user_authorized` (boolean, required): The user explicitly approved this quote's charges and terms. Never infer approval from a request to preview.

### `update_billing_profile` (~44 tokens)

Update the Stripe customer’s billing name, email or address. Payment credentials are never accepted here.

Input parameters:

- `changes` (object, required)
- `request_id` (string, required)

### `create_billing_portal` (~85 tokens)

Create a Stripe-hosted billing portal link for this account's existing Stripe customer. Creating the link does not charge, change or cancel a subscription; the user chooses and confirms any billing changes on Stripe. Returns to Patch's fixed billing page. Reuse request_id after a lost response. Never request or accept card details in chat.

Input parameters:

- `request_id` (string, required)

## Diagnostics

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

## Score history

- 2026-11-05: 81
- 2026-11-04: 81
- 2026-11-03: 80
- 2026-11-02: 79
- 2026-11-01: 80
- 2026-10-31: 80
- 2026-10-30: 79
- 2026-10-29: 80
- 2026-10-28: 80
- 2026-10-27: 83
- 2026-10-26: 82
- 2026-10-25: 82
- 2026-10-24: 82
- 2026-10-23: 81
- 2026-10-22: 81
- 2026-10-21: 80
- 2026-10-20: 80
- 2026-10-19: 79
- 2026-10-18: 79
- 2026-10-17: 78
- 2026-10-16: 78
- 2026-10-15: 77
- 2026-10-14: 77
- 2026-10-13: 76
- 2026-10-12: 37

## Common questions

### What is the Patch MCP server?

Patch MCP is listed in the public MCP registry as com.patchmcp/patch. AI phone calls from your verified number, with answers, transcripts and recordings. This page covers its hosted endpoint (https://www.patchmcp.com/mcp).

### Is the Patch MCP server safe to use?

Patch MCP scores 81 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 Patch MCP server expose?

Patch MCP exposes 52 tools: get_capabilities, place_call, get_call, set_call_visibility, end_call, and 47 more. Their descriptions and schemas cost roughly 4,722 tokens of context every time the server is loaded.

### Does the Patch MCP server require authentication?

Its publisher declares no required credentials for Patch MCP. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the Patch MCP server still maintained?

Patch MCP is still listed in the MCP registry, though our most recent checks did not reach this channel. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://www.patchmcp.com/mcp
- Website: https://www.patchmcp.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-patchmcp-patch/www.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-patchmcp-patch/www.json
- HTML version of this page: https://verifymcp.io/servers/com-patchmcp-patch/www
