{
  "automatic_evidence_credit": false,
  "captures": [],
  "change_log": [
    {
      "after_hash": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
      "before_hash": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "Declared provider, version, model, operator or AI self-disclosure changed",
            "kind": "DECLARED_INGREDIENTS_CHANGED",
            "path": "$.declared_ingredients_changed",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": null,
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "f92eb47fea53edf22ffb3c45f91632c4ec28ef98e13d6a14f9ca072d3d4b2780",
      "evidence_class": "FACT_CHANGE",
      "labels": [
        "DECLARED_INGREDIENTS_CHANGED"
      ],
      "observed_at_utc": "2026-10-19T20:26:45Z",
      "previous_entry_sha256": "ff1db7f859dce647209b87a038c86af4122fd0e8f59d040853d86074765a9489",
      "receipt_id": null,
      "receipt_url": null,
      "sequence": 38497,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
      "before_hash": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[update_email_tags]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[add_sending_domain].description",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[add_sending_domain].inputSchema.properties[subdomains]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[list_emails].description",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[list_emails].inputSchema.properties[tag]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[list_threads].description",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[list_threads].inputSchema.properties[tag]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[reply_to_message].inputSchema.properties[tags]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[send_email].inputSchema.properties[tags]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 3,
          "NON_BREAKING": 6
        },
        "taxonomy_version": "1.0.0",
        "total": 9,
        "truncated": false
      },
      "entry_sha256": "ff1db7f859dce647209b87a038c86af4122fd0e8f59d040853d86074765a9489",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-19T20:26:45Z",
      "previous_entry_sha256": "ca5a68edb8058fdae2ed9a01e7f0bc29f938f9c5af98827be3f1f7d621b56bef",
      "receipt_id": "848d4fa8-9dfe-5a7c-ab07-8b64981efd39",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/848d4fa8-9dfe-5a7c-ab07-8b64981efd39",
      "sequence": 38496,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "before_hash": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "Declared provider, version, model, operator or AI self-disclosure changed",
            "kind": "DECLARED_INGREDIENTS_CHANGED",
            "path": "$.declared_ingredients_changed",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": null,
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "9e8494b7147a5ec7bb674c7a4b298751c1c1be150dda106d42123fbb32ca631b",
      "evidence_class": "FACT_CHANGE",
      "labels": [
        "DECLARED_INGREDIENTS_CHANGED"
      ],
      "observed_at_utc": "2026-10-15T14:54:08Z",
      "previous_entry_sha256": "fd2fab8668a5cf52bccbf5c522606ce010ecdfbbc16d7ba1a0dd6f0b9f4628c5",
      "receipt_id": null,
      "receipt_url": null,
      "sequence": 31327,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "before_hash": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "version patch",
            "kind": "VERSION_PATCH",
            "path": "version",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "fd2fab8668a5cf52bccbf5c522606ce010ecdfbbc16d7ba1a0dd6f0b9f4628c5",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED"
      ],
      "observed_at_utc": "2026-10-15T14:54:08Z",
      "previous_entry_sha256": "fa03c8efd9436feeffb4877ca7a63f4db4a2559f8b87ec51903df4113e72b11a",
      "receipt_id": "8758f380-379b-5380-9d28-6feefe466ed7",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/8758f380-379b-5380-9d28-6feefe466ed7",
      "sequence": 31326,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "before_hash": "f723e008eed7ba7ac15099712e48e521161d5c56d7fd295a4328eec81c63bcf3",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "version patch",
            "kind": "VERSION_PATCH",
            "path": "version",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "13facb8a9672a6c884a881d8734b52d0f02b76d960626df36f3b69ab1c7b14f2",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED"
      ],
      "observed_at_utc": "2026-10-08T04:54:37Z",
      "previous_entry_sha256": "537c097da48869c9a48e2ba6651c5202a7b72ea874f8d0001d16770af2f57a68",
      "receipt_id": "113255d9-e045-5e62-9557-ab9ca379944a",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/113255d9-e045-5e62-9557-ab9ca379944a",
      "sequence": 19908,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "f723e008eed7ba7ac15099712e48e521161d5c56d7fd295a4328eec81c63bcf3",
      "before_hash": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[create_broadcast].inputSchema.properties[view_in_browser]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 1
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "873ef39830c09df66433470cb0202da627e1071120b28d72f0bd6ef13b92dfb5",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED"
      ],
      "observed_at_utc": "2026-10-06T02:12:24Z",
      "previous_entry_sha256": "9d7cd9a7b57057f46e7a5996ceec9891170e00489888fb038e32d8f74ea96c82",
      "receipt_id": "0ade579c-f977-574a-98fc-4fe74988e9ea",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/0ade579c-f977-574a-98fc-4fe74988e9ea",
      "sequence": 18101,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    },
    {
      "after_hash": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "before_hash": "cd71b0570e9fe70b635a9da2187c2b103e77bcf40020f1ec4a3cbb7b67c745e8",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "protocol version changed",
            "kind": "PROTOCOL_VERSION_CHANGED",
            "path": "protocolVersion",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 1
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "12a15767346576097bbb03d68d60f406cb4dec619d81766a564d757a14b40af6",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED"
      ],
      "observed_at_utc": "2026-10-01T21:10:17Z",
      "previous_entry_sha256": "408bf3a83959d28c93e3e540ff9ef1aeeea8fb3d557932226a1e27e0b54e57a7",
      "receipt_id": "a2d9bf35-f0de-5aea-aad0-66421f345606",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/a2d9bf35-f0de-5aea-aad0-66421f345606",
      "sequence": 418,
      "target_id": "obs_3bfc3bae46b93206c4f201a0",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.sendraven.ai/mcp"
    }
  ],
  "check_outcomes": {
    "ask": {
      "changed_since": "https://www.gaipagents.com/v1/free/observatory/changed-since?url=<endpoint>",
      "changes_and_reachability": "https://www.gaipagents.com/v1/free/changes/subscribe?url=<endpoint>",
      "conformance": "https://www.gaipagents.com/v1/free/conformance/check?url=<endpoint>"
    },
    "published": false,
    "why": "Outcomes of GAIP's own checks (whether the endpoint answered, HTTP status, response time, conformance findings) are given only to a caller who asks about the URL, never on a public page, list or feed. The same applies to every target."
  },
  "conformance": {
    "findings": "GIVEN_TO_CALLER_ONLY",
    "meaning": "The rule catalogue this manifest was read against at the observed time. The finding codes go only to a caller who checks the URL (check_outcomes.ask.conformance).",
    "observed_at_utc": "2026-10-20T21:49:30Z",
    "protocol": "MCP",
    "rule_catalogue_route": "/v1/free/knowledge/conformance-rules",
    "rule_catalogue_version": "1.0.0"
  },
  "corrections": {
    "contact": "https://www.gaipagents.com/contact",
    "exclusion": "https://www.gaipagents.com/v1/free/observatory/corrections/exclusion",
    "opt_out": "POST kind OPT_OUT to the route; the target is withdrawn from public view at once (a pause). The site's owner makes it permanent at https://www.gaipagents.com/v1/free/observatory/corrections/exclusion.",
    "queued_for_review": 0,
    "route": "https://www.gaipagents.com/v1/free/observatory/corrections"
  },
  "declared_derivations": {
    "data_appetite": {
      "categories": {
        "email": {
          "fields": 11,
          "tools": 11
        },
        "free_text_large": {
          "fields": 2,
          "tools": 2
        }
      },
      "fields_read": 203,
      "observed_at_utc": "2026-10-20T21:49:30Z",
      "tools_read": 56
    },
    "dependency_domains": [
      {
        "domain": "github.com",
        "roles": [
          "repository"
        ]
      }
    ],
    "last_observed_at_utc": "2026-10-20T21:49:30Z",
    "meaning": "Derived by GAIP from what this agent declared, at the stated time: the categories of data its tools' input fields ask for (counts, by keyword rules gaip.data-appetite-rules.v1), the outside domains its declarations point to, and the operator as the agent itself publishes it. Facts about declarations, not an assessment of the agent or its operator.",
    "operator": {
      "as_published": "ai.sendraven",
      "source_kind": "registry_namespace_domain"
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1"
  },
  "latest": {
    "baseline_at_utc": "2026-09-29T05:50:23Z",
    "manifest_sha256": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
    "observed_at_utc": "2026-10-20T21:49:30Z"
  },
  "metadata_signals": {
    "meaning": "Pattern rules are published only as aggregate rates across all observed targets (see the summary), never per party. GAIP issues no overall verdict and does not rank parties.",
    "overall_verdict": null,
    "per_target_results": null,
    "published": "AGGREGATE_ONLY_IN_SUMMARY",
    "rules": [
      {
        "rationale": "Zero-width, bidirectional-control and Unicode tag characters are not visible to a human reader but are read by language models. GAIP reports whether any occur; many have ordinary uses.",
        "rule_id": "OBS-SIG-001",
        "title": "Invisible or bidirectional-control Unicode characters in names or descriptions"
      },
      {
        "rationale": "Tool and skill descriptions are read by models. GAIP reports whether a description contains phrases shaped like instructions to a model (the patterns in GAIP's public conformance rule catalogue, plus the phrases listed in the Observatory method). Such phrases can be benign.",
        "rule_id": "OBS-SIG-002",
        "title": "Instruction-like text in descriptions"
      },
      {
        "rationale": "When a description refers to a tool name that only a different observed server publishes, a model using both servers may connect the two. GAIP reports whether such a reference occurs; shared names are common and often coincidental.",
        "rule_id": "OBS-SIG-003",
        "title": "Description names a tool published by a different observed server"
      },
      {
        "rationale": "Declared OAuth scopes whose names contain wildcard or whole-account wording (*, all, admin, root, full) request wide access by name. GAIP reports whether such a scope name is declared; it does not know what the scope grants.",
        "rule_id": "OBS-SIG-004",
        "title": "Declared authorization scopes with broad-access wording"
      }
    ],
    "third_party_scanners": [
      {
        "name": "Snyk agent-scan (formerly Invariant Labs mcp-scan)",
        "status": "NOT_RUN",
        "url": "https://github.com/snyk/agent-scan"
      },
      {
        "name": "Cisco AI Defense MCP Scanner",
        "status": "NOT_RUN",
        "url": "https://github.com/cisco-ai-defense/mcp-scanner"
      }
    ]
  },
  "method": "https://www.gaipagents.com/observatory",
  "notice": "Facts observed by GAIP at the stated time (UTC); they may be out of date. This is not an assessment of safety, quality, security, legality or trustworthiness of any party, and not a recommendation. To request a correction, add a right of reply or opt out, POST to https://www.gaipagents.com/v1/free/observatory/corrections or use https://www.gaipagents.com/contact.",
  "price_gbp": 0,
  "schema_version": "gaip.observatory.v1.target",
  "silent_changes_last_30_days": {
    "days": 30,
    "entries_read_at_most": 200,
    "kinds": [],
    "line": null,
    "meaning": "Weeks (ISO) in which GAIP recorded a change to the agent's declared tools or interface (tools added or removed, descriptions re-worded, input or output schema, behaviour labels, sign-in, terms or prices, endpoint host) and no declared version (registry or card version, serverInfo.version) moved that week. A week whose version movement is not recorded is not counted. Dated facts from the public change log; not an assessment of the agent.",
    "weeks": [],
    "weeks_with_silent_changes": 0
  },
  "snapshot": {
    "capabilities": [
      "tools"
    ],
    "description": "Email infrastructure for AI agents: send, read replies as threads, campaigns, per-key limits.",
    "name": "ai.sendraven/mcp",
    "parts": [
      "registry_server_json",
      "mcp_initialize_tools_list"
    ],
    "protocol": "MCP",
    "protocolVersion": "2025-11-25",
    "public_copy": "Text excerpts of at most 300 characters; input schemas and security schemes as SHA-256 and size only.",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.sendraven.ai/mcp"
      }
    ],
    "scopes": [],
    "serverInfo": {
      "name": "sendraven",
      "version": "0.4.25"
    },
    "title": null,
    "tools": [
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Add contact"
        },
        "description": "Add someone to an audience. A contact exists once per workspace and can be on any number of audiences, so adding an address that already exists joins them to this list rather than creating a second copy. status records that the person opted out elsewhere \u2014 it writes the suppression as well as the fl",
        "inputSchema": {
          "bytes": 1289,
          "published": "HASH_ONLY",
          "sha256": "51ef50fc24ba3980d34aea875888627b01161428553ce7c55a424beaed70e675"
        },
        "name": "add_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Add sending domain"
        },
        "description": "Register a sending domain and get back the DNS records to publish. It takes the domain mail is sent from \u2014 mail.<domain> and news.<domain> are provisioned beneath it and the right one is chosen per message, so a marketing complaint spike can never affect password reset delivery. subdomains names the",
        "inputSchema": {
          "bytes": 815,
          "published": "HASH_ONLY",
          "sha256": "9a925d90dcdf0368d4d6e70becf2f988825b3f97233c742d2c9b5a91ea3e9bfa"
        },
        "name": "add_sending_domain",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Suppress address"
        },
        "description": "Stop sending to an address. Scope 'marketing' leaves transactional mail working; the default is 'all'. Reason 'unsubscribe' is a real opt-out: it also cancels the person's queued scheduled sends and ends their automation enrolments, which is what a person who asked to stop expects and 'manual' does ",
        "inputSchema": {
          "bytes": 479,
          "published": "HASH_ONLY",
          "sha256": "1c4804ce6867f7e863b3181df192d2c0d87c966684e2b2e2706f9cc75d3caf6b"
        },
        "name": "add_suppression",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Cancel scheduled email"
        },
        "description": "Cancel a scheduled email before it sends. Only works while status is 'scheduled': a message that has already started sending, or is in any other state, answers 409 invalid_state naming its status; a retry answers the same, and get_email shows where it stands. An unknown id answers 404 not_found.",
        "inputSchema": {
          "bytes": 154,
          "published": "HASH_ONLY",
          "sha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
        },
        "name": "cancel_scheduled_email",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Count segment"
        },
        "description": "How many contacts a segment currently matches. A filter that matches nobody shows up here as 0, before any campaign is built around it or sent.",
        "inputSchema": {
          "bytes": 154,
          "published": "HASH_ONLY",
          "sha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
        },
        "name": "count_segment",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Create automation"
        },
        "description": "Define a multi-step sequence as a draft; nothing is sent until it is activated, from the dashboard or with set_automation_status. Unlike several separately scheduled emails, it ends on its own when the person unsubscribes, replies, bounces, opts out of its topic, or their tags say so. identity_id mu",
        "inputSchema": {
          "bytes": 4326,
          "published": "HASH_ONLY",
          "sha256": "df10321e26d000f9e4fb1c6c14b0dc268db1f5980e7c19cf1b8f119879282927"
        },
        "name": "create_automation",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Create campaign draft"
        },
        "description": "Create a campaign as a draft. Nothing is sent: preview_broadcast reports its reach and send_broadcast sends it. identity_id must be a marketing sending domain (see list_sending_domains; risk_class 'marketing'). topic_key must name an existing topic (list_topics); an unknown one is refused with 422 u",
        "inputSchema": {
          "bytes": 3492,
          "published": "HASH_ONLY",
          "sha256": "f8b4a67daf398e50c8a2fc8aba9b3303f1588bb874a9e63bfae077af02f17650"
        },
        "name": "create_broadcast",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Approve or reject held email"
        },
        "description": "Approve or reject a held message. Approving releases it: it sends now, or at its scheduled_at when the draft was scheduled for later. If every recipient unsubscribed or was suppressed while it waited, nothing is sent and the answer says skipped: true with a reason (both always present: false and nul",
        "inputSchema": {
          "bytes": 466,
          "published": "HASH_ONLY",
          "sha256": "aced89bbd5e1c97c0d83aae8d72aebaaff3b13408b54736e2b9be38ac778cf69"
        },
        "name": "decide_approval",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Delete contact"
        },
        "description": "Remove a person from the workspace entirely, along with every audience membership. Their suppression and topic preferences are kept on purpose \u2014 an opt-out has to outlive the contact record, or the next import silently puts them back on the list. remove_from_audience takes someone off a single audie",
        "inputSchema": {
          "bytes": 329,
          "published": "HASH_ONLY",
          "sha256": "d047123bb5d687d94c4402ba61afe9ee01e1ae88579b5125e560237c3a7bb0b3"
        },
        "name": "delete_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Emit automation event"
        },
        "description": "Emit a named event, starting every automation that waits on it \u2014 for example 'trial_started' or 'invoice_overdue'. The configured sequences decide what happens, rather than the caller naming an automation. Returns automations_started; 0 means nothing was waiting on that name or the person was exclud",
        "inputSchema": {
          "bytes": 391,
          "published": "HASH_ONLY",
          "sha256": "2b5e43b90646667dabc537ab8cbc624f7a987c8d0b1cb2fe102d3ecfdd433dd8"
        },
        "name": "emit_event",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Enroll contact in automation"
        },
        "description": "Put someone into a multi-step sequence. Unlike several separately scheduled emails, the sequence stops on its own if they unsubscribe (from everything or from the automation's topic), reply, hard bounce, gain one of its exit tags, or lose one of its required tags, which would otherwise have to be tr",
        "inputSchema": {
          "bytes": 484,
          "published": "HASH_ONLY",
          "sha256": "f1e8ed8d1ec6c54ecccbfe9251f59a7e7535fedadf2bd0f31350a9ea9d784882"
        },
        "name": "enroll_in_automation",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Find contact"
        },
        "description": "Find a contact by address across every audience, without knowing which list they are on, or list the workspace's contacts by tag or subscription. email matches exactly, and q matches an address prefix. A person exists once per workspace, so each row is one contact with audience_ids listing every lis",
        "inputSchema": {
          "bytes": 719,
          "published": "HASH_ONLY",
          "sha256": "3d2a3ca899e883e6491a11c8486a6f332a66b204fd6e24ef10870c400e4e11b5"
        },
        "name": "find_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get automation"
        },
        "description": "Fetch one automation: its status, trigger, steps, exit rules and how many people are in each state. The same object list_automations returns, for a caller that already holds the id. People themselves are listed by list_automation_enrollments. An unknown automation_id answers 404 not_found; a name or",
        "inputSchema": {
          "bytes": 265,
          "published": "HASH_ONLY",
          "sha256": "2da1065f091f5678b2c3a00decb0ebe2bd08c7a738cd7efbd3113d64e03900e4"
        },
        "name": "get_automation",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get campaign"
        },
        "description": "One campaign, with a 'progress' object while it is sending, paused or testing: how many addresses are still pending, sent, failed, or skipped because the person opted out after the campaign started. This is what tells a paused campaign that is still making progress from one that is waiting; pause_re",
        "inputSchema": {
          "bytes": 252,
          "published": "HASH_ONLY",
          "sha256": "18258302ac21672bd3dcec235745557f7e5bb1d6dadedccb627bc12b465e219a"
        },
        "name": "get_broadcast",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get contact"
        },
        "description": "Fetch one contact by id, with their audience memberships, custom properties and engagement dates.",
        "inputSchema": {
          "bytes": 154,
          "published": "HASH_ONLY",
          "sha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
        },
        "name": "get_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get email"
        },
        "description": "Fetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). The timeline shows why an email didn't arrive.",
        "inputSchema": {
          "bytes": 181,
          "published": "HASH_ONLY",
          "sha256": "4d7f7c84efe64ed1ac7991cd8c5af6d8e057801418e0185caa9e186c665f8ed0"
        },
        "name": "get_email",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get email metrics"
        },
        "description": "Delivery and engagement over a window. Open and click rates are over delivered, not sent \u2014 a low open rate with a high bounce rate is a deliverability problem, not an engagement one.",
        "inputSchema": {
          "bytes": 196,
          "published": "HASH_ONLY",
          "sha256": "6488620e8ef4cad3884b616addd1297e12761559f818d83a197f5700c9d5de00"
        },
        "name": "get_email_metrics",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get email preferences"
        },
        "description": "What one person has chosen to receive. It shows whether someone who isn't getting a particular kind of email opted out of it \u2014 an opt-out looks identical to a delivery failure from the outside.",
        "inputSchema": {
          "bytes": 211,
          "published": "HASH_ONLY",
          "sha256": "1fd91c5fea5ef02e7437b501cceac2df3b2e29d94375429855a8288560723cfe"
        },
        "name": "get_email_preferences",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get conversation thread"
        },
        "description": "Read a conversation as a chronological transcript of outbound and inbound messages. Inbound `text` already has quoted history and signatures stripped; `raw_text` holds the untrimmed body, for when the stripped version looks wrong. sender_authenticated says whether the sender is who the From line cla",
        "inputSchema": {
          "bytes": 180,
          "published": "HASH_ONLY",
          "sha256": "fd9d60d0c0c282e79f0fbf6e78f0b43c330ca72c1859842df662d470bbb2b8e4"
        },
        "name": "get_thread",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Get usage and sending status"
        },
        "description": "This workspace's plan, what it has sent this billing period, what the period costs so far, and \u2014 the fields worth branching on \u2014 sending_locked and lock_reason, which name the exact 402 a send would be refused with right now, before a large batch or campaign is tried: on Free a send that would cross",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "get_usage",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Import contacts"
        },
        "description": "Import up to 5,000 contacts into an audience in one call, with names, tags, custom properties and subscription status. This is the migration tool: the previous provider's unsubscribed, bounced and complained lists, imported with the matching status before the first campaign, keep the new domain from",
        "inputSchema": {
          "bytes": 818,
          "published": "HASH_ONLY",
          "sha256": "001283c77e08f92c7f4cbd7910952081a9d8410edf79ef18722899849d12646f"
        },
        "name": "import_contacts",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List audiences"
        },
        "description": "List contact lists, newest first, with each one's id and contact_count. Paged: at most 100 per call; while has_more is true, more lists are on later pages, returned when next_cursor is passed back as cursor.",
        "inputSchema": {
          "bytes": 319,
          "published": "HASH_ONLY",
          "sha256": "96a190fe7dff4be57ed0aacdcf78b8607c210a56b51db28ba8909f6d236bb87d"
        },
        "name": "list_audiences",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List automation enrollments"
        },
        "description": "The people in one automation, newest enrolment first: each row has the email, status, current_step, next_due_at and, for a cancelled one, cancel_reason. It answers 'is this person still on the sequence?', 'who is waiting on step 2?' and 'why did this sequence stop for them?', which find_contact and ",
        "inputSchema": {
          "bytes": 612,
          "published": "HASH_ONLY",
          "sha256": "5aaaf61ffc9c9289573b9b97d99e649919b30880c7b1b67f15ffaa0bc1b59899"
        },
        "name": "list_automation_enrollments",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List automations"
        },
        "description": "List multi-step email sequences and how many people are currently in each, with the id each one is enrolled by. Newest first, at most 100 per call; while has_more is true, next_cursor passed back as cursor returns the next page. A 'paused' automation holds its people on their current step rather tha",
        "inputSchema": {
          "bytes": 319,
          "published": "HASH_ONLY",
          "sha256": "96a190fe7dff4be57ed0aacdcf78b8607c210a56b51db28ba8909f6d236bb87d"
        },
        "name": "list_automations",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List campaign recipients"
        },
        "description": "Who a campaign reached and what happened to each message, with the A/B variant when there is one. At most 200 per call; while has_more is true, next_cursor (a message id) passed back as cursor returns the next page.",
        "inputSchema": {
          "bytes": 459,
          "published": "HASH_ONLY",
          "sha256": "21a2fdf08ecf3aa1ee824cfd3ae47a23f27d06a731ce81fb89e92ddc70963229"
        },
        "name": "list_broadcast_recipients",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List campaigns"
        },
        "description": "List campaigns, newest first, with their status. Paged: at most 100 per call; while has_more is true, next_cursor passed back as cursor returns the next page. Each row is the campaign object get_broadcast returns, live progress and A/B results included, without its html, which only get_broadcast ret",
        "inputSchema": {
          "bytes": 319,
          "published": "HASH_ONLY",
          "sha256": "96a190fe7dff4be57ed0aacdcf78b8607c210a56b51db28ba8909f6d236bb87d"
        },
        "name": "list_broadcasts",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List sent emails"
        },
        "description": "List messages newest first with their delivery status, including held, scheduled, skipped and failed ones and the mail campaigns and automations sent. Filter by status, recipient or tag. Paged: at most 100 per call; while has_more is true, next_cursor passed back as cursor with the same filters retu",
        "inputSchema": {
          "bytes": 905,
          "published": "HASH_ONLY",
          "sha256": "7305c20f93f7718109ca7fd749e5154e62c8a3a885677892d3d75b502478f73f"
        },
        "name": "list_emails",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List pending approvals"
        },
        "description": "List messages held for human approval, with their full content. A key configured to require approval drafts rather than sends; a person releases it. A send that returned status 'pending_approval' is waiting here, and retrying the send does not release it. Oldest first, each with its expires_at; an e",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_pending_approvals",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List scheduled emails"
        },
        "description": "Messages queued to send later but not yet sent, newest first; cancel_scheduled_email cancels one. At most 100 per call; while has_more is true, next_cursor passed back as cursor returns the next page.",
        "inputSchema": {
          "bytes": 319,
          "published": "HASH_ONLY",
          "sha256": "96a190fe7dff4be57ed0aacdcf78b8607c210a56b51db28ba8909f6d236bb87d"
        },
        "name": "list_scheduled_emails",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List segments"
        },
        "description": "List saved audience filters. A campaign created with a segment id, rather than a filter described inline, shares one definition that can be reused and counted.",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_segments",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List sending domains"
        },
        "description": "List sending domains with their verification status and the DNS records each one needs. Each record shows what is currently published, so this diagnoses a stuck verification. mail_from says whether SES has adopted the bounce. subdomain as the Return-Path: pending while SES polls for its MX record, t",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_sending_domains",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List suppressions"
        },
        "description": "List addresses we refuse to mail and why (hard_bounce, complaint, unsubscribe, manual, list_hygiene), newest first, each with its scope. When someone reports not receiving email, this shows whether the address is suppressed. email returns one address's suppressions directly; scanning pages instead i",
        "inputSchema": {
          "bytes": 396,
          "published": "HASH_ONLY",
          "sha256": "18fc99b6c69bf6bc3ede2a9fc24409081e3aa4ba5fc16eece8511c00511c80bf"
        },
        "name": "list_suppressions",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List tags"
        },
        "description": "Every tag in use in the workspace, with how many contacts carry each. Tags are free-form, so this is the only way to know what exists before applying one.",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_tags",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List templates"
        },
        "description": "List stored email templates and the variables each one needs. Unlike HTML composed at send time, templates carry the workspace's reviewed subject, copy and styling. They do not carry the unsubscribe footer: that is added at send time to marketing mail, whether or not it came from a template.",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_templates",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List conversation threads"
        },
        "description": "List email conversations. awaiting_reply=true returns only the threads where someone has written in and no answer has been sent, which is what needs a response. A reply held for approval or scheduled does not count as sent: such a thread stays in that list with pending_reply true, meaning its answer",
        "inputSchema": {
          "bytes": 640,
          "published": "HASH_ONLY",
          "sha256": "599107325b199adec3384c8bd2b30c455a6e26b03207f7aca8239d3a7b600879"
        },
        "name": "list_threads",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List topics"
        },
        "description": "List subscription topics \u2014 the categories a person can opt out of individually. Marketing mail sent under a topic lets recipients unsubscribe from that kind alone rather than from everything.",
        "inputSchema": {
          "bytes": 85,
          "published": "HASH_ONLY",
          "sha256": "7a014b717a77aac971ea0ab5c0ff47bb13e6cae7ef9442d9dedb15ce36381b15"
        },
        "name": "list_topics",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "List webhook deliveries"
        },
        "description": "Recent delivery attempts for a webhook endpoint: each with event, status, attempts, last_status_code, last_error and delivered_at (null until it succeeds). This is what tells 'we never sent it' from 'your endpoint returned 500'. Newest first, the most recent `limit` only; not paged.",
        "inputSchema": {
          "bytes": 266,
          "published": "HASH_ONLY",
          "sha256": "4dafea3ff1250d470dcd1f5780768437bfbd3aaa91ab2977219dfee9b678fd25"
        },
        "name": "list_webhook_deliveries",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Mark thread handled"
        },
        "description": "Clear a conversation's awaiting_reply flag without sending anything, for when the last inbound message needs no answer \u2014 a \"thanks, all sorted\" \u2014 so it stops appearing in list_threads with awaiting_reply=true. A reply sent only to clear the flag mails a person for bookkeeping; this clears it without",
        "inputSchema": {
          "bytes": 180,
          "published": "HASH_ONLY",
          "sha256": "fd9d60d0c0c282e79f0fbf6e78f0b43c330ca72c1859842df662d470bbb2b8e4"
        },
        "name": "mark_thread_handled",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Pick A/B test winner"
        },
        "description": "Decide an A/B test now instead of waiting for decide_at. 'variant' names the winning key; without it the metric decides on the figures so far. The rest of the audience is then sent to the winner and cannot be redirected. Only a campaign in status 'testing' can be decided; anything else, or a campaig",
        "inputSchema": {
          "bytes": 366,
          "published": "HASH_ONLY",
          "sha256": "703b1eac5e4e9bac9b0ccefca771eabcab0879d7fe45656be8f9c20d59ff1a89"
        },
        "name": "pick_broadcast_winner",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Preview campaign"
        },
        "description": "How many contacts a campaign would reach, and whether the reputation gate would allow it. It is the only way to see the size of a campaign without starting it. For an A/B test it also reports the sample size and per-variant count against the 100-per-variant floor; a send below the floor is refused.",
        "inputSchema": {
          "bytes": 252,
          "published": "HASH_ONLY",
          "sha256": "18258302ac21672bd3dcec235745557f7e5bb1d6dadedccb627bc12b465e219a"
        },
        "name": "preview_broadcast",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Remove contact from audience"
        },
        "description": "Take a contact off one audience. They stay in the workspace and keep every other audience, their suppression and their engagement history. delete_contact removes the person entirely \u2014 leaving a list and being forgotten are different things.",
        "inputSchema": {
          "bytes": 494,
          "published": "HASH_ONLY",
          "sha256": "4ce85ca2959800968e9ac5dc7134dbc95ad780e544bfc576f55a50f1af45d1e3"
        },
        "name": "remove_from_audience",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Remove suppression"
        },
        "description": "Remove a suppression so the address can be mailed again. A hard bounce means the address was rejected by the receiving server, and re-sending raises the bounce rate that AWS enforces on. The scope must match the stored one: removed: false means nothing was suppressed in that scope (an address suppre",
        "inputSchema": {
          "bytes": 312,
          "published": "HASH_ONLY",
          "sha256": "9adbe1e0b0d289d2dfc6c9d6067f4dd9808c5d87adfa65dd3687c952314b121d"
        },
        "name": "remove_suppression",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true,
          "title": "Preview template"
        },
        "description": "Render a template with values, without sending, showing how the copy reads before it mails a real person. A missing variable answers 422 missing_variables with the list in `missing`; an unknown slug answers 404. Returns subject, html and text; text is null when the template has no plain-text part.",
        "inputSchema": {
          "bytes": 241,
          "published": "HASH_ONLY",
          "sha256": "147a1326851b73dd5105efd4629ca6459481a02cb0c2831ed6d0cc28246ab605"
        },
        "name": "render_template",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Reply in thread"
        },
        "description": "Reply to a message, keeping it on the same conversation. Sets the threading headers so the recipient's mail client shows it as part of the existing exchange rather than a new one, which send_email does not do. It is a send, so it answers exactly as send_email does and meets the same refusals (422 no",
        "inputSchema": {
          "bytes": 1995,
          "published": "HASH_ONLY",
          "sha256": "15735dd45a7951b3c7dd162fe7cf66662ea652f9838ee82b7c0fde350225b9ac"
        },
        "name": "reply_to_message",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Resume paused campaign"
        },
        "description": "Continue a paused campaign now. It mails only the addresses still pending \u2014 the audience was frozen when the campaign started and everyone already reached is marked \u2014 so calling this twice cannot double-send. Only works on a paused campaign; anything else answers 409 invalid_state. pause_reason says",
        "inputSchema": {
          "bytes": 252,
          "published": "HASH_ONLY",
          "sha256": "18258302ac21672bd3dcec235745557f7e5bb1d6dadedccb627bc12b465e219a"
        },
        "name": "resume_broadcast",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Send or schedule campaign"
        },
        "description": "Send a draft or scheduled campaign now, or schedule it with scheduled_at. This mails every contact in the segment and cannot be undone once started; preview_broadcast shows the count beforehand. Marketing mail must carry a postal address: a workspace without one is refused with 422 no_postal_address",
        "inputSchema": {
          "bytes": 445,
          "published": "HASH_ONLY",
          "sha256": "b18a3e3fa6e604812db9270f1e9a5dde0d17a27b43dfee7187e61a94aa02cb98"
        },
        "name": "send_broadcast",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Send email"
        },
        "description": "Send a transactional email, immediately or scheduled. scheduled_at takes a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already be verified. Every accepted send answers with the same fields: id, status, thread_id, scheduled_at, skipped, reason and approval_id. skipped: ",
        "inputSchema": {
          "bytes": 2012,
          "published": "HASH_ONLY",
          "sha256": "824a5f7276ce5d89ba214026c607e48630293b5d6045f4fc1bd9ba15322e0117"
        },
        "name": "send_email",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Send template email"
        },
        "description": "Send an email built from a stored template. Variable values are HTML-escaped on substitution, so they are safe to fill from user-supplied text. Nothing is sent when a value is missing: 422 missing_variables lists the names in `missing`, and a call with those filled in goes through (render_template c",
        "inputSchema": {
          "bytes": 1028,
          "published": "HASH_ONLY",
          "sha256": "12da3541c9425834af71f4509bf6fb6121116311474d3d4e04f94472e07fdb18"
        },
        "name": "send_template_email",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Activate or pause automation"
        },
        "description": "Activate, pause or return an automation to draft. A new automation is a draft and sends nothing until it is set to 'active'. Pausing ('paused' or 'draft') holds everyone on their current step: nobody is sent a step and nobody new is enrolled, but nobody's sequence ends, and setting 'active' again co",
        "inputSchema": {
          "bytes": 336,
          "published": "HASH_ONLY",
          "sha256": "fdaf3fe70bdfb6c33abed7aab825081356331fddfeb5df120459dec8d4d44294"
        },
        "name": "set_automation_status",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Set email preferences"
        },
        "description": "Set which topics a person receives, recording what they asked for \u2014 silently re-subscribing someone who opted out is what generates spam complaints. Every key must be an existing topic from list_topics: one unknown key refuses the whole call with 422 unknown_topic and nothing is saved. Setting a top",
        "inputSchema": {
          "bytes": 359,
          "published": "HASH_ONLY",
          "sha256": "214621c18734a34142e8f850ff7660c64d49314ae47853c4a5772ff8227269fe"
        },
        "name": "set_email_preferences",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Suppress addresses in bulk"
        },
        "description": "Stop sending to many addresses at once \u2014 the path for importing another provider's unsubscribe list before a first campaign. Without it, everyone who already opted out there gets mailed again here. The defaults differ from add_suppression: scope 'marketing' and reason 'list_hygiene'. reason 'unsubsc",
        "inputSchema": {
          "bytes": 514,
          "published": "HASH_ONLY",
          "sha256": "880c3a69c7ef0df95ea2ca3ec8ca247164edf87e7aace2fdf746b56deb7324e5"
        },
        "name": "suppress_many",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": true,
          "readOnlyHint": false,
          "title": "Tag contact"
        },
        "description": "Add or remove tags on a contact. Tags are flat labels \u2014 vip, beta, churned \u2014 as opposed to custom properties, which are declared fields with a value. They are lower-cased and spaces become hyphens, so VIP and vip are the same tag. Tagging reaches the person across every audience they are on. list_ta",
        "inputSchema": {
          "bytes": 486,
          "published": "HASH_ONLY",
          "sha256": "2ea93d9c57ba9782c9891a2efe7cd4eab9a0e86b3be6f57f9491bcb6824df9a0"
        },
        "name": "tag_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Update automation"
        },
        "description": "Change the rules that take someone out of a sequence (topic_key, exit_tags, required_tags, exit_on_reply), its reply_to, its reenrollment, or its default_variables (replaces the whole set; {} clears it). Steps and the trigger are fixed once created. A reenrollment change applies from the next enrolm",
        "inputSchema": {
          "bytes": 2742,
          "published": "HASH_ONLY",
          "sha256": "6b0493fc27e1316f20718d7194e90886231172c7abf1a8a04c39ca88cc16e7ee"
        },
        "name": "update_automation",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Update contact"
        },
        "description": "Update a contact. Attributes are merged, so sending one field does not clear the rest. unsubscribed: true is a real opt-out: it suppresses the address for marketing, cancels their pending sends and ends their automation enrolments. unsubscribed: false lifts a marketing unsubscribe, which is for a pe",
        "inputSchema": {
          "bytes": 803,
          "published": "HASH_ONLY",
          "sha256": "fc7aa94f356dc14e52bed5eff7488a6b6ddab10f570afc8cb93ac88525c604b0"
        },
        "name": "update_contact",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Update email tags"
        },
        "description": "Add or remove tags on an email already sent, scheduled or held, to refile it for the tag filters of list_emails and list_threads. Removals apply first, then additions, so one call swaps a tag: remove_tags [{name:'recovery_case'}] (no value: every tag with that name) with add_tags [{name:'category', ",
        "inputSchema": {
          "bytes": 740,
          "published": "HASH_ONLY",
          "sha256": "e3876e01486682cb42ad891952e84bdaedbc389dee147cb9e9c24d414515752a"
        },
        "name": "update_email_tags",
        "title": null
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false,
          "title": "Check sending domain DNS"
        },
        "description": "Re-check a domain's DNS records now instead of waiting for the background monitor. Also restarts bounce-path (mail_from) verification when SES gave up before the MX record existed.",
        "inputSchema": {
          "bytes": 250,
          "published": "HASH_ONLY",
          "sha256": "86fe3844e610b5439d30b51745299d2100af74dd3d4afc2c8a0e73cb6c280f6b"
        },
        "name": "verify_sending_domain",
        "title": null
      }
    ],
    "version": "0.4.24"
  },
  "status_history": [
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
      "observed_at_utc": "2026-10-20T21:49:30Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "6c88519bf52359fec503b463b9aa8d198fdd19111cf3ee1bc72c096254fdd635",
      "observed_at_utc": "2026-10-19T20:26:45Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "observed_at_utc": "2026-10-18T19:12:58Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "observed_at_utc": "2026-10-17T17:59:51Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "observed_at_utc": "2026-10-16T16:19:10Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "284ae9a4a8bd553a2d48ed098a68683585d04686b10aa3b75d2e764eabdc870f",
      "observed_at_utc": "2026-10-15T14:54:08Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-14T13:01:29Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-13T11:50:00Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-12T09:54:26Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-11T08:38:53Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-10T07:28:16Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-09T06:13:45Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c9c7c70c44a984f07a9f1bd663e2fc50887fda375df647777efc488a6bd9be82",
      "observed_at_utc": "2026-10-08T04:54:37Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "f723e008eed7ba7ac15099712e48e521161d5c56d7fd295a4328eec81c63bcf3",
      "observed_at_utc": "2026-10-07T03:32:54Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "f723e008eed7ba7ac15099712e48e521161d5c56d7fd295a4328eec81c63bcf3",
      "observed_at_utc": "2026-10-06T02:12:24Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "observed_at_utc": "2026-10-05T00:58:18Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "observed_at_utc": "2026-10-03T23:41:26Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "observed_at_utc": "2026-10-02T22:30:51Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "411123d9661566e9dc6dba53f52394bf8688f3ce876f345d622ea4080339c0df",
      "observed_at_utc": "2026-10-01T21:10:17Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "cd71b0570e9fe70b635a9da2187c2b103e77bcf40020f1ec4a3cbb7b67c745e8",
      "observed_at_utc": "2026-09-30T07:53:17Z",
      "protocol_version": "2025-06-18"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "cd71b0570e9fe70b635a9da2187c2b103e77bcf40020f1ec4a3cbb7b67c745e8",
      "observed_at_utc": "2026-09-29T05:50:23Z",
      "protocol_version": "2025-06-18"
    }
  ],
  "target": {
    "corrections_route": "https://www.gaipagents.com/v1/free/observatory/corrections",
    "first_seen_at_utc": "2026-09-29T02:55:24Z",
    "kind": "MCP_REMOTE",
    "last_observed_at_utc": "2026-10-20T21:49:30Z",
    "locator": "https://mcp.sendraven.ai/mcp",
    "name": "ai.sendraven/mcp",
    "source": "official-mcp-registry",
    "target_id": "obs_3bfc3bae46b93206c4f201a0"
  }
}