Agent skill
mcp-widget-authoring
Create ChatKit UI widgets in MCP servers. Use when building visual components that render in ChatKit from tool results. Covers widget templates with JSON Schema validation, WidgetTemplateService for hydration, BaseMCPServer patterns, and multi-channel support for Slack. Triggers on widget template, MCP widget, tool result widget, or ChatKit Card.
Install this agent skill to your Project
npx add-skill https://github.com/rbarazi/agent-skills/tree/main/skills/mcp-widget-authoring
SKILL.md
MCP Widget Authoring
Create visual widgets that render in ChatKit from MCP tool results.
Quick Start
Widgets flow from MCP server → tool result → ChatKit rendering:
MCP Server Tool → WidgetTemplateService.hydrate_for_tool_result() → ui:// resource → ChatKit
Key components:
- Widget template file (
.widgetor.yml) WidgetTemplateServicefor hydrationBaseMCPServerfor tool registration- MCP-compliant tool result format
Widget Template Format
Create templates in config/ui_widget_templates/:
{
"version": "1.0",
"name": "weatherCurrent",
"copy_text": "Weather in {{location}}: {{temperature}}",
"template": "{\"type\":\"Card\",\"children\":[{\"type\":\"Text\",\"value\":\"{{location}}\"}]}",
"jsonSchema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"temperature": { "type": "string" }
},
"required": ["location", "temperature"]
}
}
Using in MCP Server
class WeatherMCPServer::Server < BaseMCPServer
server_name "weather"
widget_resource "ui://widgets/weather/{instance_id}",
name: "Weather Widget",
description: "Displays current weather"
tool :get_current_weather
def get_current_weather(location:, unit: "celsius")
weather_data = fetch_weather(location, unit)
WidgetTemplateService.hydrate_for_tool_result(
template: :weatherCurrent,
data: { location: location, temperature: "#{weather_data[:temp]}#{unit_symbol}" },
text: "Current weather in #{location}: #{weather_data[:temp]}",
tool_name: "weather"
)
end
end
Result Format
The tool result embeds a ui:// resource:
{
"content": [
{ "type": "text", "text": "Current weather in Toronto: 72°F" },
{
"type": "resource",
"resource": {
"uri": "ui://widgets/weather/abc123",
"mimeType": "application/vnd.ui.widget+json",
"text": "{\"widget\":{...},\"copy_text\":\"...\"}"
}
}
],
"isError": false
}
Reference Files
For detailed patterns, see:
- templates.md - Widget template format and JSON Schema
- hydration.md - WidgetTemplateService usage patterns
- mcp-server.md - BaseMCPServer integration
- components.md - Available ChatKit components (Card, Text, Image, etc.)
- multi-channel.md - Slack Work Objects and Block Kit
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
test-auth-helpers
Implement authentication testing patterns with RSpec, FactoryBot, and test helpers for Rails applications. Use when writing controller specs, system tests, or request specs that require authenticated users and multi-tenant account context.
multi-tenant-accounts
Implement multi-tenant architecture using an Account model as the tenant boundary. Use when building SaaS applications, team-based apps, or any system where data must be isolated between organizations/accounts.
user-management
Implement user CRUD operations within an account with permission controls and feature flags. Use when building team member management, user administration, or account user settings in multi-tenant Rails applications.
oauth21-provider
Implement an RFC-compliant OAuth 2.1 authorization server in Rails applications. Use when building apps that need to authorize third-party clients (like MCP clients, API consumers, or external integrations) using industry-standard OAuth flows with PKCE, dynamic client registration, and token management.
password-reset-flow
Implement secure password reset with Rails 8's built-in token generation. Use when building "forgot password" functionality with email verification and time-limited reset tokens.
code-pattern-extraction
Extract reusable design and implementation patterns from codebases into Skills. Use when asked to analyze code for patterns, document architectural decisions, create transferrable implementation guides, or extract knowledge into Skills. Transforms working implementations into comprehensive, reusable Skills that can be applied to new projects.
Didn't find tool you were looking for?