SuperPhone MCP by usefulapi

MCP server for SuperPhone — contacts, conversations, tags and consent-based text messages.

사용해야 할까요

품질 및 안전성

A
설명 품질
98%
스키마 완전성
85%
이름 품질
80%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,680토큰 (도구 정의)
~1.5 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.88%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "superphone": {
      "url": "https://superphone.usefulapi.io/mcp"
    }
  }
}

원격 엔드포인트

https://superphone.usefulapi.io/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (17)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢superphone_get_account

The Superphone account behind the API key: user id, email, name, the business phone numbers (number, default/active flags, short code) and notification preferences. GraphQL query `me`.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_list_contacts(page_size, after)

List the SMS contacts (the subscriber list) with name, mobile, email, company, VIP/hidden/archived/unsubscribed/opted-out flags, total spent, creation date and tags (up to 20). Oldest first; page with next_cursor. `total` is the size of the whole list. GraphQL query `contacts`.

입력 스키마

{
  "type": "object",
  "properties": {
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: pass the previous reply's next_cursor to get the next page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_get_contact(contact_id)

One contact by id with every profile field, tags, custom contributions (recorded purchases) and its latest 10 conversations (ids to read with superphone_get_conversation). GraphQL query `contact`.

입력 스키마

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone contact id."
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_find_contact(mobile, email)

Find one contact by exact mobile number or email address (give at least one; E.164 such as +12132679977 is best). Returns the full contact or null when none matches. GraphQL query `contactByIdentifier`.

입력 스키마

{
  "type": "object",
  "properties": {
    "mobile": {
      "description": "Mobile number, ideally E.164.",
      "type": "string",
      "maxLength": 40
    },
    "email": {
      "description": "Email address.",
      "type": "string",
      "maxLength": 254
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_list_conversations(page_size, after)

List text conversations (the inbox): id, participant number, platform (TWILIO = SMS, FACEBOOK = Messenger), hidden/archived flags, creation date and the contact. Page with next_cursor. Read the messages of one with superphone_get_conversation. GraphQL query `conversations`.

입력 스키마

{
  "type": "object",
  "properties": {
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "after": {
      "description": "Cursor: pass the previous reply's next_cursor to get the next page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_get_conversation(conversation_id, message_count, before)

One conversation with its most recent messages (default 20, newest last): body, from/to, direction (INCOMING_TEXT, OUTGOING_TEXT, SYSTEM, calls), delivery status, errors and media. To read older messages pass `before` = the previous reply's previous_cursor. GraphQL query `conversation`.

입력 스키마

{
  "type": "object",
  "properties": {
    "conversation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone conversation id."
    },
    "message_count": {
      "description": "How many of the latest messages to return, 1-100 (default 20).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before": {
      "description": "Cursor: pass the previous reply's previous_cursor to read older messages.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "conversation_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_get_message(message_id)

One message by id: body, from/to, direction, delivery status, error and media. GraphQL query `message`.

입력 스키마

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone message id."
    }
  },
  "required": [
    "message_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_list_forms

List the sign-up (opt-in) forms: id, public hashId, domain, titles, opt-in text flag, optional fields, redirect URL, default and enabled flags. GraphQL query `forms`.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_get_form(form_id)

One sign-up form by id, or the account's default form when form_id is omitted. GraphQL queries `form` / `defaultForm`.

입력 스키마

{
  "type": "object",
  "properties": {
    "form_id": {
      "description": "Superphone form id; omit for the default form.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_list_webhooks

List the configured webhooks: id, destination URL, active flag and subscribed events (CONTACT_ADDED, CONTACT_UPDATED, CONTACT_TAGS_CHANGED, MESSAGE_RECEIVED, MESSAGE_SENT, MESSAGE_STATUS_UPDATED). GraphQL query `webhooks`.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢superphone_search_numbers(starts_with)

Search phone numbers that could be bought for the account, optionally starting with some digits (for example an area code), with their price. Read-only: this tool never buys a number. GraphQL query `searchNumbers`.

입력 스키마

{
  "type": "object",
  "properties": {
    "starts_with": {
      "description": "Digits the number should start with, e.g. an area code like 415.",
      "type": "string",
      "pattern": "^\\d{1,10}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_create_contact(first_name, lastName, nickname, mobile, email, ...)

WRITE: create a contact (first name required; add a mobile number or email so it can be reached). Creating a contact does not send it a message. Returns the new contact. GraphQL mutation `createContact`.

입력 스키마

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "First name."
    },
    "lastName": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 100
    },
    "nickname": {
      "description": "Nickname.",
      "type": "string",
      "maxLength": 100
    },
    "mobile": {
      "description": "Mobile number, ideally E.164 (+12132679977); without a country code Superphone assumes the US.",
      "type": "string",
      "maxLength": 40
    },
    "email": {
      "description": "Email address.",
      "type": "string",
      "maxLength": 254
    },
    "birthday": {
      "description": "Birthday as text, e.g. 1990-05-17.",
      "type": "string",
      "maxLength": 40
    },
    "gender": {
      "description": "Gender.",
      "type": "string",
      "enum": [
        "MALE",
        "FEMALE"
      ]
    },
    "twitter": {
      "description": "Twitter handle.",
      "type": "string",
      "maxLength": 100
    },
    "instagram": {
      "description": "Instagram handle.",
      "type": "string",
      "maxLength": 100
    },
    "linkedin": {
      "description": "LinkedIn profile.",
      "type": "string",
      "maxLength": 200
    },
    "job_title": {
      "description": "Job title.",
      "type": "string",
      "maxLength": 100
    },
    "company": {
      "description": "Company.",
      "type": "string",
      "maxLength": 150
    },
    "vip": {
      "description": "Mark as VIP.",
      "type": "boolean"
    },
    "hidden": {
      "description": "Hide the contact.",
      "type": "boolean"
    },
    "archived": {
      "description": "Archive the contact.",
      "type": "boolean"
    },
    "unsubscribed": {
      "description": "Mark the contact as unsubscribed from messages.",
      "type": "boolean"
    },
    "country": {
      "description": "Country.",
      "type": "string",
      "maxLength": 100
    },
    "province": {
      "description": "State or province.",
      "type": "string",
      "maxLength": 100
    },
    "city": {
      "description": "City.",
      "type": "string",
      "maxLength": 100
    },
    "zip_code": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 30
    },
    "notes": {
      "description": "Free-text notes.",
      "type": "string",
      "maxLength": 5000
    }
  },
  "required": [
    "first_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_update_contact(contact_id, first_name, lastName, nickname, mobile, ...)

WRITE: change fields of an existing contact. Only the fields you pass change: the tool first reads the contact and sends the full record back with your changes (the API requires the first name on every update). Pass an empty string to clear a text field. Returns the updated contact. GraphQL mutation `updateContact`.

입력 스키마

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone contact id."
    },
    "first_name": {
      "description": "New first name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "lastName": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 100
    },
    "nickname": {
      "description": "Nickname.",
      "type": "string",
      "maxLength": 100
    },
    "mobile": {
      "description": "Mobile number, ideally E.164 (+12132679977); without a country code Superphone assumes the US.",
      "type": "string",
      "maxLength": 40
    },
    "email": {
      "description": "Email address.",
      "type": "string",
      "maxLength": 254
    },
    "birthday": {
      "description": "Birthday as text, e.g. 1990-05-17.",
      "type": "string",
      "maxLength": 40
    },
    "gender": {
      "description": "Gender.",
      "type": "string",
      "enum": [
        "MALE",
        "FEMALE"
      ]
    },
    "twitter": {
      "description": "Twitter handle.",
      "type": "string",
      "maxLength": 100
    },
    "instagram": {
      "description": "Instagram handle.",
      "type": "string",
      "maxLength": 100
    },
    "linkedin": {
      "description": "LinkedIn profile.",
      "type": "string",
      "maxLength": 200
    },
    "job_title": {
      "description": "Job title.",
      "type": "string",
      "maxLength": 100
    },
    "company": {
      "description": "Company.",
      "type": "string",
      "maxLength": 150
    },
    "vip": {
      "description": "Mark as VIP.",
      "type": "boolean"
    },
    "hidden": {
      "description": "Hide the contact.",
      "type": "boolean"
    },
    "archived": {
      "description": "Archive the contact.",
      "type": "boolean"
    },
    "unsubscribed": {
      "description": "Mark the contact as unsubscribed from messages.",
      "type": "boolean"
    },
    "country": {
      "description": "Country.",
      "type": "string",
      "maxLength": 100
    },
    "province": {
      "description": "State or province.",
      "type": "string",
      "maxLength": 100
    },
    "city": {
      "description": "City.",
      "type": "string",
      "maxLength": 100
    },
    "zip_code": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 30
    },
    "notes": {
      "description": "Free-text notes.",
      "type": "string",
      "maxLength": 5000
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_add_contact_tags(contact_id, tag_names, tag_ids)

WRITE: apply tags to a contact, by name (a new name creates the tag) or by tag id. Tags can drive automations in Superphone. Returns the contact with its tags. GraphQL mutations `addContactTagsByNames` / `addContactTags`.

입력 스키마

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone contact id."
    },
    "tag_names": {
      "description": "Tag names.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "tag_ids": {
      "description": "Tag ids (from superphone_get_contact). Give tag_names or tag_ids, not both.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_remove_contact_tags(contact_id, tag_names, tag_ids)

WRITE: remove tags from a contact, by name or by tag id. This can take the contact out of tag-driven segments and automations. Returns the contact with its remaining tags. GraphQL mutations `removeContactTagsByNames` / `removeContactTags`.

입력 스키마

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone contact id."
    },
    "tag_names": {
      "description": "Tag names.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "tag_ids": {
      "description": "Tag ids (from superphone_get_contact). Give tag_names or tag_ids, not both.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_add_contribution(contact_id, name, amount, created_at)

WRITE: record a purchase or donation against a contact (name, amount, date). It adds to the contact's total spent and cannot be undone with this server. Returns the new contribution. GraphQL mutation `createCustomContribution`.

입력 스키마

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Superphone contact id."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "What it was for, e.g. 'Gift card' or 'October order #1042'."
    },
    "amount": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Amount in the account's currency."
    },
    "created_at": {
      "description": "When it happened, ISO 8601 (2026-10-01T12:00:00Z or 2026-10-01). Default: now.",
      "type": "string"
    }
  },
  "required": [
    "contact_id",
    "name",
    "amount"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴superphone_send_message(body, conversation_id, mobile, platform)

WRITE, IRREVERSIBLE: send a real text message to a customer from the account's number. It is delivered immediately, uses the account's messaging credits and cannot be recalled. Only send what the user explicitly asked for, to the number they named, and never to contacts who unsubscribed or opted out. Give exactly one of conversation_id (reply in an existing conversation) or mobile (a number, ideally E.164 like +12132679977; without a country code Superphone assumes the US). Returns the new message id. GraphQL mutation `sendMessage`.

입력 스키마

{
  "type": "object",
  "properties": {
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1600,
      "description": "The message text."
    },
    "conversation_id": {
      "description": "Reply in this conversation.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "mobile": {
      "description": "Recipient mobile number, E.164 recommended.",
      "type": "string",
      "maxLength": 40
    },
    "platform": {
      "description": "TWILIO = SMS (default); FACEBOOK = Messenger conversation.",
      "type": "string",
      "enum": [
        "TWILIO",
        "FACEBOOK"
      ]
    }
  },
  "required": [
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 17개