AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add a5c-ai/babysitter --skill asyncapi-docs --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Asyncapi Docs?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/a5c-ai-asyncapi-docs-babysitter)More formats (shields.io, HTML) on the badges page.
---
name: asyncapi-docs
description: AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
backlog-id: SK-016
metadata:
author: babysitter-sdk
version: "1.0.0"
graph:
domains: [domain:software-engineering]
specializations: [specialization:technical-documentation]
skillAreas: [skill-area:api-doc-generation, skill-area:reference-docs]
roles: [role:technical-writer, role:documentation-engineer]
---
# 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
```json
{
"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
```yaml
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
```yaml
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
```yaml
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:
$ref: '#/components/messages/Notification'
bindings:
ws:
query:
type: object
properties:
token:
type: string
description: Authentication token
required:
- token
```
### MQTT Channel
```yaml
asyncapi: 3.0.0
info:
title: IoT Sensor API
version: 1.0.0
servers:
production:
host: mqtt.example.com:8883
protocol: mqtts
description: MQTT broker for IoT devices
channels:
sensorReadings:
address: sensors/{sensorId}/readings
parameters:
sensorId:
description: Unique sensor identifier
messages:
SensorReading:
$ref: '#/components/messages/SensorReading'
bindings:
mqtt:
qos: 1
retain: false
bindingVersion: '0.2.0'
```
## AsyncAPI CLI Commands
### Validation
```bash
# Validate specification
asyncapi validate asyncapi.yaml
# Validate with custom rules
asyncapi validate asyncapi.yaml --rule-file .spectral.yaml
```
### Documentation Generation
```bash
# Generate HTML documentation
asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template -o docs
# Generate Markdown
asyncapi generate fromTemplate asyncapi.yaml @asyncapi/markdown-template -o docs
# Generate React app
asyncapi generate fromTemplate asyncapi.yaml @asyncapi/react-component -o docs
```
### Code Generation
```bash
# TypeScript types
asyncapi generate models asyncapi.yaml typescript -o src/types
# Java models
asyncapi generate models asyncapi.yaml java -o src/main/java
# Python models
asyncapi generate models asyncapi.yaml python -o src/models
```
## Spectral Linting Rules
### .spectral.yaml
```yaml
extends:
- "@asyncapi/spectral-ruleset"
rules:
# Require descriptions
asyncapi-info-description: error
asyncapi-channel-description: warn
asyncapi-operation-description: warn
# Require examples
asyncapi-message-examples: warn
# Schema validation
asyncapi-payload-unsupported-schemaFormat: error
asyncapi-schema: error
# Custom rules
operation-summary-required:
description: Operations must have summaries
given: "$.operations[*]"
then:
field: summary
function: truthy
severity: warn
message-content-type:
description: Messages must specify content type
given: "$.components.messages[*]"
then:
field: contentType
function: truthy
severity: error
```
## Documentation Best Practices
### Channel Documentation
```yaml
channels:
paymentCompleted:
address: payments.completed.v1
description: |
## Payment Completed Events
Published when a payment is successfully processed.
### Use Cases
- Order fulfillment initiation
- Customer notification
- Financial reconciliation
### Consumer Guidelines
- Process events idempotently (use `paymentId` for deduplication)
- Acknowledge within 30 seconds
- Implement dead letter queue handling
### SLA
- **Latency**: Events published within 1s of payment completion
- **Ordering**: Events are ordered by `paymentId` within partition
- **Retention**: 7 days
```
### Schema Documentation
```yaml
components:
schemas:
Payment:
type: object
title: Payment
description: |
Represents a completed payment transaction.
## Versioning
This schema follows semantic versioning. Breaking changes
will result in a new major version.
## Privacy
Contains PII - handle according to data protection policies.
required:
- paymentId
- amount
- currency
properties:
paymentId:
type: string
format: uuid
description: Unique payment identifier
x-field-extra-annotation: "@Id"
amount:
type: number
format: decimal
description: Payment amount in minor units (cents)
minimum: 0
examples:
- 1999
- 50000
currency:
type: string
pattern: "^[A-Z]{3}$"
description: ISO 4217 currency code
examples:
- USD
- EUR
- GBP
```
## Workflow
1. **Parse specification** - Load and validate AsyncAPI document
2. **Lint specification** - Run Spectral rules
3. **Validate schemas** - Check JSON Schema validity
4. **Generate documentation** - Create HTML/Markdown output
5. **Generate code** - Create typed models (optional)
6. **Bundle specification** - Create bundled output file
## Dependencies
```json
{
"devDependencies": {
"@asyncapi/cli": "^1.0.0",
"@asyncapi/html-template": "^2.0.0",
"@asyncapi/markdown-template": "^1.0.0",
"@asyncapi/generator": "^1.0.0",
"@asyncapi/modelina": "^3.0.0",
"@stoplight/spectral-cli": "^6.0.0",
"@asyncapi/spectral-ruleset": "^1.0.0"
}
}
```
## Best Practices Applied
- Use semantic versioning in spec info
- Document all channels with descriptions
- Include message examples
- Specify content types for messages
- Use traits for common patterns
- Document protocol-specific bindings
- Include consumer guidelines
- Define SLAs in documentation
## References
- AsyncAPI Specification: https://www.asyncapi.com/docs/reference/specification/v3.0.0
- AsyncAPI CLI: https://www.asyncapi.com/tools/cli
- AsyncAPI Generator: https://www.asyncapi.com/tools/generator
- AsyncAPI Modelina: https://www.asyncapi.com/tools/modelina
- Spectral: https://stoplight.io/open-source/spectral
## Target Processes
- api-doc-generation.js
- api-reference-docs.js
- data-model-docs.js
- docs-as-code-pipeline.js
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!