Handset MCP server
io.github.handset-hq/handset·v0.1.1·1 starsA business phone system for AI agents: send texts, place calls, read transcripts, buy numbers.
1 stars42 downloads/wk
Reviews
Write oneNobody has reviewed Handset yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Handset tools (15, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
buy_numberwrite actionBILLABLE in live mode (monthly rental): purchase a phone number for a tenant. In test mode numbers are free and simulated. Confirm with the user before buying on a live key.
create_tenantwrite actionCreate a tenant (one customer business). Returns the tenant with its tnt_\u2026 id.
get_callRetrieve a call: status, duration, AI summary (arrives ~15s after a transcribed call ends), and the event timeline (gathers, keypresses, streams).
get_threadRead one conversation's messages, oldest first.
get_transcriptRead a call's transcript so far \u2014 callable mid-call for live transcription.
get_usageThis month's usage by kind (segments, minutes, transcription, streams\u2026). Test-mode usage is metered but never billed.
list_callsList calls with status and duration, newest first.
list_conversationsList message threads, newest activity first.
list_numbersList the account's phone numbers, optionally for one tenant.
list_tenantsList tenants on this Handset account. A tenant is one of your customers' businesses \u2014 it owns numbers, conversations, and opt-out lists.
list_voicemailsList voicemails with transcripts and time-limited audio URLs.
make_callOUTWARD-FACING: place a click-to-call \u2014 dials connect_to (the agent's phone) first, then to (the customer), and bridges them; both see the tenant number. Live mode rings real phones and bills per minute \u2014 confirm with the user first. Test mode simulates the whole lifecycle. Set transcribe for live transcript + AI summary.
search_numbersSearch purchasable phone numbers by area code. Free and instant in test mode.
send_messagewrite actionOUTWARD-FACING: send an SMS (or MMS with media_urls) from a tenant number. In live mode this texts a real person and bills per segment \u2014 confirm with the user first. Test mode is simulated and free. Replies thread by conversation_id.
start_transcriptionTurn on live transcription for an in-progress call (either direction). Idempotent. Billed per transcribed minute; an AI summary generates after hangup.
Public scan report
scanner v0.1.10 · 2026-11-03 · same rubric, same numbers if you re-run it
- Code scan2 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 68 days ago12/15
- Maintainer identityregistry namespace matches repository owner6/10
How Handset compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 75/100
- higher than 45% of 48,255 servers
- Tools
- 15
- the typical server has 7
- Tools that change things
- 20%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 1
- more than 65% of 28,688 servers
- Downloads a week
- 42
- more than 34% of 12,191 servers with a package
What its tools let an agent do: 10 read · 2 create · 1 change · 1 send or post · 1 run or deploy
Install Handset in Claude Code, Cursor or VS Code
Runs npx -y @handset/mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add handset -- npx -y @handset/mcp
What the publisher says
From the Handset repository's README, as published. We do not edit it. Read it on GitHub
Handset UI
Texting inside your product, in an afternoon.
Open-source React components for embedded messaging, built on the Handset API. Distributed the shadcn way: the CLI copies the source into your repo, styled with your Tailwind tokens, yours to change.
# 1. Point the shadcn CLI at the Handset registry
npx shadcn@latest registry add @handset=https://ui.handset.dev/r/{name}.json
# 2. Install a complete texting surface + the server proxy route
npx shadcn@latest add @handset/messaging @handset/next-routesSet HANDSETAPIKEY in your env, wire resolveTenantId() in the generated route to your session, and render it:
import { HandsetProvider } from "@handset/react";
import { Messaging } from "@/components/handset/messaging";
export default function MessagesPage() {
return (
<HandsetProvider>
<div className="h-[600px]">
<Messaging />
</div>
</HandsetProvider>
);
}What's in the registry
Architecture
Two layers, like shadcn-on-Radix:
useConversations, useThread, useComposer, plus segment math and a tiny client. Logic we maintain; bring your own UI if you prefer.
- @handset/react (npm, versioned) — headless hooks:
components, copied into your project as source.
- The registry (apps/www/registry) — the visual
Components never hold API keys. They call proxy routes in your backend (added by @handset/next-routes); your server holds the Handset key and your existing session auth decides which tenant each signed-in user sees. The Handset API handles the rest — numbers, delivery, threading, 10DLC compliance, STOP/HELP.
Development
pnpm install
pnpm --filter @handset/react build # hooks package
pnpm dev # docs site + live demo at localhost:3000
pnpm registry:build # compile registry.json → public/r/*.jsonThe docs site serves a mock Handset API (apps/www/app/api/handset) so the demo works with zero setup.
Requirements
mock data without one
- React 18+ (components target React 19 / Tailwind v4 / shadcn CLI ≥ 3)
- A Handset account for real traffic — the demo runs on
Roadmap
See ROADMAP.md — shipped components, what's next (call summaries, MMS attachments, more framework proxies), and non-goals. Issues with real use cases move items up the list.
License
MIT © Handset HQ, Inc.
Nothing above is checked by us. What we check is on the safety report.
Handset: common questions
- Is Handset MCP server safe?
- Mostly: it is graded B (75/100). Read the Handset safety report
- How do I install Handset?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Handset need an API key?
- Yes. The registry entry asks for
HANDSET_API_KEY. - Is Handset maintained?
- The last commit was 70 days ago (2026-08-26). The latest release is v0.1.1.
- How does Handset compare with other MCP servers?
- safety score 75/100 (higher than 45% of 48,255 servers); tools 15 (the typical server has 7); tools that change things 20% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.