Founding price: $35, then $79.99 after 23:59 UTC on 4 November, then $79.99
Get ProThe server lives at https://ui.tealmac.com/mcp. It speaks MCP over
Streamable HTTP and is stateless: there is no session, and every request is
answered on its own. It supports initialize, tools/list and tools/call.
Connect your agent shows how to add it
to a client.
Every tool answers with one text content block holding JSON, and the same
object as structuredContent for clients that read it.
What exists, grouped into categories with counts. Use the category names as
the category filter of list_items.
Input: none.
{
"counts": {
"components": 233,
"charts": 36,
"blocks": 109,
"templates": 135
},
"categories": {
"component": [{ "name": "Text", "count": 26 }],
"chart": [{ "name": "Charts: area", "count": 7 }],
"block": [{ "name": "Heroes", "count": 8 }],
"template": [{ "name": "Application UI", "count": 100 }]
}
}Ranked search by what you need, across names, titles, descriptions and categories.
| Input | Type | Required | Notes |
|---|---|---|---|
query | string | yes | For example "animated number" or "file upload" |
type | string | no | component, chart, block or template |
limit | number | no | Default 10, at most 50 |
{
"query": "file upload",
"total": 1,
"items": [
{
"name": "file-dropzone",
"title": "File Dropzone",
"type": "component",
"tier": "free",
"category": "Forms and feedback",
"description": "…",
"url": "https://ui.tealmac.com/docs/components/file-dropzone",
"install": "npx shadcn@latest add https://ui.tealmac.com/r/file-dropzone.json"
}
]
}Every item, optionally narrowed.
| Input | Type | Required | Notes |
|---|---|---|---|
category | string | no | A name from list_categories |
type | string | no | Same values as in search_items |
Answers with { "total": n, "items": [...] }, each item with its name,
title, type, tier, category and description.
Everything about one item.
| Input | Type | Required |
|---|---|---|
name | string | yes |
{
"name": "star-rating",
"type": "component",
"title": "Star Rating",
"description": "An accessible, keyboard-navigable star rating input.",
"category": "Forms and feedback",
"docsUrl": "https://ui.tealmac.com/docs/components/star-rating",
"registryUrl": "https://ui.tealmac.com/r/star-rating.json",
"tier": "free",
"install": {
"command": "npx shadcn@latest add https://ui.tealmac.com/r/star-rating.json",
"namespaced": "npx shadcn@latest add @tealmac/star-rating",
"requiresLicense": false
},
"importFrom": "@/components/ui/star-rating",
"dependencies": [],
"registryDependencies": [],
"props": [
{
"name": "value",
"type": "number",
"default": "",
"description": "Controlled rating."
}
],
"usage": "import { StarRating } from \"@/components/ui/star-rating\"\n…",
"accessibility": [
"Sets ARIA roles or attributes.",
"Handles keyboard input."
],
"checks": {
"tests": true,
"docs": true,
"demo": true,
"a11y": true,
"ssrSafe": true,
"reducedMotion": null
},
"licence": "MIT"
}The full source is at registryUrl. Pro items return their page and a note
that installing needs a licence key, never their source.
The exact command to run in the project.
| Input | Type | Required | Notes |
|---|---|---|---|
name | string | yes | |
packageManager | string | no | npm (default), pnpm, yarn or bun |
{
"name": "star-rating",
"packageManager": "pnpm",
"command": "pnpm dlx shadcn@latest add https://ui.tealmac.com/r/star-rating.json",
"namespaced": "pnpm dlx shadcn@latest add @tealmac/star-rating",
"requiresLicense": false
}The rules the library is built to: labelled controls, keyboard access, visible focus, reduced motion, contrast, theme tokens instead of fixed colours, and layouts that fit a phone. Read them before writing UI, so the first draft already follows them.
Input: none.
{
"rules": [
{
"id": "label-controls",
"title": "Every control has an accessible name",
"why": "…",
"fix": "…",
"bad": "<button><X /></button>",
"good": "<button aria-label=\"Close\"><X aria-hidden /></button>"
}
],
"details": "https://ui.tealmac.com/quality"
}Unknown tools and invalid arguments come back as a JSON-RPC error (unknown
method) or as a tool result with isError: true and a message that says what
to fix, for example a suggestion when an item name doesn't exist.