second-opinion-mcp 0.3.1__py3-none-any.whl → 0.3.2__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.
- second_opinion_mcp/__init__.py +1 -1
- second_opinion_mcp/server.py +43 -0
- {second_opinion_mcp-0.3.1.dist-info → second_opinion_mcp-0.3.2.dist-info}/METADATA +20 -1
- second_opinion_mcp-0.3.2.dist-info/RECORD +9 -0
- second_opinion_mcp-0.3.1.dist-info/RECORD +0 -9
- {second_opinion_mcp-0.3.1.dist-info → second_opinion_mcp-0.3.2.dist-info}/WHEEL +0 -0
- {second_opinion_mcp-0.3.1.dist-info → second_opinion_mcp-0.3.2.dist-info}/entry_points.txt +0 -0
- {second_opinion_mcp-0.3.1.dist-info → second_opinion_mcp-0.3.2.dist-info}/licenses/LICENSE +0 -0
second_opinion_mcp/__init__.py
CHANGED
second_opinion_mcp/server.py
CHANGED
|
@@ -1575,6 +1575,42 @@ def _validate_startup_requirements() -> tuple[bool, str]:
|
|
|
1575
1575
|
return True, ""
|
|
1576
1576
|
|
|
1577
1577
|
|
|
1578
|
+
def _check_for_updates() -> tuple[str | None, str | None]:
|
|
1579
|
+
"""Check PyPI for newer version of second-opinion-mcp.
|
|
1580
|
+
|
|
1581
|
+
Returns:
|
|
1582
|
+
(latest_version, current_version) if update available, (None, None) otherwise.
|
|
1583
|
+
"""
|
|
1584
|
+
import urllib.request
|
|
1585
|
+
import json
|
|
1586
|
+
|
|
1587
|
+
try:
|
|
1588
|
+
from second_opinion_mcp import __version__ as current_version
|
|
1589
|
+
except ImportError:
|
|
1590
|
+
current_version = "0.0.0"
|
|
1591
|
+
|
|
1592
|
+
try:
|
|
1593
|
+
# Quick timeout to not delay startup
|
|
1594
|
+
url = "https://pypi.org/pypi/second-opinion-mcp/json"
|
|
1595
|
+
req = urllib.request.Request(url, headers={"User-Agent": "second-opinion-mcp"})
|
|
1596
|
+
with urllib.request.urlopen(req, timeout=3) as response:
|
|
1597
|
+
data = json.loads(response.read().decode())
|
|
1598
|
+
latest_version = data.get("info", {}).get("version", "0.0.0")
|
|
1599
|
+
|
|
1600
|
+
# Simple version comparison (works for semver)
|
|
1601
|
+
def parse_version(v: str) -> tuple[int, ...]:
|
|
1602
|
+
return tuple(int(x) for x in v.split(".")[:3] if x.isdigit())
|
|
1603
|
+
|
|
1604
|
+
if parse_version(latest_version) > parse_version(current_version):
|
|
1605
|
+
return latest_version, current_version
|
|
1606
|
+
|
|
1607
|
+
except Exception:
|
|
1608
|
+
# Don't fail startup on update check errors
|
|
1609
|
+
pass
|
|
1610
|
+
|
|
1611
|
+
return None, None
|
|
1612
|
+
|
|
1613
|
+
|
|
1578
1614
|
def main():
|
|
1579
1615
|
"""Run the MCP server with stdio transport."""
|
|
1580
1616
|
import sys
|
|
@@ -1585,6 +1621,13 @@ def main():
|
|
|
1585
1621
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
1586
1622
|
)
|
|
1587
1623
|
|
|
1624
|
+
# Check for updates (non-blocking, quick timeout)
|
|
1625
|
+
latest, current = _check_for_updates()
|
|
1626
|
+
if latest:
|
|
1627
|
+
print(f"Update available: {current} -> {latest}", file=sys.stderr)
|
|
1628
|
+
print("Run: pipx upgrade second-opinion-mcp", file=sys.stderr)
|
|
1629
|
+
print(file=sys.stderr)
|
|
1630
|
+
|
|
1588
1631
|
# Validate minimum requirements
|
|
1589
1632
|
ok, error = _validate_startup_requirements()
|
|
1590
1633
|
if not ok:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: second-opinion-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
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
|
|
@@ -279,6 +279,25 @@ Use code_review with focus_areas=["security", "error-handling", "performance"]
|
|
|
279
279
|
Use code_review on directory="./src" with save_to="./docs/reviews"
|
|
280
280
|
```
|
|
281
281
|
|
|
282
|
+
## Updating
|
|
283
|
+
|
|
284
|
+
The server checks for updates on startup and notifies you if a new version is available.
|
|
285
|
+
|
|
286
|
+
To update manually:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
pipx upgrade second-opinion-mcp
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Or reinstall:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
pipx uninstall second-opinion-mcp
|
|
296
|
+
pipx install second-opinion-mcp
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Your API keys are preserved in the system keyring across updates.
|
|
300
|
+
|
|
282
301
|
## Uninstalling
|
|
283
302
|
|
|
284
303
|
```bash
|
|
@@ -0,0 +1,9 @@
|
|
|
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,,
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
second_opinion_mcp/__init__.py,sha256=THy3IptvV_KjNfRHMlhqUKNucORFcyKadnH8QfzFOXI,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=Q6ra1wffKPoT2sfU6RIbTA-V93XgwA3faW3qLIVIoDw,60696
|
|
5
|
-
second_opinion_mcp-0.3.1.dist-info/METADATA,sha256=GKMM_Oh9_UgDLQrqzP1IXX-FlUP-8PNDRqA2yANeMCA,8476
|
|
6
|
-
second_opinion_mcp-0.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
7
|
-
second_opinion_mcp-0.3.1.dist-info/entry_points.txt,sha256=-E8BA2gFyU4qW-kJL8SV9Pg1Cc7glOCmraJoZH0PZP8,72
|
|
8
|
-
second_opinion_mcp-0.3.1.dist-info/licenses/LICENSE,sha256=dPx2Jy-Ejearvfh6IlF2PN4Srt-nZW8M4bW5EW7RPAg,1065
|
|
9
|
-
second_opinion_mcp-0.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|