asyncapi-docs
AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
Best use case
asyncapi-docs is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
Teams using asyncapi-docs should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/asyncapi-docs/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How asyncapi-docs Compares
| Feature / Agent | asyncapi-docs | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 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.jsRelated Skills
docsbot-ai-automation
Automate Docsbot AI tasks via Rube MCP (Composio). Always search tools first for current schemas.
asyncapi-design
Event-driven API specification with AsyncAPI 3.0 for message-based architectures
asyncapi-authoring
Author and validate AsyncAPI 3.0 specifications for event-driven API design, message brokers, and async communication patterns
api-docs-writing
Update or create API documentation after making changes to the public interface of an API. Use when modifying existing endpoints, introducing new endpoints, or when API implementation changes are complete and tested.
api-docs-generator
Generate API documentation in OpenAPI/Swagger, Markdown, or Postman Collection formats. Use when documenting REST APIs, GraphQL schemas, or creating client code examples.
openai-docs
Use when the user asks how to build with OpenAI products or APIs and needs up-to-date official documentation with citations (for example: Codex, Responses API, Chat Completions, Apps SDK, Agents SDK, Realtime, model capabilities or limits); prioritize OpenAI docs MCP tools and restrict any fallback browsing to official OpenAI domains.
openai-docs-skill
Query the OpenAI developer documentation via the OpenAI Docs MCP server using CLI (curl/jq). Use whenever a task involves the OpenAI API (Responses, Chat Completions, Realtime, etc.), OpenAI SDKs, ChatGPT Apps SDK, Codex, MCP integrations, endpoint schemas, parameters, limits, or migrations and you need up-to-date official guidance.
llm-docs-optimizer
Optimize documentation for AI coding assistants and LLMs. Improves docs for Claude, Copilot, and other AI tools through c7score optimization, llms.txt generation, question-driven restructuring, and automated quality scoring. Use when asked to improve, optimize, or enhance documentation for AI assistants, LLMs, c7score, Context7, or when creating llms.txt files. Also use for documentation quality analysis, README optimization, or ensuring docs follow best practices for LLM retrieval systems.
docs-ai-prd
Write PRDs, specs, and project context optimized for coding assistants (Claude Code, Cursor, Copilot, Custom GPTs). Includes CLAUDE.md generation, session planning, and templates for creating documentation that tools can execute effectively.
agentic-docs
Write clear, plain-spoken code comments and documentation that lives alongside the code. Use when writing or reviewing code that needs inline documentation like file headers, function docs, architectural decisions, or explanatory comments. Works well for both human readers and AI coding assistants who see one file at a time.
bgo
Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.
mcp-create-declarative-agent
Skill converted from mcp-create-declarative-agent.prompt.md