@studiometa/productive-mcp 0.8.5 → 0.9.1

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.
Files changed (72) hide show
  1. package/README.md +84 -412
  2. package/dist/auth.js +37 -36
  3. package/dist/auth.js.map +1 -1
  4. package/dist/crypto.js +100 -61
  5. package/dist/crypto.js.map +1 -1
  6. package/dist/formatters.d.ts +18 -2
  7. package/dist/formatters.d.ts.map +1 -1
  8. package/dist/handlers/attachments.d.ts +6 -0
  9. package/dist/handlers/attachments.d.ts.map +1 -0
  10. package/dist/handlers/bookings.d.ts +1 -1
  11. package/dist/handlers/bookings.d.ts.map +1 -1
  12. package/dist/handlers/budgets.d.ts +9 -0
  13. package/dist/handlers/budgets.d.ts.map +1 -0
  14. package/dist/handlers/comments.d.ts +1 -1
  15. package/dist/handlers/comments.d.ts.map +1 -1
  16. package/dist/handlers/companies.d.ts +6 -2
  17. package/dist/handlers/companies.d.ts.map +1 -1
  18. package/dist/handlers/deals.d.ts +6 -2
  19. package/dist/handlers/deals.d.ts.map +1 -1
  20. package/dist/handlers/discussions.d.ts +13 -0
  21. package/dist/handlers/discussions.d.ts.map +1 -0
  22. package/dist/handlers/help.d.ts.map +1 -1
  23. package/dist/handlers/index.d.ts.map +1 -1
  24. package/dist/handlers/pages.d.ts +13 -0
  25. package/dist/handlers/pages.d.ts.map +1 -0
  26. package/dist/handlers/people.d.ts +6 -2
  27. package/dist/handlers/people.d.ts.map +1 -1
  28. package/dist/handlers/projects.d.ts +6 -2
  29. package/dist/handlers/projects.d.ts.map +1 -1
  30. package/dist/handlers/reports.d.ts +1 -4
  31. package/dist/handlers/reports.d.ts.map +1 -1
  32. package/dist/handlers/resolve.d.ts +24 -0
  33. package/dist/handlers/resolve.d.ts.map +1 -0
  34. package/dist/handlers/services.d.ts +1 -1
  35. package/dist/handlers/services.d.ts.map +1 -1
  36. package/dist/handlers/tasks.d.ts +6 -2
  37. package/dist/handlers/tasks.d.ts.map +1 -1
  38. package/dist/handlers/time.d.ts +10 -2
  39. package/dist/handlers/time.d.ts.map +1 -1
  40. package/dist/handlers/timers.d.ts +1 -1
  41. package/dist/handlers/timers.d.ts.map +1 -1
  42. package/dist/handlers/types.d.ts +42 -3
  43. package/dist/handlers/types.d.ts.map +1 -1
  44. package/dist/handlers-BYE2INiR.js +2681 -0
  45. package/dist/handlers-BYE2INiR.js.map +1 -0
  46. package/dist/handlers.js +2 -5
  47. package/dist/hints.d.ts +16 -0
  48. package/dist/hints.d.ts.map +1 -1
  49. package/dist/http.js +139 -160
  50. package/dist/http.js.map +1 -1
  51. package/dist/index.js +74 -54
  52. package/dist/index.js.map +1 -1
  53. package/dist/oauth.js +285 -255
  54. package/dist/oauth.js.map +1 -1
  55. package/dist/schema.d.ts +17 -0
  56. package/dist/schema.d.ts.map +1 -1
  57. package/dist/server.js +67 -50
  58. package/dist/server.js.map +1 -1
  59. package/dist/stdio.js +85 -105
  60. package/dist/stdio.js.map +1 -1
  61. package/dist/tools.js +155 -145
  62. package/dist/tools.js.map +1 -1
  63. package/dist/version-D3sSBq_j.js +29 -0
  64. package/dist/version-D3sSBq_j.js.map +1 -0
  65. package/package.json +10 -10
  66. package/skills/SKILL.md +209 -13
  67. package/Dockerfile +0 -36
  68. package/dist/handlers.js.map +0 -1
  69. package/dist/index-CZpVCEu4.js +0 -1681
  70. package/dist/index-CZpVCEu4.js.map +0 -1
  71. package/dist/version-BPy06P7x.js +0 -21
  72. package/dist/version-BPy06P7x.js.map +0 -1
package/skills/SKILL.md CHANGED
@@ -17,19 +17,36 @@ productive(resource, action, [parameters...])
17
17
 
18
18
  ### Resources & Actions
19
19
 
20
- | Resource | Actions | Description |
21
- | ----------- | ----------------------------------------- | ----------------------- |
22
- | `projects` | `list`, `get`, `help` | Project management |
23
- | `time` | `list`, `get`, `create`, `update`, `help` | Time tracking |
24
- | `tasks` | `list`, `get`, `create`, `update`, `help` | Task management |
25
- | `services` | `list`, `get`, `help` | Budget line items |
26
- | `people` | `list`, `get`, `me`, `help` | Team members |
27
- | `companies` | `list`, `get`, `create`, `update`, `help` | Client companies |
28
- | `comments` | `list`, `get`, `create`, `update`, `help` | Comments on tasks/deals |
29
- | `timers` | `list`, `get`, `start`, `stop`, `help` | Active timers |
30
- | `deals` | `list`, `get`, `create`, `update`, `help` | Sales deals |
31
- | `bookings` | `list`, `get`, `create`, `update`, `help` | Resource scheduling |
32
- | `reports` | `get`, `help` | Generate reports |
20
+ | Resource | Actions | Description |
21
+ | ------------- | ------------------------------------------------------------------------ | ----------------------- |
22
+ | `projects` | `list`, `get`, `resolve`, `help` | Project management |
23
+ | `time` | `list`, `get`, `create`, `update`, `resolve`, `help` | Time tracking |
24
+ | `tasks` | `list`, `get`, `create`, `update`, `resolve`, `help` | Task management |
25
+ | `services` | `list`, `get`, `resolve`, `help` | Budget line items |
26
+ | `people` | `list`, `get`, `me`, `resolve`, `help` | Team members |
27
+ | `companies` | `list`, `get`, `create`, `update`, `resolve`, `help` | Client companies |
28
+ | `comments` | `list`, `get`, `create`, `update`, `help` | Comments on tasks/deals |
29
+ | `attachments` | `list`, `get`, `delete`, `help` | File attachments |
30
+ | `timers` | `list`, `get`, `start`, `stop`, `help` | Active timers |
31
+ | `deals` | `list`, `get`, `create`, `update`, `resolve`, `help` | Sales deals |
32
+ | `bookings` | `list`, `get`, `create`, `update`, `help` | Resource scheduling |
33
+ | `budgets` | `list`, `get`, `help` | Budget tracking |
34
+ | `reports` | `get`, `help` | Generate reports |
35
+ | Resource | Actions | Description |
36
+ | ------------- | ------------------------------------------------------------------------ | ----------------------- |
37
+ | `projects` | `list`, `get`, `resolve`, `help` | Project management |
38
+ | `time` | `list`, `get`, `create`, `update`, `resolve`, `help` | Time tracking |
39
+ | `tasks` | `list`, `get`, `create`, `update`, `resolve`, `help` | Task management |
40
+ | `services` | `list`, `get`, `resolve`, `help` | Budget line items |
41
+ | `people` | `list`, `get`, `me`, `resolve`, `help` | Team members |
42
+ | `companies` | `list`, `get`, `create`, `update`, `resolve`, `help` | Client companies |
43
+ | `comments` | `list`, `get`, `create`, `update`, `help` | Comments on tasks/deals |
44
+ | `timers` | `list`, `get`, `start`, `stop`, `help` | Active timers |
45
+ | `deals` | `list`, `get`, `create`, `update`, `resolve`, `help` | Sales deals |
46
+ | `bookings` | `list`, `get`, `create`, `update`, `help` | Resource scheduling |
47
+ | `pages` | `list`, `get`, `create`, `update`, `delete`, `help` | Wiki/docs pages |
48
+ | `discussions` | `list`, `get`, `create`, `update`, `delete`, `resolve`, `reopen`, `help` | Discussions on pages |
49
+ | `reports` | `get`, `help` | Generate reports |
33
50
 
