Skip to main content
Glama

Draft personalized outreach emails

exim__email__draft

Generates personalized outreach emails for the companies in a collection from a brief, without sending. Pair with email send to send the same drafts.

Input Schema

NameRequiredDescriptionDefault
ccMeNoCC the sender on each outbound
briefYesOutreach brief — what to mention, tone, ask
profileNoSaved ideal-profile name; when set, each draft references the observed fit (matched attributes) to personalize the opening
senderNameYesSender display name
senderEmailYesFrom email (rendered into drafts)
collectionIdYesCollection name or id
trackingEnabledNoEnable open/click tracking on the eventual send
includeLowConfidenceNoInclude low-confidence recipient emails (role aliases info@/sales@, no-reply, single-letter local, image-filename addresses). Default false — these are auto-pruned. MUST match the eventual `email send` flag, or this preview drafts a different recipient set than the send.

Output Schema

NameRequiredDescriptionDefault
dataYes
statsNo
_debugNo
summaryYes
warningsNo
nextActionsYes
correlationIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • removedInput schema / properties / --brief
      Removed value: -{
      -  "description": "Outreach brief — what to mention, tone, ask",
      -  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      -  "type": "string"
      -}
    • removedInput schema / properties / --ccMe
      Removed value: -{
      -  "description": "CC the sender on each outbound",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / --collectionId
      Removed value: -{
      -  "description": "Collection name or id",
      -  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      -  "type": "string"
      -}
    • removedInput schema / properties / --includeLowConfidence
      Removed value: -{
      -  "description": "Include low-confidence recipient emails (role aliases info@/sales@, no-reply, single-letter local, image-filename addresses). Default false — these are auto-pruned. MUST match the eventual `email send` flag, or this preview drafts a different recipient set than the send.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / --profile
      Removed value: -{
      -  "description": "Saved ideal-profile name; when set, each draft references the observed fit (matched attributes) to personalize the opening",
      -  "type": "string"
      -}
    • removedInput schema / properties / --senderEmail
      Removed value: -{
      -  "description": "From email (rendered into drafts)",
      -  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      -  "type": "string"
      -}
    • removedInput schema / properties / --senderName
      Removed value: -{
      -  "description": "Sender display name",
      -  "type": "string"
      -}
    • removedInput schema / properties / --trackingEnabled
      Removed value: -{
      -  "description": "Enable open/click tracking on the eventual send",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / brief
      Added value: +{
      +  "description": "Outreach brief — what to mention, tone, ask",
      +  "maxLength": 100000,
      +  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      +  "type": "string"
      +}
    • addedInput schema / properties / ccMe
      Added value: +{
      +  "description": "CC the sender on each outbound",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / collectionId
      Added value: +{
      +  "description": "Collection name or id",
      +  "format": "uuid",
      +  "maxLength": 8000,
      +  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      +  "type": "string"
      +}
    • addedInput schema / properties / includeLowConfidence
      Added value: +{
      +  "description": "Include low-confidence recipient emails (role aliases info@/sales@, no-reply, single-letter local, image-filename addresses). Default false — these are auto-pruned. MUST match the eventual `email send` flag, or this preview drafts a different recipient set than the send.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / profile
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    {
      +      "type": [
      +        "null",
      +        "boolean",
      +        "number",
      +        "string",
      +        "array",
      +        "object"
      +      ]
      +    }
      +  ],
      +  "contentSchema": {
      +    "type": [
      +      "null",
      +      "boolean",
      +      "number",
      +      "string",
      +      "array",
      +      "object"
      +    ]
      +  },
      +  "description": "Saved ideal-profile name; when set, each draft references the observed fit (matched attributes) to personalize the opening"
      +}
    • addedInput schema / properties / senderEmail
      Added value: +{
      +  "description": "From email (rendered into drafts)",
      +  "maxLength": 8000,
      +  "pattern": "[^\\t\\n\\v\\f\\r\\x85\\p{Z}]",
      +  "type": "string"
      +}
    • addedInput schema / properties / senderName
      Added value: +{
      +  "description": "Sender display name",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / trackingEnabled
      Added value: +{
      +  "description": "Enable open/click tracking on the eventual send",
      +  "type": "boolean"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "--brief",
      -  "--collectionId",
      -  "--senderEmail",
      -  "--senderName"
      -]New value: +[
      +  "brief",
      +  "collectionId",
      +  "senderEmail",
      +  "senderName"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "value0": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "body": {
      +          "type": "string"
      +        },
      +        "recipientCompany": {
      +          "type": "string"
      +        },
      +        "recipientCompanyId": {
      +          "anyOf": [
      +            {
      +              "format": "uuid",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "recipientCountry": {
      +          "type": "string"
      +        },
      +        "recipientLanguage": {
      +          "type": "string"
      +        },
      +        "recipientName": {
      +          "type": "string"
      +        },
      +        "recipientTimezone": {
      +          "type": "string"
      +        },
      +        "recipientTitle": {
      +          "type": "string"
      +        },
      +        "subject": {
      +          "type": "string"
      +        },
      +        "toEmail": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "body",
      +        "recipientCompany",
      +        "recipientName",
      +        "recipientTitle",
      +        "subject",
      +        "toEmail"
      +      ],
      +      "type": "object"
      +    },
      +    "value1": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": [
      +              "null",
      +              "boolean",
      +              "number",
      +              "string",
      +              "array",
      +              "object"
      +            ]
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value2": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/value3"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value3": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "command": {
      +          "type": "string"
      +        },
      +        "cost": {
      +          "type": "string"
      +        },
      +        "label": {
      +          "type": "string"
      +        },
      +        "rationale": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "command",
      +        "cost",
      +        "label",
      +        "rationale"
      +      ],
      +      "type": "object"
      +    },
      +    "value4": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {
      +            "type": "number"
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value5": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/value6"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value6": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "message"
      +      ],
      +      "type": "object"
      +    },
      +    "value7": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {
      +            "type": [
      +              "null",
      +              "boolean",
      +              "number",
      +              "string",
      +              "array",
      +              "object"
      +            ]
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "additionalProperties": false,
      +  "properties": {
      +    "_debug": {
      +      "$ref": "#/$defs/value7"
      +    },
      +    "correlationId": {
      +      "type": "string"
      +    },
      +    "data": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "context": {
      +          "type": [
      +            "null",
      +            "boolean",
      +            "number",
      +            "string",
      +            "array",
      +            "object"
      +          ]
      +        },
      +        "cursor": {
      +          "type": "string"
      +        },
      +        "has_more": {
      +          "type": "boolean"
      +        },
      +        "items": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "$ref": "#/$defs/value0"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "context",
      +        "has_more",
      +        "items"
      +      ],
      +      "type": "object"
      +    },
      +    "nextActions": {
      +      "$ref": "#/$defs/value2"
      +    },
      +    "stats": {
      +      "$ref": "#/$defs/value4"
      +    },
      +    "summary": {
      +      "type": "string"
      +    },
      +    "warnings": {
      +      "$ref": "#/$defs/value5"
      +    }
      +  },
      +  "required": [
      +    "data",
      +    "nextActions",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, and the description adds the crucial behavioral boundary that this operation creates drafts but performs no send — a side-effect distinction not derivable from the annotations alone. It does not cover persistence of the drafts, authorization requirements, or any limits, so it is helpful but not exhaustive.

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

Conciseness5/5

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

Two sentences, zero filler, and the non-sending constraint is front-loaded before the workflow hint. Every clause earns its place.

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?

With an output schema present, return values need no explanation, and the 8 parameters are fully documented in the schema. The description supplies the workflow context (draft, then pair with send) that the structured fields cannot, though it omits whether drafts persist and how they are subsequently addressed.

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

Parameters3/5

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

Schema description coverage is 100%, including nuances like the profile-based personalization and the includeLowConfidence/'email send' flag-matching constraint, so the schema carries the full parameter burden. The description adds no parameter-level meaning beyond what the schema already documents, which is the correct baseline of 3.

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?

States a specific verb (generates), resource (personalized outreach emails), and scope (companies in a collection, derived from a brief), and immediately pins down the key differentiator against its nearest sibling exim__email__send: 'without sending'. An agent can distinguish the draft step from the send step without opening either schema.

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

Usage Guidelines4/5

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

The description routes the agent to the alternative ('Pair with email send to send the same drafts'), which is exactly the sequencing information needed for a generate-then-send workflow. It stops short of a 5 because it names no exclusions or prerequisites (e.g. that the collection must already contain companies).

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.