Markdown Source
Access raw Markdown source for any documentation page by appending .md to the URL. Structured text for AI tools, scripts, and content pipelines.
AI tools process Markdown more efficiently than rendered HTML. Append .md to any page URL to get its raw Markdown source. No authentication required.
.md URL Extension
Append .md to any documentation page URL to get the raw source instead of rendered HTML:
# Rendered page
https://acme.jamdesk.app/getting-started
# Raw Markdown source
https://acme.jamdesk.app/getting-started.md
This works for any path depth. Here's what the response looks like:
curl https://acme.jamdesk.app/getting-started.md
---
title: Getting Started
description: Set up your first project in 5 minutes.
---
Welcome to the getting started guide.
## Prerequisites
<Note>You'll need Node.js 18 or later.</Note>
The response is the exact source file from your repository, including frontmatter and component tags.
Custom domains
Append .md to the custom domain URL your readers see:
# Docs served at root
curl https://docs.example.com/getting-started.md
# Docs served at /docs subpath
curl https://docs.example.com/docs/getting-started.md
Site root and language roots
The site root and a bare language root export the page their HTML versions show: the first page in your navigation, or in that language's navigation. There is no redirect. The Markdown comes back on the first request.
# All three return the first navigation page's Markdown
curl https://acme.jamdesk.app/index.md
curl -H "Accept: text/markdown" https://acme.jamdesk.app/
curl https://acme.jamdesk.app/fr.md
A project with a real index.mdx page keeps serving that page at /index.md and at the root. The root returns 404 when the first navigation page's file is missing, like any other missing page.
Content Format
The raw content is Markdown extended with component tags like <Note>, <Steps>, and <Tabs>. Standard Markdown parsers treat component tags as raw HTML. See Markdown basics for the full syntax reference.
What an endpoint page exports
An openapi: page has almost no body of its own. Jamdesk renders the endpoint from your spec. Its Markdown export is flattened from the spec instead. An agent that fetches it gets the method and path, the parameters with their descriptions, the request and response schemas, and an ## Authentication section naming the security schemes the operation requires: the scheme type, the apiKey header name, the bearer format, and any OAuth 2 scopes.
Alternatives are labeled "Any one of". Schemes that must all be sent are listed together. An operation that opts out with security: [] says so. That's everything an agent needs to build a working request without opening the spec.
OpenAPI specs on API reference pages
The Markdown for an API reference page (one whose frontmatter declares an api: or openapi: spec) ends with a short footer. It points AI agents at every OpenAPI specification in your project, bundled as one download:
---
📦 **OpenAPI specs:** Every OpenAPI specification referenced by this documentation is available as a single download — https://acme.jamdesk.app/api-specs.zip
It's the same api-specs.zip as the Download API spec action, built fresh on each request. An agent reading one endpoint page learns it can fetch the full machine-readable contract in one request. It doesn't have to scrape every endpoint. The footer appears only on API reference pages of projects with at least one spec.
Response Details
Headers
| Header | Value | Purpose |
|---|---|---|
Content-Type | text/markdown; charset=utf-8 | Identifies content as Markdown |
Cache-Control | public, max-age=3600, s-maxage=86400 | Browser-cached 1 hour, CDN-cached 1 day (.md URLs) |
Vary | Accept | The same URL serves HTML or Markdown depending on the request's Accept header |
X-Robots-Tag | noindex, nofollow | Prevents search engine indexing |
Content-Disposition | inline | Displays in browser instead of downloading |
X-Frame-Options | DENY | Prevents embedding in iframes |
Content-Security-Policy | default-src 'none' | Blocks script execution |
Requesting a page's canonical URL (no .md) with the header Accept: text/markdown returns the same Markdown with Cache-Control: private, no-store. That response shares a cache key with the HTML page. It is never cached.
Error responses
| Status | Meaning |
|---|---|
308 | Trailing slash redirect (e.g., /intro.md/ redirects to /intro.md) |
404 | Page does not exist (returns a short plain-text error, not Markdown). The site root and language roots resolve to the first navigation page and 404 only when that page's file is missing too |
500 | Server error (returns an HTML error page) |
Use with AI Tools
Use searchDocs on the MCP server to find pages by keyword. Then fetch the raw source for the matched page:
# 1. Search for a topic via MCP
curl -X POST https://acme.jamdesk.app/_mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"searchDocs","arguments":{"query":"authentication"}}}'
# 2. Fetch the raw source of the top result
curl https://acme.jamdesk.app/guides/authentication.md
This gives AI tools search and full-source access to your documentation. The URLs also work on a live custom domain: https://docs.acme.com/_mcp and https://docs.acme.com/guides/authentication.md.
