S3eidat Tools
NPM · S3EIDAT-TOOLS-MCP
Free, private PDF, image, text, developer, calculator and QR tools. Runs locally; no uploads.
Available components
Last scanned (21 hours ago)
Scores higher than 31% of npm servers
Category Documents and Files
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security88
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects image-size 1.2.1, reached via pptxgenjs > image-size. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- Dependency health was assessed across the 400 of 513 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 4 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability58
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 49482 tokens (~305/item across 162 items; 162 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 98% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "image_exif_strip" implies "remove" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 163 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 31 Oct 26 +15
- CVE-2026-118764 affects this package: high ▼ security
- Malware scan: unverified → pass ▲ security
- 30 Oct 26 47
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed npm/s3eidat-tools-mcp@0.1.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 4 findings
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-5p2g-fcmc-qvqq | CVE-2025-71329 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
| GHSA-w3rx-r6r6-pgpr | CVE-2025-71330 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
| GHSA-g3hv-75wg-m249 | CVE-2026-118764 | medium | yes | |
| GHSA-w5hq-g745-h8pq | CVE-2026-41907 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 400 packages
| Packages resolved | 400 |
|---|---|
| Deprecated | 6 |
| Stale | 116 |
| No linked repository | 1 |
| Tree resolution | Partial |
The dependency tree was only partially resolved, so these counts may be incomplete.
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ai_chart Chart to SVG/PNG ~457
Render a chart to an SVG or PNG file, offline. Either give a simple description ({ type: bar|line|area|pie|scatter, data: rows, x, y, color?, title? }; y may be a list of fields for multi-series line/bar charts), or a full Vega-Lite (or Vega) spec in "spec" with the rows inline in data.values. Field types are inferred (numbers = quantitative, ISO dates = temporal, other = categories). Loading data or images from URLs or files is refused. Up to 50,000 rows. PNG is rasterised from the SVG at "scale" (default 2×).
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Background colour. Default white; "transparent" for none. |
| color | string | – | Optional field that splits the data into coloured series. |
| data | array | – | Rows for the simple chart, e.g. [{"month":"Jan","sales":12}]. |
| format | string | – | Output format: svg (default) or png. |
| height | integer | – | Plot height in px (default 360). |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| scale | number | – | PNG only: pixel density multiplier (2 = twice the SVG size, sharp on high-DPI screens). Default 2. |
| spec | object | – | A full Vega-Lite spec (or Vega, if its $schema says so). Data must be inline (data.values). Use this or "type". |
| title | string | – | – |
| type | string | – | Simple chart type. Use with data, x and y. |
| width | integer | – | Plot width in px (default 600; pie 360). |
| x | string | – | Field for the x axis (the category / slice label for pie). |
| y | – | – | Numeric field for the y axis (slice size for pie). A list of fields draws one series per field. |
No output schema declared.
No examples provided.
ai_chunk_text Chunk text for RAG ~437
Split text, markdown or a text file into token-sized chunks for retrieval (RAG) and embeddings. Splits at markdown headings (ATX "#" headings, never inside code fences) and paragraphs first, then sentences (lines inside code blocks), and only cuts mid-sentence when a single sentence is longer than maxTokens. Consecutive chunks of the same section share about overlapTokens of text. Each chunk returns index, text, tokens, startChar/endChar (JavaScript string offsets, end exclusive, so text === source.slice(startChar, endChar) once CRLF line endings are normalised to \n) and the heading path it sits under. Tokens are counted with tiktoken (o200k_base by default; for Claude treat counts as estimates). Give "text" or "path" (file path or base64); give "output" to also write the chunks as JSONL (one JSON object per line).
| Name | Type | Req | Description |
|---|---|---|---|
| encoding | string | – | Tokenizer: "o200k_base" (GPT-4o / o-series, default) or "cl100k_base" (GPT-4 / GPT-3.5 / text-embedding-3). |
| includeText | boolean | – | Return each chunk's text inline. Default: true, or false when "output" is given. |
| markdown | boolean | – | Treat "#" lines as section headings (default true). Set false for plain text. |
| maxChunks | integer | – | Most chunks to return inline (the JSONL file always has all). Default 2000. |
| maxTokens | integer | – | Largest chunk, in tokens. Default 500. |
| output | string | – | Also write the chunks as JSONL to this file (or folder ending in "/"). |
| overlapTokens | integer | – | Tokens repeated from the end of the previous chunk (same section only). Default 50. Must be below maxTokens. |
| path | string | – | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). |
| text | string | – | The text (inline). |
No output schema declared.
No examples provided.
ai_create_pptx Create a PowerPoint deck ~276
Build a 16:9 PowerPoint (.pptx) deck from a simple outline: an optional title slide, then slides with a title plus any of bullets (nested), a paragraph, an image (file path or base64), a table (first row = header; long tables continue on extra slides), a native editable chart (bar, line, pie) and speaker notes. Light or dark theme with clean, readable defaults; text plus a visual are laid out side by side. Arabic/Hebrew text is set right-to-left. Up to 300 slides. Opens in PowerPoint, Keynote, Google Slides and LibreOffice.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | – |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| slideNumbers | boolean | – | Show slide numbers on content slides. Default true. |
| slides | array | yes | – |
| subtitle | string | – | Subtitle on the title slide. |
| theme | string | – | – |
| title | string | – | Deck title: adds a title slide and sets the file title. |
No output schema declared.
No examples provided.
ai_create_xlsx Create an Excel workbook (.xlsx) ~339
Build a real Excel .xlsx file from data: one or more sheets, each with optional column definitions (header, key, width, numFmt) and rows given as objects or arrays. Bold shaded header, frozen header row and filter buttons (both on by default), column widths fitted to the content, Excel number formats (raw codes like "#,##0.00" or aliases: integer, number, percent, currency, usd, eur, gbp, date, datetime, time, text), strings starting with "=" written as live formulas (=SUM(B2:B9), =B2*C2, cross-sheet refs), ISO date strings written as real dates, and an optional totals row (SUM/AVERAGE/COUNT/MIN/MAX formulas). Up to 50 sheets and 1,000,000 rows per sheet. Formulas are calculated by Excel when the file is opened. Writes to "output" (default "workbook.xlsx" in the output folder) and returns the path and a summary of each sheet.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Author in the file properties. |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| parseDates | boolean | – | Write ISO date strings as Excel dates (default true). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| sheets | array | yes | – |
| title | string | – | Workbook title (file properties, and the default file name). |
No output schema declared.
No examples provided.
ai_csv_profile Profile a table (CSV, JSON, XLSX) ~326
Profile a table to understand and clean it before analysis: row and column counts, and per column the inferred type (integer, number, boolean, date, datetime, string), non-null and null counts, unique count, top 5 values, sample values, min/max/mean/median/stddev for numbers, min/max for ISO dates, min/max length for text, plus data-quality warnings (mixed types, leading/trailing spaces, mostly missing, constant columns, duplicate rows, ragged headers). Input: "file" (local path or base64 of CSV, TSV, JSON array, JSONL or .xlsx, first sheet or "sheet") or inline "csv" / "json". Empty cells, "null" and "NULL" count as missing. Runs locally; nothing is uploaded.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | – | Only profile these columns (default: all). |
| csv | string | – | Or: CSV/TSV text inline (delimiter detected; first row is the header). |
| file | string | – | A table file: local path (absolute, or relative to --root) or base64. CSV, TSV, JSON array, JSONL or .xlsx. |
| format | string | – | Force the file format (default "auto": by extension, then by content). |
| json | – | – | Or: JSON inline: an array of objects (or of arrays, first one the header), as a value or as JSON/JSONL text. |
| sheet | string | – | For .xlsx: the sheet name to read (default: the first sheet). |
No output schema declared.
No examples provided.
ai_detect_language Detect language ~250
Detect the language of a text with franc-min (82 languages with 8M+ speakers, ISO 639-3 codes) and the writing systems it uses (Latin, Arabic, Cyrillic, Han/CJK, Hangul, Devanagari, Greek, Hebrew, Thai…). Returns the top 3 candidates with scores (1 = best match, relative to the others), English names and ISO 639-1 codes where they exist, plus a share per script. Texts under 20 characters are "too short": only the script is reported. Works best on a sentence or more of one language; for mixed text the dominant script wins; long texts are judged on their first 100,000 characters. Hebrew is not among the languages (script only). Give "text" or "path" (file path or base64).
| Name | Type | Req | Description |
|---|---|---|---|
| only | array | – | Restrict to these ISO 639-3 codes (e.g. ["arb","eng","fra"]). |
| path | string | – | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). |
| text | string | – | The text (inline). |
No output schema declared.
No examples provided.
ai_diagram Diagram to SVG/PNG ~392
Draw a flowchart / graph diagram from a tiny text language and save it as SVG or PNG, laid out automatically (dagre). One statement per line: `direction: LR` (TB, LR, BT, RL), `title: My flow`, `A [shape=diamond, label="Ready?", color=#fde68a]` (shapes: box, round, diamond, circle, ellipse), edges `A -> B: label`, chains `A -> B -> C`, `-->` dashed, `==>` thick, `<->` both ends, `--` no arrow; quote names with spaces ("Start here" -> A); `\n` in labels breaks lines; # starts a comment. Or pass JSON { nodes: [{id, label, shape, color}], edges: [{from, to, label, style, arrow}] } as "graph". Up to 500 nodes and 2000 edges. Labels use Helvetica/Arial metrics (Latin text is measured best).
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | Override the layout direction: TB (top-bottom, default), LR, BT, RL. |
| format | string | – | Output format: svg (default) or png. |
| graph | object | – | The diagram as JSON instead of "source". |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| scale | number | – | PNG only: pixel density multiplier (2 = twice the SVG size, sharp on high-DPI screens). Default 2. |
| source | string | – | Diagram text in the DSL (or a JSON graph as text). |
| theme | string | – | – |
No output schema declared.
No examples provided.
ai_docx_to_markdown Word (.docx) to Markdown ~266
Convert a Word .docx document to Markdown: headings (from Heading styles), bold/italic, lists, links, tables, footnotes. Images become placeholders like  unless embedImages is true (then data: URIs, which can be very large). Returns the number of conversion warnings (unrecognised styles and the like) and the first few messages. Old binary .doc files are not supported. Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file. Runs locally; nothing is uploaded.
| Name | Type | Req | Description |
|---|---|---|---|
| embedImages | boolean | – | Embed images as base64 data: URIs instead of placeholders. Default false. |
| file | string | yes | The .docx document: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
No output schema declared.
No examples provided.
ai_extract_entities Extract entities ~382
Pull structured items out of text or a text file, deduplicated with counts: emails, URLs, phone numbers (libphonenumber, validated, E.164 plus type/country; local numbers read with defaultRegion, default JO), dates (ISO, D/M/Y or M/D/Y, Y/M/D, English month names; normalised to YYYY-MM-DD; a date like 03/04/2024 is flagged ambiguous with the other reading), money ($, €, £, JOD/JD/د.أ, SAR/ر.س, AED/د.إ, KWD, EGP… and Arabic currency words, with amount and ISO currency), percentages, #hashtags, @mentions, IPv4/IPv6, IBANs (country length and mod-97 checked) and card-like numbers (only Luhn-valid ones with a known brand prefix, always masked: only the last 4 digits are shown, the full number is never returned). Arabic-Indic digits are understood. Regex-based, not NLP: no names, places or organisations. Give "text" or "path" (file path or base64).
| Name | Type | Req | Description |
|---|---|---|---|
| defaultRegion | string | – | Two-letter country for local phone numbers, regional currencies (dinar, riyal…) and D/M/Y vs M/D/Y. Default JO. |
| maxPerType | integer | – | Most unique items to return per type. Default 500. |
| path | string | – | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). |
| text | string | – | The text (inline). |
| types | array | – | Only these types (default all): emails, urls, phones, dates, money, percentages, hashtags, mentions, ipv4, ipv6, ibans, cards. |
No output schema declared.
No examples provided.
ai_file_identify Identify a file type ~204
Find out what a file really is from its content (magic bytes, via file-type: images, video, audio, archives, Office, PDF, fonts, executables… ~150 formats), not its name. Reports the detected type and MIME, whether the extension disagrees with the content, size, SHA-256, and for text files an encoding guess (UTF-8, UTF-8/16/32 with BOM, UTF-16 without BOM, ASCII, 8-bit legacy) plus a text kind (JSON, XML, SVG, HTML…). Accepts a file path or base64. Nothing is executed.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | yes | The file to identify: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| name | string | – | File name to compare the extension against (handy for base64 input). Default: the path's own name. |
No output schema declared.
No examples provided.
ai_html_to_markdown HTML to Markdown ~356
Convert HTML to clean Markdown for reading or feeding to a model: headings, lists, links, images, code blocks, GitHub-style tables and strikethrough. Give the HTML inline ("html") or as a file ("path": local path or base64). Optional "readable" keeps only the main article (Mozilla Readability, falls back to the whole body), "selector" converts only matching elements, "baseUrl" makes relative links absolute, "includeLinks": false drops link URLs and images. Scripts, styles and forms are removed. Inline Markdown is cut at maxChars (default 200k) with a note; give "output" to save the whole thing to a .md file. Runs locally; nothing is uploaded.
| Name | Type | Req | Description |
|---|---|---|---|
| baseUrl | string | – | URL the HTML came from, to make relative links and images absolute. |
| html | string | – | The HTML text. Give this or "path". |
| includeLinks | boolean | – | Keep links and images. False turns links into plain text and drops images. |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
| path | string | – | An .html file instead of "html": local path or base64. |
| readable | boolean | – | Keep only the main content (article text), dropping navigation, ads and footers. |
| selector | string | – | CSS selector: convert only the matching elements (e.g. "main", "article .post"). |
No output schema declared.
No examples provided.
ai_image_diff Compare two images ~329
Compare two images pixel by pixel (pixelmatch, anti-aliasing aware) and write a diff PNG with changed pixels in red over a faded copy of the first image. Returns the number and percentage of different pixels. Images must be the same size unless resize is true (the second is stretched to the first's size). Reads PNG, JPEG, WebP, AVIF, GIF (first frame), TIFF and SVG; file path or base64; up to 50 MP. Good for visual regression checks.
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | yes | The first (reference) image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| b | string | yes | The second image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| includeAA | boolean | – | Count anti-aliased edge pixels as differences too. Default false. |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| resize | boolean | – | Resize the second image to the first one's size when they differ (otherwise that is an error). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| threshold | number | – | Colour difference tolerance 0..1; smaller is stricter. Default 0.1. |
No output schema declared.
No examples provided.
ai_json_schema_infer Infer a JSON Schema from samples ~398
Generate a JSON Schema (draft 2020-12) from one or more sample JSON values: types (integer vs number, mixed types as a type list), "null" added where a value can be null, required = keys present in every sample object, array items merged across all elements, string formats guessed when every sample matches (date-time, date, email, uri, uuid), and optional enums for small repeated string sets. Give "samples" (an array of sample values), or "text" (JSON, or JSONL = one sample per line), or "file" (path or base64 of a .json/.jsonl file). An array sample describes an array; to treat its elements as separate samples set eachItem. Pure local code; optionally writes the schema to "output".
| Name | Type | Req | Description |
|---|---|---|---|
| additionalProperties | boolean | – | false adds additionalProperties: false to every object (strict). Default true (left open). |
| eachItem | boolean | – | If the only sample is an array, use its elements as the samples (schema of one record). Default false. |
| enums | boolean | – | Emit "enum" for string fields with few distinct values that repeat. Default false. |
| file | string | – | Or: a .json/.jsonl file (local path or base64). |
| formats | boolean | – | Guess string formats (default true). |
| maxEnumValues | integer | – | Largest string set turned into an enum (default 8). |
| output | string | – | Optional: also write the schema as a .json file here. |
| required | boolean | – | List keys present in every sample as "required" (default true). |
| samples | array | – | Sample values; each element is one sample. |
| text | string | – | Or: JSON text (one sample) or JSONL (one sample per line). |
| title | string | – | Optional "title" for the schema. |
No output schema declared.
No examples provided.
ai_json_schema_validate Validate JSON against a JSON Schema ~301
Validate JSON data against a JSON Schema with Ajv, reporting every error (allErrors) with its instancePath (JSON Pointer), schemaPath, keyword, message and params. Draft 2020-12 is used when the schema's $schema says 2020-12 (2019-09 likewise), otherwise draft-07 (draft-04/06 schemas are checked as draft-07). Formats checked: date, time, date-time, email, hostname, ipv4, ipv6, uri, uri-reference, uuid, regex, json-pointer (other formats are ignored and listed). Data: inline "data" (any JSON value), "dataText" (JSON text) or "dataFile" (path or base64). Schema: inline "schema" (object or JSON text) or "schemaFile". Remote $ref URLs are never fetched. Runs locally.
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | The JSON value to validate, inline (a string here is validated as a string; use dataText for JSON text). |
| dataFile | string | – | Or: a JSON file (local path or base64). |
| dataText | string | – | Or: the data as JSON text. |
| maxErrors | integer | – | Most errors to return (default 100). |
| schema | – | – | The JSON Schema inline: an object (or JSON text). |
| schemaFile | string | – | Or: a JSON Schema file (local path or base64). |
No output schema declared.
No examples provided.
ai_markdown_to_docx Markdown to Word (.docx) ~394
Convert Markdown (GitHub flavoured) to a real Word .docx: headings H1-H6 (Word heading styles, so the navigation pane and table of contents work), paragraphs with bold, italic, strikethrough, inline code and clickable links, bullet and numbered lists (nested, numbering restarts per list, task-list checkboxes), tables (header row shaded, column alignment kept), blockquotes, fenced code blocks in a monospace font, horizontal rules, and a page break wherever a line says \newpage. Arabic/Hebrew paragraphs are laid out right-to-left automatically (rtl: "auto"). Images are not embedded (their alt text is shown); raw HTML tags are dropped. Options: title and author (document properties), font (default Calibri), fontSize. Give "markdown" inline or "path" to a .md file. Writes the .docx to "output" (default name from the title or first heading).
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | Author shown in the file properties. |
| font | string | – | Body font (default Calibri). |
| fontSize | number | – | Body font size in points (default 11). |
| markdown | string | – | The Markdown text inline. |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| path | string | – | Or: a Markdown file (local path or base64). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| rtl | string | – | Right-to-left paragraphs: "auto" (detect Arabic/Hebrew per paragraph), "on" or "off". |
| title | string | – | Document title (file properties, and the default file name). |
No output schema declared.
No examples provided.
ai_markdown_to_pdf Markdown to PDF ~461
Turn Markdown (GitHub-flavoured) into a clean, paginated A4/Letter/A5 PDF: headings, paragraphs with word wrap, bold/italic/strikethrough, inline code, links (clickable), bullet / numbered / task lists (nested), tables (wrapped cells, header repeated on new pages), blockquotes, code blocks, horizontal rules, local images (relative to the Markdown file; remote images are never fetched and show as alt text), page breaks (\pagebreak, \newpage or <!-- pagebreak -->), page numbers, margins and title metadata. Text uses the built-in PDF fonts: Latin text only (English and Western European). Arabic, CJK and other scripts are not supported yet: such characters are replaced with "?" (or rejected with onUnsupportedChar: "error"); emoji are dropped; arrows and common symbols are transliterated. Give "markdown" inline or "path" to a .md file.
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | – | – |
| font | string | – | Body font: sans (Helvetica) or serif (Times). Code is always Courier. |
| fontSize | number | – | Body font size in pt. Default 10.5. |
| landscape | boolean | – | – |
| margin | number | – | Page margin in mm. Default 20. |
| markdown | string | – | Markdown text. Use this or "path". |
| onUnsupportedChar | string | – | What to do with characters the PDF fonts can't show: replace with "?" (default) or fail. |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| pageNumbers | boolean | – | Print "n / total" at the bottom of each page. Default true. |
| paper | string | – | – |
| path | string | – | A .md file: local path or base64. Relative image links resolve against its folder. |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| title | string | – | PDF title metadata. Default: the first # / ## heading. |
No output schema declared.
No examples provided.
ai_media_info Audio/video metadata ~204
Read audio and video file metadata offline (music-metadata): container, codec, duration, bitrate, sample rate, bit depth, channels, lossless or not, tags (title, artist, album, year, genre, track…), embedded cover art, and per-track info (including video width/height for MP4/MKV/WebM). Formats: MP3, AAC/M4A/MP4/MOV, FLAC, WAV, AIFF, OGG/Opus/Vorbis, WebM/Matroska, WMA/ASF, APE, WavPack, DSD and more. File path (streamed, any size) or base64. Duration of VBR MP3s without a header is computed by scanning the file.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | yes | The audio or video file: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
No output schema declared.
No examples provided.
ai_ocr OCR (image or scanned PDF to text) ~398
Read the text in an image (PNG, JPEG, WebP, TIFF incl. multi-page, GIF, AVIF) or a scanned PDF with Tesseract (tesseract.js), fully offline: the English and Arabic models ship with the server and nothing is downloaded or uploaded. Languages: "eng", "ara" or "eng+ara" (default). PDF pages are rendered at 200 dpi by default. Returns the text per page and the mean word confidence (0-100); give "output" to also write a .txt file. Limits: up to 200 pages per call, roughly 1-5 s per page; printed text works well, handwriting and very small or skewed text poorly. For PDFs that already have a text layer, pdf_to_text is faster and exact. Give "file" as a local path or base64.
| Name | Type | Req | Description |
|---|---|---|---|
| dpi | integer | – | Render resolution for PDF pages. Default 200. |
| file | string | yes | The image or PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| languages | string | – | Languages to read. Default "eng+ara". |
| maxChars | integer | – | Cut the inline text after this many characters (the file is never cut). |
| output | string | – | Also write the text to this .txt file (or folder ending in "/"). |
| pages | string | – | PDF pages / TIFF frames, e.g. "1-3, 5" (default all). |
| perPage | boolean | – | Also return the text of each page separately in "pages". Default false (the joined "text" has page separators). |
| psm | string | – | Page layout: "auto" (default), "block" (one uniform block), "line", "word", or "sparse" (scattered text). |
No output schema declared.
No examples provided.
ai_pdf_to_markdown PDF to Markdown ~316
Convert a text PDF to structured Markdown: headings guessed from font size (text clearly larger than the body becomes #, ##, ###), paragraphs rebuilt from line spacing with hyphenated words mended, bullet and numbered lists kept, right-to-left lines in reading order. Optional page range ("1-5, 8") and page markers. Scanned PDFs without a text layer give empty pages (listed in pagesWithoutText; run OCR first). Tables and columns are read line by line. Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
| pageMarkers | boolean | – | Put "<!-- Page N -->" before each page and "---" between pages. Default false. |
| pages | string | – | Pages to convert, e.g. "1-3, 7" or "5-" (1-based). Default: all. |
| password | string | – | Password, if the PDF is protected. |
No output schema declared.
No examples provided.
ai_pptx_to_markdown PowerPoint (.pptx) to Markdown ~294
Extract the text of a PowerPoint .pptx deck as Markdown: one "## Slide N: title" section per slide in presentation order, text boxes as paragraphs and bullet lists (with indent levels), tables as Markdown tables, and speaker notes as a quote under each slide. Images, charts and SmartArt text are not extracted. Old binary .ppt is not supported. Optional "slides" range (e.g. "1-5, 8"). Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file. Runs locally; nothing is uploaded.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | yes | The .pptx presentation: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| notes | boolean | – | Include speaker notes. Default true. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
| slides | string | – | Slides to include, e.g. "1-3, 7" or "5-" (1-based). Default: all. |
No output schema declared.
No examples provided.
ai_sql_query SQL query over tables ~416
Run one read-only SQL SELECT (alasql dialect: JOIN, GROUP BY, HAVING, ORDER BY, LIMIT, UNION, WITH, subqueries, CASE, SUM/COUNT/AVG/MIN/MAX/MEDIAN/STDEV, string and date functions) over one or more tables. Each table is { name, file | csv | json }: a local path or base64 of a CSV, TSV, JSON array, JSONL or .xlsx (first sheet, or "sheet"), or inline CSV text / JSON rows. CSV cells are typed (numbers, true/false, empty → null; ISO dates stay ISO text, so they sort and compare correctly; YEAR()/MONTH() work on them). Only SELECT is allowed: INSERT/UPDATE/DELETE/DROP/CREATE/ALTER/ATTACH, SELECT INTO, file readers like FROM CSV(...), inline JavaScript and the -> operator are refused. Table names are case-sensitive; quote odd column names and reserved words (total, value, count, date…) as [My Column]. Returns columns and up to maxRows rows (default 500) with the total count; set "output" (.csv, .tsv, .json, .jsonl or .xlsx) to save every row to a file. Runs locally; nothing is uploaded.
| Name | Type | Req | Description |
|---|---|---|---|
| maxRows | integer | – | Rows to return inline (default 500). "total" always counts all rows. |
| output | string | – | Optional: save ALL result rows to this file; the type comes from the extension (.csv, .tsv, .json, .jsonl, .xlsx; default .csv). |
| query | string | yes | One SELECT statement, e.g. SELECT region, SUM(amount) AS revenue FROM sales GROUP BY region ORDER BY revenue DESC |
| tables | array | yes | The tables the query can read (1-20). |
| types | boolean | – | Type CSV cells (numbers, booleans, null). Default true; false keeps every CSV cell as text. |
No output schema declared.
No examples provided.
ai_text_similarity Text similarity and near-duplicates ~381
Compare two or more texts (or text files) for overlap. For every pair returns: Jaccard similarity of word shingles (k=3 words by default), a MinHash estimate of that Jaccard (128 hashes), and cosine similarity of word frequencies. Words are lower-cased, punctuation and Arabic diacritics ignored. Measures wording overlap, not meaning (no embeddings): paraphrases score low. Mode "pairs" (default) lists pairs sorted by the chosen metric; mode "dedupe" groups near-duplicates whose metric is at least "threshold" (default 0.8; groups are connected, so A~B and B~C put A, B, C together). Give "texts" (inline strings) and/or "paths" (file paths or base64). Up to 1000 texts.
| Name | Type | Req | Description |
|---|---|---|---|
| labels | array | – | Optional names for the texts, in order (texts first, then paths). Default: "#1", "#2"… or the file name. |
| maxPairs | integer | – | Most pairs to return (highest first). Default 200. |
| metric | string | – | Metric used to sort pairs and to group duplicates. Default jaccard. |
| mode | string | – | "pairs" (similarity of each pair) or "dedupe" (groups of near-duplicates). |
| numHashes | integer | – | MinHash signature length. Default 128 (error about ±0.09). |
| paths | array | – | Or/also: UTF-8 text files (local paths or base64). |
| shingleSize | integer | – | Words per shingle (k). Default 3. |
| texts | array | – | Texts to compare (inline). |
| threshold | number | – | Dedupe: pairs at or above this are duplicates. Default 0.8. |
No output schema declared.
No examples provided.
ai_token_count Count tokens ~279
Count LLM tokens in a text or text file with the OpenAI tiktoken tokenizers ("o200k_base", default, used by GPT-4o and the o-series; or "cl100k_base", used by GPT-4/3.5 and text-embedding-3). Also returns characters and words, and whether the text fits in common context windows (8k, 32k, 128k, 200k, 1M: e.g. "fits in 200k: yes"). Claude's tokenizer is not public, so for Claude the count is an estimate (typically within ~10-20%; Claude usually needs a little more), returned as a rough range. Runs locally, no API calls. Give "text" or "path" (file path or base64). Large texts (many MB) take a few seconds.
| Name | Type | Req | Description |
|---|---|---|---|
| encoding | string | – | Tokenizer: "o200k_base" (GPT-4o / o-series, default) or "cl100k_base" (GPT-4 / GPT-3.5 / text-embedding-3). |
| path | string | – | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). |
| text | string | – | The text (inline). |
No output schema declared.
No examples provided.
ai_web_fetch Fetch a web page as Markdown ~352
Fetch a web page (http/https) and return its readable content as clean Markdown, with title, byline, final URL after redirects and a word count. Uses Mozilla Readability to keep the main article (falls back to the whole page), or a CSS "selector" you give. Respects robots.txt (refuses pages disallowed for the s3eidat-tools-mcp user agent), only reads HTML and text responses, stops at 5 MB and 20 seconds, follows up to 5 redirects, and refuses private, local and loopback addresses unless allowPrivate is true. Does not run JavaScript, so pages that build their content in the browser may come back nearly empty. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file.
| Name | Type | Req | Description |
|---|---|---|---|
| allowPrivate | boolean | – | Allow private, local and loopback hosts (e.g. a dev server on localhost). Default false. |
| includeLinks | boolean | – | Keep links (made absolute) and images. False turns links into plain text and drops images. |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
| readable | boolean | – | Keep only the main content (default true). False converts the whole page body. |
| selector | string | – | CSS selector: convert only the matching elements instead of the Readability main content. |
| url | string | yes | The page to fetch (http:// or https://). |
No output schema declared.
No examples provided.
ai_xlsx_to_markdown Excel (.xlsx/.csv) to Markdown tables ~345
Turn an Excel .xlsx workbook (or a .csv/.tsv file) into Markdown tables, one "## sheet" section per sheet, or only the sheet you name. The first used row is the table header; empty rows and columns around the data are dropped. Formulas show their cached result (as last saved by Excel), dates are ISO (2026-10-30, or 2026-10-30T14:05:00), merged cells show their value once, hyperlinks become Markdown links. Each sheet shows at most maxRows data rows (default 200) and says how many were left out. Old binary .xls is not supported. Accepts a local path or base64. Runs locally.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | yes | The .xlsx or .csv file: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
| format | string | – | Input format. "auto" tells .xlsx (a ZIP) from CSV by its bytes. |
| maxChars | integer | – | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
| maxRows | integer | – | Data rows to show per sheet (after the header). Default 200. |
| output | string | – | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. |
| sheet | string | – | Only this sheet: its name, or its 1-based position (e.g. "2"). Default: every sheet. |
No output schema declared.
No examples provided.
ai_zip ZIP create / extract / list ~310
Work with ZIP archives locally. action "create": zip files and folders (given as paths; folders keep their own name as the top folder, symlinks are skipped) into one .zip. action "extract": unpack a .zip (path or base64) into the "output" folder; entries with "..", absolute paths or drive letters are refused (zip-slip protection), existing files are kept unless overwrite is true. action "list": entry names with sizes, no extraction. Limits: total uncompressed size 500 MB and 10000 files by default (maxTotalMB / maxFiles). Encrypted ZIPs are not supported.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| files | array | – | create: files and folders to add (local paths). |
| level | integer | – | create: compression level 0 (store) to 9 (smallest). Default 6. |
| maxFiles | integer | – | Cap on the number of entries. Default 10000. |
| maxTotalMB | number | – | Cap on the total uncompressed size, MB. Default 500. |
| output | string | – | create: the .zip path (or a folder ending in "/"). extract: the folder to extract into. Default: the server output folder. |
| overwrite | boolean | – | extract: replace files that already exist in the output folder. Default false (they are skipped). |
| zip | string | – | extract / list: the ZIP archive, a local path or base64. |
No output schema declared.
No examples provided.
barcode_generate Barcode generator ~431
Make 1D barcodes as SVG or PNG: Code 128 (any printable ASCII; digit runs packed with subset C automatically), EAN-13 (12 digits, check digit added; or 13, check digit verified), UPC-A (11 or 12 digits, same) and Code 39 (A-Z, 0-9, space, - . $ / + %, optional mod-43 check). Same encoders, quiet zones, guard bars and human-readable digits as the website. Give "value" for one barcode, or "values" (up to 1000) to write one file per value into a folder; invalid values are reported, not fatal. PNG text uses the system monospace font. Web version: https://s3eidat.github.io/barcode-gen/
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Background colour, hex. |
| barWidth | integer | – | Narrow bar (module) width in px, 1-6 (default 2). |
| code39Check | boolean | – | Code 39 only: append the mod-43 check character. |
| foreground | string | – | Bar colour, hex. |
| format | string | – | Output format (default svg). |
| height | integer | – | Bar height in px, 30-220 (default 80). |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| returnBase64 | boolean | – | Also return the output as base64 in the result (only for small files). Default false. |
| scale | integer | – | PNG only: pixel scale (1×, 2× default, 4×…). |
| showText | boolean | – | Print the human-readable text/digits under the bars. |
| symbology | string | – | Barcode type (default code128). |
| value | string | – | The value to encode (one barcode). |
| values | array | – | Or: many values; each becomes its own file in the output folder. |
No output schema declared.
No examples provided.
base_convert Number base convert ~281
Convert a whole number of any size (BigInt) between bases 2–36: binary, octal, decimal, hex, base 36 or any other. Input base can be auto-detected from 0x / 0b / 0o prefixes; spaces, _ and , separators are ignored; negatives OK. Also shows bit length and the two's complement view (signed/unsigned value, hex, bits) at 8/16/32/64 bits, and whether it fits. Fractions are not supported (same as the website). Web version: https://s3eidat.github.io/base-convert/
| Name | Type | Req | Description |
|---|---|---|---|
| from | – | – | Input base 2–36, or "auto" (prefix, else decimal). |
| group | boolean | – | Group digits like the website (binary/hex by 4, octal by 3, decimal with commas). |
| to | array | – | Output bases. Default [2, 8, 10, 16, 36]. |
| uppercase | boolean | – | Upper-case letters for bases above 10. |
| value | string | yes | The number, e.g. "0xC0FFEE", "-0b101", "1_000_000", "zz" (with from=36). |
| width | – | – | Bit width for the two's complement view. |
No output schema declared.
No examples provided.
base64_decode Base64 decode ~197
Decode Base64 (standard or URL-safe, padding optional, whitespace and data: URI prefix allowed). Valid UTF-8 text is returned inline; binary data (or anything when "output" is given) is written to a file whose extension comes from the detected type (PNG, JPEG, GIF, WebP, BMP, PDF, ZIP, gzip, MP3, Ogg, MP4, WOFF2, SVG, JSON). Web version: https://s3eidat.github.io/base64-kit/
| Name | Type | Req | Description |
|---|---|---|---|
| base64 | string | yes | The Base64 text to decode (may be a data: URI). |
| fileName | string | – | Base name for the written file (extension follows the detected type). Default "decoded". |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
No output schema declared.
No examples provided.
base64_encode Base64 encode ~246
Encode text (as UTF-8) or a file (path or base64) to Base64. Options: URL-safe alphabet (- and _, no padding), wrap at 76 columns (MIME), or a data: URI for files (MIME type detected from magic bytes). Results over 1 MB, or when "output" is given, are written to a text file instead of returned inline. Web version: https://s3eidat.github.io/base64-kit/
| Name | Type | Req | Description |
|---|---|---|---|
| dataUri | boolean | – | Return a data: URI (data:<mime>;base64,…) instead of bare Base64. |
| file | string | – | Or: a file to encode: local path or base64 data. |
| output | string | – | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
| text | string | – | Text to encode (UTF-8). |
| urlSafe | boolean | – | Use the URL-safe alphabet (- and _) and drop "=" padding. |
| wrap | boolean | – | Insert a line break every 76 characters (MIME style). |
No output schema declared.
No examples provided.
bytes_convert Text ⇄ UTF-8 bytes ~148
Turn text into its UTF-8 bytes (hex, binary or decimal), or bytes back into text. Byte input is lenient: "48 65", "4865", "0x48,0x69", "01001000 01101001", "72 105". Invalid UTF-8 is reported and shown with � replacements. Web version: https://s3eidat.github.io/base-convert/
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | string | – | Or: bytes to turn into text, in the chosen format. |
| format | string | – | Byte format. Default hex. |
| text | string | – | Text to turn into bytes. |
| uppercase | boolean | – | Upper-case hex digits. |
No output schema declared.
No examples provided.
calc_age Age calculator ~200
Exact age in years, months and days from a date of birth (on today or any "on" date), with totals in months, weeks, days and hours, the weekday of birth, Hijri (Umm al-Qura) birth date and Hijri age, next birthday (Feb 29 birthdays fall on Feb 28 in common years), star sign, Chinese zodiac, the next 1,000-day milestone, and optionally the age gap to a second person. Dates are ISO YYYY-MM-DD. Web version: https://s3eidat.github.io/age-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| birthDate | string | yes | Date of birth, YYYY-MM-DD. |
| onDate | string | – | Work out the age on this date (YYYY-MM-DD). Default: today. |
| otherBirthDate | string | – | Optional second person's date of birth, to compare. |
| otherName | string | – | Name of the second person (default "They"). |
No output schema declared.
No examples provided.
calc_bmi BMI calculator ~287
Body mass index with the WHO adult category, the healthy weight range for your height (BMI 18.5–24.9), BMI Prime, optional waist-to-height ratio, and for adults (18–120, with age) BMR by Mifflin-St Jeor plus daily calories to maintain or lose ~0.5 kg (1 lb) a week at five activity levels. Metric (cm, kg) or imperial (ft + in, lb). Height 50–272 cm, weight 10–650 kg. Not medical advice; children need percentile charts. Web version: https://s3eidat.github.io/bmi-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| age | number|string | – | Age in years (adults 18+ get BMR and calories). |
| heightCm | number|string | – | Height in cm (metric). |
| heightFt | number|string | – | Height, feet part (imperial). |
| heightIn | number|string | – | Height, inches part (imperial). |
| sex | string | – | Sex, for BMR (m or f). |
| units | string | – | metric: cm and kg; imperial: ft + in and lb. |
| waist | number|string | – | Optional waist size in cm (metric) or inches (imperial). |
| weight | number|string | – | Weight in kg (metric) or lb (imperial). |
No output schema declared.
No examples provided.
calc_cash_count Cash counter ~227
Count a cash drawer by denomination with exact integer maths (no float errors): JOD (3 decimals, fils), USD, EUR, SAR, AED, GBP, KWD, EGP, or a custom currency (your own note and coin values, 0/2/3 decimals). Give how many of each note/coin (by value like 50 or 0.25, by label like "50 JD" or "¼ dinar"); returns per-denomination amounts, the total, notes and coins counted, and over/short against an expected amount. list=true shows the denominations of a currency. Web version: https://s3eidat.github.io/cash-counter/
| Name | Type | Req | Description |
|---|---|---|---|
| counts | array | – | What you counted. |
| currency | string | – | Currency preset, or CUSTOM. |
| custom | object | – | CUSTOM currency definition. |
| expected | number|string | – | Expected total, to show over/short. |
| list | boolean | – | Just list the denominations. |
| note | string | – | Optional note for the summary (e.g. "Evening shift"). |
No output schema declared.
No examples provided.
calc_compound_interest Compound interest / savings growth ~255
Project savings with compound interest: an initial deposit plus monthly contributions (at the start or end of each month), a nominal annual rate compounded yearly, half-yearly, quarterly, monthly, daily or continuously, optionally adjusted for inflation ("today's money"). Returns final balance, total deposits, interest earned and a year-by-year table. Rate -50–100 %, 1 month to 100 years. Web version: https://s3eidat.github.io/compound-interest/
| Name | Type | Req | Description |
|---|---|---|---|
| annualRate | number|string | yes | Nominal annual interest rate in percent, e.g. 7. |
| compounding | string | – | How often interest compounds. |
| inflation | number|string | – | Optional yearly inflation in percent, to show the balance in today's money. |
| initial | number|string | – | Initial deposit (default 0). |
| monthly | number|string | – | Monthly contribution (default 0). |
| table | boolean | – | Include the year-by-year table. |
| timing | string | – | Contributions at the end (ordinary annuity) or start (annuity due) of each month. |
| years | number|string | yes | Duration in years (fractions allowed, e.g. 1.5; at least one month). |
No output schema declared.
No examples provided.
calc_date_diff Date difference / add days ~299
Two date jobs. difference: days between two dates (optionally counting the end day), as years/months/days, weeks, whole months, working days and weekend days for a chosen weekend (Fri–Sat default, Sat–Sun, Fri only, Sun only; public holidays are not counted). add: add or subtract days, business days, weeks, months or years to a date (month ends clamp: Jan 31 + 1 month = Feb 28/29). Results include the weekday and Umm al-Qura Hijri date. Dates are ISO YYYY-MM-DD; for Hijri ⇄ Gregorian conversion use calc_hijri. Web version: https://s3eidat.github.io/date-diff/
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | – | add: how many units to add (use subtract to go back). |
| date | string | – | add: the starting date YYYY-MM-DD (default today). |
| end | string | – | difference: end date YYYY-MM-DD (default today). |
| inclusive | boolean | – | difference: count the end date too. |
| mode | string | – | difference between two dates, or add/subtract an amount. |
| start | string | – | difference: start date YYYY-MM-DD (default today). |
| subtract | boolean | – | add: go back in time instead. |
| unit | string | – | add: unit of amount. |
| weekend | string | – | Weekend days skipped by working-day counts. |
No output schema declared.
No examples provided.
calc_discount Discount / sale price calculator ~344
Three shop maths jobs. sale: price after one or two stacked discounts (each a percent or a fixed amount) plus optional tax/VAT, with what you save and the effective total discount (stacked percents multiply). reverse: the discount % between an old and a new price. compare: which of two deals is cheaper per unit (price and amount of each). Money is rounded to the cent at each step like a till. Web version: https://s3eidat.github.io/discount-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| amountA | number|string | – | compare: amount of deal A (e.g. 0.5 for 500 g when unit is kg). |
| amountB | number|string | – | compare: amount of deal B. |
| discount | number|string | – | sale: first discount (percent by default). |
| discountType | string | – | sale: first discount is a percent or a fixed amount. |
| extraDiscount | number|string | – | sale: optional second discount applied after the first. |
| extraDiscountType | string | – | sale: second discount type. |
| mode | string | – | Which calculator. |
| now | number|string | – | reverse: the new price. |
| price | number|string | – | sale: original price. |
| priceA | number|string | – | compare: price of deal A. |
| priceB | number|string | – | compare: price of deal B. |
| taxPercent | number|string | – | sale: optional tax / VAT percent added after the discounts. |
| unit | string | – | compare: the unit name (kg, L, item…). Default "unit". |
| was | number|string | – | reverse: the old price. |
No output schema declared.
No examples provided.
calc_due_date Pregnancy due date ~253
Estimated pregnancy due date from the first day of the last period (Naegele's rule, adjusted for cycle length 20–45 days), the conception date, or an IVF embryo transfer date (day-3 or day-5 embryo). Also gives the estimated conception date, full-term date, how far along you are on a given day (weeks + days, trimester, days to go) and a dated timeline of common milestones (weeks 4–42), optionally with Hijri dates. Estimate only, not medical advice. Web version: https://s3eidat.github.io/due-date/
| Name | Type | Req | Description |
|---|---|---|---|
| cycleLength | integer | – | lmp: average cycle length in days (default 28). |
| date | string | yes | The date for that method, YYYY-MM-DD. |
| hijri | boolean | – | Also give Umm al-Qura Hijri dates. |
| ivfEmbryoDay | – | – | ivf: embryo age at transfer, day 3 or day 5. |
| method | string | – | lmp = first day of last period; conception; ivf = embryo transfer date. |
| today | string | – | Work out progress on this date, YYYY-MM-DD (default today). |
No output schema declared.
No examples provided.
calc_equation Equation solver ~280
Solve equations exactly with worked steps, like the website: linear a·x + b = c, quadratic a·x² + b·x + c = 0 (exact rational or surd roots like 1/2 + √5/2, complex roots), cubic a·x³ + b·x² + c·x + d = 0 (rational root test, else trigonometric/Cardano to 10 significant digits), and systems of 2 or 3 linear equations (Gauss–Jordan; no solution and infinitely many solutions are detected and parametrised). Coefficients may be integers, decimals, fractions ("3/4"), mixed numbers ("-1 1/2") or e-notation. Web version: https://s3eidat.github.io/equation-solver/
| Name | Type | Req | Description |
|---|---|---|---|
| coefficients | array | – | linear: [a, b, c] for a·x + b = c; quadratic: [a, b, c]; cubic: [a, b, c, d]. |
| system | array | – | system: rows of the augmented matrix, 2 rows of [a, b, rhs] (x, y) or 3 rows of [a, b, c, rhs] (x, y, z). |
| type | string | yes | Equation type. |
No output schema declared.
No examples provided.
calc_expression Scientific calculator ~279
Evaluate a maths expression safely with the website's own parser (never eval): + − × ÷ ^ (right-associative), implicit multiplication (2(3+4), 2x), postfix ! and %, √, brackets; functions sin cos tan sec csc cot (+ asin acos atan atan2) in degrees (default), radians or grads, sinh cosh tanh and inverses, sqrt cbrt root(x,n) abs exp ln log(x[,base]) log10 log2 floor ceil round sign min max mod nCr nPr fact gamma; constants pi π e tau phi; "ans" and your own variables. Results to 12 significant digits, plain or scientific notation. Web version: https://s3eidat.github.io/sci-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| angle | string | – | Angle unit for trig functions. |
| ans | number | – | Value of "ans" (the previous answer). Default 0. |
| expression | string | yes | The expression, e.g. "sin(30) + 2^3^2", "5!/(2!×3!)", "200×15%". |
| format | string | – | Display: normal, or always scientific notation. |
| variables | object | – | Variables to use, e.g. {"x": 2, "r": 5}. |
No output schema declared.
No examples provided.
calc_fraction Fraction calculator ~210
Exact fraction maths with big integers (never rounded) and worked steps. calculate: an expression with fractions, mixed numbers ("1 1/2"), decimals and repeating decimals ("0.(3)"), + − × ÷ ^ and brackets (a/b binds tighter than ÷). decimal_to_fraction: "0.75", "0.1(6)" (brackets mark the repeating part), with close small-denominator approximations. fraction_to_decimal: exact decimal with the repeating block, and percent. compare: put two or more fractions in order. Web version: https://s3eidat.github.io/fraction-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | calculate: "1 1/2 + 3/4 × 2/5"; decimal_to_fraction: "0.1(6)"; fraction_to_decimal: "5/7"; compare: "2/3, 3/5, 7/10". |
| mode | string | – | What to do. |
No output schema declared.
No examples provided.
calc_fuel_cost Fuel cost of a trip ~311
Fuel needed and cost of a trip from distance (km or miles, optionally round trip), fuel price (per litre, US gallon or UK gallon) and consumption in L/100 km, km/L, mpg (US) or mpg (UK); split between people; cost per km/mile and per 100. Optionally compare a second car (its own consumption and, if different, fuel price). Also converts the consumption to the other units. Web version: https://s3eidat.github.io/fuel-cost/
| Name | Type | Req | Description |
|---|---|---|---|
| compare | object | – | Optional second car to compare. |
| consumption | number|string | yes | Car consumption / economy, e.g. 7.5 (L/100 km) or 35 (mpg). |
| consumptionUnit | string | – | l100 = L/100 km, kml = km/L, mpgus, mpguk. |
| currency | string | – | Currency label for the text, e.g. "JD" or "$". |
| distance | number|string | yes | Trip distance (one way unless roundTrip). |
| distanceUnit | string | – | Distance unit. |
| name | string | – | Name of the car (default "Car A"). |
| people | integer | – | Split the cost between this many people. |
| price | number|string | yes | Fuel price per priceUnit. |
| priceUnit | string | – | The price is per litre, US gallon or UK gallon. |
| roundTrip | boolean | – | Double the distance (there and back). |
No output schema declared.
No examples provided.
calc_gpa GPA calculator ~272
Credit-weighted semester GPA, cumulative GPA (with previous credits and GPA) and the average you need over the remaining credits to reach a target. Scales: 4.0 (A…F, no A+), 4.3 (A+ = 4.3), 5.0 (A+ 5, A 4.75, B+ 4.5 … F 1) with letter grades, or "percent" with numeric marks between a minimum and maximum (default 35–100). Courses with no credits or an invalid grade are skipped (and listed). Up to 40 courses. Web version: https://s3eidat.github.io/gpa-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| courses | array | yes | This semester's courses. |
| percentMax | number|string | – | percent scale: highest mark (default 100). |
| percentMin | number|string | – | percent scale: lowest passing mark (default 35). |
| previousCredits | number|string | – | Credits completed before this semester. |
| previousGpa | number|string | – | GPA before this semester. |
| remainingCredits | number|string | – | Credits still to take after this semester (for the target). |
| scale | string | – | Grading scale. |
| targetGpa | number|string | – | Target cumulative GPA. |
No output schema declared.
No examples provided.
calc_hijri Hijri ⇄ Gregorian converter ~359
Convert between Gregorian and Hijri dates with the Umm al-Qura calendar (the same Intl calendar the website uses), both ways. Modes: to_hijri (a Gregorian date), to_gregorian (Hijri year, month 1–12, day), month (length of a Hijri month and its Gregorian start/end), age (age in Hijri and Gregorian years, next Hijri birthday). Results come in English and Arabic (Arabic-Indic digits by default; Gregorian month names in the Egyptian/Gulf or Levant style). Supported range 1300–1600 AH (1882–2174). Web version: https://s3eidat.github.io/hijri-converter/
| Name | Type | Req | Description |
|---|---|---|---|
| arabicDigits | boolean | – | Use Arabic-Indic digits in the Arabic text. |
| birthDate | string | – | age: Gregorian date of birth YYYY-MM-DD. |
| date | string | – | to_hijri: Gregorian date YYYY-MM-DD (default today). |
| gregorianArabicMonths | string | – | Arabic Gregorian month names: intl (Egypt/Gulf style, January = Yanayir) or levant (Syria/Jordan style, January = Kanun al-Thani). |
| hijriDay | integer | – | to_gregorian: Hijri day 1–30. |
| hijriMonth | integer | – | to_gregorian / month: Hijri month 1–12 (1 = Muharram, 9 = Ramadan). |
| hijriYear | integer | – | to_gregorian / month: Hijri year (1300–1600). |
| mode | string | yes | Which conversion. |
| onDate | string | – | age: age on this Gregorian date (default today). |
No output schema declared.
No examples provided.
calc_hours Work hours / time card ~295
Weekly time card: add shifts (start and end "HH:MM", unpaid break minutes; an end at or before the start is an overnight shift), up to 6 shifts a day. Totals per shift, per day and per week in h:mm and decimal hours; optional rounding of each shift to 5, 6 or 15 minutes; overtime over N hours a day and/or N regular hours a week (daily first, then weekly), paid at a multiplier (default 1.5); pay at an hourly rate. Web version: https://s3eidat.github.io/hours-calc/
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | – | Currency label for the summary. |
| dailyOvertimeHours | number | – | Hours per day after which time is overtime (e.g. 8). |
| hourlyRate | number | – | Pay per regular hour. |
| overtimeMultiplier | number | – | Overtime pay multiplier. |
| roundMinutes | – | – | Round each shift to the nearest 5, 6 or 15 minutes (0 = off). |
| shifts | array | yes | The week's shifts. |
| weekOf | string | – | Optional: any date in that week (YYYY-MM-DD) to date each day. |
| weekStart | string | – | First day of the week (order of the days). |
| weeklyOvertimeHours | number | – | Regular hours per week after which time is overtime (e.g. 40). |
No output schema declared.
No examples provided.
How do I install the S3eidat Tools MCP server?
S3eidat Tools runs locally as an npm package, launched with npx -y s3eidat-tools-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · s3eidat-tools-mcp
claude mcp add s3eidat-s3eidat-tools-mcp -- npx -y s3eidat-tools-mcp
What is the S3eidat Tools MCP server?
S3eidat Tools is an MCP server listed in the public MCP registry as io.github.s3eidat/s3eidat-tools-mcp. Free, private PDF, image, text, developer, calculator and QR tools. Runs locally; no uploads. This page covers its npm package (s3eidat-tools-mcp).
Is the S3eidat Tools MCP server safe to use?
S3eidat Tools scores 62 out of 100 on VerifyMCP. We recorded 4 known advisories against it as of 4 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the S3eidat Tools MCP server expose?
S3eidat Tools exposes 162 tools: ai_chart, ai_chunk_text, ai_create_pptx, ai_create_xlsx, ai_csv_profile, and 157 more. Their descriptions and schemas cost roughly 49,341 tokens of context every time the server is loaded.
Is the S3eidat Tools MCP server still maintained?
S3eidat Tools is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the S3eidat Tools MCP server under?
S3eidat Tools declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.