TextForge

TextForge — Human Approval for AI Email <img src="https://raw.githubusercontent.com/textforge-app/openclaw-textforge/master/assets/textforge-logo.png"…

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • Sync Thread: Sync a thread from the email provider to fetch any new messages. Use this before composing a reply to ensure you have the latest conversation context. Requires 'threads:sync' permission.
  • Delete Draft: Permanently delete a draft. Only drafts that will not be sent can be deleted: Draft (not yet submitted), Rejected, Expired, or SendFailed status. Cannot delete drafts that are PendingApp
  • Submit Draft: Submit a draft for human approval. Note: create_draft automatically submits, so this is only needed for drafts that were not auto-submitted.

What data it sees

Do you need an account

No: the server works without sign-in

TextForge — Human Approval for AI Email

AI agents can read your inbox, draft replies, and manage threads — but nothing sends without you.

Start free trial → — 7 days free, no credit card required.


What It Does

TextForge is a hosted MCP server that gives AI agents access to Gmail with a mandatory human approval step on every outgoing email. Your agent handles the reading, searching, and drafting. You review and approve before anything sends.

Works with Claude Code, OpenClaw, Cursor, Windsurf, or any MCP-compatible client.


Installation

Not sure which config format your client needs? Use the TextForge MCP Setup Generator — pick your client, get the exact config to paste. Free, instant, no signup.

Claude Code (OAuth):

claude mcp add textforge https://textforge.net/mcp

Other clients (manual config):

{
  "mcpServers": {
    "textforge": {
      "url": "https://textforge.net/mcp"
    }
  }
}

New users are walked through account creation on first connect (5–15 min). Existing users are connected in under 60 seconds.


Available Tools (22)

Draft Management

Tool What It Does
create_draft Create a draft and submit for approval
list_drafts List drafts with optional status/recipient filtering
get_draft Get draft details including approval history
update_draft Update draft content or recipients
submit_draft Submit a draft for approval
get_draft_activity View full draft activity log
reject_draft Reject a pending draft
delete_draft Delete a draft

Thread Management

Tool What It Does
list_threads List recent email threads
list_engaged_threads Threads where you've sent messages
get_thread Read a full thread
get_thread_by_external_id Look up thread by provider ID
sync_thread Sync a thread for latest messages
sync_inbox Trigger full inbox sync
search_messages Search with Gmail-style query syntax
search_threads_by_contact Find threads by contact email
import_thread Import a thread from your email provider

Attachment Management

Tool What It Does
list_message_attachments List attachments on a received message
get_attachment_download_url Get presigned download URL for an attachment
list_draft_attachments List attachments on a draft
get_draft_attachment_upload_url Get presigned upload URL to attach a file
remove_draft_attachment Remove an attachment from a draft

Pricing

  • Solo — $9.99/mo
  • Pro — $19.99/mo
  • 7-day free trial, no credit card required at signup

textforge.net

Server tool list (22)

Raw names from tools/list. Only developers need these.

sync_threadSync a thread from the email provider to fetch any new messages. Use this before composing a reply to ensure you have the latest conversation context. Requires 'threads:sync' permission.
delete_draftPermanently delete a draft. Only drafts that will not be sent can be deleted: Draft (not yet submitted), Rejected, Expired, or SendFailed status. Cannot delete drafts that are PendingApproval, Approved, or Sent.
submit_draftSubmit a draft for human approval. Note: create_draft automatically submits, so this is only needed for drafts that were not auto-submitted.
import_threadImport a specific thread by its provider thread ID (e.g., Gmail thread ID from search_messages). If the thread already exists locally, syncs it instead. Use after search_messages when get_thread_by_external_id returns 'not found'. Requires 'threads:sync' permission.
get_threadGet full details of a specific email thread including messages. By default returns the latest 5 messages with quoted reply content stripped to reduce payload size. Set maxMessages=0 for all messages, stripQuotedReplies=false for full body text. Returns pre-computed threading headers (In-Reply-To, References) needed for proper email threading.
search_messagesSearch provider threads using delegated search syntax. Returns thread summaries only (thread ID, snippet). Use get_thread to fetch full messages. Requires 'threads:read' permission.
list_message_attachmentsList attachments for a received email message. Returns attachment metadata including filename, MIME type, and size. Use get_attachment_download_url to download content.
get_thread_by_external_idLook up a thread by the provider's thread ID. By default returns the latest 5 messages with quoted reply content stripped. Set maxMessages=0 for all messages, stripQuotedReplies=false for full body text. Useful when you have a thread ID from provider API responses or email headers.
get_draft_activityGet the complete activity history for a draft, including creation, updates, approval/rejection, and sending events.
get_draftGet detailed information about a specific draft including subject, body, recipients, status, and approval history.
remove_draft_attachmentRemove an attachment from a draft email. The attachment will be permanently deleted.
reject_draftReject a draft that is pending approval. Only drafts in 'PendingApproval' status can be rejected. Use this to withdraw a draft that should not be sent.
list_engaged_threadsList threads where you have previously sent at least one message, ordered by most recent activity. Use this to find conversations you are actively participating in.
sync_inboxTrigger a full inbox sync to discover new threads and update existing ones from the email provider. Like hitting refresh in an email client. Use this when you need to find recently arrived emails that aren't yet in TextForge. Requires 'threads:sync' permission.
get_draft_attachment_upload_urlGet a presigned URL to upload an attachment to a draft. The URL is single-use and expires in 10 minutes. Use HTTP PUT to upload raw file bytes to the returned URL.
get_attachment_download_urlGet a presigned URL to download an attachment. The URL expires in 10 minutes. Works for both message attachments and draft attachments.
list_threadsList email threads (conversations) for the authenticated user's organization. Threads are created when emails are sent and track both outbound and inbound messages. Use this to find threads for context when composing replies.
update_draftUpdate an existing draft's content. Only drafts in 'Draft' or 'PendingApproval' status can be updated.
create_draftCreate a new email draft and submit it for human approval. This is the primary way for LLM agents to initiate the email sending workflow. The draft will be created and automatically submitted for approval. To create a reply to an existing thread, provide either threadId or externalThreadId.
list_draft_attachmentsList attachments currently attached to a draft email. Returns attachment metadata including filename, MIME type, size, and upload time.
search_threads_by_contactSearch for email threads involving a specific contact (email address). Searches across From, To, and CC fields of all messages in threads. Useful for finding all email history with a particular person or company.
list_draftsList email drafts with optional filtering by status or recipient email. Returns paginated results with draft metadata including subject, status, recipients, and creation info.
TextForge: connect to Claude, ChatGPT, Cursor · Connectors.fun