second-opinion-mcp 0.3.2__tar.gz → 0.3.4__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.
Files changed (19) hide show
  1. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/PKG-INFO +69 -5
  2. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/README.md +68 -4
  3. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/pyproject.toml +1 -1
  4. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/src/second_opinion_mcp/__init__.py +1 -1
  5. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/src/second_opinion_mcp/cli.py +2 -2
  6. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/.gitignore +0 -0
  7. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/LICENSE +0 -0
  8. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/src/second_opinion_mcp/__main__.py +0 -0
  9. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/src/second_opinion_mcp/server.py +0 -0
  10. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/__init__.py +0 -0
  11. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/conftest.py +0 -0
  12. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_configuration.py +0 -0
  13. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_connection_pool.py +0 -0
  14. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_error_isolation.py +0 -0
  15. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_input_validation.py +0 -0
  16. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_keyring_security.py +0 -0
  17. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_path_security.py +0 -0
  18. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/tests/test_rate_limiting.py +0 -0
  19. {second_opinion_mcp-0.3.2 → second_opinion_mcp-0.3.4}/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.2
3
+ Version: 0.3.4
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
@@ -143,6 +143,56 @@ Full workflow: parallel reviews from both models, debate, then synthesis instruc
143
143
  Perform a comprehensive code review of ./myproject using review_synthesis
144
144
  ```
145
145
 
146
+ ## Usage Examples
147
+
148
+ ### Thorough Code Review Workflow
149
+
150
+ For comprehensive code reviews, use this prompt pattern with Claude Code:
151
+
152
+ ```
153
+ MyProject: perform a comprehensive deep parallel code review with deepseek and kimi
154
+ using mcp server second-opinion - save resulting md files to the project folder
155
+ to the docs subfolder in md format.
156
+
157
+ After that perform Consensus debate + arbiter synthesis using same mcp server tools
158
+ with opus 4.5 compiling a final document for the final review.
159
+
160
+ First 2 tasks can be run in parallel.
161
+ ```
162
+
163
+ This triggers parallel code_review calls to DeepSeek and Moonshot, then a consensus debate on findings, and finally Claude synthesizes the final review document.
164
+
165
+ ### Quick Second Opinion
166
+
167
+ ```
168
+ Use second_opinion to review this database schema:
169
+ CREATE TABLE users (
170
+ id SERIAL PRIMARY KEY,
171
+ email VARCHAR(255),
172
+ password VARCHAR(255)
173
+ );
174
+ ```
175
+
176
+ ### Critical Challenge
177
+
178
+ ```
179
+ Use challenge to critique this proposal: "We should use a global singleton for
180
+ database connections because it's simpler"
181
+ ```
182
+
183
+ ### Consensus Debate
184
+
185
+ ```
186
+ Use consensus to debate: "GraphQL vs REST for our internal microservices API"
187
+ ```
188
+
189
+ ### Code Review with Focus Areas
190
+
191
+ ```
192
+ Use code_review on directory="./src" with focus_areas=["security", "error-handling"]
193
+ and save_to="./docs/reviews"
194
+ ```
195
+
146
196
  ## Configuration
147
197
 
148
198
  ### Changing Providers
@@ -179,10 +229,23 @@ To update keys:
179
229
  second-opinion-mcp setup
180
230
  ```
181
231
 
182
- Or manually:
232
+ Or manually set each provider's key:
233
+
234
+ ```bash
235
+ # DeepSeek (key starts with sk-)
236
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_DEEPSEEK_KEY')"
237
+
238
+ # Moonshot/Kimi
239
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'moonshot', 'YOUR_MOONSHOT_KEY')"
240
+
241
+ # OpenRouter (key starts with sk-or-)
242
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'openrouter', 'sk-or-YOUR_OPENROUTER_KEY')"
243
+ ```
244
+
245
+ Verify keys are configured:
183
246
 
184
247
  ```bash
185
- python -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_NEW_KEY')"
248
+ python3 -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')))"
186
249
  ```
187
250
 
188
251
  ### Claude Desktop Configuration
@@ -308,8 +371,9 @@ claude mcp remove second-opinion
308
371
  pipx uninstall second-opinion-mcp
309
372
 
310
373
  # Optional: remove stored API keys
311
- python -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
312
- python -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
374
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
375
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
376
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
313
377
  ```
314
378
 
315
379
  ## Security
@@ -105,6 +105,56 @@ Full workflow: parallel reviews from both models, debate, then synthesis instruc
105
105
  Perform a comprehensive code review of ./myproject using review_synthesis
106
106
  ```
107
107
 
