Nanotoll MCP
Compress prose for LLM context windows. Per-call USDC billing, signed receipt.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"nanotoll-mcp": {
"url": "https://mcp.nanotoll.dev/mcp"
}
}
}Remote endpoints
https://mcp.nanotoll.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (2)
🟡compress(_idempotency_key, squeeze_mode, target_ratio, text)
Compress prose before it enters an LLM context window. Returns the compressed text plus a signed receipt (ratios, refusals, coverage) so the caller can verify what was dropped. Use this instead of truncating or slicing text to fit a budget: truncation drops the tail silently, compression keeps a sentence skeleton and reports what went. Do not use it for source code, config, JSON, diffs or tables - send those verbatim. Very short input (under roughly 2,000 chars) gains little, and verified mode is slower there. To compress a web page, fetch it with the read tool first and compress the markdown it returns, never raw HTML. Prefer deterministic for bulk low-stakes text (free), extractive for ordinary prose, verified when a silently dropped fact would be expensive. Flat per-call price by mode: deterministic free, extractive $0.0008, verified $0.0015 (USDC on Base L2); insufficient credit returns HTTP 402.
Input Schema
{
"type": "object",
"properties": {
"_idempotency_key": {
"description": "Retry safety for the charge. The same key is billed once: a retry after a transport error is not charged again, and the call still runs, so the response is fresh rather than a replayed one. Omit it and a fresh UUID is generated per call, so every call charges. Use one key per distinct payload.",
"type": "string"
},
"squeeze_mode": {
"default": "extractive",
"description": "deterministic = rule-based pruning, no model, free, and it ignores target_ratio. extractive = LLMLingua-class sentence dropping (output is a token skeleton: the reader reconstructs the glue), served from one model session, honours target_ratio. verified = extractive plus a coverage pass; stages can spread over spare model sessions, so with spare capacity it can be faster than extractive on the same input, while with none (pool busy) or on input too short to split (roughly under 2,000 characters) it is slower. Any other value returns HTTP 501.",
"enum": [
"deterministic",
"extractive",
"verified"
],
"type": "string"
},
"target_ratio": {
"description": "Fraction of the ORIGINAL characters to keep, exclusive: 0 or 1 is rejected with HTTP 422. Applied as a pruning cap in extractive and verified - the engine stops pruning once the realized ratio would drop below it - and the receipt's headline.ratio reports what was actually kept, which can be higher. On verified the fidelity gate can keep more than the same hint would in extractive: a failed attempt is retried with less compression and the receipt then shows quality.relax_steps with the pre-retry ratio in quality.relaxed_ratio. Ignored by deterministic, and unreachable on tabular JSON payloads (the receipt then shows l2_skipped=json_reform). Omit to use the calibrated default.",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0,
"type": "number"
},
"text": {
"description": "Prose to compress: articles, docs, transcripts, chat or tool output, long extracted text. Poor fit, send verbatim instead: source code, config, JSON, diffs, tables - forcing them loses or mangles content. Caps are per mode: deterministic 200,000 chars, extractive 40,000 chars (12,500 tokens), verified 20,000 chars (7,000 tokens); over the cap the call returns HTTP 413.",
"minLength": 1,
"type": "string"
}
},
"required": [
"text"
]
}🟢check_balance
Read your own account and cost nothing: credit balance left, the USDC funding address to top up, key tier and expiry, and lifetime usage totals. Takes no arguments and is not billed. Call it after an HTTP 402 from compress to see the shortfall, or before a long batch to confirm credit. It reads the account belonging to the API key in your MCP client config (Authorization: Bearer ...) - that is the balance compress bills against.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Community
Evidence