Model Context Protocol (MCP) server for the CallRail REST API v3 — query calls, form submissions, transcripts, and more from Claude Code, Claude Desktop, Cursor, or any MCP client.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
call_eligibility_check
Audit whether a specific call qualifies as a Google Ads conversion. Checks gclid presence, answered-status, duration vs. Google's threshold (default 60s), and source. Useful for "where did my conversi
-
call_summary
Aggregate stats (total, answered, by source, duration) for a window
-
create_outbound_call
Place an outbound call (CallRail dials your tracker first, then bridges to recipient). Requires confirm_dialing=True as a safety guard — actually dials a real phone, costs minutes, has legal implicati
-
create_tracker
Provision a new tracking number. Requires confirm_billing=True as a safety guard against accidental AI provisioning
-
delete_tracker
Soft-delete a tracker (releases the phone number, preserves history)
-
get_call
Full detail for a specific call
-
get_call_recording
Recording URL (if recording enabled)
-
get_call_transcript
Conversation Intelligence transcript
-
get_form_submission
Single form-submission detail (was list+update only)
-
get_tag
Single tag detail (completes tag CRUD)
-
get_text_message
Single SMS conversation detail with all messages
-
get_tracker
Full detail for one tracker
-
list_accounts
List accessible CallRail accounts
-
list_calls
Paginated call list — filter by company / date / source / answered
-
list_companies
List companies (clients) under an account. Optional status="active" filter
-
list_form_submissions
CallRail Form Tracking submissions
-
list_tags
List tags in account or filtered to one company
-
list_text_messages
SMS conversations
-
list_trackers
List tracking phone numbers + their source mapping. Optional status="active" filter
-
list_users
Account users
-
search_calls_by_number
Find calls by phone number across a window
-
update_call
Update note, tags, spam flag, customer name, lead status
-
update_form_submission
Same field surface as update_call, plus value (numeric, supported on form submissions but NOT on calls — CallRail returns 500)
-
update_tracker
Update mutable settings: name, destination, whisper, greeting, SMS
-
usage_summary
Per-company cost-attribution breakdown for the cycle. Returns minutes used, active numbers, estimated $ cost share — sorted by biggest cost driver. Useful for "which client is burning my CallRail budg
analyzed commit 48c7ee6 · analyzer v17 · 1d ago
skills & prompt files 1
- agent-rulespghdma-callrail-mcp-48c7ee6/CLAUDE.md
filesystem 1
- fs pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/client.py :21
from pathlib import Path
network 1
- net pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/client.py :24
from urllib.parse import quote, urljoin
secrets 1
- secrets pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/client.py :119
key = os.environ.get("CALLRAIL_API_KEY", "").strip()
tool registrations 50
- list_accounts pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :485
- list_companies pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :498
- list_trackers pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :540
- get_tracker pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :574
- create_tracker pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :595
- update_tracker pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :748
- delete_tracker pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :853
- list_calls pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :881
- get_call pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :932
- call_summary pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :957
- list_form_submissions pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1035
- list_text_messages pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1084
- list_users pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1130
- get_call_recording pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1152
- get_call_transcript pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1185
- search_calls_by_number pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1217
- update_call pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1284
- add_call_tags pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1394
- remove_call_tags pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1437
- update_form_submission pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1464
- list_tags pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1527
- create_tag pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1548
- update_tag pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1580
- delete_tag pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1627
- usage_summary pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :1712
- call_eligibility_check pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2001
- compare_periods pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2171
- bulk_update_calls pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2368
- spam_detector pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2582
- get_company pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2805
- create_company pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2830
- update_company pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2897
- delete_company pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :2980
- get_user pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3004
- create_user pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3031
- update_user pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3108
- delete_user pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3192
- get_form_submission pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3216
- get_text_message pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3249
- list_webhooks pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3273
- get_webhook pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3301
- get_tag pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3345
- list_integrations pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3365
- get_integration pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3400
- create_form_submission pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3424
- create_outbound_call pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3516
- create_notification pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3577
- update_notification pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3657
- delete_notification pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3748
- list_notifications pghdma-callrail-mcp-48c7ee6/src/callrail_mcp/server.py :3780
declared dependencies 2
- mcp@>=1.23.0
- requests@>=2.33.0