Skip to content
Agentmart
Submit a tool

ReplyLayer

Safe email for AI agents: a mailbox with inbound scanning, outbound checks and human review.

Connector by replylayer.aiOfficial · Domain verified by the MCP Registry

IndexedLicense unknownLocal (stdio)Remote (HTTP)
Write a review

Chalk Labs

Need help deploying ReplyLayer?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/replylayer-ai-replylayer

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://api.replylayer.ai/v1/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Safe email for AI agents: a mailbox with inbound scanning, outbound checks and human review.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
20 read · 0 write · 24 delete
Secrets
2 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 44

Read from the source code; the running server may list different tools.

Read 20 · Look things up without changing anything.

  • get_account_usage
  • get_agent_quota
  • get_attachment_preview
  • get_draft
  • get_link_scanning_status
  • get_thread
  • list_allowlist
  • list_allowlist_blocked_attempts
  • list_drafts
  • list_inbound_allowlist
  • list_inbound_blocklist
  • list_inbound_firewall_blocked_attempts
Show 8 more tools
  • list_mailboxes
  • list_messages
  • list_recipients
  • list_suppressions
  • list_threads
  • read_message
  • remove_suppression
  • wait_for_message

Delete 24 · Delete, drop, revoke or wipe things.

  • add_inbound_allowlist_bulk
  • add_inbound_allowlist_entry
  • add_inbound_blocklist
  • add_inbound_blocklist_bulk
  • add_recipient
  • add_suppression
  • add_suppressions_bulk
  • approve_review
  • block_quarantined_message
  • create_draft
  • delete_draft
  • delete_message
Show 12 more tools
  • deny_review
  • mark_message_read
  • mark_thread_read
  • release_firewall_blocked_message
  • release_quarantined_message
  • reply_to_message
  • report_and_block
  • send_draft
  • send_email
  • star_message
  • star_thread
  • update_draft

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • Authorization
  • REPLYLAYER_API_KEY

Network hosts it talks to 1

  • api.replylayer.ai · found in remote endpoint, install command

Tools (44)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_inbound_allowlist_bulkAdd to inbound allowlist in bulkcan change or delete data

    Bulk-add up to 1000 sender email addresses or @domain patterns to the inbound allowlist for a mailbox in a single call. Useful for onboarding/migration when importing an existing trusted-senders list. Returns a partial-success response: added[], already_existed[], invalid[] (with per-email reason), and a counts summary. Idempotent — existing entries move to already_existed, not an error. Accepts the same email/@domain forms as add_inbound_allowlist_entry.

  • add_inbound_allowlist_entryAdd to inbound allowlistcan change or delete data

    Add a sender (email or @domain) to the inbound allowlist for a mailbox. When the mailbox is in `allowlist` mode, only senders matching an entry on this list will be delivered; everyone else lands in state="firewall_blocked". Accepts an exact email or @domain pattern. Idempotent — repeat adds return already_existed=true.

  • add_inbound_blocklistAdd to inbound blocklistcan change or delete data

    Add an email or domain pattern to the inbound (incoming) blocklist. Mirrors `add_suppression` for the inbound side: customer-protective do-not-receive list. Accepts an exact email (alice@spam.com) or @domain (@spam.com). Server forces reason="manual" + source="customer". Idempotent — repeat adds return already_existed=true. Removal IS exposed via the API/SDK/CLI (DELETE /v1/inbound-blocklist/:email) but NOT here — the MCP surface is one-way to mirror the suppression posture.

  • add_inbound_blocklist_bulkAdd to inbound blocklist in bulkcan change or delete data

    Bulk-add up to 1000 sender email addresses or @domain patterns to the account-wide inbound blocklist in a single call. Useful for onboarding/migration when importing an existing spam/blocked-sender list. Returns a partial-success response: added[], already_existed[], invalid[] (with per-email reason), and a counts summary. Idempotent — existing entries move to already_existed, not an error.

  • add_recipientAdd recipientcan change or delete data

    Add a person to the account's recipient list so you can email them. Only for accounts on the free Sandbox; other accounts don't use this list and get an error here. On a paid plan, if the mailbox is restricted to people the account owner approves, ask the user to approve the person for this mailbox. By default the person is emailed a confirmation link and you can send to them once they click it. With attest set to true, no email is sent and you can send to them right away: the account vouches for the person, which uses one of the account's limited attestations for its trial. Only set attest wh…

  • add_suppressionAdd do-not-contact entrycan change or delete data

    Add an email address OR a domain pattern to the do-not-contact list. Accepts two input forms: an exact email (alice@corp.com) or a bare-domain pattern (@corp.com) that blocks every address at that domain. Once added, all future sends matching the entry from this account will be blocked. This tool is one-way: removal is intentionally not exposed via MCP regardless of key scope. Undoing a block requires the CLI, SDK, or dashboard with an admin key. Server forces reason="manual" + source="customer". Idempotent — repeat adds return already_existed=true.

  • add_suppressions_bulkAdd do-not-contact entries in bulkcan change or delete data

    Bulk-add up to 1000 email addresses or @domain patterns to the do-not-contact list in a single call. Useful for onboarding/migration when importing an existing suppression/unsubscribe list. Returns a partial-success response: added[], already_existed[], invalid[] (with per-email reason), and a counts summary. Idempotent — existing entries move to already_existed, not an error. Removal is intentionally NOT exposed via MCP; use the CLI (`rly suppressions remove`), an SDK admin key, or the dashboard.

  • approve_reviewApprove message held for reviewcan change or delete data

    Approve a state="pending_review" message and dispatch it. Wire status reports the dispatch outcome ("sent" or "blocked" — release-style); audit_log + message.review.approved webhook fire regardless of dispatch outcome. Auth: admin API keys + session only — agent keys 403. Optional reason text (max 500 chars) is persisted to messages.review_reason and included in the audit/webhook payloads.

  • block_quarantined_messageBlock quarantined messagecan change or delete data

    Block a state="quarantined" INBOUND message (→ terminal blocked, no delivery). INBOUND-ONLY: the tool pre-fetches the message and refuses an outbound row (manage outbound quarantines from the dashboard). Optional reason is persisted to the audit log. Mailbox-bound agent keys can only block messages whose mailbox they are bound to.

  • create_draftCreate draftcan change or delete data

    Create a draft email. The scanner runs synchronously and attaches a verdict. No email is sent unless `send_at` is set: without it the draft waits for send_draft; with it the draft is sent at that time with no further call. Pass `send_at` (ISO-8601 with explicit offset or Z, e.g. "2026-05-01T09:00:00Z") to schedule dispatch for that time. The full send-time gate stack (scanner rescan, suppression, allowlist, budget, etc.) runs at dispatch time — so any policy change between now and then is honored. Valid range: >60s in the future, <90 days horizon (adjustable by deployment). Naive timestamps w…

  • delete_draftDelete draftcan change or delete data

    Soft-delete a draft (sets state="deleted"; hides it from list_drafts). The row remains in the database and the raw MIME body persists in storage for operator recovery. If the draft was scheduled for future dispatch, the schedule is cancelled and a message.schedule_cancelled webhook fires. This deletes ANY draft in the mailbox — including scheduled drafts queued by other agents and human-staged drafts awaiting review. Confirm intent before calling.

  • delete_messageDelete messagecan change or delete data

    Permanently delete a message: soft-deletes the row and purges its raw MIME and attachment derivatives from object storage. Works on any direction (inbound or outbound) in a deletable state; draft, scheduled, and dispatching rows are refused with a conflict. Idempotent (re-deleting returns success). Requires the account agent-deletion policy to be enabled for agent keys — otherwise a permission error is returned with a machine-readable remedy in details. Mailbox-bound agent keys can only delete messages whose mailbox they are bound to.

  • deny_reviewDeny message held for reviewcan change or delete data

    Deny a state="pending_review" message; terminal block (no dispatch). Audit_log + message.review.denied webhook fire on commit. Auth: admin API keys + session only — agent keys 403. Optional reason text (max 500 chars) is persisted to messages.review_reason and included in the audit/webhook payloads.

  • get_account_usageGet account usageread-only

    Get account usage, limits, storage quota state, and storage byte breakdown.

  • get_agent_quotaGet send quotaread-only

    Get the current send-budget quota (sends today, effective daily limit, remaining, reset time, bound mailbox IDs). Works with agent-scoped keys. Includes a warmup object while a new paid account ramps on the shared domain.

