Skip to main content
Glama
VoIPSense Maroc MCP Server

VoIPSense Maroc MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
VOIPSENSE_API_KEYYesYour vsk_… API key
VOIPSENSE_BASE_URLNoAPI base URL (for staging or a white-label host)https://app.voipsensemaroc.com/api/v1
VOIPSENSE_READ_ONLYNoSet to true to expose only read tools (no calls, no lead injection)false
VOIPSENSE_DOWNLOAD_DIRNoWhere download_recording saves files~/Downloads/voipsense

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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_callsB

GET /v1/calls (permission cdr:read). Unified call history (auto-dialer, manual, inbound) with agent dispositions. Use to read call outcomes back into a CRM/ERP.

list_recordingsA

GET /v1/recordings (permission recordings:read). Returns { total, page, limit, recordings: [{ filename, date, duration, src, dst, direction, disposition, format }] }. Pass filename to download_recording.

download_recordingA

GET /v1/recordings/download (permission recordings:read). Saves the audio file to disk and returns its local path. file is the filename field from list_recordings (or from a call.ended webhook).

list_listsA

GET /v1/lists (permission callcenter:read). Returns each list's id, number, name, volume and own outbound line (outboundLine: { id, name } or null = follows the campaign).

list_campaignsB

GET /v1/campaigns (permission callcenter:read). Campaigns with status, dialMethod, number of lists and agents, and outbound routing (outboundLine, lineSelectionMode FIXED|FIRST_FREE, linePool).

list_dispositionsA

GET /v1/dispositions (permission callcenter:read). Outcome codes agents set on calls: [{ id, code, name, category, isSystem }]. Optional campaignId adds campaign-specific dispositions.

ghl_list_subaccountsA

GET /v1/ghl/subaccounts (permission callcenter:read or callcenter:write). Returns [{ locationId, name, services: [...] }] for each linked GoHighLevel sub-account.

make_callA

POST /v1/calls (permission pbx:write). connectTo.type=extension: rings the agent first, then dials to and bridges (click-to-call). queue: dials to then connects to a queue. ivr: dials to then connects to an IVR menu. Returns { callId, status: 'initiated', … }; keep callId to transfer/hang up.

hangup_callA

DELETE /v1/calls/{callId} (permission pbx:write). Ends all legs of the call (normal clearing). Fires the call.ended webhook. 404 = unknown or already ended; 409 = no active channel.

transfer_callA

POST /v1/calls/{callId}/transfer (permission pbx:write). Blind-transfers the remote party to an extension, queue or external number. The agent's extension is released; the call keeps its callId. Call must be established (else 409). 400 invalid target · 404 not found · 422 destination unreachable.

inject_leadA

POST /v1/leads (permission callcenter:write). Adds one contact to a list (by listId or listName). Idempotent: a number already in the list returns duplicate=true without creating a duplicate. Returns { id, phone, created, duplicate, listId, listNumber, listName, … }.

inject_leads_batchA

POST /v1/leads/batch (permission callcenter:write). End-to-end provisioning in one call: create/reuse a list, attach it to a campaign (create it if needed), enroll agents, and inject leads. More than 500 leads are automatically split into batches of 500 and the totals are aggregated. Idempotent by phone number per list: safe to resend the full file every cycle. Without any campaign field the leads go to a plain list ("Mes listes" mode).

ghl_set_servicesA

POST /v1/ghl/services (permission callcenter:write). Tells VoIPSense which service(s) a GoHighLevel contact asked for; the agent sees it preselected during the call and the GHL call note gets a 'Service: …' line. Send a single contact (phone + service/services) or up to 500 items. Returns { received, saved, services, errors }.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.8/5.0

Scored across 13 tools

Disambiguation4/5

Each tool maps to a distinct resource+action: call history vs recordings vs lists vs campaigns vs dispositions are easy to tell apart, and make_call/hangup_call/transfer_call have clearly separate lifecycle roles. Minor overlap exists between inject_lead and inject_leads_batch (the batch variant silently creates lists, campaigns and agent enrollments), and ghl_set_services touches the same lead/contact surface, but descriptions clarify the boundaries.

Naming Consistency4/5

Nearly all tools follow a clear snake_case verb_noun pattern (list_calls, download_recording, make_call, hangup_call, transfer_call, inject_lead). The only deviations are the ghl_-namespaced tools (ghl_list_subaccounts, ghl_set_services), where the namespace prefix precedes rather than follows the verb, which is readable but breaks the pattern.

Tool Count5/5

13 tools is well within the sweet spot and every tool earns its place: six read/listing tools over distinct resources, three call-control tools, and three write/provisioning tools plus the GHL scoping pair. Nothing looks redundant or padded.

Completeness3/5

Read coverage is strong (calls, recordings, lists, campaigns, dispositions, GHL subaccounts) and outbound call control plus lead injection are covered, but the lifecycle is visibly incomplete: there is no get_call by id, no create/update/delete for lists and campaigns, no campaign start/pause control, no lead removal or update, and dispositions are read-only. Agents can read broadly and dial, but must fall back on the batch injector for any list/campaign/agent provisioning.