
nab
io.github.MikkoParkkolaPublished by GitHub account MikkoParkkolav0.12.6Updated Oct 25, 2026
Token-optimized HTTP client for LLMs: fetches any URL as clean markdown. CLI and MCP server.
Overview
Local Rust MCP server that fetches any URL as token-lean markdown, transcribes and diarizes audio/video on-device, and watches URLs for changes.
- What you can do
- Fetch single or batched URLs as clean markdown, with cookie sessions, query-focused extraction and token budgets, plus form submission and 1Password-based login and credential lookup for authenticated pages. Generate browser fingerprint profiles and run fetch validation and benchmark checks. Transcribe and diarize local audio and video files with on-device multilingual ASR. Create, list and remove URL watches that notify the client when page content changes.
- When to use it
- Useful when an assistant needs web research output that fits a context window, access to pages behind a browser session or 1Password login, local transcription of meetings or interviews, or change monitoring on a page such as pricing or a status feed.
- Requirements
- Runs as a local process (nab-mcp binary, installed via Homebrew, prebuilt release, or cargo with Rust 1.95+). ffmpeg is needed for audio/video analysis; ASR models are downloaded separately. Optional 1Password CLI for credential features. No API keys required by default.
Installation
In SourceWeft
- Open nab in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
nab
[CI] [Crates.io] [Downloads] [docs.rs] [Rust] [License: MIT + PolyForm NC] [MCP Protocol] [MCP 2026-07-28] [nab MCP server] [Install in VS Code] [Install in Cursor]
Token-optimized web fetcher + multilingual ASR + URL watcher. MCP 2025-11-25 and 2026-07-28 (partial: a call that does not wait). Rust. macOS arm64 first, cross-platform.
nab is a single Rust binary that does three things very well: it fetches any URL as clean markdown (with your real browser cookies and anti-bot evasion), it analyzes any audio or video file with on-device multilingual ASR and speaker diarization, and it watches any URL for changes and pushes notifications when content moves. Everything runs locally. There are no API keys to set up by default. The output is shaped for LLM context windows.
Why nab
- Token-lean by design. nab returns only what an LLM actually needs — clean markdown, BM25-lite query-focused extraction, and structure-aware token budgets — cutting the token cost of web research instead of dumping raw HTML into your context window.
- Multimodal, fully on-device. Transcribe and diarize any audio or video (FluidAudio / Parakeet TDT v3 on the Apple Neural Engine — 131× realtime on a 2-hour clip, 25 EU languages, word-level timestamps, optional Qwen3-ASR for zh/ja/ko/vi) and OCR images via Apple Vision (15 languages, ~10–50 ms). No cloud, no API keys.
- Authenticated reach. Real browser cookies, 1Password auto-login with TOTP/MFA, WebAuthn passkeys, fingerprint spoofing and WAF evasion — reach internal dashboards, SaaS apps, and paywalled research with the same command as a public URL.
- Watch the web. Subscribe to any URL via MCP resources — conditional GETs, semantic diff, adaptive backoff. RSS for the entire web.
- Prompt-injection defense, on by default. Hidden instructions addressed to your AI are surfaced to you, not silently executed by your model — see Security.
Everything is a single local Rust binary. No cloud backend, no API keys by default, output shaped for LLM context windows.
Quick start
Tell your AI assistant (recommended):
Read https://github.com/MikkoParkkola/nab and install nab as my web fetching and audio analysis MCP server
Your agent will install the binary, wire itself up, and start fetching. Works in Claude Code, Cursor, Windsurf, and any AI with terminal access.
Or install and try manually:
Features
Security: prompt-injection defense
Web pages increasingly carry instructions written for the AI, not for you — concealed in HTML comments, display:none / aria-hidden text, data-ai / data-mcp / data-agent attribute payloads, or WebMCP manifests. Fetch such a page with a naive tool and those hidden instructions land straight in your model's context, where they can be acted on. This is the prompt-injection-as-phishing class of attack.
nab treats every fetched page as hostile input and runs two local, non-networked guards before any content reaches your agent — on by default, no flag, no setup:
- Secure Ingestion guard — detects and strips machine-targeted markup that is invisible to humans (AI-addressed comments, hidden
display:none/aria-hiddentext, agent-onlydata-*payloads, WebMCP advertisements) and reports each detection atInfo/Warn/Blockseverity, so you see what a page tried to tell your agent instead of it being silently executed. - YARA-X signature guard — scans every returned body for prompt-injection, exfiltration, secret-leak, and obfuscation signatures, redacting matched sections by default. Set
NAB_YARA_ACTION=refuseto block the fetch outright (orNAB_YARA_BYPASS=1as an audited emergency opt-out).
The net effect: hidden instructions become visible to you, not executed by your model — a strong reason to point your agent at nab fetch instead of a built-in web-fetch tool.
Licensing: both guards are Enterprise Edition modules — free for personal and non-commercial use under PolyForm Noncommercial 1.0.0; commercial / business use requires a commercial license (see COMMERCIAL.md and the License section).
Installation
Homebrew (macOS, recommended)
Pre-built binary (no Rust toolchain required)
Most users want this path — these are ready-to-run binaries; nothing is compiled on your machine.
If you have cargo-binstall, it fetches the right pre-built binary automatically:
Otherwise download directly from GitHub Releases. Both the nab CLI and the nab-mcp server ship for every platform below, alongside checksums-sha256.txt:
Example install for macOS Apple Silicon (substitute the filename for your platform):
From crates.io (compiles from source)
Builds nab locally — requires the Rust toolchain (1.95 or newer) and takes a few minutes:
From source
Avoiding duplicate installs
If you install nab through more than one channel (for example a Homebrew tap
and cargo install), the copy that wins depends on PATH order. On many
setups /opt/homebrew/bin comes before ~/.cargo/bin, so a Homebrew binary can
shadow a newer cargo-installed one — and nab --version then reports the older
version.
Run the built-in diagnostic to see every nab on your PATH, which one wins,
and their versions:
If the binary on your PATH is the stale one, its doctor may predate this
command; invoke the newer install by full path to diagnose, e.g.
~/.cargo/bin/nab doctor. To resolve, keep a single install channel
(brew uninstall nab or cargo uninstall nab), or reorder PATH so the
directory of the install you want comes first.
MCP Configuration
MCP Registry name: mcp-name: io.github.MikkoParkkola/nab
Add to your MCP client config (Claude Desktop, Cursor, Windsurf, etc.):
Or use the auto-installer:
Also supported: gemini, amazon-q, lm-studio.
See Tools for the full tool list and MCP integration for capabilities and HTTP transport.
Claude Code plugin
This repository includes a local Claude Code plugin in plugin/. It bundles nab MCP auto-registration with the Claude Elite research, url-insight, wayback, ia, and oreilly skills.
The plugin exposes the /nab workflow shape for fetch, authenticated Brave-cookie fetches, archive retrieval, and multi-source research. It keeps nab's auth-aware path front and center: nab fetch --cookies brave <url> for existing browser sessions and nab fetch --1password <url> for 1Password/TOTP flows.
Usage
Fetch
Common flags for fetch:
MCP fetch additionally supports focus, readability, max_tokens, and session parameters for query-focused extraction, readability extraction, structure-aware token budgets, and persistent encrypted cookie sessions.
Analyze
nab analyze transcribes audio and video files locally. The default backend on macOS arm64 is FluidAudio, which runs Parakeet TDT v3 on the Apple Neural Engine.
Real numbers from a 2 h 09 m English audio file (Karen Hao interview, MacBook Pro M-series):
Watch
nab watch turns any URL into a subscribable resource. MCP clients receive notifications/resources/updated when the content changes.
Per-watch options:
The poller uses conditional GETs (If-None-Match, If-Modified-Since), so 304 responses cost effectively nothing. Watches with five consecutive failures auto-mute. Adaptive backoff applies on 429 and 503.
Models
Both whisper and sherpa-onnx ship as cross-platform fallbacks alongside the macOS-default fluidaudio backend.
MCP integration
nab-mcp is a native Rust MCP server. It runs over stdio (default) or Streamable HTTP. It is not fully compliant with 2026-07-28. A call that does not wait is served on that revision, including fetch, fetch_batch, submit, auth_lookup, fingerprint, validate, benchmark, watch_create, watch_list, and watch_remove. login, analyze, and task are served only when that call would not elicit or sample. A 2026-07-28 call that would elicit or sample returns a JSON-RPC error and does not wait. Sessions, elicitation, sampling, and tasks stay on 2025-11-25. A 2026-07-28 request needs no initialize and no session id. On HTTP that call sends the matching mcp-protocol-version header. On stdio the success or the JSON-RPC error may be the first message. A crates.io build has no SDK patch, so that nab-mcp compiles without the 2026 hook and does not serve 2026-07-28.
Quick setup (recommended)
Also supported: gemini, amazon-q, lm-studio. This auto-detects the nab-mcp binary path, backs up your existing config, and adds the nab entry. Restart your client after installing.
Manual setup
Add to your MCP client configuration (~/.config/claude/mcp.json or equivalent):
HTTP transport
Bind to localhost by default. Origin checks and MCP-Protocol-Version header validation are enforced per spec.
MCP capabilities
Tools
nab-mcp exposes 12 MCP tools:
fetch— Fetch a URL and convert it to clean markdown, with cookies, focus, token budget, and sessionfetch_batch— Fetch multiple URLs in parallel (HTTP/2 multiplexing, task-augmented async execution)submit— Submit a web form with CSRF handling and smart field extractionlogin— Auto-login to a website with 1Password credentials, including TOTP/MFAauth_lookup— Look up 1Password credentials for a URL without exposing the passwordfingerprint— Generate realistic Chrome, Firefox, or Safari browser fingerprint profilesvalidate— Run the validation test suite against real websites (HTTP/2, HTTP/3, TLS 1.3, 1Password)benchmark— Time URL fetches over multiple iterations with min/avg/max statsanalyze— Transcribe and diarize audio/video with multilingual ASRwatch_create— Create a URL watch that emits MCP resource notifications when content changeswatch_list— List active URL watches with their IDs, URLs, and polling statuswatch_remove— Remove a URL watch by ID
Builds compiled with the opt-in task Cargo feature also expose task, an experimental web-task entry that fetches and screens a seed URL and returns the API endpoints it discovers.
Site providers
nab detects URLs for 12 platforms and uses APIs or stable structured page data instead of broad HTML scraping.
If no provider matches, nab falls back to standard HTML fetch + markdown conversion.
Architecture
nab is built around a small set of orthogonal subsystems: cmd/ (CLI), bin/mcp_server/ (MCP server), content/ (HTML / PDF / OCR pipeline), analyze/ (ASR + diarization + vision), watch/ (URL monitoring + subscriptions), auth/ (cookies + 1Password + WebAuthn), site/ (per-site providers), and the shared AcceleratedClient (HTTP/3 + connection pool + fingerprint store).
See:
- docs/ARCHITECTURE.md — full module map and data flow
- docs/sovereign-stack.md — how nab composes with hebb to form a local-first multimodal stack
- docs/getting-started.md — new user onboarding
Design notes
The docs/design/ directory tracks recent design proposals:
- analyze-v2.md — multilingual ASR + diarization + vision pipeline
- url-watch-resources.md — URL watch as MCP subscribable resources
- active-reading.md — active reading via MCP sampling
- mcp-spec-closure.md — closing the last MCP 2025-11-25 spec gaps
Companion tools
nab is half of a sovereign multimodal stack. The other half is hebb, a neuroscience-inspired memory MCP server. Composition examples:
nab analyze --diarize --include-embeddings→hebb voice_match→ speakers labeled with namesnab fetch URL→hebb kv_set→ personal sovereign web memorynab watch add URL→hebb kv_set(on update) → time-series of changes to any web page
See docs/sovereign-stack.md for the full composition story.
Configuration
nab requires no configuration files. It uses smart defaults: auto-detected browser cookies, randomized fingerprints, and markdown output.
Persistent state lives in ~/.nab/:
Optional plugin configuration at ~/.config/nab/plugins.toml. See docs/getting-started.md for plugin examples.
Environment variables
Library usage
Requirements
- Rust 1.95+ for building from source
- ffmpeg for
analyzeandstreamcommands:brew install ffmpeg - 1Password CLI (optional, for credential integration): see 1Password docs
Contributing
See CONTRIBUTING.md for development setup, code style guidelines, testing instructions, and pull request process.
Responsible use
This tool includes browser cookie extraction and fingerprint spoofing capabilities. They are intended for legitimate use cases — accessing your own authenticated content, automated testing, sites where you have authorization. Use responsibly.
Troubleshooting
MCP server not connecting? Run nab-mcp directly in your terminal to see errors. Verify the binary exists with which nab-mcp. If installed via cargo install nab, both nab and nab-mcp should be on your $PATH.
Cookie extraction failing? Grant Full Disk Access to your terminal in System Settings > Privacy & Security > Full Disk Access (macOS). Browser cookies are stored in protected directories. Use --cookies brave to target a specific browser. Background tools that must never show a Keychain authorization dialog can run NAB_KEYCHAIN_INTERACTION=never nab .... Plaintext cookies and credentials that macOS can provide silently still work; credentials that require approval are unavailable, and Nab fails closed instead of invoking a prompt-capable fallback.
ASR model not found? Run nab models fetch fluidaudio to download the model (~542 MB). The model directory is ~/.nab/models/. Use nab models list to see what's installed.
Fetch returning HTML instead of markdown? Some sites block automated access. Try nab fetch URL --cookies brave to use your browser session, or nab fetch URL --1password for sites that need login.
Fetch returning thin content from a JavaScript app? Default nab fetch stays local-first and HTTP-only. For pages that need DOM execution, configure an external CDP endpoint with NAB_BROWSER_CDP_WS or --browser-cdp-url, then run nab browser URL or nab fetch URL --render. Remote browser providers may receive the URL and rendered page content; local browser cookies are not automatically available to remote browsers.
YARA-X guard redacted a fetch? nab fetch and MCP fetch scan returned bodies by default before saving or returning content. NAB_YARA_ACTION=refuse blocks instead of redacting. NAB_YARA_BYPASS=1 is an audited emergency opt-out.
"too many open files" on watch? Increase your ulimit: ulimit -n 4096. The default macOS limit (256) is too low for many concurrent watches.
Ecosystem
nab is part of a suite of MCP tools:
License
nab is dual-licensed as of v0.9.0:
EE-designated paths (every file carries // SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0):
src/auth/— 1Password, WebAuthn, and browser-cookie injection (premium authenticated reach)src/fingerprint/— browser fingerprint spoofing (anti-bot evasion)src/waf/— WAF challenge handlingsrc/site/— per-site provider integrations (proprietary domain knowledge)src/security/— Secure Ingestion guard for stripping machine-targeted HTML directives and hidden metadatacrates/nab-yara-engine/— fetch-time YARA-X signature guard for prompt injection, exfiltration, secrets, and obfuscation
What this means in practice:
- Free for noncommercial use, modification, redistribution.
- Commercial use of EE modules requires a separate commercial license.
- Companies can buy a standard commercial-use license via GitHub Sponsors at EUR 500/month per named project.
- See COMMERCIAL.md for business use, forks, wrappers, shared services, and managed-service deployments.
- All releases prior to v0.9.0 remain entirely MIT and stay MIT forever.
Source: README.md at commit f031e6f
Tools
0Version history
1- v0.12.6LatestOct 25, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts