{
  "markdown": "# ToolDash MCP\n\n**Offline PDF and text tools for AI agents.** An [MCP](https://modelcontextprotocol.io) server that lets Claude Desktop, Cursor, VS Code and any other MCP client merge PDFs, pull out pages, inspect documents and clean up text — entirely on your own machine.\n\nNo upload. No API key. No account. No network call of any kind: the PDF work is done locally by [`pdf-lib`](https://github.com/Hopding/pdf-lib), so a confidential contract never leaves your laptop.\n\n[![Powered by ToolDash](https://img.shields.io/badge/Powered%20by-ToolDash-0f766e)](https://tooldash.app)\n\n---\n\n## Tools\n\n| Tool | What it does | Writes files? |\n| --- | --- | --- |\n| `pdf_info` | Page count, per-page dimensions and metadata of a PDF | No |\n| `merge_pdfs` | Combine two or more PDFs into one, in the given order | Yes |\n| `extract_pdf_pages` | Copy a page selection (`\"1-3,7,10-12\"`) into a new PDF | Yes |\n| `clean_text` | Collapse whitespace, strip invisible characters, normalize punctuation, optionally remove URLs | No |\n\nThe two tools that write files refuse to replace an existing file unless you pass `overwrite: true`, so an agent retrying a call cannot quietly destroy a document.\n\n## Requirements\n\nNode.js 20 or newer.\n\n## Install\n\nNo install step — your MCP client runs it on demand with `npx`. Add the server to your client's config and restart it.\n\n### Claude Desktop\n\nEdit `claude_desktop_config.json`:\n\n- **macOS** — `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows** — `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux** — `~/.config/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"tooldash\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tooldash-mcp\"]\n    }\n  }\n}\n```\n\nRestart Claude Desktop. The tools appear under the tools icon in the chat box.\n\n### Cursor\n\nCreate `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` for every project):\n\n```json\n{\n  \"mcpServers\": {\n    \"tooldash\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tooldash-mcp\"]\n    }\n  }\n}\n```\n\nThen enable the server under **Settings → MCP**.\n\n### VS Code (GitHub Copilot agent mode)\n\nCreate `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"tooldash\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tooldash-mcp\"]\n    }\n  }\n}\n```\n\n### Running from a clone\n\n```bash\ngit clone https://github.com/LassiB999/tooldash-mcp.git\ncd tooldash-mcp\nnpm install\nnpm test\n```\n\nThen point your client at `node /absolute/path/to/tooldash-mcp/server.js` instead of `npx`.\n\nPaths may be absolute, relative to the client's working directory, or start with `~`. Surrounding quotes are stripped, so a path pasted as `\"/home/you/file.pdf\"` still works.\n\n## Restricting file access\n\nThe server reads and writes wherever your user account can. To confine it to one directory, set `TOOLDASH_MCP_ROOT` — any path outside it is refused with a clear error:\n\n```json\n{\n  \"mcpServers\": {\n    \"tooldash\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tooldash-mcp\"],\n      \"env\": { \"TOOLDASH_MCP_ROOT\": \"/home/you/Documents/pdfs\" }\n    }\n  }\n}\n```\n\n## Usage examples\n\nAsk your assistant in plain language — \"merge these two PDFs and put the result on my desktop\" — and it will fill in the calls below. The raw JSON is here for testing.\n\n### `pdf_info`\n\n```json\n{ \"path\": \"/home/you/Documents/report.pdf\" }\n```\n\n```\nreport.pdf: 12 page(s), 248.3 KB. Title: \"Q3 Report\".\n```\n\n### `merge_pdfs`\n\n```json\n{\n  \"inputPaths\": [\"/home/you/Documents/cover.pdf\", \"/home/you/Documents/report.pdf\"],\n  \"outputPath\": \"/home/you/Documents/final.pdf\",\n  \"overwrite\": false\n}\n```\n\n### `extract_pdf_pages`\n\nPages are 1-based. Order is preserved, so `\"3,1-2\"` gives you page 3 first. A descending range like `\"5-1\"` reverses those pages.\n\n```json\n{\n  \"inputPath\": \"/home/you/Documents/report.pdf\",\n  \"pages\": \"1-3,7,10-12\",\n  \"outputPath\": \"/home/you/Documents/excerpt.pdf\"\n}\n```\n\n### `clean_text`\n\n```json\n{\n  \"text\": \"Hello   world  \\r\\n\\r\\n\\r\\n\\r\\nSecond   line   \",\n  \"collapseBlankLines\": true,\n  \"normalizeQuotes\": false,\n  \"removeUrls\": false\n}\n```\n\n`removeUrls` strips **every** http/https URL. The server is offline, so it cannot tell a working link from a dead one — it does not pretend to.\n\n## How it handles failure\n\nBad input comes back as a readable error result the model can act on, never as a crash: a missing file, a password-protected PDF, a page number past the end of the document, or an output path that already exists each produce a message saying what to do next. The server keeps running.\n\nDiagnostics go to `stderr` only. `stdout` carries protocol frames and nothing else — the tests would fail if anything leaked into it.\n\n## Development\n\n```bash\nnpm test                # 15 end-to-end tests: a real MCP client over stdio, on real PDFs\nnpm run inspect         # open the MCP Inspector against this server\n```\n\n## Powered by [ToolDash](https://tooldash.app)\n\nToolDash is a set of free, browser-based utilities — PDF, text, image, colour, developer and calculator tools — that run entirely in your tab with nothing uploaded. This server brings the same idea to your editor.\n\n- **[tooldash.app](https://tooldash.app)** — the full tool collection\n- **[PDF Factory](https://pdffactory.pages.dev)** — the browser PDF studio these PDF tools mirror\n- **[Al-Katib](https://katib.tooldash.app)** — Arabic keyboard and writing pad\n\n## License\n\nMIT\n",
  "bytes": 5390,
  "sha": "be317b9c47b1140e2667934144110f9ac164dcbaa3503fd73b8b29b421bc57a8",
  "repo_slug": "lassib999/tooldash-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lassib999_tooldash_mcp_24dfad4d/readme"
}