Skip to main content
Glama
Narashiman-K

Suprasūtā Markdown Notes

by Narashiman-K

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 .docx, Excel .xlsx/.xls/.xlsm, PowerPoint .pptx, OpenDocument .odt/.ods, EPUB, CSV, TSV, plain text

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

convert_to_markdown

Converts one file and saves the .md beside the original automatically

convert_folder_to_markdown

Converts several files into a chosen directory

save_summary

Saves a summary the assistant wrote as <name>.summary.md beside the document

list_supported_formats

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-mcp

Then 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

GEMINI_API_KEY

Cloud OCR, which can also describe charts and diagrams

The image, to Google

ASSEMBLYAI_API_KEY

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 typecheck

Why 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

tesseractPaths

A browser needs URLs and its own worker; Node needs filesystem paths and must not be given the browser worker

docxSource

mammoth reads arrayBuffer in browsers and buffer under Node

ocrImageInput

tesseract's Node build cannot decode a Blob; it wants a Buffer

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 document too, and it broke OCR. tesseract.js sniffed for a DOM, found one, took the browser branch and died on window 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 web

This 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.

Available Tools

4 tools
convert_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesAbsolute paths of the files to convert.
output_directoryYesAbsolute directory to write each .md file into.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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".

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the file to convert.
saveNoSet false to skip writing the .md file. Default true — the file is saved beside the original without needing to be asked for.
save_toNoAbsolute path to write the .md to, overriding the default of beside the original.
ocr_modeNoFor 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.
overwriteNoSet 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_contentNo"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

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional heading for the summary. Defaults to the document name.
summaryYesThe summary, as Markdown. Headings and lists are fine.
source_pathYesAbsolute path of the document being summarised — either the original file or the converted .md. The summary is written beside it.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.1.0
    • First observedconvert_folder_to_markdown
    • First observedconvert_to_markdown
    • First observedlist_supported_formats
    • First observedsave_summary

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers