second-opinion-mcp 0.3.2__py3-none-any.whl → 0.3.4__py3-none-any.whl

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.
@@ -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
second_opinion_mcp/cli.py CHANGED
@@ -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()
@@ -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
@@ -0,0 +1,9 @@
1
+ second_opinion_mcp/__init__.py,sha256=25qP5ShltFWoa09KfMQFCSGb6nOssroCDdNp8fEXQ6g,373
2
+ second_opinion_mcp/__main__.py,sha256=WDv19O6nvIH69GR_DUfXqDt-wm8bgsHNqvPm1LEIKzs,509
3
+ second_opinion_mcp/cli.py,sha256=KCT8-wEqMWzrjiLAYgwEdFUqWnkDDYgFm-eXCze4jDE,15281
4
+ second_opinion_mcp/server.py,sha256=46cHbK0GgL0VBCGI3gmTA1-vQ1jRDdQ6MsCCqWw3LVk,62237
5
+ second_opinion_mcp-0.3.4.dist-info/METADATA,sha256=IjrDmJyD6Z6WwHAxACRHQTIu6p7xBD3rbwD4rW4YAKI,10822
6
+ second_opinion_mcp-0.3.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
7
+ second_opinion_mcp-0.3.4.dist-info/entry_points.txt,sha256=-E8BA2gFyU4qW-kJL8SV9Pg1Cc7glOCmraJoZH0PZP8,72
8
+ second_opinion_mcp-0.3.4.dist-info/licenses/LICENSE,sha256=dPx2Jy-Ejearvfh6IlF2PN4Srt-nZW8M4bW5EW7RPAg,1065
9
+ second_opinion_mcp-0.3.4.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- second_opinion_mcp/__init__.py,sha256=6XCWg4mcxORq2OPxzaC5bVTLmKWEnYok4SWiZ5E6RVs,373
2
- second_opinion_mcp/__main__.py,sha256=WDv19O6nvIH69GR_DUfXqDt-wm8bgsHNqvPm1LEIKzs,509
3
- second_opinion_mcp/cli.py,sha256=A88Y0TZQ_B38YliHKzohAOLTZuGdMZzH4bEjyC1Tv_A,15279
4
- second_opinion_mcp/server.py,sha256=46cHbK0GgL0VBCGI3gmTA1-vQ1jRDdQ6MsCCqWw3LVk,62237
5
- second_opinion_mcp-0.3.2.dist-info/METADATA,sha256=azoIPNQyVezi-cYoift_BL4RN61qj7PI0Kqqvj2Bosg,8806
6
- second_opinion_mcp-0.3.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
7
- second_opinion_mcp-0.3.2.dist-info/entry_points.txt,sha256=-E8BA2gFyU4qW-kJL8SV9Pg1Cc7glOCmraJoZH0PZP8,72
8
- second_opinion_mcp-0.3.2.dist-info/licenses/LICENSE,sha256=dPx2Jy-Ejearvfh6IlF2PN4Srt-nZW8M4bW5EW7RPAg,1065
9
- second_opinion_mcp-0.3.2.dist-info/RECORD,,