flatmark
Document to Markdown MCP server: PDF, Word, PowerPoint, Excel and HTML, with OCR for large files.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"flatmark": {
"url": "https://api.flatmark.dev/mcp/"
}
}
}Remote endpoints
https://api.flatmark.dev/mcp/streamable-httpWhat it can do
Tool inventory
Tools (3)
🟢convert_document(filename, content_base64, file)
Convert a document up to 8 MB to Markdown and return it directly. Pass the file as base64 in `content_base64`, or as a download link in `file`, and its name in `filename`. The extension decides the type: .pdf, .docx, .pptx, .xlsx, .html, .htm or .txt. Returns `markdown` and `meta` (`filename`, `length` in characters). PDFs come back as plain text without headings and without OCR. For scans, tables and page numbers, use `submit_conversion_job`. Works without an API key at the anonymous rate limit. Credits: 1 per call.
Input Schema
{
"type": "object",
"properties": {
"filename": {
"description": "The file name with its extension (.pdf, .docx, .pptx, .xlsx, .html, .htm or .txt). The extension decides how the file is read.",
"type": "string"
},
"content_base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The file content, base64-encoded. Up to 8 MB before encoding."
},
"file": {
"properties": {
"download_url": {
"description": "A public https URL of the file.",
"type": "string"
},
"file_id": {
"description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
"type": "string"
},
"mime_type": {
"type": "string"
},
"file_name": {
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"type": "object",
"default": null,
"description": "The file as a download link, instead of `content_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL."
}
},
"required": [
"filename"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}🟡submit_conversion_job(filename, content_base64, file, webhook_url)
Queue a document up to 25 MB and 200 pages for conversion with OCR and tables. Pass the file as base64 in `content_base64`, or as a download link in `file`, and its name in `filename` (.pdf, .docx, .pptx, .xlsx, .html, .htm or .txt). Returns `job_id`, `status` and `result_url`. Call `get_conversion_job` with the `job_id` until `status` is `succeeded` or `failed`. A conversion may take up to about 2 minutes. Optional `webhook_url`: a public http or https URL that receives a POST with the job's final state. The request carries `X-Appkit-Signature: sha256=<hex>`, an HMAC-SHA256 of the raw body keyed with the returned `webhook_secret` (shown only once). 3 delivery attempts. Requires an API key. The credits are refunded if the job fails. The uploaded file is deleted when the job finishes. Results are kept for 7 days after submission. Credits: 10 per call.
Input Schema
{
"type": "object",
"properties": {
"filename": {
"description": "The file name with its extension (.pdf, .docx, .pptx, .xlsx, .html, .htm or .txt). The extension decides how the file is read.",
"type": "string"
},
"content_base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The file content, base64-encoded. Up to 25 MB before encoding."
},
"file": {
"properties": {
"download_url": {
"description": "A public https URL of the file.",
"type": "string"
},
"file_id": {
"description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
"type": "string"
},
"mime_type": {
"type": "string"
},
"file_name": {
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"type": "object",
"default": null,
"description": "The file as a download link, instead of `content_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL."
},
"webhook_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. A public http or https URL that receives the job's final state."
}
},
"required": [
"filename"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}🟢get_conversion_job(job_id)
Check a queued conversion job you submitted. Returns `job_id` and `status` (`queued`, `running`, `succeeded` or `failed`). A succeeded job includes the `markdown` when it is under 100 KB, otherwise a `result_url` to download it (also free). A failed job includes `error`, one sentence with the reason. Results are deleted 7 days after submission. An expired result is reported in `error`. Requires an API key. Credits: free. This tool is not metered.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"description": "The `job_id` returned by `submit_conversion_job`.",
"type": "string"
}
},
"required": [
"job_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": true
}Community
Evidence