Outbound OS

io.github.RecepioHQ由 GitHub 帳號 RecepioHQ 發布v0.2.1更新於 Oct 24, 2026

Evidence-gated email outreach MCP with dry-run defaults and explicit send approvals.

已驗證STDIO僅桌面溝通與協作商業與電商

概覽

AI 產生的概覽

在本機執行的郵件外聯 MCP 伺服器,以證據與硬性檢查把關,預設僅演練,寄送需明確核准。

可以做什麼
  • 執行外聯意圖:start 進行買家研究與篩選,check 核對信箱與回覆狀態,send 準備寄送
  • 依證據面向評估買家篩選,回傳 READY、HOLD 或 SKIP 及可檢視的原因
  • 執行失敗即阻擋的硬性檢查:證據品質、聯絡途徑、信箱驗證、去重、事實預檢、商務審查、送達率與頻率上限
  • 寄送前要求明確授權與精確的核准雜湊,預設使用演練傳輸
  • 以僅追加帳本保存持久狀態,人工回覆經核實後轉入 Deal Mode
適用情境
適合想讓助理協助冷郵件外聯、但要求嚴格且可檢視的檢查,並偏好演練與明確核准而非自動寄送的情境。它更在意是否應該聯絡,而不是盡量多寄。
執行需求
以本機程序執行;README 提供 Node.js 22+ 的 CLI 方式,以及供 MCP 伺服器使用的 OCI 映像,預設綁定 127.0.0.1。實際寄送需要服務商設定(Zoho Mail OAuth 更新權杖)並設定 OUTBOUND_OS_LIVE_SEND=1;狀態目錄可用 OUTBOUND_OS_DATA_DIR 指定。離線示範不需信箱憑證或 API 金鑰。
安裝前請注意
伺服器沒有內建身分驗證,切勿將 HTTP 連接埠公開到網際網路。實際寄送是不可逆的外部動作,讀取信箱會暴露隱私資料,應保持本機執行並審核核准。啟用實際寄送需要信箱憑證與 OUTBOUND_OS_LIVE_SEND 開關。信箱服務商、驗證服務或代管等外部費用不包含在內。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Outbound OS,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Outbound OS

Try the interactive policy demo — no installation or signup

Official MCP Registry: Outbound OS — active listing (v0.2.1). Public OCI package: ghcr.io/recepiohq/outbound-os-mcp:0.2.1. The MCP server is designed for local operation and has no built-in authentication; never publish its HTTP port to the public Internet.

Use it in an AI coding client: Docker + Claude Code / Cursor MCP quickstart — local-only, no mailbox credentials, three actual MCP tools available for inspection.

Change synthetic buyer, mailbox, evidence, duplicate, and approval conditions in your browser. The interface executes the same deterministic gate and draft-preflight modules as the CLI; it makes no outbound API calls and sends no email. A PASS in this demo is not authorization to send a real message. Use Copy scenario link to share the exact synthetic inputs and verdict with another developer; the link never contains real addresses or message data.

[Outbound OS interactive policy simulator: unknown mailbox results in BLOCK and zero emails sent]

Screenshot from the real browser demo, with synthetic fixtures only.

Most AI outbound tools optimize for sending more. Outbound OS is built to know when not to send.

text
Start.Check.Send.

Those are operator intents, not bypass commands.

Every outbound action still has to pass Buyer Selection, evidence checks, mailbox verification, dedupe, factual preflight, commercial review, deliverability/rate controls, explicit authorization, and an exact approval hash.

Outbound OS is a free, MIT-licensed reference implementation of a decision-gated outbound workflow. It is inspired by the workflow used in the private Zoho MCP operation, but this repository contains no private campaign data, deal state, credentials, or Git history from that project.

Why this exists

A typical outbound stack asks: How do we send more?

Outbound OS starts earlier:

  1. Is this organization worth contacting?
  2. Is the evidence strong enough to justify outreach?
  3. Is the route and mailbox verified?
  4. Have we contacted the organization already?
  5. Is every personalized claim supportable?
  6. Is the exact message still the one that was reviewed and approved?
  7. Is deliverability healthy enough to send now?
  8. Did a human reply, making this a deal instead of a cold lead?

A failed hard gate means STOP.

One-command CLI demo — no global installation

Requires Node.js 22+ and npm. This installs the MIT-licensed release archive into npm's temporary cache (not the global package directory) and executes a synthetic comparison of an allowed and a blocked send:

bash
npm exec --yes --package=https://github.com/RecepioHQ/outbound-os/releases/download/v0.2.1/outbound-os-0.2.1.tgz -- outbound-os demo --compare

This exact command was tested on Windows with Node.js 22/npm 10: it returned PASS for the allowed scenario, BLOCK for an unverified mailbox, blocked.transport_calls=0, and live_sent=false. It downloads the package over HTTPS; it does not connect to a real mailbox or transmit an email.

Prefer the live browser demo if you do not have Node.js installed.

Run as an installable CLI

Optional global install from the verified v0.2.1 release

