markitai
PYPI · MARKITAI
Convert documents, images and web pages to clean Markdown, for agents: single, URL and batch tools.
Available components
Last scanned (38 minutes ago)
Scores higher than 64% of PyPI 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 Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to Ynewtime/markitai). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 8 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability54
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2295 tokens (~573/item across 4 items; 4 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 Management63
- Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 4 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 5 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
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.
- 5 Nov 26 −14
- Malware scan: pass → unverified ▼ security
- 3 Nov 26 −6
- Stability: pass → 0.57 functional
- 28 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 27 Oct 26 0
- Malware scan: unverified → pass ▲ security
- Package version: 2.3.0 → 2.3.2 functional
- Package version: 2.3.0 → 2.3.1 functional
- 26 Oct 26 −14
- Malware scan: pass → unverified ▼ security
- Stability: 0.97 → pass security
- Package version: 2.2.0 → 2.3.0 functional
- 25 Oct 26 0
- Stability: 0.93 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Package version: 2.0.0 → 2.2.0 functional
- Package version: 2.0.0 → 2.1.0 functional
- 24 Oct 26 +4
- CVE-2026-47265 affects this package: high ▼ security
- CVE-2026-54273 affects this package: high ▼ security
- CVE-2026-111064 affects this package: high ▼ security
- CVE-2026-111066 affects this package: high ▼ security
- GHSA-2g87-pp6c-29x5 affects this package: high ▼ security
- CVE-2026-112907 affects this package: high ▼ security
- CVE-2026-111063 affects this package: high ▼ security
- CVE-2026-54276 affects this package: high ▼ security
- CVE-2026-112913 affects this package: high ▼ security
- CVE-2026-50269 affects this package: high ▼ security
- CVE-2026-54279 affects this package: high ▼ security
- CVE-2026-111065 affects this package: high ▼ security
- CVE-2026-111749 affects this package: high ▼ security
- CVE-2026-111750 affects this package: high ▼ security
- CVE-2026-69243 affects this package: high ▼ security
- CVE-2026-34993 affects this package: high ▼ security
- CVE-2026-54274 affects this package: high ▼ security
- CVE-2026-59881 affects this package: high ▼ security
- CVE-2026-54280 affects this package: high ▼ security
- CVE-2026-54277 affects this package: high ▼ security
- CVE-2026-54278 affects this package: high ▼ security
- CVE-2026-112940 affects this package: high ▼ security
- CVE-2026-54275 affects this package: high ▼ security
- CVE-2026-69244 affects this package: high ▼ security
- CVE-2026-25645 affects this package: high ▼ security
- CVE-2026-111748 affects this package: high ▼ security
- Malware scan: pass → unverified ▼ security
- Known CVEs: fail → pass ▲ security
- Install scripts: partial → pass ▲ security
- The code this package runs automatically changed: build-time code we could not rule out (a Hatch, PDM or setuptools build hook, a dynamic version we could not read statically, shipped VCS metadata or a stray root module) security
- Schema quality: 430 → 573 ▼ functional
- Dependency health: partial → pass ▲ functional
- Schema quality: excellent → good functional
- Package version: 1.2.0 → 2.0.0 functional
- 23 Oct 26 +15
- CVE-2026-47265 affects this package: high ▼ security
- CVE-2026-54273 affects this package: high ▼ security
- CVE-2026-111064 affects this package: high ▼ security
- CVE-2026-111066 affects this package: high ▼ security
- GHSA-2g87-pp6c-29x5 affects this package: high ▼ security
- CVE-2026-111063 affects this package: high ▼ security
- CVE-2026-54276 affects this package: high ▼ security
- CVE-2026-50269 affects this package: high ▼ security
- CVE-2026-54279 affects this package: high ▼ security
- CVE-2026-111065 affects this package: high ▼ security
- CVE-2026-111749 affects this package: high ▼ security
- CVE-2026-111750 affects this package: high ▼ security
- CVE-2026-69243 affects this package: high ▼ security
- CVE-2026-34993 affects this package: high ▼ security
- CVE-2026-54274 affects this package: high ▼ security
- CVE-2026-59881 affects this package: high ▼ security
- CVE-2026-54280 affects this package: high ▼ security
- CVE-2026-54277 affects this package: high ▼ security
- CVE-2026-54278 affects this package: high ▼ security
- CVE-2026-54275 affects this package: high ▼ security
- CVE-2026-69244 affects this package: high ▼ security
- CVE-2026-25645 affects this package: high ▼ security
- CVE-2026-111748 affects this package: high ▼ security
- Malware scan: unverified → pass ▲ security
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 5 Nov 2026 · Analysed pypi/markitai@2.3.2
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | Ynewtime/markitai |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/Ynewtime/markitai/.github/workflows/release.yml@refs/tags/v2.3.2 |
| Rekor log index | 3521005449 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:4719b24270e533df2437fe4625a4eeba16685df0303e1412a89e38e8dfff7648 |
Background: How many MCP packages publish verified provenance →
Dependencies 0 packages
| Packages resolved | 0 |
|---|---|
| Tree resolution | Complete |
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 →
batch_convert ~623
Convert many local files and/or URLs in the background; returns a job id at once. Items run concurrently and each writes under output_dir/batch-<job_id>/<item number>/ (0001, 0002, ...), so sources with the same name cannot overwrite each other. Poll job_status with the returned job_id for progress and the per-item results. All items share one LLM runtime, so llm.concurrency bounds the job's model requests as a whole. Jobs live in this server process only: a restart forgets them, but the written files remain. Args: sources: A nonempty list (at most 10,000) of absolute local file paths and/or http(s) URLs. A relative path is rejected before the job starts; a missing file or a failed conversion fails only its item, and the others continue. output_dir: Absolute parent directory for all outputs (created if missing). Omit, null or "" for a new markitai-mcp-* temporary directory; its path is returned. llm: LLM enhancement (clean-up and front matter). Omit or null to follow the server's configuration (llm.enabled, off by default); false forces it off; true enables it for this call, which may incur provider charges. It needs a model: MODEL (with its provider's API key) in the server's env block, a signed-in subscription runtime, or llm.model_list in the configuration; without one the call fails with setup guidance. ocr: Local OCR for scanned PDF pages and images (macOS Vision, or the portable PaddleOCR models `markitai doctor --fix` installs). Omit to follow the configuration. screenshot: Page screenshots (PDF pages; Office documents through LibreOffice when it is installed; web pages through the isolated Chromium). Omit to follow the configuration. alt: LLM alt text for pictures (needs llm enabled). desc: LLM picture descriptions (needs llm enabled). profile: Shape the output for a consumer: "rag", "obsidian" or "okf". Omit or null to follow the configuration. Omitted or null flags follow the server's configuration, reloaded for every cal…
| Name | Type | Req | Description |
|---|---|---|---|
| alt | – | – | – |
| concurrency | – | – | – |
| desc | – | – | – |
| llm | – | – | – |
| ocr | – | – | – |
| output_dir | – | – | – |
| profile | – | – | – |
| screenshot | – | – | – |
| sources | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
convert_document ~728
Convert one local document to Markdown. Handles PDF, Word, PowerPoint and Excel (and their legacy and OpenDocument formats), EPUB, HTML, CSV/JSON, e-mail, notebooks, plain text and Markdown, and images, among others. Returns the Markdown plus the paths of everything written to disk. Args: path: Absolute path to one local file (~ is expanded). Directories are rejected (a .numbers package is one document); pass files individually or use batch_convert. output_dir: Absolute directory to write the outputs into (created if missing). Omit, null or "" for a new markitai-mcp-* temporary directory, which stays on disk; its path is returned. llm: LLM enhancement (clean-up and front matter). Omit or null to follow the server's configuration (llm.enabled, off by default); false forces it off; true enables it for this call, which may incur provider charges. It needs a model: MODEL (with its provider's API key) in the server's env block, a signed-in subscription runtime, or llm.model_list in the configuration; without one the call fails with setup guidance. ocr: Local OCR for scanned PDF pages and images (macOS Vision, or the portable PaddleOCR models `markitai doctor --fix` installs). Omit to follow the configuration. screenshot: Page screenshots (PDF pages; Office documents through LibreOffice when it is installed; web pages through the isolated Chromium). Omit to follow the configuration. alt: LLM alt text for pictures (needs llm enabled). desc: LLM picture descriptions (needs llm enabled). profile: Shape the output for a consumer: "rag", "obsidian" or "okf". Omit or null to follow the configuration. Omitted or null flags follow the server's configuration, reloaded for every call; a feature this build or machine cannot provide fails explicitly instead of being skipped. Returns: source; markdown: the enhanced Markdown when there is one, else the base Markdown, or a 2,000-character preview with truncated=true when it exceeds 40,000 characte…
| Name | Type | Req | Description |
|---|---|---|---|
| alt | – | – | – |
| desc | – | – | – |
| llm | – | – | – |
| ocr | – | – | – |
| output_dir | – | – | – |
| path | string | yes | – |
| profile | – | – | – |
| screenshot | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
convert_url ~595
Fetch a web page and convert it to clean Markdown. Uses markitai's fetch strategy (fetch.strategy, auto by default: a static HTTP fetch with main-content extraction, then the local Chromium, when installed, for pages that need JavaScript) and returns the main content as Markdown. A PDF or another document the URL serves is converted like a local file. A remote reader service (Jina, Defuddle, Cloudflare) is used only when the configuration selects one; auto never falls back to one here. Args: url: The http:// or https:// URL to fetch and convert. output_dir: Absolute directory to write the outputs into (created if missing). Omit, null or "" for a new markitai-mcp-* temporary directory, which stays on disk; its path is returned. llm: LLM enhancement (clean-up and front matter). Omit or null to follow the server's configuration (llm.enabled, off by default); false forces it off; true enables it for this call, which may incur provider charges. It needs a model: MODEL (with its provider's API key) in the server's env block, a signed-in subscription runtime, or llm.model_list in the configuration; without one the call fails with setup guidance. ocr: Local OCR for scanned PDF pages and images (macOS Vision, or the portable PaddleOCR models `markitai doctor --fix` installs). Omit to follow the configuration. screenshot: Page screenshots (PDF pages; Office documents through LibreOffice when it is installed; web pages through the isolated Chromium). Omit to follow the configuration. alt: LLM alt text for pictures (needs llm enabled). desc: LLM picture descriptions (needs llm enabled). profile: Shape the output for a consumer: "rag", "obsidian" or "okf". Omit or null to follow the configuration. Omitted or null flags follow the server's configuration, reloaded for every call; a feature this build or machine cannot provide fails explicitly instead of being skipped. Returns: The same shape as convert_document: source, markdown (or a previe…
| Name | Type | Req | Description |
|---|---|---|---|
| alt | – | – | – |
| desc | – | – | – |
| llm | – | – | – |
| ocr | – | – | – |
| output_dir | – | – | – |
| profile | – | – | – |
| screenshot | – | – | – |
| url | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
job_status ~294
Report the progress and results of a batch_convert job. Args: job_id: The id batch_convert returned. Returns: job_id; status: "running" until every item ended, then "completed" (also when items failed), or "cancelled" when the server shut down before every item started; total; done: items that succeeded, as in markitai serve; failed: items that failed; finished: done + failed, every item that ended (use it for progress); output_dir; results: one entry per finished item, {source, status: "ok", markdown_file, cost_usd, warnings} or {source, status: "error", error}, either with diagnostics and pricing when a model was called; and, when any item has pricing, the job's pricing and summed cost_usd. Poll until status is not "running", then read the markdown_file paths. Results keep the caller's order: once status is "completed", results[i] answers sources[i]; a running or cancelled job omits unfinished items, so match each result by its source then. Failure modes: an unknown job_id (jobs live in server memory and are lost when the server restarts) or a job that finished and was forgotten (the server keeps the 100 most recent finished jobs); the two errors say which, and the output files remain on disk.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the markitai MCP server?
markitai runs locally as a PyPI package, launched with uvx markitai. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · markitai
claude mcp add ynewtime-markitai -- uvx markitai
What is the markitai MCP server?
markitai is an MCP server listed in the public MCP registry as io.github.Ynewtime/markitai. Convert documents, images and web pages to clean Markdown, for agents: single, URL and batch tools. This page covers its PyPI package (markitai).
Is the markitai MCP server safe to use?
markitai scores 69 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. Its build provenance is signed and verified. 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 markitai MCP server expose?
markitai exposes 4 tools: convert_document, convert_url, batch_convert, job_status. Their descriptions and schemas cost roughly 2,240 tokens of context every time the server is loaded.
Is the markitai MCP server still maintained?
markitai 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 markitai MCP server under?
markitai declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.