Skip to main content
Glama
jeff-phillips-18

PatternFly MCP Server

PatternFly MCP Server

A Model Context Protocol (MCP) server that provides access to PatternFly React development rules and documentation, built with Node.js and TypeScript.

What is MCP?

The Model Context Protocol (MCP) is an open standard that enables AI assistants to securely access external data sources and tools. This server provides a standardized way to expose PatternFly documentation and development rules to MCP-compatible clients.

Related MCP server: Markdown Sidecar MCP Server

Features

  • TypeScript: Full type safety and modern JavaScript features

  • PatternFly Documentation Access: Browse, search, and retrieve PatternFly development rules

  • Comprehensive Rule Coverage: Access setup, guidelines, components, charts, chatbot, and troubleshooting documentation

  • Smart Search: Find specific rules and patterns across all documentation

  • Error Handling: Robust error handling with proper MCP error codes

  • Modern Node.js: Uses ES modules and the latest Node.js features

Prerequisites

  • Node.js 18.0.0 or higher

  • npm (or another Node package manager)

Installation

Local development

  1. Install dependencies:

npm install
  1. Build the project:

npm run build
  1. Run in watch/dev mode (TypeScript via tsx):

npm run start:dev

Use via npx (after publishing)

npx @jephilli-patternfly-docs/mcp

Or install locally in a project and run:

npm install @jephilli-patternfly-docs/mcp
npx @jephilli-patternfly-docs/mcp

Scripts

These are the most relevant NPM scripts from package.json:

  • build: Build the TypeScript project (cleans dist, type-checks, bundles)

  • build:clean: Remove dist

  • build:watch: Build in watch mode

  • start: Run the built server (node dist/index.js)

  • start:dev: Run with tsx in watch mode (development)

  • test: Run linting, type-check, and unit tests in src/

  • test:dev: Jest watch mode for unit tests

  • test:integration: Build and run integration tests in tests/

  • test:integration-dev: Watch mode for integration tests

  • test:lint: Run ESLint (code quality checks)

  • test:lint-fix: Run ESLint with auto-fix

  • test:types: TypeScript type-check only (no emit)

Usage

The MCP server communicates over stdio and provides access to PatternFly documentation through the following tools. Both tools accept an argument named urlList which must be an array of strings. Each string is either:

  • An external URL (e.g., a raw GitHub URL to a .md file), or

  • A local file path (e.g., documentation/.../README.md). When running with the --docs-host flag, these paths are resolved under the llms-files directory instead.

Returned content format:

  • For each entry in urlList, the server loads its content, prefixes it with a header like: # Documentation from <resolved-path-or-url> and joins multiple entries using a separator: \n\n---\n\n.

  • If an entry fails to load, an inline error message is included for that entry.

Tool: usePatternFlyDocs

Use this to fetch high-level index content (for example, a local README.md that contains relevant links, or llms.txt files in docs-host mode). From that content, you can select specific URLs to pass to fetchDocs.

Parameters:

  • urlList: string[] (required)

Response (tools/call):

  • content[0].type = "text"

  • content[0].text = concatenated documentation content (one or more sources)

Tool: fetchDocs

Use this to fetch one or more specific documentation pages (e.g., concrete design guidelines or accessibility pages) after you’ve identified them via usePatternFlyDocs.

Parameters:

  • urlList: string[] (required)

Response (tools/call):

  • content[0].type = "text"

  • content[0].text = concatenated documentation content (one or more sources)

Docs-host mode (local llms.txt mode)

If you run the server with --docs-host, local paths you pass in urlList are resolved relative to the llms-files folder at the repository root. This is useful when you have pre-curated llms.txt files locally.

Example:

npx @jephilli-patternfly-docs/mcp --docs-host

Then, passing a local path such as react-core/6.0.0/llms.txt in urlList will load from llms-files/react-core/6.0.0/llms.txt.

MCP client configuration examples

Most MCP clients use a JSON configuration that tells the client how to start this server. The server itself does not read that JSON; it only reads CLI flags and environment variables. Below are examples you can adapt to your MCP client.

Minimal client config (npx)

