@joinmassive/mcp-server
Officialby joinmassive
README.md
# @joinmassive/mcp-server
Official MCP server for the [Massive Web Render API](https://docs.joinmassive.com/web-render). Give your AI agents real-time web access — fetch any URL, search Google, query AI chatbots — with JS rendering, captcha solving, and 195+ country geo-targeting handled automatically.
## Quickstart (Claude Desktop)
### Option A — One-click install (`.mcpb`)
1. Download the latest [`massive-mcp-X.Y.Z.mcpb`](https://github.com/joinmassive/mcp-server/releases/latest) from GitHub Releases.
2. Open the file with Claude Desktop (or drag-drop into Settings → Extensions).
3. Paste your Massive API token when prompted. Token is stored in your OS keychain.
### Option B — npx + config snippet
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"massive": {
"command": "npx",
"args": ["-y", "@joinmassive/mcp-server"],
"env": { "MASSIVE_TOKEN": "your-token-here" }
}
}
}
```
Restart Claude Desktop.
## Quickstart (Claude Code)
One command, works across all your projects:
```sh
claude mcp add massive --scope user -e MASSIVE_TOKEN=your-token-here -- npx -y @joinmassive/mcp-server
```
Then `/mcp` in any Claude Code session to confirm it's connected. Drop `--scope user` to scope it to the current project only.
### Other MCP clients
The same JSON snippet works for any MCP-compatible client. Drop it into the client's config file:
| Client | Config path |
|---|---|
| Cursor | `~/.cursor/mcp.json` |
| Continue | `~/.continue/config.json` (under `mcpServers`) |
| Cody | `~/Library/Application Support/com.sourcegraph.cody/mcp.json` (macOS) |
| Windsurf | `~/.codeium/windsurf/mcp_config.json` |
| VS Code (MCP) | `~/.config/Code/User/settings.json` (under `chat.mcp.servers`) |
If `npx` isn't on the client's PATH, swap to a direct binary path: `"command": "node", "args": ["/absolute/path/to/dist/index.js"]`.
## Getting an API token
Sign in at [dashboard.joinmassive.com](https://dashboard.joinmassive.com) → Developer → API Keys.
## Tools
### `web_fetch`
Fetch any URL. Returns Markdown by default (best for LLMs).
| Arg | Type | Default | Notes |
|-----|------|---------|-------|
| `url` | string (required) | — | |
| `format` | `"markdown"` \| `"rendered"` \| `"raw"` | `"markdown"` | |
| `country` | string (ISO 3166-1 alpha-2) | — | |
| `city` | string | — | |
| `subdivision` | string | — | ISO 3166-2 (e.g. `"TN"`). Ignored if `city` is set. |
| `device` | string | — | Device emulation name |
| `expiration` | integer (0–365) | — | Days the cached result is reused. `0` = always live (good for prices, scores). |
| `difficulty` | `"low"` \| `"medium"` \| `"high"` | `"low"` | Anti-bot evasion strength. Multipliers: `medium`=2×, `high`=premium. |
Example prompt: *"Use the Massive MCP server to fetch https://news.ycombinator.com and summarise the top stories."*
### `web_search`
Google search results, parsed into structured JSON.
| Arg | Type | Default |
|-----|------|---------|
| `query` (required, ≤ 255 chars) | string | — |
| `country` | string (ISO) | — |
| `city` | string | — |
| `subdivision` | string | — |
| `max_results` | number | 10 |
| `expiration` | integer (0–365) | — |
| `language` | string | — |
| `display` | string | — |
Returns: `{ organic, ai_overview, people_also_ask, query }`.
Example shape:
```json
{
"query": "best espresso machines 2026",
"organic": [
{ "title": "...", "url": "https://...", "snippet": "..." }
],
"ai_overview": { "answer": "...", "sources": [{ "domain": "wirecutter.com", "url": "https://..." }] },
"people_also_ask": [
{ "question": "What is the best espresso machine for beginners?", "answer": "" }
]
}
```
Example prompt: *"Use web_search to find recent reviews of espresso machines and return the top 3 organic results plus the AI overview."*
### `ai_chat_completion`
Chatbot answer with sources.
| Arg | Type | Default |
|-----|------|---------|
| `prompt` (required, ≤ 2047 chars) | string | — |
| `model` | `"chatgpt"` \| `"gemini"` \| `"perplexity"` \| `"copilot"` | `"chatgpt"` |
| `country` | string (ISO) | — |
| `city` | string | — |
| `subdivision` | string | — |
| `expiration` | integer (0–365) | — |
| `language` | string | — |
| `display` | string | — |
| `device` | string | — |
Returns: `{ completion, sources, model, subqueries? }`.
### `account_status`
No args. Returns `{ credits_remaining }`. Useful to warn the user before they run out of credits. Free — does not consume credits.
## Pricing & cost control
Credit costs (live reference: <https://joinmassive.com/pricing>):
| Endpoint | Base cost | Notes |
| --- | --- | --- |
| `web_fetch` | 1 credit | Multipliers — `difficulty=medium` → 2×, `difficulty=high` → premium |
| `web_search` | 1 credit | No multipliers |
| `ai_chat_completion` | 1 credit | No multipliers |
| `account_status` | Free | — |
**Worked example:** `web_fetch` with `difficulty=medium` costs `1 × 2 = 2 credits`.
### Tips for keeping costs down
- **Cache:** `expiration` (days) reuses recent results. Default `1`. Set `expiration=0` only when freshness matters (prices, scores, weather).
- **Difficulty:** start with default `low`. Bump to `medium` / `high` only if the low attempt fails.
- **Check first:** call `account_status` (free) before launching a batch.
## Resources
This server exposes three read-only reference documents at `docs://` URIs. They show up in your MCP client as attachable references:
| URI | Contents |
| --- | --- |
| `docs://massive/pricing` | Credit costs and multipliers (same as the table above, inline in your client) |
| `docs://massive/geotargeting` | 190+ countries, subdivision/city format, examples |
| `docs://massive/changelog` | What's new in each release |
In Claude Desktop: open the Connectors panel and pick the resource from this server. In Claude Code: type `@` and search by name. **The model does not auto-read these — they're for you to browse.**
## Troubleshooting
**"MASSIVE_TOKEN env var is not set"**
Confirm the `env` block in your Claude Desktop config has the token. Restart Claude Desktop.
**"Massive endpoint is autoscaling, please retry"**
A 503 from upstream. The server already retried once; wait ~10s and try again.
**"403 Forbidden — the request was rejected (likely captcha or invalid token)"**
Either the target site rejected our captcha solver, or the token is invalid. Re-check the token at the dashboard.
**No tools appear in Claude Desktop**
Settings → Developer → check the MCP server logs. The most common cause is `command: "npx"` not being on Claude Desktop's PATH. Run `which npx` in Terminal — if it's under Homebrew (`/opt/homebrew/bin`), Claude Desktop's PATH won't include it. As a workaround, use a direct path: `"command": "node", "args": ["/absolute/path/to/dist/index.js"]`. Or install the `.mcpb` bundle (Option A above), which sidesteps PATH issues entirely.
## Contributing
Issues and PRs welcome at [github.com/joinmassive/mcp-server](https://github.com/joinmassive/mcp-server).
## License
MIT. See [LICENSE](./LICENSE).
TDQS
A4.4/5.0
Scored across 4 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: account_status for credit balance, ai_chat_completion for chatbot responses, web_fetch for fetching URLs, and web_search for search results. No overlap.
Naming Consistency5/5
All tools use snake_case and follow a verb_noun pattern: account_status, ai_chat_completion, web_fetch, web_search. Naming is uniform and predictable.
Tool Count5/5
With 4 tools, the server is well-scoped for its purpose of providing access to various Massive services. Not too few, not too many.
Completeness4/5
The tool set covers the core functionalities: account info, AI chat, web fetch, and search. A minor gap is the lack of a tool for user profile or usage history beyond credits, but the current set is sufficient for typical use.
Maintenance
ActivityInactive
ResponsivenessNo issues