Send and read OpenPhone messages, calls, contacts and phone numbers.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a new contact in the workspace. WRITE ACTION — this adds a persistent contact record. Emails and phoneNumbers are passed as simple string arrays and stored under default field labels. OpenPhone REST: POST /contacts.
The contact's first name (required).
The contact's role / job title.
Email addresses for the contact.
How the contact was created; defaults to 'public-api'.
The contact's company.
The contact's last name.
A link to the contact in the source system.
A unique id from an external system (1-75 chars).
Phone numbers for the contact (E.164 recommended).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Create a new contact in the workspace. WRITE ACTION — this adds a persistent contact record. Emails and phoneNumbers are passed as simple string arrays and stored under default field labels. OpenPhone REST: POST /contacts.
| Argument | Type | Description |
|---|---|---|
| role | string | The contact's role / job title. |
| emails | array | Email addresses for the contact. |
| source | string | How the contact was created; defaults to 'public-api'. |
| company | string | The contact's company. |
| lastName | string | The contact's last name. |
| firstName* | string | The contact's first name (required). |
| sourceUrl | string | A link to the contact in the source system. |
| externalId | string | A unique id from an external system (1-75 chars). |
| phoneNumbers | array | Phone numbers for the contact (E.164 recommended). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"firstName"
],
"properties": {
"role": {
"type": "string",
"description": "The contact's role / job title."
},
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Email addresses for the contact."
},
"source": {
"type": "string",
"description": "How the contact was created; defaults to 'public-api'."
},
"company": {
"type": "string",
"description": "The contact's company."
},
"lastName": {
"type": "string",
"description": "The contact's last name."
},
"firstName": {
"type": "string",
"minLength": 1,
"description": "The contact's first name (required)."
},
"sourceUrl": {
"type": "string",
"format": "uri",
"description": "A link to the contact in the source system."
},
"externalId": {
"type": "string",
"maxLength": 75,
"minLength": 1,
"description": "A unique id from an external system (1-75 chars)."
},
"phoneNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Phone numbers for the contact (E.164 recommended)."
}
}
}Get a single call by its id (starts with 'AC') — direction, status, duration, participants and timestamps. OpenPhone REST: GET /calls/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The call id (starts with 'AC'). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The call id (starts with 'AC')."
}
}
}Get the recordings for a call by its id — each with a URL, duration, start time and status. OpenPhone REST: GET /call-recordings/{callId}.
| Argument | Type | Description |
|---|---|---|
| callId* | string | The call id (starts with 'AC'). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"callId"
],
"properties": {
"callId": {
"type": "string",
"minLength": 1,
"description": "The call id (starts with 'AC')."
}
}
}Get the AI-generated summary and next steps for a call by its id. Availability depends on your plan and whether the call was summarized. OpenPhone REST: GET /call-summaries/{callId}.
| Argument | Type | Description |
|---|---|---|
| callId* | string | The call id (starts with 'AC'). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"callId"
],
"properties": {
"callId": {
"type": "string",
"minLength": 1,
"description": "The call id (starts with 'AC')."
}
}
}Get the transcription for a call by its id — dialogue segments with speaker, text and timestamps, plus overall status and duration. OpenPhone REST: GET /call-transcripts/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The call id (starts with 'AC'). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The call id (starts with 'AC')."
}
}
}Get a single contact by its id, including default fields (name, company, role, emails, phone numbers) and custom fields. OpenPhone REST: GET /contacts/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The contact id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The contact id."
}
}
}List the workspace's contact custom-field definitions (name, key, type). Use the returned keys when creating contacts with custom fields. OpenPhone REST: GET /contact-custom-fields.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Get a single message by its id (starts with 'AC'). OpenPhone REST: GET /messages/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | string | The message id (starts with 'AC'). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The message id (starts with 'AC')."
}
}
}List calls between one of your OpenPhone numbers and a participant, newest first, optionally filtered by user and created date range. Returns direction, status, duration and timestamps. OpenPhone REST: GET /calls.
| Argument | Type | Description |
|---|---|---|
| userId | string | Scope results to a user's access (a user id starting with 'US'). From openphone_list_users. |
| pageToken | string | Pagination token from a previous response's nextPageToken. |
| maxResults | integer | Results per page, 1-100. Default 10. |
| createdAfter | string | Only calls created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| participants* | array | A single participant phone number in E.164 format, e.g. '+15555555555' (required, exactly 1). |
| createdBefore | string | Only calls created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| phoneNumberId* | string | An OpenPhone phone-number id (starts with 'PN'). Get it from openphone_list_phone_numbers. |
List contacts in the workspace, optionally filtered by external ids or sources. Returns each contact's default fields (name, company, emails, phone numbers) and custom fields. OpenPhone REST: GET /contacts.
| Argument | Type | Description |
|---|---|---|
| sources | array | Filter to contacts created by these sources. |
| pageToken | string | Pagination token from a previous response's nextPageToken. |
| maxResults | integer | Results per page, 1-50. Default 10. |
| externalIds | array | Filter to contacts with these external ids (from an integrated system). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to contacts created by these sources."
},
"pageToken": {
"type": "string",
"description": "Pagination token from a previous response's nextPageToken."
},
"maxResults": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Results per page, 1-50. Default 10."
},
"externalIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to contacts with these external ids (from an integrated system)."
}
}
}List conversations (threads), most-recent activity first, optionally filtered by phone number(s), user, and created/updated date ranges. Each conversation has participants, assignee, and last-activity metadata. OpenPhone REST: GET /conversations.
| Argument | Type | Description |
|---|---|---|
| userId | string | Scope results to a user's access (a user id starting with 'US'). From openphone_list_users. |
| pageToken | string | Pagination token from a previous response's nextPageToken. |
| maxResults* | integer | Results per page, 1-100 (required). |
| createdAfter | string | Only conversations created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| phoneNumbers | array | Filter to conversations on these OpenPhone numbers (E.164 or 'PN...' ids), 1-100 items. |
| updatedAfter | string | Only conversations updated after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| createdBefore | string | Only conversations created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
List messages in a conversation between one of your OpenPhone numbers and one or more participants. Returns text, direction, status and timestamps. OpenPhone REST: GET /messages.
| Argument | Type | Description |
|---|---|---|
| userId | string | Scope results to a user's access (a user id starting with 'US'). From openphone_list_users. |
| pageToken | string | Pagination token from a previous response's nextPageToken. |
| maxResults | integer | Results per page, 1-100. Default 10. |
| createdAfter | string | Only messages created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| participants* | array | Participant phone numbers in E.164 format (e.g. '+15555555555'), 1-10 items (required). |
| createdBefore | string | Only messages created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| phoneNumberId* | string | An OpenPhone phone-number id (starts with 'PN'). Get it from openphone_list_phone_numbers. |
List the OpenPhone numbers in the workspace (id, number, name, formatted number, assigned users, restrictions). Usually the first call — most other tools need a phoneNumberId. OpenPhone REST: GET /phone-numbers.
| Argument | Type | Description |
|---|---|---|
| userId | string | Scope results to a user's access (a user id starting with 'US'). From openphone_list_users. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"userId": {
"type": "string",
"description": "Scope results to a user's access (a user id starting with 'US'). From openphone_list_users."
}
}
}List workspace users (id, email, name, role). Use to find a userId for scoping other calls. OpenPhone REST: GET /users.
| Argument | Type | Description |
|---|---|---|
| pageToken | string | Pagination token from a previous response's nextPageToken. |
| maxResults | integer | Results per page, 1-50. Default 10. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pageToken": {
"type": "string",
"description": "Pagination token from a previous response's nextPageToken."
},
"maxResults": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Results per page, 1-50. Default 10."
}
}
}List all webhooks configured in the workspace (id, url, events, status). Read-only inventory — this tool does not create or delete webhooks. OpenPhone REST: GET /webhooks.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Send an SMS/text message from one of your OpenPhone numbers to up to 10 recipients. WRITE ACTION — this actually sends a real text message (which may incur carrier cost and requires approved A2P 10DLC registration). OpenPhone REST: POST /messages.
| Argument | Type | Description |
|---|---|---|
| to* | array | Recipients in E.164 format (or contact ids), 1-10 items (required). |
| from* | string | The sending OpenPhone number — a phone-number id ('PN...') or E.164 number, e.g. '+15555555555' (required). |
| userId | string | The sending user id ('US...'); defaults to the phone number's owner. |
| content* | string | The message body, 1-1600 characters (required). |
| setInboxStatus | string | Set to 'done' to mark the conversation complete after sending. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"content",
"from",
"to"
],
"properties": {
"to": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "Recipients in E.164 format (or contact ids), 1-10 items (required)."
},
"from": {
"type": "string",
"minLength": 1,
"description": "The sending OpenPhone number — a phone-number id ('PN...') or E.164 number, e.g. '+15555555555' (required)."
},
"userId": {
"type": "string",
"description": "The sending user id ('US...'); defaults to the phone number's owner."
},
"content": {
"type": "string",
"maxLength": 1600,
"minLength": 1,
"description": "The message body, 1-1600 characters (required)."
},
"setInboxStatus": {
"enum": [
"done"
],
"type": "string",
"description": "Set to 'done' to mark the conversation complete after sending."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"phoneNumberId",
"participants"
],
"properties": {
"userId": {
"type": "string",
"description": "Scope results to a user's access (a user id starting with 'US'). From openphone_list_users."
},
"pageToken": {
"type": "string",
"description": "Pagination token from a previous response's nextPageToken."
},
"maxResults": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100. Default 10."
},
"createdAfter": {
"type": "string",
"description": "Only calls created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 1,
"minItems": 1,
"description": "A single participant phone number in E.164 format, e.g. '+15555555555' (required, exactly 1)."
},
"createdBefore": {
"type": "string",
"description": "Only calls created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"phoneNumberId": {
"type": "string",
"minLength": 1,
"description": "An OpenPhone phone-number id (starts with 'PN'). Get it from openphone_list_phone_numbers."
}
}
}| updatedBefore |
| string |
| Only conversations updated before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'. |
| excludeInactive | boolean | Exclude inactive conversations when true. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"maxResults"
],
"properties": {
"userId": {
"type": "string",
"description": "Scope results to a user's access (a user id starting with 'US'). From openphone_list_users."
},
"pageToken": {
"type": "string",
"description": "Pagination token from a previous response's nextPageToken."
},
"maxResults": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (required)."
},
"createdAfter": {
"type": "string",
"description": "Only conversations created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"phoneNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to conversations on these OpenPhone numbers (E.164 or 'PN...' ids), 1-100 items."
},
"updatedAfter": {
"type": "string",
"description": "Only conversations updated after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"createdBefore": {
"type": "string",
"description": "Only conversations created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"updatedBefore": {
"type": "string",
"description": "Only conversations updated before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"excludeInactive": {
"type": "boolean",
"description": "Exclude inactive conversations when true."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"phoneNumberId",
"participants"
],
"properties": {
"userId": {
"type": "string",
"description": "Scope results to a user's access (a user id starting with 'US'). From openphone_list_users."
},
"pageToken": {
"type": "string",
"description": "Pagination token from a previous response's nextPageToken."
},
"maxResults": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100. Default 10."
},
"createdAfter": {
"type": "string",
"description": "Only messages created after as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "Participant phone numbers in E.164 format (e.g. '+15555555555'), 1-10 items (required)."
},
"createdBefore": {
"type": "string",
"description": "Only messages created before as an ISO-8601 datetime, e.g. '2026-07-01T00:00:00Z'."
},
"phoneNumberId": {
"type": "string",
"minLength": 1,
"description": "An OpenPhone phone-number id (starts with 'PN'). Get it from openphone_list_phone_numbers."
}
}
}