Skip to main content
Glama
@proof-holdings/mcp-server

@proof-holdings/mcp-server

Official

remove_phone

Destructive

Remove a phone number from a Proof account and revoke its proofs and consents. Requires two-factor verification and is refused for your sign-in number or last phone while circles are active.

Instructions

Remove a phone number from the account. Always requires one code: start_2fa_for_action with action_type phone_remove and targets [this phone id]. Revokes every proof of the number and your own consents naming it, declines pending confirmations waiting on it, flags approval setups left with no approver, deletes the record and its messenger links, signs out your other devices, and names the new primary phone — your Proof of Me circles then reach you there. Refused for the number you signed in with, for your only way to sign in, and for your last phone while circles are active (circles_need_phone: add another phone first, or archive the circles). Cannot be undone.

ACCESS: needs a Proof account. Set PROOF_API_KEY and restart this server, or sign in with start_login — a session opens this tool — then call this tool again.

Input Schema

NameRequiredDescriptionDefault
idYesPhone record ID

Output Schema

NameRequiredDescriptionDefault
typeNo
noticeNo
successNoAlways `true`. The 1.x Go, PHP and Python SDK types carry it as a string, as released; it is typed boolean in the next major.
identifierNoMasked.
removed_idNo
new_primaryNoThe row that becomes (or became) primary when the removed one was; null otherwise.
proofs_revokedNo
lookalike_watchNo
circles_repointedNoPhones only: circles that now reach the owner at `new_primary`; 0 for an email.
sessions_signed_outNoEvery other device was signed out, idle ones included; the calling session stays. False when that could not be done — the removal itself still happened.
sessions_invalidatedNoOther listed devices signed out, idle ones included; the calling session stays. A device missing from the list — signed in before the list held idle devices, or one whose listing could not be recorded — is not counted, so read `sessions_signed_out` for whether every other device was signed out.
authorizations_revokedNo
hitl_configs_without_approverNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.7.2
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "authorizations_revoked": {},
      +    "circles_repointed": {
      +      "description": "Phones only: circles that now reach the owner at `new_primary`; 0 for an email."
      +    },
      +    "hitl_configs_without_approver": {},
      +    "identifier": {
      +      "description": "Masked."
      +    },
      +    "lookalike_watch": {},
      +    "new_primary": {
      +      "description": "The row that becomes (or became) primary when the removed one was; null otherwise."
      +    },
      +    "notice": {},
      +    "proofs_revoked": {},
      +    "removed_id": {},
      +    "sessions_invalidated": {
      +      "description": "Other listed devices signed out, idle ones included; the calling session stays. A device missing from the list — signed in before the list held idle devices, or one whose listing could not be recorded — is not counted, so read `sessions_signed_out` for whether every other device was signed out."
      +    },
      +    "sessions_signed_out": {
      +      "description": "Every other device was signed out, idle ones included; the calling session stays. False when that could not be done — the removal itself still happened."
      +    },
      +    "success": {
      +      "description": "Always `true`. The 1.x Go, PHP and Python SDK types carry it as a string, as released; it is typed boolean in the next major."
      +    },
      +    "type": {}
      +  },
      +  "type": "object"
      +}
  2. First observedv1.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far beyond the destructiveHint=true annotation: it enumerates every side effect (revoking proofs and consents, declining pending confirmations, flagging approval setups with no approver, deleting messenger links, signing out other devices, reassigning primary phone) and states irreversibility. It also documents the access/session requirement and the exact error code returned on refusal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then prerequisite, effects, refusals, and access note in a logical order, with no filler sentences. The effect sentence is extremely dense (seven clauses stacked), which slightly hurts scanability but every clause carries required information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter mutation with an output schema available, the description covers purpose, required 2FA step, full blast radius, refusal cases with remediation, irreversibility, and auth setup. An agent has everything needed to invoke it correctly or decide not to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `id` is documented as 'Phone record ID'. The description adds meaning by specifying that this id is what gets passed as the target in the start_2fa_for_action step, clarifying how the value is consumed rather than just what it is.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a phone number from the account') and is immediately distinguishable from siblings like remove_email, set_primary_phone, and list_phones. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('Always requires one code: start_2fa_for_action with action_type phone_remove') and enumerates refusal conditions including the circles_need_phone remediation path. It does not explicitly route to sibling alternatives (e.g. 'use set_primary_phone instead to change primary'), so it falls short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools