redtail-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@redtail-mcpget my agenda for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
redtail-mcp
An agent-agnostic FastMCP stdio server that exposes the Redtail CRM public API (TWAPI) as Model Context Protocol tools.
Any MCP client can drive it — Claude Desktop, Claude Code, or a custom agent built on the Claude Agent SDK or another MCP-aware framework. The server speaks JSON-RPC over stdio; stdout is the protocol stream, all logs go to stderr.
Two things distinguish it from a thin wrapper:
Firm-identity externalization. No advisor names, user ids, rep codes, or activity-code labels live in the tool modules.
config.pyloads them from JSON env vars (with placeholder defaults) so the same binary serves a different firm by pointing at a different.env.Multi-user attribution. Optionally set
REDTAIL_USER_KEYSto a map of{name: durable_user_key}. When a write tool is called with anacting_userargument, the server authenticates as that user via Redtail'sUserKeyAuth, so the new record'sadded_byis stamped with the real person — on one shared API subscription.
Install
Requires Python 3.11 and uv.
git clone https://github.com/your-org/redtail-mcp.git
cd redtail-mcp
uv sync
cp .env.example .env # then fill in the three required secretsConfiguration
Everything the server reads at boot is documented inline in
.env.example. At minimum you must set:
Variable | Purpose |
| TWAPI subscription key from the Redtail developer portal. |
| Shared-account login (fallback attribution for writes). |
| Shared-account password. |
Optional — override placeholder defaults to make the server your firm's:
Variable | Purpose |
| JSON |
| User id used as the attendee floor / default owner. |
| JSON |
| JSON |
| JSON |
| CSV allowlist — trim the exposed catalog without removing capability. |
| Transport tuning. |
The server fails loud (sys.exit 2) at boot on a missing credential or a
malformed JSON map — a misconfigured deployment dies instead of silently
mis-routing writes.
Register with Claude Desktop
Add an entry under mcpServers in claude_desktop_config.json:
{
"mcpServers": {
"redtail": {
"command": "uv",
"args": [
"--directory", "/path/to/redtail-mcp",
"run", "python", "server.py"
]
}
}
}Restart Claude Desktop; the redtail server should appear in the MCP panel
with its tools listed.
Register with Claude Code
claude mcp add redtail -- uv --directory /path/to/redtail-mcp run python server.pyOr add it to a project's .mcp.json:
{
"mcpServers": {
"redtail": {
"command": "uv",
"args": ["--directory", "/path/to/redtail-mcp", "run", "python", "server.py"]
}
}
}Tool reference
43 tools are implemented across four modules. The default catalog exposes
them all; narrow it with REDTAIL_ALLOWED_TOOLS.
Activities (tools_activities.py)
Tool | Purpose | Key args |
| One person's or the team's activities for today / a range. |
|
| Every open activity past its due date. |
|
| Activities in an explicit ISO date range. |
|
| Fetch a single activity by id. |
|
| Activity history for one contact. |
|
| Create a task activity (owner defaults resolved from name). |
|
| Log a completed phone call against a contact. |
|
| Add a durable note as a logged activity. |
|
| Mark an activity done with an optional result. |
|
| Move an activity's start / end. |
|
| Change an activity's owner / attendees. |
|
| General activity create with full field control. |
|
| Patch fields on an existing activity. |
|
| Apply the same patch across many activities. |
|
| Delete an activity. |
|
Contacts (tools_contacts.py)
Tool | Purpose | Key args |
| Full-text contact search. |
|
| Exact-email lookup. |
|
| Full contact record. |
|
| Notes attached to a contact. |
|
| Memberships / important-info sheet. |
|
| Attorneys / CPAs / other advisors linked to a contact. |
|
| Family + spouse links. |
|
| Profile photo URL. |
|
| Household record. |
|
| Fuzzy identity resolution — "which contact do you mean?". |
|
| Create a new contact. |
|
| Patch fields on an existing contact. |
|
| Add a phone number. |
|
| Add an email address. |
|
| Add a mailing address. |
|
| Link a family relationship. |
|
| Put a contact on a tag (cohort). |
|
| Add a keyword to a contact. |
|
| Patch important-info fields. |
|
| Remove a phone / email / address / etc. |
|
Onboarding (tools_onboarding.py)
Tool | Purpose | Key args |
| Example workflow: create a bundle of onboarding tasks for a new client, routed off the rep code. Override the plan by passing |
|
Reference (tools_reference.py)
Tool | Purpose | Key args |
| Enumerate every user in the Redtail database. | — |
| Enumerate activity codes. | — |
| Enumerate contact categories. | — |
| Enumerate tags. | — |
| List contacts on a tag (cohort). |
|
| Filtered contact list (category / status / updated-since). |
|
| Take a contact off a tag. |
|
Usage examples
Once the server is registered, natural-language prompts flow through the
tools. All examples below use the fictional client Jane Sample.
Read. "Who's on my calendar this week?" — the client calls get_agenda
with user_ids resolved from the caller's name via REDTAIL_TEAM_MAP.
Write with default attribution. "Log a call with Jane Sample: reviewed
her rollover paperwork, will send the DocuSign tomorrow." — the client
calls log_call(contact_id=..., subject="Rollover paperwork review", note="..."). The record's added_by is the shared TWAPI user.
Write with per-user attribution. With REDTAIL_USER_KEYS populated and
an agent that tags the inbound user (e.g. [alice|100001]), pass
acting_user="alice" on any write tool. The server switches to
UserKeyAuth for that call and Redtail stamps the record as coming from
Alice — even though the API subscription is shared.
Onboarding. "Start onboarding for Jane Sample, rep code REP01." —
create_onboarding_tasks(contact_id=..., rep_code="REP01") creates the
example task bundle, routed to the owner mapped in
REDTAIL_REP_ADVISOR_MAP.
Development
uv sync --extra dev
uv run pytest
uv run python tests/smoke_stdio.pyDESIGN.md covers the architecture — request path, auth model, per-user
attribution decision, truncation contract, and the firm-identity
externalization pattern.
License
MIT. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/LucasNS231/redtail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server