{
  "name": "Announcer",
  "description": "Transactional email sent from a customer's own domain and DKIM-signed. This agent runs no model and interprets no prose: send a data part naming a skill and its arguments, and it returns a completed task carrying what the API answered.",
  "provider": {
    "organization": "Misralo",
    "url": "https://misralo.com/"
  },
  "version": "0.1.0",
  "documentationUrl": "https://misralo.com/docs.html",
  "supportedInterfaces": [
    {
      "url": "https://mail.misralo.com/a2a",
      "protocolBinding": "HTTP+JSON",
      "protocolVersion": "1.0"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "send_email",
      "name": "Send a message",
      "description": "Send one email from a verified sending domain. The `from` address must be on a domain this account has registered and verified, or the call is refused. Messages are counted against the plan's daily and monthly limits. Bodies are not stored, so a sent message cannot be read back -- only its envelope metadata and delivery events.",
      "tags": [
        "email"
      ],
      "examples": [
        "{\"skill\": \"send_email\", \"arguments\": {\"from\": \"billing@your-company.com\", \"to\": [\"someone@example.net\"], \"subject\": \"Your receipt\", \"text\": \"Thanks for your order.\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_messages",
      "name": "List messages",
      "description": "Recent messages with their status and recipient, newest first. Optional `search` matches any recipient. Envelope metadata only: subjects and recipients, never bodies.",
      "tags": [
        "email"
      ],
      "examples": [
        "{\"skill\": \"list_messages\", \"arguments\": {\"search\": \"someone@example.net\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "message_events",
      "name": "Delivery events for a message",
      "description": "What happened to one message after it was accepted: delivery, bounce, complaint. Use it to answer 'did this arrive' rather than guessing from the send call's response, which only reports acceptance.",
      "tags": [
        "email"
      ],
      "examples": [
        "{\"skill\": \"message_events\", \"arguments\": {\"id\": \"8f14e45f-ceea-467a-9a3c-1f0b1c6f9f1e\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "usage",
      "name": "Usage and limits",
      "description": "How much of the plan's daily and monthly allowance this account has used. Check it before a large send rather than discovering the cap by hitting it.",
      "tags": [
        "email"
      ],
      "examples": [
        "{\"skill\": \"usage\", \"arguments\": {}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_suppressions",
      "name": "Suppressed addresses",
      "description": "Addresses that will not be mailed again, and why: a hard bounce or a complaint. Sending to one is refused, so check here when a message to a known-good address is rejected.",
      "tags": [
        "email"
      ],
      "examples": [
        "{\"skill\": \"list_suppressions\", \"arguments\": {\"limit\": 50}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "list_domains",
      "name": "Sending domains",
      "description": "The account's sending domains and whether each is verified. Only a verified domain can send.",
      "tags": [
        "email",
        "domains"
      ],
      "examples": [
        "{\"skill\": \"list_domains\", \"arguments\": {}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "register_domain",
      "name": "Register a sending domain",
      "description": "Start using a new domain. Returns the DNS record that must be published in that domain's zone before anything can be sent from it -- which needs whoever controls the DNS, not this tool. Generates a signing key, so it is rate limited to one a minute.",
      "tags": [
        "email",
        "domains"
      ],
      "examples": [
        "{\"skill\": \"register_domain\", \"arguments\": {\"domain\": \"your-company.com\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "domain_dns",
      "name": "The DNS record for a domain",
      "description": "The record to publish for a domain registered earlier, in case it was lost. Publishing it is the person's job; this only says what it is.",
      "tags": [
        "email",
        "domains"
      ],
      "examples": [
        "{\"skill\": \"domain_dns\", \"arguments\": {\"id\": \"8f14e45f-ceea-467a-9a3c-1f0b1c6f9f1e\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "verify_domain",
      "name": "Check a domain's DNS record",
      "description": "Resolve the domain's DKIM record and compare it to the key we issued. Verification is recorded only on a real match. Call it after the record has been published; DNS propagation means the first attempt may fail.",
      "tags": [
        "email",
        "domains"
      ],
      "examples": [
        "{\"skill\": \"verify_domain\", \"arguments\": {\"id\": \"8f14e45f-ceea-467a-9a3c-1f0b1c6f9f1e\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "securitySchemes": {
    "bearer": {
      "httpAuthSecurityScheme": {
        "scheme": "bearer",
        "description": "An Announcer API key. How to get one without a password is at https://misralo.com/auth.md."
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ]
}
