@cocaxcode/logbook-mcp 0.4.1 → 0.4.3
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 +263 -116
- package/dist/{cli-AMORGACN.js → cli-CFXWDXOU.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{server-7D4ICBXI.js → server-3MQWBZQC.js} +13 -1
- package/package.json +19 -3
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<h1 align="center">@cocaxcode/logbook-mcp</h1>
|
|
3
3
|
<p align="center">
|
|
4
4
|
<strong>Your developer logbook, always one sentence away.</strong><br/>
|
|
5
|
-
Notes · TODOs · Code TODOs · Full-text search · Zero config
|
|
5
|
+
Notes · TODOs · Reminders · Code TODOs · Full-text search · Zero config
|
|
6
6
|
</p>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License" /></a>
|
|
13
13
|
<img src="https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node" />
|
|
14
14
|
<img src="https://img.shields.io/badge/tools-9-blueviolet?style=flat-square" alt="9 tools" />
|
|
15
|
-
<img src="https://img.shields.io/badge/tests-
|
|
15
|
+
<img src="https://img.shields.io/badge/tests-63-brightgreen?style=flat-square" alt="63 tests" />
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
<p align="center">
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
<a href="#installation">Installation</a> ·
|
|
21
21
|
<a href="#just-talk-to-it">Usage</a> ·
|
|
22
22
|
<a href="#features">Features</a> ·
|
|
23
|
+
<a href="#reminders">Reminders</a> ·
|
|
23
24
|
<a href="#tool-reference">Tool Reference</a> ·
|
|
24
25
|
<a href="#storage">Storage</a> ·
|
|
25
26
|
<a href="#contributing">Contributing</a>
|
|
@@ -35,16 +36,21 @@ You make decisions every day. Why JWT over sessions? Why Redis over Memcached? W
|
|
|
35
36
|
|
|
36
37
|
Your TODOs live in 5 different places: Jira, sticky notes, code comments, your head, and that Slack message you'll never find again.
|
|
37
38
|
|
|
38
|
-
**logbook-mcp** is a developer logbook that lives inside your AI assistant. Notes, TODOs, and code TODOs — all queryable with natural language, without ever leaving your workflow.
|
|
39
|
+
**logbook-mcp** is a developer logbook that lives inside your AI assistant. Notes, TODOs, reminders, and code TODOs — all queryable with natural language, without ever leaving your workflow.
|
|
39
40
|
|
|
40
41
|
### Why logbook-mcp?
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
| Feature | Benefit |
|
|
44
|
+
|---------|---------|
|
|
45
|
+
| **Zero context switching** | Don't leave Claude/Cursor to open another app |
|
|
46
|
+
| **Zero config** | Auto-detects your project, creates the DB on first use |
|
|
47
|
+
| **Zero AI costs** | Returns raw data, your AI client does the formatting |
|
|
48
|
+
| **Captures what git doesn't** | Decisions, ideas, blockers, reminders, and context |
|
|
49
|
+
| **Code TODOs included** | Scans your source for `TODO/FIXME/HACK/BUG` automatically |
|
|
50
|
+
| **Auto-sync code TODOs** | Detects when code TODOs disappear (you fixed them) |
|
|
51
|
+
| **Full-text search** | FTS5 powered, finds anything instantly |
|
|
52
|
+
| **Recurring reminders** | Daily, weekly, monthly patterns with auto-ack |
|
|
53
|
+
| **Multi-project** | One database, all your projects, query per-project or globally |
|
|
48
54
|
|
|
49
55
|
---
|
|
50
56
|
|
|
@@ -151,31 +157,42 @@ Add to `.gemini/settings.json`:
|
|
|
151
157
|
|
|
152
158
|
No commands to memorize. Just tell your AI what you need:
|
|
153
159
|
|
|
154
|
-
### Notes — capture
|
|
160
|
+
### Notes — capture what matters
|
|
155
161
|
|
|
156
162
|
| You say | What happens |
|
|
157
163
|
|---------|-------------|
|
|
158
|
-
| *"I decided to use JWT instead of sessions for scalability"* |
|
|
159
|
-
| *"Note: Redis doesn't support nested JSON queries natively"* |
|
|
160
|
-
| *"The CI
|
|
164
|
+
| *"I decided to use JWT instead of sessions for scalability"* | Saved as **decision** — retrievable months from now |
|
|
165
|
+
| *"Note: Redis doesn't support nested JSON queries natively"* | Saved as a note for future reference |
|
|
166
|
+
| *"The CI is failing due to a timeout in integration tests"* | Captured as **blocker** — shows up in standups |
|
|
167
|
+
| *"We could add WebSocket support for real-time updates"* | Saved as **idea** — won't get lost in Slack |
|
|
161
168
|
|
|
162
169
|
### TODOs — your checklist, always at hand
|
|
163
170
|
|
|
164
171
|
| You say | What happens |
|
|
165
172
|
|---------|-------------|
|
|
166
|
-
| *"TODO: implement email validation
|
|
167
|
-
| *"Add these
|
|
168
|
-
| *"Mark 5 and 8 as done"* |
|
|
169
|
-
| *"What's pending?"* |
|
|
173
|
+
| *"TODO: implement email validation"* | Created with topic **feature** (AI infers it) |
|
|
174
|
+
| *"Add these: fix token refresh. update deps. add rate limiting"* | **3 TODOs** created at once, each categorized |
|
|
175
|
+
| *"Mark 5 and 8 as done"* | Both marked as completed |
|
|
176
|
+
| *"What's pending?"* | All TODOs grouped by topic, including code TODOs |
|
|
177
|
+
| *"What's pending across all projects?"* | Global view of everything |
|
|
170
178
|
|
|
171
|
-
###
|
|
179
|
+
### Reminders — never forget
|
|
172
180
|
|
|
173
181
|
| You say | What happens |
|
|
174
182
|
|---------|-------------|
|
|
175
|
-
| *"
|
|
176
|
-
| *"
|
|
177
|
-
| *"
|
|
178
|
-
| *"
|
|
183
|
+
| *"Remind me tomorrow to deploy"* | One-time reminder for tomorrow |
|
|
184
|
+
| *"Remind me every Tuesday to review PRs"* | Recurring weekly reminder |
|
|
185
|
+
| *"Remind me the 1st of each month to renew certificates"* | Monthly recurring reminder |
|
|
186
|
+
| *"Remind me on weekdays to check the CI"* | Monday to Friday reminder |
|
|
187
|
+
|
|
188
|
+
### Search — find anything, instantly
|
|
189
|
+
|
|
190
|
+
| You say | What happens |
|
|
191
|
+
|---------|-------------|
|
|
192
|
+
| *"What did I do yesterday?"* | Notes + completed TODOs from yesterday |
|
|
193
|
+
| *"Search everything about auth"* | FTS5 search across all notes and TODOs |
|
|
194
|
+
| *"Show me all decisions this month"* | Filtered by topic **decision** and date range |
|
|
195
|
+
| *"Why did we choose JWT?"* | Finds the decision note, even months later |
|
|
179
196
|
|
|
180
197
|
---
|
|
181
198
|
|
|
@@ -186,91 +203,254 @@ No commands to memorize. Just tell your AI what you need:
|
|
|
186
203
|
logbook-mcp auto-detects which git project you're in. No setup, no config files:
|
|
187
204
|
|
|
188
205
|
```
|
|
189
|
-
|
|
190
|
-
→
|
|
206
|
+
You're in ~/projects/my-api/
|
|
207
|
+
→ "What's pending?" shows only my-api TODOs
|
|
191
208
|
|
|
192
|
-
|
|
193
|
-
→
|
|
209
|
+
You're in ~/projects/my-frontend/
|
|
210
|
+
→ Same question shows only my-frontend TODOs
|
|
194
211
|
|
|
195
|
-
|
|
212
|
+
You ask "all projects"
|
|
196
213
|
→ Global view across everything
|
|
197
214
|
```
|
|
198
215
|
|
|
199
|
-
###
|
|
216
|
+
### 7 built-in topics
|
|
200
217
|
|
|
201
|
-
|
|
218
|
+
Every note, TODO, and reminder is categorized. The AI infers the topic automatically, or you can specify it:
|
|
202
219
|
|
|
203
|
-
| Topic |
|
|
204
|
-
|
|
205
|
-
| **feature** | New functionality | `feat:` |
|
|
206
|
-
| **fix** | Bug fixes | `fix:` |
|
|
207
|
-
| **chore** | Maintenance,
|
|
208
|
-
| **idea** | Future proposals
|
|
209
|
-
| **decision** | Architecture choices
|
|
210
|
-
| **blocker** | Things blocking
|
|
220
|
+
| Topic | Purpose | Auto-mapped from commits | AI infers from |
|
|
221
|
+
|-------|---------|:------------------------:|----------------|
|
|
222
|
+
| **feature** | New functionality | `feat:` | "implement", "add", "create" |
|
|
223
|
+
| **fix** | Bug fixes | `fix:` | "fix", "bug", "broken" |
|
|
224
|
+
| **chore** | Maintenance, CI/CD, refactoring | `refactor:` `docs:` `ci:` `build:` `test:` | "update", "clean", "refactor" |
|
|
225
|
+
| **idea** | Future proposals | — | "maybe", "could", "explore" |
|
|
226
|
+
| **decision** | Architecture choices | — | "decided", "chose", "going with" |
|
|
227
|
+
| **blocker** | Things blocking progress | — | "blocked", "can't", "waiting" |
|
|
228
|
+
| **reminder** | Time-based reminders | — | Auto-assigned when `remind_at` is set |
|
|
211
229
|
|
|
212
|
-
|
|
230
|
+
Topics are auto-created when the AI uses one that doesn't exist. You can also create custom topics:
|
|
213
231
|
|
|
214
232
|
```
|
|
215
|
-
"Create a topic called 'security'
|
|
216
|
-
→
|
|
233
|
+
"Create a topic called 'security'"
|
|
234
|
+
→ Done. Now you can tag notes and TODOs with 'security'.
|
|
217
235
|
```
|
|
218
236
|
|
|
219
237
|
### TODOs as checklist
|
|
220
238
|
|
|
221
|
-
Manual TODOs with priority levels
|
|
239
|
+
Manual TODOs with priority levels:
|
|
222
240
|
|
|
223
241
|
```
|
|
224
|
-
feature (3)
|
|
242
|
+
📋 feature (3)
|
|
225
243
|
☐ #12 Implement email validation
|
|
226
244
|
☐ #15 [HIGH] Dynamic permissions endpoint
|
|
227
245
|
☑ #9 Google OAuth login (completed Mar 17)
|
|
228
246
|
|
|
229
|
-
fix (1)
|
|
247
|
+
📋 fix (1)
|
|
230
248
|
☐ #8 [URGENT] Token doesn't refresh
|
|
231
249
|
|
|
232
|
-
blocker (1)
|
|
250
|
+
📋 blocker (1)
|
|
233
251
|
☐ #20 Resolve CI timeout
|
|
234
252
|
```
|
|
235
253
|
|
|
236
|
-
### Code TODOs
|
|
254
|
+
### Code TODOs — live from your source
|
|
237
255
|
|
|
238
|
-
Your `TODO`, `FIXME`, `HACK`, and `BUG` comments
|
|
256
|
+
Your `TODO`, `FIXME`, `HACK`, and `BUG` comments appear alongside manual TODOs:
|
|
239
257
|
|
|
240
258
|
```
|
|
241
|
-
feature (2)
|
|
259
|
+
📋 feature (2)
|
|
242
260
|
☐ #12 [manual] Implement email validation
|
|
243
261
|
📄 [code] TODO: add OAuth support — src/auth/service.ts:45
|
|
244
262
|
|
|
245
|
-
fix (
|
|
263
|
+
📋 fix (3)
|
|
246
264
|
☐ #8 [manual] Token doesn't refresh
|
|
247
265
|
📄 [code] FIXME: handle null case — src/users/controller.ts:78
|
|
248
266
|
📄 [code] BUG: race condition — src/chat/gateway.ts:112
|
|
249
267
|
|
|
250
|
-
chore (1)
|
|
268
|
+
📋 chore (1)
|
|
251
269
|
📄 [code] HACK: proxy workaround — src/middleware/cors.ts:23
|
|
252
270
|
```
|
|
253
271
|
|
|
254
|
-
|
|
272
|
+
**Auto-sync:** When you fix a code TODO and it disappears from the source, logbook detects it and marks it as resolved. No action needed — it happens automatically when you list your TODOs.
|
|
273
|
+
|
|
274
|
+
### Batch operations
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
"Add: validate email. fix token. update deps" → 3 TODOs created
|
|
278
|
+
"Mark 5, 8, and 12 as done" → 3 TODOs completed
|
|
279
|
+
"Delete TODOs 3 and 7" → 2 TODOs removed
|
|
280
|
+
```
|
|
255
281
|
|
|
256
282
|
### Full-text search (FTS5)
|
|
257
283
|
|
|
258
|
-
|
|
284
|
+
Instant search across all notes and TODOs, powered by SQLite FTS5:
|
|
259
285
|
|
|
260
286
|
```
|
|
261
287
|
"Search auth"
|
|
262
288
|
→ Finds notes about JWT decisions, TODOs about auth endpoints,
|
|
263
|
-
and anything mentioning "auth" across all projects
|
|
289
|
+
and anything mentioning "auth" — across all projects if you want
|
|
264
290
|
```
|
|
265
291
|
|
|
266
|
-
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Reminders
|
|
267
295
|
|
|
268
|
-
|
|
296
|
+
logbook-mcp supports both one-time and recurring reminders.
|
|
297
|
+
|
|
298
|
+
### One-time reminders
|
|
269
299
|
|
|
270
300
|
```
|
|
271
|
-
"
|
|
272
|
-
|
|
273
|
-
|
|
301
|
+
"Remind me tomorrow to deploy to production"
|
|
302
|
+
→ remind_at: "2026-03-20", topic: "reminder"
|
|
303
|
+
|
|
304
|
+
"Remind me on March 25 to review the quarterly report"
|
|
305
|
+
→ remind_at: "2026-03-25", topic: "reminder"
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Recurring reminders
|
|
309
|
+
|
|
310
|
+
| You say | Pattern | When it fires |
|
|
311
|
+
|---------|---------|---------------|
|
|
312
|
+
| *"Remind me every day to check CI"* | `daily` | Every day |
|
|
313
|
+
| *"Remind me on weekdays to do standup"* | `weekdays` | Monday to Friday |
|
|
314
|
+
| *"Remind me every Tuesday to review PRs"* | `weekly:2` | Every Tuesday |
|
|
315
|
+
| *"Remind me Mondays and Wednesdays to sync"* | `weekly:1,3` | Mon + Wed |
|
|
316
|
+
| *"Remind me the 1st of each month to renew certs"* | `monthly:1` | 1st of month |
|
|
317
|
+
| *"Remind me the 1st and 15th to check billing"* | `monthly:1,15` | 1st + 15th |
|
|
318
|
+
|
|
319
|
+
### How reminders behave
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
Tuesday 9:00 — you open Claude
|
|
323
|
+
⏰ Reminder: review PRs (weekly, every Tuesday)
|
|
324
|
+
→ Shows once, auto-acknowledged for today
|
|
325
|
+
|
|
326
|
+
Tuesday 14:00 — you open Claude again
|
|
327
|
+
→ Nothing. Already shown today.
|
|
328
|
+
|
|
329
|
+
Wednesday — you open Claude
|
|
330
|
+
→ Nothing. Not a Tuesday.
|
|
331
|
+
|
|
332
|
+
Next Tuesday — you open Claude
|
|
333
|
+
→ ⏰ Reminder: review PRs (shows again)
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**To stop a recurring reminder permanently:** delete it with `logbook_todo_rm`.
|
|
337
|
+
|
|
338
|
+
### Overdue reminders
|
|
339
|
+
|
|
340
|
+
One-time reminders that weren't completed show as overdue:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
⏰ Reminders for today (Mar 19)
|
|
344
|
+
my-api: deploy to production
|
|
345
|
+
|
|
346
|
+
⚠️ Overdue
|
|
347
|
+
my-frontend: fix dark mode (was due Mar 17 — 2 days late)
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### MCP Resource: automatic reminder delivery
|
|
351
|
+
|
|
352
|
+
logbook-mcp exposes a **Resource** (`logbook://reminders`) that MCP clients can load automatically when starting a session. This means your AI tells you about pending reminders **without you asking**.
|
|
353
|
+
|
|
354
|
+
#### Resource compatibility
|
|
355
|
+
|
|
356
|
+
| Client | Resources support | Reminders behavior |
|
|
357
|
+
|--------|:-----------------:|-------------------|
|
|
358
|
+
| **Claude Code** | ✅ Yes | Reminders shown automatically on session start |
|
|
359
|
+
| **Claude Desktop** | ✅ Yes | Reminders shown automatically on session start |
|
|
360
|
+
| **Cursor** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
|
|
361
|
+
| **Windsurf** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
|
|
362
|
+
| **VS Code + Copilot** | ⚠️ Partial | Depends on MCP extension used |
|
|
363
|
+
| **Codex CLI** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
|
|
364
|
+
| **Gemini CLI** | ❌ No | Ask *"any reminders?"* — works via `logbook_todo_list` |
|
|
365
|
+
|
|
366
|
+
> **Important:** Even without Resource support, reminders always work. You just need to ask for them instead of getting them automatically. All 9 tools work identically across all MCP clients.
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## A Day With logbook-mcp
|
|
371
|
+
|
|
372
|
+
Here's what a typical day looks like:
|
|
373
|
+
|
|
374
|
+
### Morning — start your day
|
|
375
|
+
|
|
376
|
+
```
|
|
377
|
+
You: "What did I do yesterday?"
|
|
378
|
+
|
|
379
|
+
Claude: Yesterday on my-api:
|
|
380
|
+
📝 [decision] Chose sliding window for rate limiting over fixed window
|
|
381
|
+
☑ #8 Fixed token refresh bug
|
|
382
|
+
☑ #12 Implemented email validation
|
|
383
|
+
📄 [resolved] FIXME in src/users/controller.ts (handle null case)
|
|
384
|
+
|
|
385
|
+
You: "What's pending?"
|
|
386
|
+
|
|
387
|
+
Claude: my-api — 4 pending:
|
|
388
|
+
📋 feature
|
|
389
|
+
☐ #15 [HIGH] Dynamic permissions endpoint
|
|
390
|
+
📄 TODO: add OAuth — src/auth/service.ts:45
|
|
391
|
+
📋 chore
|
|
392
|
+
☐ #21 Update dependencies
|
|
393
|
+
📋 reminder
|
|
394
|
+
⏰ #25 Review PRs (recurring: every Tuesday)
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Working — capture as you go
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
You: "I decided to use Redis for session cache because
|
|
401
|
+
Memcached doesn't support key expiration callbacks"
|
|
402
|
+
|
|
403
|
+
Claude: ✅ Note saved [decision] in my-api
|
|
404
|
+
|
|
405
|
+
You: "TODO: add rate limit headers to API responses.
|
|
406
|
+
TODO: document the new permissions endpoint.
|
|
407
|
+
TODO: fix CORS for mobile app"
|
|
408
|
+
|
|
409
|
+
Claude: ✅ 3 TODOs created:
|
|
410
|
+
☐ #26 [feature] Add rate limit headers
|
|
411
|
+
☐ #27 [chore] Document permissions endpoint
|
|
412
|
+
☐ #28 [fix] Fix CORS for mobile app
|
|
413
|
+
|
|
414
|
+
You: "Remind me Friday to deploy the permissions update"
|
|
415
|
+
|
|
416
|
+
Claude: ✅ Reminder set for 2026-03-21 [reminder]
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### End of day — wrap up
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
You: "Mark 15, 26, and 28 as done"
|
|
423
|
+
|
|
424
|
+
Claude: ✅ 3 TODOs completed
|
|
425
|
+
|
|
426
|
+
You: "What did I do today?"
|
|
427
|
+
|
|
428
|
+
Claude: Today on my-api:
|
|
429
|
+
📝 [decision] Redis for session cache (expiration callbacks)
|
|
430
|
+
☑ #15 Dynamic permissions endpoint
|
|
431
|
+
☑ #26 Rate limit headers
|
|
432
|
+
☑ #28 CORS fix for mobile
|
|
433
|
+
📄 [resolved] HACK in src/middleware/cors.ts (removed workaround)
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Weekly review — see the big picture
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
You: "Summary of this week across all projects"
|
|
440
|
+
|
|
441
|
+
Claude:
|
|
442
|
+
my-api: 3 notes, 8 TODOs completed, 4 pending
|
|
443
|
+
my-frontend: 1 note, 3 TODOs completed, 2 pending
|
|
444
|
+
my-docs: 0 notes, 1 TODO completed, 0 pending
|
|
445
|
+
|
|
446
|
+
You: "Search everything about auth across all projects"
|
|
447
|
+
|
|
448
|
+
Claude: 12 results:
|
|
449
|
+
[note] my-api — Decided JWT over sessions (Mar 12)
|
|
450
|
+
[note] my-api — Redis for session cache (Mar 19)
|
|
451
|
+
[todo] my-api — ☐ Add OAuth support
|
|
452
|
+
[todo] my-frontend — ☑ Auth redirect fix (completed Mar 15)
|
|
453
|
+
...
|
|
274
454
|
```
|
|
275
455
|
|
|
276
456
|
---
|
|
@@ -283,12 +463,13 @@ Create, complete, or delete multiple items at once:
|
|
|
283
463
|
| **Notes** | `logbook_note` | 1 |
|
|
284
464
|
| **TODOs** | `logbook_todo_add` `logbook_todo_list` `logbook_todo_done` `logbook_todo_edit` `logbook_todo_rm` | 5 |
|
|
285
465
|
| **Config** | `logbook_topics` | 1 |
|
|
286
|
-
| **
|
|
466
|
+
| **Resource** | `logbook://reminders` | — |
|
|
467
|
+
| **Total** | | **9 tools + 1 resource** |
|
|
287
468
|
|
|
288
469
|
<details>
|
|
289
470
|
<summary><strong>logbook_log</strong> — Activity for a period</summary>
|
|
290
471
|
|
|
291
|
-
Shows notes and
|
|
472
|
+
Shows notes, completed TODOs, and resolved code TODOs for a time range.
|
|
292
473
|
|
|
293
474
|
| Param | Type | Default | Description |
|
|
294
475
|
|-------|------|---------|-------------|
|
|
@@ -305,8 +486,8 @@ Shows notes and completed TODOs for a time range.
|
|
|
305
486
|
|
|
306
487
|
| Param | Type | Required | Description |
|
|
307
488
|
|-------|------|----------|-------------|
|
|
308
|
-
| `content` | string | Yes | Note content |
|
|
309
|
-
| `topic` | string | No | Topic name
|
|
489
|
+
| `content` | string | Yes | Note content (max 5000 chars) |
|
|
490
|
+
| `topic` | string | No | Topic name — AI infers it, or auto-created if new |
|
|
310
491
|
</details>
|
|
311
492
|
|
|
312
493
|
<details>
|
|
@@ -314,10 +495,12 @@ Shows notes and completed TODOs for a time range.
|
|
|
314
495
|
|
|
315
496
|
| Param | Type | Description |
|
|
316
497
|
|-------|------|-------------|
|
|
317
|
-
| `content` | string | Single TODO content |
|
|
318
|
-
| `topic` | string | Topic
|
|
498
|
+
| `content` | string | Single TODO content (max 2000 chars) |
|
|
499
|
+
| `topic` | string | Topic — auto-inferred or auto-created |
|
|
319
500
|
| `priority` | `low` `normal` `high` `urgent` | Priority (default: normal) |
|
|
320
|
-
| `
|
|
501
|
+
| `remind_at` | `YYYY-MM-DD` | One-time reminder date |
|
|
502
|
+
| `remind_pattern` | string | Recurring: `daily`, `weekdays`, `weekly:N`, `monthly:N` |
|
|
503
|
+
| `items` | array | Multiple TODOs: `[{content, topic?, priority?, remind_at?, remind_pattern?}]` (max 50) |
|
|
321
504
|
</details>
|
|
322
505
|
|
|
323
506
|
<details>
|
|
@@ -340,6 +523,8 @@ Shows notes and completed TODOs for a time range.
|
|
|
340
523
|
|-------|------|-------------|
|
|
341
524
|
| `ids` | number or number[] | ID(s) to mark |
|
|
342
525
|
| `undo` | boolean | If true, sets back to pending (default: false) |
|
|
526
|
+
|
|
527
|
+
For recurring reminders, "done" means acknowledged for today. It will reappear on the next matching day.
|
|
343
528
|
</details>
|
|
344
529
|
|
|
345
530
|
<details>
|
|
@@ -349,7 +534,7 @@ Shows notes and completed TODOs for a time range.
|
|
|
349
534
|
|-------|------|-------------|
|
|
350
535
|
| `id` | number | TODO ID to edit |
|
|
351
536
|
| `content` | string | New content |
|
|
352
|
-
| `topic` | string | New topic |
|
|
537
|
+
| `topic` | string | New topic (auto-created if new) |
|
|
353
538
|
| `priority` | `low` `normal` `high` `urgent` | New priority |
|
|
354
539
|
</details>
|
|
355
540
|
|
|
@@ -358,7 +543,9 @@ Shows notes and completed TODOs for a time range.
|
|
|
358
543
|
|
|
359
544
|
| Param | Type | Description |
|
|
360
545
|
|-------|------|-------------|
|
|
361
|
-
| `ids` | number or number[] | ID(s) to delete |
|
|
546
|
+
| `ids` | number or number[] | ID(s) to delete permanently |
|
|
547
|
+
|
|
548
|
+
Use this to stop recurring reminders permanently.
|
|
362
549
|
</details>
|
|
363
550
|
|
|
364
551
|
<details>
|
|
@@ -366,7 +553,7 @@ Shows notes and completed TODOs for a time range.
|
|
|
366
553
|
|
|
367
554
|
| Param | Type | Default | Description |
|
|
368
555
|
|-------|------|---------|-------------|
|
|
369
|
-
| `query` | string | — | Search text (required) |
|
|
556
|
+
| `query` | string | — | Search text (required, max 500 chars) |
|
|
370
557
|
| `type` | `all` `notes` `todos` | `all` | Search scope |
|
|
371
558
|
| `topic` | string | — | Filter by topic |
|
|
372
559
|
| `scope` | `project` `global` | `project` | Project or global |
|
|
@@ -379,8 +566,8 @@ Shows notes and completed TODOs for a time range.
|
|
|
379
566
|
| Param | Type | Default | Description |
|
|
380
567
|
|-------|------|---------|-------------|
|
|
381
568
|
| `action` | `list` `add` | `list` | List or create topics |
|
|
382
|
-
| `name` | string | — | New topic name (
|
|
383
|
-
| `description` | string | — | Topic description (
|
|
569
|
+
| `name` | string | — | New topic name (lowercase, `[a-z0-9-]` only, max 50 chars) |
|
|
570
|
+
| `description` | string | — | Topic description (max 200 chars) |
|
|
384
571
|
</details>
|
|
385
572
|
|
|
386
573
|
---
|
|
@@ -391,56 +578,14 @@ All data lives in a single SQLite database:
|
|
|
391
578
|
|
|
392
579
|
```
|
|
393
580
|
~/.logbook/
|
|
394
|
-
└── logbook.db # All projects, notes, TODOs in one file
|
|
581
|
+
└── logbook.db # All projects, notes, TODOs, reminders in one file
|
|
395
582
|
```
|
|
396
583
|
|
|
397
584
|
- **WAL mode** for concurrent reads
|
|
398
585
|
- **FTS5** virtual tables for instant full-text search
|
|
399
586
|
- **Triggers** keep search indexes in sync automatically
|
|
400
587
|
- **Foreign keys** with `ON DELETE SET NULL` — delete a project, notes remain
|
|
401
|
-
|
|
402
|
-
Add to your global `.gitignore`:
|
|
403
|
-
```
|
|
404
|
-
.logbook/
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
---
|
|
408
|
-
|
|
409
|
-
## How It Improves Your Productivity
|
|
410
|
-
|
|
411
|
-
### Morning standup in 10 seconds
|
|
412
|
-
|
|
413
|
-
Instead of trying to remember what you did yesterday:
|
|
414
|
-
|
|
415
|
-
```
|
|
416
|
-
"What did I do yesterday?"
|
|
417
|
-
→ Complete summary: notes, decisions, completed TODOs
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
### Never lose a decision again
|
|
421
|
-
|
|
422
|
-
```
|
|
423
|
-
"Why did we choose JWT?"
|
|
424
|
-
→ Search finds your note: "Decided JWT over sessions for horizontal scalability"
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
### One place for all TODOs
|
|
428
|
-
|
|
429
|
-
No more scattered checklists. Manual TODOs + code TODOs + priorities, all in one view:
|
|
430
|
-
|
|
431
|
-
```
|
|
432
|
-
"What's pending?"
|
|
433
|
-
→ Grouped by topic, with priority flags, across code and manual items
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
### Context that survives across sessions
|
|
437
|
-
|
|
438
|
-
Your AI assistant forgets everything between sessions. Your logbook doesn't:
|
|
439
|
-
|
|
440
|
-
```
|
|
441
|
-
"Search everything about the auth migration"
|
|
442
|
-
→ All notes, decisions, and TODOs related to auth — from any date
|
|
443
|
-
```
|
|
588
|
+
- **Code TODO snapshots** — tracks which code TODOs existed, detects when they're resolved
|
|
444
589
|
|
|
445
590
|
---
|
|
446
591
|
|
|
@@ -449,16 +594,18 @@ Your AI assistant forgets everything between sessions. Your logbook doesn't:
|
|
|
449
594
|
```
|
|
450
595
|
src/
|
|
451
596
|
├── index.ts # Entry: --mcp → server, else CLI
|
|
452
|
-
├── server.ts # createServer()
|
|
597
|
+
├── server.ts # createServer() — 9 tools + 1 resource
|
|
453
598
|
├── cli.ts # CLI (help, version)
|
|
454
599
|
├── types.ts # Shared interfaces
|
|
455
600
|
├── db/
|
|
456
601
|
│ ├── connection.ts # getDb() singleton → ~/.logbook/logbook.db
|
|
457
602
|
│ ├── schema.ts # Tables + FTS5 + triggers + topic seed
|
|
458
|
-
│ └── queries.ts # Typed query functions
|
|
603
|
+
│ └── queries.ts # Typed query functions + reminder logic
|
|
459
604
|
├── git/
|
|
460
605
|
│ ├── detect-repo.ts # Auto-detect project via git rev-parse
|
|
461
606
|
│ └── code-todos.ts # Scan TODO/FIXME/HACK/BUG via git grep
|
|
607
|
+
├── resources/
|
|
608
|
+
│ └── reminders.ts # MCP Resource: logbook://reminders
|
|
462
609
|
└── tools/ # 9 MCP tools (one file each)
|
|
463
610
|
```
|
|
464
611
|
|
|
@@ -472,7 +619,7 @@ src/
|
|
|
472
619
|
git clone https://github.com/cocaxcode/logbook-mcp.git
|
|
473
620
|
cd logbook-mcp
|
|
474
621
|
npm install
|
|
475
|
-
npm test #
|
|
622
|
+
npm test # 60 tests
|
|
476
623
|
npm run build # Build with tsup
|
|
477
624
|
npm run typecheck # TypeScript check
|
|
478
625
|
npm run inspector # Test with MCP Inspector
|
package/dist/index.js
CHANGED
|
@@ -6,13 +6,13 @@ async function main() {
|
|
|
6
6
|
const hasMcpFlag = argv.includes("--mcp");
|
|
7
7
|
if (hasMcpFlag) {
|
|
8
8
|
const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
|
|
9
|
-
const { createServer } = await import("./server-
|
|
9
|
+
const { createServer } = await import("./server-3MQWBZQC.js");
|
|
10
10
|
const server = createServer();
|
|
11
11
|
const transport = new StdioServerTransport();
|
|
12
12
|
await server.connect(transport);
|
|
13
13
|
console.error("logbook-mcp server running on stdio");
|
|
14
14
|
} else {
|
|
15
|
-
const { runCli } = await import("./cli-
|
|
15
|
+
const { runCli } = await import("./cli-CFXWDXOU.js");
|
|
16
16
|
await runCli(argv);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -111,6 +111,12 @@ CREATE TRIGGER IF NOT EXISTS todos_au AFTER UPDATE ON todos BEGIN
|
|
|
111
111
|
INSERT INTO todos_fts(rowid, content) VALUES (new.id, new.content);
|
|
112
112
|
END;
|
|
113
113
|
`;
|
|
114
|
+
var MIGRATIONS_SQL = `
|
|
115
|
+
-- Add reminder columns to existing todos tables (safe to run multiple times)
|
|
116
|
+
ALTER TABLE todos ADD COLUMN remind_at TEXT;
|
|
117
|
+
ALTER TABLE todos ADD COLUMN remind_pattern TEXT;
|
|
118
|
+
ALTER TABLE todos ADD COLUMN remind_last_done TEXT;
|
|
119
|
+
`;
|
|
114
120
|
var SEED_TOPICS_SQL = `
|
|
115
121
|
INSERT OR IGNORE INTO topics (name, description, commit_prefix, is_custom) VALUES
|
|
116
122
|
('feature', 'Funcionalidad nueva', 'feat', 0),
|
|
@@ -137,6 +143,12 @@ function getDb(dbPath) {
|
|
|
137
143
|
db.pragma("journal_mode = WAL");
|
|
138
144
|
db.pragma("foreign_keys = ON");
|
|
139
145
|
db.exec(SCHEMA_SQL);
|
|
146
|
+
for (const stmt of MIGRATIONS_SQL.split(";").map((s) => s.trim()).filter(Boolean)) {
|
|
147
|
+
try {
|
|
148
|
+
db.exec(stmt);
|
|
149
|
+
} catch {
|
|
150
|
+
}
|
|
151
|
+
}
|
|
140
152
|
db.exec(SEED_TOPICS_SQL);
|
|
141
153
|
return db;
|
|
142
154
|
}
|
|
@@ -1121,7 +1133,7 @@ function registerRemindersResource(server) {
|
|
|
1121
1133
|
}
|
|
1122
1134
|
|
|
1123
1135
|
// src/server.ts
|
|
1124
|
-
var VERSION = true ? "0.4.
|
|
1136
|
+
var VERSION = true ? "0.4.3" : "0.0.0";
|
|
1125
1137
|
function createServer() {
|
|
1126
1138
|
const server = new McpServer({
|
|
1127
1139
|
name: "logbook-mcp",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocaxcode/logbook-mcp",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "MCP server
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "Developer logbook MCP server. Notes, TODOs, reminders, code TODOs with full-text search. Zero config, auto-detects projects, SQLite-powered. Works with Claude, Cursor, Windsurf, Copilot, Gemini, Codex.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"logbook-mcp": "dist/index.js"
|
|
@@ -28,12 +28,28 @@
|
|
|
28
28
|
"keywords": [
|
|
29
29
|
"mcp",
|
|
30
30
|
"mcp-server",
|
|
31
|
+
"model-context-protocol",
|
|
31
32
|
"logbook",
|
|
32
33
|
"developer-tools",
|
|
33
34
|
"notes",
|
|
34
35
|
"todos",
|
|
36
|
+
"reminders",
|
|
35
37
|
"checklist",
|
|
36
|
-
"
|
|
38
|
+
"code-todos",
|
|
39
|
+
"full-text-search",
|
|
40
|
+
"fts5",
|
|
41
|
+
"sqlite",
|
|
42
|
+
"productivity",
|
|
43
|
+
"project-management",
|
|
44
|
+
"claude",
|
|
45
|
+
"cursor",
|
|
46
|
+
"windsurf",
|
|
47
|
+
"copilot",
|
|
48
|
+
"gemini",
|
|
49
|
+
"codex",
|
|
50
|
+
"cline",
|
|
51
|
+
"aider",
|
|
52
|
+
"opencode"
|
|
37
53
|
],
|
|
38
54
|
"author": "cocaxcode",
|
|
39
55
|
"license": "MIT",
|