analog-mcp
A Model Context Protocol server for Analog — Analog lets any AI understand websites as code — usable from Claude Desktop, Cursor, and anything else that speaks MCP. The perception layer for LLMs: webpages in, structured records out. Deterministic, zero-shot, honest. The extraction pipeline contains no LLMs.
Pages are fetched on your machine by default. The SDK uses a local headless
browser, which visits as an unauthenticated user by default. For structured
extraction, the SDK sends the URL and rendered page content to Analog. Results
return to the SDK and are saved locally unless disabled. Authenticated content
is sent only when you explicitly provide it through html= or a custom
fetcher. mode="local" is the Markdown-only path that sends nothing.
This server is Analog for MCP clients. Agents with shell access can
use the analog command-line app
directly — the same extraction and saved-result workflow as shell
commands, no configuration required.
The headline tool is analog(url). Point it at a webpage; get back a bounded
receipt with section shapes, representative records, completeness disclosures,
and a handle for the saved result. Its JSON text fallback never exceeds 16,384
characters; structured content carries the same receipt.
Tools
analog(url, pages=N)— extract a page; returns a bounded orientation receipt plus ahandle. Passpages=N(max 50) to follow the site's own next-page links and merge up to N pages into one result (each page costs one extraction; the sweep is disclosed on the response).assess(url)— check which tool fits a page for your task: the page's measured markdown size plus task-keyed guidance (working with the data → analog; one quick question → read it directly; a platform data feed spotted → worth knowing), so you route a page without spending an extraction. No sign-in required.analog_history(limit=N)— list saved results, newest first, as cheap metadata (handle, url, when saved, size) to recover a handle you no longer have in context.analog_open(handle)— return a previous result in full, no re-fetch.analog_export(handle, fmt)— re-emit it asjson/csv/yaml/md.analog_section(handle, index)— pull one section's records.analog_collection(handle, index)— query compatible physical sections as one identity-deduplicated records view while retaining their provenance.analog_find(handle, pattern, field=)— search a result's records across sections; passfield=to scope the search to one field.analog_describe(handle)— a token-cheap preview of a saved result (section shapes plus sample records) for orienting without pulling the full JSON.analog_feedback(...)— report a page that extracted poorly (reason labels are enumerated in the tool's schema) or send a free-form feature request.
Every analog result is saved locally, so the analog_* tools re-slice it
without re-fetching or re-rendering the page.
JSON-shaped tools expose navigable MCP structured content and an equivalent text fallback. Format exports, previews, and feedback confirmations remain text-only.
Install
The server reads the credential stored by the analog CLI (it ships
with analog-sdk), so install both tools:
uv tool install analog-sdk
uv tool install analog-mcp
Prefer pip? pip install analog-mcp in one environment puts both
executables on PATH. uvx analog-mcp runs the server one-off, but
signing in still needs the CLI installed.
Sign in
Connect a new account:
analog signup
Or connect an existing account:
analog login
This opens your browser, signs you in, and stores the key in the
CLI's local credential store — analog-mcp reads it from there, so no
key ever lands in an MCP config file.
Analog renders pages with a built-in headless browser that downloads on
first use (~150 MB, one-time). To fetch it ahead of time so the first
analog tool call doesn't pause:
analog browser install
Configure your MCP client
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"analog": {
"command": "analog-mcp"
}
}
}
Restart Claude Desktop. The analog tool will appear in the tool list.
No env block is needed — analog-mcp reads the credential you stored
during sign-in.
Cursor / other MCP clients
Same idea — the server command is analog-mcp and it speaks stdio.
Refer to your client's MCP configuration docs for the exact file
location.
Usage
Once configured, just ask the agent things like:
Extract the speakers from https://example-conference.com/2026
The agent calls analog(url=…) under the hood. The tool returns
a bounded receipt with representative records and a saved-result handle.
The agent can answer from that receipt or use the handle to request the
complete result, one section, a search, or another format without fetching
the page again.
Full documentation: https://getanalog.io/docs
What this version ships
analog-mcp exposes the extraction tool analog(url), a local routing
check assess(url), and the analog_* re-slice tools, over the stdio
transport.
License
MIT — see LICENSE.
Links
- Homepage: https://getanalog.io
- Command-line app and Python SDK:
analog-sdkon PyPI
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file analog_mcp-0.10.0.tar.gz.
File metadata
- Download URL: analog_mcp-0.10.0.tar.gz
- Upload date:
- Size: 45.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6579c88944e112cab4be9066fb921891bf569182d7665314096567506ea8b69
|
|
| MD5 |
514eba0cb30cd20db3ddf242cb6f1359
|
|
| BLAKE2b-256 |
d4fd51551b19065a48bc774d91f9ac6c045b8c68e0e6768aea54e108fde2b78d
|
Provenance
The following attestation bundles were made for analog_mcp-0.10.0.tar.gz:
Publisher:
release-mcp-python.yml on getanalog/monorepo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
analog_mcp-0.10.0.tar.gz -
Subject digest:
c6579c88944e112cab4be9066fb921891bf569182d7665314096567506ea8b69 - Sigstore transparency entry: 2524313994
- Sigstore integration time:
-
Permalink:
getanalog/monorepo@436e6abeec09887b33d1c36611dab4375f15466b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/getanalog
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-mcp-python.yml@436e6abeec09887b33d1c36611dab4375f15466b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file analog_mcp-0.10.0-py3-none-any.whl.
File metadata
- Download URL: analog_mcp-0.10.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b087d578611e7dab71e573ce74039251607873670ec4aa14773ac24728f30d3
|
|
| MD5 |
70817d39acabb131181e25b5314bf460
|
|
| BLAKE2b-256 |
fc245d8838af0e742e04864d939ccec372c13bde1d8a44839b05232ec6c60750
|
Provenance
The following attestation bundles were made for analog_mcp-0.10.0-py3-none-any.whl:
Publisher:
release-mcp-python.yml on getanalog/monorepo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
analog_mcp-0.10.0-py3-none-any.whl -
Subject digest:
3b087d578611e7dab71e573ce74039251607873670ec4aa14773ac24728f30d3 - Sigstore transparency entry: 2524314799
- Sigstore integration time:
-
Permalink:
getanalog/monorepo@436e6abeec09887b33d1c36611dab4375f15466b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/getanalog
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-mcp-python.yml@436e6abeec09887b33d1c36611dab4375f15466b -
Trigger Event:
workflow_dispatch
-
Statement type: