mcpField
Q
qorami

qorami

Local
github.com/loicfontaine-maxSecurity2Updated 17w ago

About qorami

Qorami is a control layer that checks email actions before an AI agent sends them, returning a decision to send, request human confirmation, or block. It includes SDKs, tool schemas, an MCP server, and an n8n node, and can provide a cleaned email body for certain remediable risks.

Key features

  1. 01Pre-send email checks
  2. 02Send, confirm, or block decisions
  3. 03Risk cleanup and safe email body
  4. 04JavaScript and Python clients
  5. 05Tools for multiple agent frameworks

Use cases

  1. 01Apply policy checks before an agent sends email
  2. 02Route risky messages for human approval
  3. 03Remove sensitive data or suspicious links from email

MCP support

Its stdio MCP server exposes qorami_health, verify_email, and check_action_status tools to MCP clients such as Claude Desktop and Cursor. The server also returns remediation text and details of removed content.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"loicfontaine-max-qorami": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
],
"env": {
"QORAMI_API_KEY": "<QORAMI_API_KEY>"
}
}
}
}
Run commandnpx -y qorami-mcp
Environment variables to set
QORAMI_API_KEYSecretYour Qorami workspace API key (get one at https://qorami.fr/dashboard/).

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmqorami-mcp1.0.0

Tools

2

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
bodystringYesFull email body
subjectstringYesEmail subject
recipientstringYesRecipient email address
policyProfileenumNoRisk profile (default general)general | sales | support | legal-finance

Details

From the project README

Qorami SDK

Official clients, tool schemas and an MCP server for Qorami — a control point between your AI agents and actually sending email. Before each send, the agent asks Qorami, which replies send, request_human_confirmation, or do_not_send.

Get an API key in the dashboard. Full API reference: https://qorami.fr/docs.

PathWhat
js/Zero-dependency JavaScript / TypeScript client (fetch, Node 18+ or browser).
python/Zero-dependency Python client (stdlib only) + LangChain, CrewAI, LlamaIndex & OpenAI-Agents tools.
tools/Drop-in OpenAI function-calling & Anthropic tool-use schemas for qorami_check_email.
mcp/Stdio MCP server (qorami_health, verify_email, check_action_status) for Claude Desktop, Cursor, any MCP client.
n8n-nodes-qorami/n8n community node (Settings → Community Nodes → n8n-nodes-qorami) — guard an email, usable as an AI-Agent tool.
n8n/No-code recipe: guard a workflow's email with a plain HTTP Request node (no install).
examples/Runnable Node & Python quickstarts.

JavaScript / TypeScript

import { QoramiClient } from './js/qorami.mjs'

const qorami = new QoramiClient({ apiKey: process.env.QORAMI_API_KEY })

await qorami.guard(
  { recipient: '[email protected]', subject: 'Our offer', body, policyProfile: 'sales' },
  {
    send: () => mailer.send(),                            // allowed
    requestHumanConfirmation: (r) => queue(r.action.id), // a human was notified
    doNotSend: (r) => log('blocked', r.decision),        // do not send
  },
)

Or step by step with qorami.verify(...) and, after a review, poll qorami.status(actionId) until nextAction.type === 'send'.

Python

from qorami import QoramiClient
qorami = QoramiClient(api_key=os.environ["QORAMI_API_KEY"])

result = qorami.verify(recipient="[email protected]", subject="Our offer",
                       body=email_body, policy_profile="sales")
if result.next_action_type == "send":
    send_email()
elif result.next_action_type == "request_human_confirmation":
    queue_for_review(result.action_id)   # a human was notified by email
# else: do_not_send
Agent framework tools

pip install qorami[<framework>] ships a drop-in qorami_check_email wrapper — each returns ALLOWED / NEEDS HUMAN APPROVAL / BLOCKED and reuses the client:

FrameworkInstallImport
LangChainpip install qorami[langchain]from qorami_langchain import build_qorami_tool
CrewAIpip install qorami[crewai]from qorami_crewai import QoramiEmailGuard
LlamaIndexpip install qorami[llamaindex]from qorami_llamaindex import build_qorami_tool
OpenAI Agents SDKpip install qorami[openai-agents]from qorami_openai_agents import qorami_check_email
from qorami_langchain import build_qorami_tool
tool = build_qorami_tool()        # reads QORAMI_API_KEY

No-code workflows (n8n) use a plain HTTP Request node — see n8n/.

MCP server

Register Qorami as a native tool in Claude Desktop / Cursor / any MCP client — see mcp/. It exposes qorami_health, verify_email and check_action_status over stdio.

The contract

Every client returns the same decision the agent must obey via nextAction.type: send, request_human_confirmation (a human approves first — poll the action), or do_not_send. See https://qorami.fr/docs.

Cleaned version (auto-remediation)

When an email is risky only because of mechanically-removable content (a leaked secret, a suspicious link, an IBAN/card/SSN), the verify result carries a cleaned, sendable copy — send remediation.safeBody instead of blocking outright:

const r = await qorami.verify({ recipient, subject, body, policyProfile: 'general' })
if (r.nextAction.type === 'do_not_send' && r.remediation?.safeToSend) {
  mailer.send({ ...email, body: r.remediation.safeBody })   // safe, redacted copy
}
r = qorami.verify(recipient=..., subject=..., body=email_body)
if r.next_action_type == "do_not_send" and (r.remediation or {}).get("safeToSend"):
    send_email(body=r.remediation["safeBody"])   # safe, redacted copy

remediation.removed lists what was stripped (e.g. ["secret", "link"]). The MCP server surfaces the same field.

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.