{
  "mcpServers": {
    "patternfly-docs": {
      "command": "npx",
      "args": ["-y", "@jephilli-patternfly-docs/mcp@latest"],
      "description": "PatternFly React development rules and documentation"
    }
  }
}

Docs-host mode

{
  "mcpServers": {
    "patternfly-docs": {
      "command": "npx",
      "args": ["-y", "@jephilli-patternfly-docs/mcp@latest", "--docs-host"],
      "description": "PatternFly docs (docs-host mode)"
    }
  }
}

Local development (after build)

{
  "mcpServers": {
    "patternfly-docs": {
      "command": "node",
      "args": ["dist/index.js"],
      "cwd": "/path/to/patternfly-mcp",
      "description": "PatternFly docs (local build)"
    }
  }
}

Inspector-CLI examples (tools/call)

Note: The parameter name is urlList and it must be a JSON array of strings.

usePatternFlyDocs (example with a local README):

npx @modelcontextprotocol/inspector-cli \
  --config ./mcp-config.json \
  --server patternfly-docs \
  --cli \
  --method tools/call \
  --tool-name usePatternFlyDocs \
  --tool-arg urlList='["documentation/guidelines/README.md"]'

fetchDocs (example with external URLs):

npx @modelcontextprotocol/inspector-cli \
  --config ./mcp-config.json \
  --server patternfly-docs \
  --cli \
  --method tools/call \
  --tool-name fetchDocs \
  --tool-arg urlList='[
    "https://raw.githubusercontent.com/patternfly/patternfly-org/refs/heads/main/packages/documentation-site/patternfly-docs/content/design-guidelines/components/about-modal/about-modal.md",
    "https://raw.githubusercontent.com/patternfly/patternfly-org/refs/heads/main/packages/documentation-site/patternfly-docs/content/accessibility/components/about-modal/about-modal.md"
  ]'

Environment variables

  • DOC_MCP_FETCH_TIMEOUT_MS: Milliseconds to wait before aborting an HTTP fetch (default: 15000)

  • DOC_MCP_CLEAR_COOLDOWN_MS: Default cooldown value used in internal cache configuration. The current public API does not expose a clearCache tool.

Programmatic usage (advanced)

The runServer function is exported via the package exports map. You can import it from the dedicated subpath or the package root.

Example (ESM):

// Prefer the public export subpath
import { runServer } from '@jephilli-patternfly-docs/mcp/server';

// Or from the package root (index.ts re-exports it)
import { runServer } from '@jephilli-patternfly-docs/mcp';

// Starts the MCP server and listens on stdio
await runServer();
// Server runs until interrupted (Ctrl+C)

Returned content details

For each provided path or URL, the server returns a section:

  • Header: # Documentation from <resolved-path-or-url>

  • Body: the raw file content fetched from disk or network

  • Sections are concatenated with \n\n---\n\n

This makes it easier to see where each chunk of content came from when multiple inputs are provided.

Publishing

To make this package available via npx, you need to publish it to npm:

  1. Ensure you have an npm account and are logged in:

npm login
  1. Update the version in package.json if needed:

npm version patch  # or minor/major
  1. Publish to npm:

npm publish

After publishing, users can run your MCP server with:

npx @jephilli-patternfly-docs/mcp

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests if applicable

  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Resources

Available Tools

2 tools
fetchDocsA

Fetch documentation for one or more URLs extracted from previous tool calls responses. The URLs should be passed as an array in the "urlList" argument.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlListYesThe list of URLs to fetch documentation from

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It only says 'Fetch documentation' and does not describe potential failures, network behavior, side effects, or return format. The read-only nature is implied but not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and 22 words, front-loading the core purpose and then directly pointing to the urlList argument. Every sentence earns its place with no unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a low-complexity tool with a single parameter fully described in the schema. The description covers purpose, source of URLs, and the argument name. However, the absence of an output schema and no mention of error handling or return format prevent a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by specifying that the URLs should be 'extracted from previous tool calls responses,' which guides the agent on how to populate the urlList array beyond the schema's generic 'list of URLs'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch documentation') and clearly identifies the resource (one or more URLs) and their source (previous tool calls responses). This distinguishes it from the sibling tool usePatternFlyDocs, which likely targets a specific documentation set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: when there are URLs extracted from previous tool call responses. It gives clear context and an input constraint, but it does not explicitly contrast with usePatternFlyDocs or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

