second-opinion-mcp 0.3.3__tar.gz → 0.3.5__tar.gz
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.
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/PKG-INFO +34 -13
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/README.md +33 -12
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/pyproject.toml +1 -1
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/src/second_opinion_mcp/__init__.py +1 -1
- second_opinion_mcp-0.3.5/src/second_opinion_mcp/cli.py +742 -0
- second_opinion_mcp-0.3.3/src/second_opinion_mcp/cli.py +0 -465
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/.gitignore +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/LICENSE +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/src/second_opinion_mcp/__main__.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/src/second_opinion_mcp/server.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/__init__.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/conftest.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_configuration.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_connection_pool.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_error_isolation.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_input_validation.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_keyring_security.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_path_security.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_rate_limiting.py +0 -0
- {second_opinion_mcp-0.3.3 → second_opinion_mcp-0.3.5}/tests/test_streaming_limits.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: second-opinion-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Summary: Multi-model AI analysis for Claude - get second opinions from DeepSeek, Kimi, and OpenRouter
|
|
5
5
|
Project-URL: Homepage, https://github.com/MarvinFS/second-opinion-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/MarvinFS/second-opinion-mcp
|
|
@@ -229,23 +229,26 @@ To update keys:
|
|
|
229
229
|
second-opinion-mcp setup
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
-
Or manually set each provider's key:
|
|
232
|
+
Or manually set each provider's key using the pipx environment Python:
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
|
+
# Use the pipx venv Python (required for pipx installations)
|
|
236
|
+
SOPYTHON=~/.local/share/pipx/venvs/second-opinion-mcp/bin/python3
|
|
237
|
+
|
|
235
238
|
# DeepSeek (key starts with sk-)
|
|
236
|
-
|
|
239
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_DEEPSEEK_KEY')"
|
|
237
240
|
|
|
238
241
|
# Moonshot/Kimi
|
|
239
|
-
|
|
242
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'moonshot', 'YOUR_MOONSHOT_KEY')"
|
|
240
243
|
|
|
241
244
|
# OpenRouter (key starts with sk-or-)
|
|
242
|
-
|
|
245
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'openrouter', 'sk-or-YOUR_OPENROUTER_KEY')"
|
|
243
246
|
```
|
|
244
247
|
|
|
245
248
|
Verify keys are configured:
|
|
246
249
|
|
|
247
250
|
```bash
|
|
248
|
-
|
|
251
|
+
$SOPYTHON -c "import keyring; print('deepseek:', bool(keyring.get_password('second-opinion', 'deepseek'))); print('moonshot:', bool(keyring.get_password('second-opinion', 'moonshot'))); print('openrouter:', bool(keyring.get_password('second-opinion', 'openrouter')))"
|
|
249
252
|
```
|
|
250
253
|
|
|
251
254
|
### Claude Desktop Configuration
|
|
@@ -268,6 +271,15 @@ For Claude Desktop (the standalone app), add to `claude_desktop_config.json`:
|
|
|
268
271
|
}
|
|
269
272
|
```
|
|
270
273
|
|
|
274
|
+
### OpenClaw / Other MCP Clients
|
|
275
|
+
|
|
276
|
+
For OpenClaw or other MCP-compatible clients, add the server with these settings:
|
|
277
|
+
|
|
278
|
+
- Server command: `second-opinion-mcp`
|
|
279
|
+
- Environment variable: `SECOND_OPINION_PROVIDERS=deepseek,moonshot`
|
|
280
|
+
|
|
281
|
+
The setup wizard (`second-opinion-mcp setup`) will show specific instructions for your chosen client.
|
|
282
|
+
|
|
271
283
|
## Troubleshooting
|
|
272
284
|
|
|
273
285
|
### "No API key configured" Error
|
|
@@ -283,11 +295,19 @@ second-opinion-mcp setup
|
|
|
283
295
|
Linux without a desktop environment needs a keyring backend configured:
|
|
284
296
|
|
|
285
297
|
```bash
|
|
286
|
-
|
|
298
|
+
# Install keyrings.alt into the pipx environment
|
|
299
|
+
pipx inject second-opinion-mcp keyrings.alt
|
|
300
|
+
|
|
301
|
+
# Create the keyring config
|
|
287
302
|
mkdir -p ~/.local/share/python_keyring
|
|
288
|
-
|
|
303
|
+
cat > ~/.local/share/python_keyring/keyringrc.cfg << 'EOF'
|
|
304
|
+
[backend]
|
|
305
|
+
default-keyring=keyrings.alt.file.EncryptedKeyring
|
|
306
|
+
EOF
|
|
289
307
|
```
|
|
290
308
|
|
|
309
|
+
Then run `second-opinion-mcp setup` again.
|
|
310
|
+
|
|
291
311
|
### Connection Timeout
|
|
292
312
|
|
|
293
313
|
Check firewall, VPN, or proxy settings. Both DeepSeek (api.deepseek.com) and Moonshot (api.moonshot.ai) must be accessible.
|
|
@@ -367,13 +387,14 @@ Your API keys are preserved in the system keyring across updates.
|
|
|
367
387
|
# Remove from Claude
|
|
368
388
|
claude mcp remove second-opinion
|
|
369
389
|
|
|
390
|
+
# Optional: remove stored API keys BEFORE uninstalling (requires pipx venv Python)
|
|
391
|
+
SOPYTHON=~/.local/share/pipx/venvs/second-opinion-mcp/bin/python3
|
|
392
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
|
|
393
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
|
|
394
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
|
|
395
|
+
|
|
370
396
|
# Uninstall package
|
|
371
397
|
pipx uninstall second-opinion-mcp
|
|
372
|
-
|
|
373
|
-
# Optional: remove stored API keys
|
|
374
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
|
|
375
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
|
|
376
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
|
|
377
398
|
```
|
|
378
399
|
|
|
379
400
|
## Security
|
|
@@ -191,23 +191,26 @@ To update keys:
|
|
|
191
191
|
second-opinion-mcp setup
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
Or manually set each provider's key:
|
|
194
|
+
Or manually set each provider's key using the pipx environment Python:
|
|
195
195
|
|
|
196
196
|
```bash
|
|
197
|
+
# Use the pipx venv Python (required for pipx installations)
|
|
198
|
+
SOPYTHON=~/.local/share/pipx/venvs/second-opinion-mcp/bin/python3
|
|
199
|
+
|
|
197
200
|
# DeepSeek (key starts with sk-)
|
|
198
|
-
|
|
201
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_DEEPSEEK_KEY')"
|
|
199
202
|
|
|
200
203
|
# Moonshot/Kimi
|
|
201
|
-
|
|
204
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'moonshot', 'YOUR_MOONSHOT_KEY')"
|
|
202
205
|
|
|
203
206
|
# OpenRouter (key starts with sk-or-)
|
|
204
|
-
|
|
207
|
+
$SOPYTHON -c "import keyring; keyring.set_password('second-opinion', 'openrouter', 'sk-or-YOUR_OPENROUTER_KEY')"
|
|
205
208
|
```
|
|
206
209
|
|
|
207
210
|
Verify keys are configured:
|
|
208
211
|
|
|
209
212
|
```bash
|
|
210
|
-
|
|
213
|
+
$SOPYTHON -c "import keyring; print('deepseek:', bool(keyring.get_password('second-opinion', 'deepseek'))); print('moonshot:', bool(keyring.get_password('second-opinion', 'moonshot'))); print('openrouter:', bool(keyring.get_password('second-opinion', 'openrouter')))"
|
|
211
214
|
```
|
|
212
215
|
|
|
213
216
|
### Claude Desktop Configuration
|
|
@@ -230,6 +233,15 @@ For Claude Desktop (the standalone app), add to `claude_desktop_config.json`:
|
|
|
230
233
|
}
|
|
231
234
|
```
|
|
232
235
|
|
|
236
|
+
### OpenClaw / Other MCP Clients
|
|
237
|
+
|
|
238
|
+
For OpenClaw or other MCP-compatible clients, add the server with these settings:
|
|
239
|
+
|
|
240
|
+
- Server command: `second-opinion-mcp`
|
|
241
|
+
- Environment variable: `SECOND_OPINION_PROVIDERS=deepseek,moonshot`
|
|
242
|
+
|
|
243
|
+
The setup wizard (`second-opinion-mcp setup`) will show specific instructions for your chosen client.
|
|
244
|
+
|
|
233
245
|
## Troubleshooting
|
|
234
246
|
|
|
235
247
|
### "No API key configured" Error
|
|
@@ -245,11 +257,19 @@ second-opinion-mcp setup
|
|
|
245
257
|
Linux without a desktop environment needs a keyring backend configured:
|
|
246
258
|
|
|
247
259
|
```bash
|
|
248
|
-
|
|
260
|
+
# Install keyrings.alt into the pipx environment
|
|
261
|
+
pipx inject second-opinion-mcp keyrings.alt
|
|
262
|
+
|
|
263
|
+
# Create the keyring config
|
|
249
264
|
mkdir -p ~/.local/share/python_keyring
|
|
250
|
-
|
|
265
|
+
cat > ~/.local/share/python_keyring/keyringrc.cfg << 'EOF'
|
|
266
|
+
[backend]
|
|
267
|
+
default-keyring=keyrings.alt.file.EncryptedKeyring
|
|
268
|
+
EOF
|
|
251
269
|
```
|
|
252
270
|
|
|
271
|
+
Then run `second-opinion-mcp setup` again.
|
|
272
|
+
|
|
253
273
|
### Connection Timeout
|
|
254
274
|
|
|
255
275
|
Check firewall, VPN, or proxy settings. Both DeepSeek (api.deepseek.com) and Moonshot (api.moonshot.ai) must be accessible.
|
|
@@ -329,13 +349,14 @@ Your API keys are preserved in the system keyring across updates.
|
|
|
329
349
|
# Remove from Claude
|
|
330
350
|
claude mcp remove second-opinion
|
|
331
351
|
|
|
352
|
+
# Optional: remove stored API keys BEFORE uninstalling (requires pipx venv Python)
|
|
353
|
+
SOPYTHON=~/.local/share/pipx/venvs/second-opinion-mcp/bin/python3
|
|
354
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
|
|
355
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
|
|
356
|
+
$SOPYTHON -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
|
|
357
|
+
|
|
332
358
|
# Uninstall package
|
|
333
359
|
pipx uninstall second-opinion-mcp
|
|
334
|
-
|
|
335
|
-
# Optional: remove stored API keys
|
|
336
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
|
|
337
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
|
|
338
|
-
python -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
|
|
339
360
|
```
|
|
340
361
|
|
|
341
362
|
## Security
|