{"name":"io.github.pghdma/callrail-mcp","slug":"pghdma-callrail-mcp","title":"CallRail MCP","description":"CallRail REST API v3: 57 tools for calls, leads, trackers, tags, users, and agency reporting.","url":"https://mcp.market/server/pghdma-callrail-mcp","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":20,"stars":2,"forks":0,"downloads_week":null,"last_push_at":"2026-09-07T21:45:18.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/pghdma/callrail-mcp","website":null,"version":"1.2.2","remotes":[],"packages":[{"registryType":"pypi","identifier":"callrail-mcp","version":"1.2.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"CallRail API key. Get one at Settings > API Keys in your CallRail account (requires Account Admin). Alternatively set CALLRAIL_API_KEY_FILE to a file path containing the key.","isRequired":true,"format":"string","isSecret":true,"name":"CALLRAIL_API_KEY"}]}],"tools":[{"name":"add_call_tags","description":"Append tags to a call WITHOUT replacing existing ones.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bulk_update_calls","description":"Apply the same update to every call matching a filter.","write_action":true,"price_micros":0,"input_schema":null},{"name":"call_eligibility_check","description":"Audit whether a specific call is/was eligible to count as a Google Ads conversion. Useful for \"where did my conversion go\" debugging.","write_action":false,"price_micros":0,"input_schema":null},{"name":"call_stats","description":"Server-side call aggregation via CallRail's /calls/summary.json.","write_action":false,"price_micros":0,"input_schema":null},{"name":"call_summary","description":"Summarize calls over a date window.","write_action":false,"price_micros":0,"input_schema":null},{"name":"call_timeseries","description":"Call volume over time via CallRail's /calls/timeseries.json. One request for a trend line instead of client-side bucketing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"compare_periods","description":"Compare current N-day window vs the previous N-day window.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_company","description":"Create a new company (client) under the account.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_form_submission","description":"Manually create a form submission (e.g. backfill an offline lead).","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_notification","description":"Create a notification rule (who gets pinged on which event).","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_outbound_call","description":"Place an outbound call. THIS ACTUALLY DIALS REAL PHONES.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_tag","description":"Create a new tag scoped to one company.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_tracker","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_user","description":"Invite a new user. CallRail emails them an account-creation link.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_company","description":"Soft-delete a company. Status flips to 'disabled', records retained.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_notification","description":"Delete a notification rule. The rule is gone. To keep but mute it, prefer `update_notification(send_email=False, send_desktop=False, send_push=False)`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_tag","description":"Delete a tag definition from the account. Removes it from any calls or form submissions that had it applied.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_tracker","description":"Delete (disable) a tracker. Soft-removes it from active trackers; the tracker keeps its call history but stops receiving new calls. The underlying phone number is released.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_user","description":"Remove a user from the account.","write_action":true,"price_micros":0,"input_schema":null},{"name":"form_stats","description":"Server-side form-submission totals via /forms/summary.json.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_call","description":"Get full detail for a specific call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_call_page_views","description":"Get the visitor's page-view history behind a call: which pages they browsed (with timestamps) before and around dialing. Pairs with `call_eligibility_check` for conversion debugging: shows the actual session journey that led to the call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_call_recording","description":"Get the recording URL for a call. Returns a short-lived signed URL. Fetch and use it within a few minutes before it expires.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_call_transcript","description":"Get the AI transcript for a call. Requires CallRail Conversation Intelligence (CallScribe) to be enabled on the company at the time the call was placed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_company","description":"Get full detail for one company.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_form_submission","description":"Get full detail for one form submission, including all submitted field data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_integration","description":"Get full detail for one integration.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_lead_timeline","description":"Get a lead's full cross-channel activity timeline: every call, form submission, and text thread from that person in one response, with first-touch/last-touch attribution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_sms_thread","description":"Get one SMS thread's lead-management record (notes, value, tags, lead_qualification, state). For the message transcript itself use `get_text_message` with the conversation id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tag","description":"Get full detail for one tag.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_text_message","description":"Get full detail for one SMS conversation, including all messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tracker","description":"Get full detail for a specific tracker.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_user","description":"Get full detail for one user on the account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_accounts","description":"List CallRail accounts accessible to this API key.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_calls","description":"List calls. Paginated. Filterable by company, date window, and answer status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_companies","description":"List companies (client businesses) under a CallRail account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_form_submissions","description":"List form submissions captured by CallRail's Form Tracking. Paginated. Filterable by company and date window.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_integrations","description":"List integrations attached to one company (GMB, Google Ads, Facebook, Slack, Webhooks, etc.).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_leads","description":"List leads (unique people) across calls, forms, and texts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_notifications","description":"List notification rules on the account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sms_threads","description":"List SMS threads. Unlike `list_text_messages` (conversation transcripts), threads carry the lead-management surface: `notes`, `value`, `tags`, `lead_qualification`, `state`. Threads are UPDATABLE via `update_sms_thread`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"List all tags in the account, or filtered to one company.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_text_messages","description":"List SMS/text message conversations sent to or received via CallRail trackers. Paginated. Filterable by company and date window.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_trackers","description":"List tracking phone numbers (trackers). Each tracker maps a pool of phone numbers to a traffic source (Google Ads, Organic, Direct, etc.).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_users","description":"List all users on the account. Returns a single page of up to `MAX_PER_PAGE` users (no pagination support; adequate for small and medium agency accounts).","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_call_tags","description":"Remove specific tags from a call (case-sensitive on tag name).","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_calls_by_number","description":"Find calls from/to a specific phone number. Matches on the last 10 digits of the stored `customer_phone_number` so any format works.","write_action":false,"price_micros":0,"input_schema":null},{"name":"spam_detector","description":"Heuristically identify likely-spam calls and (optionally) tag them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_call","description":"Update an existing call: notes, tags, spam flag, customer name, lead status.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_company","description":"Update mutable settings on a company. Pass None to leave a field unchanged; only fields with explicit values are sent in the PUT body.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_form_submission","description":"Update an existing form submission: notes, tags, value, spam, lead status.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_notification","description":"Update a notification rule. Pass None to leave a field unchanged; only fields with explicit values are sent in the PUT body.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_sms_thread","description":"Update an SMS thread's lead-management fields. This is the texting equivalent of `update_call`. Closes the gap where texting leads couldn't be tagged / noted / qualified via API.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_tag","description":"Rename or recolor a tag.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_tracker","description":"Update a tracker's mutable settings: name, destination, whisper, greeting, SMS.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_user","description":"Update mutable user fields. Pass None to leave unchanged.","write_action":true,"price_micros":0,"input_schema":null},{"name":"usage_summary","description":"Per-company cost-attribution summary for the current cycle.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-20T00:26:06.538Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:26:06.518Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 12 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"callrail-mcp","version":"1.2.2","found":true,"license":"MIT","dependencyCount":10,"publishedAt":"2026-09-07T21:45:52.113988Z","repositoryUrl":"https://github.com/pghdma/callrail-mcp"}],"repo":{"found":true,"owner":"pghdma","repo":"callrail-mcp","archived":false,"pushedAt":"2026-09-07T21:45:18Z","stars":2,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/262260099?v=4","ownerCreatedAt":"2026-02-18T04:05:27Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/262260099?v=4&s=128","source":"github"},"presence":{"stars":2,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-07T21:45:18.000Z","score":20}}}},"grade_history":[],"reviews":[]}