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
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
- Node.js v22 o superior
- Una cuenta de Quire
- Una aplicación OAuth de Quire (consulta Crear una aplicación OAuth de Quire)
Paso 1: Crear una aplicación OAuth de Quire
- Ve a Gestión de aplicaciones de Quire
- Haz clic en Crear nueva aplicación
- Establece la URL de redirección en:
http://localhost:3000/callback - Elige los alcances de permisos que necesites
- 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:
- Imprimirá una URL de autorización en la consola
- Esperará a que abras esa URL en tu navegador
- Después de que concedas acceso, Quire redirigirá a localhost
- 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:
- El cliente MCP inicia
npx quire-mcpcon variables de entorno - En la primera llamada a una herramienta, si no existe un token en caché, el servidor imprime una URL de OAuth en stderr
- El usuario abre la URL en el navegador y autoriza
- Quire redirige a
localhost:3000/callbackdonde el servidor captura el token - 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:
- Descubrirá los endpoints de OAuth mediante
/.well-known/oauth-authorization-server - Te redirigirá para autorizar con Quire
- Intercambiará tokens y establecerá una sesión
Variables de entorno del modo HTTP
| Variable | Requerida | Predeterminado | Descripción |
|---|---|---|---|
MCP_TRANSPORT | Sí | stdio | Establécelo en http para habilitar el modo HTTP |
QUIRE_OAUTH_CLIENT_ID | Sí | - | ID de cliente OAuth de Quire |
QUIRE_OAUTH_CLIENT_SECRET | Sí | - | Secreto de cliente OAuth de Quire |
MCP_SERVER_HOST | No | 127.0.0.1 | Host al que vincular el servidor HTTP |
MCP_SERVER_PORT | No | 3001 | Puerto para el servidor HTTP |
MCP_ISSUER_URL | No | http://localhost:3001 | URL base para los endpoints de OAuth |
QUIRE_OAUTH_REDIRECT_URI | No | http://localhost:3001/oauth/callback | URL 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
| Variable | Requerida | Predeterminado | Descripción |
|---|---|---|---|
QUIRE_OAUTH_CLIENT_ID | Sí* | - | ID de cliente OAuth de Quire |
QUIRE_OAUTH_CLIENT_SECRET | Sí* | - | Secreto de cliente OAuth de Quire |
QUIRE_ACCESS_TOKEN | No | - | Anulación manual de token (omite el flujo de OAuth) |
QUIRE_OAUTH_REDIRECT_URI | No | http://localhost:3000/callback | URL de devolución de llamada OAuth (modo stdio) |
QUIRE_TOKEN_STORE_PATH | No | Predeterminado de la plataforma | Ruta al archivo de caché de tokens |
MCP_TRANSPORT | No | stdio | Modo de transporte: stdio o http |
MCP_SERVER_HOST | No | 127.0.0.1 | Dirección de vinculación del servidor HTTP |
MCP_SERVER_PORT | No | 3001 | Puerto del servidor HTTP |
MCP_ISSUER_URL | No | http://localhost:3001 | URL 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
| Herramienta | Descripción |
|---|---|
quire.whoami | Obtener el perfil del usuario autenticado actual |
Organizaciones
| Herramienta | Descripción |
|---|---|
quire.listOrganizations | Listar todas las organizaciones accesibles |
quire.getOrganization | Obtener detalles de la organización por ID u OID |
quire.updateOrganization | Actualizar los seguidores de la organización |
Proyectos
| Herramienta | Descripción |
|---|---|
quire.listProjects | Listar todos los proyectos, opcionalmente filtrados por organización |
quire.getProject | Obtener detalles del proyecto, incluidos los recuentos de tareas |
quire.updateProject | Actualizar nombre, descripción, icono y seguidores del proyecto |
quire.exportProject | Exportar tareas del proyecto en formato JSON o CSV |
Tareas
| Herramienta | Descripción |
|---|---|
quire.listTasks | Listar tareas en un proyecto (de nivel raíz o subtareas) |
quire.getTask | Obtener detalles de la tarea por proyecto+ID u OID |
quire.createTask | Crear una nueva tarea con prioridad, fechas, asignados y etiquetas opcionales |
quire.updateTask | Actualizar propiedades de la tarea |
quire.deleteTask | Eliminar una tarea y sus subtareas |
quire.searchTasks | Buscar tareas en un proyecto por palabra clave y filtros |
quire.createTaskAfter | Crear una tarea después de una tarea especificada |
quire.createTaskBefore | Crear una tarea antes de una tarea especificada |
quire.searchFolderTasks | Buscar tareas dentro de una carpeta |
quire.searchOrganizationTasks | Buscar tareas en toda una organización |
Etiquetas
| Herramienta | Descripción |
|---|---|
quire.listTags | Listar todas las etiquetas en un proyecto |
quire.getTag | Obtener detalles de la etiqueta por OID |
quire.createTag | Crear una nueva etiqueta con nombre y color |
quire.updateTag | Actualizar nombre o color de la etiqueta |
quire.deleteTag | Eliminar una etiqueta |
Comentarios
| Herramienta | Descripción |
|---|---|
quire.listTaskComments | Listar todos los comentarios en una tarea |
quire.addTaskComment | Añadir un comentario a una tarea |
quire.updateComment | Actualizar el texto del comentario |
quire.deleteComment | Eliminar un comentario |
quire.listChatComments | Listar todos los comentarios en un canal de chat |
quire.addChatComment | Añadir un comentario a un canal de chat |
Usuarios
| Herramienta | Descripción |
|---|---|
quire.getUser | Obtener detalles del usuario por ID, OID o correo electrónico |
quire.listUsers | Listar todos los usuarios accesibles |
quire.listProjectMembers | Listar todos los miembros de un proyecto |
Estados personalizados
| Herramienta | Descripción |
|---|---|
quire.listStatuses | Listar estados personalizados en un proyecto |
quire.getStatus | Obtener detalles del estado por valor |
quire.createStatus | Crear un estado de flujo de trabajo personalizado |
quire.updateStatus | Actualizar nombre o color del estado |
quire.deleteStatus | Eliminar un estado personalizado |
Equipos externos (socios)
| Herramienta | Descripción |
|---|---|
quire.getPartner | Obtener detalles del equipo externo |
quire.listPartners | Listar todos los equipos externos en un proyecto |
Documentos
| Herramienta | Descripción |
|---|---|
quire.createDocument | Crear un documento en una organización o proyecto |
quire.getDocument | Obtener contenido y metadatos del documento |
quire.listDocuments | Listar todos los documentos |
quire.updateDocument | Actualizar nombre o contenido del documento |
quire.deleteDocument | Eliminar un documento |
Sublistas
| Herramienta | Descripción |
|---|---|
quire.createSublist | Crear una sublista |
quire.getSublist | Obtener detalles de la sublista |
quire.listSublists | Listar todas las sublistas |
quire.updateSublist | Actualizar nombre o descripción de la sublista |
quire.deleteSublist | Eliminar una sublista |
Canales de chat
| Herramienta | Descripción |
|---|---|
quire.createChat | Crear un canal de chat |
quire.getChat | Obtener detalles del canal de chat |
quire.listChats | Listar todos los canales de chat |
quire.updateChat | Actualizar nombre, descripción o miembros del chat |
quire.deleteChat | Eliminar un canal de chat |
Almacenamiento Clave-Valor
| Herramienta | Descripción |
|---|---|
quire.getStorageValue | Obtener un valor almacenado por clave |
quire.listStorageEntries | Listar entradas de almacenamiento por prefijo |
quire.putStorageValue | Almacenar un valor |
quire.deleteStorageValue | Eliminar un valor almacenado |
Notificaciones
| Herramienta | Descripción |
|---|---|
quire.sendNotification | Enviar notificaciones a usuarios |
Adjuntos
| Herramienta | Descripción |
|---|---|
quire.uploadTaskAttachment | Subir un archivo adjunto a una tarea |
quire.uploadCommentAttachment | Subir un archivo adjunto a un comentario |
Recursos
El servidor expone datos como recursos MCP:
Recursos Estáticos
| URI del Recurso | Descripción |
|---|---|
quire://user/me | Perfil del usuario autenticado actual |
quire://organizations | Lista de todas las organizaciones accesibles |
quire://projects | Lista de todos los proyectos accesibles |
Plantillas de Recursos
| URI del Recurso | Descripción |
|---|---|
quire://project/{id} | Detalles y metadatos de un proyecto específico |
quire://project/{projectId}/tasks | Tareas raíz en un proyecto |
quire://project/{projectId}/tags | Etiquetas definidas en un proyecto |
quire://project/{projectId}/statuses | Estados personalizados en un proyecto |
Prompts
El servidor proporciona prompts guiados para flujos de trabajo comunes:
| Prompt | Descripción |
|---|---|
quire.create-project-plan | Generar un plan de tareas a partir de una descripción de objetivo |
quire.daily-standup | Generar un resumen diario de standup |
quire.sprint-planning | Planificar un sprint desde el backlog |
quire.task-breakdown | Desglosar una tarea compleja en subtareas |
quire.weekly-summary | Generar 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