Skip to main content

Authentication & scoping

  • Org-scoped keys. Every ecn_mcp_… key is tied to exactly one organization. A key for org A can never read or write org B’s data — cross-tenant access is rejected.
  • Hashed at rest. Keys are stored as SHA-256 hashes; the plaintext secret is shown only once at creation. If you lose it, create a new key.
  • Revocable. Revoke any key instantly in Settings → Connect external AI tools or via DELETE /api/v1/mcp/keys/<id>/. Each key tracks last_used_at.

Reads are safe; sends are gated

ECN follows a read/write safety model:
Action classBehavior
Reads (search, get context, list contacts, balances)Run directly and freely.
Workspace writes (create contact/task, update context)Apply to your org’s data.
Outreach drafts (GTM emails, social/outreach campaigns)Created as approval-gated drafts (OutreachDraft, GtmEmailDraft) — not sent until a human approves.
Direct sends (compose_email)Send immediately when the tool is called, via your connected Gmail (Mailgun fallback). Treat these as live actions.
Most AI-authored content — Context Pack edits and the outreach/GTM pipelines — enters as seeded/draft and is never auto-marked verified, so a person stays in the loop before it’s published. The exception is direct-send tools like compose_email, which send the moment they’re called — only expose them to trusted callers.
Treat an ecn_mcp_… key like a password. Don’t commit it to shared repos or paste it into project config that syncs publicly. Prefer environment variables.

What an MCP client can and cannot do

  • ✅ Search and read directory + context, manage CRM records, run prospecting, draft outreach, check spend.
  • ⛔ Bypass credit budgets, escape org scoping, or read another organization’s data.
(Note: compose_email does send directly — it is not gated behind a draft.)

Reporting an issue

Found a security problem? Email the maintainers via the repository rather than opening a public issue with sensitive details.