Implementation Guide

    How to Require Approval Before an AI Agent Sends a Slack Message Through MCP

    Place the approval checkpoint in the execution path between the MCP client and the Slack MCP server, and evaluate every message-sending tool call there. Policy decides whether the call is allowed, redacted, blocked, or held for a human. The approval sits outside the agent's control, applies to one specific call, is tied to the agent's and the approver's identities, and leaves a durable record of the decision.

    1. 1

      MCP client and agent

      Proposes the tool call. It cannot approve its own action.

    2. 2

      Enforcement point

      Intercepts the call, validates arguments, and evaluates policy before forwarding.

    3. 3

      Approval channel

      Delivers the pending call to a named human authority and returns a decision.

    4. 4

      Slack MCP server

      Receives only calls that were allowed or approved, using short-lived, scoped credentials.

    5. 5

      1. Intercept and evaluate

      Validate arguments, resolve agent identity, and match the call against policy.

    6. 6

      2. Escalate

      Present the destination, full content, agent, and triggering rule to the designated approver.

    7. 7

      3. Approve

      Release exactly the reviewed call with short-lived, scoped credentials, and record the approver.

    8. 8

      4. Deny

      Do not forward the call. Return a clear error to the agent and record the reason.

    9. 9

      5. Time out

      Treat expiry as a denial after a defined window, and notify the requester.

    10. 10

      6. Contain

      On repeated denials or unexpected tool use, revoke or narrow the agent's authority.

    What evidence each decision should produce

    • Agent identity and the user or service it acted for
    • Tool name and the arguments evaluated, including destination and content as reviewed
    • Policy rule that matched and the resulting decision: allow, redact, block, or escalate
    • Approver identity, the time of the decision, and the decision itself
    • Outcome: forwarded, denied, or timed out, with the response returned to the agent
    • Any redaction applied and the credential scope used for the forwarded call

    Decide which Slack tool calls need approval

    Start with an inventory of every tool the Slack MCP server exposes, then identify which ones create or change visible content: posting to a channel, replying in a thread, sending a direct message, or editing or deleting a message. Read-only tools carry a different risk profile and usually belong in a separate policy.

    NIST's control targets high-stakes calls. It does not call for approval of every call, and a policy that interrupts every send will be ignored or switched off. Classify first, then write rules. A reasonable split routes sends to an internal, low-sensitivity channel under automatic evaluation, and holds sends that cross a trust boundary for a person.

    Policy conditions are the arguments and context of each call. Four are most useful. Channel: is the destination public, private, shared, or external-facing? Recipient: is it a single user, a group, or someone outside the organization? Content: does the text contain sensitive data, credentials, or links the agent was handed by an untrusted source? Agent identity: which agent, acting for which user, with what delegated scope? Which of these fields can be evaluated depends on the arguments the server's tools actually accept, so confirm that per tool.

    Each rule should resolve to one of four outcomes: allow, redact, block, or escalate. Redact fits a message that is acceptable once a secret or identifier is removed. Block fits a destination that is never valid for the agent. Escalate fits anything that needs a human judgment about audience or context.

    Two supporting controls strengthen the approval. Validate tool-call arguments against a strict schema so the agent cannot add unexpected fields. Issue short-lived, scoped credentials so an approved call cannot be replayed for a different purpose.

    Client-side confirmation compared with runtime policy enforcement

    Many MCP clients can ask a user to confirm a tool call. That is a useful usability feature. As an enterprise control it should be judged against the criteria below, because the confirmation lives in whichever client the user happens to run.

    • Where it runs: Client-side: inside the client application the user chooses. Runtime enforcement: in the execution path between client and server, for every client.
    • Outside the agent's control: Client-side: depends on how each client is configured and whether prompts can be pre-approved. Runtime enforcement: the agent cannot approve or skip the step.
    • Policy conditions: Client-side: typically a per-tool confirmation. Runtime enforcement: rules on channel, recipient, content, and agent identity.
    • Possible outcomes: Client-side: approve or reject. Runtime enforcement: allow, redact, block, or escalate to a named authority.
    • Evidence: Client-side: varies by client. Runtime enforcement: a consistent record of who approved what, produced at decision time.
    • Consistency across agents: Client-side: one behavior per client. Runtime enforcement: one policy applied across clients and agents.

    Where Trussed fits

    Trussed enforces policy in the execution path across models, agents, tools, and MCP servers, at the level of individual interactions and tool calls. For a Slack MCP deployment, that means a message-sending call can be allowed, redacted, blocked, or escalated for human approval at runtime, not reviewed after the fact. Enforcement generates audit-ready evidence of what the policy permitted and what happened, which supports a regulated enterprise that must show an auditor how an agent's actions were controlled.

    The design in this guide does not depend on any single product. The requirements stay the same: an enforcement point outside the agent, policy conditions tied to destination, content, and identity, a defined approve, deny, and timeout flow, and an evidence record for every decision.

    Approval path for one Slack tool call

    Agent proposes a send

    The model selects a message-sending tool and fills in the arguments.

    Policy evaluates the call

    Agent identity, destination, and content are checked at the tool-call level.

    Human decides

    Calls that meet escalation conditions wait for approve or deny.

    Evidence is recorded

    The decision, approver, and outcome are stored for audit.

    Put approval in the path of every Slack tool call

    See how policy enforcement and human approval apply to MCP tool calls, and what evidence each decision leaves behind.

    Request a Demo
    Next step

    How does your AI governance program compare?

    See where your program has gaps in less than 2 minutes.