Plate
Gestión mínima de proyectos para equipos y agentes de IA.
Documentación
Servidor MCP
Gestiona tus tareas de Plate directamente desde asistentes de IA — Claude, Cursor, Windsurf y cualquier cliente compatible con MCP.
Endpoint https://plate.to/mcp
Configuración
El servidor MCP de Plate utiliza OAuth 2.0 — tu cliente de IA maneja la autenticación automáticamente cuando te conectas por primera vez. No se necesitan claves API.
Añade esto a tu archivo de configuración MCP:
{
"mcpServers": {
"plate": {
"type": "http",
"url": "https://plate.to/mcp"
}
}
}
| Cliente | Ubicación del archivo de configuración |
|---|---|
| Claude Code | .mcp.json en la raíz del proyecto, o ~/.claude/.mcp.json globalmente |
| Claude Desktop | macOS: ~/Library/Application Support/Claude/claude_desktop_config.json |
| Cursor | Settings → Cursor Settings → MCP |
| Windsurf | Windsurf Settings → MCP Servers |
Después de añadir el servidor, tu cliente te pedirá que autorices mediante el navegador. Inicia sesión con tu cuenta de Plate y elige un alcance. Para revocar el acceso, ve a Configuración del espacio de trabajo → Aplicaciones en Plate.
Autenticación
Plate utiliza OAuth 2.0 con PKCE. Cuando usas por primera vez una herramienta de Plate, tu cliente abre una ventana del navegador donde inicias sesión en tu cuenta de Plate y apruebas el acceso. Recibes un token de acceso (válido por 1 hora) y un token de actualización (válido por 30 días). La actualización se maneja automáticamente — no se te pedirá reautorizar a menos que el token de actualización expire.
Alcances
| Alcance | Permisos |
|---|---|
read | Ver espacios de trabajo, proyectos, tareas — no se permiten cambios |
read write | Acceso completo: ver y crear/actualizar tareas, proyectos y comentarios |
Herramientas
Las herramientas de lectura están siempre disponibles. Las herramientas de escritura requieren el alcance write.
Devuelve todos los espacios de trabajo de Plate a los que pertenece el usuario autenticado.
[{
"id": "ws_abc",
"name": "Acme Corp",
"urlId": "acme",
"taskPrefix": "SCA"
}]
Devuelve todos los proyectos en un espacio de trabajo.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo de list_workspaces |
[{
"id": "proj_xyz",
"name": "Backend",
"description": null
}]
Devuelve todas las secciones de un proyecto, ordenadas por posición. La sección predeterminada con la que un proyecto comienza en la aplicación no tiene nombre almacenado y se devuelve como "Things to do" — la etiqueta mostrada en la interfaz — para que pueda ser referenciada por nombre.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto de list_projects |
[{
"id": "list_abc",
"name": "To Do",
"order": 0
}]
Devuelve tareas en un proyecto. Excluye las tareas completadas por defecto. También admite la búsqueda de una tarea por su número público (por ejemplo, 42 de SCD-42) — pasa workspaceId + number y omite projectId.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId opcional | string | ID del proyecto. Requerido a menos que se proporcione number. |
workspaceId opcional | string | ID del espacio de trabajo. Requerido al usar number. |
number opcional | number | Número público de tarea (solo dígitos — por ejemplo, 42 de SCD-42). Cuando se proporciona, workspaceId es requerido y projectId se ignora. |
statusId opcional | string | Filtrar por estado |
listId opcional | string | Filtrar por sección |
includeCompleted opcional | boolean | Incluir tareas completadas (por defecto: false) |
limit opcional | number | Máximo de tareas a devolver (por defecto: 100, máximo: 500) |
[{
"id": "task_123",
"number": 42,
"name": "Fix login bug",
"isCompleted": false,
"statusId": "status_abc",
"assigneeId": "user_xyz",
"listId": "list_abc",
"projectId": "proj_xyz",
"workspaceId": "ws_abc",
"createdAt": "2025-01-15T10:00:00.000Z"
}]
get_task read
Devuelve los detalles completos de una sola tarea, incluyendo su descripción de texto enriquecido y lista de etiquetas. Acepta tres formas de búsqueda:
- ID interno — pasa
taskId(el campoiddelist_tasks) - Referencia con prefijo — pasa
taskId: "SCD-426"y el servidor lo resuelve automáticamente en todos tus espacios de trabajo - Número — pasa
workspaceId+number: 426para una búsqueda directa en un espacio de trabajo específico
La respuesta incluye dos campos de descripción: descriptionText (cadena Markdown, lista para mostrar) y description (matriz de nodos Plate.js sin procesar). Usa descriptionText para leer y mostrar contenido.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId opcional | string | ID de tarea interno o referencia con prefijo como SCD-426. Omítelo al usar number. |
workspaceId opcional | string | ID del espacio de trabajo. Acelera la búsqueda por número; si se omite, se buscan todos los espacios de trabajo. |
number opcional | number | Número público de tarea (solo dígitos — por ejemplo, 426 de SCD-426). Cuando se proporciona, taskId se ignora. |
Devuelve los comentarios de una tarea, del más antiguo al más reciente. Al igual que la descripción de get_task, cada comentario tiene contentText (cadena Markdown, lista para mostrar) y content (matriz de nodos Plate.js sin procesar). Usa contentText para leer.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId * | string | ID de tarea interno (el id de list_tasks, no el número público SCD-XXX) |
[{
"id": "comment_xyz",
"authorId": "user_pasha",
"contentText": "Fixed in projectsSaga.ts:287",
"content": [ /* Plate nodes */ ],
"createdAt": "2026-06-25T12:43:31.401Z"
}]
Devuelve todos los miembros de un espacio de trabajo. Usa userId como assigneeId al crear o actualizar tareas.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo de list_workspaces |
[{
"userId": "user_abc",
"name": "Jane Smith",
"email": "jane@acme.com",
"role": "member"
}]
Devuelve los estados de flujo de trabajo para un espacio de trabajo. Usa el id devuelto como statusId al crear o actualizar tareas.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo de list_workspaces |
[{
"id": "status_abc",
"name": "In Progress",
"color": "#4fa3e0",
"systemType": null,
"order": 1
}]
Devuelve las etiquetas de tareas para un espacio de trabajo. Usa el id devuelto — o el name — en labels al crear o actualizar tareas.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo de list_workspaces |
[{
"id": "label_abc",
"name": "Bug",
"color": "#FFDCDB",
"order": 0
}]
Historial de cambios de tareas en un rango de tiempo — cambios de estado, asignaciones, movimientos, etc. Úsalo para preguntas basadas en tiempo como qué tareas se completaron la semana pasada, o qué hizo una persona. Cada fila da la tarea, la transición de estado, quién hizo el cambio, y el propietario y asignado de la tarea.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo de list_workspaces |
from | string | Inicio del rango, ISO 8601 (por ejemplo, 2026-06-01) |
to | string | Fin del rango, ISO 8601 |
actorId | string | Solo cambios hechos por este userId (de list_members) |
type | string | task_status_changed, o completed para transiciones a un estado Done |
projectId | string | Limitar a un proyecto |
limit | number | Máximo de filas (por defecto 100, máximo 500) |
[{
"at": "2026-06-05T14:12:00.000Z",
"type": "task_status_changed",
"task": "SCD-42",
"taskName": "Review API docs",
"change": "In Progress → Done",
"completed": true,
"actor": "Pasha",
"owner": "Karl",
"assignee": "Pasha"
}]
Crea una nueva tarea en una sección de proyecto. Devuelve el ID de la nueva tarea y su número asignado automáticamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto |
listId * | string | ID de sección de list_sections |
name * | string | Nombre de la tarea |
statusId opcional | string | ID de estado inicial |
assigneeId opcional | string | ID de usuario asignado |
labels opcional | string[] | IDs de etiqueta o nombres (de list_labels); los nombres coinciden sin distinguir mayúsculas. Las etiquetas desconocidas son un error — nunca se crean automáticamente. |
{ "id": "task_456", "number": 43 }
Plan gratuito: máximo 300 tareas por espacio de trabajo. Pro: ilimitado.
Actualiza uno o más campos de una tarea. Solo se cambian los campos que proporcionas.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId * | string | ID de tarea |
name opcional | string | Nuevo nombre de tarea |
statusId opcional | string | Nuevo ID de estado. También actualiza isCompleted. |
assigneeId opcional | string | null | Nuevo asignado. Pasa null para desasignar. |
listId opcional | string | Mover tarea a una sección diferente. Debe pertenecer al mismo proyecto. |
description opcional | string | Nueva descripción. Markdown compatible. |
labels opcional | string[] | Reemplaza las etiquetas de la tarea (no las añade). IDs o nombres de list_labels; [] las elimina. Las etiquetas desconocidas son un error — nunca se crean automáticamente. |
{ "id": "task_123" }
Marca una tarea como completada o la reabre. Establece automáticamente el estado al estado "done" o "todo" del sistema.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId * | string | ID de tarea |
isCompleted opcional | boolean | true para completar, false para reabrir (por defecto: true) |
{ "id": "task_123", "isCompleted": true }
Elimina permanentemente una tarea. Los comentarios y archivos adjuntos se eliminan automáticamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId * | string | ID de tarea |
{ "id": "task_abc", "deleted": true }
Crea un nuevo proyecto con una sección "To Do" predeterminada. Si ya existe un proyecto con el mismo nombre en el espacio de trabajo, devuelve el proyecto existente en lugar de crear un duplicado — verifica created en la respuesta para distinguir los dos casos. defaultListId es null si el proyecto existente no tiene secciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
workspaceId * | string | ID del espacio de trabajo |
name * | string | Nombre del proyecto |
description opcional | string | Descripción del proyecto (texto plano) |
{ "id": "proj_new", "defaultListId": "list_new", "created": true }
Plan gratuito: máximo 3 proyectos por espacio de trabajo. Pro: ilimitado.
Renombra un proyecto o actualiza su descripción.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto |
name opcional | string | Nuevo nombre del proyecto |
description opcional | string | null | Nueva descripción, o null para limpiar |
{ "id": "proj_abc" }
Crea una nueva sección en un proyecto. Si ya existe una sección con el mismo nombre en el proyecto, devuelve la sección existente en lugar de crear un duplicado — verifica created en la respuesta para distinguir los dos casos.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto |
name * | string | Nombre de la sección |
{ "id": "section_abc", "created": true }
Renombra una sección.
| Parámetro | Tipo | Descripción |
|---|---|---|
sectionId * | string | ID de sección |
name * | string | Nuevo nombre de sección |
{ "id": "section_abc" }
Añade un comentario a una tarea. El comentario se publica como el usuario autenticado.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskId * | string | ID de tarea |
text * | string | Texto del comentario. Markdown compatible. |
{ "id": "comment_abc" }
Elimina un comentario de una tarea.
| Parámetro | Tipo | Descripción |
|---|---|---|
commentId * | string | ID de comentario |
{ "id": "comment_abc", "deleted": true }
Herramientas por lotes
Las herramientas por lotes te permiten crear, actualizar o eliminar múltiples elementos en una sola llamada — reduciendo el número de avisos de confirmación en clientes de IA que preguntan por cada llamada de herramienta.
Crea múltiples tareas en un proyecto de forma atómica. Si falla alguna validación, no se crea nada. Máximo 50 tareas por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto |
listId | string | ID de sección predeterminado (usado cuando una tarea omite su propio listId) |
tasks * | array (1–50) | Tareas a crear. Cada elemento: name (requerido), listId, assigneeId, statusId, description (markdown), dueDate, labels |
{ "items": [{ "id": "task_abc", "number": 42, "name": "Task A", "listId": "list_xyz", "projectId": "proj_1", "workspaceId": "ws_1" }] }
Actualiza múltiples tareas de forma atómica. Máximo 50 tareas por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
tasks * | array (1–50) | Tareas a actualizar. Cada elemento: taskId (requerido), luego cualquiera de: name, listId, assigneeId, statusId, description (markdown), dueDate, labels (reemplaza la lista) |
{ "items": [{ "id": "task_abc" }] }
Marca múltiples tareas como completadas (o las reabre). Las tareas ya completadas se dejan como están. Máximo 100 tareas por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskIds * | array (1–100) | IDs internos de tareas a completar |
isCompleted | boolean | true para completar, false para reabrir (predeterminado: true) |
{ "items": [{ "id": "task_abc", "isCompleted": true }] }
Elimina permanentemente múltiples tareas. Todas las tareas se validan antes de eliminar cualquiera. Máximo 50 tareas por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
taskIds * | array (1–50) | IDs internos de tareas a eliminar |
{ "items": [{ "id": "task_abc", "deleted": true }] }
Crea múltiples secciones en un proyecto. Las secciones con nombres duplicados se devuelven tal cual (created: false). Máximo 30 secciones por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
projectId * | string | ID del proyecto |
sections * | array (1–30) | Secciones a crear. Cada elemento: name (obligatorio) |
{ "items": [{ "id": "list_abc", "name": "Backlog", "created": true }] }
Renombra múltiples secciones de forma atómica. Máximo 30 secciones por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
sections * | array (1–30) | Secciones a actualizar. Cada elemento: sectionId (obligatorio), name (obligatorio) |
{ "items": [{ "id": "list_abc" }] }
Añade múltiples comentarios a tareas. Máximo 50 comentarios por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
comments * | array (1–50) | Comentarios a crear. Cada elemento: taskId (obligatorio), text (obligatorio, markdown) |
{ "items": [{ "id": "comment_abc", "taskId": "task_xyz" }] }
Elimina permanentemente múltiples comentarios. Todos los comentarios se validan antes de eliminar cualquiera. Máximo 50 comentarios por llamada.
| Parámetro | Tipo | Descripción |
|---|---|---|
commentIds * | array (1–50) | IDs de comentarios a eliminar |
{ "items": [{ "id": "comment_abc", "deleted": true }] }
Formato de texto
El campo description en update_task y el campo text en create_comment aceptan markdown. Se convierte a texto enriquecido y se renderiza en el editor de Plate.
| Sintaxis | Resultado |
|---|---|
# Heading | Encabezado 1 |
## Heading | Encabezado 2 |
### Heading | Encabezado 3 |
- item o * item | Elemento de lista con viñetas |
1. item | Elemento de lista numerada |
> text | Cita en bloque |
**text** | Negrita |
*text* | Cursiva |
***text*** | Negrita + cursiva |
~~text~~ | Tachado |
`texto` | Código en línea |
Las líneas en blanco separan bloques. Las líneas simples consecutivas sin una línea en blanco entre ellas se fusionan en un solo párrafo.
# Example description
"## Steps to reproduce\n\n- Open settings\n- Click Profile\n\n**Expected:** profile page opens\n**Actual:** 404 error"
# Renders as:
# Heading 2: "Steps to reproduce"
# Bullet: "Open settings"
# Bullet: "Click Profile"
# Paragraph with bold "Expected:" and "Actual:" inline
Errores
Todas las herramientas lanzan una cadena de error descriptiva en caso de fallo. Causas comunes:
| Mensaje de error | Causa |
|---|---|
Access denied or workspace not found | El usuario autenticado no es miembro del espacio de trabajo solicitado |
Task not found | ID de tarea no válido, o la tarea pertenece a un espacio de trabajo diferente |
Project not found | ID de proyecto no válido |
Section not found | ID de sección no válido, o la sección pertenece a un proyecto diferente |
Free plan limit reached: 300 tasks maximum | El espacio de trabajo está en el plan gratuito y ha alcanzado el límite de tareas |
Free plan limit reached: 3 projects maximum | El espacio de trabajo está en el plan gratuito y ha alcanzado el límite de proyectos |
¿Preguntas? Escríbenos a hello@plate.to