@iflow-mcp/ericbuess-limitless-ai-mcp-server 0.0.7

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +538 -0
  3. package/dist/core/cache.d.ts +25 -0
  4. package/dist/core/cache.d.ts.map +1 -0
  5. package/dist/core/cache.js +151 -0
  6. package/dist/core/cache.js.map +1 -0
  7. package/dist/core/limitless-client.d.ts +24 -0
  8. package/dist/core/limitless-client.d.ts.map +1 -0
  9. package/dist/core/limitless-client.js +238 -0
  10. package/dist/core/limitless-client.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +121 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/prompts/handlers.d.ts +12 -0
  16. package/dist/prompts/handlers.d.ts.map +1 -0
  17. package/dist/prompts/handlers.js +57 -0
  18. package/dist/prompts/handlers.js.map +1 -0
  19. package/dist/prompts/templates.d.ts +10 -0
  20. package/dist/prompts/templates.d.ts.map +1 -0
  21. package/dist/prompts/templates.js +210 -0
  22. package/dist/prompts/templates.js.map +1 -0
  23. package/dist/resources/handlers.d.ts +27 -0
  24. package/dist/resources/handlers.d.ts.map +1 -0
  25. package/dist/resources/handlers.js +102 -0
  26. package/dist/resources/handlers.js.map +1 -0
  27. package/dist/resources/manager.d.ts +29 -0
  28. package/dist/resources/manager.d.ts.map +1 -0
  29. package/dist/resources/manager.js +134 -0
  30. package/dist/resources/manager.js.map +1 -0
  31. package/dist/sampling/handlers.d.ts +18 -0
  32. package/dist/sampling/handlers.d.ts.map +1 -0
  33. package/dist/sampling/handlers.js +231 -0
  34. package/dist/sampling/handlers.js.map +1 -0
  35. package/dist/sampling/templates.d.ts +19 -0
  36. package/dist/sampling/templates.d.ts.map +1 -0
  37. package/dist/sampling/templates.js +64 -0
  38. package/dist/sampling/templates.js.map +1 -0
  39. package/dist/tools/definitions.d.ts +3 -0
  40. package/dist/tools/definitions.d.ts.map +1 -0
  41. package/dist/tools/definitions.js +194 -0
  42. package/dist/tools/definitions.js.map +1 -0
  43. package/dist/tools/handlers.d.ts +13 -0
  44. package/dist/tools/handlers.d.ts.map +1 -0
  45. package/dist/tools/handlers.js +136 -0
  46. package/dist/tools/handlers.js.map +1 -0
  47. package/dist/tools/schemas.d.ts +116 -0
  48. package/dist/tools/schemas.d.ts.map +1 -0
  49. package/dist/tools/schemas.js +83 -0
  50. package/dist/tools/schemas.js.map +1 -0
  51. package/dist/types/cache.d.ts +27 -0
  52. package/dist/types/cache.d.ts.map +1 -0
  53. package/dist/types/cache.js +3 -0
  54. package/dist/types/cache.js.map +1 -0
  55. package/dist/types/limitless.d.ts +54 -0
  56. package/dist/types/limitless.d.ts.map +1 -0
  57. package/dist/types/limitless.js +3 -0
  58. package/dist/types/limitless.js.map +1 -0
  59. package/dist/types/mcp.d.ts +103 -0
  60. package/dist/types/mcp.d.ts.map +1 -0
  61. package/dist/types/mcp.js +3 -0
  62. package/dist/types/mcp.js.map +1 -0
  63. package/dist/utils/date.d.ts +6 -0
  64. package/dist/utils/date.d.ts.map +1 -0
  65. package/dist/utils/date.js +48 -0
  66. package/dist/utils/date.js.map +1 -0
  67. package/dist/utils/format.d.ts +8 -0
  68. package/dist/utils/format.d.ts.map +1 -0
  69. package/dist/utils/format.js +90 -0
  70. package/dist/utils/format.js.map +1 -0
  71. package/dist/utils/logger.d.ts +20 -0
  72. package/dist/utils/logger.d.ts.map +1 -0
  73. package/dist/utils/logger.js +57 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/dist/utils/retry.d.ts +10 -0
  76. package/dist/utils/retry.d.ts.map +1 -0
  77. package/dist/utils/retry.js +38 -0
  78. package/dist/utils/retry.js.map +1 -0
  79. package/package.json +84 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Eric Buess
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,538 @@
1
+ # Limitless AI MCP Server
2
+
3
+ [![Version](https://img.shields.io/badge/version-0.0.1-blue.svg)](https://github.com/ericbuess/limitless-ai-mcp-server)
4
+ [![Status](https://img.shields.io/badge/status-beta-orange.svg)](https://github.com/ericbuess/limitless-ai-mcp-server)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![codecov](https://codecov.io/gh/ericbuess/limitless-ai-mcp-server/branch/main/graph/badge.svg)](https://codecov.io/gh/ericbuess/limitless-ai-mcp-server)
7
+
8
+ An advanced Model Context Protocol (MCP) server that enables AI assistants to interact with Limitless AI Pendant recordings. This server provides a seamless bridge between your AI tools and Limitless API, allowing you to extract insights, search through recordings, and analyze your Pendant data.
9
+
10
+ > ⚠️ **Beta Release**: This is an early release (v0.0.1). While core features are implemented and tested, we need community feedback to validate all functionality. Please [report any issues](https://github.com/ericbuess/limitless-ai-mcp-server/issues)!
11
+
12
+ ## 🌟 Features
13
+
14
+ ### Core Capabilities
15
+
16
+ - **Full Limitless API Integration**: Access all your Pendant recordings programmatically
17
+ - **Advanced Search**: Search through your recordings with keyword matching
18
+ - **Flexible Querying**: List recordings by date, date range, or get recent recordings
19
+ - **Rich Content Access**: Retrieve markdown content, headings, and metadata
20
+ - **High Performance**: Intelligent caching with LRU eviction and TTL support
21
+ - **Robust Error Handling**: Built-in retry logic and timeout management
22
+ - **Type Safety**: Full TypeScript support with comprehensive type definitions
23
+
24
+ ### MCP Protocol Implementation
25
+
26
+ - **🔧 Tools**: 5 specialized tools for searching and retrieving recordings
27
+ - **📁 Resources**: Browse recordings as structured resources with URI navigation
28
+ - **📝 Prompts**: Pre-built templates for common analysis tasks
29
+ - **🔍 Sampling**: AI-powered content analysis and summarization
30
+ - **🔎 Discovery**: Automatic capability exposure to MCP clients
31
+
32
+ ## 📋 Requirements
33
+
34
+ - **Node.js 22+**
35
+ - **Limitless Pendant** (Required - API only returns Pendant recordings)
36
+ - **Limitless API Key** (Get from [limitless.ai/developers](https://limitless.ai/developers))
37
+ - **MCP-compatible client** (Claude Desktop, Windsurf, Cursor, etc.)
38
+
39
+ ## 🏃 Quick Start
40
+
41
+ 1. **Get your API key** from [limitless.ai/developers](https://limitless.ai/developers)
42
+ 2. **Clone and build**:
43
+ ```bash
44
+ git clone https://github.com/ericbuess/limitless-ai-mcp-server.git
45
+ cd limitless-ai-mcp-server
46
+ npm install
47
+ npm run build
48
+ ```
49
+ 3. **Configure Claude Code**:
50
+ ```bash
51
+ claude mcp add limitless -s user -e LIMITLESS_API_KEY="your-key" -- node $(pwd)/dist/index.js
52
+ ```
53
+ 4. **Start chatting**: "Show me my recordings from today"
54
+
55
+ ## 🚀 Installation
56
+
57
+ ### Option 1: Install from npm
58
+
59
+ ```bash
60
+ npm install -g limitless-ai-mcp-server
61
+ ```
62
+
63
+ ### Option 2: Install from Source
64
+
65
+ ```bash
66
+ # Clone the repository
67
+ git clone https://github.com/ericbuess/limitless-ai-mcp-server.git
68
+ cd limitless-ai-mcp-server
69
+
70
+ # Install dependencies
71
+ npm install
72
+
73
+ # Build the project
74
+ npm run build
75
+
76
+ # Optional: Link globally
77
+ npm link
78
+ ```
79
+
80
+ ## 🔧 Configuration
81
+
82
+ ### 1. Set up your Limitless API key
83
+
84
+ ```bash
85
+ # Add to your shell profile (.bashrc, .zshrc, etc.)
86
+ export LIMITLESS_API_KEY="your-api-key-here"
87
+
88
+ # Optional: Configure custom settings
89
+ export LIMITLESS_TIMEOUT=120000 # Timeout in milliseconds
90
+ export LIMITLESS_BASE_URL="https://api.limitless.ai/v1" # Custom API endpoint
91
+ export LOG_LEVEL="INFO" # Options: DEBUG, INFO, WARN, ERROR
92
+
93
+ # Optional: Configure caching
94
+ export CACHE_MAX_SIZE=100 # Maximum cached items
95
+ export CACHE_TTL=300000 # Cache lifetime in ms (5 minutes)
96
+ export SEARCH_CACHE_MAX_SIZE=50 # Search cache size
97
+ export SEARCH_CACHE_TTL=180000 # Search cache lifetime (3 minutes)
98
+ ```
99
+
100
+ ### 2. Configure your MCP client
101
+
102
+ #### Claude Code CLI
103
+
104
+ If you're using Claude Code (Anthropic's official CLI), run:
105
+
106
+ ```bash
107
+ # Option 1: Using the command directly (recommended)
108
+ npm install -g limitless-ai-mcp-server
109
+ claude mcp add limitless -s user -e LIMITLESS_API_KEY="your-api-key-here" -- limitless-ai-mcp-server
110
+
111
+ # Option 2: Using node with the full path (most reliable with nvm)
112
+ npm install -g limitless-ai-mcp-server
113
+ # Find where npm installed it:
114
+ npm list -g limitless-ai-mcp-server
115
+ # Then use the direct path (adjust the node version as needed):
116
+ claude mcp add limitless -s user -e LIMITLESS_API_KEY="your-api-key-here" -- node ~/.nvm/versions/node/v22.0.0/lib/node_modules/limitless-ai-mcp-server/dist/index.js
117
+
118
+ # Option 3: Using local installation
119
+ cd /path/to/limitless-ai-mcp-server
120
+ npm install && npm run build
121
+ claude mcp add limitless -s user -e LIMITLESS_API_KEY="your-api-key-here" -- node /path/to/limitless-ai-mcp-server/dist/index.js
122
+
123
+ # Verify it's running
124
+ claude mcp list
125
+
126
+ # Remove if needed
127
+ claude mcp remove limitless -s user
128
+ ```
129
+
130
+ #### Claude Desktop Configuration
131
+
132
+ 1. **Find your Claude Desktop config file**:
133
+
134
+ - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
135
+ - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
136
+ - **Linux**: `~/.config/Claude/claude_desktop_config.json`
137
+
138
+ 2. **Open the file** (create it if it doesn't exist) and add:
139
+
140
+ ```json
141
+ {
142
+ "mcpServers": {
143
+ "limitless": {
144
+ "command": "node",
145
+ "args": ["/path/to/limitless-ai-mcp-server/dist/index.js"],
146
+ "env": {
147
+ "LIMITLESS_API_KEY": "your-api-key-here"
148
+ }
149
+ }
150
+ }
151
+ }
152
+ ```
153
+
154
+ 3. **Replace the placeholders**:
155
+
156
+ - `/path/to/limitless-ai-mcp-server` → Your actual installation path (e.g., `/Users/yourname/limitless-ai-mcp-server`)
157
+ - `your-api-key-here` → Your Limitless API key from [limitless.ai/developers](https://limitless.ai/developers)
158
+
159
+ 4. **Restart Claude Desktop** for the changes to take effect
160
+
161
+ 5. **Verify it's working**: Type "Show me my recent recordings" in Claude
162
+
163
+ #### Other MCP Clients
164
+
165
+ Refer to your client's documentation for MCP server configuration.
166
+
167
+ ## 🛠️ Available Tools
168
+
169
+ ### 1. `limitless_get_lifelog_by_id`
170
+
171
+ Retrieves a single recording by its unique ID.
172
+
173
+ **Parameters:**
174
+
175
+ - `lifelog_id` (required): The unique identifier
176
+ - `includeMarkdown`: Include markdown content (default: true)
177
+ - `includeHeadings`: Include headings (default: true)
178
+
179
+ ### 2. `limitless_list_lifelogs_by_date`
180
+
181
+ Lists all recordings for a specific date.
182
+
183
+ **Parameters:**
184
+
185
+ - `date` (required): Date in YYYY-MM-DD format
186
+ - `limit`: Maximum results (max: 100)
187
+ - `direction`: Sort order ('asc' or 'desc')
188
+ - `timezone`: IANA timezone
189
+ - `includeMarkdown`: Include markdown content
190
+ - `includeHeadings`: Include headings
191
+
192
+ ### 3. `limitless_list_lifelogs_by_range`
193
+
194
+ Lists recordings within a date/time range.
195
+
196
+ **Parameters:**
197
+
198
+ - `start` (required): Start date/time
199
+ - `end` (required): End date/time
200
+ - `limit`: Maximum results
201
+ - `direction`: Sort order
202
+ - `timezone`: IANA timezone
203
+ - `includeMarkdown`: Include markdown content
204
+ - `includeHeadings`: Include headings
205
+
206
+ ### 4. `limitless_list_recent_lifelogs`
207
+
208
+ Lists the most recent recordings.
209
+
210
+ **Parameters:**
211
+
212
+ - `limit`: Number of recordings (default: 10, max: 100)
213
+ - `timezone`: IANA timezone
214
+ - `includeMarkdown`: Include markdown content
215
+ - `includeHeadings`: Include headings
216
+
217
+ ### 5. `limitless_search_lifelogs`
218
+
219
+ Searches for keywords in recent recordings.
220
+
221
+ **Parameters:**
222
+
223
+ - `search_term` (required): Text to search for
224
+ - `fetch_limit`: How many recent logs to search (default: 20, max: 100)
225
+ - `limit`: Maximum results to return
226
+ - `includeMarkdown`: Include markdown content
227
+ - `includeHeadings`: Include headings
228
+
229
+ ## 🔌 MCP Protocol Features
230
+
231
+ This server implements all five core MCP protocol features to provide multiple ways to access and analyze your Limitless data:
232
+
233
+ ### 📁 Resources
234
+
235
+ Browse and access your lifelogs as structured resources. Resources provide a file-system-like interface to your recordings.
236
+
237
+ **Available URIs:**
238
+
239
+ - `lifelog://recent` - Browse recent recordings
240
+ - `lifelog://2024-01-15` - Browse recordings from a specific date
241
+ - `lifelog://2024-01-15/abc123` - Access a specific recording
242
+
243
+ **Usage in Claude:**
244
+
245
+ ```
246
+ "Browse my recent recordings"
247
+ "Show me resources from January 15th"
248
+ "Open lifelog://recent"
249
+ ```
250
+
251
+ ### 📝 Prompts
252
+
253
+ Pre-built prompt templates for common analysis tasks. Each prompt can be customized with arguments.
254
+
255
+ **Available Prompts:**
256
+
257
+ 1. **daily-summary** - Summarize all recordings from a specific day
258
+ - Arguments: `date` (required)
259
+ 2. **action-items** - Extract action items from recordings
260
+ - Arguments: `date` or `dateRange` (optional)
261
+ 3. **key-topics** - Identify main topics discussed
262
+ - Arguments: `date` or `searchTerm` (optional)
263
+ 4. **meeting-notes** - Format recordings as structured meeting notes
264
+ - Arguments: `date` (required)
265
+ 5. **search-insights** - Analyze patterns in search results
266
+ - Arguments: `searchTerm` (required)
267
+
268
+ **Usage in Claude:**
269
+
270
+ ```
271
+ "Use the daily-summary prompt for yesterday"
272
+ "Extract action items from this week"
273
+ "Show me key topics I discussed about the project"
274
+ ```
275
+
276
+ ### 🔍 Sampling
277
+
278
+ Enable AI-powered content analysis of your recordings. The sampling feature allows the AI to process and analyze lifelog content directly.
279
+
280
+ **Capabilities:**
281
+
282
+ - Summarize long recordings
283
+ - Extract specific information
284
+ - Identify patterns and trends
285
+ - Generate insights from multiple recordings
286
+ - Analyze sentiment and tone
287
+
288
+ **Usage in Claude:**
289
+
290
+ ```
291
+ "Analyze the tone of my meetings this week"
292
+ "Summarize the key decisions from yesterday's recordings"
293
+ "Find patterns in how I discuss project timelines"
294
+ ```
295
+
296
+ ### 🔎 Discovery
297
+
298
+ Automatically exposes server capabilities to MCP clients. This allows Claude and other tools to understand what features are available.
299
+
300
+ **Exposed Information:**
301
+
302
+ - Server name and version
303
+ - Available tools, resources, and prompts
304
+ - Supported features and limitations
305
+ - API capabilities
306
+
307
+ ### ⚡ Performance & Caching
308
+
309
+ The server includes an intelligent caching system to optimize performance:
310
+
311
+ **Cache Features:**
312
+
313
+ - LRU (Least Recently Used) eviction strategy
314
+ - Configurable TTL (Time To Live)
315
+ - Separate caches for lifelogs and search results
316
+ - Automatic cache invalidation
317
+ - Cache statistics tracking
318
+
319
+ **Configuration (via environment variables):**
320
+
321
+ - `CACHE_MAX_SIZE` - Maximum cached items (default: 100)
322
+ - `CACHE_TTL` - Cache lifetime in ms (default: 300000 / 5 minutes)
323
+ - `SEARCH_CACHE_MAX_SIZE` - Search cache size (default: 50)
324
+ - `SEARCH_CACHE_TTL` - Search cache lifetime (default: 180000 / 3 minutes)
325
+
326
+ ## 💡 Usage Examples
327
+
328
+ ### With Claude Desktop
329
+
330
+ Once configured, you can interact with your Limitless data naturally:
331
+
332
+ ```
333
+ "Show me all my recordings from yesterday"
334
+
335
+ "Search for conversations where I discussed 'project timeline'"
336
+
337
+ "Get the recording with ID abc123 and summarize the key points"
338
+
339
+ "List my recordings from last week and identify action items"
340
+
341
+ "What did I discuss in meetings between Monday and Wednesday?"
342
+ ```
343
+
344
+ ### Programmatic Usage
345
+
346
+ ```typescript
347
+ import { LimitlessClient } from 'limitless-ai-mcp-server';
348
+
349
+ const client = new LimitlessClient({
350
+ apiKey: process.env.LIMITLESS_API_KEY,
351
+ timeout: 120000,
352
+ });
353
+
354
+ // Get recent recordings
355
+ const recentLogs = await client.listRecentLifelogs({ limit: 5 });
356
+
357
+ // Search for specific content
358
+ const results = await client.searchLifelogs({
359
+ searchTerm: 'project update',
360
+ fetchLimit: 50,
361
+ });
362
+
363
+ // Get recordings by date
364
+ const todaysLogs = await client.listLifelogsByDate('2024-01-15', {
365
+ includeMarkdown: true,
366
+ });
367
+ ```
368
+
369
+ ## 🧪 Development
370
+
371
+ ### Setup Development Environment
372
+
373
+ ```bash
374
+ # Install dependencies
375
+ npm install
376
+
377
+ # Run in development mode
378
+ npm run dev
379
+
380
+ # Run tests
381
+ npm test
382
+
383
+ # Run linting
384
+ npm run lint
385
+
386
+ # Format code
387
+ npm run format
388
+ ```
389
+
390
+ ### Project Structure
391
+
392
+ ```
393
+ limitless-ai-mcp-server/
394
+ ├── src/
395
+ │ ├── core/ # Core business logic
396
+ │ │ └── limitless-client.ts
397
+ │ ├── tools/ # MCP tool definitions and handlers
398
+ │ │ ├── definitions.ts
399
+ │ │ ├── handlers.ts
400
+ │ │ └── schemas.ts
401
+ │ ├── types/ # TypeScript type definitions
402
+ │ │ └── limitless.ts
403
+ │ ├── utils/ # Utility functions
404
+ │ │ ├── date.ts
405
+ │ │ ├── format.ts
406
+ │ │ ├── logger.ts
407
+ │ │ └── retry.ts
408
+ │ └── index.ts # Main server entry point
409
+ ├── tests/ # Test files
410
+ ├── examples/ # Usage examples
411
+ └── dist/ # Compiled output
412
+ ```
413
+
414
+ ### Running Tests
415
+
416
+ ```bash
417
+ # Run all tests
418
+ npm test
419
+
420
+ # Run tests in watch mode
421
+ npm run test:watch
422
+
423
+ # Generate coverage report
424
+ npm run test:coverage
425
+ ```
426
+
427
+ ## 🤝 Contributing
428
+
429
+ Contributions are welcome! Please follow these steps:
430
+
431
+ 1. Fork the repository
432
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
433
+ 3. Commit your changes (`git commit -m 'Add amazing feature'`)
434
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
435
+ 5. Open a Pull Request
436
+
437
+ Please ensure:
438
+
439
+ - All tests pass
440
+ - Code follows the existing style (run `npm run lint`)
441
+ - Add tests for new features
442
+ - Update documentation as needed
443
+
444
+ ## 🐛 Troubleshooting
445
+
446
+ ### Common Issues
447
+
448
+ 1. **"No lifelogs found"**
449
+
450
+ - Ensure you have recordings from your Limitless Pendant
451
+ - Check that your API key is valid
452
+ - Verify the date range you're querying
453
+
454
+ 2. **Timeout errors**
455
+
456
+ - Increase timeout: `export LIMITLESS_TIMEOUT=300000`
457
+ - Reduce the number of results requested
458
+ - Check your internet connection
459
+
460
+ 3. **Authentication errors**
461
+ - Verify your API key is correctly set
462
+ - Ensure the key hasn't expired
463
+ - Check API key permissions at limitless.ai/developers
464
+
465
+ ### Debug Mode
466
+
467
+ Enable debug logging for more information:
468
+
469
+ ```bash
470
+ export LOG_LEVEL=DEBUG
471
+ ```
472
+
473
+ ### Claude Desktop Specific Issues
474
+
475
+ 1. **MCP server not showing up**
476
+
477
+ - Ensure the config file is valid JSON (check with a JSON validator)
478
+ - Verify the path to `dist/index.js` is absolute, not relative
479
+ - Make sure you've run `npm run build` after cloning
480
+ - Restart Claude Desktop completely
481
+
482
+ 2. **"Command failed" errors**
483
+
484
+ - Check that Node.js 22+ is installed: `node --version`
485
+ - Verify the server works locally: `LIMITLESS_API_KEY=your-key node dist/index.js`
486
+ - Check Claude Desktop logs: Help → Show Logs
487
+
488
+ 3. **No data returned**
489
+ - Confirm your API key is valid at [limitless.ai/developers](https://limitless.ai/developers)
490
+ - Ensure you have Pendant recordings (not app/extension data)
491
+ - Try a specific date when you know you had recordings
492
+
493
+ ### Claude Code CLI Specific Issues
494
+
495
+ 1. **"MCP Server Status: failed" with npx**
496
+
497
+ This is a known issue where `npx` doesn't reliably find globally installed packages when using nvm.
498
+
499
+ **Solution**: Use the direct command or full path instead:
500
+
501
+ ```bash
502
+ # Instead of: -- npx limitless-ai-mcp-server
503
+ # Use: -- limitless-ai-mcp-server
504
+ # Or: -- node ~/.nvm/versions/node/vXX.X.X/lib/node_modules/limitless-ai-mcp-server/dist/index.js
505
+ ```
506
+
507
+ 2. **Finding the correct path with nvm**
508
+
509
+ ```bash
510
+ # First, check which Node version you're using:
511
+ node --version
512
+
513
+ # Then find where the package is installed:
514
+ npm list -g limitless-ai-mcp-server
515
+
516
+ # The path will be something like:
517
+ # ~/.nvm/versions/node/v22.0.0/lib/node_modules/limitless-ai-mcp-server
518
+ ```
519
+
520
+ ## 📄 License
521
+
522
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
523
+
524
+ ## 🙏 Acknowledgments
525
+
526
+ - [Limitless AI](https://limitless.ai) for the amazing Pendant and API
527
+ - [Anthropic](https://anthropic.com) for the MCP protocol
528
+ - All contributors to this project
529
+
530
+ ## 📞 Support
531
+
532
+ - **Issues**: [GitHub Issues](https://github.com/ericbuess/limitless-ai-mcp-server/issues)
533
+ - **Discussions**: [GitHub Discussions](https://github.com/ericbuess/limitless-ai-mcp-server/discussions)
534
+ - **Author**: [Eric Buess](https://x.com/EricBuess)
535
+
536
+ ---
537
+
538
+ **Note**: This project is not officially affiliated with Limitless AI. It's an independent implementation of an MCP server for the Limitless API.
@@ -0,0 +1,25 @@
1
+ import { CacheOptions, CacheStats, ICache } from '../types/cache';
2
+ import { Lifelog, ListLifelogsOptions, SearchOptions } from '../types/limitless';
3
+ export declare class LRUCache<T> implements ICache<T> {
4
+ private cache;
5
+ private options;
6
+ private _stats;
7
+ constructor(options?: Partial<CacheOptions>);
8
+ get(key: string): T | undefined;
9
+ set(key: string, value: T): void;
10
+ has(key: string): boolean;
11
+ delete(key: string): boolean;
12
+ clear(): void;
13
+ size(): number;
14
+ stats(): CacheStats;
15
+ private isExpired;
16
+ private evictOldest;
17
+ }
18
+ export declare const lifelogCache: LRUCache<Lifelog>;
19
+ export declare const lifelogArrayCache: LRUCache<Lifelog[]>;
20
+ export declare const searchCache: LRUCache<Lifelog[]>;
21
+ export declare function buildLifelogCacheKey(id: string): string;
22
+ export declare function buildDateCacheKey(date: string, options?: ListLifelogsOptions): string;
23
+ export declare function buildSearchCacheKey(searchTerm: string, options?: SearchOptions): string;
24
+ export declare function buildRecentCacheKey(options?: ListLifelogsOptions): string;
25
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGjF,qBAAa,QAAQ,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAsB/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IA4B/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAuBhC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAS5B,KAAK,IAAI,IAAI;IAOb,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,UAAU;IAInB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;CAepB;AAGD,eAAO,MAAM,YAAY,mBAGvB,CAAC;AAEH,eAAO,MAAM,iBAAiB,qBAG5B,CAAC;AAEH,eAAO,MAAM,WAAW,qBAGtB,CAAC;AAGH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAGrF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAGvF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAGzE"}