Beebole MCP
This server connects Claude to Beebole's time-tracking API, enabling the following:
List projects and tasks – Browse your full project hierarchy and available tasks.
Get time entries – Retrieve time records for a specified date range (
YYYY-MM-DDformat).Log, edit, clone, and delete time records – Add new entries (specifying project, date, duration in minutes, optional task and comment), modify, duplicate, or remove existing ones.
Submit, approve, and reject timesheets – Manage the full timesheet workflow.
Get counts and reports – Count time records, list and run reports, compare planned vs. actual hours.
Manage entities – Add projects, tasks, persons, and work with tags and absence types.
Explore and access the full GraphQL API – Use
beebole_search_schemato discover operations by keyword,beebole_describe_operationto get full signatures, andbeebole_graphqlto execute any raw query or mutation not covered by the curated tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Beebole MCP list my projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@neonexai/beebole-mcp
MCP server que conecta Claude (Claude Code / Claude Desktop) con Beebole
(control de horas) a través de su API GraphQL nueva — la de la app rediseñada
app.beebole.com.
Endpoint:
POST https://app.beebole.com/graphqlAuth: cabecera
apikey: <API_KEY>(la key se obtiene enapp.beebole.com → Settings → API).Verificado e2e (2026-06-25) contra la API real: 18/18 checks de lectura y escritura (crear proyecto/tarea, fichar horas, editar, borrar, limpiar).
Dos transportes:
Local (stdio) — recomendado (GDPR): corre en el PC del cliente; su API key vive solo en su máquina y los datos no pasan por ningún servidor intermedio.
Remoto (HTTP, VPS) — centralizado; el token viaja por cabecera
X-Beebole-Keyen cada petición y no se almacena (stateless multi-tenant).
Arquitectura: híbrida (curadas + passthrough)
La API GraphQL nueva es enorme y fine-grained: 87 queries + 745 mutations (cada campo editable tiene su propia mutation). Exponer eso 1:1 saturaría a cualquier agente. Por eso el server combina dos capas:
A) ~24 tools curadas para el flujo real de un estudio:
Área | Tools |
Identidad |
|
Proyectos |
|
Tareas |
|
Personas |
|
Fichaje de horas |
|
Timesheets |
|
Catálogos |
|
Informes |
|
B) 3 tools genéricas para cobertura del 100% de la API (las ~800 operaciones restantes de administración/configuración):
beebole_search_schema— descubre cualquier operación por palabra clave.beebole_describe_operation— su firma completa (args + input objects + retorno).beebole_graphql— ejecuta cualquier query/mutation cruda.
Flujo para algo sin tool curada: search → describe → graphql.
Notas de dominio (del propio schema)
Timestamps:
BeeboleTimestamp= Unix epoch en milisegundos (> 1e10).Duración de un time record: entero en minutos (ej.
90= 1 h 30 min). Beebole lo interpreta según los time settings de la organización; confírmalo visualmente la primera vez.Estados (
status):d=draft,s=submitted,a=approved,r=rejected.Color: índice de paleta
0-71. Ausencias: unidaddayohour.addProject/addTaskrequierencategoryIdoparentId(la API rechaza conNoCategoryOrParentProvidedsi no se da ninguno).
Related MCP server: timely-mcp-server
Requisitos en el PC
Node ≥ 18 instalado (para
npx). No hay que instalar nada más: el server se descarga solo al arrancar connpx.Una API key de Beebole (
app.beebole.com → Settings → API).Conexión a internet.
NO hace falta tener Beebole abierto ni instalado. Este MCP habla directamente con la API web de Beebole (
app.beebole.com/graphql) usando la API key; funciona aunque no tengas Beebole abierto en el navegador.
Instalación (local · stdio · recomendado)
Publicado en npm como @neonexai/beebole-mcp.
@latest trae siempre la última versión.
Opción 1 — con el comando de Claude Code (si tienes el CLI claude)
claude mcp add beebole -s user --env BEEBOLE_API_KEY=TU_API_KEY -- npx -y @neonexai/beebole-mcp@latest-s user lo deja disponible en todos los proyectos de ese PC.
Opción 2 — sin CLI, editando la configuración a mano
Útil si usáis Claude Desktop o si el comando claude no existe en el equipo.
Añade el bloque "beebole" dentro de mcpServers en el archivo de configuración
y reinicia la app:
Claude Desktop →
C:\Users\<usuario>\AppData\Roaming\Claude\claude_desktop_config.json(en la app: Settings → Developer → Edit Config).Claude Code (config global de usuario) →
C:\Users\<usuario>\.claude.json, bajo la clave raízmcpServers.
{
"mcpServers": {
"beebole": {
"command": "npx",
"args": ["-y", "@neonexai/beebole-mcp@latest"],
"env": { "BEEBOLE_API_KEY": "TU_API_KEY" }
}
}
}Reinicia la app del todo (en Claude Desktop, ciérrala también desde el icono de la bandeja del sistema → Quit).
Si la app no encuentra
npx(PATH), pon la ruta absoluta comocommand(en PowerShell:where.exe npx), con barras dobles\\en el JSON. Alternativa sin npm (no auto-actualiza,npxcachea el clon):npx -y github:NeoNexAI/beebole-mcp.
Verifica la key antes (debe responder con tu nombre)
curl -s -H "apikey: TU_API_KEY" -H "Content-Type: application/json" \
-X POST https://app.beebole.com/graphql \
-d '{"query":"{ currentPerson{ id name email } }"}'B) Despliegue para un equipo (plan Team)
No hay un “instalar para toda la organización” de un click para un MCP propio: cada equipo lo corre en local (stdio) con la API key correspondiente. Para estandarizarlo en varios PCs:
Misma cuenta Beebole de empresa → repartid la misma API key (cada PC la pone en su
BEEBOLE_API_KEY; nunca en el repo).Cada persona con su propio usuario Beebole → cada PC usa su API key (el server actúa siempre como esa persona).
Para fijar la config en un repo compartido, commitea un
.mcp.json(scope project) sin la key y que cada entorno aporteBEEBOLE_API_KEYpor variable de entorno. La key es un secreto: nunca se commitea.
Alternativa centralizada: desplegar el modo HTTP en el VPS (un solo sitio) y que cada cliente Claude apunte ahí enviando su token por
X-Beebole-Key. Útil si no quieres instalar Node en cada PC; menos recomendable para datos GDPR sensibles.
Desarrollo
npm install
npm run build # tsc → dist/ (incluye schema.json para selección/búsqueda)
npm run typecheck
BEEBOLE_API_KEY=... npm run smoke # 9 checks de lectura e2e
BEEBOLE_API_KEY=... SMOKE_WRITE=1 npm run smoke # + ciclo de escritura (SOLO cuenta de pruebas)El smoke con SMOKE_WRITE=1 crea entidades ZZ_SMOKE_TEST_*, ficha, edita y
borra todo al terminar; úsalo solo en una cuenta de pruebas.
Modo HTTP (VPS)
MCP_TRANSPORT=http PORT=8087 node dist/index.js
# POST /mcp con cabecera X-Beebole-Key: <token> · GET /healthEstructura
src/
index.ts — entry point (stdio | HTTP)
client.ts — cliente GraphQL (auth apikey) + helpers de schema (selección/búsqueda/describe)
tools.ts — registro de las 27 tools (factoría buildServer(apiKey))
smoke.ts — test e2e contra la API real
schema.json — introspección de la API (bundleada; potencia selección + search/describe)Beebole API GraphQL — auth y endpoint verificados empíricamente 2026-06-25. Las
funciones de Beebole evolucionan; reverificar en app.beebole.com ante cambios.
Licencia
MIT · NeoNexAI Agency — ver LICENSE. Reporte de seguridad: SECURITY.md.
Available Tools
27 toolsbeebole_add_personCrear personaB
Da de alta una persona (usuario). roleId es obligatorio (ver roles de la organización).
Inputs: name (required), email (required), roleId (required), color.
beebole_add_projectCrear proyectoB
Crea un proyecto. color = índice de paleta 0-71.
Inputs: name (required), color, parentId, categoryId.
beebole_add_taskCrear tareaB
Crea una tarea (opcionalmente bajo un proyecto/padre y con estado/categoría).
Inputs: name (required), color, parentId, statusId, +1 more.
beebole_add_time_recordFichar horas (crear imputación)A
Crea una imputación de horas para una persona. duration en MINUTOS. startTime en epoch ms. Indica taskId (y opcionalmente projectIds) para tiempo, o absenceId para una ausencia. comment/nonBillable/wfh se aplican tras crear.
Inputs: personId (required), startTime (required), durationMinutes (required), wfh, +6 more.
beebole_approve_timesheetAprobar timesheetA
Aprueba un evento de aprobación de timesheet por su id (lo da getPendingApprovals / submit).
Inputs: id (required).
beebole_clone_time_recordsClonar imputaciones a otro periodoC
Copia los time records de una persona de un periodo origen a uno destino (epoch ms).
Inputs: personId (required), sourceEndTime (required), targetEndTime (required), sourceStartTime (required), +2 more.
beebole_count_time_recordsContar imputacionesARead-only
Cuenta los time records que casan el filtro (útil antes de listar rangos grandes).
Inputs: wfh, status, endTime, taskIds, +6 more.
beebole_delete_time_recordsBorrar imputacionesBDestructive
Elimina uno o varios time records por id. Acción destructiva e irreversible.
Inputs: ids (required).
beebole_describe_operationDescribir una operaciónARead-only
Devuelve la firma completa de una query/mutation: argumentos, expansión de los input objects, scalars con sus valores permitidos y forma del tipo de retorno. Úsalo antes de llamar a beebole_graphql.
Inputs: name (required).
beebole_edit_time_recordEditar una imputaciónA
Modifica campos de un time record existente. Pasa solo los que quieras cambiar: comment, durationMinutes, startTime, endTime, taskId, projectIds, nonBillable, wfh.
Inputs: id (required), wfh, taskId, comment, +5 more.
beebole_get_personDetalle de una personaARead-only
Devuelve una persona por id con detalle (rol, organización, ajustes).
Inputs: id (required).
beebole_get_projectDetalle de un proyectoARead-only
Devuelve un proyecto por id con detalle (categoría, padre, managers, budgets).
Inputs: id (required).
beebole_get_taskDetalle de una tareaARead-only
Devuelve una tarea por id con detalle.
Inputs: id (required).
beebole_graphqlEjecutar GraphQL crudoADestructive
Ejecuta una query o mutation GraphQL arbitraria contra Beebole (cobertura total de la API). Pasa el documento en query y opcionalmente variables. Para operaciones sin tool curada, descúbrelas con beebole_search_schema + beebole_describe_operation. Puede modificar datos: úsalo con cuidado.
Inputs: query (required), variables.
beebole_list_absence_typesListar tipos de ausenciaBRead-only
Lista los tipos de ausencia (vacaciones, baja, etc.) con su unidad (día/hora).
Inputs: archived.
beebole_list_personsListar personasBRead-only
Lista las personas (usuarios) de la organización, con filtros opcionales.
Inputs: name, roleId, tagIds, archived.
beebole_list_projectsListar proyectosARead-only
Lista proyectos con filtros opcionales. Sin filtros devuelve los proyectos de nivel raíz activos.
Inputs: name, tagIds, archived, categoryId, +2 more.
beebole_list_reportsListar informes guardadosARead-only
Lista los informes definidos en la cuenta (para ejecutarlos con beebole_run_report).
Inputs: no named parameters.
beebole_list_tagsListar tags/gruposBRead-only
Lista los tags (grupos jerárquicos) usados para clasificar personas/proyectos/tareas.
Inputs: name, archived, categoryId.
beebole_list_tasksListar tareasARead-only
Lista tareas con filtros (proyecto, estado, responsable, persona asignada, categoría, rango).
Inputs: name, endTime, ownerId, archived, +5 more.
beebole_list_time_recordsListar imputaciones de horasARead-only
Lista los time records (horas/ausencias fichadas) en un rango con filtros por persona, proyecto, tarea o estado. Pasa startTime/endTime (epoch ms) para acotar.
Inputs: wfh, status, endTime, taskIds, +6 more.
beebole_planned_vs_realInforme planificado vs realARead-only
Compara horas planificadas vs reales en un rango (epoch ms). Útil para seguimiento de presupuesto de proyecto. Filtra por proyecto/persona vía filters.
Inputs: endTime (required), startTime (required), filters, periodSplit, +1 more.
beebole_reject_timesheetRechazar timesheetBDestructive
Rechaza un timesheet en una etapa concreta con un comentario obligatorio.
Inputs: id (required), stage (required), comment (required).
beebole_run_reportEjecutar un informe guardadoARead-only
Ejecuta un informe guardado por id y devuelve sus filas. Hace polling si el informe es asíncrono (campo pending). period/filters son opcionales para sobrescribir el rango.
Inputs: id (required), period, filters.
beebole_search_schemaBuscar operaciones en la APIARead-only
Descubre cualquiera de las 87 queries + 745 mutations de Beebole por palabra clave (nombre o descripción). Úsalo cuando no haya una tool curada para lo que necesitas; luego beebole_describe_operation y beebole_graphql.
Inputs: keyword (required), limit.
beebole_submit_timesheetEnviar timesheet a aprobaciónB
Envía el timesheet de una persona para un periodo (epoch ms) al flujo de aprobación.
Inputs: endTime (required), personId (required), startTime (required).
beebole_whoamiQuién soy + organizaciónARead-only
Devuelve la persona autenticada por la API key (id, nombre, email, rol) y su organización. Empieza por aquí para conocer tu propio personId y el contexto de la cuenta.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 27 tools
Each tool targets a distinct resource and action (e.g., adding, listing, getting, editing, deleting). Even close pairs like add_time_record and edit_time_record are clearly separated by operation. The generic tools (graphql, describe_operation, search_schema) serve a unique meta-purpose.
All tool names follow a consistent 'beebole_verb_noun' pattern (beebole_add_person, beebole_list_projects, etc.). Verbs are standard (add, list, get, edit, delete, approve, etc.) and nouns are singular/plural as appropriate. No mixing of conventions.
27 tools is appropriate for a comprehensive API covering persons, projects, tasks, time records, absences, reports, and approvals, plus schema discovery and GraphQL access. The count is not excessive given the domain's breadth.
The curated tools cover core CRUD for time records and listing for other entities. While some operations (update/delete for persons, projects, tasks) are missing from curated tools, the inclusion of beebole_graphql and schema discovery tools (search_schema, describe_operation) provides complete coverage of the entire Beebole API.
Maintenance
Related MCP Connectors
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
timesheet.io MCP server - manage timers, projects, tasks and reports
Related MCP Servers
- FlicenseAqualityBmaintenanceMCP server wrapping a mock internal ops platform (FastAPI + SQLite) so Claude Code can read and write employee, project, task, and time data through natural language.8-
- AlicenseNot gradedqualityBmaintenanceMCP server for Timely time tracking API. Connects Claude Code to your Timely account for reading and creating time entries, projects, tasks, and users.7MIT
- AlicenseAqualityDmaintenanceThis MCP server allows AI assistants to interact with the Beebole REST API for time tracking management.4MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude Desktop to your OpenProject instance, allowing you to manage projects, tasks, and time entries through natural language.MIT