# app.ionelul.com tools (npm · app-ionelul-mcp)

Local tools: PDF, Office, e-Factura, OCR, images, video, speech, translation and nutrition.

- Trust score: 66/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `app-ionelul-mcp`: 66/100 (this document), [markdown](https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp.md), [page](https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp)

## Channel facts

- Registry: `npm`
- Package: `app-ionelul-mcp`
- Version: `0.12.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 99/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 7 of 39 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 13 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 57/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 10822 tokens (~171/item across 63 items; 63 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 47/100
  - Stability observed for 14 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 90/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 71% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "pdf_merge" implies "merge" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 63 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the app.ionelul.com tools MCP server?

app.ionelul.com tools runs locally as an npm package, launched with npx -y app-ionelul-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-ionelul-app -- npx -y app-ionelul-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-ionelul-app": {
      "command": "npx",
      "args": [
        "-y",
        "app-ionelul-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-ionelul-app": {
      "command": "npx",
      "args": [
        "-y",
        "app-ionelul-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-ionelul-app -- npx -y app-ionelul-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-ionelul-app": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "app-ionelul-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-ionelul-app --command npx --arg -y --arg app-ionelul-mcp
```

### Hermes

```yaml
mcp_servers:
  com-ionelul-app:
    command: "npx"
    args: ["-y", "app-ionelul-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-ionelul-app": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "app-ionelul-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-ionelul-app -t stdio -c npx -a -y app-ionelul-mcp
```

### Other