Requirements: Node.js 22+ and npm. This downloads an MIT-licensed archive attached to the official v0.2.1 GitHub Release, not an npm-registry package.

bash
npm install --global https://github.com/RecepioHQ/outbound-os/releases/download/v0.2.1/outbound-os-0.2.1.tgzoutbound-os demo --json

Verification: The published v0.2.1 GitHub Release and its attached archive were tested on Windows; the installed CLI passed its synthetic comparison. For integrity-sensitive use, verify the archive checksum against the release notes before installing.

No email is sent in the demo. Live sending remains off by default and every real send requires approved context and hard-gate checks.

Node.js 22+ and Git are required. The source is MIT licensed. No mailbox credentials, ChatGPT account, or API keys are needed for the offline demo.

Try from source (recommended first run)

bash
git clone https://github.com/RecepioHQ/outbound-os.gitcd outbound-osnpm cinode bin/outbound-os.js --helpnode bin/outbound-os.js demo --json

Optional global command from a local package archive

bash
npm packnpm install --global ./outbound-os-0.2.1.tgzoutbound-os demo --json

The .tgz is built locally from the checked-out source and should be reviewed before installation. On Windows, use PowerShell with the same commands (or replace ./ with .\\). The archive-install path is verified on Windows with an isolated npm prefix. The project is not claiming publication on the npm registry.

Do not use npm install -g github:RecepioHQ/outbound-os as a recommended path: on one verified Windows/npm 10 installation it produced a dangling junction into npm's temporary Git clone. The packed archive avoids that observed issue.

The demo uses reserved example domains, a mock mailbox and a dry-run transport: no real emails are sent. For real operations, follow provider configuration and security requirements. The start, check and send commands still invoke the existing state, verification and hard-gate code; installing the CLI grants no permission to bypass them.

60-second demo

Compare a permitted dry run with a blocked attempt

The comparison uses real gate evaluation against synthetic fixtures and mock transports. One message satisfies the checks, while a second message has an unknown mailbox verification result and must be blocked before the transport is called.

bash
# In a checkout of the latest source:npm cinode bin/outbound-os.js demo --compare

The output includes allowed.send_decision=PASS, blocked.send_decision=BLOCK, a reason from the mailbox_verification gate, and blocked.transport_calls=0. These are synthetic checks, not claims that any real mailbox was verified or any live email was sent.

Requirements: Node.js 22+.

bash
npm installnpm testnpm run demo

The demo is entirely synthetic and makes no network calls. It walks through:

text
Synthetic buyer      ↓Buyer Selection → READY      ↓Verified evidence + mailbox + dedupe + review gates      ↓Dry-run send → SIMULATED (not a live send)      ↓Synthetic human reply      ↓Cold eligibility stops      ↓Deal Mode → engaged

Example output:

json
{  "buyer_state": "READY",  "send_decision": "PASS",  "transport_status": "simulated",  "live_sent": false,  "cold_eligible_after_reply": false,  "deal_stage": "engaged"}

Architecture

mermaid
flowchart TD    A[Operator: CLI or ChatGPT/MCP] --> B{Intent}    B -->|Start| C[Task / Skill Router]    B -->|Check| D[Mailbox Reconciliation]    B -->|Send| E[Hard Gate Engine]
    C --> F[Buyer Research]    F --> G[Buyer Selection]    G --> H[(Persistent State + Event Ledger)]
    D --> I[Reply / Delivery Classifier]    I --> H    I -->|Verified human reply| J[Deal Mode]    J --> H
    E --> K[Evidence + Contact Route]    K --> L[Mailbox Verification]    L --> M[Dedupe]    M --> N[Factual Preflight]    N --> O[Commercial Review]    O --> P[Deliverability / Rate / Cap]    P --> Q[Authorization + Approval Hash]    Q -->|PASS| R[Transport]    R -->|default| S[Dry Run]    R -->|explicit live opt-in| T[Zoho Adapter]

The model can recommend work, but it cannot override the mechanical gate engine beneath it.

Buyer Selection

The public engine evaluates four evidence-backed dimensions:

  • Strategic fit — is there a credible reason the organization should care?
  • Commercial-capacity evidence — is there attributable evidence that outreach is commercially justified?
  • Decision access — is there a credible route to an appropriate decision maker or official channel?
  • Trigger / timing evidence — is there a reason the outreach is timely?

Evidence is explicitly classified as VERIFIED, INFERRED, or UNKNOWN.

UNKNOWN never becomes a positive score just because the system needs more volume.

Results are READY, HOLD, or SKIP, with inspectable reasons.

See docs/buyer-selection.md.

Hard gates

The default send chain is fail-closed:

GateFailure behavior
Buyer SelectionHOLD / BLOCK
Evidence qualityBLOCK
Contact routeBLOCK
Mailbox verificationBLOCK
Organization/contact dedupeBLOCK
Factual personalizationBLOCK
PreflightBLOCK
Commercial reviewBLOCK
Deliverability healthBLOCK
Rate / volume capBLOCK
Explicit authorizationHOLD
Exact approval hashBLOCK