34
51
  ### Getting Help
35
52
 
@@ -59,6 +76,92 @@ Returns filters, fields, includes, and examples for that resource.
59
76
  | `query` | string | Text search (behavior varies by resource - may search related fields like project names) |
60
77
  | `no_hints` | boolean | Disable contextual hints in responses (default: false) |
61
78
 
79
+ ## Smart ID Resolution
80
+
81
+ Use human-friendly identifiers instead of numeric IDs. The server automatically resolves:
82
+
83
+ - **Emails** → Person IDs: `user@example.com` → `500521`
84
+ - **Project numbers** → Project IDs: `PRJ-123` or `P-123` → `777332`
85
+ - **Deal numbers** → Deal IDs: `D-456` or `DEAL-456` → `888123`
86
+ - **Names** → IDs: Company names, service names (with project context)
87
+
88
+ ### Auto-Resolution in Filters
89
+
90
+ Filters automatically resolve human-friendly values:
91
+
92
+ ```json
93
+ // Email resolved to person ID
94
+ {
95
+ "resource": "tasks",
96
+ "action": "list",
97
+ "filter": { "assignee_id": "user@example.com" }
98
+ }
99
+
100
+ // Project number resolved
101
+ {
102
+ "resource": "time",
103
+ "action": "list",
104
+ "filter": { "project_id": "PRJ-123" }
105
+ }
106
+ ```
107
+
108
+ Response includes `_resolved` metadata showing what was resolved:
109
+
110
+ ```json
111
+ {
112
+ "data": [...],
113
+ "_resolved": {
114
+ "assignee_id": {
115
+ "input": "user@example.com",
116
+ "id": "500521",
117
+ "label": "John Doe"
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ ### Auto-Resolution in Get Actions
124
+
125
+ Use human-friendly IDs directly in `get` actions:
126
+
127
+ ```json
128
+ { "resource": "projects", "action": "get", "id": "PRJ-123" }
129
+ { "resource": "people", "action": "get", "id": "user@example.com" }
130
+ { "resource": "deals", "action": "get", "id": "D-456" }
131
+ ```
132
+
133
+ ### Explicit Resolution with `resolve` Action
134
+
135
+ Look up resources by human-friendly identifiers:
136
+
137
+ ```json
138
+ // Resolve email to person
139
+ { "resource": "people", "action": "resolve", "query": "user@example.com" }
140
+
141
+ // Resolve project number
142
+ { "resource": "projects", "action": "resolve", "query": "PRJ-123" }
143
+
144
+ // Resolve with type hint (when pattern is ambiguous)
145
+ { "resource": "time", "action": "resolve", "query": "Development", "type": "service", "project_id": "777332" }
146
+ ```
147
+
148
+ Response:
149
+
150
+ ```json
151
+ {
152
+ "matches": [
153
+ {
154
+ "id": "500521",
155
+ "label": "John Doe",
156
+ "type": "person",
157
+ "exact": true
158
+ }
159
+ ],
160
+ "query": "user@example.com",
161
+ "detected_type": "person"
162
+ }
163
+ ```
164
+
62
165
  ## Examples by Resource
63
166
 
64
167
  ### Projects
@@ -199,6 +302,22 @@ Returns filters, fields, includes, and examples for that resource.
199
302
  { "resource": "timers", "action": "stop", "id": "67890" }
200
303
  ```
201
304
 
305
+ ### Budgets
306
+
307
+ ```json
308
+ // List all budgets
309
+ { "resource": "budgets", "action": "list" }
310
+
311
+ // List budgets for a project
312
+ { "resource": "budgets", "action": "list", "filter": { "project_id": "12345" } }
313
+
314
+ // Get budget details
315
+ { "resource": "budgets", "action": "get", "id": "67890" }
316
+
317
+ // List billable budgets
318
+ { "resource": "budgets", "action": "list", "filter": { "billable": "true" } }
319
+ ```
320
+
202
321
  ### Reports
203
322
 
204
323
  ```json
@@ -221,6 +340,64 @@ Returns filters, fields, includes, and examples for that resource.
221
340
  }
222
341
  ```
