Skill openapi-codegen
Genera clientes de API con tipos seguros y tipos de TypeScript a partir de especificaciones OpenAPI utilizando diversas herramientas.
- Estrellas en GitHub
- 47
- Archivos
- 5
- Último commit
- 9 nov 2026
- Licencia
- MIT
- Herramientas permitidas
- 6
¿Qué hace la skill openapi-codegen?
openapi-codegen es una agent skill. Genera clientes de API con tipos seguros y tipos de TypeScript a partir de especificaciones OpenAPI utilizando diversas herramientas.
Resumen generado a partir del SKILL.md de la skill.
Sobre la skill openapi-codegen
La función principal de este SKILL es generar clientes de API con tipos seguros y definiciones de TypeScript a partir de especificaciones OpenAPI. Sirve a desarrolladores que necesitan sincronizar su código frontend o del lado del cliente con los contratos de la API del backend para evitar errores en tiempo de ejecución. El SKILL proporciona acceso a varias herramientas especializadas, incluyendo openapi-typescript para una generación de tipos ligera, openapi-generator-cli para clientes completos con fetch o axios, y swagger-typescript-api para una generación basada en plantillas personalizables.
Un agente debe cargar este SKILL cuando un usuario solicite generar un cliente de API, crear tipos a partir de un esquema OpenAPI o convertir un router de tRPC en un documento OpenAPI usando trpc-openapi. Utiliza comandos bash y herramientas del sistema de archivos para instalar dependencias, ejecutar scripts de generación y escribir el código resultante en el directorio del proyecto. Este SKILL se distingue porque se enfoca específicamente en la transformación de especificaciones existentes en código utilizable, en lugar de la creación de las especificaciones en sí mismas.
Lo que un agente puede hacer con ella
- 1Generar tipos de TypeScriptCrea definiciones de TypeScript ligeras a partir de un archivo YAML de OpenAPI sin añadir sobrecarga en tiempo de ejecución.
- 2Crear clientes de API completosProduce una implementación completa de un cliente de API utilizando fetch o axios basándose en una especificación OpenAPI.
- 3Exportar tRPC como OpenAPIConvierte un router de tRPC en un documento OpenAPI para permitir que consumidores externos interactúen con la API.
- 4Automatizar la generación de clientesConfigura un flujo de trabajo para regenerar automáticamente los tipos de la API cada vez que cambie el archivo de especificación OpenAPI.
Escrito a partir del SKILL.md de la skill. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar la skill openapi-codegen
Cada comando copia la carpeta de la skill al directorio de skills del cliente. Reinicia el cliente o inicia una nueva sesión para cargarla.Instalar la skill openapi-codegen en Claude Code
~/.claude/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.claude/skills/openapi-codegenInstalar la skill openapi-codegen en Claude Code (project)
.claude/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen .claude/skills/openapi-codegenInstalar la skill openapi-codegen en Codex
~/.agents/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.agents/skills/openapi-codegenInstalar la skill openapi-codegen en Gemini CLI
~/.gemini/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.gemini/skills/openapi-codegenInstalar la skill openapi-codegen en Claude.ai
npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen openapi-codegen && zip -r openapi-codegen.zip openapi-codegen # claude.ai → Customize → Skills → + → Create skill → Upload a skill → openapi-codegen.zip
Verificaciones automáticas
Ejecutado 15 nov 2026Informe completo →Aún sin verificar. Una skill necesita 80 puntos, ningún hallazgo grave y datos suficientes para comprobarla. Cómo funcionan las verificaciones · Qué corregir para obtener más puntos
- Repositorio de origen vinculado y accesibleclaude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen is public and reachablegithub.com/claude-dev-suite/claude-dev-suite/tree/HEAD/skill ↗Aprobado
- Licencia de código abierto (OSI)MITspdx.org/licenses/MIT.html ↗Aprobado
- Commit o lanzamiento en el último añoLast commit 2026-11-09github.com/claude-dev-suite/claude-dev-suite/commits ↗Aprobado
- Sin descargar y ejecutar ni robo de credenciales en los scriptsNo scripts in the skill folderAprobado
- Sin instrucciones ocultas en SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Aprobado
- Las herramientas preaprobadas están acotadasBash lets the agent run any shell command without askinggithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Hallazgo
- SKILL.md sigue el formato de Agent SkillsValid name and description; says when to use it; 429 linesgithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Aprobado
SKILL.md
Ver en GitHubOpenAPI Code Generation Core Knowledge
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:openapi-codegenfor comprehensive documentation.
openapi-typescript (Types Only)
Generates TypeScript types from OpenAPI schemas. Lightweight, no runtime.
# Installation
npm install -D openapi-typescript
# Generate types
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
npx openapi-typescript https://api.example.com/openapi.json -o ./src/types/api.ts
Generated Types Usage
import type { paths, components } from './types/api';
// Schema types
type User = components['schemas']['User'];
type CreateUserDto = components['schemas']['CreateUserDto'];
// Request/Response types
type CreateUserRequest = paths['/users']['post']['requestBody']['content']['application/json'];
type UserResponse = paths['/users/{id}']['get']['responses']['200']['content']['application/json'];
type UsersListResponse = paths['/users']['get']['responses']['200']['content']['application/json'];
// Path parameters
type UserPathParams = paths['/users/{id}']['get']['parameters']['path'];
With openapi-fetch
import createClient from 'openapi-fetch';
import type { paths } from './types/api';
const client = createClient<paths>({
baseUrl: 'https://api.example.com',
});
// Fully typed requests
const { data, error } = await client.GET('/users/{id}', {
params: { path: { id: '123' } },
});
const { data } = await client.POST('/users', {
body: { name: 'John', email: 'john@example.com' },
});
// Query parameters
const { data } = await client.GET('/users', {
params: { query: { status: 'active', page: 1 } },
});
openapi-generator-cli (Full Client)
Generates complete API clients with fetch/axios implementations.
# Installation
npm install -D @openapitools/openapi-generator-cli
# Generate TypeScript Fetch client
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-fetch \
-o ./src/api-client
# Generate TypeScript Axios client
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-axios \
-o ./src/api-client
Configuration File
# openapitools.json
{
"$schema": "https://raw.githubusercontent.com/OpenAPITools/openapi-generator-cli/master/apps/generator-cli/src/config.schema.json",
"spaces": 2,
"generator-cli": {
"version": "7.0.0",
"generators": {
"typescript-client": {
"generatorName": "typescript-fetch",
"output": "#{cwd}/src/api-client",
"inputSpec": "#{cwd}/openapi.yaml",
"additionalProperties": {
"supportsES6": true,
"npmName": "@myorg/api-client",
"typescriptThreePlus": true,
"withInterfaces": true
}
}
}
}
}
Generated Client Usage
import { Configuration, UsersApi } from './api-client';
const config = new Configuration({
basePath: 'https://api.example.com',
accessToken: () => localStorage.getItem('token') || '',
});
const usersApi = new UsersApi(config);
// Typed API calls
const users = await usersApi.listUsers({ status: 'active' });
const user = await usersApi.getUserById({ id: '123' });
const newUser = await usersApi.createUser({
createUserDto: { name: 'John', email: 'john@example.com' },
});
swagger-typescript-api
Fast, customizable generator with template support.
# Installation
npm install -D swagger-typescript-api
# Generate
npx swagger-typescript-api -p ./openapi.yaml -o ./src/api -n api.ts
Configuration
npx swagger-typescript-api \
-p ./openapi.yaml \
-o ./src/api \
-n api.ts \
--axios \ # Use axios instead of fetch
--modular \ # Separate files per tag
--route-types \ # Generate route types
--extract-request-body \ # Extract request body types
--extract-response-body # Extract response body types
Generated Client Usage
import { Api } from './api/api';
const api = new Api({
baseUrl: 'https://api.example.com',
securityWorker: () => ({
headers: { Authorization: `Bearer ${getToken()}` },
}),
});
// Typed API calls
const users = await api.users.usersList({ status: 'active' });
const user = await api.users.usersDetail('123');
const newUser = await api.users.usersCreate({
name: 'John',
email: 'john@example.com',
});
trpc-openapi (Export tRPC as OpenAPI)
Generate OpenAPI spec from tRPC router. Useful for external API consumers.
npm install trpc-openapi
Define OpenAPI Endpoints
import { initTRPC } from '@trpc/server';
import { OpenApiMeta } from 'trpc-openapi';
import { z } from 'zod';
const t = initTRPC.meta<OpenApiMeta>().create();
export const appRouter = t.router({
getUser: t.procedure
.meta({
openapi: {
method: 'GET',
path: '/users/{id}',
tags: ['users'],
summary: 'Get user by ID',
},
})
.input(z.object({ id: z.string() }))
.output(z.object({
id: z.string(),
name: z.string(),
email: z.string(),
}))
.query(({ input }) => getUserById(input.id)),
createUser: t.procedure
.meta({
openapi: {
method: 'POST',
path: '/users',
tags: ['users'],
summary: 'Create a new user',
},
})
.input(z.object({
name: z.string(),
email: z.string().email(),
}))
.output(z.object({
id: z.string(),
name: z.string(),
email: z.string(),
}))
.mutation(({ input }) => createUser(input)),
});
Generate OpenAPI Document
import { generateOpenApiDocument } from 'trpc-openapi';
import { appRouter } from './router';
const openApiDocument = generateOpenApiDocument(appRouter, {
title: 'My API',
version: '1.0.0',
baseUrl: 'https://api.example.com',
});
// Save to file
import fs from 'fs';
fs.writeFileSync('./openapi.json', JSON.stringify(openApiDocument, null, 2));
REST Handler
import { createOpenApiNextHandler } from 'trpc-openapi';
import { appRouter } from './router';
// Next.js API route: pages/api/[...trpc].ts
export default createOpenApiNextHandler({
router: appRouter,
createContext: () => ({}),
});
Production Readiness
CI/CD Integration
# .github/workflows/generate-client.yml
name: Generate API Client
on:
push:
paths:
- 'openapi.yaml'
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Generate types
run: npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
- name: Check for changes
id: check
run: |
if git diff --quiet src/types/api.ts; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Commit and push
if: steps.check.outputs.changed == 'true'
run: |
git config --local user.email "bot@example.com"
git config --local user.name "API Generator Bot"
git add src/types/api.ts
git commit -m "chore: regenerate API types"
git push
Package Scripts
{
"scripts": {
"generate:types": "openapi-typescript ./openapi.yaml -o ./src/types/api.ts",
"generate:client": "openapi-generator-cli generate -c openapitools.json",
"generate:all": "npm run generate:types && npm run generate:client",
"precommit": "npm run generate:types && git add src/types/api.ts"
}
}
Watch Mode Development
# openapi-typescript with watch
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts --watch
# Or use nodemon
npx nodemon --watch openapi.yaml --exec "npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts"
Validation Before Generation
# Validate spec first
npx @redocly/cli lint openapi.yaml
# Then generate
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
Monitoring Metrics
| Metric | Target |
|---|---|
| Generated type coverage | 100% of endpoints |
| Build time with generation | < 30s |
| Type errors after generation | 0 |
| Spec validation errors | 0 |
Checklist
- OpenAPI spec validation in CI
- Automated type generation on spec changes
- Generated code committed or gitignored
- Version pinned for generator CLI
- Custom templates documented
- API client initialization documented
- Error handling patterns documented
- Authentication setup in client
- Breaking change detection
- Generated code tested
When NOT to Use This Skill
- Writing OpenAPI specifications (use
openapiskill) - GraphQL type generation (use
graphql-codegenskill) - tRPC type-safe APIs (use
trpcskill) - Manual API client implementation
- Simple APIs where manual types suffice
Anti-Patterns
| Anti-Pattern | Why It's Bad | Solution |
|---|---|---|
| Committing generated code to git | Merge conflicts, stale code | Add to .gitignore, generate in CI/build |
| Not versioning generator CLI | Inconsistent output | Pin generator versions in package.json |
| Editing generated files manually | Changes lost on regeneration | Extend or wrap generated code |
| No validation before generation | Invalid types generated | Validate spec with @redocly/cli first |
| Using different generators across team | Type inconsistencies | Standardize on one generator |
| Generating from remote spec without caching | Slow builds, network dependency | Cache spec locally or use schema registry |
| Not updating on spec changes | Type/runtime mismatch | Run generation in CI on spec updates |
| Missing error handling in generated code | Poor error UX | Wrap generated client with error handling |
Quick Troubleshooting
| Issue | Possible Cause | Solution |
|---|---|---|
| Generation fails | Invalid OpenAPI spec | Validate with @redocly/cli lint |
| Type errors after generation | Spec doesn't match API | Verify spec matches actual responses |
| Missing types | Spec incomplete or refs broken | Check all $refs resolve, add missing schemas |
| Wrong HTTP client generated | Generator config mismatch | Check -g flag or generator setting |
| Circular reference errors | Self-referencing schemas | Use discriminators or flatten schema |
| Slow generation | Large spec file | Use spec splitting or partial generation |
| Auth not working | Security scheme not configured | Add securityWorker or token config |
| "Cannot find module" errors | Generation didn't complete | Check for generation errors, rerun |
| Type conflicts | Multiple generators running | Use single generator, remove others |
Reference Documentation
Archivos de esta skill
5Preguntas sobre la skill openapi-codegen
¿Cómo instalo la skill openapi-codegen en Claude Code?
Ejecuta npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.claude/skills/openapi-codegen. Claude Code carga las skills desde ~/.claude/skills (todos los proyectos) o .claude/skills (un proyecto) y usa una skill cuando su descripción coincide con la tarea.
¿Qué clientes pueden usar la skill openapi-codegen?
Cualquier cliente que lea el formato Agent Skills: Claude Code, Codex, Gemini CLI y claude.ai (subir como ZIP). Los scripts de la skill se ejecutan solo donde el cliente permite la ejecución de código.
¿Qué herramientas cubre este SKILL?
Cubre openapi-typescript, openapi-generator-cli, swagger-typescript-api y trpc-openapi.
¿Puedo usar esto para escribir especificaciones OpenAPI?
No, deberías usar el SKILL 'openapi' para escribir especificaciones; este SKILL es específicamente para la generación de código de cliente.
¿Cómo puedo asegurarme de que mi especificación OpenAPI sea válida antes de generar el código?
Puedes validar tu especificación usando el comando lint de @redocly/cli.
¿Qué debo hacer si encuentro errores de tipos después de la generación?
Verifica que tu especificación coincida con las respuestas reales de la API.