create-form
Build dynamic forms with customizable fields such as text, lists, and email inputs, tailored to specific data collection needs. Easily define titles, labels, placeholders, and validation rules.
Instructions
Crea un formulario dinámico con campos personalizados
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Lista de campos del formulario | |
| title | Yes | Título del formulario |
Implementation Reference
- src/index.ts:43-59 (handler)Handler function that creates a dynamic form instance, adds title and custom fields, generates the form URL, logs it, and returns success or error message.async ({ title, fields }) => { const form = new DynamicForm(uuidv4()); form.addField({ type: 'text-title', name: title }); for (const field of fields) { form.addField(field); } const { url, error } = await form.createFormulary(); console.log('create-form - url: ', url); if (error != null) { return { content: [{ type: 'text', text: `Ha ocurrido un error: ${error}` }] }; } return { content: [{ type: 'text', text: `Formulario creado exitosamente: ${url}` }] }; }
- src/index.ts:20-42 (schema)Zod schema defining input parameters: title (string min 3) and fields (array of field objects with various properties like type, name, label, etc.).{ title: z.string().min(3).describe('Título del formulario'), fields: z .array( z.object({ type: z.string().describe('Tipo de campo (e.g., text-field, list-field)'), name: z.string().describe('Nombre del campo'), label: z.string().optional().describe('Etiqueta para mostrar en el formulario'), placeholder: z.string().optional().describe('Texto de marcador de posición'), required: z.boolean().optional().describe('Indica si el campo es obligatorio'), options: z.array(z.string()).optional().describe('Opciones para campos de lista'), url: z.string().optional().describe('URL para campos como qr-field o yt-video'), email: z.string().optional().describe('Correo electrónico para email-field'), subject: z.string().optional().describe('Asunto para email-field'), minLength: z.number().optional().describe('Longitud mínima para campos de texto'), maxLength: z.number().optional().describe('Longitud máxima para campos de texto'), pattern: z.string().optional().describe('Patrón de validación para campos de texto'), defaultValue: z.string().optional().describe('Valor por defecto del campo'), }) ) .min(1) .describe('Lista de campos del formulario'), },
- src/index.ts:17-60 (registration)Registration of the 'create-form' tool on the MCP server, including name, description, input schema, and handler function.server.tool( 'create-form', 'Crea un formulario dinámico con campos personalizados', { title: z.string().min(3).describe('Título del formulario'), fields: z .array( z.object({ type: z.string().describe('Tipo de campo (e.g., text-field, list-field)'), name: z.string().describe('Nombre del campo'), label: z.string().optional().describe('Etiqueta para mostrar en el formulario'), placeholder: z.string().optional().describe('Texto de marcador de posición'), required: z.boolean().optional().describe('Indica si el campo es obligatorio'), options: z.array(z.string()).optional().describe('Opciones para campos de lista'), url: z.string().optional().describe('URL para campos como qr-field o yt-video'), email: z.string().optional().describe('Correo electrónico para email-field'), subject: z.string().optional().describe('Asunto para email-field'), minLength: z.number().optional().describe('Longitud mínima para campos de texto'), maxLength: z.number().optional().describe('Longitud máxima para campos de texto'), pattern: z.string().optional().describe('Patrón de validación para campos de texto'), defaultValue: z.string().optional().describe('Valor por defecto del campo'), }) ) .min(1) .describe('Lista de campos del formulario'), }, async ({ title, fields }) => { const form = new DynamicForm(uuidv4()); form.addField({ type: 'text-title', name: title }); for (const field of fields) { form.addField(field); } const { url, error } = await form.createFormulary(); console.log('create-form - url: ', url); if (error != null) { return { content: [{ type: 'text', text: `Ha ocurrido un error: ${error}` }] }; } return { content: [{ type: 'text', text: `Formulario creado exitosamente: ${url}` }] }; } );