223
342
 
343
+ ### Pages (Docs)
344
+
345
+ ```json
346
+ // List pages for a project
347
+ { "resource": "pages", "action": "list", "filter": { "project_id": "12345" } }
348
+
349
+ // Get page details
350
+ { "resource": "pages", "action": "get", "id": "67890" }
351
+
352
+ // Create a page
353
+ {
354
+ "resource": "pages",
355
+ "action": "create",
356
+ "title": "Getting Started",
357
+ "project_id": "12345"
358
+ }
359
+
360
+ // Create a sub-page
361
+ {
362
+ "resource": "pages",
363
+ "action": "create",
364
+ "title": "Installation",
365
+ "project_id": "12345",
366
+ "parent_page_id": "67890"
367
+ }
368
+
369
+ // Delete a page
370
+ { "resource": "pages", "action": "delete", "id": "67890" }
371
+ ```
372
+
373
+ ### Discussions
374
+
375
+ ```json
376
+ // List discussions on a page
377
+ {
378
+ "resource": "discussions",
379
+ "action": "list",
380
+ "filter": { "page_id": "12345" }
381
+ }
382
+
383
+ // List active discussions
384
+ { "resource": "discussions", "action": "list", "status": "active" }
385
+
386
+ // Create a discussion
387
+ {
388
+ "resource": "discussions",
389
+ "action": "create",
390
+ "page_id": "12345",
391
+ "body": "This section needs review"
392
+ }
393
+
394
+ // Resolve a discussion
395
+ { "resource": "discussions", "action": "resolve", "id": "67890" }
396
+
397
+ // Reopen a resolved discussion
398
+ { "resource": "discussions", "action": "reopen", "id": "67890" }
399
+ ```
400
+
224
401
  ## Filters Reference
225
402
 
226
403
  ### Time Entries
@@ -299,6 +476,25 @@ Returns filters, fields, includes, and examples for that resource.
299
476
  - `booking_type` - Type: `event` (absence) or `service` (budget)
300
477
  - `draft` - Tentative status: `true`/`false`
301
478
 
479
+ ### Budgets
480
+
481
+ - `project_id` - Filter by project
482
+ - `company_id` - Filter by company
483
+ - `deal_id` - Filter by deal
484
+ - `billable` - Filter by billable status: `true`/`false`
485
+ - `budget_type` - Filter by budget type
486
+
487
+ ### Pages
488
+
489
+ - `project_id` - Filter by project
490
+ - `creator_id` - Filter by creator
491
+ - `parent_page_id` - Filter by parent page (for sub-pages)
492
+
493
+ ### Discussions
494
+
495
+ - `page_id` - Filter by page
496
+ - `status` - Status: `1`=active, `2`=resolved (or "active", "resolved")
497
+
302
498
  ### Comments
303
499
 
304
500
  - `task_id` - Filter by task
package/Dockerfile DELETED
@@ -1,36 +0,0 @@
1
- # Productive MCP Server - HTTP Transport
2
- #
3
- # Build from the repository root:
4
- # docker build -t productive-mcp-server -f packages/productive-mcp/Dockerfile .
5
- #
6
- # Or from the package directory with published packages:
7
- # docker build -t productive-mcp-server .
8
-
9
- FROM node:20-alpine
10
-
11
- WORKDIR /app
12
-
13
- # Install the package globally from npm
14
- RUN npm install -g @studiometa/productive-mcp
15
-
16
- # Set environment variables
17
- ENV NODE_ENV=production
18
- ENV PORT=3000
19
- ENV HOST=0.0.0.0
20
-
21
- # Create non-root user for security
22
- RUN addgroup -g 1001 -S nodejs && \
23
- adduser -S nodejs -u 1001 -G nodejs
24
-
25
- # Expose port
26
- EXPOSE 3000
27
-
28
- # Health check
29
- HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
30
- CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
31
-
32
- # Switch to non-root user
33
- USER nodejs
34
-
35
- # Run the HTTP server
36
- CMD ["productive-mcp-server"]
@@ -1 +0,0 @@
1
- {"version":3,"file":"handlers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}