{"_id":"whooshly-mcp","_rev":"4-fbd2ea49296df10b98348511cc179bc8","name":"whooshly-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"whooshly-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","mcp-server","claude","chatgpt","anthropic","url-shortener","short-link","qr-code","utm","utm-builder","vcard","link-in-bio","marketing","whooshly"],"author":{"name":"Whooshly"},"license":"MIT","_id":"whooshly-mcp@1.0.0","maintainers":[{"name":"shrestan","email":"ankur@kmfv.cc"}],"homepage":"https://whooshly.co","bugs":{"url":"https://github.com/ankurmans/whooshly-mcp/issues"},"bin":{"whooshly-mcp":"bin/whooshly-mcp.mjs"},"dist":{"shasum":"76c0df36cd8c591d1d4884ac0c9f6b5250ece257","tarball":"https://registry.npmjs.org/whooshly-mcp/-/whooshly-mcp-1.0.0.tgz","fileCount":5,"integrity":"sha512-9pO9bvxE6k3vJ1CDy6bZgI4ckzBFUR13hU5iCS0ve09rB2TOrTSyzlcnjqLcdqsB5zuoXldoo2CpXgctjvpDDA==","signatures":[{"sig":"MEUCIQCdfikemWBuh8ei/4jztBIvRWRKe9eGzMW738z5DHuqsQIgNTBXqe1IhVAPuw3nLrmi3RLleSO5M3j/cIBX8OW+014=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14235},"type":"module","engines":{"node":">=18"},"gitHead":"6b9acf4cd171dd06c1951b3b0af21b5d341dfe61","scripts":{"start":"node bin/whooshly-mcp.mjs"},"_npmUser":{"name":"shrestan","email":"ankur@kmfv.cc"},"repository":{"url":"git+https://github.com/ankurmans/whooshly-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Create short links, dynamic QR codes, UTM templates, and hosted vCards from your AI assistant. A zero-dependency stdio bridge to Whooshly's hosted MCP server (also connectable directly by URL from claude.ai and ChatGPT).","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/whooshly-mcp_1.0.0_1783924166352_0.6731858635748791","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"whooshly-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","mcp-server","claude","chatgpt","anthropic","url-shortener","short-link","qr-code","utm","utm-builder","vcard","link-in-bio","marketing","whooshly"],"author":{"name":"Whooshly"},"license":"MIT","_id":"whooshly-mcp@1.0.1","maintainers":[{"name":"shrestan","email":"ankur@kmfv.cc"}],"homepage":"https://whooshly.co","bugs":{"url":"https://github.com/ankurmans/whooshly-mcp/issues"},"bin":{"whooshly-mcp":"bin/whooshly-mcp.mjs"},"dist":{"shasum":"c2ddaef3ceab90b5f2c305c50305995151081485","tarball":"https://registry.npmjs.org/whooshly-mcp/-/whooshly-mcp-1.0.1.tgz","fileCount":5,"integrity":"sha512-fatAlOhMxNzJrCWKhj5uKQa3f7znoM3qlhuAstQL3OKqVCsgFeogZSLZvpE2aM8HcAp8EJK2yhWmwjAG5kg19A==","signatures":[{"sig":"MEUCIQDmEW3jTZv91jx1qyXXOCqcL1ld08tvAHDpeYDyOSwPsQIgLBSdkHhkzIespunJLLSmy5pPOAtPDuetTGpi8IqXBHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14307},"type":"module","engines":{"node":">=18"},"gitHead":"6c72e2aecb288bead450d7abcd9a0c75e5d53b9d","mcpName":"io.github.ankurmans/whooshly-mcp","scripts":{"start":"node bin/whooshly-mcp.mjs"},"_npmUser":{"name":"shrestan","email":"ankur@kmfv.cc"},"repository":{"url":"git+https://github.com/ankurmans/whooshly-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Create short links, dynamic QR codes, UTM templates, and hosted vCards from your AI assistant. A zero-dependency stdio bridge to Whooshly's hosted MCP server (also connectable directly by URL from claude.ai and ChatGPT).","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/whooshly-mcp_1.0.1_1783924676018_0.6254297876041928","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"whooshly-mcp","version":"1.0.2","keywords":["mcp","model-context-protocol","mcp-server","claude","chatgpt","anthropic","url-shortener","short-link","qr-code","utm","utm-builder","vcard","link-in-bio","marketing","whooshly"],"author":{"name":"Whooshly"},"license":"MIT","_id":"whooshly-mcp@1.0.2","maintainers":[{"name":"ankurmans","email":"ankur@kmfv.cc"}],"homepage":"https://whooshly.co","bugs":{"url":"https://github.com/ankurmans/whooshly-mcp/issues"},"bin":{"whooshly-mcp":"bin/whooshly-mcp.mjs"},"dist":{"shasum":"5ebb191f36e7d8c79771a7aafe003c6431e0ae03","tarball":"https://registry.npmjs.org/whooshly-mcp/-/whooshly-mcp-1.0.2.tgz","fileCount":5,"integrity":"sha512-fCJKRoElMs8qeNAYUiLHsvqs73e3wCuKJZksgFViXgL4PsK93RjiaEBXsYHyAOiNZk7AG7JrAfrmMKiaYamJdQ==","signatures":[{"sig":"MEQCIAVGcfCxO1z9vQgL+EqNzfcKDwga7B4RMB0aQQx1GarNAiAV5DbyLmiUv6sgkMySaC/k2picRZKEBazYX1tISseOsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14291},"type":"module","engines":{"node":">=18"},"gitHead":"a5680c53b72e4a69e50a704387b27ebc99ba458e","mcpName":"co.whooshly/whooshly-mcp","scripts":{"start":"node bin/whooshly-mcp.mjs"},"_npmUser":{"name":"ankurmans","email":"ankur@kmfv.cc"},"repository":{"url":"git+https://github.com/ankurmans/whooshly-mcp.git","type":"git"},"_npmVersion":"11.6.1","description":"Create short links, dynamic QR codes, UTM templates, and hosted vCards from your AI assistant. A zero-dependency stdio bridge to Whooshly's hosted MCP server (also connectable directly by URL from claude.ai and ChatGPT).","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/whooshly-mcp_1.0.2_1784295607778_0.7635942665460616","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"whooshly-mcp","version":"1.1.0","mcpName":"co.whooshly/whooshly-mcp","description":"Create short links, dynamic QR codes, UTM templates, hosted vCards, and landing pages with lead capture from your AI assistant. A zero-dependency stdio bridge to Whooshly's hosted MCP server (also connectable directly by URL from claude.ai and ChatGPT).","type":"module","bin":{"whooshly-mcp":"bin/whooshly-mcp.mjs"},"engines":{"node":">=18"},"scripts":{"start":"node bin/whooshly-mcp.mjs"},"keywords":["mcp","model-context-protocol","mcp-server","claude","chatgpt","anthropic","url-shortener","short-link","qr-code","utm","utm-builder","vcard","link-in-bio","marketing","whooshly"],"homepage":"https://whooshly.co","repository":{"type":"git","url":"git+https://github.com/ankurmans/whooshly-mcp.git"},"bugs":{"url":"https://github.com/ankurmans/whooshly-mcp/issues"},"author":{"name":"Whooshly"},"license":"MIT","gitHead":"c0a9449395ef699788e27ea2578aeef079f7d75c","_id":"whooshly-mcp@1.1.0","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-LFLpPGBTlMSEvu0i2kDx6URTDSXCZcGTWizHKlnAVeeXWi6tEduqBoumNI4xJyg9GdUr4IuyQl+ADuVxgpKJxw==","shasum":"daacb03a416859306bc34f31b8f1884879fd23e3","tarball":"https://registry.npmjs.org/whooshly-mcp/-/whooshly-mcp-1.1.0.tgz","fileCount":5,"unpackedSize":14836,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGLLG4DNzw/RJOsMTIOcJQQUeb5BsC76xNXbkMRwvMI6AiEAjM8YMCooKTz72PnRqAgY/p2Gv5wgILn+o+Kmdkz51hc="}]},"_npmUser":{"name":"ankurmans","email":"ankur@kmfv.cc"},"directories":{},"maintainers":[{"name":"ankurmans","email":"ankur@kmfv.cc"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/whooshly-mcp_1.1.0_1784397745227_0.0698906984280303"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T06:29:26.232Z","modified":"2026-07-18T18:02:25.539Z","1.0.0":"2026-07-13T06:29:26.480Z","1.0.1":"2026-07-13T06:37:56.164Z","1.0.2":"2026-07-17T13:40:07.932Z","1.1.0":"2026-07-18T18:02:25.368Z"},"bugs":{"url":"https://github.com/ankurmans/whooshly-mcp/issues"},"author":{"name":"Whooshly"},"license":"MIT","homepage":"https://whooshly.co","keywords":["mcp","model-context-protocol","mcp-server","claude","chatgpt","anthropic","url-shortener","short-link","qr-code","utm","utm-builder","vcard","link-in-bio","marketing","whooshly"],"repository":{"type":"git","url":"git+https://github.com/ankurmans/whooshly-mcp.git"},"description":"Create short links, dynamic QR codes, UTM templates, hosted vCards, and landing pages with lead capture from your AI assistant. A zero-dependency stdio bridge to Whooshly's hosted MCP server (also connectable directly by URL from claude.ai and ChatGPT).","maintainers":[{"name":"ankurmans","email":"ankur@kmfv.cc"}],"readme":"# Whooshly MCP\n\nGive your AI assistant a campaign-link toolkit. **[Whooshly](https://whooshly.co)** exposes a hosted [Model Context Protocol](https://modelcontextprotocol.io) server so Claude, ChatGPT, and any MCP client can create short links, dynamic **QR codes**, **UTM** templates, hosted **vCard** pages, and **landing pages** with lead capture – and read back real click/scan analytics – directly from a conversation.\n\n> \"Shorten this launch URL, make a QR for the flyer, and save a UTM template for the paid-social campaign\" → three tools, one message, links you actually own.\n\n- 🔗 **Short links** on `whooshly.co` with live click tracking\n- 🟧 **Dynamic QR codes** returned as scannable PNGs, right in the chat\n- 🏷️ **UTM templates** you can reuse across campaigns\n- 📇 **Hosted vCard** digital business cards\n- 📊 **Real analytics** – exact click/scan totals and daily series per link\n- 💸 **Pay once.** Unlock the core toolkit for a one-time price – no subscription. [See pricing →](https://whooshly.co)\n\nThe server is **hosted** – there's nothing to run for URL-based clients. This npm package is a small **stdio bridge** for clients that don't yet speak remote MCP (e.g. Claude Desktop) and for `npx` convenience.\n\n---\n\n## 1. Get an agent token\n\nEvery tool acts on **your** Whooshly account, so you need a token:\n\n1. Sign in at **[app.whooshly.co](https://app.whooshly.co)**\n2. Open **Agents → New token**\n3. Copy the token (shown once)\n\nReads and writes require the one-time **Core** unlock; `get_billing_status` works on any account so an agent can check before it acts.\n\n---\n\n## 2. Connect\n\n### Claude.ai / Claude (web, desktop, mobile) – by URL, no install\n\nAdd a **Custom Connector** pointing at the remote server. Claude runs the OAuth flow in-browser; approve it and the tools appear.\n\n```\nhttps://app.whooshly.co/api/mcp\n```\n\n*Settings → Connectors → Add custom connector → paste the URL.*\n\n### ChatGPT – by URL\n\nAdd a connector / custom MCP server with the same URL:\n\n```\nhttps://app.whooshly.co/api/mcp\n```\n\n### Claude Code – one command\n\n```bash\nclaude mcp add whooshly --transport http https://app.whooshly.co/api/mcp\n```\n\nThen authenticate with `/mcp` inside Claude Code, or pass a token header:\n\n```bash\nclaude mcp add whooshly --transport http https://app.whooshly.co/api/mcp \\\n  --header \"Authorization: Bearer $WHOOSHLY_TOKEN\"\n```\n\n### Claude Desktop (or any stdio client) – via this bridge\n\nFor clients that only speak stdio, use this package. Add it to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"whooshly\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"whooshly-mcp\"],\n      \"env\": {\n        \"WHOOSHLY_TOKEN\": \"your-agent-token\"\n      }\n    }\n  }\n}\n```\n\nThat's it – restart the client and the Whooshly tools are available.\n\n---\n\n## Tools\n\n| Tool | What it does | Access |\n| --- | --- | --- |\n| `get_billing_status` | Check whether the account has unlocked Core / Pro | any |\n| `create_link` | Create a short link → id, slug, short URL | Core |\n| `list_links` | List your links, newest first (cursor-paged) | Core |\n| `get_link_stats` | Exact click/scan totals + daily series for a link | Core |\n| `create_qr` | Create a dynamic QR code, returned as a scannable PNG | Core |\n| `get_qr` | Re-fetch a saved QR code as a PNG | Core |\n| `create_utm` | Save a reusable UTM template | Core |\n| `list_utm` | List saved UTM templates | Core |\n| `create_vcard` | Create a hosted digital business card (vCard) page | Core |\n| `create_page` | Create a landing page on your subdomain from content blocks | Core |\n| `update_page` | Edit a page's blocks, theme, or slug – never deletes | Core |\n| `list_pages` | List your landing pages with lead counts | Core |\n| `get_page` | One page's content, lead count & webhook delivery rollup | Core |\n| `search` | Search your links by slug/destination (deep-research) | Core |\n| `fetch` | Fetch full details of one link by id (deep-research) | Core |\n\nAll read tools are annotated `readOnlyHint`; write tools can only create or edit – an agent can never delete anything, never read your leads' personal details (counts only), and never see or change a lead webhook. Every tool operates only on your own account (`openWorldHint: false`).\n\n---\n\n## Example prompts\n\nOnce connected, try:\n\n- *\"Shorten https://example.com/2026-summer-launch with the slug `summer26` and show me the QR code.\"*\n- *\"Create a UTM template called `paid-social` with source `instagram`, medium `cpc`, campaign `summer-launch`.\"*\n- *\"How many clicks did my `summer26` link get this week?\"*\n- *\"Make a vCard for Jane Doe, Head of Growth at Acme, jane@acme.com.\"*\n\n---\n\n## Configuration\n\n| Env var | Default | Purpose |\n| --- | --- | --- |\n| `WHOOSHLY_TOKEN` | – | **Required** for the stdio bridge. Your agent token. |\n| `WHOOSHLY_MCP_URL` | `https://app.whooshly.co/api/mcp` | Override the endpoint (self-host / staging). |\n\n`WHOOSHLY_API_TOKEN` is accepted as an alias for `WHOOSHLY_TOKEN`.\n\n---\n\n## How the bridge works\n\n`whooshly-mcp` reads newline-delimited JSON-RPC from stdin, POSTs each message to the hosted server with your bearer token, and writes the correlated reply to stdout. It has **zero npm dependencies** (Node 18+ built-ins only), so it's small and easy to audit – the entire bridge is one file: [`bin/whooshly-mcp.mjs`](bin/whooshly-mcp.mjs).\n\nThe heavy lifting – auth, rate limits, entitlement checks, QR rendering, analytics – all happens server-side on [Whooshly](https://whooshly.co). The bridge is a transport shim, nothing more.\n\n---\n\n## Links\n\n- **Website:** https://whooshly.co\n- **MCP server / connect guide:** https://whooshly.co/mcp\n- **App / dashboard:** https://app.whooshly.co\n- **MCP endpoint:** `https://app.whooshly.co/api/mcp`\n\n## License\n\n[MIT](LICENSE) © Whooshly\n","readmeFilename":"README.md"}