npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@zindua/mcp

v1.2.0

Published

Zindua MCP for Cursor/Claude — platform OTP workflow: doctor, scaffold, validate, send, watch logs, WordPress connect.

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

  1. Node.js 18+ installed (for Cursor’s npx)
  2. Project + API key at zindua.run (prefer znd_test_… while testing)
  3. Connect email (Gmail/SMTP) and/or WhatsApp in the dashboard
  4. 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

  1. Prefer zindua_workflow_otp — closed loop checklist + nextSteps
  2. Or zindua_doctor + zindua_list_templates / zindua_recommend_template
  3. zindua_scaffold → apply files
  4. zindua_validate_payload then (after you confirm to) zindua_send_test
  5. zindua_watch_log with the returned logId

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