MDA Overview
MDA (Markdown for Agent) is a Markdown superset for agent-facing documents. One.mda source compiles into the .md files every major agent runtime already loads — SKILL.md, AGENTS.md, MCP-SERVER.md, CLAUDE.md. On top of those plain outputs, MDA layers a real dependency graph, structured capability declarations, and reproducible signed identity. All optional. Standard Markdown still renders.
The problem MDA solves
In 2026 a single agent-facing skill routinely needs to ship as four files:SKILL.mdfor the agentskills.io ecosystem (Claude Code, OpenCode, Codex, Hermes, OpenClaw, skills.sh, Cursor, Windsurf).AGENTS.mdfor AAIF-aligned runtimes (Codex CLI, Copilot, Cursor, Windsurf, Amp, Devin, Gemini CLI, VS Code, Jules, Factory).MCP-SERVER.mdplus its sidecarmcp-server.jsonfor MCP servers.CLAUDE.mdfor Claude Code’s project-memory file.
SKILL.md doesn’t reach AGENTS.md. A version bump in AGENTS.md doesn’t propagate. A month in, the four files quietly disagree on what the skill actually does.
The deeper problem is what you can’t say in any of those formats. You can’t declare “this skill depends on that one, version ^1.2.0, with this digest pin.” You can’t say “this file was signed by this identity at this Rekor index.” You can’t say “the relationship between this document and that one is supports, not cites.” There’s nowhere to put that information, so it lives in prose, where neither agents nor humans can act on it reliably.
MDA puts those things into structured frontmatter and typed footnotes that a JSON Schema can validate. The Markdown body still renders. The standard fields still load. Everything new is optional.
The three MDA additions
A.mda source is just standard Markdown plus three optional layers.
1. Rich YAML frontmatter
Beyond the open-standardname and description baseline that every consumer already reads, MDA carries doc-id, version, requires, depends-on, relationships, and tags under a metadata.mda.* namespace. Vendor-specific extensions live alongside under reserved metadata.<vendor>.* namespaces. Strict JSON Schema 2020-12 validation, with unevaluatedProperties: false so unknown top-level fields fail fast.
Spec section: §02 Frontmatter.
2. Typed footnote relationships
Standard Markdown footnotes whose payload is a JSON relationship object:parent, child, related, cites, supports, contradicts, extends. The compiler mirrors them to metadata.mda.relationships in body order. Standard renderers display them as plain footnotes with the JSON literal; MDA-aware tools traverse the typed graph.
Spec section: §03 Relationships.
3. Optional cryptographic identity
A reproducibleintegrity digest derived through JCS canonicalization, with multi-file boundary semantics for skills that bundle scripts and references. DSSE PAE-enveloped signatures anchored in Sigstore by default, with a did:web air-gap fallback. The conformance runner enforces signatures[].payload-digest == integrity.digest byte-for-byte.
Spec sections: §08 Integrity and §09 Signatures.
Three authoring modes
MDA artifacts may be produced three ways. They’re equivalent under validation.- Agent mode — an AI agent writes the
.mddirectly. The primary near-term use case. The v1.0 contract requires an LLM with only the spec in context to be able to produce conforming output. - Human mode — a human writes the
.mddirectly with standard hashing and DSSE-capable signing tools. Seedocs/create-sign-verify-mda.md. - Compiled mode — an author writes a
.mdasource; the MDA compiler emits one or more.mdoutputs.
signatures[].payload-digest equals integrity.digest. There’s no second code path for “this came from an agent.”
Why MDA, in plain terms
- One source of truth. Stop maintaining four near-identical files.
- A real dependency graph. Pin versions and content digests in frontmatter. The resolver refuses load when a candidate’s digest doesn’t match.
- Typed relationships, not prose. Knowledge-graph and RAG indexers have something machine-readable to traverse.
- Verifiable trust at load. Integrity checks and signatures that must match an operator trust policy.
- Strict validation early. JSON Schema rejects “almost conformant” artifacts before they ship, instead of letting them silently drift in a runtime.
- Open spec. Vendor-neutral. Per-vendor extensions live under reserved namespaces. Loaders read only their own namespace.
Status, honestly
v1.0 ships the contract, not the entire ecosystem around it. What works today: you can author a.mda, compile it to one or more conforming .md outputs, and validate them against the JSON Schema target schemas and the conformance suite.
What’s still being built: a bundled signature verifier, a working dependency resolver, a central artifact registry, a graph indexer, and harnesses that route through metadata.mda.requires. The .mda you write today still produces conforming .md outputs that load in every runtime listed above.
For the truthful gap, see What v1.0 doesn’t ship. For the long version of the value proposition, two documents go deeper:
- Core value for AI agents — five points framed for runtimes, harnesses, validators, and dispatchers.
- Core value for human authors and curators — six points framed for the people who write and curate agent-facing instruction libraries.
Next
- Quickstart — author a minimal
.mdaand compile it. - Architecture — deeper on the three additions and the parsing flow.
- Specification — the normative entry point with links to every §.