DRYL Components
Server Details
Blazor UI library DRYL: find components, read their exact API and tokens, validate Razor markup.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool maps to a distinct step in a clear workflow: search_components discovers, get_component fetches exact API, get_tokens retrieves design tokens, and validate_markup verifies output. Boundaries are explicit, and the descriptions even prescribe the order ('use this first', 'then call get_component', 'call it on every DRYL markup').
All four names follow a strict snake_case verb_noun pattern (search_components, get_component, get_tokens, validate_markup). The verbs are meaningful and predictably paired with their resource.
Four tools is well-scoped for a component-library reference server: discovery, API detail, tokens, and validation — no redundant tool and nothing padded. Each one supports an identifiable agent workflow.
The lifecycle from find → inspect → style → validate is fully covered. Minor gaps: no way to enumerate all components/categories at once, and no token lookup/search or getting-started/installation guidance, though agents can work around these via search_components and get_tokens.
Available Tools
4 toolsget_componentGet a DRYL component's APIARead-onlyIdempotentInspect
The exact public API of one DRYL component: every parameter with type, default and description, the members of every enum it uses, its public methods and a canonical Razor example. DRYL variants are enums, never strings: write an enum value as qualifiedName.Member (e.g. Variant="DrylButton.ButtonVariant.Secondary") — many enums are nested in their component, so the bare enum name does not compile.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Component name, case-insensitive, with or without the 'Dryl' prefix: 'DrylButton', 'button'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| enums | Yes | |
| apiUrl | Yes | |
| aiAware | Yes | |
| docsUrl | Yes | |
| example | Yes | |
| methods | Yes | |
| summary | Yes | |
| version | Yes | |
| category | Yes | |
| parameters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world behavior. The description adds meaningful context beyond that: it describes exactly what is returned and warns that enum values must be qualified with their component (e.g. 'DrylButton.ButtonVariant.Secondary') because bare enum names do not compile. It does not cover failure behavior such as unknown component names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and followed by a critical usage caveat. Every clause contributes information and there is no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with an output schema and rich annotations, the description is complete: it states what the tool returns, why the output is structured that way, and the key enum-qualification rule an agent needs to apply the results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'name' parameter is fully documented in the schema, including case-insensitivity and the optional 'Dryl' prefix. The description adds no parameter-specific semantics beyond implying a single component name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving 'the exact public API of one DRYL component', and enumerates what that includes (parameters, enum members, methods, Razor example). It is clear without naming siblings, though it does not explicitly contrast with search_components or get_tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'one DRYL component' and the detailed output contents, but there is no explicit statement of when to choose this over search_components or get_tokens. The enum-qualification warning is useful but concerns how to consume the result, not when to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tokensGet DRYL design tokensARead-onlyIdempotentInspect
The CSS custom properties DRYL styles itself with, grouped (colors, glass, accent, spacing, radius, motion, …), with the dark value and — where light mode differs — the light value. Reference these with var(--name) in your CSS instead of writing literal colors, sizes or durations; DRYL follows the user's color mode through them.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional group name, case-insensitive ('Motion', 'Spacing'). Omit to get every group. |
Output Schema
| Name | Required | Description |
|---|---|---|
| version | Yes | |
| categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, so the safety profile is covered. The description adds genuine content-shape context the annotations cannot: the dark value is always present, the light value only appears where it differs, and tokens follow the user's color mode. It appropriately omits return formatting because an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and its groups, then the var(--name) usage rule; nothing repeats the name or title. The middle clause about dark/light values is slightly tangled with its em-dash aside but still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema handling return shape, 100% parameter coverage, and annotations covering the safety profile, the description supplies what remains: what the tokens are, how they are grouped, and the dark/light mode behavior. The only real omission is any hint that a category filter exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the optional case-insensitive 'category' parameter is fully documented in the schema, which sets the baseline at 3. The description never mentions that results can be narrowed to one group — it only says tokens are 'grouped' — so it adds no meaning beyond the schema and slightly implies an always-full listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the precise resource — DRYL's CSS custom properties — and enumerates the groups (colors, glass, accent, spacing, radius, motion), which is far more specific than the title. It is unmistakably different from get_component or validate_markup, though the retrieval verb itself is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is downstream usage — 'Reference these with var(--name) in your CSS instead of writing literal colors' — which tells the agent what to do with the output, not when to call this tool versus get_component. There is no explicit trigger condition or exclusion, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_componentsSearch DRYL componentsARead-onlyIdempotentInspect
Find DRYL Blazor components (DRYL.Components and DRYL.Components.Agents) by name, title, category or purpose. Use this first when you need a component for a job; then call get_component for its exact API.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results, 1–50. Default 10. | |
| query | Yes | What to look for: a component name with or without the 'Dryl' prefix ('button', 'DrylDatePicker'), a category ('Inputs') or a purpose ('date', 'chart', 'streaming text'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | Yes | |
| results | Yes | |
| version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond them: results are discovery-level matches scoped to two specific packages, and exact API details require a second call — which sets expectations for what comes back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the discovery-first framing is front-loaded ahead of the escalation step. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary. For a two-parameter search tool with full annotations, the description covers purpose, scope, and the correct follow-up action — nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are fully documented there, including the limit range and query examples. The description's 'by name, title, category or purpose' restates what the query schema already says, adding no syntax or format detail beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Find') plus resource ('DRYL Blazor components'), scoped to the two named packages and to the searchable dimensions (name, title, category, purpose). It is clearly distinguishable from get_component, which the description explicitly names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States exactly when to reach for this tool ('use this first when you need a component for a job') and what the follow-up is ('then call get_component for its exact API'). The alternative and its trigger condition are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_markupValidate DRYL Razor markupARead-onlyIdempotentInspect
Check a Razor snippet's <Dryl…> tags against DRYL's real API before you finish: unknown components, unknown parameters, and enum parameters given a string or a member that does not exist — each with a suggested fix. Call it on every DRYL markup you write or change. It scans tags; it does not compile Razor.
| Name | Required | Description | Default |
|---|---|---|---|
| razor | Yes | The Razor markup to check — a component, a page or a fragment; up to 50,000 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | |
| version | Yes | |
| findings | Yes | |
| notChecked | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, so the safety profile is known. The description adds real value beyond that: it says what the scan reports (three error classes, each with a suggested fix) and explicitly bounds the behavior by excluding compilation, which prevents the agent from over-trusting the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and its target, then the call directive, then the scope caveat. Nothing is redundant with the name or title, and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it still characterizes what the diagnostics look like (errors plus suggested fixes). Adequate; only a note on failure/partial-scan behavior would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents accepted forms ('a component, a page or a fragment') and the 50,000-character limit. The description repeats none of this and adds no extra parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Check a Razor snippet's <Dryl…> tags against DRYL's real API') and enumerates exactly what it detects (unknown components, unknown parameters, bad enum values). This is clearly distinct from the siblings, which are lookup tools (get_component, get_tokens, search_components) rather than validators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger – 'Call it on every DRYL markup you write or change' – and a clear non-goal, 'it does not compile Razor.' It does not name alternatives or spell out when not to call it, but with no competing sibling validator the risk of misuse is low.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
get_component - First observed
get_tokens - First observed
search_components - First observed
validate_markup
Related MCP Connectors
Design system contracts, docs search, and usage validation for @digitaltableteur components.
AI coding assistant for Radzen Blazor — docs, APIs, code samples, and templates for 100+ components.
Find Power Apps PCF controls, read their docs, and validate pcfhub.json manifests.
ng-blatui for Angular — search components, blocks, charts & templates and read their typed API.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to extract structural C# contracts from files and build solution-wide dependency graphs, so they can navigate code and assess change impact without reading entire files.1MIT
- AlicenseAqualityBmaintenanceRead-only catalog of the @blueprint-modular/core design system (104 components). Four tools — list/search/get components and suggest compositions. Public, no auth, Streamable HTTP.41Apache 2.0
- AlicenseAqualityDmaintenanceEnables LLMs to read .NET assemblies as C# by providing tools to list types, decompile types, decompile assemblies, and search decompiled source.4MIT
- AlicenseAqualityAmaintenanceA Model Context Protocol (MCP) server providing 62 AI-optimized tools for .NET/C# semantic code analysis, navigation, refactoring, and code generation using Microsoft Roslyn. Built for AI coding agents - provides compiler-accurate code understanding that AI cannot infer from reading source files alone.6239MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.