reddit-mcp-buddy 1.1.10 → 1.1.13
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 +84 -11
- package/dist/cli.js +147 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/auth.d.ts +21 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +143 -21
- package/dist/core/auth.js.map +1 -1
- package/dist/core/cache.d.ts +12 -6
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +88 -29
- package/dist/core/cache.js.map +1 -1
- package/dist/core/rate-limiter.d.ts +2 -0
- package/dist/core/rate-limiter.d.ts.map +1 -1
- package/dist/core/rate-limiter.js +21 -1
- package/dist/core/rate-limiter.js.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +15 -19
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +192 -42
- package/dist/mcp-server.js.map +1 -1
- package/dist/services/reddit-api.d.ts +23 -1
- package/dist/services/reddit-api.d.ts.map +1 -1
- package/dist/services/reddit-api.js +135 -8
- package/dist/services/reddit-api.js.map +1 -1
- package/dist/tools/index.d.ts +16 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +110 -34
- package/dist/tools/index.js.map +1 -1
- package/dist/types/reddit.types.d.ts +1 -1
- package/dist/types/reddit.types.d.ts.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# <img src="assets/reddit-mcp-buddy-icon-white-background.png" width="48" align="center"/> Reddit MCP Buddy
|
|
2
2
|
|
|
3
3
|
### Reddit Browser for Claude Desktop and AI Assistants
|
|
4
4
|
|
|
5
5
|
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that enables Claude Desktop and other AI assistants to browse Reddit, search posts, and analyze user activity. Clean, fast, and actually works - no API keys required.
|
|
6
6
|
|
|
7
|
-
[](https://registry.modelcontextprotocol.io)
|
|
8
8
|
[](https://www.npmjs.com/package/reddit-mcp-buddy)
|
|
9
9
|
[](https://www.npmjs.com/package/reddit-mcp-buddy)
|
|
10
10
|
[](https://github.com/karanb192/reddit-mcp-buddy/stargazers)
|
|
@@ -12,6 +12,10 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that en
|
|
|
12
12
|
|
|
13
13
|
## 🎬 See It In Action
|
|
14
14
|
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
*Claude checking Reddit's reaction to the Dune Part Three trailer and whether the AirPods Max 2 are worth $549*
|
|
18
|
+
|
|
15
19
|

|
|
16
20
|
|
|
17
21
|
*Claude analyzing real-time sentiment about H-1B visa changes across r/cscareerquestions and r/india*
|
|
@@ -45,7 +49,13 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that en
|
|
|
45
49
|
|
|
46
50
|
## Quick Start (30 seconds)
|
|
47
51
|
|
|
48
|
-
### For Claude Desktop
|
|
52
|
+
### For Claude Desktop - Desktop Extension (Easiest!)
|
|
53
|
+
|
|
54
|
+
1. **Download**: [reddit-mcp-buddy.mcpb](https://github.com/karanb192/reddit-mcp-buddy/releases/latest/download/reddit-mcp-buddy.mcpb)
|
|
55
|
+
2. **Install**: Open the downloaded file
|
|
56
|
+
3. **Done!** Reddit tools are now available in Claude
|
|
57
|
+
|
|
58
|
+
### For Claude Desktop - NPM Method (Alternative)
|
|
49
59
|
|
|
50
60
|
Add this to your `claude_desktop_config.json`:
|
|
51
61
|
|
|
@@ -54,13 +64,23 @@ Add this to your `claude_desktop_config.json`:
|
|
|
54
64
|
"mcpServers": {
|
|
55
65
|
"reddit": {
|
|
56
66
|
"command": "npx",
|
|
57
|
-
"args": ["reddit-mcp-buddy"]
|
|
67
|
+
"args": ["-y", "reddit-mcp-buddy"]
|
|
58
68
|
}
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
71
|
```
|
|
62
72
|
|
|
63
|
-
|
|
73
|
+
### For Claude Code
|
|
74
|
+
|
|
75
|
+
Run this command to add the MCP server (user scope):
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
claude mcp add --transport stdio reddit-mcp-buddy -s user -- npx -y reddit-mcp-buddy
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### For Other MCP Clients
|
|
82
|
+
|
|
83
|
+
Use the NPM method: `npx -y reddit-mcp-buddy`
|
|
64
84
|
|
|
65
85
|
## What can it do?
|
|
66
86
|
|
|
@@ -98,9 +118,16 @@ Search across Reddit or specific subreddits.
|
|
|
98
118
|
Get a post with all its comments.
|
|
99
119
|
```
|
|
100
120
|
- Input:
|
|
101
|
-
- Reddit URL (
|
|
121
|
+
- Reddit URL (supports multiple formats), OR
|
|
102
122
|
- Post ID alone (will auto-detect subreddit, 2 API calls), OR
|
|
103
123
|
- Post ID + subreddit (most efficient, 1 API call)
|
|
124
|
+
- Supported URL formats:
|
|
125
|
+
- reddit.com, www.reddit.com
|
|
126
|
+
- old.reddit.com, new.reddit.com
|
|
127
|
+
- np.reddit.com (No Participation links)
|
|
128
|
+
- m.reddit.com (mobile links)
|
|
129
|
+
- redd.it short URLs
|
|
130
|
+
- URLs with query params (?utm_source=...) or fragments (#comment)
|
|
104
131
|
- Options: comment sorting, depth, link extraction
|
|
105
132
|
```
|
|
106
133
|
|
|
@@ -142,7 +169,7 @@ Want more requests? Add Reddit credentials to your Claude Desktop config:
|
|
|
142
169
|
"mcpServers": {
|
|
143
170
|
"reddit": {
|
|
144
171
|
"command": "npx",
|
|
145
|
-
"args": ["reddit-mcp-buddy"],
|
|
172
|
+
"args": ["-y", "reddit-mcp-buddy"],
|
|
146
173
|
"env": {
|
|
147
174
|
"REDDIT_CLIENT_ID": "your_client_id",
|
|
148
175
|
"REDDIT_CLIENT_SECRET": "your_client_secret",
|
|
@@ -174,6 +201,47 @@ Reddit MCP Buddy supports three authentication levels, each with different rate
|
|
|
174
201
|
- Web apps only support app-only mode (60 rpm maximum)
|
|
175
202
|
- For 100 requests/minute, you MUST use a script app with username + password
|
|
176
203
|
|
|
204
|
+
## Privacy & Data Handling
|
|
205
|
+
|
|
206
|
+
Reddit MCP Buddy is designed with privacy and transparency in mind. Here's how your data is handled:
|
|
207
|
+
|
|
208
|
+
### Data Collection
|
|
209
|
+
- **Reddit API Data**: The server fetches public Reddit content (posts, comments, user profiles) through Reddit's official API
|
|
210
|
+
- **No Tracking**: We don't collect, store, or transmit any analytics, telemetry, or usage data
|
|
211
|
+
- **No Third Parties**: All data flows directly between your machine, Reddit's API, and your AI assistant
|
|
212
|
+
|
|
213
|
+
### Local Storage
|
|
214
|
+
- **Authentication Credentials** (optional):
|
|
215
|
+
- Stored locally in `~/.reddit-mcp-buddy/auth.json` when using `--auth` CLI setup
|
|
216
|
+
- Passwords are **never** written to disk - only used in-memory for OAuth token exchange
|
|
217
|
+
- Environment variables (recommended for Claude Desktop) are never persisted by this server
|
|
218
|
+
- **Cache Data**:
|
|
219
|
+
- Reddit API responses are temporarily cached in memory to improve performance
|
|
220
|
+
- Cache size limited to 50MB maximum
|
|
221
|
+
- All cache data is cleared when the server stops
|
|
222
|
+
- Can be disabled with `REDDIT_BUDDY_NO_CACHE=true`
|
|
223
|
+
|
|
224
|
+
### Data Transmission
|
|
225
|
+
- **Reddit API Only**: Your credentials are only sent to Reddit's official OAuth endpoints (`https://oauth.reddit.com` and `https://www.reddit.com`)
|
|
226
|
+
- **No External Services**: No data is sent to any other external services, analytics platforms, or third parties
|
|
227
|
+
- **Local Processing**: All data processing happens locally on your machine
|
|
228
|
+
|
|
229
|
+
### Security Notes
|
|
230
|
+
- **Read-Only Operations**: All tools are read-only - the server never posts, comments, or modifies any Reddit content
|
|
231
|
+
- **Credential Safety**:
|
|
232
|
+
- OAuth tokens are stored in memory and refreshed automatically
|
|
233
|
+
- Client secrets are treated as sensitive and never logged
|
|
234
|
+
- Use environment variables in Claude Desktop config for maximum security
|
|
235
|
+
- **Open Source**: Full source code is available at https://github.com/karanb192/reddit-mcp-buddy for security auditing
|
|
236
|
+
|
|
237
|
+
### GDPR & Privacy Compliance
|
|
238
|
+
- **No Personal Data Collection**: We don't collect or process any personal data beyond what's necessary to authenticate with Reddit's API
|
|
239
|
+
- **User Control**: You control all credentials and can delete `~/.reddit-mcp-buddy/auth.json` at any time
|
|
240
|
+
- **Right to Erasure**: Simply delete the auth file or uninstall the server to remove all local data
|
|
241
|
+
|
|
242
|
+
### Questions or Concerns?
|
|
243
|
+
If you have any privacy questions or concerns, please [open an issue](https://github.com/karanb192/reddit-mcp-buddy/issues) on GitHub.
|
|
244
|
+
|
|
177
245
|
## Testing & Development
|
|
178
246
|
|
|
179
247
|
### Testing Your Rate Limits
|
|
@@ -206,7 +274,7 @@ The rate limit tester will:
|
|
|
206
274
|
|
|
207
275
|
For local development and testing, you can set up authentication interactively:
|
|
208
276
|
```bash
|
|
209
|
-
npx reddit-mcp-buddy --auth
|
|
277
|
+
npx -y reddit-mcp-buddy --auth
|
|
210
278
|
```
|
|
211
279
|
|
|
212
280
|
This will prompt you for Reddit app credentials and save them locally. **Note: This does NOT work with Claude Desktop** - use environment variables in your Claude config instead.
|
|
@@ -216,10 +284,10 @@ This will prompt you for Reddit app credentials and save them locally. **Note: T
|
|
|
216
284
|
To test the server directly in your terminal:
|
|
217
285
|
```bash
|
|
218
286
|
# Run in HTTP mode on port 3000
|
|
219
|
-
npx reddit-mcp-buddy --http
|
|
287
|
+
npx -y reddit-mcp-buddy --http
|
|
220
288
|
|
|
221
289
|
# Or with custom port
|
|
222
|
-
REDDIT_BUDDY_PORT=8080 npx reddit-mcp-buddy --http
|
|
290
|
+
REDDIT_BUDDY_PORT=8080 npx -y reddit-mcp-buddy --http
|
|
223
291
|
```
|
|
224
292
|
|
|
225
293
|
**Note:** The server runs in stdio mode by default (for Claude Desktop). Use `--http` flag for testing with Postman MCP or direct API calls.
|
|
@@ -412,6 +480,11 @@ npm run dev
|
|
|
412
480
|
# Build
|
|
413
481
|
npm run build
|
|
414
482
|
|
|
483
|
+
# Run tests
|
|
484
|
+
npm test # Unit tests
|
|
485
|
+
npm run test:integration # Integration tests
|
|
486
|
+
npm run test:all # All tests
|
|
487
|
+
|
|
415
488
|
# Test rate limits
|
|
416
489
|
npm run test:rate-limit # Test with current environment
|
|
417
490
|
npm run test:rate-limit:anon # Test anonymous mode (10 rpm)
|
|
@@ -456,7 +529,7 @@ We keep things simple:
|
|
|
456
529
|
- **[Awesome MCP Servers](https://github.com/modelcontextprotocol/awesome-mcp-servers)** - Community-curated list of MCP servers
|
|
457
530
|
|
|
458
531
|
### Where to Find This Server
|
|
459
|
-
- **[MCP Registry Direct Link](https://registry.modelcontextprotocol.io/v0/servers/5677b351-373d-4137-bc58-28f1ba0d105d)** - Direct API link to
|
|
532
|
+
- **[MCP Registry Direct Link](https://registry.modelcontextprotocol.io/v0/servers/5677b351-373d-4137-bc58-28f1ba0d105d)** - Direct API link to this server
|
|
460
533
|
- **[MCP Registry Search](https://registry.modelcontextprotocol.io)** - Search for "reddit" to find all versions
|
|
461
534
|
- **[NPM Package](https://www.npmjs.com/package/reddit-mcp-buddy)** - Install via npm/npx
|
|
462
535
|
- **[GitHub Repository](https://github.com/karanb192/reddit-mcp-buddy)** - Source code and issues
|
package/dist/cli.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { AuthManager } from './core/auth.js';
|
|
7
7
|
import { SERVER_VERSION } from './mcp-server.js';
|
|
8
8
|
import { spawn } from 'child_process';
|
|
9
|
-
import { fileURLToPath } from 'url';
|
|
9
|
+
import { fileURLToPath, pathToFileURL } from 'url';
|
|
10
10
|
import { dirname, join } from 'path';
|
|
11
11
|
import readline from 'readline/promises';
|
|
12
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -49,40 +49,99 @@ async function setupAuth() {
|
|
|
49
49
|
const username = await rl.question('Reddit Username (optional): ');
|
|
50
50
|
let password = '';
|
|
51
51
|
if (username) {
|
|
52
|
-
// Hide password input
|
|
52
|
+
// Hide password input with proper error handling and cleanup
|
|
53
53
|
const passwordQuestion = 'Reddit Password: ';
|
|
54
54
|
process.stdout.write(passwordQuestion);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
password = await new Promise((resolve) => {
|
|
55
|
+
password = await new Promise((resolve, reject) => {
|
|
56
|
+
const PASSWORD_TIMEOUT_MS = 60000; // 60 second timeout to prevent hanging
|
|
57
|
+
const MAX_PASSWORD_LENGTH = 256; // Reasonable password length limit
|
|
59
58
|
let pwd = '';
|
|
60
|
-
|
|
59
|
+
let isResolved = false;
|
|
60
|
+
let timeoutId = null;
|
|
61
|
+
// Set timeout to prevent hanging if user doesn't respond
|
|
62
|
+
timeoutId = setTimeout(() => {
|
|
63
|
+
if (!isResolved) {
|
|
64
|
+
isResolved = true;
|
|
65
|
+
try {
|
|
66
|
+
process.stdin.setRawMode(false);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Raw mode might already be disabled
|
|
70
|
+
}
|
|
71
|
+
process.stdin.pause();
|
|
72
|
+
process.stdin.removeAllListeners('data');
|
|
73
|
+
process.stdout.write('\n');
|
|
74
|
+
reject(new Error('Password input timeout'));
|
|
75
|
+
}
|
|
76
|
+
}, PASSWORD_TIMEOUT_MS);
|
|
77
|
+
const dataHandler = (char) => {
|
|
78
|
+
if (isResolved)
|
|
79
|
+
return;
|
|
61
80
|
const charStr = char.toString('utf8');
|
|
62
81
|
switch (charStr) {
|
|
63
82
|
case '\n':
|
|
64
83
|
case '\r':
|
|
65
|
-
case '\u0004':
|
|
66
|
-
|
|
84
|
+
case '\u0004': // EOF
|
|
85
|
+
if (timeoutId)
|
|
86
|
+
clearTimeout(timeoutId);
|
|
87
|
+
isResolved = true;
|
|
88
|
+
try {
|
|
89
|
+
process.stdin.setRawMode(false);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Raw mode might already be disabled
|
|
93
|
+
}
|
|
67
94
|
process.stdin.pause();
|
|
95
|
+
process.stdin.removeAllListeners('data');
|
|
68
96
|
process.stdout.write('\n');
|
|
69
|
-
resolve
|
|
97
|
+
// Clear pwd reference and resolve
|
|
98
|
+
const result = pwd;
|
|
99
|
+
pwd = ''; // Try to clear from memory
|
|
100
|
+
resolve(result);
|
|
70
101
|
break;
|
|
71
|
-
case '\u0003':
|
|
102
|
+
case '\u0003': // Ctrl+C
|
|
103
|
+
if (timeoutId)
|
|
104
|
+
clearTimeout(timeoutId);
|
|
105
|
+
try {
|
|
106
|
+
process.stdin.setRawMode(false);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Raw mode might already be disabled
|
|
110
|
+
}
|
|
111
|
+
process.stdin.pause();
|
|
112
|
+
process.stdin.removeAllListeners('data');
|
|
113
|
+
pwd = ''; // Clear password
|
|
72
114
|
process.exit();
|
|
73
115
|
break;
|
|
74
|
-
case '\u007f':
|
|
116
|
+
case '\u007f': // Backspace
|
|
75
117
|
if (pwd.length > 0) {
|
|
76
118
|
pwd = pwd.slice(0, -1);
|
|
77
119
|
process.stdout.write('\b \b');
|
|
78
120
|
}
|
|
79
121
|
break;
|
|
80
122
|
default:
|
|
81
|
-
|
|
82
|
-
|
|
123
|
+
// Prevent excessively long passwords
|
|
124
|
+
if (pwd.length < MAX_PASSWORD_LENGTH) {
|
|
125
|
+
pwd += charStr;
|
|
126
|
+
process.stdout.write('*');
|
|
127
|
+
}
|
|
83
128
|
break;
|
|
84
129
|
}
|
|
85
|
-
}
|
|
130
|
+
};
|
|
131
|
+
try {
|
|
132
|
+
process.stdin.setRawMode(true);
|
|
133
|
+
process.stdin.resume();
|
|
134
|
+
process.stdin.on('data', dataHandler);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (timeoutId)
|
|
138
|
+
clearTimeout(timeoutId);
|
|
139
|
+
pwd = ''; // Clear password
|
|
140
|
+
reject(error);
|
|
141
|
+
}
|
|
142
|
+
}).catch((error) => {
|
|
143
|
+
console.error('\n❌ Password input error:', error.message);
|
|
144
|
+
process.exit(1);
|
|
86
145
|
});
|
|
87
146
|
}
|
|
88
147
|
// Test the credentials
|
|
@@ -119,10 +178,15 @@ async function setupAuth() {
|
|
|
119
178
|
console.error(' • Username and password are correct');
|
|
120
179
|
}
|
|
121
180
|
console.error('\nError:', error.message);
|
|
122
|
-
// Clear invalid config
|
|
181
|
+
// Clear invalid config and password from memory
|
|
123
182
|
await authManager.clear();
|
|
183
|
+
password = ''; // Clear password from memory
|
|
124
184
|
process.exit(1);
|
|
125
185
|
}
|
|
186
|
+
finally {
|
|
187
|
+
// Always clear password from memory after use
|
|
188
|
+
password = '';
|
|
189
|
+
}
|
|
126
190
|
}
|
|
127
191
|
finally {
|
|
128
192
|
rl.close();
|
|
@@ -134,27 +198,78 @@ async function startServer() {
|
|
|
134
198
|
if (isDev) {
|
|
135
199
|
// Development mode - run TypeScript directly
|
|
136
200
|
const serverPath = join(__dirname, 'index.ts');
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
201
|
+
// Improved child process error handling
|
|
202
|
+
let child;
|
|
203
|
+
try {
|
|
204
|
+
child = spawn('tsx', [serverPath], {
|
|
205
|
+
stdio: 'inherit',
|
|
206
|
+
env: { ...process.env },
|
|
207
|
+
});
|
|
208
|
+
// Verify child process was created successfully
|
|
209
|
+
if (!child || !child.pid) {
|
|
210
|
+
throw new Error('Failed to create child process');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
215
|
+
console.error('❌ Failed to spawn development server:', errorMsg);
|
|
216
|
+
// Check if tsx is not installed
|
|
217
|
+
if (errorMsg.includes('ENOENT') || errorMsg.includes('not found')) {
|
|
218
|
+
console.error('\nNote: Development mode requires tsx to be installed.');
|
|
219
|
+
console.error('Run: npm install');
|
|
220
|
+
}
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
// Handle errors after spawn
|
|
141
224
|
child.on('error', (error) => {
|
|
142
|
-
|
|
225
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
226
|
+
console.error('❌ Child process error:', errorMsg);
|
|
143
227
|
process.exit(1);
|
|
144
228
|
});
|
|
145
|
-
|
|
229
|
+
// Handle unexpected exit
|
|
230
|
+
child.on('exit', (code, signal) => {
|
|
231
|
+
if (code && code !== 0) {
|
|
232
|
+
console.error(`❌ Server exited with code ${code}`);
|
|
233
|
+
}
|
|
234
|
+
else if (signal) {
|
|
235
|
+
console.error(`❌ Server terminated by signal ${signal}`);
|
|
236
|
+
}
|
|
146
237
|
process.exit(code || 0);
|
|
147
238
|
});
|
|
148
239
|
}
|
|
149
240
|
else {
|
|
150
|
-
// Production mode - run compiled JavaScript
|
|
241
|
+
// Production mode - run compiled JavaScript with improved error handling
|
|
151
242
|
const serverPath = join(__dirname, 'index.js');
|
|
152
|
-
|
|
243
|
+
const serverUrl = pathToFileURL(serverPath).href;
|
|
244
|
+
// Improved dynamic import error handling
|
|
153
245
|
try {
|
|
154
|
-
|
|
246
|
+
// Check if the file exists first
|
|
247
|
+
const { promises: fs } = await import('fs');
|
|
248
|
+
try {
|
|
249
|
+
await fs.access(serverPath);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
throw new Error(`Server file not found: ${serverPath}. Run: npm run build`);
|
|
253
|
+
}
|
|
254
|
+
// Attempt dynamic import
|
|
255
|
+
await import(serverUrl);
|
|
155
256
|
}
|
|
156
257
|
catch (error) {
|
|
157
|
-
|
|
258
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
259
|
+
if (errorMsg.includes('not found') || errorMsg.includes('ENOENT')) {
|
|
260
|
+
console.error('❌ Server file not found. Run: npm run build');
|
|
261
|
+
}
|
|
262
|
+
else if (errorMsg.includes('Cannot find module')) {
|
|
263
|
+
console.error('❌ Module import error:', errorMsg);
|
|
264
|
+
console.error('Try running: npm install');
|
|
265
|
+
}
|
|
266
|
+
else if (errorMsg.includes('Unexpected token')) {
|
|
267
|
+
console.error('❌ Syntax error in server code:', errorMsg);
|
|
268
|
+
console.error('Try running: npm run typecheck');
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
console.error('❌ Failed to start server:', errorMsg);
|
|
272
|
+
}
|
|
158
273
|
process.exit(1);
|
|
159
274
|
}
|
|
160
275
|
}
|
|
@@ -171,7 +286,8 @@ if (args.includes('--auth') || args.includes('-a')) {
|
|
|
171
286
|
else if (args.includes('--help') || args.includes('-h')) {
|
|
172
287
|
console.log('Reddit MCP Buddy - Your AI assistant\'s best friend for browsing Reddit\n');
|
|
173
288
|
console.log('Usage:');
|
|
174
|
-
console.log(' reddit-mcp-buddy Start the MCP server');
|
|
289
|
+
console.log(' reddit-mcp-buddy Start the MCP server (stdio mode)');
|
|
290
|
+
console.log(' reddit-mcp-buddy --http Start the MCP server (HTTP mode)');
|
|
175
291
|
console.log(' reddit-mcp-buddy --auth Set up Reddit authentication (optional)');
|
|
176
292
|
console.log(' reddit-mcp-buddy --help Show this help message\n');
|
|
177
293
|
console.log('Features:');
|
|
@@ -186,6 +302,10 @@ else if (args.includes('--version') || args.includes('-v')) {
|
|
|
186
302
|
console.log(`Reddit MCP Buddy v${SERVER_VERSION}`);
|
|
187
303
|
}
|
|
188
304
|
else {
|
|
305
|
+
// Support --http flag as shorthand for REDDIT_BUDDY_HTTP=true
|
|
306
|
+
if (args.includes('--http')) {
|
|
307
|
+
process.env.REDDIT_BUDDY_HTTP = 'true';
|
|
308
|
+
}
|
|
189
309
|
// Start the server
|
|
190
310
|
startServer().catch((error) => {
|
|
191
311
|
console.error('Failed to start:', error);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/core/auth.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export interface AuthConfig {
|
|
|
15
15
|
export declare class AuthManager {
|
|
16
16
|
private config;
|
|
17
17
|
private configPath;
|
|
18
|
+
private tokenRefreshPromise;
|
|
19
|
+
private readonly TOKEN_EXPIRATION_BUFFER_MS;
|
|
18
20
|
constructor();
|
|
19
21
|
/**
|
|
20
22
|
* Load authentication configuration
|
|
@@ -24,6 +26,15 @@ export declare class AuthManager {
|
|
|
24
26
|
* Load configuration from environment variables
|
|
25
27
|
*/
|
|
26
28
|
private loadFromEnv;
|
|
29
|
+
/**
|
|
30
|
+
* Clean environment variable value
|
|
31
|
+
* Handles empty strings, undefined, and unresolved template strings
|
|
32
|
+
*/
|
|
33
|
+
private cleanEnvVar;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a string contains unresolved template patterns
|
|
36
|
+
*/
|
|
37
|
+
private containsUnresolvedTemplate;
|
|
27
38
|
/**
|
|
28
39
|
* Save authentication configuration
|
|
29
40
|
*/
|
|
@@ -37,7 +48,11 @@ export declare class AuthManager {
|
|
|
37
48
|
*/
|
|
38
49
|
isAuthenticated(): boolean;
|
|
39
50
|
/**
|
|
40
|
-
* Check if token is expired
|
|
51
|
+
* Check if token is expired or will expire soon (including buffer for clock drift)
|
|
52
|
+
* Returns true if:
|
|
53
|
+
* - No expiresAt set
|
|
54
|
+
* - Current time >= expiresAt
|
|
55
|
+
* - Current time >= expiresAt - buffer (to handle clock drift and refresh early)
|
|
41
56
|
*/
|
|
42
57
|
isTokenExpired(): boolean;
|
|
43
58
|
/**
|
|
@@ -46,8 +61,13 @@ export declare class AuthManager {
|
|
|
46
61
|
getAccessToken(): Promise<string | null>;
|
|
47
62
|
/**
|
|
48
63
|
* Refresh access token using client credentials
|
|
64
|
+
* Uses a lock to prevent concurrent refresh attempts (race conditions)
|
|
49
65
|
*/
|
|
50
66
|
refreshAccessToken(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Internal implementation of token refresh (protected by lock)
|
|
69
|
+
*/
|
|
70
|
+
private doRefreshAccessToken;
|
|
51
71
|
/**
|
|
52
72
|
* Clear authentication
|
|
53
73
|
*/
|
package/dist/core/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,mBAAmB,CAA8B;IAEzD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAS;;IAMpD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA2BxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7C;;OAEG;IACH,SAAS,IAAI,UAAU,GAAG,IAAI;IAI9B;;OAEG;IACH,eAAe,IAAI,OAAO;IAM1B;;;;;;OAMG;IACH,cAAc,IAAI,OAAO;IAQzB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgB9C;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBzC;;OAEG;YACW,oBAAoB;IA0FlC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgBnD;;OAEG;IACH,YAAY,IAAI,MAAM;IAQtB;;OAEG;IACH,WAAW,IAAI,MAAM;IAMrB;;OAEG;IACH,WAAW,IAAI,OAAO;IAMtB;;OAEG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;WACU,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;CAiCnD"}
|