shadcn.exchange

Search 12,000+ shadcn/ui blocks from 130+ registries, free and paid, with install commands.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
78%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~997Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (0.78% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "blocks": {
      "url": "https://shadcn.exchange/mcp"
    }
  }
}

Remote endpoints

https://shadcn.exchange/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_blocks(query, category, registry, price, limit, ...)

Search the shadcn/ui blocks listed on shadcn.exchange: ready-made sections of a page, such as heroes, pricing tables, login forms, dashboards, footers and FAQs, from every public shadcn registry, free and paid. Use it when the user is building a page or a screen with shadcn/ui and wants a section to start from, or asks what blocks exist for something. Results come best first. Each has its id (for get_block), its description, its install command if it is free or where to buy it if it is paid, and its page with a live preview. Every word of the query has to be in a block's name, title, description or registry, so use one or two words, and the category for the kind of section.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "One or two words to find, such as \"pricing\", \"sign in\", \"testimonials\" or \"bento\". Leave it out to list a category or a registry.",
      "type": "string",
      "maxLength": 80
    },
    "category": {
      "description": "The kind of section, from list_categories, such as hero, pricing, login, dashboard or footer.",
      "type": "string",
      "enum": [
        "hero",
        "pricing",
        "dashboard",
        "login",
        "navbar",
        "sidebar",
        "features",
        "footer",
        "cta",
        "testimonials",
        "faq",
        "charts",
        "tables",
        "contact",
        "blog",
        "stats",
        "team",
        "logo-cloud",
        "gallery",
        "bento",
        "ecommerce",
        "chat",
        "file-upload",
        "404-page",
        "onboarding",
        "settings",
        "newsletter",
        "about",
        "careers",
        "changelog",
        "integrations",
        "banner",
        "timeline",
        "empty-state",
        "cookie-consent",
        "kanban",
        "portfolio",
        "coming-soon"
      ]
    },
    "registry": {
      "description": "Only this registry's blocks: its id from list_registries, such as efferd or shadcnblocks.",
      "type": "string",
      "maxLength": 64
    },
    "price": {
      "default": "any",
      "description": "free: blocks that install now with one command. paid: blocks their registries sell. any: both.",
      "type": "string",
      "enum": [
        "any",
        "free",
        "paid"
      ]
    },
    "limit": {
      "default": 10,
      "description": "How many results to return, up to 50.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "offset": {
      "default": 0,
      "description": "How many results to skip, for the next page.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000
    }
  }
}
🟢get_block(id, include_source)

Get one block's details by its id from search_blocks: what it is, its install command, the npm packages and registry items it depends on, the files it adds, and its registry's notes on using it. Set include_source to also get its source code, for when the user wants to read or adapt the code rather than install it.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 3,
      "maxLength": 300,
      "description": "The block's id from search_blocks, as registry/name, such as efferd/hero-1. Its page's address works too."
    },
    "include_source": {
      "default": false,
      "description": "Also give the source of its files. It can be long, and installing the block adds the files anyway.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_categories

List the kinds of section the blocks are sorted into, such as hero, pricing, login, dashboard and footer, with how many blocks each has. Pass one to search_blocks as its category.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢list_registries(query)

List the public shadcn/ui registries whose blocks shadcn.exchange lists, the most blocks first, with how many of each are free and paid, what each one is, and its page. Pass a registry's id to search_blocks to search only its blocks.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Only registries with this in their id, name or description, such as dashboard or animated.",
      "type": "string",
      "maxLength": 80
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools