Skip to main content
Glama
Google Voice MCP

Google Voice MCP

by hashirskh

Google Voice MCP

An unofficial MCP server for Google Voice SMS. It provides tools to check login, list and read conversations, send and reply to SMS, and mark conversations read. Google Voice has no public SMS API for this use case; the server automates the Google Voice website through system Chrome and Playwright's Chrome DevTools Protocol connection. Google can change or restrict this behavior at any time.

This repository includes Windows Chrome discovery, localhost-only debugging, a write guard, and checks around multiline composition and visible send errors. See LICENSE for the applicable license.

Requirements

  • Node.js 18 or newer

  • System Google Chrome or Chromium

  • On Linux headless servers, Xvfb

Playwright is used as an automation library; the server runs your installed Chrome. Its browser profile contains your Google session and must stay private.

Related MCP server: google-messages-mcp

Install from this repository

git clone https://github.com/hashirskh/googlevoice-mcp.git
cd googlevoice-mcp
npm ci --ignore-scripts
npm run build

npm ci --ignore-scripts avoids downloading Playwright's bundled browser. Install Chrome separately. To start the MCP server locally, run node dist/server.js from the repository directory. It communicates over stdio.

Set these environment variables in your MCP client:

Name

Purpose

GOOGLEVOICE_STATE_DIR

Absolute path to a private local directory for the browser profile. Keep it outside the repository.

GOOGLEVOICE_DEBUG_PORT

A free localhost port, for example 19223.

GOOGLEVOICE_ALLOW_WRITES

Leave unset or 0 while setting up. Set to 1 only when you intend to allow send, reply, and mark-read tools.

Register the server in your MCP client with the absolute path to node and the absolute path to dist/server.js. For Codex, configure a local stdio MCP server named googlevoice; then restart the client or start a new chat. The npm package name is not unique to this Git repository, so npx mcp-googlevoice may run a different published package. Use the locally built server path when you want this version.

Sign in

Call gv_login, then sign in to the intended Google account directly in the dedicated Chrome window and complete any Google verification there. Open https://voice.google.com/u/0/messages in that same browser profile and call gv_check_login. If several Google accounts are in the profile, verify which account Google Voice selected. Never paste passwords, verification codes, cookies, or your browser profile into an agent chat or Git repository.

On a remote Linux server, interactive login may require a localhost SSH tunnel and chrome://inspect. The remote debugging port must stay private; do not publish or forward it to an untrusted network.

Tools

Tool

Action

gv_login

Open system Chrome for interactive Google login

gv_check_login

Check whether the Google Voice inbox is accessible

gv_list_sms

List conversations

gv_read_sms

Read a conversation

gv_send_sms

Send a new SMS

gv_reply_sms

Reply to a conversation

gv_mark_read

Mark a conversation read

Opening a conversation can itself change its read status. Before using gv_list_sms for unread messages, inspect whether the current Google Voice interface still preserves unread state during listing.

Sending behavior and limits

The local changes fill the complete message without Enter keystrokes, verify the composed text before clicking Send once, and check visible Google Voice send errors. gv_send_sms can accept multiple recipients, which may create a group conversation; use one phone number per call for separate texts. A successful tool response means submission to the Google Voice interface, not confirmed delivery. Google Voice can reject, delay, or limit messages. Verify receipt or the conversation's status, and never automatically retry an uncertain send.

Do not commit node_modules, dist, state directories, browser profiles, cookies, or credentials. The included .gitignore excludes common local artifacts, but always review git status before publishing changes.

Available Tools

7 tools
gv_check_loginB

Check whether the user is currently logged into Google Voice.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about the result shape (boolean vs. status object), whether the check makes a network request that can fail or time out, or how a logged-out state is reported. It also never states that it is a side-effect-free read, which cannot be assumed given the sibling gv_login mutates session state.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. Nothing could be removed without losing meaning, and the purpose is stated first.

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

Completeness3/5

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

With no output schema and no annotations, the description should at minimum describe what the check returns so the agent can branch on it; that information is entirely absent. The tool is simple enough that an agent can still invoke it correctly, but interpreting the result is left to guesswork.

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?

The tool takes zero parameters, so there is no parameter semantics to explain; the schema is trivially complete. Baseline 4 is appropriate for a zero-parameter tool.

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

Purpose4/5

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

States a specific verb ('Check') and a specific resource ('whether the user is currently logged into Google Voice'), so an agent knows exactly what question the tool answers. It does not explicitly distinguish itself from the sibling gv_login, which is the obvious point of confusion, keeping it from a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus gv_login, nor any stated prerequisite or typical workflow (e.g., check before SMS operations, call gv_login if false). Usage is only inferable from the tool name and purpose, not from the description.

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

gv_list_smsB

List recent SMS conversations from Google Voice. Returns conversation ID, contact, last message snippet, timestamp, and read/unread status.

NameRequiredDescriptionDefault
limitNoMaximum number of conversations to return. Default: 20.
filterNoFilter conversations: "all" or "unread" only. Default: "all".

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It discloses the returned fields, which is useful, but says nothing about authentication prerequisites, ordering/recency definition, pagination beyond the limit, or whether the call has side effects (e.g., does listing mark anything read?).

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

Conciseness5/5

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

Two sentences, front-loaded with the action and resource, followed by the return shape. No filler or redundancy.

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

Completeness3/5

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

For a zero-required-parameter read tool with no output schema, listing the returned fields covers the main gap. However, the presence of gv_login/gv_check_login siblings implies an auth prerequisite that the description never mentions, leaving a real operational gap.

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

Parameters3/5

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

Schema description coverage is 100%, with both limit and filter fully documented including the enum values and defaults, so the baseline of 3 applies. The description adds no parameter-level meaning beyond what the schema already provides.

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

Purpose4/5

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

States a specific verb and resource ("List recent SMS conversations from Google Voice") plus the returned fields, so an agent knows this is the conversation-level listing tool rather than a message-body reader. It never names gv_read_sms or the other siblings, so differentiation is inferred rather than explicit.

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

Usage Guidelines3/5

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

Usage is only implied: "list recent conversations" plus "last message snippet" signals this is for scanning the inbox, not reading full threads. There is no explicit when-to-use, no routing to gv_read_sms for full content, and no mention that a prior gv_login/gv_check_login may be required.

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

gv_loginA

Launch system Chrome with remote debugging for Google login. The user connects via SSH tunnel and chrome://inspect to complete login (including 2FA). After login, call gv_check_login to verify.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: it spawns a local Chrome process with remote debugging, the human must connect via SSH tunnel and chrome://inspect, and 2FA is completed manually. It omits details an agent may need, such as which port is opened, whether the call blocks until login finishes, and the security implications of enabling remote debugging.

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

Conciseness5/5

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

Three short sentences, each earning its place: what is launched, how the user completes login, and the mandated follow-up call. The action is front-loaded and there is no redundant phrasing.

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

Completeness4/5

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

For a zero-parameter tool with no output schema, the description covers the essential mechanics and the handoff to gv_check_login. It is slightly incomplete in not indicating what the call returns or how the agent should wait for the human step to finish before verifying.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already shows. Baseline for a parameterless tool applies.

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?

The description names a specific action and resource: launching system Chrome with remote debugging specifically for Google login. It also distinguishes itself from the sibling gv_check_login by assigning that tool the verification role, so an agent can place this tool in the flow without ambiguity.

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?

It states the use case (Google login, including 2FA) and the explicit next step: call gv_check_login afterward. It does not state when this tool should NOT be used or what to do if Chrome is already running with a debugging port, so it stops short of full routing guidance.

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

gv_mark_readB

Mark an SMS conversation as read.

NameRequiredDescriptionDefault
conversation_idYesThe conversation ID to mark as read.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden for a state-changing operation. It does not say whether the change is idempotent, whether it requires an authenticated session, whether it applies per-conversation or globally, or what happens if the conversation ID is invalid or already read.

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

Conciseness5/5

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

A single front-loaded sentence with no filler or redundancy. The action is stated first and nothing extraneous is included.

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

Completeness3/5

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

For a one-parameter tool with a fully documented schema, the definition is minimally sufficient to invoke correctly. But as an unannotated mutation tool it omits side effects, authentication expectations, and the relationship to gv_read_sms, leaving real gaps an agent would want covered.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is documented as 'The conversation ID to mark as read.' The description adds no format hints, sourcing guidance (where to obtain a conversation_id), or constraints, so it sits at the baseline for a fully documented schema.

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

Purpose4/5

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

The description names a specific verb and resource: 'Mark an SMS conversation as read.' An agent can understand the action immediately. However, it does not distinguish this tool from the sibling gv_read_sms, which plausibly also touches read state, so the boundary between the two is left ambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus gv_read_sms or gv_list_sms, no prerequisites (e.g., login state, conversation ownership), and no stated exclusions. The agent must infer the workflow context entirely.

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

gv_read_smsA

Read messages within a specific SMS conversation. Returns individual messages with sender, text, timestamp, and direction.

NameRequiredDescriptionDefault
limitNoMaximum number of messages to return (most recent). Default: 50.
filterNoFilter: "all" returns messages regardless, "unread" only returns messages if the conversation has unread messages. Default: "all".
conversation_idYesThe conversation ID (from gv_list_sms results).

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the behavioral burden. It does disclose the return shape (sender, text, timestamp, direction), which is valuable with no output schema, and 'Read' implies a non-mutating operation. It says nothing about pagination/ordering behavior beyond the schema's limit default, nor about permission or rate-limit constraints.

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?

Two short sentences with the scope stated first, so it is well front-loaded and free of filler. The second sentence mildly restates 'Read messages' while adding the return-field detail, which is the only minor redundancy.

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

Completeness4/5

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

