Systra Tools
Search and pull 500+ production-ready React + Tailwind sections and elements
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"systra-tools": {
"url": "https://systra.tools/api/mcp"
}
}
}Remote endpoints
https://systra.tools/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢list_categories
Lists every component category of the Systra Tools library with its slug, its title and how many components it holds. Start here when the user names a kind of page part (hero, pricing, footer) instead of a component, then pass the slug to list_components. No parameters, works without a key.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_components(category)
Lists component names, optionally limited to one category, one line each with the name and the category slug. Use it to browse a category before choosing; use search_components instead when you already have a keyword. Returns names only, no source: fetch the code with get_component. Works without a key; without one, the components whose source is free are marked "free".
Input Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "Category slug from list_categories, e.g. 'heroes', 'cta', 'pricing', 'forms', 'footer'. Omit it to list every component (more than 600)."
}
},
"additionalProperties": false
}🟢search_components(query)
Finds components whose name or category contains the search term (one term, case-insensitive substring match) and returns their names with the category slug. Use it when you know roughly what you need, such as 'pricing', 'marquee', 'testimonial' or 'countdown'; use list_components to see a whole category. Names are English PascalCase, so short English words match best. Follow up with get_component for the source.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "One keyword or name fragment, e.g. 'hero', 'gallery', 'bento'. Matched against component names and category slugs and titles."
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢get_component(name)
Returns the complete, copy-ready React/TSX source of one component as designed, plus notes on its images and any extra files it needs. Components use Tailwind CSS classes and import only react, framer-motion and lucide-react. Use it once you know the exact name; use get_component_styled instead when the component should take on an extracted brand style. Without a premium key, source comes back for the free components, the first six of every category, which list_components and search_components mark as "free"; other names return a notice on how to get a key.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Component name as listed by list_components or search_components, e.g. 'OrbitGalleryHero'. Matching ignores case."
}
},
"required": [
"name"
],
"additionalProperties": false
}🟢list_styles(query)
Lists the brand styles extracted from real websites with the Systra style extractor: slug, site name, primary and accent colour and heading font. Pass query to search by site name, domain, colour or font, for example 'bakery' or 'Inter'. Use it to find a slug for get_style, get_component_styled or get_recipe. Works without a key.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (optional). Every word must appear in the slug, site name, domain, colours or fonts. Without it, the 30 newest styles are listed."
}
},
"additionalProperties": false
}🟢get_style(slug)
Returns every design token of one extracted brand style: colours, font families and sizes, spacing, radii, CSS variables and the generated DESIGN.md (up to 4000 characters). Use it to theme your own code or set up a design system; use get_component_styled when you want one specific component already paired with the style.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Style slug exactly as listed by list_styles."
}
},
"required": [
"slug"
],
"additionalProperties": false
}🟢get_component_styled(name, style)
Returns one component's source together with the tokens of a brand style, step-by-step instructions for mapping the component's colours, fonts and radii onto that style, and the colour values the component uses today. Use it instead of get_component when the result should match a specific brand. The server does not rewrite the code; you apply the mapping. Same premium rule as get_component.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Component name as listed by list_components, e.g. 'GradientHeroSection'."
},
"style": {
"type": "string",
"description": "Style slug exactly as listed by list_styles."
}
},
"required": [
"name",
"style"
],
"additionalProperties": false
}🟢list_images(album, format, page)
Lists images and a few videos from the Systra Tools media library (all AI-generated), each with a permanent URL to use directly as src, plus title, album and format. Filter by album and format, 100 per page. Use it to browse an album; use search_images to find a motif by keyword. Without a premium key only the free images are returned, three per album.
Input Schema
{
"type": "object",
"properties": {
"album": {
"type": "string",
"description": "Album key (optional, German): verlaeufe, abstrakt, surreal, objekte, freisteller, natur, interior, essen, portraet, beauty, hochzeit, menschen, arbeitsplatz, business, industrie, gesundheit, sport, autos, luftfahrt, nachtleben. Without one, every album is returned."
},
"format": {
"type": "string",
"enum": [
"landscape",
"portrait",
"square"
],
"description": "Image format to filter by (optional)."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of the result, 100 images per page (optional, default 1)."
}
},
"additionalProperties": false
}🟢search_images(query, page)
Finds images in the media library (all AI-generated) whose title, tags, file name or album contain every word of the query, and returns their permanent URLs, 100 per page. Use it for a motif, such as 'red dress', 'laptop desk' or 'misty forest'; use list_images to browse a whole album. Titles and tags are English, album keys German. Without a premium key only the free images are included.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "One or more words; every word must match. E.g. 'gradient', 'laptop', 'red dress'."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of the result, 100 images per page (optional, default 1)."
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢list_posts(query, family)
Lists the Instagram post templates (1080 x 1350) with slug, name, family and whether they need your own imagery. Each template is a single HTML file that can be rebuilt and exported as an image or a video. Pass query to search by name or purpose, for example 'quote' or 'statistic'. Use it to pick a slug for get_post.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (optional). Every word must appear in the slug, name, purpose or family. Can be combined with family."
},
"family": {
"type": "string",
"enum": [
"klar",
"editorial"
],
"description": "Family to filter by (optional): 'klar' are calm informational posts, 'editorial' lives on the image and a serif face."
}
},
"additionalProperties": false
}🟢get_post(slug, lang)
Returns one post template as working instructions: the full HTML file, an export script to render it locally as PNG or video, and the rules on what may be changed. The server renders nothing; you edit and export the file. Use it after list_posts.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Template slug as listed by list_posts."
},
"lang": {
"type": "string",
"enum": [
"de",
"en"
],
"description": "Language of the instructions (optional, English by default)."
}
},
"required": [
"slug"
],
"additionalProperties": false
}🟢list_recipes(query)
Lists curated page recipes: proven section sequences for complete landing pages (for example SaaS, coaching or a hotel), each with its number of sections and a short purpose. Pass query to search by industry, purpose or section, for example 'hotel' or 'pricing'. Use it when the user wants a whole page rather than one section, then call get_recipe.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (optional). Every word must appear in the slug, title, description or section names. Without it, every recipe is listed."
}
},
"additionalProperties": false
}🟢get_recipe(name, style)
Returns one page recipe: the ordered sections with the purpose of each, a composition file where available, and the full source of every section. Pass style to add brand tokens and adaptation instructions. Without a premium key, sections that are not free are named but their source is held back. The answer is long because it contains several complete components.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Recipe slug as listed by list_recipes, e.g. 'saas-produkt' or 'hotel-stay'."
},
"style": {
"type": "string",
"description": "Style slug from list_styles (optional), to adapt the page to a brand."
}
},
"required": [
"name"
],
"additionalProperties": false
}Recommended Prompts
search_componentssearch_componentsget_componentget_componentlist_categoriesRecorded Call Examples
list_stylesInput Parameters
{}Output Result
{
"result": {
"content": [
{
"type": "text",
"text": "Extrahierte Marken-Stile (10):\n- systra-tools-stpm: Systra Tools | Primär #1C1C1C, Akzent #FF5C00, Font Albert Sans\n- superside-com-pfto: Superside | Primär #D8FE63, Akzent #5CF5A2, Font Inter Tight\n- vercel-com-u1js: Vercel | Primär #000000, Akzent #000000, Font GeistSans\n- anthropic-com-lna0: Home \\ Anthropic | Primär #1B1B1B, Akzent #1B1B1B, Font Anthropic Serif\n- antigravity-google-7kud: Google Antigravity | Primär #1C1C1C, Akzent #353535, Font Google Sans Flex\n- airbnb-de-ktd8: Airbnb | Primär #FF385C, Akzent #FF385C, Font Circular\n- systrastudios-de-7843: Systra Studios | Primär #4D8DF5, Akzent #FFB22B, Font Manrope\n- lovable-dev-km9h: Lovable | Primär #000000, Akzent #AE55EF, Font Camera Plain Variable\n- resend-com-1mnl: Resend | Primär #343537, Akzent #9146FF, Font ABCFavorit\n- thenerdstack-com-c1ma: Nerd Stack | Primär #FE7B3E, Akzent #6C3AEB, Font Geist\n\nget_style liefert alle Tokens, get_component_styled eine Komponente samt Stil-Anleitung."
}
],
"isError": false
},
"durationMs": 1446
}Community
Evidence