Skip to main content
Glama
README.md
# S3eidat Tools MCP

**The free, private [S3eidat Tools](https://s3eidat.github.io/) as tools your AI assistant can use.**
PDF, images, text, developer chores, calculators, QR codes and document makers, served by a local
[MCP](https://modelcontextprotocol.io) server. It runs on your own machine: **your files are never uploaded anywhere**,
there is no account, no API key and no telemetry.

Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Codex, Gemini CLI and any other MCP client.

```bash
npx -y s3eidat-tools-mcp
```

Docs site: https://s3eidat.github.io/s3eidat-tools-mcp/ · Tool reference: [docs/tools.md](docs/tools.md) · Skill: [skills/](skills/)

## What you can ask

- "Merge these three PDFs, compress the result and add page numbers."
- "Turn every photo in ~/Desktop/receipts into one PDF."
- "Resize this image to 1200 px wide as WebP and strip the GPS data."
- "Format this JSON and convert it to YAML." · "What does this cron expression mean?"
- "Monthly payment on a 250,000 loan at 5.2% over 25 years?" · "Prayer times in Amman tomorrow."
- "Make a QR code for my Wi-Fi." · "Make an invoice PDF for these items."

## Install

You need [Node.js](https://nodejs.org) 20.19 or newer (22+ recommended). The first run downloads the package; later runs start instantly.

### Claude Code

```bash
claude mcp add s3eidat -s user -- npx -y s3eidat-tools-mcp
```

### Claude Desktop

**One click:** download the `.mcpb` file for your computer from the
[latest release](https://github.com/s3eidat/s3eidat-tools-mcp/releases/latest) and double-click it (or drag it into
Settings → Extensions). It includes everything, so you don't even need Node.js. You can pick an allowed folder and an
output folder in the extension's settings.

**Or by hand:** Settings → Developer → Edit Config, then add to `claude_desktop_config.json` and restart Claude:

```json
{
  "mcpServers": {
    "s3eidat": {
      "command": "npx",
      "args": ["-y", "s3eidat-tools-mcp"]
    }
  }
}
```

On Windows, if Claude can't find `npx`, use `"command": "cmd"` and `"args": ["/c", "npx", "-y", "s3eidat-tools-mcp"]`.

### Cursor

`~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):

```json
{
  "mcpServers": {
    "s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
  }
}
```

### VS Code (Copilot agent mode)

```bash
code --add-mcp '{"name":"s3eidat","command":"npx","args":["-y","s3eidat-tools-mcp"]}'
```

or `.vscode/mcp.json` in a workspace:

```json
{
  "servers": {
    "s3eidat": { "type": "stdio", "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
  }
}
```

### Windsurf

`~/.codeium/windsurf/mcp_config.json`:

```json
{
  "mcpServers": {
    "s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
  }
}
```

### Codex CLI

```bash
codex mcp add s3eidat -- npx -y s3eidat-tools-mcp
```

### Gemini CLI

`~/.gemini/settings.json`:

```json
{
  "mcpServers": {
    "s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
  }
}
```

### Any other client (Streamable HTTP)

```bash
npx -y s3eidat-tools-mcp --http --port 8787
```

Then point the client at `http://127.0.0.1:8787/mcp`. It only listens on your own machine unless you pass `--host`.
Hosted chat apps (ChatGPT, claude.ai) can only reach servers on the public internet; exposing this server there would
expose your files, so use a desktop/CLI client instead.

## Options

| Option | What it does |
|---|---|
| `--root <dir>` | Only allow reading and writing files inside `<dir>` (recommended for shared machines). |
| `--out-dir <dir>` | Where outputs go when a tool call gives no `output` path (default: a temp folder). |
| `--max-mb <n>` | Largest input file in MB (default 200). |
| `--groups pdf,image` | Only expose these groups: `pdf`, `image`, `text`, `data`, `dev`, `calc`, `everyday`, `qr`, `docs`, `ai`. |
| `--compact` | Expose 3 small meta-tools (`s3eidat_find_tools`, `s3eidat_tool_info`, `s3eidat_run_tool`) instead of every tool. |
| `--only pdf_,image_` | Only expose tools whose names start with these prefixes. |
| `--output-schemas` | Also advertise each tool's output JSON Schema (results always include structured JSON either way). |
| `--http`, `--port`, `--host` | Serve Streamable HTTP instead of stdio. |
| `--list` | Print every tool and exit. |

Example: `"args": ["-y", "s3eidat-tools-mcp", "--root", "/Users/me/Documents"]`.

### Many tools, small context?

The full list is about 140 tools, roughly 65k tokens of tool definitions. Clients with tool search (Claude Code) handle
that well. If your client has a tool limit (Cursor, Windsurf) or you use a small model, either pick groups
(`--groups pdf,image` is about 17k tokens) or use `--compact` (about 600 tokens): the model then searches for a tool,
reads its inputs and runs it through three meta-tools.

```json
{ "mcpServers": { "s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp", "--compact"] } } }
```

## How files work

- **Inputs** take a local path (absolute, `~/…`, or relative to `--root`) or base64 (raw, `base64:…`, or a `data:` URI).
- **Outputs** are written to the `output` you give (a file path, or a folder ending in `/`), or to the output folder.
  Results return the path and small metadata, not big base64 blobs (set `returnBase64` where offered if you need the bytes).
- Chain tools by passing one result's `path` to the next tool: `pdf_from_images` → `pdf_compress` → `pdf_page_numbers`.

## Tools

<!-- tools:start -->
**162 tools.** Full reference: [docs/tools.md](docs/tools.md).

| Group | Count | Tools |
|---|---|---|
| PDF | 17 | `pdf_compress`, `pdf_extract_pages`, `pdf_form_fields`, `pdf_form_fill`, `pdf_from_images`, `pdf_info`, `pdf_merge`, `pdf_metadata_read`, `pdf_metadata_write`, `pdf_organize`, `pdf_page_numbers`, `pdf_rotate`, `pdf_sign_image`, `pdf_split`, `pdf_to_images`, `pdf_to_text`, `pdf_watermark` |
| Images | 16 | `image_ascii_art`, `image_ascii_banner`, `image_compress`, `image_convert`, `image_crop`, `image_exif_read`, `image_exif_strip`, `image_favicon_set`, `image_from_base64`, `image_palette`, `image_placeholder`, `image_resize`, `image_rotate`, `image_svg_to_png`, `image_to_base64`, `image_watermark` |
| Text | 15 | `text_arabic`, `text_case`, `text_citation`, `text_clean`, `text_diff`, `text_escape`, `text_fancy`, `text_layout_fix`, `text_lorem`, `text_morse`, `text_number_to_words`, `text_readability`, `text_slugify`, `text_social_count`, `text_word_count` |
| Developer: data formats | 15 | `css_format`, `csv_to_json`, `curl_to_code`, `html_format`, `json_format`, `json_query`, `json_to_csv`, `json_to_types`, `json_to_yaml`, `markdown_table`, `markdown_table_parse`, `sql_format`, `xml_format`, `xml_query`, `yaml_to_json` |
| Developer: utilities | 23 | `base_convert`, `base64_decode`, `base64_encode`, `bytes_convert`, `chmod_calc`, `cron_explain`, `css_clamp`, `css_units`, `gitignore_generate`, `hash_compute`, `http_status`, `id_generate`, `id_inspect`, `ip_in_range`, `jwt_decode`, `meta_tags_generate`, `regex_test`, `subnet_calc`, `time_convert`, `url_decode`, `url_encode`, `url_parse`, `useragent_parse` |
| Calculators | 24 | `calc_age`, `calc_bmi`, `calc_cash_count`, `calc_compound_interest`, `calc_date_diff`, `calc_discount`, `calc_due_date`, `calc_equation`, `calc_expression`, `calc_fraction`, `calc_fuel_cost`, `calc_gpa`, `calc_hijri`, `calc_hours`, `calc_loan`, `calc_percentage`, `calc_primes`, `calc_roman`, `calc_salary`, `calc_sleep`, `calc_split_bill`, `calc_stats`, `calc_unit_convert`, `calc_zakat` |
| Everyday & security | 15 | `crypto_file_decrypt`, `crypto_file_encrypt`, `crypto_stego_hide`, `crypto_stego_reveal`, `crypto_text_decrypt`, `crypto_text_encrypt`, `password_check`, `password_generate`, `prayer_times`, `qibla_direction`, `random_dice`, `random_pick`, `random_teams`, `secret_santa_draw`, `time_world_clock` |
| QR & barcodes | 4 | `barcode_generate`, `qr_generate`, `qr_read`, `qr_wifi` |
| Document makers | 7 | `doc_attendance_sheet`, `doc_business_cards`, `doc_calendar`, `doc_invoice`, `doc_labels`, `doc_receipt`, `doc_resume` |
| For AI agents | 26 | `ai_chart`, `ai_chunk_text`, `ai_create_pptx`, `ai_create_xlsx`, `ai_csv_profile`, `ai_detect_language`, `ai_diagram`, `ai_docx_to_markdown`, `ai_extract_entities`, `ai_file_identify`, `ai_html_to_markdown`, `ai_image_diff`, `ai_json_schema_infer`, `ai_json_schema_validate`, `ai_markdown_to_docx`, `ai_markdown_to_pdf`, `ai_media_info`, `ai_ocr`, `ai_pdf_to_markdown`, `ai_pptx_to_markdown`, `ai_sql_query`, `ai_text_similarity`, `ai_token_count`, `ai_web_fetch`, `ai_xlsx_to_markdown`, `ai_zip` |
<!-- tools:end -->

Every tool's description links the matching web tool on https://s3eidat.github.io for people who prefer a visual version.

## The skill

[`skills/s3eidat-tools`](skills/s3eidat-tools/SKILL.md) teaches an AI which tool fits which job, how to chain them and
when to send a person to the web tool instead. Install steps: [skills/README.md](skills/README.md).

## Privacy

Everything runs locally in the Node process on your machine. The website ports make no network requests at all. A few
tools in the "For AI agents" group (such as fetching a web page as Markdown) do use the network; they are marked with
`openWorldHint` so your client can ask before running them. No analytics, no telemetry, no accounts.

## Support

The tools are free. If they save you time, [buy me a coffee ☕](https://s3eidat.github.io/coffee/). Want an AI that
reads your PDFs, writes and translates? Try [s3eidatGPT](https://ai.s3eidat.com/?ref=s3tools-mcp).

## Development

```bash
npm ci
npm test          # builds, runs known-answer tests for every tool and an MCP round trip
npm run docs      # regenerates docs/tools.md, docs/*.html, docs/llms.txt
npm run smoke     # drives the built server over MCP stdio
npm run mcpb      # builds a Claude Desktop extension for this platform into mcpb/out/
node dist/index.js --list
npx @modelcontextprotocol/inspector node dist/index.js
```

Adding a tool: one file in `src/tools/<group>/…/<slug>.ts` whose default export is `defineTool({...})` from
[`src/registry.ts`](src/registry.ts) (the contract is documented at the top of that file). It is discovered
automatically. Add a known-answer test in `test/`. Releasing: [RELEASING.md](RELEASING.md).

## License

MIT © Omar (s3eidat)

TDQS

A3.5/5.0

Scored across 162 tools

Disambiguation3/5

Most tools target distinct operations, but the large surface creates real overlap clusters: base64_decode vs image_from_base64, image_convert vs image_svg_to_png, image_resize vs image_crop, and pdf_split vs pdf_extract_pages vs pdf_organize. The detailed descriptions help resolve these, but an agent must still carefully compare several similar tools before choosing.

Naming Consistency4/5

Names consistently use snake_case with a category prefix (ai_, pdf_, image_, text_, calc_, json_, etc.) and readable action/resource suffixes. There is some variation between verb-first and noun-first forms (pdf_merge vs pdf_page_numbers, image_resize vs image_palette), but the pattern remains predictable overall.

Tool Count1/5

162 tools is far beyond a well-scoped MCP surface; even for a broad utility suite, this volume imposes a heavy selection and context burden on an agent. Many individual tools are justified, but the overall set is excessively large rather than appropriately bounded.

Completeness4/5

Coverage is unusually broad across PDFs, images, documents, text, JSON/XML/YAML, calculators, crypto, QR/barcodes, and developer utilities, with most workflows having multiple supporting operations. Minor gaps remain, such as audio/video transformation or generic file-system operations, but core domains are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues