npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@pitchfork-ui/mcp

v0.2.1

Published

MCP server for Pitchfork UI — gives coding agents the real component API, design tokens and conventions, so generated code uses the design system correctly.

Readme

@pitchfork-ui/mcp

An MCP server for Pitchfork UI. It gives a coding agent the library's real API — props, variants, design tokens, accessibility contracts and house conventions — so generated code uses the design system correctly instead of guessing at it.

Everything it serves is generated from source at build time. The server holds no knowledge of its own, so it cannot drift from the library.

Install

Claude Code:

claude mcp add pitchfork-ui -- npx -y @pitchfork-ui/mcp

Or add it to your MCP client config:

{
  "mcpServers": {
    "pitchfork-ui": {
      "command": "npx",
      "args": ["-y", "@pitchfork-ui/mcp"]
    }
  }
}

If the project you are working in has @pitchfork-ui/react installed, the server answers from that copy, so its answers match the version you are building against. Otherwise it falls back to the metadata bundled with the server.

Tools

| Tool | What it does | | ------------------- | ---------------------------------------------------------------------------- | | list_components | Every component, optionally filtered by category | | search_components | Find a component from a plain-language description | | get_component | Full API for one component: props, defaults, a11y contract, theme variables | | get_examples | Every worked example for a component, as copy-ready JSX | | get_tokens | The design token tree — colours, spacing, radii, typography, shadows, motion | | get_conventions | The house rules: naming, the CSS variable chain, breakpoints, forms, a11y | | validate_usage | Check a JSX snippet against the real API |

validate_usage

Most component-library MCP servers only read. This one checks work:

<Badge variant="primary">New</Badge>
<Buton>Go</Buton>
<Alert varient="info" />
<div style={{ color: '#4f46e5' }} />
3 error(s), 1 warning(s).

- error (line 1): `variant="primary"` is not valid on `Badge`. Expected one of:
  "success", "warning", "danger", "neutral", "brand".
- error (line 2): `Buton` is not exported by the library. Did you mean `Button`?
- error (line 3): `Alert` has no prop `varient`. Did you mean `variant`?
- warning (line 4): Hardcoded colour `#4f46e5`. Use a CSS variable instead.

For an attribute that is not a declared prop, the rule is:

  • data-*, aria-*, on* handlers and DOM attributes pass, because almost every component spreads onto a native element — onMouseEnter and data-testid are legitimate anywhere.
  • Anything else is reported as invented, with a suggestion when it is close to a real prop (varient → variant) and the component's real prop list when it is not (padding on Card).
  • Components whose props cannot be fully enumerated are skipped entirely. Icon extends a type from outside the library, so an unlisted prop there proves nothing; its metadata carries propsComplete: false.

The consequence worth knowing: a valid DOM attribute that is meaningless on a given component is not flagged. <Badge type="success"> passes, because type is real HTML and rejecting it would mean rejecting legitimate passthrough props everywhere else.

Configuration

| Variable | Purpose | | ----------------------- | ------------------------------------------------------- | | PITCHFORK_UI_METADATA | Path to a metadata.json to use instead of the default | | PITCHFORK_UI_TOKENS | Path to a tokens.json to use instead of the default |

By default the server answers from the @pitchfork-ui/react installed in your project, falling back to the copy bundled here. To point it at a specific file:

PITCHFORK_UI_METADATA=./node_modules/@pitchfork-ui/react/dist/metadata.json \
  npx -y @pitchfork-ui/mcp

When developing the library itself, run the server from source instead — inside the monorepo npx resolves the workspace symlink and cannot find the bin:

PITCHFORK_UI_METADATA=./packages/react/dist/metadata.json node packages/mcp/src/index.mjs

A path that does not exist is not an error; the server quietly falls back to its bundled copy. The startup line on stderr names the file it actually loaded, so check that if an override seems to have no effect.

License

MIT