Show 29 more tools
  • get_attachment_previewGet attachment previewread-only

    Get a derived text preview of an inbound message attachment. Returns extracted text for plain-text, CSV, PDF, and Office (DOCX/PPTX/XLSX) attachments on mailboxes with attachment_exposure_mode="derived_content". Content is hard-capped at 20 000 characters; check preview.truncated and preview.char_count if you need the full extent. Raw bytes are NOT available via MCP. If the derivative is not ready or failed, the server returns 404 ATTACHMENT_PREVIEW_NOT_AVAILABLE — this tool surfaces that as an isError result.

  • get_draftGet draftread-only

    Read a specific draft by ID. Returns the full draft including body, scan results, scheduled-send fields, and sub-address fields if set.

  • get_link_scanning_statusGet link scanning statusread-only

    Get malicious link scanning (URL reputation) activation status for the account: active, accepted_version, current_version, privacy_ok. Read-only; works with any key. Enabling it is a human/admin action (dashboard or `rly account link-scanning enable`), not an agent action.

  • get_threadGet threadread-only

    Read a full email thread as one ordered conversation (every message in the thread, oldest → newest, safe-view only). Pass the thread_id from list_threads or a message's thread_id. A thread key can resolve in more than one mailbox — a `NOT_FOUND` error means the thread is either absent or the key is ambiguous; retry with `mailbox` to disambiguate.

  • list_allowlistList recipient allowlistread-only

    List the recipient allowlist for a given mailbox. Only meaningful when the mailbox is in recipient_policy_mode=allowlist; in blocklist mode the allowlist is not consulted. Use this to check what addresses are approved before attempting a send. Entries may be exact emails (alice@corp.com) OR domain patterns (@corp.com) — the latter approves every address at that domain. Each row carries a pattern_type field ("email" or "domain"). Agents CANNOT add or remove entries via MCP (admin-only, by design). When allowlist mode is active, sends to off-list recipients return 403 with code RECIPIENT_NOT_ON_…

  • list_allowlist_blocked_attemptsList allowlist-blocked sendsread-only

    Inspect sends this agent (or a peer agent on the same mailbox) attempted that were rejected by the recipient allowlist (403 RECIPIENT_NOT_ON_ALLOWLIST). Default returns an aggregated top-N summary with one row per recipient and sending key (the key id is not shown; actor_type says admin or agent) with count + first/last timestamps + origins. Pass aggregate=false for raw per-attempt history with cursor pagination. Use this to understand why sends are being blocked and either pick different recipients or surface the address to an admin for allowlist review.

  • list_draftsList draftsread-only

    List drafts in a ReplyLayer mailbox. Drafts are scan-then-review-then-send entries; use create_draft to make one and send_draft to dispatch it.

  • list_inbound_allowlistList inbound allowlistread-only

    List per-mailbox inbound allowlist entries (senders permitted in `allowlist` mode). Mirrors `list_allowlist` for the inbound side. Read-only. Returns up to `limit` rows (default 100, max 500); pass `cursor` to paginate.

  • list_inbound_blocklistList inbound blocklistread-only

    List account-wide inbound sender blocklist entries (the do-not-receive list). Mirrors `list_suppressions` for the inbound side. Returns up to `limit` rows (default 100, max 500); pass `cursor` to paginate. Read-only.

  • list_inbound_firewall_blocked_attemptsList firewall-blocked sendersread-only

    List incoming senders rejected by the inbound firewall for a mailbox. Default aggregated view groups by (sender, matched_field, mode, reason_code) ordered by most recent. Pass aggregate=false for raw per-attempt history with tuple-cursor pagination. within_days filters by recency (1..365). Read-only.

  • list_mailboxesList mailboxesread-only

    List all mailboxes on the account. Returns name, full address, status, and the recipient-visible From identity (effective_from_display) for each mailbox.

  • list_messagesList messagesread-only

    List / search messages in a ReplyLayer mailbox. Filter by keyword search, sender, date range, direction, and status — including the held-mail states for triage: status="quarantined" or status="pending_review" (then release_quarantined_message / approve_review). Page older by passing before=<id of the oldest message from the previous page>.

  • list_recipientsList recipientsread-only

    List recipients with confirmation status. Sandbox-tier accounts can only send to confirmed recipients.

  • list_suppressionsList do-not-contact entriesread-only

    List addresses on the do-not-contact list (suppressions). Includes both system-added entries (hard bounces, spam complaints, RFC 8058 unsubscribes) and customer-added entries (reason="manual", source="customer"). Useful for verifying that an address is or is not blocked before attempting to send. Entries may be exact emails (alice@corp.com) OR domain patterns (@corp.com) — the latter blocks every address at that domain. Each row carries a pattern_type field ("email" or "domain") to disambiguate.

  • list_threadsList threadsread-only

    List conversation threads in a mailbox (most-recent first), each with participants, unread_count, and last_message_at. Then use get_thread to read one. Page older by passing before_ts = the oldest last_message_at from the previous page. Filter with starred / has_inbound.

  • mark_message_readMark message readcan change or delete data

    Mark a single message as read. Eligible only for inbound, visible rows. Outbound / deleted / firewall_blocked rows return a 200 no-op with the existing read_at. Idempotent: a second call returns the same read_at. Use this after read_message to advance the customer's read state — read_message itself is now side-effect-free.

  • mark_thread_readMark thread readcan change or delete data

    Bulk-mark every visible inbound unread message in a thread as read. Returns marked_count of rows newly stamped this call. Excludes outbound, deleted, and firewall_blocked rows. Idempotent: a thread with everything already read returns marked_count: 0. Use this after fetching a full thread (e.g. via read_message of each entry) to advance the customer's read state in one call.

  • read_messageRead messageread-only

    Read a specific message by ID. Returns the default plaintext body projection, attachment metadata/status fields, and scan results for human handoff.

  • release_firewall_blocked_messageRelease firewall-blocked messagecan change or delete data

    Release a state="firewall_blocked" message back into scanner processing. Returns 202 immediately; actual scanner verdict (available/quarantined/blocked) is observed by re-reading the message detail. Mailbox-bound agent keys can only release messages whose mailbox they are bound to. Releasing does NOT remove the matching entry from the inbound blocklist or add the sender to the inbound allowlist; those remediations are explicit per-tool calls.

  • release_quarantined_messageRelease quarantined messagecan change or delete data

    Release a state="quarantined" INBOUND message back into the inbox (→ available). INBOUND-ONLY: the tool pre-fetches the message and refuses an outbound row (releasing an outbound quarantine would re-send it via the provider — manage those from the dashboard). Optional reason is persisted to the audit log. Mailbox-bound agent keys can only release messages whose mailbox they are bound to.

  • remove_suppressionRemove do-not-contact entry (unavailable)read-only

    Suppression removal is intentionally NOT available via MCP. Undoing a do-not-contact entry is a per-human admin decision — use the CLI (`rly suppressions remove`), an SDK admin key, or the dashboard.

  • reply_to_messageReply to messagecan change or delete data

    Reply to a message. The reply is sent from the same mailbox that received the original message, threading correctly. Returns the message ID, status, and the Governed Email-Effect fields: email_effect (effect_status = sent | held_for_review | held_infrastructure | blocked, plus releasable/terminal/retryable — branch on this in ONE read for proceed vs release vs retry vs edit/escalate), scan (the scanner verdict + findings), and hold_context (the hold reason + agent_instructions on held sends — policy causes, policy-changed decisions, and genuine scan-explained holds alike; null on sent/terminal…

  • report_and_blockReport and block sendercan change or delete data

    Report and block an INBOUND message: blocks a held (quarantined) message and adds the resolved sender to your account-wide inbound blocklist (idempotent). INBOUND-ONLY: the tool pre-fetches the message and refuses an outbound row (an outbound message has no inbound sender to block). Optional reason is persisted to the audit log. Mailbox-bound agent keys can only act on messages whose mailbox they are bound to.

  • send_draftSend draftcan change or delete data

    Send a draft. The server re-runs the scanner authoritatively at send time; the verdict can differ from the create-time verdict because mailbox policy, suppressions, allowlists, or scanner models may have changed in between. Success returns { message_id, status, scan, hold_context, daily_limit, sends_remaining }: - status='sent' → message dispatched to the provider. - status='pending_review' → review queue entry created (every tier); an operator must approve before dispatch. - `scan` is the scanner verdict; `hold_context` is the hold reason plus agent_instructions on held sends —…

  • send_emailSend emailcan change or delete data

    Send an email from a ReplyLayer mailbox — a fresh send, or continue an existing thread with thread_id. Returns the message ID, status (sent, quarantined, blocked, or pending_review), and the Governed Email-Effect fields: email_effect (effect_status = sent | held_for_review | held_infrastructure | blocked, plus releasable/terminal/retryable — branch on this in ONE read for proceed vs release vs retry vs edit/escalate), scan (the scanner verdict + findings), and hold_context (the hold reason + agent_instructions on held sends — policy causes, policy-changed decisions, and genuine scan-explained …

  • star_messageStar or unstar messagecan change or delete data

    Star or unstar a message. Pass starred=true to star, starred=false to unstar. Idempotent — re-starring an already-starred message is a no-op. Works for both inbound and outbound messages.

  • star_threadStar or unstar threadcan change or delete data

    Star or unstar a thread. Pass starred=true to star, starred=false to unstar. The mailbox parameter accepts a mailbox name or UUID. Idempotent — re-starring an already-starred thread is a no-op.

  • update_draftUpdate draftcan change or delete data

    Update an existing draft. Re-runs the scanner synchronously and attaches a fresh verdict. This call sends no email itself, but a draft with a `send_at` (set here or earlier) is sent at that time with no further call; use clear_send_at to stop it. Set semantics: - subaddress_instance_id / subaddress_mode / send_at → string value sets the field. - clear_subaddress_instance_id / clear_subaddress_mode / clear_send_at → true clears the field (sends null to the API). Use clear_send_at to cancel a scheduled send. - Passing both a set field and its clear flag returns an error without callin…

  • wait_for_messageWait for messageread-only

    Long-poll for new messages in a mailbox. Returns when a new message arrives or the timeout expires.

Signals

Last release
Oct 1, 2026 (1 month ago)

Details

Registry name
ai.replylayer/replylayer
Version
0.15.1
Auth
Bearer token, API key
Packages
npm replylayer-mcp
License
License unknown
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get ReplyLayer running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying ReplyLayer?

CallGet help
Cite this page

ReplyLayer MCP server. Agent Mart. https://agentmart.dev/connectors/replylayer-ai-replylayer (last updated 2026-10-24)