{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_xf9er7tfqfu3","handle":"ai-sendraven-mcp","url":"https://wellknown.network/agents/ai-sendraven-mcp","links":{"self":"https://wellknown.network/agents/ai-sendraven-mcp/record.json","html":"https://wellknown.network/agents/ai-sendraven-mcp","markdown":"https://wellknown.network/agents/ai-sendraven-mcp/record.md","api":"https://wellknown.network/api/v1/agents/ai-sendraven-mcp","status":"https://wellknown.network/api/v1/agents/ai-sendraven-mcp/status","claim":"https://wellknown.network/agents/ai-sendraven-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/ai-sendraven-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:mcp.sendraven.ai:server:ai-sendraven-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp","summary":"Email for AI agents: send, read replies as threads, run campaigns, with per-key limits.","description":"Email for AI agents: send, read replies as threads, run campaigns, with per-key limits.","publisher":{"name":"ai.sendraven","url":null},"homepage":"https://sendraven.ai/mcp","repository":"https://github.com/CommonNinja/sendraven-mcp-server","version":"0.2.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.sendraven.ai/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@sendraven/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-04T05:44:26.009891Z","publishedAt":"2026-09-04T05:44:26.009891Z","registryName":"ai.sendraven/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.marketing","name":"Marketing","confidence":1,"provenance":"derived"},{"slug":"productivity.email","name":"Email","confidence":0.859,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.554,"provenance":"derived"},{"slug":"finance.markets","name":"Markets & Trading","confidence":0.525,"provenance":"derived"},{"slug":"ai.prompting","name":"Prompt Management","confidence":0.525,"provenance":"derived"},{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":0.51,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.51,"provenance":"derived"}],"categories":["ai","communication","content","documents","finance","productivity"]},"observed":{"status":"live","statusReason":"Responded 26s ago.","lastOkAt":"2026-09-05T17:26:28.001Z","lastProbedAt":"2026-09-05T17:26:28.001Z","statusComputedAt":"2026-09-05T17:26:54.406Z","reliability30d":{"probes":1,"successRate":1,"p50Ms":104},"latestObservations":[{"at":"2026-09-05T17:26:28.001Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":104,"error":null,"detail":{"tools":[{"name":"send_email","description":"Send a transactional email, immediately or scheduled. Use scheduled_at with a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already"},{"name":"list_emails","description":"List recent messages with their delivery status. Filter by status (queued, scheduled, sent, delivered, bounced, complained, rejected) or recipient."},{"name":"get_email","description":"Fetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). This is the tool to reach for when asked why an email didn't ar"},{"name":"cancel_scheduled_email","description":"Cancel a scheduled email before it sends. Only works while status is 'scheduled'."},{"name":"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"},{"name":"add_sending_domain","description":"Register a sending domain and get back the DNS records to publish. Give the domain you send from — mail.<domain> and news.<domain> are provisioned beneath it an"},{"name":"verify_sending_domain","description":"Re-check a domain's DNS records now instead of waiting for the background monitor."},{"name":"list_suppressions","description":"List addresses we refuse to mail and why (hard_bounce, complaint, unsubscribe, manual). Check here first when someone reports not receiving email."},{"name":"add_suppression","description":"Stop sending to an address. Scope 'marketing' leaves transactional mail working."},{"name":"remove_suppression","description":"Remove a suppression so the address can be mailed again. Be careful with hard bounces — the address was rejected by the receiving server, and re-sending raises "},{"name":"get_broadcast","description":"One campaign, with a 'progress' object while it is sending or paused: how many addresses are still pending, sent, failed, or skipped because the person opted ou"},{"name":"list_broadcasts","description":"List campaigns with their status and send progress. A campaign showing 'paused' is not broken: it ran out of the day's sending quota part way and is waiting to "},{"name":"preview_broadcast","description":"How many contacts a campaign would reach, and whether the reputation gate would allow it. Always run this before sending — it is the only way to see the size of"},{"name":"resume_broadcast","description":"Continue a campaign left 'paused' by the daily sending quota. It mails only the addresses still pending — the audience was frozen when the campaign started and "},{"name":"send_broadcast","description":"Send a campaign now, or schedule it with scheduled_at. This mails every contact in the segment and cannot be undone once started — run preview_broadcast first. "},{"name":"list_threads","description":"List email conversations. Pass awaiting_reply=true to get only the threads where someone has written to you and you haven't answered — this is the tool to poll "},{"name":"get_thread","description":"Read a conversation as a chronological transcript of outbound and inbound messages. Inbound text already has quoted history and signatures stripped, so read `te"},{"name":"reply_to_message","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 rat"},{"name":"list_templates","description":"List stored email templates and the variables each one needs. Prefer sending via a template over composing HTML yourself — templates carry the brand styling and"},{"name":"render_template","description":"Render a template with values, without sending. Use this to check your copy reads correctly before mailing a real person. Returns an error listing any missing v"},{"name":"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."},{"name":"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. If your sen"},{"name":"decide_approval","description":"Approve or reject a held message. Approving sends it immediately. Only use this when a human has explicitly told you which decision to make — the hold exists pr"},{"name":"list_automations","description":"List multi-step email sequences and how many people are currently in each. Use this to find the right automation before enrolling someone."},{"name":"enroll_in_automation","description":"Put someone into a multi-step sequence. Prefer this over scheduling several emails yourself: the sequence stops on its own if they unsubscribe, reply, or hard b"},{"name":"emit_event","description":"Emit a named event, starting every automation that waits on it — for example 'trial_started' or 'invoice_overdue'. Use this when you want the configured sequenc"},{"name":"list_topics","description":"List subscription topics — the categories a person can opt out of individually. Pass a topic when sending marketing mail so recipients can unsubscribe from that"},{"name":"get_email_preferences","description":"What one person has chosen to receive. Check this before asking a human why someone isn't getting a particular kind of email — an opt-out looks identical to a d"},{"name":"set_email_preferences","description":"Set which topics a person receives. Only do this when they have actually asked — silently re-subscribing someone who opted out is what generates spam complaints"},{"name":"list_audiences","description":"List contact lists and how many contacts each holds."},{"name":"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 th"},{"name":"get_contact","description":"Fetch one contact by id, with their audience memberships, custom properties and engagement dates."},{"name":"update_contact","description":"Update a contact. Attributes are merged, so sending one field does not clear the rest."},{"name":"list_segments","description":"List saved audience filters. Use a segment id when creating a campaign rather than describing the filter inline, so the same definition can be reused and counte"},{"name":"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."},{"name":"count_segment","description":"How many contacts a segment currently matches. Run this before building a campaign around it — a filter that matches nobody is easier to spot here than after a "},{"name":"get_email_metrics","description":"Delivery and engagement over a window. Open and click rates are over delivered, not sent — a low open rate with a high bounce rate is a deliverability problem, "},{"name":"list_scheduled_emails","description":"Messages queued to send later but not yet sent. Cancel one with cancel_scheduled_email."},{"name":"suppress_many","description":"Stop sending to many addresses at once — the path for importing another provider's unsubscribe list before a first campaign. Without it, everyone who already op"},{"name":"list_webhook_deliveries","description":"Recent delivery attempts for a webhook endpoint, with status codes and errors. This is how to tell 'we never sent it' from 'your endpoint returned 500'."},{"name":"list_broadcast_recipients","description":"Who a campaign reached and what happened to each message."},{"name":"list_api_keys","description":"List this workspace's API keys with their scopes and limits. Never returns key values."},{"name":"get_usage","description":"This workspace's plan, how many emails it has sent this month, and how many are left. Check before a large batch: a send that would cross the included allowance"},{"name":"find_contact","description":"Find a contact by address across every audience, without knowing which list they are on. Use email for an exact match, or q for a prefix. Returns each audience "},{"name":"remove_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. To remove the person "},{"name":"delete_contact","description":"Remove a person from the workspace entirely, along with every audience membership. Their suppression and topic preferences are kept on purpose — an opt-out has "},{"name":"tag_contact","description":"Add or remove tags on a contact. Tags are flat labels — vip, beta, churned — as opposed to custom properties, which are declared fields with a value. They are l"}],"toolCount":47,"serverName":"sendraven","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"send_email","description":"Send a transactional email, immediately or scheduled. Use scheduled_at with a relative phrase like 'in 3 days' or an ISO timestamp. The From domain must already"},{"name":"list_emails","description":"List recent messages with their delivery status. Filter by status (queued, scheduled, sent, delivered, bounced, complained, rejected) or recipient."},{"name":"get_email","description":"Fetch one message with its full event timeline (send, delivery, bounce, complaint, open, click). This is the tool to reach for when asked why an email didn't ar"},{"name":"cancel_scheduled_email","description":"Cancel a scheduled email before it sends. Only works while status is 'scheduled'."},{"name":"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"},{"name":"add_sending_domain","description":"Register a sending domain and get back the DNS records to publish. Give the domain you send from — mail.<domain> and news.<domain> are provisioned beneath it an"},{"name":"verify_sending_domain","description":"Re-check a domain's DNS records now instead of waiting for the background monitor."},{"name":"list_suppressions","description":"List addresses we refuse to mail and why (hard_bounce, complaint, unsubscribe, manual). Check here first when someone reports not receiving email."},{"name":"add_suppression","description":"Stop sending to an address. Scope 'marketing' leaves transactional mail working."},{"name":"remove_suppression","description":"Remove a suppression so the address can be mailed again. Be careful with hard bounces — the address was rejected by the receiving server, and re-sending raises "},{"name":"get_broadcast","description":"One campaign, with a 'progress' object while it is sending or paused: how many addresses are still pending, sent, failed, or skipped because the person opted ou"},{"name":"list_broadcasts","description":"List campaigns with their status and send progress. A campaign showing 'paused' is not broken: it ran out of the day's sending quota part way and is waiting to "},{"name":"preview_broadcast","description":"How many contacts a campaign would reach, and whether the reputation gate would allow it. Always run this before sending — it is the only way to see the size of"},{"name":"resume_broadcast","description":"Continue a campaign left 'paused' by the daily sending quota. It mails only the addresses still pending — the audience was frozen when the campaign started and "},{"name":"send_broadcast","description":"Send a campaign now, or schedule it with scheduled_at. This mails every contact in the segment and cannot be undone once started — run preview_broadcast first. "},{"name":"list_threads","description":"List email conversations. Pass awaiting_reply=true to get only the threads where someone has written to you and you haven't answered — this is the tool to poll "},{"name":"get_thread","description":"Read a conversation as a chronological transcript of outbound and inbound messages. Inbound text already has quoted history and signatures stripped, so read `te"},{"name":"reply_to_message","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 rat"},{"name":"list_templates","description":"List stored email templates and the variables each one needs. Prefer sending via a template over composing HTML yourself — templates carry the brand styling and"},{"name":"render_template","description":"Render a template with values, without sending. Use this to check your copy reads correctly before mailing a real person. Returns an error listing any missing v"},{"name":"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."},{"name":"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. If your sen"},{"name":"decide_approval","description":"Approve or reject a held message. Approving sends it immediately. Only use this when a human has explicitly told you which decision to make — the hold exists pr"},{"name":"list_automations","description":"List multi-step email sequences and how many people are currently in each. Use this to find the right automation before enrolling someone."},{"name":"enroll_in_automation","description":"Put someone into a multi-step sequence. Prefer this over scheduling several emails yourself: the sequence stops on its own if they unsubscribe, reply, or hard b"},{"name":"emit_event","description":"Emit a named event, starting every automation that waits on it — for example 'trial_started' or 'invoice_overdue'. Use this when you want the configured sequenc"},{"name":"list_topics","description":"List subscription topics — the categories a person can opt out of individually. Pass a topic when sending marketing mail so recipients can unsubscribe from that"},{"name":"get_email_preferences","description":"What one person has chosen to receive. Check this before asking a human why someone isn't getting a particular kind of email — an opt-out looks identical to a d"},{"name":"set_email_preferences","description":"Set which topics a person receives. Only do this when they have actually asked — silently re-subscribing someone who opted out is what generates spam complaints"},{"name":"list_audiences","description":"List contact lists and how many contacts each holds."},{"name":"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 th"},{"name":"get_contact","description":"Fetch one contact by id, with their audience memberships, custom properties and engagement dates."},{"name":"update_contact","description":"Update a contact. Attributes are merged, so sending one field does not clear the rest."},{"name":"list_segments","description":"List saved audience filters. Use a segment id when creating a campaign rather than describing the filter inline, so the same definition can be reused and counte"},{"name":"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."},{"name":"count_segment","description":"How many contacts a segment currently matches. Run this before building a campaign around it — a filter that matches nobody is easier to spot here than after a "},{"name":"get_email_metrics","description":"Delivery and engagement over a window. Open and click rates are over delivered, not sent — a low open rate with a high bounce rate is a deliverability problem, "},{"name":"list_scheduled_emails","description":"Messages queued to send later but not yet sent. Cancel one with cancel_scheduled_email."},{"name":"suppress_many","description":"Stop sending to many addresses at once — the path for importing another provider's unsubscribe list before a first campaign. Without it, everyone who already op"},{"name":"list_webhook_deliveries","description":"Recent delivery attempts for a webhook endpoint, with status codes and errors. This is how to tell 'we never sent it' from 'your endpoint returned 500'."},{"name":"list_broadcast_recipients","description":"Who a campaign reached and what happened to each message."},{"name":"list_api_keys","description":"List this workspace's API keys with their scopes and limits. Never returns key values."},{"name":"get_usage","description":"This workspace's plan, how many emails it has sent this month, and how many are left. Check before a large batch: a send that would cross the included allowance"},{"name":"find_contact","description":"Find a contact by address across every audience, without knowing which list they are on. Use email for an exact match, or q for a prefix. Returns each audience "},{"name":"remove_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. To remove the person "},{"name":"delete_contact","description":"Remove a person from the workspace entirely, along with every audience membership. Their suppression and topic preferences are kept on purpose — an opt-out has "},{"name":"tag_contact","description":"Add or remove tags on a contact. Tags are flat labels — vip, beta, churned — as opposed to custom properties, which are declared fields with a value. They are l"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"ai.sendraven/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/ai.sendraven%2Fmcp","firstSeenAt":"2026-09-05T14:18:29.532Z","fetchedAt":"2026-09-05T14:18:29.532Z","normalizedAt":"2026-09-05T14:18:29.532Z"}]},"firstSeenAt":"2026-09-05T14:18:29.532Z","updatedAt":"2026-09-05T17:26:56.324Z"}