Suprasūtā Markdown Notes
The server converts local documents (PDF, Word, Excel, PowerPoint, OpenDocument, EPUB, CSV, TSV, plain text, images via OCR, and audio via transcription) into clean Markdown, saving the output alongside the original or to a chosen location, with options to control content return and overwrite behavior. It can also batch-convert folders, automatically save AI-generated summaries beside documents, and list supported formats and optional cloud feature status.
Single file conversion:
convert_to_markdownhandles many file types, returns short docs fully or long ones as a preview, can save with custom path/overwrite, and supports offline or cloud OCR for images.Batch conversion:
convert_folder_to_markdownconverts multiple files into a specified output directory and reports results.Summary saving:
save_summarystores a markdown summary next to the original document, with optional title.Format listing:
list_supported_formatsreports supported extensions and whether cloud features (Gemini OCR, AssemblyAI transcription) are configured.
Provides cloud OCR via Google's Gemini API, enabling OCR on images and description of charts and diagrams.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Suprasūtā Markdown NotesConvert D:\reports\quarterly.pdf to markdown and show me the summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Suprasūtā Markdown Notes — MCP server
Let Claude, VS Code and Antigravity read any document on your machine — without uploading it.
Created by Narashiman Krishnamurthy
Licence: free for personal, non-commercial use. See LICENSE.md.
What it does
AI assistants can read plain text, and some can read PDFs. None of them read EPUB, OpenDocument, PowerPoint or a scanned image, and all of them do it by uploading your file to a server.
This converts documents on your own machine and hands back Markdown that has been tidied for a model to read — tables promoted to real Markdown tables, deep indentation flattened, code properly fenced.
Documents | PDF, Word |
Images | OCR on the device, with no key and no network |
Audio | Transcription — the one feature that cannot run locally |
Related MCP server: Agent Helper
Tools
Tool | What it does |
| Converts one file and saves the |
| Converts several files into a chosen directory |
| Saves a summary the assistant wrote as |
| Lists the extensions, and which optional cloud features are configured |
About tokens
Converting costs you nothing — it all happens locally. But returning a long document into the conversation does cost tokens, at the same rate as pasting it in by hand.
So a long conversion is saved to disk and only a short preview comes back. A
50-page PDF costs roughly 400 tokens instead of 30,000. Short documents are
returned in full, since they are cheap either way. Ask for
return_content: "full" to override.
Installing
Claude Desktop — the easy way
Download the .mcpb file from
Releases and
double-click it. Claude Desktop installs it and asks which folders it may read,
and optionally for API keys. No Node, no terminal, no JSON.
Claude Desktop — from source
npm install
npm run build
node scripts/install-claude-desktop.mjs --roots "D:\your\documents"Then restart Claude Desktop completely. The script patches the existing config rather than replacing it, and writes a timestamped backup first.
--roots is optional but recommended: it limits which folders the server will
read. Without it, any path the assistant asks for is allowed.
To remove it again: node scripts/install-claude-desktop.mjs --remove
From npm — any MCP host
npm install -g suprasuta-markdown-mcpThen point your host at the suprasuta-markdown-mcp command, or run it without
installing:
{
"servers": {
"suprasuta-markdown": {
"command": "npx",
"args": ["-y", "suprasuta-markdown-mcp"],
"env": { "MARKDOWN_MCP_ROOTS": "D:\\your\\documents" }
}
}
}VS Code and Antigravity
Both read a standard MCP configuration — the block above works as-is.
Antigravity looks in ~/.gemini/config/mcp_config.json, or
.agents/mcp_config.json inside a workspace.
To run a checkout rather than the published package, replace command and
args with node and the absolute path to dist/server.js.
Optional cloud features
Both are dormant until a key is present. Everything else works without either.
Variable | Enables | What leaves your machine |
| Cloud OCR, which can also describe charts and diagrams | The image, to Google |
| Audio transcription | The audio file, to AssemblyAI |
Keys are read from the environment, never written to disk and never logged.
Settings are read once, at start-up. An MCP server is a long-running process, so a key or folder saved while it is running does not reach it until the host restarts. If a key you have just entered reports as not configured, restart the host before looking for anything more complicated.
Development
npm install # .npmrc sets include=dev — do not delete it
npm run build # stages the OCR engine, then bundles with esbuild
npm test # 19 tests against the built bundle
npm run smoke # converts every file in samples/ and reports
npm run typecheckWhy the build is esbuild rather than tsc
src/lib/convert/ is kept byte-identical to the copies in the Windows, web
and Android apps, so that drift can be detected rather than discovered. Those
files use extensionless imports and one Vite-specific ?url import, neither of
which Node's own resolver accepts. esbuild resolves both, so the shared files
never need Node-shaped edits.
The runtime hook
Three things genuinely differ between a browser and Node, and
src/lib/convert/runtime.ts asks the host rather than sniffing for process:
Hook | Why |
| A browser needs URLs and its own worker; Node needs filesystem paths and must not be given the browser worker |
| mammoth reads |
| tesseract's Node build cannot decode a |
Everything else is shared. src/runtime/node.ts supplies the Node answers and
shims exactly one browser global, DOMParser.
A caution learned the hard way: that file used to define
documenttoo, and it broke OCR. tesseract.js sniffed for a DOM, found one, took the browser branch and died onwindow is not defined. Half a browser is worse than none — shim the minimum.
Keeping the copies honest
npm run sync:check # list differences against all three apps
npm run sync:pull web # bring the web app's version in
node scripts/sync-converters.mjs --push webThis package is the canonical copy: it is the only one with the runtime hook
that lets identical files run in both environments, so fixes start here and
flow outward. sync:check reports and exits zero — drift is information, not a
build failure.
Privacy Policy
This software collects nothing. No account, no analytics, no telemetry, and no server of its own — document conversion happens entirely on your machine.
Two optional features send data to a third party, and only when you supply your own API key: cloud image recognition sends the image to Google, and audio transcription sends the audio to AssemblyAI. With no keys configured, the software makes no network connections at all. API keys are read from the environment, never written to disk and never logged.
Full policy, covering collection, storage, retention, third-party sharing and contact details: PRIVACY.md.
Related
Windows app | |
Web app | |
Android |
Available Tools
4 toolsconvert_folder_to_markdownA
Convert several documents at once and return a summary of what succeeded. Use when the user points at a set of files rather than one.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Absolute paths of the files to convert. | |
| output_directory | Yes | Absolute directory to write each .md file into. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does disclose that the tool returns a summary of what succeeded, implying partial failures are possible. However, it does not mention overwrite behavior, directory creation, or what happens with unsupported files, which would be useful for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core behavior and usage condition with no filler. The key distinguishing fact (batch conversion) is front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully described schema and no nested objects or output schema, the description is largely sufficient. It covers what the tool does, when to use it, and the nature of the return value, although details like output naming or conflict handling are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters ('paths' and 'output_directory') are already well documented. The description adds little parameter-level meaning beyond the schema, which is acceptable because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('convert'), a resource scope ('several documents at once'), and an outcome (returns a summary of what succeeded). It also distinguishes itself from the single-file sibling tool by explicitly framing this as the batch variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: use when the user points at a set of files rather than one. It provides a clear when-to-use signal and implicitly excludes single-file use, though it does not name the alternative tool directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_markdownA
Convert a document on this machine to clean Markdown. Handles PDF, Word (.docx), Excel (.xlsx/.xls/.xlsm), PowerPoint (.pptx), OpenDocument text and spreadsheets (.odt/.ods), EPUB, CSV/TSV and plain text. Images are read with OCR, and audio is transcribed. Conversion happens locally and the file is not uploaded, except for the image and audio cases noted in ocr_mode. Prefer this over reading a binary file directly.
The Markdown is SAVED AUTOMATICALLY as a .md file beside the original, so the user does not need to ask. Short documents are also returned in full; long ones come back as a preview plus the saved path, to avoid filling the conversation with tens of thousands of words. If you need more of a long document than the preview shows, call this again with return_content "full".
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file to convert. | |
| save | No | Set false to skip writing the .md file. Default true — the file is saved beside the original without needing to be asked for. | |
| save_to | No | Absolute path to write the .md to, overriding the default of beside the original. | |
| ocr_mode | No | For images only. "offline" (default) runs on this machine and uploads nothing. "cloud" sends the image to Google Gemini, which is more accurate and can describe charts, and requires GEMINI_API_KEY. | |
| overwrite | No | Set true to replace an existing .md of the same name. Default false, in which case a numbered name is used instead so nothing is destroyed. | |
| return_content | No | "auto" (default) returns the whole document if it is short, otherwise a preview and the saved path. "full" always returns everything — use only when the user genuinely needs the entire text in the conversation, as a long document can be tens of thousands of tokens. "none" saves and reports the path only, which is cheapest when the user just wants the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It reveals local processing, privacy caveats for image/audio OCR modes, automatic saving beside the original, overwrite behavior with numbered fallback, and the short-vs-long return behavior—all beyond what a name alone would imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: formats first, then processing behavior, then save and return behavior. It is longer than strictly minimal, but every sentence adds a useful operational detail, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations and no output schema, the description is remarkably complete. It covers supported formats, privacy, save location, overwrite behavior, return modes, and OCR options, leaving no essential operational gap for an agent deciding whether and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already documents all parameters at 100% coverage, the description adds meaningful practical context: the default save behavior, privacy implications of ocr_mode, token-cost warnings for return_content 'full', and the auto-preview behavior. This helps an agent choose parameter values based on user intent rather than just type constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: converting a document to clean Markdown, and enumerates all supported formats. It clearly identifies this as a single-file conversion tool, distinguishing it from convert_folder_to_markdown and list_supported_formats by scope and purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer this over reading a binary file directly, and gives concrete guidance on when to use return_content values such as 'full' for long documents. It also explains the default save behavior so the agent knows when not to ask the user for confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_formatsA
List the file extensions this server can convert, and report which optional cloud features are configured. Call this if a conversion fails as unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of explaining behavior. It discloses that the tool lists extensions and reports optional cloud feature configuration; both are non-mutating observational behaviors. While 'read-only' is not stated verbatim, the wording and zero-parameter schema make the tool's safe, informational nature clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the tool's primary output and the second gives the practical invocation context. The information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-annotation introspection tool, this is almost complete: it explains what is returned conceptually and when to use it. The only minor gap is that the exact shape of the response is unspecified, but no output schema exists and the tool's simplicity makes that a small omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is nothing for the description to clarify beyond what the schema shows. The baseline of 4 applies because parameter semantics are not a concern for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'List the file extensions this server can convert' and also reports configured cloud features. This clearly differentiates it from sibling conversion tools like convert_to_markdown or save_summary, which perform transformations or persistence rather than introspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit trigger condition: 'Call this if a conversion fails as unsupported.' This gives clear context for when to use the tool, though it does not enumerate when not to use it or explicitly contrast it with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_summaryA
Save a summary you have written about a document, as a .md file beside it. Call this WITHOUT being asked whenever you summarise, outline or answer a broad question about a document you converted — the user wants the summary kept, not just shown once in the chat. Do not call it for narrow factual lookups, and never invent a summary in order to save one: pass the text you actually produced.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional heading for the summary. Defaults to the document name. | |
| summary | Yes | The summary, as Markdown. Headings and lists are fine. | |
| source_path | Yes | Absolute path of the document being summarised — either the original file or the converted .md. The summary is written beside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it clearly discloses the file-writing side effect, the sidecar location, and the requirement to pass real generated text. It does not mention overwrite behavior or return value, but the core behavioral traits are explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries weight: the action, the when-to-use rule, and the don'ts are all stated without repetition or filler. The structure is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple side-effect tool with no output schema, the description covers when to use it, what to pass, and what not to do. It could add a note on overwriting an existing .md, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by requiring the summary parameter to be the text actually produced and clarifying that source_path refers to the converted document. This goes beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (save a summary), a precise resource (as a .md file beside the document), and clear conditions. It is obviously distinct from sibling conversion tools, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call it proactively whenever summarising, outlining, or answering a broad question about a converted document, and lists exclusions (narrow factual lookups) and a prohibition on inventing summaries. This is unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
convert_folder_to_markdown - First observed
convert_to_markdown - First observed
list_supported_formats - First observed
save_summary
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: convert one document, convert a folder, save a summary, and list supported formats. The only similar pair (single vs. folder conversion) is well differentiated by cardinality, and save_summary is explicitly limited to agent-written summaries rather than document conversion.
All tool names are lowercase snake_case and begin with imperative verbs, making the set predictable. There is a minor stylistic split between the convert_*_to_markdown pattern and plain verb_noun names like save_summary and list_supported_formats, but the overall convention is coherent.
Four tools is ideal for this narrow server: single-file conversion, batch conversion, summary persistence, and format discovery. Each tool earns its place and there is no redundancy.
The conversion workflow is fully covered: agents can convert one file or many, get content back, and handle unsupported formats. The notes side is thinner since save_summary only creates summaries with no server-side way to read, update, or delete them, but this is workable because summaries are saved as .md files on disk.
Maintenance
Related MCP Connectors
Convert documents and web pages to clean Markdown: PDF, DOCX, XLSX, EPUB, scanned files, any URL.
Convert PDF, DOCX, HTML, and URLs to clean, LLM-ready markdown with tables preserved
Parse PDF/Word/PPT/HTML to Markdown; tables as JSON, image extraction, RAG chunking, page ranges.
High-fidelity PDF to structured Markdown conversion and document field extraction.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA local document processing toolkit for AI agents that extracts text, converts PDFs to Markdown, merges files, extracts tables, and summarizes documents without external API dependencies.4 npm98 PyPIMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to process files locally — OCR images, extract text from PDFs and DOCX, and describe images using local vision models, all without sending data to external services.-
- AlicenseAqualityCmaintenanceConverts documents between Markdown, PDF, DOCX, and HTML locally with AI-friendly Markdown output and secure file access.69 npmMIT
- AlicenseNot gradedqualityCmaintenanceConverts PDFs, Office files, spreadsheets, emails, audio, and more to Markdown locally, enabling AI assistants to read and process them without cloud upload.MIT