@zindua/mcp
v1.2.0
Published
Zindua MCP for Cursor/Claude — platform OTP workflow: doctor, scaffold, validate, send, watch logs, WordPress connect.
Maintainers
Readme
@zindua/mcp
Connect Cursor or Claude Desktop to Zindua.
Your AI assistant can check your project, list real templates, and send a test OTP (email or WhatsApp) so generated code matches your dashboard.
Important: you usually do not run npm i @zindua/mcp
npm always shows an Install button (npm i @zindua/mcp). Ignore it for normal Cursor setup.
| Action | What it does | Do you need it? |
|--------|----------------|-----------------|
| Create .cursor/mcp.json with npx -y @zindua/mcp@latest | Cursor downloads and runs the MCP server | Yes — this is the setup |
| npm i @zindua/mcp in your app | Adds the package to node_modules of that folder | No for Cursor. Does not configure the editor by itself |
Why create a JSON file?
Cursor only loads MCP servers from mcp.json. That file tells Cursor: “run this command (npx … @zindua/mcp) with my API key.” Without it, Cursor never starts Zindua tools.
What about Python / ASP.NET / PHP?
Same JSON. MCP talks to Zindua’s API from the editor. Your app language only matters later, when you install your SDK (zindua-sdk, Zindua.Sdk, zindua/sdk, @zindua/sdk) in the backend.
You need Node.js 18+ on the computer running Cursor (for npx). Your project can still be Python-only or .NET-only.
Before you start
- Node.js 18+ installed (for Cursor’s
npx) - Project + API key at zindua.run (prefer
znd_test_…while testing) - Connect email (Gmail/SMTP) and/or WhatsApp in the dashboard
- Create a template (slug + variables). One slug can serve both channels.
Cursor setup (all languages)
1. Settings UI (optional)
Cursor Settings → Tools & MCP (Cmd/Ctrl + Shift + J) → add / open MCP config.
2. Create the config file
| Scope | Path |
|-------|------|
| This project | .cursor/mcp.json at the repo root |
| Every project | ~/.cursor/mcp.json |
my-otp-app/ ← FastAPI, ASP.NET, Laravel, Next.js, …
├── .cursor/
│ └── mcp.json ← required for Zindua MCP
├── .env ← API key for YOUR app SDK (server-side)
└── … your code …mkdir -p .cursor.cursor/mcp.json:
{
"mcpServers": {
"zindua": {
"command": "npx",
"args": ["-y", "@zindua/mcp@latest"],
"env": {
"ZINDUA_API_KEY": "YOUR_ZINDUA_API_KEY"
}
}
}
}Reload Cursor. Confirm zindua is connected under Tools & MCP.
Safer for git: "ZINDUA_API_KEY": "${env:ZINDUA_API_KEY}" and export ZINDUA_API_KEY=… in your shell.
After MCP: install the SDK for your stack
MCP does not replace the SDK. Use MCP to diagnose and discover templates, then add the SDK to the backend:
| Your app | After MCP works, install |
|----------|---------------------------|
| Node / Next / Fastify | npm i @zindua/sdk |
| Python / FastAPI | pip install zindua-sdk |
| ASP.NET | dotnet add package Zindua.Sdk |
| PHP / Laravel | composer require zindua/sdk |
| WordPress | Official plugin or PHP SDK |
Guided (recommended): ask Cursor /zindua-ship or call zindua_workflow_otp. The assistant diagnoses channels, scaffolds a certified snippet, and only sends after you confirm a recipient.
Ask Cursor, for example:
“Use zindua_workflow_otp for my FastAPI WhatsApp OTP, then scaffold.”
Test email and WhatsApp with MCP
- Prefer
zindua_workflow_otp— closed loop checklist + nextSteps - Or
zindua_doctor+zindua_list_templates/zindua_recommend_template zindua_scaffold→ apply fileszindua_validate_payloadthen (after you confirmto)zindua_send_testzindua_watch_logwith the returnedlogId
Live keys are blocked unless you explicitly allow forceLive: true after confirmation. Prefer znd_test_.
Email (to = email address):
Run zindua_send_test to [email protected] with template otp-verification and channel email.
WhatsApp (to = E.164 phone, e.g. +243812345678):
Run zindua_send_test to +243812345678 with template otp-verification and channel whatsapp.
If WhatsApp is “not connected”, open the dashboard QR flow (zindua_whatsapp_status → setupUrl). MCP never invents a session.
Claude Desktop
Same npx block under mcpServers in:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Tools
| Tool | Purpose |
|------|---------|
| zindua_workflow_otp | Orchestrator: doctor + templates + nextSteps / stopCodegen |
| zindua_doctor | Key + email / WhatsApp readiness |
| zindua_plan | Guided questions (legacy; prefer workflow) |
| zindua_get_project | Project, plan, channels |
| zindua_list_templates | Slugs, langs, variables |
| zindua_recommend_template | Score OTP-like templates for an intent |
| zindua_scaffold | Certified Next / FastAPI / ASP.NET / PHP / Node snippets |
| zindua_validate_payload | Dry-run channel / slug / vars (no send) |
| zindua_send_test | Test send — blocks live keys unless forceLive |
| zindua_watch_log | Poll log until terminal status + fix graph |
| zindua_get_log | One-shot log fetch |
| zindua_list_recent_logs | Recent deliveries for this project key |
| zindua_delivery_stats | Aggregate recent sends |
| zindua_email_path | Gmail/SMTP readiness + setupUrl |
| zindua_whatsapp_status | WA readiness (no QR in chat) |
| zindua_quota | Plan snapshot |
| zindua_wordpress_connect | Bind site URL to API key |
Prompts
| Prompt | Purpose |
|--------|---------|
| setup-otp-guided | Ask → plan → small snippet → send if confirmed |
| setup-fastapi-otp / setup-nextjs-bff / setup-aspnet-otp / setup-php-otp | Stack-certified closed loops |
Docs
License
MIT
