# draft_outreach

Produce two outreach draft variants (A/B) for a lead given an angle. Both drafts are warm and kind by design (P10) — variants differ in angle of helpfulness (subject hook, opening framing, call-to-action) not in tone. Drafts are written to lead_drafts as pending_review. Returns IDs + previews. Use after synthesize_lead_hypothesis to draft initial outreach. [write-tier — first use may require a manager's approval; a from-now-on approval makes future calls seamless, a just-once approval re-asks next time.]

Agent View of the PolicyLayer registry record for `draft_outreach`. HTML page: https://policylayer.com/tools/com-getfreedomos-freedom-mcp/draft-outreach

## Facts

- Tool: `draft_outreach`
- Server: Freedom Mcp (`https://twuluxmoognlwtmaoqgo.supabase.co/functions/v1/freedom-mcp`) — https://policylayer.com/tools/com-getfreedomos-freedom-mcp.md
- Homepage: https://github.com/https://twuluxmoognlwtmaoqgo.supabase.co/functions/v1/freedom-mcp
- Risk category: Write (Medium risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server CORS policy: *
- Server rate-limited: no
- Parameters: 12 (4 required)
- Recommended policy verdict: Rate-limited

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `angle` | string | yes | The outreach angle to use (e.g., 'deeper_lp3_discovery', 'lighter_touch_different_hook', 'jurisdiction_clarification', 'kind_check_in'). Take from synthesize_le |
| `lead_id` | string | yes | UUID of the lead. |
| `reply_to` | string | no | Optional Reply-To address to carry on the eventual send (CONTRACT-1 agent thread address). Stamped into both drafts' metadata (best-effort — the metadata column |
| `companyId` | string | yes | FreedomOS company id to act within (you must be a member). Required for company-scoped tools. |
| `from_name` | string | no | Optional sender display name (e.g., 'Acme Team', 'Alex at Acme'). Used in draft signature. When omitted, the CONTRACT-5 chain resolves it: the company's mcp_con |
| `eligible_at` | string | no | Optional ISO timestamp — the earliest real time this draft may be sent (2026-07-13 send-timing gate). For a sequence step, pass now + that step's delay_hours (a |
| `sequence_id` | string | no | Optional. The outreach_sequences.id the step belongs to. Pass it together with sequence_step_id to enable the A/B prior-stats bias — step ids repeat across sequ |
| `company_context` | string | no | Optional short summary of the company the lead arrived at (e.g., 'Acme Health — pharmacy compounding compliance consulting'). Helps the model pitch correctly. |
| `journey_summary` | string | yes | Short prose summary of what we know about this lead (their state, recent activity, what they engaged with). Used as context for the draft. Synthesis.intent_summ |
| `sequence_step_id` | string | no | Optional. If this draft is part of an auto-mode sequence step, pass the step_id from outreach_sequences. Otherwise omit (manual one-off draft). |
| `regenerated_reason` | string | no | Optional (regenerate-on-signal, 2026-07-15). When the sequencer re-drafts a not-yet-sent step after a meaningful lead signal (temperature flip to hot, a click), |
| `variant_b_guidance` | string | no | Optional (CONTRACT-3). Sequence-designed seed for the B variant — a distilled subject+body angle persisted on the sequence step (steps jsonb, additive variant_b |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "draft_outreach",
    "arguments": {
      "angle": "<angle>",
      "lead_id": "<lead_id>",
      "companyId": "<companyId>",
      "journey_summary": "<journey_summary>"
    }
  }
}
```

## Why draft_outreach is rated Medium

This tool creates new data (outreach draft documents) and persists them to a backend system (lead_drafts table/collection). It is not read-only retrieval, nor does it execute arbitrary external operations, delete data, or commit financial transactions. The [write-tier] approval requirement confirms its write classification.

From the tool's own definition: "Drafts are written to lead_drafts as pending_review. Returns IDs + previews. Tool creates new outreach document variants that are stored in a system, with explicit mention that output is written to a database/collection."

Risk signals: High parameter count (12 properties)

## Use case

AI agents use draft_outreach to create or update resources in Freedom Mcp, usually the action step of a workflow, after the agent has gathered context. Every call changes real data in your Freedom Mcp environment.

## Recommended policy (PolicyLayer)

Verdict: **Rate-limited**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches Freedom Mcp:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "draft_outreach": {
      "limits": [
        {
          "counter": "draft_outreach_rate",
          "window": "minute",
          "max": 30,
          "scope": "grant"
        }
      ]
    }
  }
}
```

## Other tools on Freedom Mcp (237)

- `clear_pipeline_learnings` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/clear-pipeline-learnings.md
- `deactivate_agent` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/deactivate-agent.md
- `delete_icp` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/delete-icp.md
- `delete_idea` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/delete-idea.md
- `delete_knowledge` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/delete-knowledge.md
- `delete_objective` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/delete-objective.md
- `remove_agent_activity` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/remove-agent-activity.md
- `remove_background` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/remove-background.md
- `remove_dashboard_widget` — Destructive — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/remove-dashboard-widget.md
- `audit_brand_visibility` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/audit-brand-visibility.md
- `browse_url` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/browse-url.md
- `challenge_as_customer` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/challenge-as-customer.md
- `decide_command_center_item` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/decide-command-center-item.md
- `deliberate` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/deliberate.md
- `generate_image_xai` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/generate-image-xai.md
- `generate_vector_image` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/generate-vector-image.md
- `generate_video_veo` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/generate-video-veo.md
- `hire_agent` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/hire-agent.md
- `hire_agent_with_context` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/hire-agent-with-context.md
- `invoke_integration` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/invoke-integration.md
- `posthog_hogql` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/posthog-hogql.md
- `request_attention_spawn` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/request-attention-spawn.md
- `resolve_work` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/resolve-work.md
- `run_quality_check` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/run-quality-check.md
- `run_tactic` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/run-tactic.md
- `send_email` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/send-email.md
- `toggle_agent_schedule` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/toggle-agent-schedule.md
- `trigger_agent_activity` — Execute — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/trigger-agent-activity.md
- `set_meta_ad_status` — Financial — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/set-meta-ad-status.md
- `update_meta_ad_budget` — Financial — https://policylayer.com/tools/com-getfreedomos-freedom-mcp/update-meta-ad-budget.md
- …and 207 more: https://policylayer.com/tools/com-getfreedomos-freedom-mcp.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=com-getfreedomos-freedom-mcp · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/com-getfreedomos-freedom-mcp