Strict mailbox verification passes only valid. invalid, catch_all, unknown, and error are blocked by default.

Changing the recipient, subject, plain-text body, or HTML after approval invalidates the approval hash.

See docs/hard-gates.md.

Persistent state — not chat memory

Operational state lives outside the conversation:

  • append-only JSONL lifecycle ledger;
  • derived JSON state projection written atomically;
  • organization-level and contact-level dedupe;
  • persistent Deal Mode state after a human reply.

By default runtime state is stored under state/, which is excluded from Git. You can override it with OUTBOUND_OS_DATA_DIR.

A new ChatGPT/MCP session can reload the same state instead of reconstructing a deal from conversational memory.

See docs/state-and-ledger.md.

Deal Mode

A verified human reply removes the organization from cold eligibility and creates or updates a deal record containing fields such as:

  • latest human reply;
  • stage;
  • verified facts;
  • inferred context;
  • unknowns;
  • objections;
  • pricing context;
  • commitments;
  • next justified action.

Time alone does not advance a deal stage.

See docs/deal-mode.md.

Skills

The repository separates task discipline instead of relying on one catch-all prompt:

  • buyer-research — attributable evidence, no invented authority/budget/intent;
  • cold-outreach — verified facts plus all outbound gates;
  • delivery-recovery — permanent-vs-temporary delivery handling;
  • engaged-deal — human-reply workflow and deal context.

The skills guide behavior. They do not bypass the mechanical rules in code.

Zoho Mail adapter

Outbound OS includes a public-safe Zoho Mail adapter built against documented Zoho APIs.

It supports:

  • OAuth refresh-token exchange;
  • mailbox reads with limited retry on clearly transient read failures;
  • conservative normalization of known-contact human replies, common auto-replies, permanent delivery failures, and temporary delays;
  • exact approved-message sending;
  • no blind retry after an ambiguous send mutation;
  • post-send reconciliation by returned message ID.

Unmatched inbox mail is ignored rather than being promoted into a deal.

Live sending is disabled unless all required provider configuration is present and:

text
OUTBOUND_OS_LIVE_SEND=1

See .env.example and docs/provider-adapters.md.

ChatGPT / MCP

The optional chatgpt/ package exposes the same three intents as MCP tools:

  • start
  • check
  • send

The MCP server binds to 127.0.0.1 by default. That is intentional: mailbox reads expose private data, and sending email creates an irreversible external action.

bash
cd chatgptnpm installnpm start

For development, use MCP Inspector or a supported private/Secure MCP Tunnel workflow. A remote public MCP deployment must add a proper authentication/authorization boundary before exposing these tools.

chatgpt/plugin-template/ contains a portable Agent Plugins packaging example with an intentionally non-working .example MCP URL.

ChatGPT capabilities vary by plan, workspace, region, admin settings, and action type. Do not assume that ChatGPT Plus alone guarantees custom live write/send actions. The local CLI remains the universal fallback.

See chatgpt/README.md.

CLI

bash
node src/cli.js start --jsonnode src/cli.js check --jsonnode src/cli.js send --jsonnode src/cli.js send --json --input path/to/prepared-send-context.json

--input accepts a prepared JSON context for any intent. send does not mean “send unconditionally”: with no prepared, approved context it fails closed, and the same hard gates run whether the caller is CLI or MCP. The synthetic demo is the easiest way to inspect a complete passing pipeline.

Free software and external costs

Outbound OS itself is MIT-licensed and this project does not charge a SaaS subscription, per-lead credit, or per-sequence fee.

That does not mean the complete operating environment is cost-free. Depending on your setup, you may still pay for:

  • ChatGPT or another compatible operator environment;
  • Zoho Mail or another mailbox provider;
  • mailbox-verification services;
  • hosting, OAuth, or other APIs you connect.

There are no claims of unlimited ChatGPT usage or guaranteed reply/revenue improvements.

Release security

Before publication, the project scans for:

  • private-project filenames/directories;
  • non-synthetic email addresses;
  • credential/token/private-key patterns;
  • secret-bearing environment files;
  • private/internal URLs;
  • long provider/message identifiers;
  • local absolute user paths;
  • private campaign names supplied through a local denylist;
  • accidental pre-publication Git history.

Run the contributor scan with:

bash
npm run scan:release

See SECURITY.md.

Current scope

This is a reference implementation, not a hosted multi-tenant SaaS and not a mass-mailing product.

v0.2.1 intentionally does not provide:

  • autonomous background/scheduled sending;
  • a hosted OAuth service for public multi-user MCP access;
  • a built-in third-party mailbox-verification provider account;
  • guarantees that every possible DSN/auto-reply format is classified;
  • guaranteed replies, pipeline, revenue, or deliverability outcomes.

Use the hard gates as safeguards, not as a substitute for applicable law, provider terms, or responsible outreach practices.

Development

bash
npm testnpm run demonpm run scan:releasenpm run manifest:release

See CONTRIBUTING.md.

License

MIT. See LICENSE.

來源:README.md,提交 8d386d2

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

1
  1. v0.2.1最新Oct 24, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分