108
+ ## Usage Examples
109
+
110
+ ### Thorough Code Review Workflow
111
+
112
+ For comprehensive code reviews, use this prompt pattern with Claude Code:
113
+
114
+ ```
115
+ MyProject: perform a comprehensive deep parallel code review with deepseek and kimi
116
+ using mcp server second-opinion - save resulting md files to the project folder
117
+ to the docs subfolder in md format.
118
+
119
+ After that perform Consensus debate + arbiter synthesis using same mcp server tools
120
+ with opus 4.5 compiling a final document for the final review.
121
+
122
+ First 2 tasks can be run in parallel.
123
+ ```
124
+
125
+ This triggers parallel code_review calls to DeepSeek and Moonshot, then a consensus debate on findings, and finally Claude synthesizes the final review document.
126
+
127
+ ### Quick Second Opinion
128
+
129
+ ```
130
+ Use second_opinion to review this database schema:
131
+ CREATE TABLE users (
132
+ id SERIAL PRIMARY KEY,
133
+ email VARCHAR(255),
134
+ password VARCHAR(255)
135
+ );
136
+ ```
137
+
138
+ ### Critical Challenge
139
+
140
+ ```
141
+ Use challenge to critique this proposal: "We should use a global singleton for
142
+ database connections because it's simpler"
143
+ ```
144
+
145
+ ### Consensus Debate
146
+
147
+ ```
148
+ Use consensus to debate: "GraphQL vs REST for our internal microservices API"
149
+ ```
150
+
151
+ ### Code Review with Focus Areas
152
+
153
+ ```
154
+ Use code_review on directory="./src" with focus_areas=["security", "error-handling"]
155
+ and save_to="./docs/reviews"
156
+ ```
157
+
108
158
  ## Configuration
109
159
 
110
160
  ### Changing Providers
@@ -141,10 +191,23 @@ To update keys:
141
191
  second-opinion-mcp setup
142
192
  ```
143
193
 
144
- Or manually:
194
+ Or manually set each provider's key:
195
+
196
+ ```bash
197
+ # DeepSeek (key starts with sk-)
198
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_DEEPSEEK_KEY')"
199
+
200
+ # Moonshot/Kimi
201
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'moonshot', 'YOUR_MOONSHOT_KEY')"
202
+
203
+ # OpenRouter (key starts with sk-or-)
204
+ python3 -c "import keyring; keyring.set_password('second-opinion', 'openrouter', 'sk-or-YOUR_OPENROUTER_KEY')"
205
+ ```
206
+
207
+ Verify keys are configured:
145
208
 
146
209
  ```bash
147
- python -c "import keyring; keyring.set_password('second-opinion', 'deepseek', 'sk-YOUR_NEW_KEY')"
210
+ python3 -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')))"
148
211
  ```
149
212
 
150
213
  ### Claude Desktop Configuration
@@ -270,8 +333,9 @@ claude mcp remove second-opinion
270
333
  pipx uninstall second-opinion-mcp
271
334
 
272
335
  # Optional: remove stored API keys
273
- python -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
274
- python -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
336
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'deepseek')"
337
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'moonshot')"
338
+ python3 -c "import keyring; keyring.delete_password('second-opinion', 'openrouter')"
275
339
  ```
276
340
 
277
341
  ## Security
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "second-opinion-mcp"
3
- version = "0.3.2"
3
+ version = "0.3.4"
4
4
  description = "Multi-model AI analysis for Claude - get second opinions from DeepSeek, Kimi, and OpenRouter"
5
5
  requires-python = ">=3.10"
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  """Second Opinion MCP Server - Multi-model AI analysis for Claude."""
2
2
 
3
- __version__ = "0.3.2"
3
+ __version__ = "0.3.4"
4
4
  __author__ = "MarvinFS"
5
5
 
6
6
  from second_opinion_mcp.server import mcp, second_opinion, challenge, code_review, consensus, review_synthesis
@@ -149,12 +149,12 @@ def print_manual_setup_instructions(providers: list[str] | None = None):
149
149
  for provider in target_providers:
150
150
  config = PROVIDERS[provider]
151
151
  print(f" # {config['name']} - Get key at {config['key_hint']}")
152
- print(f" python -c \"import keyring; keyring.set_password('{config['keyring_service']}', '{config['keyring_name']}', 'YOUR_API_KEY')\"")
152
+ print(f" python3 -c \"import keyring; keyring.set_password('{config['keyring_service']}', '{config['keyring_name']}', 'YOUR_API_KEY')\"")
153
153
  print()
154
154
 
155
155
  print("To verify your keys are stored:")
156
156
  print()
157
- print(" python -c \"import keyring; print('deepseek:', bool(keyring.get_password('second-opinion', 'deepseek'))); print('moonshot:', bool(keyring.get_password('second-opinion', 'moonshot')))\"")
157
+ print(" python3 -c \"import keyring; print('deepseek:', bool(keyring.get_password('second-opinion', 'deepseek'))); print('moonshot:', bool(keyring.get_password('second-opinion', 'moonshot')))\"")
158
158
  print()
159
159
  print("After configuring keys, register with Claude Code:")
160
160
  print()