{"serverId":"mcp-registry/dev.21st/mcp","tools":[{"name":"add_to_list","fixed":{"name":"add_to_list","description":"Add (or with remove:true, remove) a component/theme/template to one of the caller's bookmark lists. Idempotent; adding also ensures the item is bookmarked. Use the list id from list_bookmark_lists and the item id+type from a search result.","inputSchema":{"type":"object","required":["listId","type","id"],"properties":{"id":{"type":["number","string"],"description":"The item id (component demo id / theme uuid / template id)."},"type":{"enum":["component","theme","template"],"type":"string","description":"What kind of item the id refers to."},"listId":{"type":"string","description":"The bookmark list id (uuid)."},"remove":{"type":"boolean","description":"Set true to remove the item from the list."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Add / remove an item in a bookmark list"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":207,"tokensAfter":207},{"name":"bookmark","fixed":{"name":"bookmark","description":"Add (or with remove:true, delete) a bookmark - the 'heart'/save - for a component, theme, or template on the signed-in account. Idempotent. Use the id + type from a search or list result.","inputSchema":{"type":"object","required":["type","id"],"properties":{"id":{"type":["number","string"],"description":"The item id (component demo id / theme uuid / template id)."},"type":{"enum":["component","theme","template"],"type":"string","description":"What kind of item the id refers to."},"remove":{"type":"boolean","description":"Set true to remove the bookmark instead of adding it."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Bookmark / unbookmark a 21st item"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":173,"tokensAfter":173},{"name":"create_bookmark_list","fixed":{"name":"create_bookmark_list","description":"Create a new personal named bookmark list on the signed-in account.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The list name."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a bookmark list"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"delete_component","fixed":{"name":"delete_component","description":"Remove YOUR OWN component from the 21st.dev marketplace (sets visibility to private). Owner-only. Soft removal - the component, its demos and analytics are preserved, just hidden; there is no hard delete for published components.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"The component's slug."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Unpublish your 21st component"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"delete_template","fixed":{"name":"delete_template","description":"Permanently delete a template YOU published to 21st.dev. Owner-only. Unlike components/themes, this is a HARD delete - the listing row is removed and cannot be recovered.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"number","description":"The template id."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete your 21st template"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"delete_theme","fixed":{"name":"delete_theme","description":"Remove YOUR OWN theme from the 21st.dev community listing (unpublishes it). Owner-only. Soft - the row and any bookmarks/likes on it are preserved.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The theme id (uuid)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Unpublish your 21st theme"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"get_bookmark_list","fixed":{"name":"get_bookmark_list","description":"List the items (components, themes, templates) inside one of the caller's bookmark lists, as the uniform search metadata shape. Pass the list `id` from list_bookmark_lists. Free.","inputSchema":{"type":"object","required":["listId"],"properties":{"limit":{"type":"number","maximum":100,"minimum":1,"description":"Max items (default 50)."},"listId":{"type":"string","description":"The bookmark list id (uuid) from list_bookmark_lists."}}},"annotations":{"readOnlyHint":true},"title":"Get a bookmark list's items"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"get_component","fixed":{"name":"get_component","description":"Retrieve the full code for one component result: the component source AND its demo (usage example) together, plus the install command and registry dependencies. Pass the `id` (a DEMO id) from any search / list_bookmarks / get_bookmark_list / list_team_components result. PAID: on the free tier this consumes one of your daily retrievals and may instead return a paywall (structuredContent.locked=true) or not-found (found=false) rather than code - check before treating the text as source.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"number","description":"The `id` (a demo id) from a search/list result."}}},"annotations":{"readOnlyHint":true},"title":"Get a 21st component's code"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"get_theme","fixed":{"name":"get_theme","description":"Retrieve a 21st.dev theme's full CSS (the :root / .dark tokens ready to drop into a Tailwind/shadcn app), plus its name and page url. Pass the `id` from a search result with type 'theme'. Free.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The theme `id` (uuid) from a search result."}}},"annotations":{"readOnlyHint":true},"title":"Get a 21st theme's CSS"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"get_usage","fixed":{"name":"get_usage","description":"Check the caller's 21st.dev account tier and remaining free daily component-code retrieval quota. NOTE: search and all metadata/list tools are free and unmetered - ONLY get_component (a component's code) is metered. Call this if a get_component result mentions a limit.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get 21st account usage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"list_bookmark_lists","fixed":{"name":"list_bookmark_lists","description":"List the signed-in user's personal named bookmark lists (id, name, item count). These are curated collections that can hold components, themes and templates together. Free.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List the caller's bookmark lists"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"list_bookmarks","fixed":{"name":"list_bookmarks","description":"List the signed-in user's bookmarked 21st.dev items (components, themes, templates) as metadata - the same uniform shape as `search`, and also FREE. Use `type` to scope to one kind, or 'all' (default). Call get_component with a component id to fetch its code; themes/templates link out via url.","inputSchema":{"type":"object","properties":{"type":{"enum":["component","theme","template","all"],"type":"string","description":"Which bookmarks to list. Default 'all'."},"limit":{"type":"number","maximum":50,"minimum":1,"description":"Max results (default 20)."}}},"annotations":{"readOnlyHint":true},"title":"List the caller's 21st bookmarks"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":168,"tokensAfter":168},{"name":"list_team_components","fixed":{"name":"list_team_components","description":"List the components in a team's library, as the uniform search metadata shape. Requires membership. Pass teamId (from list_teams); optionally libraryId (from list_team_libraries) to scope to one library. Free metadata; use get_component for code.","inputSchema":{"type":"object","required":["teamId"],"properties":{"limit":{"type":"number","maximum":200,"minimum":1,"description":"Max results (default 50)."},"teamId":{"type":"string","description":"The team id (uuid) from list_teams."},"libraryId":{"type":"string","description":"Optional: scope to one library (registry) id."}}},"annotations":{"readOnlyHint":true},"title":"List a team library's components"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"list_team_libraries","fixed":{"name":"list_team_libraries","description":"List the LIBRARIES (registries / UI kits) inside one team, with component counts. A team can have several libraries. Requires membership. Pass teamId from list_teams; then list_team_components to see a library's components. Free.","inputSchema":{"type":"object","required":["teamId"],"properties":{"teamId":{"type":"string","description":"The team id (uuid) from list_teams."}}},"annotations":{"readOnlyHint":true},"title":"List one team's libraries"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"list_team_lists","fixed":{"name":"list_team_lists","description":"List a team's SHARED bookmark lists (id, name, item count) - collections owned by the team, distinct from the team's libraries and from your personal lists (list_bookmark_lists). Requires membership. Use get_bookmark_list to see a list's items. Free.","inputSchema":{"type":"object","required":["teamId"],"properties":{"teamId":{"type":"string","description":"The team id (uuid) from list_teams."}}},"annotations":{"readOnlyHint":true},"title":"List one team's shared bookmark lists"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"list_teams","fixed":{"name":"list_teams","description":"List the teams (workspaces) the signed-in user belongs to, each with how many libraries and shared lists it has. A team is a container; drill into one with list_team_libraries / list_team_lists using its teamId. Free.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List the caller's teams"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"search","fixed":{"name":"search","description":"Search the 21st.dev catalog across ALL entity types - React/shadcn components, themes, and templates - returning lightweight metadata ONLY (name, description, preview image, author, url/install, id, and price for templates). Use `type` to scope to one kind, or 'all' (default) to search everything. FREE. Retrieval differs by kind: for a component result call get_component with its `id` (that id is a demo id) for the PAID code; for a theme call get_theme with its `id` (a uuid) for the free CSS; te","inputSchema":{"type":"object","required":["query"],"properties":{"tag":{"type":"string","description":"Optional tag slug filter (templates)."},"free":{"type":"boolean","description":"Templates only: true = free (price 0), false = paid. No effect elsewhere."},"mine":{"type":"boolean","description":"Filter to the signed-in caller's own items."},"sort":{"enum":["recommended","popular","newest","date","price"],"type":"string","description":"Themes: recommended|popular|newest. Templates: recommended|date|price. No effect on components (always relevance-ranked)."},"type":{"enum":["component","theme","template","all"],"type":"string","description":"Which catalog to search. Default 'all'."},"color":{"type":"string","description":"Optional primary-color bucket filter (themes), e.g. 'blue', 'violet'."},"liked":{"type":"boolean","description":"Filter to items the caller has bookmarked."},"limit":{"type":"number","maximum":30,"minimum":1,"description":"Max results (default 8)."},"query":{"type":"string","description":"What you need, e.g. 'pricing table', 'dark violet theme', 'saas template'."},"author":{"type":"string","description":"Filter to items by this username."}}},"annotations":{"readOnlyHint":true},"title":"Search 21st (components, themes, templates)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":476,"tokensAfter":476}],"toolsChanged":17,"tokensSaved":0,"todo":[{"tool":"edit_template","params":["name","description"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}