@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.
- package/LICENSE +21 -0
- package/README.md +538 -0
- package/dist/core/cache.d.ts +25 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +151 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/limitless-client.d.ts +24 -0
- package/dist/core/limitless-client.d.ts.map +1 -0
- package/dist/core/limitless-client.js +238 -0
- package/dist/core/limitless-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/handlers.d.ts +12 -0
- package/dist/prompts/handlers.d.ts.map +1 -0
- package/dist/prompts/handlers.js +57 -0
- package/dist/prompts/handlers.js.map +1 -0
- package/dist/prompts/templates.d.ts +10 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/prompts/templates.js +210 -0
- package/dist/prompts/templates.js.map +1 -0
- package/dist/resources/handlers.d.ts +27 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +102 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/manager.d.ts +29 -0
- package/dist/resources/manager.d.ts.map +1 -0
- package/dist/resources/manager.js +134 -0
- package/dist/resources/manager.js.map +1 -0
- package/dist/sampling/handlers.d.ts +18 -0
- package/dist/sampling/handlers.d.ts.map +1 -0
- package/dist/sampling/handlers.js +231 -0
- package/dist/sampling/handlers.js.map +1 -0
- package/dist/sampling/templates.d.ts +19 -0
- package/dist/sampling/templates.d.ts.map +1 -0
- package/dist/sampling/templates.js +64 -0
- package/dist/sampling/templates.js.map +1 -0
- package/dist/tools/definitions.d.ts +3 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +194 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/handlers.d.ts +13 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +136 -0
- package/dist/tools/handlers.js.map +1 -0
- package/dist/tools/schemas.d.ts +116 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +83 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/types/cache.d.ts +27 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +3 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/limitless.d.ts +54 -0
- package/dist/types/limitless.d.ts.map +1 -0
- package/dist/types/limitless.js +3 -0
- package/dist/types/limitless.js.map +1 -0
- package/dist/types/mcp.d.ts +103 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +3 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/utils/date.d.ts +6 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +48 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/format.d.ts +8 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +90 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +10 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +38 -0
- package/dist/utils/retry.js.map +1 -0
- 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
|
+
[](https://github.com/ericbuess/limitless-ai-mcp-server)
|
|
4
|
+
[](https://github.com/ericbuess/limitless-ai-mcp-server)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](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"}
|