Upfirst's MCP server connects your Upfirst account to an AI assistant like Claude, Cursor, VS Code, or Codex. Once it's connected, you can ask your assistant for information about your calls, or ask it to make changes to your account, without opening the Upfirst dashboard.
MCP stands for Model Context Protocol. It's an open standard that lets AI assistants connect to outside tools. You don't need to know anything about it to use this. Your assistant handles the technical part.
There is nothing to install and no API key to create. The server address is https://mcp.upfirst.ai. The first time your assistant connects, it opens the Upfirst sign-in page. You approve access once, and the connection stays bound to your organization from then on.
What you can do with it
Your assistant gets 17 tools. Some read your account and some change it. Together they cover four areas:
Calls. Read your call history, the details of a single call, and full transcripts.
Account and receptionists. See an overview of your whole account, and read or change a receptionist's greeting, goodbye, voice tone, speech rate, hold music, and spam blocking.
Skills. Create, edit, and switch off the actions a receptionist takes on a call: texting a caller, texting a scheduling link, and transferring the call.
Knowledge. Read, add, edit, and delete the training your receptionist answers callers from.
Examples of what to ask
What you want | What to ask |
Call volume | "How many calls did we get this week?" |
Common questions | "What are the most common questions people ask on calls?" |
Read a call | "Read me the transcript of the call from Tuesday afternoon." |
Find specific calls | "Show me every call last month where someone asked about pricing." |
Update training | "Update my receptionist's knowledge about our pricing." |
Change transfer rules | "Adjust my call transfer rules so I don't get transfers on weekends." |
Change the greeting | "Change my greeting to mention that we're closed for the holidays." |
Add a text message | "Text callers our address when they ask where we're located." |
Set up from scratch | "Set up a receptionist for a two-person plumbing company in Miami." |
You don't need to know the tool names. Ask in plain language and your assistant picks the right tool.
How to connect
The setup is different for each assistant. Pick yours below. Whichever you use, the first call opens Upfirst's sign-in page, and you approve access once.
1. Claude (desktop app and claude.ai)
Upfirst connects to Claude as a custom connector.
Open Customize > Connectors at claude.ai/customize/connectors
Click +, then Add custom connector
Name it Upfirst
Paste https://mcp.upfirst.ai as the remote MCP server URL
Leave the advanced Client ID and Client Secret fields empty
Click Add, then Connect, sign in to Upfirst, and approve access
If you'd rather have Claude walk you through it, paste the setup prompt from upfirst.ai/docs/mcp into a chat and Claude will guide you one step at a time.
On Claude Team and Enterprise plans, an owner adds the connector once under Organization settings. Everyone else just clicks Connect.
2. Claude Code
Run claude mcp add --transport http upfirst https://mcp.upfirst.ai in your terminal. That adds it to the current project. Add --scope user to make it available everywhere. Then run /mcp inside Claude Code and sign in.
3. Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"upfirst": {
"url": "https://mcp.upfirst.ai"
}
}
}
Use .cursor/mcp.json inside a project instead to scope it to that project. Cursor prompts you to sign in the first time it calls the server.
4. VS Code
Add this to .vscode/mcp.json:
{
"servers": {
"upfirst": {
"type": "http",
"url": "https://mcp.upfirst.ai"
}
}
}
Start the server from the play button in the config file, then use it from Copilot's agent mode. Sign in when prompted.
5. Codex
Add this to ~/.codex/config.toml:
[mcp_servers.upfirst] url = "https://mcp.upfirst.ai"
Then run codex mcp login upfirst to authorize.
6. Any other assistant
Any client that supports remote MCP servers over HTTP will work. Point it at https://mcp.upfirst.ai as a streamable HTTP server. It handles the sign-in on the first call.
The full list of tools
Every tool carries a tag for what it does to your data. Read fetches data and never changes anything. Write creates or updates a record. Delete permanently removes a record, with no undo.
Account and receptionists
Tool | Type | What it does |
get_account_overview | Read | A snapshot of the whole account: business name, every receptionist with its timezone, greeting, phone numbers, skills and knowledge, and how many calls were handled in the last 30 days. Test and archived calls aren't counted. |
list_agents | Read | Lists your receptionists with their ids. |
get_agent_by_id | Read | One receptionist's full settings: greeting and goodbye messages, voice tone, speech rate, hold music, language, timezone, spam and toll-free blocking, and attached phone numbers. |
update_agent | Write | Changes a receptionist's greeting, goodbye, voice tone (friendly or professional), speech rate (0.7 to 1.2), hold music (ring tone, gentle guitar, marimba, or soft keys), spam blocking, and toll-free blocking. Only the fields you send change. |
Voice, timezone, and language are managed on the dashboard and can't be changed here. The blocking flags apply to one receptionist at a time over MCP; the dashboard sets them for all receptionists at once.
Skills
A skill is an action a receptionist can take on a call. Each kind has its own tools, so the settings you pass are always the ones that kind uses.
Tool | Type | What it does |
list_agent_skills | Read | Lists the skills set up for a receptionist, including switched-off ones. Can be filtered to one kind: sendSms, sendScheduleSms, transferCall, scheduleSlot, or customWebhook. |
create_sms_skill | Write | Adds a texting skill. sendSms texts your message as written. sendScheduleSms texts it along with your scheduling link. You set the message (up to 306 characters) and an instruction for when to send it. |
update_sms_skill | Write | Changes a texting skill's name, message, instruction, kind, or on/off state. |
delete_sms_skill | Delete | Permanently deletes a texting skill. The receptionist stops sending that message immediately. |
create_transfer_call_skill | Write | Adds a call transfer rule. You set the condition for when to transfer, what the receptionist says first, and one or more destination numbers tried in order. |
update_transfer_call_skill | Write | Changes a transfer rule, including its destinations and its schedule. |
Transfer rule options. When you create or edit a transfer rule, your assistant can also set:
Ring time per destination, from 5 to 60 seconds. Default is 30.
What happens on no answer: end the call (default) or return the caller to the receptionist.
Transfer method: cold (default) hands the caller over directly, warm briefs the person first.
Caller ID the destination sees: your Upfirst number (default) or the caller's number.
Recording: stop recording at the transfer (default) or keep recording the full call.
Schedule: the weekly hours the transfer is offered. This is how you stop weekend transfers.
Every destination number must be in the same country as one of your Upfirst numbers, and must be in full international format, like +12025550123. Options you don't set use the same defaults as the dashboard, so a rule created through your assistant behaves exactly like one built in the UI.
There is no tool for deleting a transfer rule. That's done on the Upfirst dashboard. Through your assistant you can switch one off instead, which stops the transfer while keeping the rule set up.
Scheduling and webhook skills are read-only here. They depend on calendar and webhook setup that lives on the dashboard.
Knowledge
Your receptionist's knowledge is what it answers callers from. In the Upfirst dashboard these entries live under Training.
Tool | Type | What it does |
get_agent_knowledge | Read | Reads a receptionist's training. Every entry comes back whole with its full content, never a preview. Can return one entry by id. |
create_agent_knowledge | Write | Adds a text entry, up to 250,000 characters. New entries go to the top of the list. |
update_agent_knowledge | Write | Changes an entry's name, content, on/off state, or schedule. |
delete_agent_knowledge | Delete | Permanently deletes an entry. |
Editing replaces the whole entry. Content is never appended. Your assistant reads the entry first and sends back the full text you want it to have, including the parts you're keeping. If you ask it to add one line to your pricing entry, it will rewrite the entry with that line included.
Shared entries affect every receptionist. If an entry is shared across your organization, editing or deleting it changes what all of your receptionists say.
Changes retrain the receptionist automatically and take effect within minutes. There is no publish step.
Importing knowledge by scanning a website URL is dashboard-only. New entries created through your assistant are always plain text.
Calls
Tool | Type | What it does |
list_calls | Read | Lists and filters your call history, newest first. Returns compact rows: caller, time, duration, outcome, tags, linked contact, and the number of turns in the transcript. |
get_call_by_id | Read | Full details of one call: timing, outcome, caller and receptionist numbers, the AI-written summary, information collected from the caller, which skills the receptionist used and when each fired, tags, and your team's comments. |
get_call_transcript | Read | The conversation text of one call, as ordered turns stamped with an [mm:ss] offset and the speaker. |
How you can filter calls:
Outcome. Every call has exactly one: test, blocked, spam, hung up, or completed.
Free-text search across call summaries and transcripts.
Tags. Match calls carrying any of the tags you name.
Date range. A plain date like 2026-08-28 means that calendar day in your business timezone.
Archived calls. Archived calls are excluded unless you ask for them specifically.
Transcript speakers are Agent (your AI receptionist), Caller (the person who dialed), and Transferee (a person the call was handed to).
Business hours schedules
A schedule restricts a knowledge entry or a transfer rule to certain hours, using your receptionist's business timezone. Each weekday is switched on or off, with one or more time windows.
Outside its windows, a scheduled knowledge entry behaves as if it doesn't exist, so your receptionist never answers from it at the wrong time. This makes schedules a dependable way to handle facts that change with the clock. To make open and closed hours foolproof, add one entry restricted to your open hours that says "We are currently open," and a second restricted to your closed hours that says "We are currently closed." Only one is ever active, so the receptionist can't mix them up.
Schedules are honored on calls for transfer skills and knowledge entries. Other skill kinds can store one but ignore it.
Rules that apply to everything
Ids come from list tools. Your assistant looks these up on its own. You never need to find an id yourself.
Long lists come back in pages. List tools return a total count, so your assistant knows how much more there is.
Dates use your business timezone unless a precise timestamp is given.
Deletes are permanent. There is no restore over this connection. A deleted skill or knowledge entry is gone, and the receptionist stops using it within minutes. Getting it back means creating it again from scratch.
Only finished calls appear. A call shows up shortly after it ends.
What you can't do over MCP
These stay in the Upfirst dashboard:
Changing a receptionist's voice, timezone, or language
Creating or editing scheduling skills and webhook skills
Deleting a call transfer rule (you can switch it off instead)
Importing knowledge by scanning a website URL
Billing, phone numbers, team members, and notification settings
Security and access
There are no API keys. Authorization is a standard OAuth 2.1 sign-in. Nothing to copy, paste, or store.
Your assistant reaches only the organization you signed in as. Every tool is scoped to that organization, and records from any other one are never accessible.
It can read and change things. Within your organization, your assistant can read calls and transcripts and change receptionist settings, skills, and training. Treat the connection the way you would treat being signed in to the dashboard.
Call recordings are not sent. Your assistant can read summaries and transcripts, not the audio.
You can disconnect the server in your assistant's settings at any time.
Troubleshooting
A call I just took isn't showing up. Only finished calls appear, and a call shows up shortly after it ends. Calls in progress aren't available until they hang up. If a call is still missing, check whether it was archived, since archived calls are excluded by default.
My assistant says a skill wasn't found. A skill's kind is fixed when it's created. Asking to edit a scheduling or webhook skill with the transfer tools reads as not found, because those kinds are dashboard-only.
My text message was rejected. SMS messages pass a content filter that rejects promotional or otherwise restricted wording. Rewrite it as a plain informational message.
A transfer destination was rejected. Every destination must be in the same country as one of your Upfirst numbers, and must be written in full international format, like +12025550123.
My knowledge edit removed something. Editing replaces an entry's content entirely. Ask your assistant to read the entry first, then make the change, so nothing is dropped.
I want to start answering calls with Upfirst. We give you a phone number. You can hand that number out directly, but most businesses forward calls to it from the line they already use. You choose how much to forward: every call, only the ones you miss, or, depending on your phone or carrier, only during certain hours. See our call forwarding guide for your provider.
Full technical reference
Every tool, every setting, and every option is documented at upfirst.ai/docs/mcp.
