Herramientas MCP
Las 37 herramientas del servidor MCP de Feedjolt, agrupadas por recurso, cada una con su scope y su rol requeridos - además de los comportamientos que sorprenden: los guardarraíles al eliminar tableros y estados, borrador vs. publicación del changelog, y las reglas de edición de comentarios.
Cada herramienta requiere un scope en el principal que la llama - read, write o delete. Esa concesión sale de la pantalla de consentimiento OAuth o de una clave de API. Consulta Permisos para ver qué significa cada scope y cómo concederlo.
Conector es la URL, no la clave. Las herramientas solo-Reader nunca aparecen en /mcp/writer/. Las solo-Writer nunca aparecen en /mcp/reader/. El combinado /mcp/ lista todas. El combinado es legado.
El scope no es la única barrera
Algunas herramientas añaden un segundo candado: también requieren ser OWNER o ADMIN del espacio, la misma barrera de rol que usa el panel. El scope debe seguir presente - la barrera de rol se suma a él, nunca lo sustituye.
| Solo OWNER/ADMIN | Un CONTRIBUTOR con write todavía puede |
|---|---|
create_board, update_board, delete_board | create_post, update_post, change_post_status |
create_status, update_status, delete_status | add_tag_to_post, remove_tag_from_post |
create_tag, update_tag, delete_tag | post_comment (solo público) |
reorder_items | update_comment (cuerpo propio) |
create_changelog_entry, update_changelog_entry, publish_changelog_entry, delete_changelog_entry | |
merge_posts, unmerge_posts, move_post, assign_post_owner, set_post_featured, delete_post |
delete_comment requiere el scope delete, no write. Los CONTRIBUTOR en OAuth no pueden conceder delete, así que no pueden usar esta herramienta. Quienes tienen delete y no son OWNER/ADMIN solo pueden eliminar sus propios comentarios.
Dos campos de comentario también son privilegiados: post_comment con is_internal: true, y update_comment con is_pinned o is_internal, requieren OWNER/ADMIN. Los comentarios internos además necesitan un plan que incluya la función internal_comments (Startup y superiores).
Las claves de API actúan como ADMIN para esta barrera de rol. Una clave fjk_ es una credencial de automatización del espacio, no una persona, así que siempre pasa la comprobación de rol, sujeto a los scopes que tenga. El rol solo varía en las concesiones OAuth, donde se resuelve a partir de la membresía del usuario que autoriza.
Una llamada denegada devuelve un error de permisos que nombra OWNER y ADMIN (-32004). Consulta Resolución de problemas.
Enlaces a las fuentes y ordenación
list_posts, search_posts, get_post y los posts de get_roadmap devuelven una url al dashboard autenticado. Usa esta URL para citar el feedback. Inicia sesión y selecciona el espacio conectado a MCP antes de abrir un enlace; las rutas del dashboard usan tu espacio seleccionado. El feedback privado o interno mantiene sus requisitos de acceso.
list_posts usa sort: "new" por defecto. Con sort: "top", los posts se ordenan por puntuación ponderada, después por número de votos y, finalmente, por fecha de creación más reciente. No es una clasificación solo por votos. Los posts del roadmap también se ordenan por puntuación ponderada y después por votos. Las respuestas incluyen weighted_score y vote_count para que los agentes puedan explicar la clasificación.
get_roadmap incluye los estados ocultos del roadmap público, después de los visibles. search_posts busca fragmentos del título; no es una búsqueda semántica.
Posts
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
list_posts | read | Reader | Listar/filtrar posts por tablero, estado o etiqueta, con paginación |
search_posts | read | Reader | Buscar posts por palabra clave en el título |
get_post | read | Reader | Detalle completo del post: cuerpo, estado, etiquetas y hasta 200 comentarios |
create_post | write | Writer | Crear un post en un tablero, con autoría de esta clave |
update_post | write | Writer | Actualizar el título, cuerpo o visibilidad interna de un post |
change_post_status | write | Writer | Mover un post a un nuevo estado, con nota interna opcional |
move_post | write | Writer | Mover un post a otro tablero |
add_tag_to_post | write | Writer | Etiquetar un post (debe usar una etiqueta existente) |
remove_tag_from_post | write | Writer | Eliminar una etiqueta de un post |
assign_post_owner | write | Writer | Asignar (o borrar) el admin responsable de un post |
set_post_featured | write | Writer | Destacar o quitar el destacado de un post en el portal |
merge_posts | write | Writer | Fusionar un duplicado en un post canónico |
unmerge_posts | write | Writer | Revertir una fusión, restaurando el post original |
delete_post | delete | Writer | Eliminar permanentemente un post, sus votos y sus comentarios |
Tableros
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
list_boards | read | Ambos | Listar todos los tableros con su visibilidad y número de posts |
create_board | write | Writer | Crear un tablero |
update_board | write | Writer | Actualizar un tablero, incluido archivarlo |
delete_board | delete | Writer | Eliminar un tablero vacío únicamente - ver más abajo |
Etiquetas
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
list_tags | read | Ambos | Listar todas las etiquetas con su número de posts |
create_tag | write | Writer | Crear una etiqueta |
update_tag | write | Writer | Renombrar o recolorear una etiqueta |
delete_tag | delete | Writer | Eliminar una etiqueta - los posts se mantienen, solo pierden la etiqueta |
Estados
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
list_statuses | read | Ambos | Listar todos los estados del workspace |
create_status | write | Writer | Crear un estado |
update_status | write | Writer | Actualizar el nombre, color, visibilidad en roadmap u orden de un estado |
delete_status | delete | Writer | Eliminar un estado, reasignando sus posts - ver más abajo |
Comentarios
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
list_comments | read | Reader | Listar comentarios de un post, con paginación |
post_comment | write | Writer | Añadir un comentario público; is_internal requiere OWNER/ADMIN |
update_comment | write | Writer | Editar tu propio comentario; fijar o cambiar visibilidad como OWNER/ADMIN - ver más abajo |
delete_comment | delete | Writer | Eliminar cualquier comentario como OWNER/ADMIN; si no, solo los tuyos |
Changelog
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
get_changelog | read | Ambos | Entradas recientes publicadas del changelog |
create_changelog_entry | write | Writer | Crear una entrada de changelog como borrador - ver más abajo |
update_changelog_entry | write | Writer | Actualizar el título, cuerpo o posts enlazados de una entrada |
publish_changelog_entry | write | Writer | Publicar un borrador - ver más abajo |
delete_changelog_entry | delete | Writer | Eliminar permanentemente una entrada, publicada o en borrador |
Roadmap
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
get_roadmap | read | Reader | Posts agrupados por todos los estados, incluidos los ocultos del roadmap |
Orden
| Herramienta | Scope | Conector | Propósito |
|---|---|---|---|
reorder_items | write | Writer | Fijar el orden de visualización de tableros, etiquetas o estados en una sola llamada |
Comportamientos que conviene conocer
delete_board rechaza tableros con posts
delete_board solo funciona en un tablero con cero posts, y no existe ningún argumento para forzarlo. Eliminar un tablero arrastra en cascada todos sus posts, votos y comentarios - de forma permanente, sin deshacer - así que MCP no lo hará bajo ninguna circunstancia, sin importar cómo se formule la petición.
Para retirar un tablero sin perder su contenido, llama a update_board con archived: true. El tablero desaparece de los listados activos; todos sus posts quedan intactos.
delete_status requiere un destino de reasignación
Los posts referencian su estado con una restricción de base de datos que impide eliminar un estado en uso, así que delete_status exige un reassign_to_status_id obligatorio. Cada post en el estado condenado se mueve primero a ese destino, y cada movimiento genera su propia entrada de historial de estado - igual que un cambio de estado manual.
Hay dos estados que nunca se pueden eliminar así: el estado por defecto del workspace, y el último estado restante. Convierte otro estado en el predeterminado, o crea un segundo estado, antes de eliminar cualquiera de los dos.
create_changelog_entry siempre crea un borrador
create_changelog_entry solo crea un borrador - nunca es visible para los clientes. Publicar es una llamada aparte y deliberada: publish_changelog_entry. Publicar envía un correo a cada suscriptor y dispara los webhooks del changelog, así que llega a clientes reales en el momento en que se ejecuta. Revisa el contenido de la entrada con update_changelog_entry antes de publicarla, no después.
update_comment mezcla reglas de contributor y admin
update_comment edita tres cosas independientes - body, is_pinned, is_internal - pero no siguen la misma regla. Editar body solo funciona en un comentario que el propio principal ha publicado; el servicio rechaza el intento de reescribir el texto de otro autor. Fijar (is_pinned) y cambiar la visibilidad (is_internal) son acciones OWNER/ADMIN, incluso en un comentario propio, y is_internal además necesita la función de plan internal_comments. delete_comment sigue la misma división: un OWNER/ADMIN puede eliminar cualquier comentario - lo que la hace útil para limpiar spam - mientras que el resto solo puede eliminar los suyos.
Otras cosas que conviene saber
create_postcuenta contra la cuota mensual de posts del workspace - la misma cuota que respeta el botón "Nuevo post" del dashboard. Falla en cuanto se alcanza la cuota.get_postylist_commentsdevuelven comentarios internos además de los públicos - los agentes MCP ven todo lo que ve un admin. No reenvíes un comentario conis_internal: truea un cliente final.merge_postsse puede revertir conunmerge_posts, pero la restauración es degradada: los votos, comentarios y etiquetas se quedan en el post destino. El post restaurado vuelve con 0 votos.move_postrechaza mover un post a un tablero archivado, y rechaza un "movimiento" al tablero en el que el post ya está.reorder_itemsdescarta silenciosamente cualquier ID que no pertenezca al workspace (error tipográfico, workspace equivocado, ya eliminado) en lugar de dar error. Comparareorderedconsubmitteden la respuesta para ver si algo se descartó.
Lo que MCP todavía no puede hacer
Las herramientas MCP operan sobre los datos de feedback de un workspace - posts, tableros, etiquetas, estados, comentarios, changelog, roadmap. No tocan la configuración del workspace, la facturación, los miembros del equipo y sus roles, ni la configuración de webhooks, widget o branding. Eso se queda en el dashboard.
Permisos de MCP
Los tres scopes de MCP - read, write, delete - qué cubre cada uno para concesiones OAuth y claves de API, cómo se heredan las claves creadas antes de que existieran los scopes, y cómo conceder o cambiar los scopes.
Resolución de problemas MCP
Soluciona errores comunes del MCP de Feedjolt: 402 plan requerido, 401 no autorizado, 403 scope o rol insuficiente, 429 límite de tasa, etiqueta no encontrada, y los guardarraíles al eliminar tableros y estados.
