{"_id":"@amitsaini4142/revenue-mcp","_rev":"3-bd158c7813905bf678b47f335458a1b9","name":"@amitsaini4142/revenue-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@amitsaini4142/revenue-mcp","version":"1.0.0","license":"ISC","_id":"@amitsaini4142/revenue-mcp@1.0.0","maintainers":[{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"}],"bin":{"revenue-mcp":"dist/index.js"},"dist":{"shasum":"e71690771676f26c2a073649f1993a7b9f832676","tarball":"https://registry.npmjs.org/@amitsaini4142/revenue-mcp/-/revenue-mcp-1.0.0.tgz","fileCount":14,"integrity":"sha512-gSk3bf5c1WNQV4oP+q06sLEJRFZZfr06K3pOc+KQY3Vsv5SCGccL4XQ4ofbz5pMdtrHj+4CA/8XL+B3XVqhtJQ==","signatures":[{"sig":"MEUCIQCIOvVAM+E2Hh7xy9QM0Hr+Zk9/yXMiDYj1S5gPn4UArQIgO0LK+STLlZ0hf7nbEbaxN2FINgPkF6jxeP0UVTP0cSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8147},"type":"module","engines":{"node":">=20"},"gitHead":"c276122353e4ee0239fbca692fffddc4125514ce","scripts":{"dev":"tsx src/index.ts","test":"bash -O globstar -c 'tsx --test src/**/*.test.ts'","build":"tsc","start":"tsx src/index.ts","typecheck":"tsc --noEmit","start:http":"tsx src/http.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"},"_npmVersion":"10.8.2","description":"MCP server with demo ping and revenue tools","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.4.3","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.8","typescript":"^7.0.2","@types/node":"^26.1.2","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/revenue-mcp_1.0.0_1786166865167_0.08707192598381086","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@amitsaini4142/revenue-mcp","version":"1.0.1","keywords":["mcp","modelcontextprotocol","revenue"],"author":{"name":"amitsaini4142"},"license":"ISC","_id":"@amitsaini4142/revenue-mcp@1.0.1","maintainers":[{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"}],"bin":{"revenue-mcp":"dist/index.js"},"dist":{"shasum":"bb6f9646a6d2321f269fa63390d8835147523113","tarball":"https://registry.npmjs.org/@amitsaini4142/revenue-mcp/-/revenue-mcp-1.0.1.tgz","fileCount":17,"integrity":"sha512-Y4q781+ycA+2b36zLDh3sNtB7GuPVN0WYYZxCcbCDETIdKQS0j4iPjP0Y6K9nrnleLaNVUbaYLkAvbFqvAmk1Q==","signatures":[{"sig":"MEUCIDc2fAFtqcuUvtQ+ZY1l9KLfv0hj7RBifAGk6XQvJ12KAiEA+AZ52Jow3ScZ55JyTb96jJjOLyd3l5rCNq6B6BIcp5c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10673},"type":"module","engines":{"node":">=20"},"gitHead":"c42cdaf1c935661ec67648334b7bea50a21e629a","scripts":{"dev":"tsx src/index.ts","test":"bash -O globstar -c 'tsx --test src/**/*.test.ts'","build":"tsc","start":"tsx src/index.ts","typecheck":"tsc --noEmit","start:http":"tsx src/http.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"},"_npmVersion":"10.2.4","description":"MCP server providing a ping health check and paginated raw 2026 revenue data","directories":{},"_nodeVersion":"18.19.1","dependencies":{"zod":"^4.4.3","express":"^5.2.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.8","typescript":"^7.0.2","@types/node":"^26.1.2","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/revenue-mcp_1.0.1_1786168271787_0.7005919393227831","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@amitsaini4142/revenue-mcp","version":"1.1.0","mcpName":"io.github.amitsainii/revenue-mcp","description":"MCP server providing a ping health check and paginated raw 2026 revenue data","author":{"name":"amitsaini4142"},"keywords":["mcp","modelcontextprotocol","revenue"],"type":"module","engines":{"node":">=20"},"bin":{"revenue-mcp":"dist/index.js"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"dev":"tsx src/index.ts","start":"tsx src/index.ts","start:http":"tsx src/http.ts","build":"tsc","prepublishOnly":"npm run build","test":"bash -O globstar -c 'tsx --test src/**/*.test.ts'","typecheck":"tsc --noEmit"},"license":"ISC","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","express":"^5.2.1","zod":"^4.4.3"},"devDependencies":{"@types/express":"^5.0.6","@types/node":"^26.1.2","tsx":"^4.23.8","typescript":"^7.0.2"},"_id":"@amitsaini4142/revenue-mcp@1.1.0","gitHead":"46bd9fd5614fc1cf49743a4a2938a041fbc0d4ab","_nodeVersion":"18.19.1","_npmVersion":"10.2.4","dist":{"integrity":"sha512-4dRHiKm0CsWRb5umG05aVA6AgzfhgNmw5y1sfoJW9xpozoS1P+VcboFinR7NBFyCnS7V3SnHPqhjLHIc+AX21Q==","shasum":"1ebfcc223722eee45c3e2e4db450d6a6b82142ee","tarball":"https://registry.npmjs.org/@amitsaini4142/revenue-mcp/-/revenue-mcp-1.1.0.tgz","fileCount":17,"unpackedSize":14728,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDUmeFWwHNzDZhxI3meoZjbrc1mZEevVtTpMBhWFLEAtgIhAKSbo0dDLwlVJ6wDrCTrZ9XnCc7yfLjWwe8HXVEL7zSw"}]},"_npmUser":{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"},"directories":{},"maintainers":[{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/revenue-mcp_1.1.0_1786183242306_0.4437653695061283"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-08T05:27:44.965Z","modified":"2026-08-08T10:00:42.632Z","1.0.0":"2026-08-08T05:27:45.321Z","1.0.1":"2026-08-08T05:51:12.011Z","1.1.0":"2026-08-08T10:00:42.453Z"},"author":{"name":"amitsaini4142"},"license":"ISC","keywords":["mcp","modelcontextprotocol","revenue"],"description":"MCP server providing a ping health check and paginated raw 2026 revenue data","maintainers":[{"name":"amitsaini4142","email":"amitsaini4142@gmail.com"}],"readme":"# @amitsaini4142/revenue-mcp\n\nMCP server (TypeScript + official SDK) with demo `ping` and revenue tools.\n\nRequires Node.js ≥ 20.\n\n## Install / run (stdio)\n\n```bash\nnpx -y --registry=https://registry.npmjs.org/ @amitsaini4142/revenue-mcp\n```\n\nThe explicit `--registry` matters when your default npm registry is a private mirror. Check yours with `npm config get registry`.\n\nLocal development (this repo):\n\n```bash\nyarn install\nyarn start          # stdio via tsx\nyarn start:http     # Streamable HTTP on PORT/3000\nyarn build          # emit dist/ for publish\n```\n\n## HTTP transport\n\n`yarn start:http` serves Streamable HTTP on `POST /mcp`, bound to `127.0.0.1` on `PORT` (default 3000). `GET` and `DELETE` return 405, and each request gets a fresh stateless server, so there is no session state to keep.\n\nSet `MCP_AUTH_TOKEN` to require a bearer token on every `/mcp` request:\n\n```bash\nMCP_AUTH_TOKEN=$(openssl rand -hex 32) yarn start:http\n```\n\nRequests then need an `Authorization: Bearer <token>` header; anything missing, malformed, or wrong gets a `401` with `WWW-Authenticate: Bearer`. Tokens are compared against a SHA-256 digest with `timingSafeEqual`, so comparison time does not leak the value. Leaving `MCP_AUTH_TOKEN` unset disables the check entirely, which is only appropriate on loopback — the startup banner states which mode is active.\n\nClient config for the HTTP transport:\n\n```json\n{\n  \"mcpServers\": {\n    \"revenue-mcp-http\": {\n      \"url\": \"http://127.0.0.1:3000/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer <token>\" }\n    }\n  }\n}\n```\n\nPrefer `127.0.0.1` over `localhost` here: the server binds IPv4 only, and `localhost` can resolve to `::1`. Note the client must already be running for this entry to connect, since nothing launches it on demand the way stdio servers are launched.\n\n## Cursor config\n\nCopy this as-is — it contains no machine-specific paths, so it works for anyone on the team. The package is fetched from npm on each launch, so `@latest` picks up new publishes with no config change.\n\n```json\n{\n  \"mcpServers\": {\n    \"revenue-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"--registry=https://registry.npmjs.org/\",\n        \"--prefix=/tmp\",\n        \"@amitsaini4142/revenue-mcp@latest\"\n      ]\n    }\n  }\n}\n```\n\nDo not use `yarn start` for Cursor — it writes to stdout and breaks MCP stdio framing.\n\n### Why the two extra flags\n\nWithout them Cursor reports only `Connection closed`, and the real cause is visible in the MCP output panel:\n\n- `--registry` avoids `npm error code ENOVERSIONS` / `No versions available`, which happens when your default registry is a private mirror that does not proxy this package. Check yours with `npm config get registry`.\n- `--prefix=/tmp` avoids `npm error code ENOENT` on `lstat '.../Cursor.app/Contents/Resources/app/resources/lib'`. Cursor runs `npx` under its own bundled Node at `Resources/app/resources/helpers/node`, and npm derives its global prefix as two directories above the Node binary. That resolves to `.../app/resources`, so npm looks for a `lib` directory that does not exist inside the read-only app bundle and aborts. Pointing the prefix at a real directory sidesteps the bad derivation. `npm exec` installs into npm's own cache rather than the prefix, so nothing is written to `/tmp`.\n\n## Developing tools\n\n1. Add `src/tools/<name>.ts` with a `registerXTool(server)` helper.\n2. Call it from `createServer()` in `src/server.ts`.\n3. `yarn build` before publish.\n\nDemo tool: `ping` → returns `pong`.\n","readmeFilename":"README.md"}