@fbdo/smart-agentic-calendar 0.1.3 → 0.1.4

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 (2) hide show
  1. package/README.md +449 -9
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -57,7 +57,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
57
57
  "mcpServers": {
58
58
  "smart-agentic-calendar": {
59
59
  "command": "npx",
60
- "args": ["-y", "@fbdo/smart-agentic-calendar"],
60
+ "args": ["-y", "@fbdo/smart-agentic-calendar@latest"],
61
61
  "env": {
62
62
  "CALENDAR_DB_PATH": "/absolute/path/to/calendar.db"
63
63
  }
@@ -75,7 +75,7 @@ Add to your project's `.mcp.json` or global `~/.claude/settings.json`:
75
75
  "mcpServers": {
76
76
  "smart-agentic-calendar": {
77
77
  "command": "npx",
78
- "args": ["-y", "@fbdo/smart-agentic-calendar"],
78
+ "args": ["-y", "@fbdo/smart-agentic-calendar@latest"],
79
79
  "env": {
80
80
  "CALENDAR_DB_PATH": "/absolute/path/to/calendar.db"
81
81
  }
@@ -93,7 +93,7 @@ Add to `.cursor/mcp.json` in your project root:
93
93
  "mcpServers": {
94
94
  "smart-agentic-calendar": {
95
95
  "command": "npx",
96
- "args": ["-y", "@fbdo/smart-agentic-calendar"],
96
+ "args": ["-y", "@fbdo/smart-agentic-calendar@latest"],
97
97
  "env": {
98
98
  "CALENDAR_DB_PATH": "/absolute/path/to/calendar.db"
99
99
  }
@@ -107,17 +107,457 @@ Add to `.cursor/mcp.json` in your project root:
107
107
  Spawn the server as a child process with stdio transport:
108
108
 
109
109
  ```bash
110
- npx -y @fbdo/smart-agentic-calendar
110
+ npx -y @fbdo/smart-agentic-calendar@latest
111
111
  ```
112
112
 
113
113
  Or with a custom database path:
114
114
 
115
115
  ```bash
116
- CALENDAR_DB_PATH=/path/to/calendar.db npx -y @fbdo/smart-agentic-calendar
116
+ CALENDAR_DB_PATH=/path/to/calendar.db npx -y @fbdo/smart-agentic-calendar@latest
117
117
  ```
118
118
 
119
119
  The server reads JSON-RPC messages from stdin and writes responses to stdout. Diagnostic messages go to stderr.
120
120
 
121
+ ## Usage Examples
122
+
123
+ The examples below show natural-language prompts you would give to an AI agent (like Claude) connected to this MCP server, along with the tool calls the agent makes and the responses it receives. The agent interprets these responses and presents them conversationally — you never see raw JSON yourself.
124
+
125
+ ### 1. Configure Your Work Schedule
126
+
127
+ > **You:** Set my work hours to Monday through Friday, 9 AM to 5 PM.
128
+
129
+ The agent calls `set_availability`:
130
+
131
+ ```json
132
+ {
133
+ "windows": [
134
+ { "day": 1, "start_time": "09:00", "end_time": "17:00" },
135
+ { "day": 2, "start_time": "09:00", "end_time": "17:00" },
136
+ { "day": 3, "start_time": "09:00", "end_time": "17:00" },
137
+ { "day": 4, "start_time": "09:00", "end_time": "17:00" },
138
+ { "day": 5, "start_time": "09:00", "end_time": "17:00" }
139
+ ]
140
+ }
141
+ ```
142
+
143
+ Response:
144
+
145
+ ```json
146
+ {
147
+ "windows": [
148
+ { "day": 1, "start_time": "09:00", "end_time": "17:00" },
149
+ { "day": 2, "start_time": "09:00", "end_time": "17:00" },
150
+ { "day": 3, "start_time": "09:00", "end_time": "17:00" },
151
+ { "day": 4, "start_time": "09:00", "end_time": "17:00" },
152
+ { "day": 5, "start_time": "09:00", "end_time": "17:00" }
153
+ ],
154
+ "message": "Availability updated successfully"
155
+ }
156
+ ```
157
+
158
+ ### 2. Protect Deep Work Time
159
+
160
+ > **You:** I want focus time on Monday, Wednesday, and Friday mornings from 9 to 11 AM. Minimum 60-minute blocks.
161
+
162
+ The agent calls `set_focus_time`:
163
+
164
+ ```json
165
+ {
166
+ "blocks": [
167
+ { "day": 1, "start_time": "09:00", "end_time": "11:00" },
168
+ { "day": 3, "start_time": "09:00", "end_time": "11:00" },
169
+ { "day": 5, "start_time": "09:00", "end_time": "11:00" }
170
+ ],
171
+ "minimum_block_minutes": 60
172
+ }
173
+ ```
174
+
175
+ Response:
176
+
177
+ ```json
178
+ {
179
+ "blocks": [
180
+ { "day": 1, "start_time": "09:00", "end_time": "11:00" },
181
+ { "day": 3, "start_time": "09:00", "end_time": "11:00" },
182
+ { "day": 5, "start_time": "09:00", "end_time": "11:00" }
183
+ ],
184
+ "minimum_block_minutes": 60,
185
+ "message": "Focus time updated successfully"
186
+ }
187
+ ```
188
+
189
+ ### 3. Set Scheduling Preferences
190
+
191
+ > **You:** I'd like 15-minute buffers between tasks, a 2-week scheduling horizon, and minimum 25-minute blocks.
192
+
193
+ The agent calls `set_preferences`:
194
+
195
+ ```json
196
+ {
197
+ "buffer_time_minutes": 15,
198
+ "default_priority": "P3",
199
+ "default_duration": 30,
200
+ "scheduling_horizon_weeks": 2,
201
+ "minimum_block_minutes": 25
202
+ }
203
+ ```
204
+
205
+ Response:
206
+
207
+ ```json
208
+ {
209
+ "buffer_time_minutes": 15,
210
+ "default_priority": "P3",
211
+ "default_duration": 30,
212
+ "scheduling_horizon_weeks": 2,
213
+ "minimum_block_minutes": 25
214
+ }
215
+ ```
216
+
217
+ ### 4. Review Your Full Configuration
218
+
219
+ > **You:** Show me my current calendar settings.
220
+
221
+ The agent calls `get_preferences` (no parameters):
222
+
223
+ ```json
224
+ {
225
+ "availability": [
226
+ { "day": 1, "start_time": "09:00", "end_time": "17:00" },
227
+ { "day": 2, "start_time": "09:00", "end_time": "17:00" },
228
+ { "day": 3, "start_time": "09:00", "end_time": "17:00" },
229
+ { "day": 4, "start_time": "09:00", "end_time": "17:00" },
230
+ { "day": 5, "start_time": "09:00", "end_time": "17:00" }
231
+ ],
232
+ "focus_time": {
233
+ "blocks": [
234
+ { "day": 1, "start_time": "09:00", "end_time": "11:00" },
235
+ { "day": 3, "start_time": "09:00", "end_time": "11:00" },
236
+ { "day": 5, "start_time": "09:00", "end_time": "11:00" }
237
+ ],
238
+ "minimum_block_minutes": 60
239
+ },
240
+ "preferences": {
241
+ "buffer_time_minutes": 15,
242
+ "default_priority": "P3",
243
+ "default_duration": 30,
244
+ "scheduling_horizon_weeks": 2,
245
+ "minimum_block_minutes": 25
246
+ }
247
+ }
248
+ ```
249
+
250
+ ### 5. Create Tasks
251
+
252
+ > **You:** I need to write the Q2 project proposal — it'll take about 2 hours, due Friday at 5 PM. High priority. Also, I need to prepare slides for the sprint demo by Thursday at 2 PM, about an hour of work.
253
+
254
+ The agent calls `create_task` twice. First call:
255
+
256
+ ```json
257
+ {
258
+ "title": "Write Q2 project proposal",
259
+ "description": "Draft the project proposal for the Q2 planning review",
260
+ "estimated_duration": 120,
261
+ "deadline": "2026-04-18T17:00:00Z",
262
+ "priority": "P1",
263
+ "category": "work",
264
+ "tags": ["planning", "writing"]
265
+ }
266
+ ```
267
+
268
+ Response:
269
+
270
+ ```json
271
+ {
272
+ "task": {
273
+ "id": "a115d241-e8f8-4078-8ee5-7182ff04fa48",
274
+ "title": "Write Q2 project proposal",
275
+ "description": "Draft the project proposal for the Q2 planning review",
276
+ "estimated_duration": 120,
277
+ "deadline": "2026-04-18T17:00:00Z",
278
+ "priority": "P1",
279
+ "status": "pending",
280
+ "category": "work",
281
+ "tags": ["planning", "writing"],
282
+ "is_recurring": false,
283
+ "recurrence_template_id": null,
284
+ "actual_duration": null,
285
+ "created_at": "2026-04-13T08:36:22.887Z",
286
+ "updated_at": "2026-04-13T08:36:22.887Z"
287
+ }
288
+ }
289
+ ```
290
+
291
+ Second call:
292
+
293
+ ```json
294
+ {
295
+ "title": "Prepare sprint demo",
296
+ "estimated_duration": 60,
297
+ "deadline": "2026-04-17T14:00:00Z",
298
+ "priority": "P2",
299
+ "category": "work",
300
+ "tags": ["presentation"]
301
+ }
302
+ ```
303
+
304
+ Response:
305
+
306
+ ```json
307
+ {
308
+ "task": {
309
+ "id": "2f293125-8280-43d5-b183-f5be9e90e119",
310
+ "title": "Prepare sprint demo",
311
+ "estimated_duration": 60,
312
+ "deadline": "2026-04-17T14:00:00Z",
313
+ "priority": "P2",
314
+ "status": "pending",
315
+ "category": "work",
316
+ "tags": ["presentation"],
317
+ "is_recurring": false,
318
+ "recurrence_template_id": null,
319
+ "actual_duration": null,
320
+ "created_at": "2026-04-13T08:36:22.908Z",
321
+ "updated_at": "2026-04-13T08:36:22.908Z"
322
+ }
323
+ }
324
+ ```
325
+
326
+ Each `create_task` triggers a background replan — the scheduler automatically finds time slots for the new tasks.
327
+
328
+ ### 6. Create Events
329
+
330
+ > **You:** Add a team standup on Monday at 2 PM for 30 minutes, and a sprint demo meeting on Thursday at 3 PM for an hour.
331
+
332
+ The agent calls `create_event` twice. First call:
333
+
334
+ ```json
335
+ {
336
+ "title": "Team standup",
337
+ "start_time": "2026-04-14T14:00:00Z",
338
+ "end_time": "2026-04-14T14:30:00Z"
339
+ }
340
+ ```
341
+
342
+ Response:
343
+
344
+ ```json
345
+ {
346
+ "event": {
347
+ "id": "e76cbe94-2f7e-4f7a-9a09-29370370fdad",
348
+ "title": "Team standup",
349
+ "start_time": "2026-04-14T14:00:00Z",
350
+ "end_time": "2026-04-14T14:30:00Z",
351
+ "is_all_day": false,
352
+ "date": null,
353
+ "created_at": "2026-04-13T08:36:22.932Z",
354
+ "updated_at": "2026-04-13T08:36:22.932Z"
355
+ }
356
+ }
357
+ ```
358
+
359
+ Events block time on the calendar — the scheduler works around them when placing tasks.
360
+
361
+ ### 7. View Your Schedule
362
+
363
+ > **You:** What does my week look like?
364
+
365
+ The agent calls `get_schedule`:
366
+
367
+ ```json
368
+ {
369
+ "start_date": "2026-04-14",
370
+ "end_date": "2026-04-18"
371
+ }
372
+ ```
373
+
374
+ Response:
375
+
376
+ ```json
377
+ {
378
+ "schedule": [
379
+ {
380
+ "id": "12c6493f-7e4d-4c4a-8084-85fcc36eeea3",
381
+ "task_id": "a115d241-e8f8-4078-8ee5-7182ff04fa48",
382
+ "start_time": "2026-04-14T09:00:00.000Z",
383
+ "end_time": "2026-04-14T11:00:00.000Z",
384
+ "date": "2026-04-14",
385
+ "block_index": 0,
386
+ "total_blocks": 1,
387
+ "task_title": "Write Q2 project proposal",
388
+ "task_priority": "P1",
389
+ "task_category": "work",
390
+ "task_status": "scheduled"
391
+ },
392
+ {
393
+ "id": "0391fd94-6693-4139-812c-437b31988c12",
394
+ "task_id": "2f293125-8280-43d5-b183-f5be9e90e119",
395
+ "start_time": "2026-04-16T09:00:00.000Z",
396
+ "end_time": "2026-04-16T10:00:00.000Z",
397
+ "date": "2026-04-16",
398
+ "block_index": 0,
399
+ "total_blocks": 1,
400
+ "task_title": "Prepare sprint demo",
401
+ "task_priority": "P2",
402
+ "task_category": "work",
403
+ "task_status": "scheduled"
404
+ }
405
+ ],
406
+ "schedule_status": "up_to_date"
407
+ }
408
+ ```
409
+
410
+ The P1 proposal was placed in Monday's focus time block (9–11 AM), and the sprint demo prep was scheduled for Wednesday morning — both before their deadlines. The `schedule_status` field tells the agent whether the schedule reflects the latest changes.
411
+
412
+ ### 8. Complete a Task
413
+
414
+ > **You:** I finished reviewing the pull requests. Took me about 35 minutes instead of the 45 I estimated.
415
+
416
+ The agent calls `complete_task`:
417
+
418
+ ```json
419
+ {
420
+ "task_id": "4acb7a3d-cc43-42cb-9aee-974b797d95ee",
421
+ "actual_duration_minutes": 35
422
+ }
423
+ ```
424
+
425
+ Response:
426
+
427
+ ```json
428
+ {
429
+ "task": {
430
+ "id": "4acb7a3d-cc43-42cb-9aee-974b797d95ee",
431
+ "title": "Review pull requests",
432
+ "estimated_duration": 45,
433
+ "deadline": "2026-04-15T17:00:00Z",
434
+ "priority": "P2",
435
+ "status": "completed",
436
+ "category": "work",
437
+ "tags": ["code-review"],
438
+ "actual_duration": 35,
439
+ "created_at": "2026-04-13T08:36:22.899Z",
440
+ "updated_at": "2026-04-13T08:36:31.378Z"
441
+ }
442
+ }
443
+ ```
444
+
445
+ Recording actual duration feeds into estimation accuracy analytics. The scheduler replans in the background to reclaim the freed time.
446
+
447
+ ### 9. Check Schedule Health
448
+
449
+ > **You:** How healthy is my schedule right now?
450
+
451
+ The agent calls `get_schedule_health` (no parameters):
452
+
453
+ ```json
454
+ {
455
+ "health_score": 90,
456
+ "utilization_percentage": 10,
457
+ "overdue_count": 0,
458
+ "at_risk_count": 0,
459
+ "free_hours_this_week": 36,
460
+ "busiest_day": "Tuesday",
461
+ "lightest_day": "Monday"
462
+ }
463
+ ```
464
+
465
+ The health score (0–100) is a composite of utilization, overdue tasks, and at-risk tasks. A score of 90 with zero at-risk items means the schedule is in good shape.
466
+
467
+ ### 10. View Productivity Stats
468
+
469
+ > **You:** How productive have I been this week?
470
+
471
+ The agent calls `get_productivity_stats`:
472
+
473
+ ```json
474
+ {
475
+ "period": "week"
476
+ }
477
+ ```
478
+
479
+ Response:
480
+
481
+ ```json
482
+ {
483
+ "period": "week",
484
+ "tasks_completed": 1,
485
+ "tasks_overdue": 2,
486
+ "tasks_cancelled": 0,
487
+ "completion_rate": 33.33,
488
+ "on_time_rate": 100
489
+ }
490
+ ```
491
+
492
+ ### 11. Check Time Allocation
493
+
494
+ > **You:** Where am I spending my time this week?
495
+
496
+ The agent calls `get_time_allocation`:
497
+
498
+ ```json
499
+ {
500
+ "period": "week"
501
+ }
502
+ ```
503
+
504
+ Response:
505
+
506
+ ```json
507
+ {
508
+ "period": "week",
509
+ "categories": [
510
+ { "category": "work", "hours": 0.58, "percentage": 100 }
511
+ ]
512
+ }
513
+ ```
514
+
515
+ Time allocation breaks down scheduled hours by category, so you can see if your time distribution matches your priorities.
516
+
517
+ ### 12. Review Estimation Accuracy
518
+
519
+ > **You:** How accurate are my time estimates?
520
+
521
+ The agent calls `get_estimation_accuracy`:
522
+
523
+ ```json
524
+ {
525
+ "period": "week"
526
+ }
527
+ ```
528
+
529
+ Response:
530
+
531
+ ```json
532
+ {
533
+ "average_accuracy_percentage": 77.78,
534
+ "overestimate_count": 1,
535
+ "underestimate_count": 0,
536
+ "average_overestimate_minutes": 10,
537
+ "average_underestimate_minutes": null,
538
+ "accuracy_by_category": {
539
+ "work": 77.78
540
+ }
541
+ }
542
+ ```
543
+
544
+ This compares estimated vs. actual durations from completed tasks. In this case, the 45-minute estimate for PR review vs. 35 minutes actual shows a tendency to overestimate — useful feedback for calibrating future estimates.
545
+
546
+ ### 13. Check for Conflicts
547
+
548
+ > **You:** Are there any scheduling conflicts I should worry about?
549
+
550
+ The agent calls `get_conflicts` (no parameters):
551
+
552
+ ```json
553
+ {
554
+ "conflicts": [],
555
+ "schedule_status": "up_to_date"
556
+ }
557
+ ```
558
+
559
+ An empty conflicts array means all tasks fit within available time before their deadlines. When conflicts exist, the response includes details about which tasks are at risk, why (insufficient time, dependency chains, or overdue), and suggestions for which lower-priority tasks to deprioritize to free up time.
560
+
121
561
  ## Logging
122
562
 
123
563
  The server has two independent logging channels, each with its own level filtering:
@@ -141,13 +581,13 @@ Controlled by the `LOG_LEVEL` environment variable. Set it to any [RFC 5424 sysl
141
581
 
142
582
  ```bash
143
583
  # Full diagnostics (all log output to stderr)
144
- LOG_LEVEL=debug npx -y @fbdo/smart-agentic-calendar
584
+ LOG_LEVEL=debug npx -y @fbdo/smart-agentic-calendar@latest
145
585
 
146
586
  # Only errors and above
147
- LOG_LEVEL=error npx -y @fbdo/smart-agentic-calendar
587
+ LOG_LEVEL=error npx -y @fbdo/smart-agentic-calendar@latest
148
588
 
149
589
  # Default (warning and above) — quiet operation
150
- npx -y @fbdo/smart-agentic-calendar
590
+ npx -y @fbdo/smart-agentic-calendar@latest
151
591
  ```
152
592
 
153
593
  In your MCP client config, add `LOG_LEVEL` to the `env` block:
@@ -157,7 +597,7 @@ In your MCP client config, add `LOG_LEVEL` to the `env` block:
157
597
  "mcpServers": {
158
598
  "smart-agentic-calendar": {
159
599
  "command": "npx",
160
- "args": ["-y", "@fbdo/smart-agentic-calendar"],
600
+ "args": ["-y", "@fbdo/smart-agentic-calendar@latest"],
161
601
  "env": {
162
602
  "CALENDAR_DB_PATH": "/path/to/calendar.db",
163
603
  "LOG_LEVEL": "debug"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fbdo/smart-agentic-calendar",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Local-first smart calendar MCP server for AI agents with automatic task replanning",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",