Smallest MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ATOMS_API_KEY | Yes | Your Smallest AI API key |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_agentsA | List AI agents in your organization. Returns agent configuration including voice, LLM model, language settings, and call statistics. Supports pagination, filtering, and sorting. |
| get_agentA | Get full details for a single agent by ID, including voice config, model, prompt, language, call behavior settings, and workflow type. |
| get_agent_promptA | Read the current system prompt / instructions for an agent. Returns the prompt text and any configured tools. |
| create_agentA | Create a new AI agent in your organization. By default the agent is a single_prompt agent with gpt-4.1 model and daniel voice (waves_lightning_v3_1); set workflow_type to multi_agents for a Playbooks agent (an intent router + specialist SOP playbooks — add them via add_playbooks after creation). The STT transcriber defaults to Pulse — change it (e.g. to pulse-legacy) via update_agent after creation. Returns the created agent's ID. For single_prompt agents, set the prompt via update_agent after creation. |
| update_agentA | Update an agent — name, prompt/instructions, first message, voice, model, language, variables, the pre-call API, and other settings. Only provided fields are updated. Config changes are saved to the branch's draft (publish_draft to make them live, or test first with test_agent using include_draft); metadata (name, phone numbers, inbound toggle) applies immediately. To add/remove the agent's API-call tools use add_agent_tool / remove_agent_tool; for end_call/transfer use configure_call_actions. To manage post-call disposition metrics use add_disposition_metrics / remove_disposition_metrics (upsert/remove by identifier; existing metrics are preserved) — get_agent lists the current ones. |
| add_agent_toolA | Add (or update) one or more API-call tools on a single_prompt agent. API-call tools let the agent make an HTTP request to an external API during a call — e.g. look up an order, book an appointment, or post to a CRM. The agent decides when to invoke a tool from its name + description, filling in any declared parameters. Pass a single tool via the top-level fields, or several at once via |
| remove_agent_toolA | Remove a tool (by name) from a single_prompt agent. Works for any tool type (api_call, transfer_call, etc.). The change is saved to the agent's draft — publish_draft to make it live. Use get_agent_prompt to see the agent's current tool names. |
| configure_call_actionsA | Enable/disable the agent's end_call action and set/remove a transfer_call number. These are AGENT-LEVEL settings (the console's Tools tab) that apply to the whole agent — for multi-agent (Playbooks) agents the runtime injects them into every playbook, never gated behind auth. Changes land on the branch's draft; publish_draft to go live. Without an enabled end_call the agent cannot hang up on its own. |
| delete_agentA | Archive (soft-delete) an agent by its ID. Archived agents are inactive. Cannot archive agents with active campaigns. Unarchiving is not supported — to restore an agent, use app.smallest.ai. |
| duplicate_agentA | Duplicate an existing agent, creating a new agent with the same configuration. The new agent is created in the target organization (defaults to your own org). Useful for creating variants of an agent for testing or A/B comparisons. |
| get_playbooksA | Read a multi_agents agent's Playbooks config: the intent router (fallback + mid-call rerouting), shared auth tools, and the SOP list (id, intent, auth level, tool count). Pass playbook_id for one playbook's full detail (prompt, tools, intent description). Reads the branch's open draft when it has one, else its head; pass branch_id to target a specific branch. |
| add_playbooksA | Add one or more playbooks (SOPs) to a multi_agents agent. Each playbook = an intent (name + description the classifier routes on) + a specialist prompt + optional scoped tools and an auth level. Edits land on the branch's draft — use publish_draft to go live. The first enabled playbook becomes the router fallback automatically if none is set. Names and intent names must be unique on the agent (case-insensitive, archived included). |
| update_playbookA | Edit one playbook (SOP) on a multi_agents agent: change its prompt, intent, auth level, tools, or archive/restore it (enabled=false/true — playbooks are archived, never deleted, so call history stays resolvable). Edits land on a draft (auto-created when draft_id omitted); publish_draft to go live. The router fallback cannot be archived — repoint it first via configure_playbooks. |
| configure_playbooksA | Configure the section-level Playbooks settings of a multi_agents agent: the intent router (fallback playbook, mid-call rerouting), the conversation guide (persona/tone/global rules injected into EVERY playbook — define them once here, not per-SOP), and the shared identity tools that satisfy weak/strong auth. Edits land on a draft (auto-created when draft_id omitted); publish_draft to go live. |
| list_branchesA | List the agent's branches. The live (serving) branch is marked with isLive; hasOpenDraft flags a branch that has unpublished draft changes waiting for publish_draft. Use this to find a branch_id (for make_branch_live) or to see where edits are in progress before publishing or discarding. |
| create_branchA | Create a new branch to work on a set of changes in isolation, without touching the live agent. The branch starts from a source branch's head (the live branch by default). Edit its draft with the usual tools (pass the new branch_id), publish_draft to commit, then make_branch_live to serve it. |
| rename_branchA | Rename a branch. The default branch cannot be renamed, and 'main' is reserved. Use list_branches to find branch IDs. |
| delete_branchA | Delete (archive) a branch, along with its revisions and open draft. The default branch cannot be deleted, and the live branch cannot be deleted — make another branch live first. Use list_branches to find branch IDs. |
| make_branch_liveA | Make a branch's head revision the live (serving) configuration for the agent. Under the branch model only a branch head can serve — so this switches which branch the agent runs. Use list_branches to find branch IDs. The head must have passed its security check (otherwise this is rejected). |
| get_branch_draftA | Get a branch's pending (unpublished) draft — its latest draft revision and edit history (which sections changed per edit). Each branch has at most one open draft. Use list_branches to see which branches have one (hasOpenDraft). |
| publish_draftA | Publish a branch's pending draft edits, committing them as a new revision. If the branch is live, the changes serve immediately; otherwise use make_branch_live to serve them. Publishing runs an async security check on the prompt; this tool waits for it and reports the real outcome — if the check is still running after ~60s the changes aren't committed yet (they commit automatically once it passes), and if it fails the draft stays open so you can fix the prompt and publish again. Can also discard the pending draft instead of publishing. |
| list_revisionsA | List the committed revisions on a specific branch, newest first. Revisions are branch-scoped — this returns one branch's history, not a global list. Shows revision number, label, who published it, and its security-check status. Use get_revision for a single revision's config. |
| get_revisionA | Get a single committed revision — its metadata and fully resolved config. Use list_revisions to find revision IDs. |
| diffA | Compare two agent configs and show what changed, section by section (field paths with old/new values). Each side is a reference: a revision_id (from list_revisions) or ":draft" for a branch's open draft (branch_id from list_branches). E.g. diff a branch's draft against the live head to preview a publish. |
| test_agentA | Start a test call against a branch — its committed head by default, its open draft (include_draft: true) to try unpublished changes, or a specific revision_id. Modes: webcall (default) or chat return LiveKit connection details; telephony places a real call to to_phone (required, E.164). |
| get_audiencesA | List all audiences in your organization. Shows audience name, member count, linked campaigns, and the phone number column name. Audiences are contact lists used by campaigns for outbound calling. |
| get_audienceA | Get details for a specific audience by ID, including name, description, and phone number column name. |
| delete_audienceA | Delete an audience by ID. Cannot delete an audience that is linked to a campaign — remove or delete the campaign first. |
| get_audience_membersA | List members (contacts) in an audience with pagination. Each member has a data object containing their phone number and any other fields from the original CSV upload. |
| search_audience_membersA | Search for members in an audience. Supports general search across all fields, or field-specific search (e.g. by phone number or name). Returns up to 10 results. |
| add_audience_membersA | Add members (contacts) to an existing audience. Each member must include the phone number column defined when the audience was created (use get_audience to check). Max 10,000 members per request. Duplicate phone numbers are skipped. |
| delete_audience_membersA | Remove specific members from an audience by their member IDs. Use get_audience_members or search_audience_members to find member IDs. If all members are removed, the audience itself may be deleted. |
| get_campaignsB | List outbound calling campaigns for your organization. Shows campaign status, progress, agent used, audience, retry config, and execution details. |
| get_campaignA | Get detailed information about a specific campaign, including status, execution progress, events timeline, and metrics (participants, contacts called, contacts connected). |
| create_campaignA | Create a new outbound calling campaign. Requires an agent and an audience (contact list). The campaign is created in draft status unless a scheduled time is provided, in which case it will be scheduled. Use start_campaign to begin dialing. |
| start_campaignA | Start a campaign to begin dialing contacts. Works on campaigns in draft or paused status. For paused campaigns, this resumes from where it left off. The campaign enters processing state and begins making calls asynchronously. |
| pause_campaignA | Pause a running campaign. Active calls in progress will complete, but no new calls will be initiated. Use start_campaign to resume. |
| delete_campaignA | Delete a campaign. This permanently removes the campaign and its execution data. |
| export_campaign_logsA | Export call logs for a campaign. Returns detailed call data grouped by audience member, including call status, duration, recording URL, transcript, cost, retry attempts, and post-call analytics. |
| list_callsA | Search and list calls across your organization. Use this to browse calls with filters (by status, type, date range, agent, phone number, campaign). Returns a summary list with metadata, duration, cost, and disconnection reasons. For detailed info about a specific call (status, transcript, errors, debugging), use debug_call instead. |
| make_callA | Initiate an outbound phone call using a specific agent. The agent will call the provided phone number and follow its configured prompt. Only telephony outbound calls are supported — for webcall or chat, use app.smallest.ai. |
| chat_with_agentA | Hold a TEXT conversation with a published agent over the realtime chat WebSocket (mode=chat) — no audio, no phone, just text in / text out. Sends each message in |
| debug_callA | Get detailed info about a single call — use this to check call status, debug failures, or get transcripts. Returns call status, failure reasons, errors, transcript, post-call analytics, latency metrics, cost breakdown, variables, voice/model config at time of call, and full event timeline. Works for calls in any state (queued, in-progress, completed, failed). Use a callId (e.g. CALL-1234567890-abc123). |
| get_usage_statsA | Get call usage statistics for your organization — total calls, pickup rate, duration, costs, and unique users reached. Each metric includes current period, previous period, and percent change. Useful for understanding usage patterns and costs. |
| get_credit_balanceA | Get the current credit balance for your organization, including plan information and enterprise status. |
| get_credit_ledgerB | Get the credit transaction history (ledger) for your organization. Shows purchases, usage deductions, bonuses, admin adjustments, coupon credits, and more. Supports filtering by date range, transaction type, and scope. |
| get_usage_breakdownA | Get a breakdown of credit usage by feature and product scope for your organization. Shows how credits are being consumed across different services (voice AI, voice models, platform). |
| get_invoicesA | List all invoices for your organization from Stripe. Shows invoice details including amounts, status, and dates. |
| get_payment_methodsA | List all payment methods (cards) configured for your organization. Shows card brand, last 4 digits, expiry, and which is the default. |
| get_auto_reloadA | Get the current auto-reload configuration for your organization. Auto-reload automatically adds credits when your balance drops below a threshold. |
| get_billing_alertsA | Get the current billing alert configuration for your organization. Billing alerts notify you when credit usage reaches specified thresholds. |
| update_billing_alertsA | Configure billing alert settings. Set up to 3 credit usage thresholds that trigger email notifications. Alerts can be sent to additional email addresses beyond the account owner. |
| get_plansA | List available plans and optionally get the features included in a specific plan. Use this to understand plan pricing, included features, and credit rates. |
| validate_couponA | Check if a coupon code is valid and see how many credits it would give. Does not redeem the coupon — use redeem_coupon to actually apply it. |
| redeem_couponA | Redeem a coupon code to add credits to your organization's balance. Use validate_coupon first to check the code before redeeming. |
| create_webhookA | Register a NEW webhook endpoint (delivery URL). Use this only when the target URL does not already exist as a webhook. To point an agent at an ALREADY-REGISTERED webhook, do NOT create a new one — call get_webhooks to find it, then attach_agent_webhook. |
| get_webhooksA | List the organization's webhooks, or fetch a single one by ID. Each webhook includes its subscriptions — the agents and event types (pre-conversation, post-conversation, analytics-completed) it's attached to. |
| update_webhookA | Update a webhook's endpoint URL, description, or custom headers. Provide at least one field. This does NOT change which agents/events are attached — subscriptions are fixed at creation. To change attachments, delete the webhook and create a new one. |
| delete_webhookA | Delete a webhook and all of its agent/event subscriptions. This detaches it from every agent it was attached to. |
| get_webhook_eventsA | List recent delivery events (attempts, payloads, and outcomes) for a webhook. Use this to verify that call-start/call-end/analytics events are firing and reaching your endpoint. |
| attach_agent_webhookA | Attach an EXISTING webhook to an agent for the given events. This is the right tool for 'send this agent's call-start/call-end/analytics to an already-created webhook' — find the webhook with get_webhooks first, then pass its id here. WARNING: this REPLACES the agent's current subscriptions — the backend deletes all of the agent's existing webhook subscriptions and recreates them for this webhook only, so an agent points at one webhook at a time. To only remove subscriptions, use detach_agent_webhooks. Never guess or default the event types. If the user hasn't said which of call-start (pre-conversation), call-end (post-conversation), or analytics (analytics-completed) they want, ask them before calling. |
| get_agent_webhooksA | List an agent's current webhook subscriptions — which webhook it's attached to and for which events (pre-conversation, post-conversation, analytics-completed). |
| detach_agent_webhooksA | Remove ALL of an agent's webhook subscriptions. The agent will stop receiving call-start/call-end/analytics deliveries until re-attached with attach_agent_webhook. This does not delete the webhook endpoint itself. |
| get_phone_numbersA | List phone numbers acquired by your organization. Shows product ID (needed for make_call's from_product_id), number, country, provider, and which agent it's assigned to. |
| get_voicesA | List available voices for agents. Returns voice IDs, names, gender, language, and supported models. Use the voiceId with update_agent's synthesizer.voiceConfig to change an agent's voice. A voice whose supportedModels include 'lightning-v3.1-pro' is a Lightning V3.1 Pro voice (use it with the waves_lightning_v3_1 model). Optionally include your organization's cloned voices. |
| get_dashboardA | Get the full analytics dashboard in a single call — includes summary KPIs, call volume timeseries, call outcomes, pickup rates by number, hourly performance, and duration stats. |
| get_call_volumeB | Get call volume over time as a daily timeseries. Shows how many calls were made each day in the date range. |
| get_call_outcomesA | Get call outcome distribution over time — daily breakdown of completed, failed, and no-answer calls, plus totals. |
| get_agent_performanceB | Compare agent performance — shows each agent's total calls, average duration, completion rate, and cost. Use to find top and bottom performers. |
| get_hourly_performanceA | Get performance metrics by hour of day (0-23). Shows call count, average duration, and cost per hour. Useful for identifying peak hours. |
| get_pickup_ratesA | Get pickup rate by phone number — shows total calls, answered calls, and pickup rate for each outbound number. Useful for optimizing caller IDs. |
| get_phone_number_trendsB | Get per-phone-number daily trends — calls, pickup rate, and average duration per day for each number. |
| get_weekly_trendsB | Get weekly aggregated metrics — calls, average duration, and cost per week. Good for spotting week-over-week trends. |
| get_duration_statsB | Get call duration statistics — average, median, min, max, and p95 duration. Shows how long calls typically last. |
| get_attempt_cohortsA | Get attempt cohort analysis — shows volume and success rate by attempt number (1st attempt, 2nd attempt, etc.). Useful for optimizing retry strategies. |
| get_call_counts_by_dayC | Get call count per day as a simple histogram. Shows { day, count } pairs. |
| get_credit_usageA | Get daily credit/cost usage over time — shows credits consumed each day and total for the period. Useful for billing and budget tracking. |
| get_concurrencyA | Get concurrent call counts for a specific date — minute-by-minute concurrency data plus per-agent max concurrency. Shows how many calls were running simultaneously. |
| get_call_start_distributionA | Get call start distribution by hour for a specific date — shows how many calls started in each hour (0-23). Useful for scheduling and capacity planning. |
| get_daily_summaryA | Get summary statistics for a specific date — total calls, completed, failed, no-answer, in-progress, in-queue, average duration, and total cost. |
| text_to_speechA | Convert text to speech audio using Smallest AI's Lightning TTS. Saves the audio file to the specified path. IMPORTANT: Always ask the user where to save the file before calling. Suggest ~/Desktop/.wav as default. Do NOT retry if successful — the file is saved even if inline audio rendering fails. |
| transcribe_audioA | Transcribe an audio file to text using Smallest AI's Pulse STT. Supports 32+ languages. IMPORTANT: Always ask the user what language the audio is in before calling this tool. Pass a file path on the user's machine (e.g. ~/Desktop/recording.wav) or a publicly accessible URL. Note: files uploaded to the chat sandbox are NOT accessible — ask the user for the actual file path on their machine or a URL instead. |
| invite_memberA | Invite one or more users to your organization by email. They'll receive an invitation email to join. Requires admin role on the organization. You can invite as 'member' (default) or 'admin'. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| platform-overview | Overview of the Atoms platform, key concepts, and terminology |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smallest-inc/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server