AsyncAPI Documentation Skill
Generate and validate documentation for event-driven APIs using the AsyncAPI specification with support for multiple messaging protocols.
Capabilities
- Parse and validate AsyncAPI 2.x and 3.x specifications
- Generate documentation from AsyncAPI specs
- Document event/message schemas
- Channel and operation documentation
- Protocol-specific binding documentation (Kafka, MQTT, WebSocket, AMQP)
- Code generator integration
- Spectral linting for AsyncAPI
- Schema validation and type generation
Usage
Invoke this skill when you need to:
- Document event-driven microservices
- Create message broker API documentation
- Generate client code from async specifications
- Validate AsyncAPI specifications
- Create interactive documentation sites
Inputs
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | specPath | string | Yes | Path to AsyncAPI specification | | outputDir | string | No | Documentation output directory | | generator | string | No | html, markdown, react (default: html) | | validate | boolean | No | Run spec validation (default: true) | | lint | boolean | No | Run Spectral linting (default: true) | | generateCode | boolean | No | Generate client/server stubs | | codeLanguage | string | No | Code generation target language |
Input Example
{
"specPath": "./asyncapi.yaml",
"outputDir": "docs/async",
"generator": "html",
"validate": true,
"lint": true,
"generateCode": true,
"codeLanguage": "typescript"
}
Output Structure
docs/async/
├── index.html # Main documentation page
├── servers.html # Server/broker documentation
├── channels/
│ ├── user-events.html # Channel documentation
│ └── order-events.html
├── messages/
│ ├── UserCreated.html # Message documentation
│ └── OrderPlaced.html
├── schemas/
│ ├── User.html # Schema documentation
│ └── Order.html
├── bindings/ # Protocol bindings
│ └── kafka.html
├── search.json # Search index
└── asyncapi.json # Bundled spec
AsyncAPI Specification Patterns
Basic AsyncAPI 3.0 Document
asyncapi: 3.0.0
info:
title: User Events API
version: 1.0.0
description: |
Event-driven API for user management operations.
## Overview
This API publishes events when user data changes.
Consumers can subscribe to specific channels to receive
real-time updates.
## Authentication
All connections require a valid API key passed in the
connection headers.
contact:
name: API Team
email: api-team@example.com
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
servers:
production:
host: kafka.example.com:9092
protocol: kafka
description: Production Kafka cluster
security:
- $ref: '#/components/securitySchemes/sasl'
tags:
- name: production
description: Production environment
staging:
host: kafka-staging.example.com:9092
protocol: kafka
description: Staging environment
channels:
userCreated:
address: user.events.created
messages:
UserCreatedMessage:
$ref: '#/components/messages/UserCreated'
description: |
Published when a new user account is created.
**Trigger**: User registration completion
**Frequency**: ~1000 events/day
userUpdated:
address: user.events.updated
messages:
UserUpdatedMessage:
$ref: '#/components/messages/UserUpdated'
operations:
publishUserCreated:
action: send
channel:
$ref: '#/channels/userCreated'
summary: Publish user created event
description: |
Publishes an event when a new user is created.
Events are partitioned by user ID.
tags:
- name: users
bindings:
kafka:
groupId: user-service
clientId: user-publisher
subscribeUserCreated:
action: receive
channel:
$ref: '#/channels/userCreated'
summary: Subscribe to user created events
description: |
Subscribe to receive notifications when new users
are created. Ideal for:
- Welcome email services
- Analytics tracking
- Audit logging
components:
messages:
UserCreated:
name: UserCreated
title: User Created Event
summary: Event published when a user is created
contentType: application/json
traits:
- $ref: '#/components/messageTraits/commonHeaders'
payload:
$ref: '#/components/schemas/UserCreatedPayload'
examples:
- name: NewUser
summary: Standard user creation
payload:
userId: "usr_123456"
email: "john@example.com"
createdAt: "2026-01-24T10:30:00Z"
source: "web-signup"
UserUpdated:
name: UserUpdated
title: User Updated Event
summary: Event published when user data changes
contentType: application/json
payload:
$ref: '#/components/schemas/UserUpdatedPayload'
schemas:
UserCreatedPayload:
type: object
description: Payload for user created events
required:
- userId
- email
- createdAt
properties:
userId:
type: string
description: Unique user identifier
pattern: "^usr_[a-zA-Z0-9]+$"
examples:
- "usr_123456"
email:
type: string
format: email
description: User's email address
createdAt:
type: string
format: date-time
description: Timestamp of user creation
source:
type: string
enum:
- web-signup
- mobile-app
- admin-portal
- api
description: Registration source
UserUpdatedPayload:
type: object
required:
- userId
- updatedAt
- changes
properties:
userId:
type: string
description: Unique user identifier
updatedAt:
type: string
format: date-time
changes:
type: array
items:
type: object
properties:
field:
type: string
oldValue:
type: string
newValue:
type: string
messageTraits:
commonHeaders:
headers:
type: object
properties:
correlationId:
type: string
description: Correlation ID for distributed tracing
format: uuid
timestamp:
type: string
format: date-time
description: Event timestamp
version:
type: string
description: Schema version
securitySchemes:
sasl:
type: scramSha256
description: SASL/SCRAM-SHA-256 authentication
Kafka-Specific Bindings
channels:
orderEvents:
address: orders.events
bindings:
kafka:
topic: orders.events.v1
partitions: 12
replicas: 3
topicConfiguration:
cleanup.policy:
- delete
retention.ms: 604800000 # 7 days
segment.bytes: 1073741824
messages:
OrderCreated:
bindings:
kafka:
key:
type: string
description: Order ID used as partition key
schemaIdLocation: header
schemaIdPayloadEncoding: confluent
WebSocket Channel
asyncapi: 3.0.0
info:
title: Real-time Notifications API
version: 1.0.0
servers:
production:
host: ws.example.com
protocol: wss
description: WebSocket server for real-time notifications
channels:
notifications:
address: /notifications/{userId}
parameters:
userId:
description: The user ID to receive notifications for
messages:
Notification:
$re