About PulpMiner
PulpMiner MCP Server turns webpage content into JSON and can save extraction setups as reusable REST APIs for AI assistants using MCP clients. It also supports fetching data from and listing saved APIs.
Key features
- 01Convert webpages to JSON
- 02Generate JSON in a specified format
- 03Save reusable REST APIs
- 04Fetch and list saved APIs
- 05Check API keys
Use cases
- 01Extract structured data from webpages
- 02Save a page extraction setup as an API
- 03Query a saved API with dynamic URL variables
- 04Check PulpMiner credential configuration
MCP support
It provides MCP clients with tools to convert webpages to JSON, save APIs, fetch API data, list APIs, and validate keys; it supports stdio and Streamable HTTP.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.pulpminer.com/mcpclaude mcp add --transport http pulpminercom-pulpminer https://mcp.pulpminer.com/mcp{"mcpServers":{"pulpminercom-pulpminer":{"type":"http","url":"https://mcp.pulpminer.com/mcp"}}}Open in Cursor{"servers":{"pulpminercom-pulpminer":{"type":"http","url":"https://mcp.pulpminer.com/mcp"}}}Open in VS Code{"mcpServers":{"pulpminercom-pulpminer":{"type":"http","url":"https://mcp.pulpminer.com/mcp"}}}{"mcpServers":{"pulpminercom-pulpminer":{"serverUrl":"https://mcp.pulpminer.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://mcp.pulpminer.com/mcpAuth requiredTools
5| Parameter | Type | Required | Description |
|---|---|---|---|
| llm | enum | No | LLM used to convert HTML to JSON. llm_2 = OpenAI GPT (default), llm_1 = Google Gemini, llm_3 = Groq (only if enabled for the account; otherwise the API returns 'bad request').llm_1 | llm_2 | llm_3 |
| url | string | Yes | Full URL of the web page to extract data from (http/https). |
| scraper | enum | No | Scraper backend. scraper_1 (default, supports useSession) or scraper_2. Try the other one if a site blocks scraping.scraper_1 | scraper_2 |
| renderJs | boolean | No | Render JavaScript in a headless browser before extracting (default true; adds 0.1 credits). |
| selector | string | No | CSS selector to limit extraction to part of the page, e.g. "main" or "#results". Default: whole body. |
| jsonFormat | object | No | Sample JSON whose keys define the output shape, e.g. {"title": "", "price": "", "items": [{"name": ""}]}. Key names are kept exactly; values are extracted from the page. |
| useSession | boolean | No | Use a persistent scraping session (scraper_1 only; ignored for lifetime-plan accounts). |
| extraLLMInfo | string | No | Extra natural-language instructions for the LLM, e.g. 'only the first 10 products, prices as numbers'. |
Details
From the project READMEPulpMiner MCP Server
Source: github.com/pulpminercom/pulpminer-mcp · Issues: github.com/pulpminercom/pulpminer-mcp/issues
An MCP server for PulpMiner. It lets AI assistants (Cursor, Claude Desktop, and any other MCP client):
- Generate JSON from any web page with AI. PulpMiner scrapes the page and an LLM turns it into structured JSON, optionally in the exact shape you give it.
- Save a page-to-JSON setup as a reusable REST API (static, or dynamic with
{{ variables }}in the URL). - Fetch data from saved APIs and list them.
Tools
| Tool | What it does | Backend endpoint | Credits |
|---|---|---|---|
pulpminer_generate_json | Scrape a URL and convert it to JSON with AI (optional jsonFormat sample, CSS selector, extra instructions) | POST /external/ai/json | 0.25 (+0.1 renderJs) |
pulpminer_save_as_api | Save URL + JSON format (+ optional dynamic URL template, cache) as an API; returns the API id and endpoint | POST /external/ai/json/save | free |
pulpminer_fetch_api_data | Call a saved API (GET, or POST with variables for dynamic APIs) | GET/POST /external/{apiId} | 0.4 (+0.1 renderJs) |
pulpminer_list_saved_apis | List saved APIs (id, url, dynamic URL template and its variables) | GET /external/api/url | free |
pulpminer_check_api_key | Validate the API key and show which credentials are configured | GET /external/n8n/auth | free |
Option values match the backend: scraper is scraper_1 (default) or scraper_2. llm is llm_2 (OpenAI GPT, default), llm_1 (Google Gemini), or llm_3 (Groq, only if enabled for your account).
Configuration
| Env var | Required | Description |
|---|---|---|
PULPMINER_API_KEY | yes | Your API key from the PulpMiner dashboard → API Keys. Sent as the apikey header. It is the only credential any tool needs. |
PULPMINER_BASE_URL | no | Default https://api.pulpminer.com |
PULPMINER_TIMEOUT_MS | no | Default 300000 (scraping plus the LLM step can take a while) |
Install & build
git clone https://github.com/pulpminercom/pulpminer-mcp.git
cd pulpminer-mcp
npm install
npm run build
Run it:
PULPMINER_API_KEY=... node dist/index.js # stdio
PULPMINER_API_KEY=... node dist/index.js --http # Streamable HTTP on http://127.0.0.1:3333/mcp
Once published to npm, this becomes npx -y pulpminer-mcp.
Client configuration
Cursor (~/.cursor/mcp.json or .cursor/mcp.json)
{
"mcpServers": {
"pulpminer": {
"command": "npx",
"args": ["-y", "pulpminer-mcp"],
"env": { "PULPMINER_API_KEY": "your-api-key" }
}
}
}
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"pulpminer": {
"command": "npx",
"args": ["-y", "pulpminer-mcp"],
"env": { "PULPMINER_API_KEY": "your-api-key" }
}
}
}
Before it is published, use a local build: "command": "node", "args": ["/absolute/path/to/pulpminer-mcp/dist/index.js"].
Streamable HTTP clients
Start with --http (PORT, HOST env; it binds to 127.0.0.1:3333 by default) and point the client at http://127.0.0.1:3333/mcp. The server is stateless. Each request can send its own API key in the x-pulpminer-api-key header, which overrides PULPMINER_API_KEY. That makes it usable as a hosted multi-user endpoint (put it behind HTTPS).
{
"mcpServers": {
"pulpminer": {
"url": "http://127.0.0.1:3333/mcp",
"headers": { "x-pulpminer-api-key": "your-api-key" }
}
}
}
Typical flow
pulpminer_generate_json { url, jsonFormat? }: preview the JSON.pulpminer_save_as_api { url, jsonFormat, cache?, dynamicUrl? }returnsapiIdandendpoint.pulpminer_fetch_api_data { apiId, variables? }
Dynamic API example: dynamicUrl: "https://example.com/search?q={{ query }}", then fetch it with variables: { "query": "laptops" }.
Development
npm test # builds, then runs scripts/smoke-test.mjs against a local mock API (no real calls)
npm run inspect # opens the MCP Inspector UI
npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list
Hosted server (remote)
remote/ is a Cloudflare Worker serving the same tools over Streamable HTTP (stateless) at https://mcp.pulpminer.com/mcp. Send your PulpMiner API key as Authorization: Bearer <key> (or x-pulpminer-api-key); it is only forwarded to the PulpMiner API, never stored.
{ "mcpServers": { "pulpminer": { "url": "https://mcp.pulpminer.com/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }
Local dev: cd remote && npm install && npm run dev (Node 22+).
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.