For a simple three-parameter read tool with fully documented schema and no output schema, the description covers what it does and what it returns. The remaining gaps — explicit differentiation from gv_list_sms and any pagination behavior — are small rather than blocking.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains conversation_id provenance, limit semantics ('most recent', default 50), and the all/unread enum. The description adds no parameter-level detail beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb and resource — reading messages within a single SMS conversation — which is distinguishable from the sibling gv_list_sms (conversation listing) and gv_reply_sms/gv_send_sms (writes). It does not explicitly name those siblings, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase 'within a specific SMS conversation' signals this is the per-conversation read, and the schema notes conversation_id comes from gv_list_sms results. There is no explicit when-to-use statement, no exclusions, and no routing advice against gv_list_sms or gv_mark_read.

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

gv_reply_smsB

Reply to an existing SMS conversation.

NameRequiredDescriptionDefault
textYesThe reply message text.
conversation_idYesThe conversation ID to reply to.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a write/send operation but does not disclose side effects, authentication requirements, whether the conversation must already exist, error behavior, or whether the reply affects read state.

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?

The description is a single front-loaded sentence with no wasted wording. It is concise, though the brevity leaves important behavioral context unstated.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is too sparse. It identifies the action but omits important context such as required conversation state, side effects, failure modes, and how the reply behaves relative to existing messages.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents both parameters. The description adds no meaning beyond confirming that the tool replies within a conversation, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Reply to an existing SMS conversation.' This clearly identifies the action and scope, though it does not explicitly distinguish the tool from sibling gv_send_sms beyond the implication of replying within an existing thread.

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

Usage Guidelines3/5

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

The phrase 'existing SMS conversation' implies the tool should be used for threaded replies rather than new outbound messages, but it does not explicitly say when to use this instead of gv_send_sms or what prerequisites apply. Usage is implied rather than stated.

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

gv_send_smsC

Send a new SMS message to one or more phone numbers via Google Voice.

NameRequiredDescriptionDefault
textYesThe message text to send.
phone_numberYesThe recipient phone number(s) (e.g., "+1234567890" or ["+1234567890", "+0987654321"]).

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden, yet it discloses no behavioral traits beyond the bare action. It does not say whether side effects are immediate and irreversible, what happens if one of several recipients fails, whether rate limits or per-message costs apply, or what result is returned.

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?

It is a single well-formed sentence with the action and channel front-loaded and no wasted words. It is efficient, though its brevity is partly the source of the disclosure gaps rather than a virtue of tight editing.

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

Completeness3/5

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

For a simple two-parameter tool with a fully described schema and no output schema, the core action is adequately covered. However, with zero annotations the definition should at least note the authentication prerequisite and the outcome of a multi-recipient send to be complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented with types and an example. The phrase "one or more phone numbers" usefully reinforces the multi-recipient semantics of the oneOf schema but adds no format or validation detail beyond it.

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

Purpose4/5

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

The description gives a specific verb and resource ("Send a new SMS message") plus the delivery channel ("Google Voice") and the recipient scope ("one or more phone numbers"). The word "new" implicitly separates it from gv_reply_sms, but no sibling is named explicitly.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance: nothing states that this is for starting a conversation rather than continuing one (gv_reply_sms), and no prerequisite such as authenticating via gv_login/gv_check_login is mentioned. Usage is only weakly inferable from the word "new".

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.0.1
    • First observedgv_check_login
    • First observedgv_list_sms
    • First observedgv_login
    • First observedgv_mark_read
    • First observedgv_read_sms
    • First observedgv_reply_sms
    • First observedgv_send_sms

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation4/5

Most tools are clearly distinct (list vs read vs send vs mark_read target different operations). The closest pair is gv_reply_sms vs gv_send_sms and gv_list_sms vs gv_read_sms, but descriptions clarify that one replies to an existing conversation and the other sends to new numbers, and one lists conversations while the other reads messages within.

Naming Consistency5/5

All tools follow a consistent gv_ prefix with a clear verb_noun pattern (list_sms, send_sms, read_sms, reply_sms, mark_read, check_login). No camelCase mixing or vague verbs.

Tool Count5/5

Seven tools is well-scoped for an SMS-focused Google Voice integration, with each tool earning its place across the login and messaging lifecycle.

Completeness4/5

The SMS lifecycle is well covered: login, verify, list, read, send, reply, and mark read. Minor gaps exist (no delete/archive conversation, no unread marking or search, and no call/voicemail coverage despite the 'Google Voice' name), but core workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Access your Carbon Voice conversations and voice memos—retrieving messages, conversations, voice memos, and more as well as send messages to Carbon Voice users.
    44
    396 npm
    10
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables sending, reading, searching, and managing SMS/RCS messages through Google Messages web interface, requiring a persistent browser session paired with a phone.
    AGPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables agents to reuse a human-completed Chrome login session to open confirmed origins, read visible page text, and perform single click, fill, or key press actions without ever handling passwords or exposing cookies.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to connect to Google Messages for Web for session-status checks and, eventually, message preparation and confirmation workflows without exposing secrets.
    1
    Apache 2.0