npm qorami-mcpstdioMITupdated 2mo ago
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, requesthumanconfirmation, or donotsend.
qorami 能做什么?
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.
| Path | What |
|---|---|
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: 'client@example.com', 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="client@example.com", 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:
| Framework | Install | Import |
|---|---|---|
| LangChain | pip install qorami[langchain] |
from qorami_langchain import build_qorami_tool |
| CrewAI | pip install qorami[crewai] |
from qorami_crewai import QoramiEmailGuard |
| LlamaIndex | pip install qorami[llamaindex] |
from qorami_llamaindex import build_qorami_tool |
| OpenAI Agents SDK | pip 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.
安装
把 qorami 添加到你的客户端。选择你正在使用的那个。
claude mcp add qorami-mcp -- npx -y qorami-mcpcodex mcp add qorami-mcp -- npx -y qorami-mcpamp mcp add qorami-mcp -- npx -y qorami-mcp{
"mcpServers": {
"qorami-mcp": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"qorami-mcp": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"qorami-mcp","command":"npx","args":["-y","qorami-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"qorami-mcp": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"qorami-mcp": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"qorami-mcp": {
"command": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"qorami-mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"qorami-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"qorami-mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"qorami-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y qorami-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
评分
39 / 100
不完整
- 文档25/25
- 维护16/25
- 可信度13/20
- 能力0/15
- 安装体验12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 60 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
版本历史
| 版本 | 发布于 |
|---|---|
| 1.0.0最新 | 2026年6月1日 |