MD3-Docs MCP
The MD3-Docs MCP server enables browsing, searching, reading, and context gathering from official Material Design 3 documentation. You can:
List (
list_md3_docs): Browse the documentation directory by category (foundations,styles,components) or canonical path prefix, with pagination (up to 100 results).Search (
search_md3_docs): Perform natural language searches with optional category filtering and pagination (up to 20 results), returning cleaned results with source URLs.Read (
read_md3_doc): Fetch a document as clean Markdown by canonical path or URL, with section/heading selection, character budget control (1,000–30,000), and semantic pagination.Gather context (
get_md3_context): Combine search results, directory matches, and pinned sources to provide ranked, cited excerpts for a task.
Provides access to the official Material Design 3 documentation, including Foundations, Styles, and Components, returning content as Markdown.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MD3-Docs MCPget the documentation for the top app bar component"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MD3 Docs MCP
MD3 Docs is a stdio Model Context Protocol server for the live
Material Design 3 documentation. It gives Codex, ChatGPT, and
other MCP clients concise access to official English Foundations, Styles, and Components
content.
Version 2 adds task-focused context gathering, semantic Markdown pagination, explicit structured output schemas, clean search results, and source citations. The server does not bundle a documentation snapshot, translate content, call another model, or use unofficial sources.
Requirements
Node.js 20 or later
Network access to
https://m3.material.io
Related MCP server: Material UI MCP Server
Configure
The recommended setup runs the latest published package through npx:
{
"mcpServers": {
"MD3-Docs": {
"command": "npx",
"args": ["-y", "md3-docs-mcp@latest"]
}
}
}Alternatively, install it globally:
npm install --global md3-docs-mcpThen use md3-docs-mcp as the MCP server command.
The server communicates only over stdio. Protocol messages are written to stdout and diagnostics to stderr.
Tools
browse_md3_docs
Browse the official directory by category or canonical path prefix.
{
"category": "components",
"prefix": "components/button",
"limit": 20
}Inputs:
category: optionalfoundations,styles, orcomponentsprefix: optional canonical path prefixlimit: 1–100, default 50cursor: opaque cursor from the preceding page
Directory entries include their title, path, category, available sections, description, updated date, and official source URL.
search_md3_docs
Search the official site using natural language.
{
"query": "navigation on large screens",
"category": "components",
"limit": 10
}Search results are deduplicated and cleaned of HTML and site-navigation noise. Each result contains a stable rank, canonical path, optional section, concise snippet, and source URL.
read_md3_doc
Read one canonical path or clean https://m3.material.io/ URL.
{
"path": "components/buttons/guidelines",
"heading": "Placement",
"maxCharacters": 12000
}Inputs:
path: canonical path or official URLsection: optional section name when it is not already present in the pathheading: optional exact heading within the selected sectionmaxCharacters: 1,000–30,000, default 12,000cursor: opaque semantic-page cursor
Pagination happens between sections, content blocks, paragraphs, tables, and complete code fences. It never slices the response at an arbitrary character offset. The result reports available sections and headings, page and block ranges, media metadata, the live content version, and whether more pages remain.
get_md3_context
Gather several official sources for one task in a single call.
{
"task": "Implement and review navigation for a large-screen mail app",
"mode": "implementation",
"paths": ["components/navigation-rail/guidelines"],
"maxSources": 5,
"maxCharacters": 20000
}Inputs:
task: the implementation, review, or research questionmode:implementation,review, orresearch; defaultresearchpaths: up to five optional sources that must be considered firstcategory: optional documentation categorymaxSources: 1–8, default 5maxCharacters: 4,000–40,000, default 20,000
The tool combines pinned paths, official search results, and directory matches. It loads candidate documents concurrently and ranks intact semantic blocks by task relevance:
implementationprioritizes Guidelines, Specs, Overview, and Accessibility.reviewprioritizes Guidelines and Accessibility and adds a cited review checklist.researchfollows query relevance without imposing a workflow-specific section order.
Context excerpts use source labels such as [S1]; the structured result maps every label to
its official URL. A failed candidate becomes a warning when other evidence is available.
The tool returns an error only when it cannot produce any usable official evidence.
The character budget applies to the Markdown body, not protocol metadata.
Errors
Tool errors are JSON objects with a stable code, message, and retryable flag. Relevant
codes include:
INVALID_PATHandINVALID_REQUESTNOT_FOUNDCURSOR_INVALIDandCURSOR_STALEUPSTREAM_HTTP,UPSTREAM_TIMEOUT, andUPSTREAM_SCHEMA
Paths are restricted to clean official URLs under foundations, styles, and components.
Credentials, query strings, fragments, traversal, ambiguous separators, and external hosts
are rejected.
Fetching and caching
The site index, directory, search pages, raw documents, semantic documents, rendered resources, and context dependencies use five-minute in-process LRU caches.
Identical concurrent requests share one upstream operation.
Context documents and auxiliary resource tables load with a concurrency limit of four.
Requests time out after ten seconds.
Network failures, HTTP 429, and selected 5xx responses retry once with exponential jitter.
Retry-Afteris honored up to ten seconds.Expired content is not served when refresh fails, and no persistent cache is written.
The Material site uses unpublished structured endpoints. If their schema changes, tools
return UPSTREAM_SCHEMA; the opt-in live test diagnoses compatibility.
Development
git clone https://github.com/ChouChiu/MD3-Docs-MCP.git
cd MD3-Docs-MCP
bun install --frozen-lockfile
bun run check
bun run test
bun run test:live
bun run buildDevelopment uses Bun for dependency and script management. Published packages contain
compiled JavaScript in dist/; runtime users do not install TypeScript or tsx.
The source is feature-driven:
src/
├── app/ # Server composition
├── features/
│ ├── catalog/ # browse_md3_docs
│ ├── context/ # get_md3_context and evidence ranking
│ ├── document/ # semantic model, rendering, and read_md3_doc
│ └── search/ # search_md3_docs
├── infrastructure/
│ └── material/ # Live Material site client and parsers
└── shared/ # Cache, HTTP, errors, cursors, concurrency, versionOffline tests cover protocol contracts, semantic pagination, ranking, caching, retries,
compiled CLI startup, and the packed npm artifact. Live tests contact m3.material.io
only when MD3_LIVE_TESTS=1.
Migrating from v1
Version 2 is intentionally incompatible:
list_md3_docsis replaced bybrowse_md3_docs.read_md3_docuses semantic pages instead of character offsets and has a new cursor shape.Search and read tools return explicit v2 structured output.
get_md3_contextis new.MCP Resources and
md3-docs://URIs are removed.The minimum runtime changes from Node.js 24 to Node.js 20.
Remove stored v1 cursors when upgrading. Tool clients should rediscover schemas after restarting the server.
Release
Semantic version tags such as v2.0.0 must match package.json. CI validates formatting,
types, offline tests, the compiled CLI, and npm package contents before publication.
Releases publish only dist/, the README, license, and package metadata. The compiled
dist/index.js contains the Node.js shebang and serves directly as the npm executable.
License and attribution
The server source is available under the MIT License.
Material Design documentation, media, trademarks, and remotely fetched content remain the property of their respective owners and are not covered by this repository's license. All returned evidence retains its official source URL.
Available Tools
3 toolslist_md3_docsList Material Design 3 documentationARead-only
List live Material Design 3 Foundations, Styles, and Components documents.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| prefix | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and openWorldHint: true, so the agent knows this is a safe read operation. The description adds the word 'live,' hinting at dynamic content, but does not disclose pagination behavior (cursor, limit) or that results may change over time. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the key action. However, its brevity comes at the cost of omitting parameter details, which is a structural gap. It is not wasteful but incomplete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. However, with 4 parameters and no parameter guidance, the description does not fully equip the agent to use the tool effectively (e.g., how to narrow results by category or prefix). It covers the basic purpose but misses control mechanisms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden but fails to explain any of the 4 parameters (limit, cursor, prefix, category). The agent lacks context for filtering (prefix, category) and pagination (limit, cursor). The description adds no value over the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it lists 'live Material Design 3 Foundations, Styles, and Components documents.' This clearly identifies the verb (list), resource (MD3 docs), and scope (three categories), distinguishing it from sibling tools like search_md3_docs (search) and read_md3_doc (read a specific doc).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear, there is no indication of prerequisites, when to prefer this over search_md3_docs or read_md3_doc, or any exclusions. The context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_md3_docRead Material Design 3 documentationARead-only
Read a live Material Design 3 document as English Markdown, with section selection and cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| cursor | No | ||
| section | No | ||
| maxCharacters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by specifying the output format (English Markdown), live nature, and pagination via cursor. The readOnlyHint and openWorldHint annotations are consistent, and the description enhances understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary action and key features. Every piece of information is relevant, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters (one required) and 0% schema coverage, the description covers the core use case but omits details on parameter usage (e.g., how cursor pagination works, maxCharacters role). Output schema exists but unknown; overall, it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the tool description must explain parameters. It only hints at 'section selection' and 'cursor pagination' for the section and cursor parameters, leaving path and maxCharacters unexplained. This is insufficient compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a live Material Design 3 document as English Markdown, specifying section selection and cursor pagination. This distinguishes it from sibling tools list_md3_docs and search_md3_docs, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading documents with section and pagination options but does not explicitly state when to use this tool versus alternatives like search_md3_docs. No exclusion criteria or comparative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_md3_docsSearch Material Design 3 documentationBRead-only
Search the live Material Design 3 site, restricted to Foundations, Styles, and Components.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| cursor | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds context that it searches a 'live' site and restricts categories, which is useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence delivering core purpose with no fluff. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the main purpose, the lack of parameter explanations and usage guidance leaves it insufficiently complete for a tool with 4 parameters and an output schema. Scores average.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the 4 parameters (query, limit, cursor, category). The agent receives no guidance on parameter usage from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search', the resource 'live Material Design 3 site', and the scope 'restricted to Foundations, Styles, and Components'. This distinguishes it from siblings list_md3_docs and read_md3_doc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching within the specified categories but provides no explicit guidance on when to use this vs alternatives, nor when not to use it.
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. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
list_md3_docs - First observed
read_md3_doc - First observed
search_md3_docs
TDQS
Each tool has a clear, distinct purpose: listing available documents, searching for content, and reading a specific document. There is no overlap or ambiguity between them.
All tools follow a consistent verb_md3_doc pattern with snake_case, using 'list', 'search', and 'read' as clear action prefixes.
Three tools is a perfect fit for a documentation-focused server: discover (list), find (search), and retrieve (read). Not too few, not too many.
The set covers the core workflow of discovering, searching, and reading docs. A minor gap might be the absence of a direct document listing by category, but list_md3_docs already returns all docs, and search can filter.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Provides access to Google's public developer documentation.
Docs Q&A: search 169 data and AI guides, fetch any page as markdown. Read-only, keyless.
Web data tools for AI agents: pages as markdown, search, maps, commerce, jobs, AI answers.
Related MCP Servers
- FlicenseBqualityDmaintenanceProvides real-time access to Material-UI component documentation, enabling users to search, browse, and generate MUI React components with up-to-date props and examples directly from official documentation.5-
- FlicenseNot gradedqualityCmaintenanceProvides AI assistants with comprehensive access to Material UI documentation, component details, and setup guides for building React applications. It enables searching through 50+ components and provides structured information on imports, customization, and best practices.2-
- AlicenseNot gradedqualityFmaintenanceEnables browsing Material Design 3 documentation by listing top-level sections and retrieving page content as Markdown.GPL 3.0
- AlicenseAqualityCmaintenanceProvides programmatic access to Material Web documentation and components for AI agents, enabling documentation search, template generation, and HTML validation.7171MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChouChiu/MD3-Docs-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server