> ## Documentation Index
> Fetch the complete documentation index at: https://docs.darkfunnels.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Security

> How the MCP bridge confines, delimits and audits — and why it never moves money.

## Your account is the perimeter

The assistant authenticates over **OAuth with your own OptiMind account**, and
every data access travels with your identity: separation between businesses is
enforced by the database on each query (Row Level Security), not by a convention
in the code. The bridge service **holds no platform credentials** — a full
compromise of the process cannot cross from one business to another.

## Revocation

You remove the connection from your assistant (in Claude: Customize →
Connectors → remove the connector; in Codex: Settings → MCP servers). From that
point the client can no longer call the bridge. If you need access cut
immediately from our side — say you lost control of the account — write to the
OptiMind team: revocation from the dashboard is not available yet.

## Your customers' messages are DATA, not orders

Every piece of text written by end customers reaches the assistant **delimited**
with cryptographic markers, fresh per response, plus a fixed notice: this is
content to analyze, not instructions to follow. On top of that:

* With no parameters, the connection is **read-only with a single write**:
  customer tags (`assign_client_tags`, which sets a customer's complete tag
  set). No destructive action ships in the base set: saving the playbook,
  editing the catalog, sending messages or simulating conversations all require
  explicit opt-in groups in the URL (`?features=…`), and an explicit list
  **replaces** the base set rather than extending it.
* `?read_only=true` disables every write and overrides any other option.
* Destructive actions are annotated as such: your client asks for confirmation
  before running them.

## Your customers' phone numbers come back masked

Your end customers are not OptiMind users: they messaged your business on
WhatsApp and have consented to nothing with the AI provider that will read the
response. So the field that identifies them most directly — the number — arrives
**masked by default**:

```
51•••••4321          12•••6789@lid
```

The last digits are kept, enough for you to recognize a number you already know
and to tell two rows of your inbox apart. A value that isn't shaped like a phone
number is not half-masked: it comes back as `(oculto)` — hidden.

This costs you nothing. **No tool needs a customer's number to act on their
chat**: replying, switching a chat's mode, creating reminders or opening orders
all address the conversation, not the number. The one tool that does take a
phone number is `simulate_new_chat`, and there you type it yourself: it's your
own test number, not one read out of the inbox.

If you really need full numbers, reconnect your assistant adding `pii=full` to
the URL:

```
https://mcp.darkfunnels.ai/mcp?pii=full
```

That is your decision when connecting, not something the assistant can change
mid-conversation. And they are always in the dashboard.

## An audit log that cannot be erased

Every call the assistant makes is recorded — tool, outcome, timestamp — in an
**append-only** log that you can read and nobody, not us and not the assistant,
can edit or delete. Of your data's content only a hash is stored: the log says
*what was done*, it does not duplicate *what you said*.

## It never moves money

Sales are recorded by your WhatsApp agent inside OptiMind; the bridge only
**reads** them (`list_orders`, `get_order`). It **does not charge, does not
transfer, does not issue payment links, does not touch your payment provider or
your cards** — none of its tools can. The features that consume AI credits
(generating the playbook, Copilot, simulations) go through the same balance
check as the dashboard: with no credits they stop, and they never charge on
their own.