```json
{
  "mcpServers": {
    "com-ionelul-app": {
      "command": "npx",
      "args": [
        "-y",
        "app-ionelul-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 60, +11)

- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 0.91

### 2026-10-22 (score 49)

First indexed and scored.

## MCP tools (63)

### `pdf_info` (~47 tokens)

PDF info

Page count, page sizes, metadata, encryption and form fields of a PDF.

Input parameters:

- `file` (string, required): Path to the PDF
- `password` (string): Password of an encrypted PDF

### `pdf_merge` (~70 tokens)

Merge PDFs

Joins PDFs into one, in the order given. Each input can pick its pages ("1-3, 5, 8-").

Input parameters:

- `files` (array, required)
- `output` (string, required): Path of the merged PDF
- `overwrite` (boolean): Replace the output file if it exists

### `pdf_split` (~137 tokens)

Split PDF

Splits a PDF into several files: one per range ("1-3, 4-6") or every N pages.

Input parameters:

- `every` (integer): Pages per file, when no ranges are given (default 1)
- `file` (string, required)
- `outputDir` (string): Folder for the parts (default: next to the input)
- `overwrite` (boolean): Replace the output file if it exists
- `password` (string): Password of an encrypted PDF
- `ranges` (string): Comma-separated groups, each becomes a file, e.g. "1-3, 4, 5-"

### `pdf_organize` (~143 tokens)

Reorder, rotate or delete PDF pages

Builds a new PDF from the pages listed, in that order (pages left out are deleted), optionally rotating some of them.

Input parameters:

- `file` (string, required)
- `output` (string): Default: <name>-organized.pdf next to the input
- `overwrite` (boolean): Replace the output file if it exists
- `pages` (string): New page order, e.g. "3, 1-2, 5-" (default: all pages)
- `password` (string): Password of an encrypted PDF
- `rotate`: Clockwise rotation in degrees
- `rotatePages` (string): Original page numbers to rotate (default: all)

### `pdf_edit` (~133 tokens)

Watermark, number, protect or unlock a PDF

Adds a text watermark and/or page numbers, sets metadata, and protects with a password. With `password` and no `protect`, the output is an unlocked copy.

Input parameters:

- `file` (string, required)
- `metadata` (object): Replaces the document info; fields left out are cleared
- `output` (string): Default: <name>-edited.pdf next to the input
- `overwrite` (boolean): Replace the output file if it exists
- `pageNumbers` (object)
- `password` (string): Password of an encrypted PDF
- `protect` (object)
- `watermark` (object)

### `pdf_form_read` (~50 tokens)

Read PDF form fields

Lists the fillable (AcroForm) fields of a PDF with their type, current value and options.

Input parameters:

- `file` (string, required)
- `password` (string): Password of an encrypted PDF

### `pdf_form_fill` (~114 tokens)

Fill a PDF form

Writes values into fillable fields (names from pdf_form_read). Diacritics are supported.

Input parameters:

- `file` (string, required)
- `flatten` (boolean): Make the values part of the page (default true)
- `output` (string): Default: <name>-filled.pdf next to the input
- `overwrite` (boolean): Replace the output file if it exists
- `password` (string): Password of an encrypted PDF
- `values` (object, required): Field name -> value; checkboxes take true/false

### `pdf_to_excel` (~167 tokens)

PDF to Excel

Finds tables in a PDF from its text layout and writes them to .xlsx (or .csv). Works on statements, price lists and reports; not on scans.

Input parameters:

- `file` (string, required)
- `includeText` (boolean): Keep text outside tables (page layout only, default true)
- `layout` (string): One sheet per page (default) or per table
- `numbers` (string): Number format: auto, 1.234,56 (comma), 1,234.56 (dot) or keep as text
- `output` (string): .xlsx or .csv; default <name>.xlsx next to the input
- `overwrite` (boolean): Replace the output file if it exists
- `password` (string): Password of an encrypted PDF

### `pdf_to_word` (~96 tokens)

PDF to Word

Rebuilds the text of a PDF as an editable .docx: paragraphs, headings, bold and italic. Tables and columns come out as paragraphs; scanned pages are skipped.

Input parameters:

- `file` (string, required)
- `output` (string): Default: <name>.docx next to the input
- `overwrite` (boolean): Replace the output file if it exists
- `password` (string): Password of an encrypted PDF

### `pdf_sign` (~237 tokens)

Sign or stamp a PDF

Places a signature, stamp or logo image (a transparent PNG works best; JPEG, WebP, AVIF and JPEG XL too) on chosen pages, at a corner or at exact millimetres, keeping its proportions. This is a visible signature, not a cryptographic (digital certificate) one.

Input parameters:

- `file` (string, required): Path to the PDF
- `image` (string, required): Signature or stamp image
- `marginMM` (number): Distance from the edges for `position` (default 15)
- `output` (string): Default: <name>-signed.pdf
- `overwrite` (boolean): Replace the output file if it exists
- `pages` (string): Page ranges, e.g. "1, 3-5"; default the last page
- `password` (string): Password of an encrypted PDF
- `position` (string): Default bottom-right
- `widthMM` (number): Default 50
- `xMM` (number): Left edge from the page’s left, in mm (instead of position)
- `yMM` (number): Bottom edge from the page’s bottom, in mm

### `office_to_pdf` (~137 tokens)

Word, Excel or PowerPoint to PDF

Converts .docx, .xlsx, .pptx or .odp to PDF without Office installed. Layout is redrawn, so it is close to but not identical with Office output; GIF/WebP/BMP pictures show as placeholders.

Input parameters:

- `file` (string, required)
- `gridlines` (boolean): Excel: draw cell gridlines (default true)
- `includeHidden` (boolean): PowerPoint: include hidden slides (default false)
- `output` (string): Default: <name>.pdf next to the input
- `overwrite` (boolean)
- `pageNumbers` (boolean): Word: number the pages (default false)

### `document_anonymize` (~424 tokens)

Anonymize a document

Finds personal data in a .docx or text file (or in `text`) and replaces it: names after titles and court roles (Mr., Frau, domnul, reclamantul…), addresses, national ID numbers checked by their control digit (CNP, PESEL, EGN, TC Kimlik, DNI/NIE, codice fiscale, NIR, SSN, NINO, rodné číslo), ID card and passport numbers, dates of birth, e-mails, phones, IBANs and cards, licence plates and IPs; companies and places on request. The same person always gets the same label ([Person 1]). Word files keep their formatting; author fields are cleared. Rules only (no AI model), so names with no title before them are found only when they also appear after one, or via `terms`. The originals are never returned: only counts, so the result can be shown to a model safely. Run it before reading a confidential file.

Input parameters:

- `file` (string): A .docx, .txt, .md, .csv or other text file
- `hide` (array): Kinds to hide; default all but organization and location
- `keep` (array): Found values to leave as they are (e.g. the court, the lawyer)
- `key_output` (string): Also write a CSV key (label -> original) here, to reverse it later. Keep it apart from the document.
- `language` (string): Language of the labels ([Persoana 1], [Person 1]...); default en
- `output` (string): Where to write the result; default <name>-anonymized next to the input
- `overwrite` (boolean)
- `style` (string): label: [Person 1] (default); initials: P.I. for names; mask: █████
- `terms` (array): Words or phrases to hide everywhere too (names, nicknames, case numbers)
- `text` (string): Or the text itself

### `legal_deadline` (~405 tokens)

Legal deadline

The last day of a procedural or legal time limit, with each counting step explained. Systems: ro-civil (Romanian Civil Procedure Code art. 181-183, clear days: neither first nor last day counts), ro-criminal (CPP art. 269, same), ro-custody (CPP art. 271, preventive measures: both ends count, no holiday extension), ro-civil-code (Civil Code art. 2551-2553, limitation periods), eu (Regulation 1182/71), generic (calendar or working days). A last day on a weekend or public holiday moves to the next working day. Public holidays are computed for any year for: RO, BG, DE, AT, FR, BE, NL, ES, IT, PT, PL, CZ, SK, HU, GB, IE, US (GB = England and Wales, US = federal).

Input parameters:

- `amount` (integer, required)
- `country` (string): Holidays to skip: RO, BG, DE, AT, FR, BE, NL, ES, IT, PT, PL, CZ, SK, HU, GB, IE, US, or "" for weekends only; default RO for Romanian systems, none otherwise
- `days_off` (array): Extra closed days (regional holidays, court closures)
- `direction` (string): "before": at least N clear days before `start` (ro-civil and ro-criminal, days only)
- `extend` (boolean): generic only: move a closed last day to the next working day (default true)
- `language` (string): Language of the explanation; default en
- `start` (string, required): YYYY-MM-DD: the day the term runs from (service, judgment, event); for direction "before", the hearing date
- `system` (string, required)
- `unit` (string, required): workingDays only for eu and generic; ro-custody counts days or months

### `legal_letter` (~415 tokens)

Legal letter

Writes a ready-to-send letter citing the right articles: GDPR requests (gdprAccess art. 15, gdprRectification art. 16, gdprErasure art. 17, gdprObjection art. 21, gdprPortability art. 20, gdprConsent art. 7(3)), a formalNotice to pay (in Romanian it cites art. 1522 Civil Code and art. 1014 CPC) or a powerOfAttorney, in any of 14 languages, as PDF, .docx or plain text. Fields left empty show as ________ and are listed in the reply.

Input parameters:

- `date` (string): YYYY-MM-DD; default today
- `document` (string, required)
- `fields` (object): Document fields: gdprAccess: reference, copy (check), details (textarea); gdprRectification: reference, incorrect (textarea), correct (textarea); gdprErasure: reference, groundNotNeeded (check), grou…
- `language` (string): Language of the letter; default en
- `output` (string): .pdf, .docx or .txt path; without it the text is returned
- `overwrite` (boolean)
- `place` (string)
- `recipient` (object): Not used by powerOfAttorney
- `sender` (object, required): Who writes (the principal, for a power of attorney)

### `efactura_read` (~92 tokens)

Read and check an e-Factura

Reads a Romanian e-Factura (UBL 2.1 XML, or the .zip downloaded from ANAF SPV) and checks that its totals add up (EN 16931 BR-CO rules). Does not validate against the ANAF schema.

Input parameters:

- `file` (string, required): .xml or ANAF .zip
- `full` (boolean): Return the whole parsed model instead of a summary

### `efactura_to_pdf` (~95 tokens)

e-Factura to PDF

Turns an e-Factura XML (or every invoice in an ANAF .zip) into a readable A4 PDF.

Input parameters:

- `file` (string, required): .xml or ANAF .zip
- `language` (string): Labels and number format (default ro)
- `outputDir` (string): Default: next to the input; files are named factura-<number>.pdf
- `overwrite` (boolean)

### `cv_to_pdf` (~310 tokens)

CV to PDF with LaTeX

Typesets a CV with XeLaTeX (TeX Live 2026) on this machine and writes the PDF. Give structured `cv` data for the Classic, Modern or Academic template (Academic: Latin Modern with small caps, a skills table, education grouped by school), or your own LaTeX in `tex`/`texFile`. Projects and awards take one line as a paragraph, several as bullets. Only bundled packages are available (fontspec, geometry, xcolor, enumitem, titlesec, hyperref, tabularx, multicol, paracol, fontawesome5 and their dependencies); fonts: Linux Libertine, Biolinum, Latin Modern. The first call downloads the engine (~21 MB) from app.ionelul.com and caches it; the CV is never sent anywhere.

Input parameters:

- `accent` (string): Modern template colour, hex without #
- `cv` (object)
- `lang` (string): Language of the section titles (default en)
- `output` (string): PDF path. Default: <texFile>.pdf, or cv.pdf in the current folder
- `overwrite` (boolean)
- `saveTex` (boolean): Also write the .tex next to the PDF (default false)
- `template` (string): For `cv` (default classic)
- `tex` (string): LaTeX source instead of `cv`
- `texFile` (string): Path to a .tex file instead of `cv`

### `image_strip_metadata` (~93 tokens)

Remove image metadata

Removes EXIF (GPS, camera, dates), XMP, IPTC and comments from JPEG, PNG and WebP without re-encoding: pixels stay byte for byte. Rotated photos keep only their orientation.

Input parameters:

- `files` (array, required)
- `inPlace` (boolean): Overwrite the originals instead
- `outputDir` (string): Default: <name>-clean.<ext> next to each input

### `file_checksum` (~102 tokens)

File checksums

Hashes files (streamed, so large files are fine) and optionally verifies them against an expected hash or a checksum file (sha256sum, md5sum or BSD format).

Input parameters:

- `algorithms` (array): Default: sha256, or guessed from `expected`
- `checksumFile` (string): SHA256SUMS-style file to verify against, by file name
- `expected` (string): Hash every file should match
- `files` (array, required)

### `romanian_diacritics` (~155 tokens)

Romanian diacritics

Adds missing Romanian diacritics (ă â î ș ț) from a dictionary of ~70,000 words, fixes the old cedilla letters (ş ţ to ș ț), or removes diacritics. With `add`, words that can be spelled more than one way get the most common form and are listed with their alternatives.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `mode` (string, required): add: put diacritics in; fix: ş ţ to ș ț; remove: strip them
- `output` (string): Write the result to this file instead of returning it
- `overwrite` (boolean)
- `text` (string)

### `text_stats` (~63 tokens)

Text statistics

Counts words, characters (with and without spaces), sentences, paragraphs, lines and unique words; reading and speaking time; top keywords with their density.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `text` (string)

### `text_case` (~183 tokens)

Change case and clean up text

Converts text to a case (upper, lower, sentence, title, capitalize, inverse, alternating, camel, pascal, snake, constant, kebab, dot) or cleans it up (trim spaces, collapse blank lines, join lines, unwrap lines broken by PDF copies, straight quotes, sort, dedupe or reverse lines). Locale-aware (Turkish i, Romanian ș).

Input parameters:

- `case` (string)
- `cleanup` (array): Applied in order, before `case`
- `file` (string): Read the text from this file instead (UTF-8)
- `lang` (string): BCP 47 language for case rules, e.g. "tr", "ro" (default en)
- `output` (string): Write the result to this file instead of returning it
- `overwrite` (boolean)
- `text` (string)

### `text_diff` (~116 tokens)

Compare two texts

Line-by-line comparison of two texts or files, as a unified diff (like `diff -u`), with the number of lines added and removed.

Input parameters:

- `context` (integer): Unchanged lines shown around each change (default 3)
- `ignoreCase` (boolean)
- `ignoreWhitespace` (boolean): Ignore spaces at the start and end of lines
- `left` (string): Original text
- `leftFile` (string)
- `right` (string): Changed text
- `rightFile` (string)

### `base64` (~176 tokens)

Base64 and URL encoding

Encodes text or any file to Base64 (optionally URL-safe or wrapped at 76 columns, e.g. for data: URLs and e-mail), decodes Base64 back to text or to a file, and percent-encodes or decodes URLs.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `fullUrl` (boolean): URL modes: keep : / ? # & = (encodeURI) instead of encoding a single component
- `mode` (string, required)
- `output` (string): Write the result here; needed when decoded bytes are not text
- `overwrite` (boolean)
- `text` (string)
- `urlSafe` (boolean): Base64url alphabet without padding
- `wrap` (boolean): Wrap Base64 at 76 characters

### `password_generate` (~200 tokens)

Generate passwords

Generates passwords, passphrases (EFF long word list, 7,776 words) or PINs with a cryptographically secure random generator, without modulo bias, and reports their entropy and strength.

Input parameters:

- `capitalize` (boolean)
- `count` (integer)
- `digits` (boolean)
- `exclude` (string): Characters never to use
- `kind` (string): Default password
- `length` (integer): Password (default 20) or PIN (default 6) length
- `lower` (boolean)
- `noAmbiguous` (boolean): Leave out I l 1 | O 0 o and quotes
- `number` (boolean): Add a digit to one passphrase word
- `separator` (string): Passphrase separator (default "-")
- `symbols` (boolean): All four default to true
- `upper` (boolean)
- `words` (integer): Passphrase words (default 6)

### `uuid` (~107 tokens)

Generate or inspect UUIDs

Generates random UUIDs (v4) or time-ordered ones (v7, sortable by creation time), or inspects a UUID: its version, variant and, for v7, the time it was made.

Input parameters:

- `braces` (boolean)
- `count` (integer)
- `hyphens` (boolean): Default true
- `inspect` (string): A UUID to read instead of generating
- `upper` (boolean)
- `version` (string): Default 4

### `markdown_to_html` (~111 tokens)

Markdown to HTML

Converts Markdown (GitHub flavour: tables, task lists, fenced code) to an HTML fragment, or to a complete styled HTML page titled after the first heading.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `output` (string): Default: <file>.html next to a Markdown file; otherwise returned
- `overwrite` (boolean)
- `page` (boolean): A full HTML document with styles (default true)
- `text` (string)

### `regex_test` (~141 tokens)

Test a regular expression

Runs a JavaScript regular expression on a text: every match with its position and capture groups (numbered and named), and optionally the text with a replacement applied.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `flags` (string): e.g. "gi" (default "g")
- `limit` (integer): Matches listed (default 100)
- `pattern` (string, required): Without slashes, e.g. "(\d{4})-(\d{2})"
- `replace` (string): Replacement, with $1, $<name> and $&
- `text` (string)

### `regex_generate` (~212 tokens)

Write a regular expression

Writes a JavaScript regular expression, without AI: from examples of what should (and optionally should not) match, worked out run by run and checked on every example; or from a description, picked from a library of common patterns (email, URL, IP, IBAN, Romanian CNP/CUI/plates/phones, dates, times, money, UUID...); or from a format such as "DD.MM.YYYY" or "AA 99 AAA" (9 a digit, A an upper-case letter, a lower-case, X letter or digit, DD/MM/YYYY/HH/mm date and time parts, \ for a literal).

Input parameters:

- `counterExamples` (array): Values that must not match
- `description` (string): What to match, in words (any language) or as a format like DD.MM.YYYY
- `examples` (array): Values that must match
- `whole` (boolean): Match whole values with ^...$ (default true); false finds the pattern inside text

### `text_summarize` (~118 tokens)

Summarize a text

Extractive summary in any language: the sentences that best stand for the whole text (TextRank on TF-IDF), word for word and in their original order. No AI model, nothing invented.

Input parameters:

- `file` (string): Read the text from this file instead (UTF-8)
- `output` (string): Write the summary to this file instead of returning it
- `overwrite` (boolean)
- `share` (number): Share of the sentences to keep (default 0.25)
- `text` (string)

### `lorem_ipsum` (~73 tokens)

Lorem ipsum

Placeholder text: paragraphs, sentences or words, optionally starting with the classic "Lorem ipsum dolor sit amet" and wrapped in <p> tags.

Input parameters:

- `classic` (boolean): Default true
- `count` (integer): Default 3
- `html` (boolean)
- `unit` (string): Default paragraphs

### `translate` (~205 tokens)

Translate text offline

Translates text or a text file (.txt, .md, .srt, .vtt, .csv) between en, ro, de, fr, es, it, pt, nl, pl, hu, cs, bg, uk, tr, ru with OPUS-MT and M2M100 AI models, on this machine. Lines, paragraphs and subtitle timings are kept. The source language is detected when left out. The first call installs Transformers.js with ONNX Runtime (about 450 MB); each model is downloaded once (OPUS-MT about 113 MB, M2M100 about 632 MB).

Input parameters:

- `file` (string)
- `from` (string): Default: detected
- `output` (string): For a file, default <name>.<to><ext> next to it
- `overwrite` (boolean)
- `text` (string): Text to translate, instead of a file
- `to` (string, required)

### `unit_convert` (~318 tokens)

Convert units

Converts a value between units of one category, including temperature and fuel economy. Units by id: length: m, km, cm, mm, um, mi, yd, ft, in, nmi; mass: kg, g, mg, t, lb, oz, st, ct; volume: l, ml, m3, cm3, galus, galuk, qt, pt, cup, floz, tbsp, tsp; area: m2, km2, ha, cm2, mi2, ac, yd2, ft2, in2; temperature: c, f, k; speed: ms, kmh, mph, kn, fts, mach; time: ms, s, min, h, d, wk, mo, yr; data: bit, B, KB, MB, GB, TB, PB, KiB, MiB, GiB, TiB; energy: j, kj, cal, kcal, wh, kwh, btu, ev; power: w, kw, mw, hp, ps, btuh; pressure: pa, kpa, mpa, bar, mbar, atm, psi, mmhg; angle: deg, rad, grad, turn; fuel: kml, l100, mpgus, mpguk.

Input parameters:

- `from` (string, required): Unit id, e.g. "mi"
- `to` (string): Unit id; leave out to get every unit of the category
- `value` (number, required)

### `currency_convert` (~118 tokens)

Convert currencies

Converts an amount between currencies at the European Central Bank reference rates (published each working day, via the Frankfurter API). Only the rate list is fetched; the amount stays on this machine.

Input parameters:

- `amount` (number, required)
- `from` (string, required): ISO code, e.g. "EUR"
- `to` (array): ISO codes; leave out for RON, EUR, USD, GBP, CHF, HUF, PLN, CZK, SEK, NOK, DKK, TRY, JPY, CNY, CAD, AUD

### `timestamp_convert` (~161 tokens)

Unix timestamps and time zones

Turns a Unix timestamp (seconds, ms, µs or ns, detected by length) or a wall-clock date and time in a zone into the instant in UTC, the time in other IANA zones (with daylight saving) and every timestamp unit. With nothing given it uses now.

Input parameters:

- `date` (string): Wall time "YYYY-MM-DDTHH:mm[:ss]" in `zone`, instead of a timestamp
- `timestamp` (string): e.g. "1760270400" or "1760270400123"
- `unit` (string)
- `zone` (string): IANA zone for `date` (default UTC)
- `zones` (array): Zones to show the instant in (default UTC and this machine’s zone)

### `color_convert` (~157 tokens)

Colour formats and contrast

Converts a colour (hex, rgb(), hsl(), hwb(), hsv(), cmyk(), lab(), lch(), oklab(), oklch(); not CSS names) to every format. With `background`, gives the WCAG 2 contrast ratio, the AA/AAA verdicts and, when it fails, the nearest colour that passes. Can add a tint/shade scale and harmonies.

Input parameters:

- `background` (string): Check contrast against this colour
- `color` (string, required)
- `harmonies` (boolean)
- `scale` (boolean): Nine tints and shades, light to dark
- `target` (number): Contrast ratio to fix towards (default 4.5, AA for normal text)

### `nutrition_targets` (~192 tokens)

Daily calorie and macro targets

Daily calories, protein, carbohydrates, fat, fibre and water for an adult, from the Mifflin-St Jeor resting energy times an activity factor, with 250-750 kcal taken off to lose weight or added to gain (never below 1200 kcal for women, 1500 for men). Also BMI. Estimates, not medical advice.

Input parameters:

- `activity` (string, required): sedentary (desk job), light (exercise 1-3 days/week), moderate (3-5), active (6-7), veryActive (physical job or twice a day)
- `age` (number, required): Years
- `goal` (string): kcal a day: loseFast -750, lose -500, loseSlow -250, maintain (default), gainSlow +250, gain +500
- `height` (number, required): cm
- `sex` (string, required)
- `weight` (number, required): kg

### `food_search` (~143 tokens)

Search everyday foods

Looks up everyday foods (fruit, vegetables, grains, dairy, meat, fish, legumes, nuts, fats, sweets, drinks, dishes) in a built-in list of about 170, with Romanian dishes, and gives their calories and macros per 100 g and a usual portion. Names match in the chosen language, in English or in any other. Offline.

Input parameters:

- `category` (string)
- `language` (string): Language of food and recipe names; default en
- `limit` (integer): Default 10
- `query` (string, required): e.g. "chicken breast", "măr", "sarmale"; empty lists the category

### `meal_nutrition` (~80 tokens)

Nutrition of a meal

Adds up the calories and macros of foods from food_search (by id) in grams or portions, item by item and in total. For packaged food, pass its values per 100 g from food_barcode as a custom item.

Input parameters:

- `items` (array, required)
- `language` (string): Language of food and recipe names; default en

### `food_barcode` (~109 tokens)

Packaged food by barcode

Calories and macros of a packaged product from its EAN/UPC barcode (8, 12, 13 or 14 digits), from Open Food Facts. Only the code is sent. Use code_read first to get the code from a photo.

Input parameters:

- `code` (string, required): Digits only, e.g. "5449000000996"
- `grams` (number): Also give the values for this amount
- `language` (string): Language of food and recipe names; default en

### `recipe_suggest` (~110 tokens)

Recipe ideas for what is left of the day

Suggests built-in recipes (breakfast, lunch, dinner, snack; Romanian dishes included) whose serving fits the calories left, preferring protein-rich ones, with nutrition per serving, ingredients and steps in the chosen language.

Input parameters:

- `kcal` (number, required): Calories left for the day
- `language` (string): Language of food and recipe names; default en
- `limit` (integer): Default 3
- `meal` (string)
- `protein` (number): Protein left, g

### `qr_create` (~324 tokens)

Create a QR code

Makes a QR code as SVG (styled dots and eyes, any size) or PNG (square modules) from text, a link, Wi-Fi login, e-mail, phone, SMS, contact card, location or calendar event. Fields per type: url: url; text: text; wifi: ssid, password, security, hidden; email: to, subject, body; phone: phone; sms: phone, message; vcard: firstName, lastName, phone, email, company, title, website, street, city, zip, country; location: lat, lng; event: title, start, end, location, description. UTF-8, so diacritics and emoji work.

Input parameters:

- `background` (string): Hex or "transparent", default #ffffff
- `color` (string): Hex, default #000000
- `dotStyle` (string): SVG only
- `eyeDotStyle` (string): SVG only
- `eyeFrameStyle` (string): SVG only
- `fields` (object): Fields of the type, e.g. {"ssid":"Home","password":"..."}
- `level` (string): Error correction (default M)
- `margin` (integer): Quiet zone in modules (default 4)
- `output` (string, required): .svg or .png file
- `overwrite` (boolean)
- `size` (integer): PNG width in pixels (default 1024)
- `text` (string): Shortcut for type text / the url of type url
- `type` (string): Default text

### `barcode_create` (~268 tokens)

Create a barcode

Makes a barcode as SVG (sized in mm, prints at exact size) or PNG (at a DPI, written into the file): EAN-13, EAN-8, UPC-A, UPC-E, ISBN, Code 128, Code 39, Code 93, ITF-14, Interleaved 2 of 5, GS1-128, Codabar, Data Matrix, GS1 Data Matrix, PDF417 and Aztec. EAN/UPC check digits are added when left out.

Input parameters:

- `background` (string): Hex or "transparent"
- `color` (string)
- `dpi` (integer): PNG resolution (default 300)
- `heightMM` (number): Bar height in mm (1D codes)
- `moduleMM` (number): Narrowest bar in mm (default per type, e.g. 0.33 for EAN)
- `output` (string, required): .svg or .png file
- `overwrite` (boolean)
- `showText` (boolean): Human-readable line under 1D codes (default true)
- `text` (string, required): The value, e.g. "590123412345" or "(01)09501101530003(17)271231"
- `type` (string, required)

### `code_read` (~101 tokens)

Read QR codes and barcodes

Finds and decodes every QR code, Micro QR, Data Matrix, Aztec, PDF417 and 1D barcode (EAN, UPC, Code 128/39/93, ITF, Codabar, DataBar) in a PNG, JPEG, GIF or BMP image, and explains the content: Wi-Fi login, contact card, event, payment, GS1 fields, product code or link (with its domain).

Input parameters:

- `files` (array, required)

### `image_convert` (~211 tokens)

Convert, compress and resize images

Re-encodes JPEG, PNG, WebP, AVIF and JPEG XL images with the Squoosh codecs (MozJPEG, OxiPNG, libwebp, libavif, libjxl): convert between formats, compress at a quality, and shrink to a maximum width/height or a percentage (Lanczos3, aspect kept, never enlarged). Metadata is not carried over.

Input parameters:

- `background` (string): Fill for transparent pixels when writing JPEG (default #ffffff)
- `files` (array, required)
- `format` (string): Default same as the input
- `lossless` (boolean): WebP, AVIF and JPEG XL
- `maxHeight` (integer)
- `maxWidth` (integer)
- `outputDir` (string): Default: <name>-converted.<ext> next to each input
- `overwrite` (boolean)
- `quality` (integer): Lossy formats (default 80)
- `scale` (number): Percent of the original size

### `image_to_svg` (~141 tokens)

Image to SVG (vectorize)

Traces a JPEG, PNG, WebP, AVIF or JPEG XL into an SVG of filled paths (imagetracerjs). Best for logos, icons, drawings and scans with few colours. Presets: logo (8 colours), detailed (48), mono (black and white), gray, smooth.

Input parameters:

- `colors` (integer): Overrides the preset
- `file` (string, required)
- `maxSide` (integer): Longest side traced, in pixels (default 1000)
- `output` (string): Default: <name>.svg next to the input
- `overwrite` (boolean)
- `preset` (string): Default logo

### `images_to_pdf` (~133 tokens)

Images to PDF

Puts images into one PDF, one per page, in the order given: A4 or Letter (orientation from each image, or fixed) with a margin, or pages the size of each image. JPEG and PNG go in untouched; WebP, AVIF and JPEG XL are converted to JPEG at quality 90.

Input parameters:

- `files` (array, required)
- `marginMM` (number): Default 10
- `orientation` (string)
- `output` (string, required): PDF path
- `overwrite` (boolean)
- `pageSize` (string): Default a4
- `title` (string)

### `favicon_create` (~174 tokens)

Favicon pack from an image

Makes the usual favicon set from a logo (JPEG, PNG, WebP, AVIF or JPEG XL): favicon.ico (16, 32, 48 px), 16/32 px PNGs, apple-touch-icon, the Android 192/512 icons and site.webmanifest, centred on a square with optional padding and background, plus the <link> tags to paste into <head>.

Input parameters:

- `background` (string): Hex fill behind the image (default transparent)
- `file` (string, required)
- `name` (string): App name for the manifest
- `outputDir` (string, required): Folder for the files
- `overwrite` (boolean)
- `paddingPercent` (number): Space around the image (default 0)
- `themeColor` (string): Manifest colour (default the background or #ffffff)

### `logo_create` (~256 tokens)

Simple logo as SVG

Builds a text logo as SVG: a shape with initials (circle, rounded, square, hexagon, diamond, shield) beside or above the name and tagline, or the text alone. Colour presets: forest, ocean, sunset, mono, royal; any colour can be overridden. The text uses common system fonts, so it may look slightly different on other machines.

Input parameters:

- `background` (string): Default transparent
- `bold` (boolean): Default true
- `font` (string): Default sans
- `gradient` (boolean): Default true
- `layout` (string): Default stacked
- `letterSpacing` (number): Percent of the font size (default 0)
- `letters` (string): Mark inside the shape (default the initials of the name)
- `markColor` (string)
- `name` (string, required)
- `output` (string, required): .svg file
- `overwrite` (boolean)
- `preset` (string): Default forest
- `shape` (string): Default circle
- `shapeColor` (string)
- `shapeColor2` (string): End of the gradient
- `tagline` (string)
- `taglineColor` (string)
- `textColor` (string)

### `gif_create` (~147 tokens)

Animated GIF from images

Joins JPEG, PNG, WebP, AVIF or JPEG XL images into an animated GIF, in the order given, each fitted (or cropped to fill) on a frame of one size.

Input parameters:

- `background` (string): Hex, behind contained frames (default #ffffff)
- `delayMs` (integer): Time per frame (default 500)
- `files` (array, required)
- `fit` (string): Default contain
- `height` (integer)
- `loop` (boolean): Default true
- `output` (string, required): .gif path
- `overwrite` (boolean)
- `width` (integer): Default: the first image, at most 800 px wide

### `image_palette` (~68 tokens)

Colour palette of an image

The main colours of a JPEG, PNG, WebP, AVIF or JPEG XL image (k-means in OKLab, transparent pixels ignored), largest share first, as hex, RGB and OKLCH.

Input parameters:

- `colors` (integer): Default 6
- `file` (string, required)

### `image_metadata_read` (~78 tokens)

Read image metadata

Shows what a photo reveals: GPS position (with a map link), camera and lens, date taken, author and copyright, software and exposure, from EXIF, XMP and IPTC in JPEG, PNG, WebP, HEIC, AVIF and TIFF. Use image_strip_metadata to remove it.

Input parameters:

- `file` (string, required)

### `image_remove_background` (~198 tokens)

Remove the background of a photo

Cuts the subject (people, products, animals, objects) out of a JPEG, PNG, WebP, AVIF or JPEG XL photo with the ormbg AI model, on this machine. Writes a transparent PNG, WebP or AVIF, or the subject on a new colour; can crop to the subject. The first call installs Transformers.js with ONNX Runtime (about 450 MB) and downloads the model (45 MB) into the cache.

Input parameters:

- `background` (string): Fill behind the subject (default transparent)
- `crop` (boolean): Trim to the subject (default false)
- `files` (array, required)
- `format` (string): Default png; jpeg needs a background
- `outputDir` (string): Default: <name>-no-bg.<ext> next to each input
- `overwrite` (boolean)
- `quality` (integer): webp, avif and jpeg (default 90)

### `invoice_to_pdf` (~206 tokens)

Invoice PDF

Makes an A4 invoice, proforma or quote PDF: seller and buyer, dates, line items with VAT rates, totals with VAT per rate (rounded per rate, as accountants check them), payment details, notes and an optional PNG/JPEG logo. Labels and number/date formats in 14 languages. Not an e-Factura (no XML is made).

Input parameters:

- `buyer` (object, required)
- `currency` (string): e.g. RON, EUR (default RON)
- `dueDate` (string): YYYY-MM-DD
- `issueDate` (string, required): YYYY-MM-DD
- `items` (array, required)
- `kind` (string): Default invoice
- `lang` (string): Labels and formats (default en)
- `logo` (string): PNG or JPEG file
- `notes` (string)
- `number` (string, required)
- `output` (string, required): PDF path
- `overwrite` (boolean)
- `seller` (object, required)

### `ocr_image` (~195 tokens)

OCR: text from images

Reads the text in JPEG, PNG, WebP, AVIF or JPEG XL images (scans, screenshots, photos of documents) with Tesseract on this machine. Languages: eng, ron, deu, fra, spa, ita, hun, por, nld, pol, ces, bul, ukr, tur (combine them, e.g. ["ron","eng"]). Low-confidence guesses are dropped; Romanian ş ţ become ș ț. The first use of a language downloads its model (2-15 MB) from app.ionelul.com and caches it; images never leave this machine.

Input parameters:

- `files` (array, required)
- `languages` (array): Default ["eng"]
- `layout` (string): Join lines into paragraphs (default) or keep every line break
- `output` (string): Write all the text to this .txt file instead of returning it
- `overwrite` (boolean)

### `video_convert` (~353 tokens)

Convert and compress video

Converts any video ffmpeg on this machine can read (AVI, WMV, FLV, MPEG, H.266/VVC with ffmpeg 7+…) to MP4, MOV, MKV, WebM, MPEG-TS or AVI, or extracts the sound to MP3, M4A, OGG or WAV. Picks the video codec (H.264, H.265, AV1, VP9, VP8) and audio codec, or copies the streams with no re-encode (videoCodec/audioCodec "copy", e.g. MKV to MP4). Can shrink to a maximum height (aspect kept, never enlarged), cap the frame rate, trim to a start/end and drop the sound. Needs ffmpeg installed.

Input parameters:

- `audioCodec` (string): Default: the format's first (aac, opus for webm/ogg, mp3, pcm); "copy" keeps it
- `end` (number): Seconds
- `file` (string, required)
- `format` (string): Default: from the output extension, else mp4
- `fps` (number): Frame rate cap
- `maxHeight` (integer): e.g. 1080, 720, 480
- `mute` (boolean): Drop the sound
- `output` (string): Default: <name>.<format> next to the input (<name>-converted.<format> for the same extension)
- `overwrite` (boolean)
- `quality` (string): Lower means smaller files (default medium)
- `start` (number): Seconds
- `videoCodec` (string): Default: h264, or vp9 for webm; "copy" keeps the original stream

### `video_to_gif` (~162 tokens)

GIF from a video

Turns a clip of a video (at most 60 s) into an animated GIF with ffmpeg on this machine, using a palette made for that clip. Pick the part with start/end; frame rate and width keep the file small. Needs ffmpeg installed.

Input parameters:

- `end` (number): Seconds (default: the end of the video, at most 60 s after start)
- `file` (string, required)
- `fps` (integer): Default 10
- `loop` (boolean): Default true
- `output` (string): .gif path (default: <name>.gif next to the video)
- `overwrite` (boolean)
- `start` (number): Seconds
- `width` (integer): Default 480 (never enlarged)

### `video_upscale` (~233 tokens)

AI video upscaling

Enlarges a video (or a clip of it, at most 60 s) 2x or 4x with Real-ESRGAN, frame by frame, on this machine; results up to 4K. Reads anything ffmpeg reads, including OpenCV MPEG-4 (mp4v); writes H.264 MP4 with the sound kept. Every frame goes through the model, so expect about 0.5 s per 480p frame on a recent CPU. The first call installs ONNX Runtime (about 113 MB) and downloads the model (5 MB). Needs ffmpeg installed.

Input parameters:

- `end` (number): Seconds (default: the end, at most 60 s after start)
- `file` (string, required)
- `model` (string): general for live action (default), anime for animation (about twice as fast)
- `output` (string): .mp4 path (default: <name>-<scale>x.mp4 next to the video)
- `overwrite` (boolean)
- `scale`: Default 2
- `start` (number): Seconds

### `video_frames` (~246 tokens)

Frames from a video

Saves still images from a video with ffmpeg on this machine: one every N seconds, a set number spread over the clip, one at each scene change, or every frame (at most 500). Files are PNG, JPG or WebP named by their time (name-00m02s000.png), in a folder next to the video. Needs ffmpeg installed.

Input parameters:

- `count` (integer): Frames for count (default 12)
- `end` (number): Seconds
- `every` (number): Seconds between frames for interval (default 1)
- `file` (string, required)
- `folder` (string): Default: <name>-frames next to the video
- `format` (string): Default png
- `mode` (string, required): interval: every `every` seconds; count: `count` frames spread evenly; scenes: the first frame of each shot; all: every frame
- `overwrite` (boolean): Replace frames with the same names
- `sensitivity` (number): Scene detection, higher finds smaller changes (default 50)
- `start` (number): Seconds
- `width` (integer): Shrink to this width (never enlarged)

### `video_remove_background` (~255 tokens)

Remove a video background by its colour

Keys out a plain background (green screen, blue screen, a plain wall) with ffmpeg on this machine. The colour is found from the edges of the first frame, or given as hex. Writes a transparent WebM (VP9 with alpha, for video editors and the web) or an MP4 on a new background colour; the sound is kept. For people or objects in front of an ordinary background, use the AI version on app.ionelul.com/video-background-remover. Needs ffmpeg installed.

Input parameters:

- `background` (string): Put the subject on this colour and write MP4; omit for a transparent WebM
- `color` (string): Background colour to remove, e.g. "#00b140" (default: detected from the frame edges)
- `end` (number): Seconds
- `file` (string, required)
- `output` (string): Default: <name>-transparent.webm or <name>-background.mp4 next to the video
- `overwrite` (boolean)
- `softness` (number): Edge softness (default 10)
- `start` (number): Seconds
- `tolerance` (number): How far from the colour still counts as background (default 30)

### `audio_denoise` (~180 tokens)

Remove background noise

Turns down background noise (fans, traffic, hum, keyboard) in a recording and keeps the voice, with RNNoise on this machine. Takes any audio or video ffmpeg reads; writes WAV, MP3, M4A, FLAC or OGG by the output extension (default <name>-clean.wav), or, for a video, the same video with the cleaned sound when the output is a video file. The sound comes out mono. Needs ffmpeg installed.

Input parameters:

- `amount` (number): 1 removes as much as it can (default); lower blends some of the original back
- `file` (string, required)
- `output` (string): Default: <name>-clean.wav next to the input; a .mp4/.mov/.mkv/.webm output keeps the video
- `overwrite` (boolean)

### `speech_to_text` (~208 tokens)

Transcribe speech

Transcribes speech from any audio or video file ffmpeg can read with OpenAI Whisper, on this machine: plain text, SRT or WebVTT subtitles, or text with timestamps. About 100 languages, detected automatically; can also translate the speech into English. Models: tiny (41 MB), base (77 MB), small (249 MB); bigger is slower and more accurate. Needs ffmpeg. The first call installs Transformers.js with ONNX Runtime (about 450 MB) and downloads the model into the cache.

Input parameters:

- `file` (string, required)
- `format` (string): Default txt
- `language` (string): ISO 639-1 code such as "ro" (default: detected)
- `model` (string): Default base
- `output` (string): Default: <name>.<format> next to the input (.txt for timestamped)
- `overwrite` (boolean)
- `task` (string): translate gives English text (default transcribe)

### `image_upscale` (~170 tokens)

AI image upscaling

Enlarges JPEG, PNG, WebP, AVIF or JPEG XL images 2x or 4x with Real-ESRGAN (AI that restores detail), on this machine. Transparency is kept. The first call installs ONNX Runtime (about 113 MB) and downloads the model (5 MB) into the cache.

Input parameters:

- `files` (array, required)
- `format` (string): Default same as the input
- `model` (string): general for photos (default), anime for drawings, cartoons and anime (faster)
- `outputDir` (string): Default: <name>-<scale>x.<ext> next to each input
- `overwrite` (boolean)
- `quality` (integer): Lossy formats (default 90)
- `scale`: Default 2

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp#diagnostics

## Score history

- 2026-11-05: 66
- 2026-11-04: 65
- 2026-11-03: 65
- 2026-11-02: 65
- 2026-11-01: 64
- 2026-10-31: 64
- 2026-10-30: 63
- 2026-10-29: 63
- 2026-10-28: 62
- 2026-10-27: 62
- 2026-10-26: 61
- 2026-10-25: 61
- 2026-10-24: 60
- 2026-10-23: 60
- 2026-10-22: 49

## Common questions

### What is the app.ionelul.com tools MCP server?

app.ionelul.com tools is an MCP server listed in the public MCP registry as com.ionelul/app. Local tools: PDF, Office, e-Factura, OCR, images, video, speech, translation and nutrition. This page covers its npm package (app-ionelul-mcp).

### Is the app.ionelul.com tools MCP server safe to use?

app.ionelul.com tools scores 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 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 app.ionelul.com tools MCP server expose?

app.ionelul.com tools exposes 63 tools: pdf_info, pdf_merge, pdf_split, pdf_organize, pdf_edit, and 58 more. Their descriptions and schemas cost roughly 10,822 tokens of context every time the server is loaded.

### Is the app.ionelul.com tools MCP server still maintained?

app.ionelul.com tools is still listed as active in the MCP registry. We last reached this channel on 5 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 app.ionelul.com tools MCP server under?

app.ionelul.com 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.

## Links

- npm package: https://www.npmjs.com/package/app-ionelul-mcp
- Socket report: https://socket.dev/npm/package/app-ionelul-mcp
- Website: https://app.ionelul.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-ionelul-app/app-ionelul-mcp
