@neonexai/beebole-mcp 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -22
- package/package.json +15 -2
- package/skills/beebole-usage/SKILL.md +71 -0
package/README.md
CHANGED
|
@@ -59,38 +59,60 @@ Flujo para algo sin tool curada: **search → describe → graphql**.
|
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|
|
62
|
-
##
|
|
62
|
+
## Requisitos en el PC
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
- **Node ≥ 18** instalado (para `npx`). No hay que instalar nada más: el server se
|
|
65
|
+
descarga solo al arrancar con `npx`.
|
|
66
|
+
- Una **API key de Beebole** (`app.beebole.com → Settings → API`).
|
|
67
|
+
- **Conexión a internet**.
|
|
68
|
+
- **NO hace falta tener Beebole abierto ni instalado.** Este MCP habla
|
|
69
|
+
directamente con la **API web** de Beebole (`app.beebole.com/graphql`) usando la
|
|
70
|
+
API key; funciona aunque no tengas Beebole abierto en el navegador.
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
## Instalación (local · stdio · recomendado)
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
Publicado en npm como **[`@neonexai/beebole-mcp`](https://www.npmjs.com/package/@neonexai/beebole-mcp)**.
|
|
75
|
+
`@latest` trae siempre la última versión.
|
|
76
|
+
|
|
77
|
+
### Opción 1 — con el comando de Claude Code (si tienes el CLI `claude`)
|
|
69
78
|
|
|
70
79
|
```bash
|
|
71
|
-
claude mcp add beebole
|
|
72
|
-
--env BEEBOLE_API_KEY=TU_API_KEY \
|
|
73
|
-
-- npx -y github:NeoNexAI/beebole-mcp
|
|
80
|
+
claude mcp add beebole -s user --env BEEBOLE_API_KEY=TU_API_KEY -- npx -y @neonexai/beebole-mcp@latest
|
|
74
81
|
```
|
|
75
82
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
`-s user` lo deja disponible en **todos los proyectos** de ese PC.
|
|
84
|
+
|
|
85
|
+
### Opción 2 — sin CLI, editando la configuración a mano
|
|
86
|
+
|
|
87
|
+
Útil si usáis **Claude Desktop** o si el comando `claude` no existe en el equipo.
|
|
88
|
+
Añade el bloque `"beebole"` dentro de `mcpServers` en el archivo de configuración
|
|
89
|
+
y **reinicia la app**:
|
|
90
|
+
|
|
91
|
+
- **Claude Desktop** → `C:\Users\<usuario>\AppData\Roaming\Claude\claude_desktop_config.json`
|
|
92
|
+
(en la app: *Settings → Developer → Edit Config*).
|
|
93
|
+
- **Claude Code (config global de usuario)** → `C:\Users\<usuario>\.claude.json`,
|
|
94
|
+
bajo la clave raíz `mcpServers`.
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"mcpServers": {
|
|
99
|
+
"beebole": {
|
|
100
|
+
"command": "npx",
|
|
101
|
+
"args": ["-y", "@neonexai/beebole-mcp@latest"],
|
|
102
|
+
"env": { "BEEBOLE_API_KEY": "TU_API_KEY" }
|
|
89
103
|
}
|
|
90
104
|
}
|
|
91
|
-
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Reinicia la app **del todo** (en Claude Desktop, ciérrala también desde el icono de
|
|
109
|
+
la bandeja del sistema → Quit).
|
|
110
|
+
|
|
111
|
+
> Si la app **no encuentra `npx`** (PATH), pon la ruta absoluta como `command`
|
|
112
|
+
> (en PowerShell: `where.exe npx`), con barras dobles `\\` en el JSON.
|
|
113
|
+
> Alternativa sin npm (no auto-actualiza, `npx` cachea el clon): `npx -y github:NeoNexAI/beebole-mcp`.
|
|
92
114
|
|
|
93
|
-
Verifica la key
|
|
115
|
+
### Verifica la key antes (debe responder con tu nombre)
|
|
94
116
|
|
|
95
117
|
```bash
|
|
96
118
|
curl -s -H "apikey: TU_API_KEY" -H "Content-Type: application/json" \
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neonexai/beebole-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "MCP server para Beebole (control de horas) — NeoNexAI. API GraphQL nueva (app.beebole.com): ~24 tools curadas (proyectos, tareas, personas, fichaje de horas, timesheets, informes) + passthrough GraphQL (search/describe/graphql) para cobertura total (87 queries + 745 mutations). Transportes: stdio (local) + Streamable HTTP (remoto).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
|
-
"schema.json"
|
|
11
|
+
"schema.json",
|
|
12
|
+
"skills"
|
|
12
13
|
],
|
|
13
14
|
"scripts": {
|
|
14
15
|
"build": "tsc",
|
|
@@ -36,6 +37,18 @@
|
|
|
36
37
|
"type": "git",
|
|
37
38
|
"url": "git+https://github.com/NeoNexAI/beebole-mcp.git"
|
|
38
39
|
},
|
|
40
|
+
"homepage": "https://github.com/NeoNexAI/beebole-mcp#readme",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/NeoNexAI/beebole-mcp/issues"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"mcp",
|
|
46
|
+
"model-context-protocol",
|
|
47
|
+
"beebole",
|
|
48
|
+
"time-tracking",
|
|
49
|
+
"graphql",
|
|
50
|
+
"neonexai"
|
|
51
|
+
],
|
|
39
52
|
"publishConfig": {
|
|
40
53
|
"access": "public"
|
|
41
54
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: beebole-usage
|
|
3
|
+
description: >-
|
|
4
|
+
Guía para manejar bien el MCP de Beebole (control de horas). Úsala SIEMPRE que
|
|
5
|
+
el trabajo implique Beebole o cualquier tool `beebole_*` — fichar/consultar
|
|
6
|
+
horas, proyectos, tareas, personas, timesheets (aprobar/rechazar) o informes de
|
|
7
|
+
dedicación y rentabilidad. Explica el flujo correcto (curadas → search/describe/
|
|
8
|
+
graphql) y los gotchas de dominio (duración en MINUTOS, timestamps en
|
|
9
|
+
MILISEGUNDOS, categoría obligatoria al crear) que, si se ignoran, hacen fallar
|
|
10
|
+
las llamadas. Aunque el usuario no nombre "Beebole", si habla de fichajes,
|
|
11
|
+
partes de horas o dedicación por proyecto y el MCP está disponible, aplícala.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Beebole — cómo usar el MCP bien
|
|
15
|
+
|
|
16
|
+
El MCP habla con la API **GraphQL** de `app.beebole.com` (auth por cabecera
|
|
17
|
+
`apikey`). Tiene **24 tools curadas** para el flujo normal de un estudio y **3
|
|
18
|
+
genéricas** que cubren el 100% de la API (87 queries + 745 mutations). Tu trabajo
|
|
19
|
+
es resolver la petición con el mínimo de llamadas y sin tropezar con el dominio.
|
|
20
|
+
|
|
21
|
+
## Regla de oro de selección
|
|
22
|
+
|
|
23
|
+
1. **¿Hay una tool curada para esto?** Úsala. Cubren lo habitual:
|
|
24
|
+
- Identidad: `beebole_whoami`
|
|
25
|
+
- Proyectos: `beebole_list_projects`, `beebole_get_project`, `beebole_add_project`
|
|
26
|
+
- Tareas: `beebole_list_tasks`, `beebole_get_task`, `beebole_add_task`
|
|
27
|
+
- Personas: `beebole_list_persons`, `beebole_get_person`, `beebole_add_person`
|
|
28
|
+
- Horas: `beebole_list_time_records`, `beebole_count_time_records`,
|
|
29
|
+
`beebole_add_time_record`, `beebole_edit_time_record`,
|
|
30
|
+
`beebole_delete_time_records`, `beebole_clone_time_records`
|
|
31
|
+
- Timesheets: `beebole_submit_timesheet`, `beebole_approve_timesheet`, `beebole_reject_timesheet`
|
|
32
|
+
- Catálogos: `beebole_list_tags`, `beebole_list_absence_types`
|
|
33
|
+
- Informes: `beebole_list_reports`, `beebole_run_report`, `beebole_planned_vs_real`
|
|
34
|
+
2. **¿No hay tool curada?** Entonces el patrón de descubrimiento:
|
|
35
|
+
`beebole_search_schema "<palabra clave>"` → `beebole_describe_operation "<nombre>"`
|
|
36
|
+
(para ver argumentos y tipos exactos) → `beebole_graphql` con la query/mutation.
|
|
37
|
+
No inventes nombres de operación: descúbrelos siempre con search→describe primero.
|
|
38
|
+
|
|
39
|
+
## Gotchas de dominio (la causa nº1 de fallos)
|
|
40
|
+
|
|
41
|
+
Interioriza esto antes de escribir/leer datos; el schema no perdona:
|
|
42
|
+
|
|
43
|
+
- **Duración de un fichaje = ENTERO en MINUTOS.** 1 h 30 min → `90`. Nunca horas
|
|
44
|
+
decimales (`1.5`) ni segundos. Si el usuario dice "2 horas", envía `120`.
|
|
45
|
+
- **Timestamps = `BeeboleTimestamp` en MILISEGUNDOS** (epoch · 13 dígitos, `> 1e10`).
|
|
46
|
+
Una fecha en segundos (10 dígitos) se interpretará mal. Multiplica ×1000.
|
|
47
|
+
- **Crear proyecto o tarea exige categoría:** `beebole_add_project` / `beebole_add_task`
|
|
48
|
+
requieren `categoryId` (o `parentId` para anidar). Sin ello la API rechaza con
|
|
49
|
+
`NoCategoryOrParentProvided`. Si no la tienes, descúbrela primero
|
|
50
|
+
(`search_schema "categor"` → describe → query de categorías) y pásala.
|
|
51
|
+
- **Estados (`status`):** `d`=borrador, `s`=enviado, `a`=aprobado, `r`=rechazado.
|
|
52
|
+
- **Color:** índice de paleta `0–71`. **Ausencias:** unidad `day` o `hour`.
|
|
53
|
+
|
|
54
|
+
## Patrones frecuentes
|
|
55
|
+
|
|
56
|
+
- **Fichar horas:** `beebole_add_time_record` con persona, tarea/proyecto, fecha
|
|
57
|
+
(ms) y `duration` en minutos. Confirma persona y proyecto con un `list_*` si hay duda.
|
|
58
|
+
- **Horas por proyecto / rentabilidad:** primero `beebole_list_reports` para ver
|
|
59
|
+
los informes definidos; ejecuta con `beebole_run_report`. Para previsto vs. real,
|
|
60
|
+
`beebole_planned_vs_real`. Estos informes son la vía correcta para analítica, no
|
|
61
|
+
sumar fichajes a mano.
|
|
62
|
+
- **Aprobar partes:** `submit` → `approve`/`reject`. Comprueba el estado antes.
|
|
63
|
+
- **Borrados:** son destructivos y normalmente sin papelera. Antes de
|
|
64
|
+
`delete_time_records`, resume al usuario qué se va a borrar y pide confirmación.
|
|
65
|
+
|
|
66
|
+
## Antes de operar
|
|
67
|
+
|
|
68
|
+
- Si una llamada devuelve un error de permisos o vacío inesperado, lo más probable
|
|
69
|
+
es **API key inválida o sin permisos** para ese recurso, no un bug del MCP.
|
|
70
|
+
- Verifica identidad con `beebole_whoami` si dudas de con qué usuario actúas (el
|
|
71
|
+
MCP actúa siempre como el dueño de la API key configurada).
|