Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Bintu Web Reader

by l20941485-blipversion 1.0.2i★ –iRuns in the cloud
Registry nameio.github.l20941485-blip/bintu

Install

Overview

Description from the maker (original English)

Fetch public web pages as clean, token-budgeted text for AI agents.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs in the cloud
  • Transport: Streamable HTTP
  • Category: Web & browsers
  • You need to fill in: Authorization

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 3 of 3 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • You fill in yourself: Authorization

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.

Run this in your terminal

claude mcp add --transport http bintu https://bintu-web-reader.mcpize.run/mcp --header 'Authorization: your-value'

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "bintu": {
      "url": "https://bintu-web-reader.mcpize.run/mcp",
      "headers": {
        "Authorization": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "bintu": {
      "type": "http",
      "url": "https://bintu-web-reader.mcpize.run/mcp",
      "headers": {
        "Authorization": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This address needs a key in a request header, which the add-connector menu cannot set. Use Claude Code, Cursor or VS Code instead.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • Authorization secret required HTTP header
    Bearer . Subscribe on the MCPize listing; a free plan is available.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

The server asks you to sign in before it lists its tools.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 9, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account l20941485-blip, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 428 ms (HTTP 401)

  • ✓ Pass

    Sign-in with OAuth

    Declares OAuth sign-in, so your AI app can take you to log in

  • … Not checked yet

    No hidden instructions in tool descriptions

    Not checked yet; we read the tool list when we check the endpoint

Compared with others in Web & browsersi

  • More stars than 0% of the other 1395 servers in this category
  • Published to the registry more recently than 65% of the other 1395 servers in this category
  • Basic checks equal to or better than 100% of the other 1395 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Bintu Web Reader safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: Authorization

Does it run on my computer or in the cloud?

It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.

Is it still maintained?

The GitHub repo last changed –, and the latest version (1.0.2) reached the registry 18 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Browser Use, Chrome DevTools MCP, MCP Server Browser

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Browser Use

Lets AI do web tasks for you, such as filling forms, searching and extracting data, in the maker’s cloud browsers or on your computer.

by browser-useWidely used↓ 1.6M/wk★ 120.1KUpdated 19 days ago

Computer or cloud✓ browser-use.com

Chrome DevTools MCP

Lets AI use Chrome’s developer tools to inspect pages, find what makes them slow and spot errors. Made by the Chrome DevTools team.

by ChromeDevToolsWidely used↓ 1.9M/wk★ 54.8KUpdated 18 days ago

Runs on your computer

MCP Server Browser

MCP server for browser use access

by bytedanceWidely used↓ 792/wk★ 39.6KUpdated 14 months ago

Runs on your computer

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Bintu Data Extraction API

Quickstart

1. Authenticate

Send your service key in the X-API-Key header. Do not put API keys in URLs.

$BaseUrl = "https://your-bintu-api.onrender.com"

$ApiKey = $env:BINTU_API_KEY

2. Extract readable text
$url = "https://example.com"

$response = Invoke-RestMethod -Method Get -Uri "$BaseUrl/api/v1/scrape/text?url=$([uri]::EscapeDataString($url))" ` -Headers @{ "X-API-Key" = $ApiKey }

$response.text $response.approx_tokens $response.truncated

The response includes text, an approximate token count, and truncated. If a page returns very little readable text, the response may include low_yield: true and a short yield_hint, such as a note that the page appears to require JavaScript.

3. Use MCP

MCP discovery (initialize, tools/list, ping) is available without a key. Tool execution requires either the scoped MCP_API_KEY or the master API_KEY, sent as X-API-Key or Authorization: Bearer.

$body = @{

jsonrpc = "2.0" id = 1 method = "tools/call" params = @{ name = "bintu_scrape_text" arguments = @{ url = "https://example.com" max_tokens = 2000 } } } | ConvertTo-Json -Depth 10

Invoke-RestMethod -Method Post -Uri "$BaseUrl/mcp" -Headers @{ "X-API-Key" = $ApiKey "Accept" = "application/json, text/event-stream" } -ContentType "application/json" ` -Body $body

What bintu_scrape_text does

Fetches one public HTTP or HTTPS URL and returns its readable text, sized for an LLM context window. Only HTML/XHTML pages up to 1 MiB are supported; PDF, JSON, images, and pages that require JavaScript are not. Article or main content is preferred; navigation, headers, footers, ads, and cookie banners are dropped; repeated story blocks are removed (deduplicated_count); links appear as label (url); code is returned in fenced blocks with indentation kept; tables are pipe-delimited.

When to use it
  • You need readable, token-bounded text from a public web page for an LLM context window.
  • You want chunks sized for a vector database (mode=chunk).
  • You want a short leading extract within a budget (mode=summarize).
  • You want cache-aware extraction with provenance and token economics.
Input parameters
ParameterTypeDefaultDescription
urlstringrequiredAbsolute public HTTP(S) URL. Private, loopback, link-local, and metadata addresses, non-standard ports, and URLs containing credentials are rejected with invalid_or_unsafe_url.
modestringscrapescrape returns readable text trimmed to max_tokens; chunk splits the page into budgeted chunks; summarize returns leading text within max_tokens. chunked is accepted as an alias for chunk.
max_tokensinteger6000Approximate token budget, enforced in every mode (range 100–50,000). Accepted alias: chunk_token_budget.
chunk_token_budgetinteger—Accepted alias for max_tokens; max_tokens wins on conflict.
linksstringinlineinline preserves readable link URLs; footnotes uses numbered references and a link list; false removes URLs for the lowest-token output.
footnote_url_policystringtruncatedFor links=footnotes only: full preserves complete destinations; truncated replaces over-limit destinations with non-clickable text.
max_footnote_url_lengthinteger100For links=footnotes only: maximum URL length for visible labels and truncated destinations.
render_jsbooleanfalseRender in a browser before extraction. Available only if the operator enables it; otherwise render_js_disabled is returned.
cachebooleantrueRead from memory and persistent caches. false bypasses cache reads.

| persist | boolean | true | Allow a fresh successful result to be written to the persistent cache. false skips that write.

Output envelope

Every successful call returns the same JSON envelope (in structuredContent and as JSON in content[0].text):

FieldTypeDescription
modestringExtraction mode used (scrape, chunk, or summarize).
tokensintegerCompatibility alias of approx_tokens.
approx_tokensintegerApproximate token count of the returned text (ceil(characters / 4)).
html_tokensintegerApproximate token count of the fetched source HTML.
token_methodstringMethod used to compute approx_tokens: ceil(characters / 4).
limiting_factorstringchar_cap, token_budget, or none — which limit bound the response.
chunk_countintegerNumber of chunks in chunks.
cache_hitbooleanTrue when served from memory or persistent cache.
cache_layerstringnone, memory, or persistent.
source_urlstringRequested URL with sensitive-looking query parameters removed.
extracted_atstringUTC ISO 8601 timestamp of the extraction.
tokens_saved_estimateintegerSource-HTML estimate minus returned-text estimate, floored at 0.
truncatedbooleanTrue when content exceeded a limit and text was shortened.
splitbooleanTrue when content spans multiple chunks (chunk mode only).
chunksarrayEach item: {index, text, tokens, approx_tokens}.
deduplicated_countintegerRepeated story blocks removed.
low_yieldbooleanTrue when a large page produced very little text.
yield_hintstringPresent only when low_yield is true.
Provenance fields*—request_id, fetched_at, requested_url, final_url, content_type, bytes_fetched, content_sha256, cache, extractor_version — present when available.

\* Provenance fields are additive and may be absent.

Error semantics

Tool execution failures are returned in-band with isError: true and a stable error object at structuredContent.error (code, message, optional hint, optional retryable, optional retry_with), with the same code and message in content[0].text.

ConditionMCP error codeRetryable?
Invalid or unsafe URLinvalid_or_unsafe_urlNo
Robots disallowblocked_by_robotsNo
Robots unavailablerobots_unreachableNo
Caller burst limitburst_rate_limit_exceededYes (after Retry-After)
Upstream HTTP 429upstream_rate_limitedYes (retry_after_delay)
Upstream HTTP 401/402/403upstream_access_deniedNo
Other upstream HTTP errorupstream_http_errorNo
Body exceeds 1 MiBpayload_too_largeNo
Unsupported media typeunsupported_media_typeNo
Unsupported encodingunsupported_content_encodingNo
Too many redirectstoo_many_redirectsNo
Timeout or connection failureupstream_timeout / upstream_connection_errorNo
JavaScript disabledrender_js_disabledNo (retry with render_js=false)
JavaScript render failureupstream_render_errorNo
Invalid tool argumentsinvalid_argumentsNo
Retry behavior

Only upstream_rate_limited is retryable (retryable=true, retry_with="retry_after_delay"). Wait for the indicated delay before retrying. All other errors are non-retryable; do not retry them unchanged.

Cache behavior

Results may be served from memory or persistent cache (cache_hit, cache_layer). Set cache=false to bypass cache reads; set persist=false to skip the persistent write. URLs with credential-like query parameters are never stored. robots.txt is honored.

Token economics

approx_tokens is ceil(characters / 4), an estimate, not a tokenizer count. tokens_saved_estimate is the source-HTML estimate minus the returned-text estimate. html_tokens reports the source size the same way. Use these fields to budget LLM context before and after extraction.

Rate limits

The service applies a per-process burst limit (60 requests per 60 seconds by default). A burst-limit response (429 burst_rate_limit_exceeded on REST; upstream_rate_limited on MCP) includes a Retry-After hint. Pause and retry after that delay; do not retry immediately.

Common responses
SituationWhat to check
401 invalid_api_keySend a valid REST X-API-Key; an MCP-only key does not unlock REST routes.
truncated: trueRaise max_tokens, or request the next chunk using the continuation endpoint.
low_yield: trueTry a print, AMP, RSS, or server-rendered version of the page.

Bintu is a FastAPI-based API for extracting readable text from public HTML pages. It limits upstream responses to 1 MiB, accepts HTML/XHTML only, pins outbound connections to validated public IPs, and applies a 60-request per-minute process-local burst limit.

Live API

The service is live on Render and ready to test:

  • Base URL: https://bintu-api.onrender.com
  • OpenAPI docs: https://bintu-api.onrender.com/docs
  • Health check: https://bintu-api.onrender.com/healthz
Health check
curl https://bintu-api.onrender.com/healthz

Example response:

{

"status": "ok" }

Scrape text

For direct access to the deployed service, set your API key in PowerShell. The secure prompt avoids echoing the key as you type:

$env:BINTU_BASE_URL = "https://bintu-api.onrender.com"

$secure = Read-Host "Paste your Render API_KEY" -AsSecureString $env:BINTU_API_KEY = [System.Net.NetworkCredential]::new("", $secure).Password Remove-Variable secure

Send an authenticated scrape request:

$target = "https://www.iana.org/domains/reserved"

$encodedUrl = [uri]::EscapeDataString($target) $headers = @{ "X-API-Key" = $env:BINTU_API_KEY }

try { $result = Invoke-RestMethod -Uri "$env:BINTU_BASE_URL/api/v1/scrape/text?url=$encodedUrl" -Headers $headers $result | ConvertTo-Json -Depth 5 } catch { $response = $_.Exception.Response if ($response) { $statusCode = [int]$response.StatusCode $retryAfter = $response.Headers["Retry-After"] Write-Host "HTTP $statusCode; Retry-After: $retryAfter" $reader = [System.IO.StreamReader]::new($response.GetResponseStream()) try { $reader.ReadToEnd() } finally { $reader.Dispose() } } else { throw } }

Successful response:

{

"url": "https://www.iana.org/domains/reserved", "text": "# IANA-managed Reserved Domains\n## Example domains\n...", "truncated": false }

truncated is true if the extracted text exceeded the configured character limit. The API returns the requested URL in url.

For curl.exe in PowerShell, the same request can be made with:

curl.exe --get "$env:BINTU_BASE_URL/api/v1/scrape/text" `

--data-urlencode "url=https://www.iana.org/domains/reserved" --header "X-API-Key: $env:BINTU_API_KEY" --header "Accept: application/json"

The Render API_KEY is available in the service's Environment settings. Keep it private, do not commit it, and do not put it in a URL. The examples above keep it in the current PowerShell process environment. If no API key or proxy secret is configured (as in the default local development setup), authentication is not required. Interactive API docs are available at /docs — click Authorize (top right) and paste the key into ApiKeyAuth, or the Supabase session token into BearerAuth for the mobile endpoint, then use Try it out on any locked route.

Scrape chunks

Use POST /api/v1/scrape/chunks when the extracted page needs to be divided into model-friendly, approximately token-budgeted pieces. This is useful for long articles, documentation, and retrieval workflows.

Set the API key as shown in Scrape text, then send:

$target = "https://www.iana.org/domains/reserved"

$body

Only the beginning is shown; read the rest in the repo

Ask PopNx