usePatternFlyDocsA

You must use this tool to answer any questions related to PatternFly components or documentation.

    The description of the tool contains links to .md files or local file paths that the user has made available.

    
        [@patternfly/AboutModal - Design Guidelines](https://raw.githubusercontent.com/patternfly/patternfly-org/refs/heads/main/packages/documentation-site/patternfly-docs/content/design-guidelines/components/about-modal/about-modal.md)

@patternfly/AboutModal - Accessibility @patternfly/Accordion - Design Guidelines @patternfly/Accordion - Accessibility @patternfly/ActionList - Design Guidelines @patternfly/ActionList - Accessibility @patternfly/Alert - Design Guidelines @patternfly/Alert - Accessibility @patternfly/ApplicationLauncher - Design Guidelines @patternfly/ApplicationLauncher - Accessibility @patternfly/Avatar - Design Guidelines @patternfly/Avatar - Accessibility @patternfly/BackToTop - Design Guidelines @patternfly/BackToTop - Accessibility @patternfly/Backdrop - Design Guidelines @patternfly/Backdrop - Accessibility @patternfly/BackgroundImage - Design Guidelines @patternfly/BackgroundImage - Accessibility @patternfly/Badge - Design Guidelines @patternfly/Badge - Accessibility @patternfly/Banner - Design Guidelines @patternfly/Banner - Accessibility @patternfly/Brand - Design Guidelines @patternfly/Brand - Accessibility @patternfly/Breadcrumb - Design Guidelines @patternfly/Breadcrumb - Accessibility @patternfly/Button - Design Guidelines @patternfly/Button - Accessibility @patternfly/CalendarMonth - Design Guidelines @patternfly/CalendarMonth - Accessibility @patternfly/Card - Design Guidelines @patternfly/Card - Accessibility @patternfly/Checkbox - Design Guidelines @patternfly/Checkbox - Accessibility @patternfly/ChipDeprecated - Design Guidelines @patternfly/ChipDeprecated - Accessibility @patternfly/ClipboardCopy - Design Guidelines @patternfly/ClipboardCopy - Accessibility @patternfly/CodeBlock - Design Guidelines @patternfly/CodeBlock - Accessibility @patternfly/CodeEditor - Design Guidelines @patternfly/CodeEditor - Accessibility @patternfly/Content - Design Guidelines @patternfly/Content - Accessibility @patternfly/DataList - Design Guidelines @patternfly/DataList - Accessibility @patternfly/DatePicker - Design Guidelines @patternfly/DatePicker - Accessibility @patternfly/DateTimePicker - Design Guidelines @patternfly/DateTimePicker - Accessibility @patternfly/DescriptionList - Design Guidelines @patternfly/DescriptionList - Accessibility @patternfly/Divider - Design Guidelines @patternfly/Divider - Accessibility @patternfly/DragAndDrop - Design Guidelines @patternfly/DragAndDrop - Accessibility @patternfly/Drawer - Design Guidelines @patternfly/Drawer - Accessibility @patternfly/Dropdown - Design Guidelines @patternfly/Dropdown - Accessibility @patternfly/DualListSelector - Design Guidelines @patternfly/DualListSelector - Accessibility @patternfly/EmptyState - Design Guidelines @patternfly/EmptyState - Accessibility @patternfly/ExpandableSection - Design Guidelines @patternfly/ExpandableSection - Accessibility @patternfly/FileUpload - Design Guidelines @patternfly/FileUpload - Accessibility @patternfly/Form - Design Guidelines @patternfly/Form - Accessibility @patternfly/FormControl - Design Guidelines @patternfly/FormControl - Accessibility @patternfly/FormSelect - Design Guidelines @patternfly/FormSelect - Accessibility @patternfly/HelperText - Design Guidelines @patternfly/HelperText - Accessibility @patternfly/Hint - Design Guidelines @patternfly/Hint - Accessibility @patternfly/Icon - Design Guidelines @patternfly/Icon - Accessibility @patternfly/InlineEdit - Design Guidelines @patternfly/InlineEdit - Accessibility @patternfly/InputGroup - Design Guidelines @patternfly/InputGroup - Accessibility @patternfly/JumpLinks - Design Guidelines @patternfly/JumpLinks - Accessibility @patternfly/Label - Design Guidelines @patternfly/Label - Accessibility @patternfly/List - Design Guidelines @patternfly/List - Accessibility @patternfly/LoginPage - Design Guidelines @patternfly/LoginPage - Accessibility @patternfly/Masthead - Design Guidelines @patternfly/Masthead - Accessibility @patternfly/Menu - Design Guidelines @patternfly/Menu - Accessibility @patternfly/MenuToggle - Design Guidelines @patternfly/MenuToggle - Accessibility @patternfly/Modal - Design Guidelines @patternfly/Modal - Accessibility @patternfly/Navigation - Design Guidelines @patternfly/Navigation - Accessibility @patternfly/NotificationBadge - Design Guidelines @patternfly/NotificationBadge - Accessibility @patternfly/NotificationDrawer - Design Guidelines @patternfly/NotificationDrawer - Accessibility @patternfly/NumberInput - Design Guidelines @patternfly/NumberInput - Accessibility @patternfly/OverflowMenu - Design Guidelines @patternfly/OverflowMenu - Accessibility @patternfly/Page - Design Guidelines @patternfly/Page - Accessibility @patternfly/Pagination - Design Guidelines @patternfly/Pagination - Accessibility @patternfly/Panel - Design Guidelines @patternfly/Panel - Accessibility @patternfly/Popover - Design Guidelines @patternfly/Popover - Accessibility @patternfly/Progress - Design Guidelines @patternfly/Progress - Accessibility @patternfly/ProgressStepper - Design Guidelines @patternfly/ProgressStepper - Accessibility @patternfly/Radio - Design Guidelines @patternfly/Radio - Accessibility @patternfly/SearchInput - Design Guidelines @patternfly/SearchInput - Accessibility @patternfly/Select - Design Guidelines @patternfly/Select - Accessibility @patternfly/Sidebar - Design Guidelines @patternfly/Sidebar - Accessibility @patternfly/SimpleList - Design Guidelines @patternfly/SimpleList - Accessibility @patternfly/Skeleton - Design Guidelines @patternfly/Skeleton - Accessibility @patternfly/SkipToContent - Design Guidelines @patternfly/SkipToContent - Accessibility @patternfly/Slider - Design Guidelines @patternfly/Slider - Accessibility @patternfly/Spinner - Design Guidelines @patternfly/Spinner - Accessibility @patternfly/Switch - Design Guidelines @patternfly/Switch - Accessibility @patternfly/Table - Design Guidelines @patternfly/Tabs - Design Guidelines @patternfly/Tabs - Accessibility @patternfly/TextArea - Design Guidelines @patternfly/TextArea - Accessibility @patternfly/TextInput - Design Guidelines @patternfly/TextInput - Accessibility @patternfly/TextInputGroup - Design Guidelines @patternfly/TextInputGroup - Accessibility @patternfly/TileDeprecated - Design Guidelines @patternfly/TileDeprecated - Accessibility @patternfly/TimePicker - Design Guidelines @patternfly/TimePicker - Accessibility @patternfly/Timestamp - Design Guidelines @patternfly/Timestamp - Accessibility @patternfly/Title - Design Guidelines @patternfly/Title - Accessibility @patternfly/ToggleGroup - Design Guidelines @patternfly/ToggleGroup - Accessibility @patternfly/Toolbar - Design Guidelines @patternfly/Toolbar - Accessibility @patternfly/Tooltip - Design Guidelines @patternfly/Tooltip - Accessibility @patternfly/TreeView - Design Guidelines @patternfly/TreeView - Accessibility @patternfly/Truncate - Design Guidelines @patternfly/Truncate - Accessibility @patternfly/Wizard - Design Guidelines @patternfly/Wizard - Accessibility @patternfly/Bullseye - Design Guidelines @patternfly/Flex - Design Guidelines @patternfly/Gallery - Design Guidelines @patternfly/Grid - Design Guidelines @patternfly/Level - Design Guidelines @patternfly/Split - Design Guidelines @patternfly/Stack - Design Guidelines @patternfly/Charts - Colors for Charts @patternfly/Charts - Target Chart @patternfly/Charts - Bar Chart @patternfly/Charts - Box Plot Chart @patternfly/Charts - Bullet Chart @patternfly/Charts - Donut Chart @patternfly/Charts - Donut Utilization Chart @patternfly/Charts - Line Chart @patternfly/Charts - Pie Chart @patternfly/Charts - Scatter Chart @patternfly/Charts - Sparkline Chart @patternfly/Charts - Stack Chart @patternfly/Charts - Threshold Chart @patternfly/Charts - Legend @patternfly/Charts - Tooltip @patternfly/react-charts @patternfly/react-chatbot @patternfly/react-component-groups @patternfly/react-components @patternfly/react-guidelines @patternfly/react-resources @patternfly/react-setup @patternfly/react-troubleshooting

    1. Pick the most suitable URL from the above list, and use that as the "urlList" argument for this tool's execution, to get the docs content. If it's just one, let it be an array with one URL.
    2. Analyze the URLs listed in the .md file
    3. Then fetch specific documentation pages relevant to the user's question with the subsequent tool call.
ParametersJSON Schema
NameRequiredDescriptionDefault
urlListYesThe list of urls to fetch the documentation from

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It explains that the tool fetches documentation content from provided URLs and that the URL list points to .md files. However, it does not disclose return format, error behavior, rate limits, or security considerations, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The prose is concise and organized with numbered steps. The large URL list is necessary data rather than unnecessary verbosity. The purpose is front-loaded, and the instructions are actionable, making the overall structure effective despite the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter and no output schema, but the description explains the complete retrieval workflow: choose URL from list, call tool, analyze resulting .md file, then fetch specific pages. It clearly scopes the tool to PatternFly docs, and while it does not describe output format, the content-fetching behavior is self-evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes urlList as 'The list of urls to fetch the documentation from' (100% coverage), so baseline is 3. The description adds significant guidance: how to select the most suitable URL from the list, wrap a single URL in an array, and use iterative calls to fetch specific pages. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'You must use this tool to answer any questions related to PatternFly components or documentation,' which clearly defines its purpose with a specific resource. It also provides a curated list of documentation URLs, distinguishing it as a PatternFly-specific docs tool, though it does not directly compare with the sibling tool fetchDocs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs when to use the tool ('You must use this tool to answer any questions related to PatternFly'), and provides a numbered workflow for selecting URLs, passing them to urlList, and subsequently fetching specific pages. It does not mention when to use an alternative like fetchDocs, but the mandatory language gives clear usage context.

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.

  1. 2 tool updatesv1.1.0
    • First observedfetchDocs
    • First observedusePatternFlyDocs

TDQS

A3.8/5.0
Disambiguation2/5

usePatternFlyDocs and fetchDocs both accept a urlList and return documentation content, creating ambiguity about which to use for direct URL fetching. While usePatternFlyDocs is positioned as the entry point for answering questions, its ability to fetch specific URLs overlaps significantly with fetchDocs.

Naming Consistency5/5

Both tool names follow a consistent verb_noun camelCase pattern (use + PatternFlyDocs, fetch + Docs), making the naming predictable and consistent.

Tool Count3/5

At only two tools, the server is on the low end of tool counts. While the two tools could theoretically cover the documentation workflow, the set feels thin and relies heavily on one tool's massive description for navigation.

Completeness4/5

The server covers the core workflow of finding and fetching PatternFly documentation, with an extensive embedded list of URLs. However, there is no dedicated search or query tool, and the reliance on manual URL selection in prompts may create dead ends for unexpected questions.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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/jeff-phillips-18/patternfly-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server