Skip to main content
Glama

send_email

Send an outbound email via the company's Resend connection. Resolves the per-company Resend API key + from identity, then sends to a single recipient. Honors the do_not_contact suppression list (crm_leads): if the recipient is marked do_not_contact, the send is refused. RECIPIENT RULE: when emailing a CRM LEAD, do NOT type their address yourself — draft with draft_lead_email/draft_outreach and deliver with send_lead_draft, which reads the lead's real email from the database. Only pass to directly for a non-lead recipient whose exact address the operator literally provided in this conversation. NEVER guess, infer, or fabricate an email address — a wrong guess sends a real email to a stranger. Use when the operator gives you an exact non-lead recipient address to email; for CRM leads use send_lead_draft instead.

Routing: Send an outbound email to an operator-given address → use this; for CRM leads use send_lead_draft (DB-derived recipient, respects do_not_contact)

[outbound-tier — EVERY call needs a manager's approval (per-send human rail): each request queues its own approval card and sends exactly once on approve. There is no standing grant for this tool.]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYesRecipient email address (single recipient).
fromNoOptional explicit from address (e.g. "Jane <jane@acme.com>"). If omitted, defaults to no-reply@<resolved from_domain>.
htmlNoHTML body of the email. Provide html and/or text (at least one is required).
textNoPlain-text body of the email. Provide text and/or html (at least one is required).
lead_idNoOptional UUID of the crm_leads row this email targets. Used for telemetry/linking; the do_not_contact check is keyed on (company_id, to) regardless.
subjectYesEmail subject line.
draft_idNoOptional UUID of the lead_drafts row being sent. If provided, the Resend email id returned by the send is recorded onto that draft (resend_email_id) so engagement webhook events (opens/clicks/replies via /resend-events) correlate back to it.
reply_toNoOptional Reply-To address.
companyIdYesFreedomOS company id to act within (you must be a member). Required for company-scoped tools.
company_idNoCompany UUID. Optional — defaults to the caller's company context. Used to resolve the Resend key and scope the do_not_contact check.
sequence_idNoOptional UUID of the outreach_sequences row backing an autonomous warm send. Required ONLY on the outreach-autosend path (executionSource=autonomous_warm); the warm-send gate verifies the sequence is ACTIVE and the lead is enrolled, and authorizes when the sequence is live (send_mode=auto) OR the enrollment is verifiably human-made (enrollment_source=manual — the human-enrolled lane, 2026-07-22). Ignored on the human path.

TDQS

A4.7/5.0
Behavior5/5

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

Despite no annotations, the description discloses key behaviors: honors do_not_contact suppression list, requires per-send human approval (approval card), sends exactly once. Mentions resolution of Resend API key and from identity.

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?

Well-structured with sections, but somewhat lengthy due to detailed rules. Front-loads core purpose and then provides necessary context. Could be slightly more concise but justified by complexity.

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

Completeness4/5

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

Given 11 parameters and no output schema, the description covers important aspects: behavior, constraints, approval requirement, and suppression list. Missing details on return values, but acceptable for an outbound email tool.

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?

With 100% schema coverage, baseline is 3. Description adds value by explaining the purpose of lead_id, draft_id, sequence_id, and clarifying the to parameter rule. Provides context beyond 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 description clearly states 'Send an outbound email via the company's Resend connection' with specific verb and resource, and distinguishes from sibling send_lead_draft by specifying recipient rules.

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?

Explicitly states when to use this tool vs sibling: 'Use when the operator gives you an exact non-lead recipient address to email; for CRM leads use send_lead_draft instead.' Also includes a RECIPIENT RULE section with detailed instructions.

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.

TDQS

A3.6/5.0
Disambiguation4/5

The tool set is heavily disambiguated by detailed routing descriptions, domain prefixes, and lifecycle verbs, so most tools have a clear intended purpose. However, at 297 tools there are still close pairs and overlapping decision surfaces (e.g., approval workflows, 'what should I work on' readers, multiple finance/ads readers) that require careful description reading to avoid misselection.

Naming Consistency4/5

Naming is predominantly consistent snake_case verb_noun with strong domain prefixes like shopify_, x_, posthog_, and list_/create_/update_ patterns. Minor inconsistencies exist, such as several collection-returning tools using get_ (get_team_members, get_icps, get_okrs) instead of list_, and some generate_ vs create_ vs draft_ verbs, but the pattern is still predictable overall.

Tool Count1/5

297 tools is an extreme outlier and far beyond a usable MCP tool surface. Even a large suite has no justification for this count in one server; the agent would struggle to select among hundreds of similarly descriptive tools, and the natural 3-15 tool range is exceeded by nearly 20x.

Completeness4/5

The individual domains represented — OKRs, CRM/leads, Shopify, content pipelines, ads, PostHog, team hiring, knowledge, finance, and session management — are covered remarkably well with full lifecycle patterns. Minor gaps exist, such as no full deal CRUD, no delete for several Google/Shopify artifacts, and some analytical surfaces being read-heavy, but most workflows can be completed without dead ends.

Resources