Skip to main content
Glama

Draft a message

crm_draft_message

Write a message to a contact for a person to read, edit and send from their own mailbox. Nothing is sent. THIS SYSTEM HAS NO OUTBOUND CHANNEL (CRM-14). You write; a person reads it, edits it, sends it themselves, and records that it went. Never tell anyone a message was sent.

USE ONLY WHAT IS IN THE RECORD (CRM-10). The account's hook, trigger_event and path_in bullets; the contact's name and title. Never a fact about the person or the company that is not on file. If the record is thin the draft is short, not padded.

READ THE CAMPAIGN'S CLAIMS FIRST (crm_get_campaign). They are the things this business has decided it may assert about itself, written by a person. Anything beyond them is your invention, and the refused list is checked against your words at write time — but the list cannot catch an overstatement of a claim that is itself allowed, so stay inside what the claim actually says.

RATIONALE IS FOR THE REVIEWER AND IS NEVER SENT (CRM-16): which hook or bullet the angle rests on, why this contact rather than another at the same account, and anything you were unsure about. A draft with no rationale is a draft nobody can check.

Only named, live contacts. A gap row has no name to write to, and a departed contact has left. Check crm_drafts before writing a second message to someone who already has one waiting. Effects: draft recorded against the contact, unsent.

Input Schema

NameRequiredDescriptionDefault
bodyYesThe message. Write it as it would be sent, without a signature: it goes from somebody else's mailbox.
channelNoHow it would go. Default email.
subjectNoSubject line, where the channel has one.
rationaleYesFor the person reviewing it: the angle, why this contact, what you were unsure about. Never sent.
contact_idYesWho it is to, e.g. P-0001.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by declaring there is no outbound channel (CRM-14), that a refused list is checked against the written text at write time, and that the effect is an unsent draft recorded against the contact. What it does not disclose is the failure surface — what an invalid contact_id or a refused-list rejection returns, or whether a duplicate draft is blocked or merely discouraged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and the rule blocks are scannable tags (CRM-14, CRM-10, CRM-16). Some redundancy creeps in — 'nothing is sent' is restated three times and the rationale requirement is duplicated in the schema — but on a high-stakes constrained tool most of the prose earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies what the agent actually needs: the effect of a successful call, the source material allowed for the body, the reviewer-facing purpose of rationale, and the eligibility rules for contact_id. An agent can call this correctly without further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the prose adds real meaning the schema does not: rationale must name the hook or bullet the angle rests on and why this contact rather than another at the account, body carries no signature because it goes from someone else's mailbox, and contact_id must be a named live contact. The channel parameter is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource — write a message draft to a contact — and immediately bounds the scope with 'for a person to read, edit and send' and 'Nothing is sent.' It is clearly separable from crm_drafts (listing), crm_update_draft (editing), and crm_draft_outcome (recording an outcome).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions and alternatives are spelled out: read the campaign's claims via crm_get_campaign first, use only record content, check crm_drafts before writing a second message to the same person, and restrict to named live contacts (not gap rows, not departed contacts). Nothing about when-to-use is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.