Request
POST /v1/convert Authorization: Bearer <api_key> Content-Type: application/json
{ "url": "https://example.com/blog/post" }
Web pages are full of noise. Send a URL, get Markdown stripped of noise (ads, nav, clutter).
POST /v1/convert Authorization: Bearer <api_key> Content-Type: application/json
{ "url": "https://example.com/blog/post" }
{
"status": "success",
"data": {
"content": "# Example Post\n\nClean markdown content..."
}
} Same URL, same output.
No ads, navigation, or popups. Just the content.
One JSON schema. No surprises.
Native MCP server. Use it from any editor or coding agent.
Use PlainMarkdown as an MCP tool directly from your editor or agent.
Add to /.codex/config.toml
Add to opencode.json
or add to .vscode/mcp.json
Add to /.codeium/windsurf/mcp_config.json
or add to ~/.cursor/mcp.json
Add to claude_desktop_config.json
No subscriptions. Credits never expire.
/[...${a}]))}return n}catch{return e}}function s(e){return new RegExp(/${h(e)}(?=[/?#]|$))}function h(e){return e.replace(/[.*+?^${}()|[]\]/g,"\$&")}function y(e){return e.scriptSrc?e.scriptSrc:c()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?${e.basePath}/insights/script.js:"/_vercel/insights/script.js"}function g(e={debug:!0}){var r;if(!d())return;v(e.mode),w(),e.beforeSend&&((r=window.va)==null||r.call(window,"beforeSend",e.beforeSend));const n=y(e);if(document.head.querySelector(script[src*="${n}"]))return;const t=document.createElement("script");t.src=n,t.defer=!0,t.dataset.sdkn=f+(e.framework?/${e.framework}:""),t.dataset.sdkv=l,e.disableAutoTrack&&(t.dataset.disableAutoTrack="1"),e.endpoint?t.dataset.endpoint=e.endpoint:e.basePath&&(t.dataset.endpoint=${e.basePath}/insights),e.dsn&&(t.dataset.dsn=e.dsn),t.onerror=()=>{const a=c()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log([Vercel Web Analytics] Failed to load script from ${n}. ${a})},c()&&e.debug===!1&&(t.dataset.debug="false"),document.head.appendChild(t)}function p({route:e,path:r}){var n;(n=window.va)==null||n.call(window,"pageview",{route:e,path:r})}function k(){try{return}catch{}}customElements.define("vercel-analytics",class extends HTMLElement{constructor(){super();try{const r=JSON.parse(this.dataset.props??"{}"),n=JSON.parse(this.dataset.params??"{}");g({...r,disableAutoTrack:!0,framework:"astro",basePath:k(),beforeSend:window.webAnalyticsBeforeSend});const t=this.dataset.pathname;p({route:b(t??"",n),path:t})}catch(r){throw new Error(Failed to parse WebAnalytics properties: ${r})}}}); {
"mcpServers": {
"plainmarkdown": {
"url": "https://api.plainmarkdown.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}