@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 CHANGED
@@ -59,38 +59,60 @@ Flujo para algo sin tool curada: **search → describe → graphql**.
59
59
 
60
60
  ---
61
61
 
62
- ## Instalación
62
+ ## Requisitos en el PC
63
63
 
64
- Requisitos: **Node ≥ 18** y una **API key de Beebole** (`app.beebole.com Settings API`).
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
- ### A) Local en el PC del cliente (recomendado · stdio)
72
+ ## Instalación (local · stdio · recomendado)
67
73
 
68
- Se ejecuta directamente desde GitHub con `npx`, sin clonar nada:
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
- - `-s user` (scope usuario) lo deja disponible en **todos los proyectos** de ese PC:
77
- ```bash
78
- claude mcp add beebole -s user --env BEEBOLE_API_KEY=TU_API_KEY -- npx -y github:NeoNexAI/beebole-mcp
79
- ```
80
- - En **Claude Desktop**, añade el bloque equivalente en su `mcp.json`:
81
- ```json
82
- {
83
- "mcpServers": {
84
- "beebole": {
85
- "command": "npx",
86
- "args": ["-y", "github:NeoNexAI/beebole-mcp"],
87
- "env": { "BEEBOLE_API_KEY": "TU_API_KEY" }
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 **antes** de añadirlo (debe responder con tu nombre):
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.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).