Quire

Este servidor permite que los asistentes de IA interactúen de forma segura con tus proyectos, tareas y datos de Quire.

Documentación

Quire MCP Server

CI Coverage Status CodeQL OpenSSF Scorecard OpenSSF Best Practices npm version npm downloads License Node

Un servidor de Model Context Protocol (MCP) para la plataforma de gestión de proyectos Quire.

Este servidor permite que los asistentes de IA (como Claude) interactúen de forma segura con tus proyectos, tareas y datos de Quire.

Inicio rápido

Requisitos previos

Paso 1: Crear una aplicación OAuth de Quire

  1. Ve a Gestión de aplicaciones de Quire
  2. Haz clic en Crear nueva aplicación
  3. Establece la URL de redirección en: http://localhost:3000/callback
  4. Elige los alcances de permisos que necesites
  5. Copia el ID de cliente de desarrollo y el Secreto de cliente de desarrollo

Paso 2: Configura tu cliente MCP

Elige la configuración que coincida con tu cliente MCP:

Claude Desktop (Recomendado)

Añade a tu claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "quire": {
      "command": "npx",
      "args": ["-y", "quire-mcp"],
      "env": {
        "QUIRE_OAUTH_CLIENT_ID": "your-client-id",
        "QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Claude Code (CLI)

Añade a la configuración MCP de Claude Code (~/.claude/mcp.json o a nivel de proyecto):

{
  "mcpServers": {
    "quire": {
      "command": "npx",
      "args": ["-y", "quire-mcp"],
      "env": {
        "QUIRE_OAUTH_CLIENT_ID": "your-client-id",
        "QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Cursor

En la configuración de Cursor, añade un servidor MCP:

{
  "mcpServers": {
    "quire": {
      "command": "npx",
      "args": ["-y", "quire-mcp"],
      "env": {
        "QUIRE_OAUTH_CLIENT_ID": "your-client-id",
        "QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Paso 3: Autorización inicial

En el primer uso, el servidor:

  1. Imprimirá una URL de autorización en la consola
  2. Esperará a que abras esa URL en tu navegador
  3. Después de que concedas acceso, Quire redirigirá a localhost
  4. El servidor capturará los tokens y los almacenará en caché

Los usos posteriores renovarán automáticamente los tokens según sea necesario.

Modos de transporte

El servidor admite dos modos de transporte: stdio (predeterminado) y http.

Modo STDIO (predeterminado)

El modo STDIO es la configuración más sencilla. El cliente MCP inicia el proceso del servidor directamente y se comunica mediante JSON-RPC a través de stdin/stdout.

Cómo funciona:

  1. El cliente MCP inicia npx quire-mcp con variables de entorno
  2. En la primera llamada a una herramienta, si no existe un token en caché, el servidor imprime una URL de OAuth en stderr
  3. El usuario abre la URL en el navegador y autoriza
  4. Quire redirige a localhost:3000/callback donde el servidor captura el token
  5. El token se almacena en caché en el disco para usos futuros

Ubicaciones de la caché de tokens:

  • Windows: %APPDATA%\quire-mcp\tokens.json
  • macOS: ~/Library/Application Support/quire-mcp/tokens.json
  • Linux: ~/.config/quire-mcp/tokens.json

Modo HTTP

El modo HTTP ejecuta un servidor HTTP con endpoints de OAuth 2.0. Úsalo cuando necesites:

  • Un proceso de servidor de larga duración
  • Varios clientes conectados al mismo servidor
  • Implementación en un host remoto (p. ej., Cloudflare Workers, VMs en la nube)

Importante: En el modo HTTP, el servidor debe estar ejecutándose antes de que los clientes puedan conectarse. Las variables de entorno se establecen en el proceso del servidor, no en las configuraciones del cliente.

Ejecutar el modo HTTP localmente

Paso 1: Inicia el servidor:

# Using npx
QUIRE_OAUTH_CLIENT_ID=your-client-id \
QUIRE_OAUTH_CLIENT_SECRET=your-client-secret \
MCP_TRANSPORT=http \
npx quire-mcp

# Or using pnpm (for development)
pnpm dev:http

El servidor mostrará:

[quire-mcp] HTTP server listening on 127.0.0.1:3001
[quire-mcp] OAuth metadata: http://localhost:3001/.well-known/oauth-authorization-server
[quire-mcp] MCP endpoint: http://localhost:3001/mcp

Paso 2: Configura tu cliente MCP para conectarse:

{
  "mcpServers": {
    "quire": {
      "type": "http",
      "url": "http://localhost:3001/mcp"
    }
  }
}

Nota: No se necesita la sección env en la configuración del cliente para el modo HTTP: las credenciales de OAuth están en el servidor.

Paso 3: Cuando el cliente MCP se conecte:

  1. Descubrirá los endpoints de OAuth mediante /.well-known/oauth-authorization-server
  2. Te redirigirá para autorizar con Quire
  3. Intercambiará tokens y establecerá una sesión

Variables de entorno del modo HTTP

VariableRequeridaPredeterminadoDescripción
MCP_TRANSPORTSístdioEstablécelo en http para habilitar el modo HTTP
QUIRE_OAUTH_CLIENT_IDSí-ID de cliente OAuth de Quire
QUIRE_OAUTH_CLIENT_SECRETSí-Secreto de cliente OAuth de Quire
MCP_SERVER_HOSTNo127.0.0.1Host al que vincular el servidor HTTP
MCP_SERVER_PORTNo3001Puerto para el servidor HTTP
MCP_ISSUER_URLNohttp://localhost:3001URL base para los endpoints de OAuth
QUIRE_OAUTH_REDIRECT_URINohttp://localhost:3001/oauth/callbackURL de devolución de llamada OAuth de Quire

Configuración de la aplicación Quire para el modo HTTP: Cuando uses el modo HTTP, actualiza la URL de redirección de tu aplicación Quire a: http://localhost:3001/oauth/callback

Modo de token manual

Si tienes un token de acceso obtenido previamente (p. ej., desde Postman), puedes omitir OAuth por completo:

{
  "mcpServers": {
    "quire": {
      "command": "npx",
      "args": ["-y", "quire-mcp"],
      "env": {
        "QUIRE_ACCESS_TOKEN": "your-access-token"
      }
    }
  }
}

Nota: Los tokens obtenidos manualmente caducarán eventualmente y no se renovarán automáticamente sin credenciales de OAuth.

Referencia de configuración

Todas las variables de entorno

VariableRequeridaPredeterminadoDescripción
QUIRE_OAUTH_CLIENT_IDSí*-ID de cliente OAuth de Quire
QUIRE_OAUTH_CLIENT_SECRETSí*-Secreto de cliente OAuth de Quire
QUIRE_ACCESS_TOKENNo-Anulación manual de token (omite el flujo de OAuth)
QUIRE_OAUTH_REDIRECT_URINohttp://localhost:3000/callbackURL de devolución de llamada OAuth (modo stdio)
QUIRE_TOKEN_STORE_PATHNoPredeterminado de la plataformaRuta al archivo de caché de tokens
MCP_TRANSPORTNostdioModo de transporte: stdio o http
MCP_SERVER_HOSTNo127.0.0.1Dirección de vinculación del servidor HTTP
MCP_SERVER_PORTNo3001Puerto del servidor HTTP
MCP_ISSUER_URLNohttp://localhost:3001URL del emisor de OAuth (modo HTTP)

*Requerida a menos que se establezca QUIRE_ACCESS_TOKEN.

Características

Herramientas

El servidor proporciona más de 60 herramientas organizadas por categoría:

Autenticación

HerramientaDescripción
quire.whoamiObtener el perfil del usuario autenticado actual

Organizaciones

HerramientaDescripción
quire.listOrganizationsListar todas las organizaciones accesibles
quire.getOrganizationObtener detalles de la organización por ID u OID
quire.updateOrganizationActualizar los seguidores de la organización

Proyectos

HerramientaDescripción
quire.listProjectsListar todos los proyectos, opcionalmente filtrados por organización
quire.getProjectObtener detalles del proyecto, incluidos los recuentos de tareas
quire.updateProjectActualizar nombre, descripción, icono y seguidores del proyecto
quire.exportProjectExportar tareas del proyecto en formato JSON o CSV

Tareas

HerramientaDescripción
quire.listTasksListar tareas en un proyecto (de nivel raíz o subtareas)
quire.getTaskObtener detalles de la tarea por proyecto+ID u OID
quire.createTaskCrear una nueva tarea con prioridad, fechas, asignados y etiquetas opcionales
quire.updateTaskActualizar propiedades de la tarea
quire.deleteTaskEliminar una tarea y sus subtareas
quire.searchTasksBuscar tareas en un proyecto por palabra clave y filtros
quire.createTaskAfterCrear una tarea después de una tarea especificada
quire.createTaskBeforeCrear una tarea antes de una tarea especificada
quire.searchFolderTasksBuscar tareas dentro de una carpeta
quire.searchOrganizationTasksBuscar tareas en toda una organización

Etiquetas

HerramientaDescripción
quire.listTagsListar todas las etiquetas en un proyecto
quire.getTagObtener detalles de la etiqueta por OID
quire.createTagCrear una nueva etiqueta con nombre y color
quire.updateTagActualizar nombre o color de la etiqueta
quire.deleteTagEliminar una etiqueta

Comentarios

HerramientaDescripción
quire.listTaskCommentsListar todos los comentarios en una tarea
quire.addTaskCommentAñadir un comentario a una tarea
quire.updateCommentActualizar el texto del comentario
quire.deleteCommentEliminar un comentario
quire.listChatCommentsListar todos los comentarios en un canal de chat
quire.addChatCommentAñadir un comentario a un canal de chat

Usuarios

HerramientaDescripción
quire.getUserObtener detalles del usuario por ID, OID o correo electrónico
quire.listUsersListar todos los usuarios accesibles
quire.listProjectMembersListar todos los miembros de un proyecto

Estados personalizados

HerramientaDescripción
quire.listStatusesListar estados personalizados en un proyecto
quire.getStatusObtener detalles del estado por valor
quire.createStatusCrear un estado de flujo de trabajo personalizado
quire.updateStatusActualizar nombre o color del estado
quire.deleteStatusEliminar un estado personalizado

Equipos externos (socios)

HerramientaDescripción
quire.getPartnerObtener detalles del equipo externo
quire.listPartnersListar todos los equipos externos en un proyecto

Documentos

HerramientaDescripción
quire.createDocumentCrear un documento en una organización o proyecto
quire.getDocumentObtener contenido y metadatos del documento
quire.listDocumentsListar todos los documentos
quire.updateDocumentActualizar nombre o contenido del documento
quire.deleteDocumentEliminar un documento

Sublistas

HerramientaDescripción
quire.createSublistCrear una sublista
quire.getSublistObtener detalles de la sublista
quire.listSublistsListar todas las sublistas
quire.updateSublistActualizar nombre o descripción de la sublista
quire.deleteSublistEliminar una sublista

Canales de chat

HerramientaDescripción
quire.createChatCrear un canal de chat
quire.getChatObtener detalles del canal de chat
quire.listChatsListar todos los canales de chat
quire.updateChatActualizar nombre, descripción o miembros del chat
quire.deleteChatEliminar un canal de chat

Almacenamiento Clave-Valor

HerramientaDescripción
quire.getStorageValueObtener un valor almacenado por clave
quire.listStorageEntriesListar entradas de almacenamiento por prefijo
quire.putStorageValueAlmacenar un valor
quire.deleteStorageValueEliminar un valor almacenado

Notificaciones

HerramientaDescripción
quire.sendNotificationEnviar notificaciones a usuarios

Adjuntos

HerramientaDescripción
quire.uploadTaskAttachmentSubir un archivo adjunto a una tarea
quire.uploadCommentAttachmentSubir un archivo adjunto a un comentario

Recursos

El servidor expone datos como recursos MCP:

Recursos Estáticos

URI del RecursoDescripción
quire://user/mePerfil del usuario autenticado actual
quire://organizationsLista de todas las organizaciones accesibles
quire://projectsLista de todos los proyectos accesibles

Plantillas de Recursos

URI del RecursoDescripción
quire://project/{id}Detalles y metadatos de un proyecto específico
quire://project/{projectId}/tasksTareas raíz en un proyecto
quire://project/{projectId}/tagsEtiquetas definidas en un proyecto
quire://project/{projectId}/statusesEstados personalizados en un proyecto

Prompts

El servidor proporciona prompts guiados para flujos de trabajo comunes:

PromptDescripción
quire.create-project-planGenerar un plan de tareas a partir de una descripción de objetivo
quire.daily-standupGenerar un resumen diario de standup
quire.sprint-planningPlanificar un sprint desde el backlog
quire.task-breakdownDesglosar una tarea compleja en subtareas
quire.weekly-summaryGenerar un informe de progreso semanal

Desarrollo

Configuración

# Clone the repo
git clone https://github.com/jacob-hartmann/quire-mcp.git
cd quire-mcp

# Use the Node.js version from .nvmrc
# (macOS/Linux nvm): nvm install && nvm use
# (Windows nvm-windows): nvm install 22 && nvm use 22
nvm install
nvm use

# Install dependencies
pnpm install

# Copy .env.example and configure
cp .env.example .env
# Edit .env with your OAuth credentials

Ejecución Local

# Development mode (stdio, auto-reload)
pnpm dev

# Development mode (http, auto-reload)
pnpm dev:http

# Production build
pnpm build

# Production run
pnpm start        # stdio mode
pnpm start:http   # http mode

Depuración

Puedes usar el Inspector MCP para depurar el servidor:

# Run from source
pnpm inspect

# Run from built output
pnpm inspect:dist

pnpm inspect carga .env automáticamente mediante dotenv (ver .env.example).

Si ves Ignored build scripts: esbuild..., ejecuta pnpm approve-builds y permite esbuild. En CI instalamos dependencias con scripts de ciclo de vida deshabilitados (pnpm install --ignore-scripts) y luego reconstruimos explícitamente solo esbuild para el trabajo de compilación de producción.

Contribuciones

¡Las contribuciones son bienvenidas! Consulta CONTRIBUTING.md para conocer las pautas sobre cómo contribuir a este proyecto.

Seguridad

Consulta SECURITY.md para conocer la política de seguridad y cómo reportar vulnerabilidades.

Soporte

Este es un proyecto comunitario proporcionado "tal cual" con soporte no garantizado. Consulta SUPPORT.md para más detalles.

Licencia

MIT © Jacob Hartmann