@vespermcp/mcp-server 1.2.8 → 1.2.9

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.
@@ -60,6 +60,46 @@ class AssetDownloader:
60
60
  if asyncio.iscoroutine(maybe):
61
61
  await maybe
62
62
 
63
+ @staticmethod
64
+ def _hydrate_kaggle_credentials() -> None:
65
+ username = os.getenv("KAGGLE_USERNAME")
66
+ key = os.getenv("KAGGLE_KEY")
67
+
68
+ if not username or not key:
69
+ try:
70
+ from config import get_all # type: ignore
71
+ keys = get_all() or {}
72
+ except Exception:
73
+ keys = {}
74
+
75
+ username = username or keys.get("kaggle_username")
76
+ key = key or keys.get("kaggle_key")
77
+
78
+ if username:
79
+ os.environ["KAGGLE_USERNAME"] = str(username)
80
+ if key:
81
+ os.environ["KAGGLE_KEY"] = str(key)
82
+
83
+ username = os.getenv("KAGGLE_USERNAME")
84
+ key = os.getenv("KAGGLE_KEY")
85
+ if not username or not key:
86
+ return
87
+
88
+ kaggle_dir = Path.home() / ".kaggle"
89
+ kaggle_file = kaggle_dir / "kaggle.json"
90
+ try:
91
+ kaggle_dir.mkdir(parents=True, exist_ok=True)
92
+ kaggle_file.write_text(
93
+ json.dumps({"username": username, "key": key}, ensure_ascii=False),
94
+ encoding="utf-8",
95
+ )
96
+ try:
97
+ os.chmod(kaggle_file, 0o600)
98
+ except Exception:
99
+ pass
100
+ except Exception:
101
+ pass
102
+
63
103
  @staticmethod
64
104
  def find_image_column(dataset: Any) -> Optional[str]:
65
105
  features = getattr(dataset, "features", None)
@@ -240,8 +280,17 @@ class AssetDownloader:
240
280
 
241
281
  await self._emit("start", {"source": "kaggle", "dataset": kaggle_ref})
242
282
 
283
+ self._hydrate_kaggle_credentials()
284
+
243
285
  api = KaggleApi()
244
- api.authenticate()
286
+ try:
287
+ api.authenticate()
288
+ except Exception as e:
289
+ raise RuntimeError(
290
+ "Kaggle authentication failed. Run 'configure_kaggle' or 'configure_keys' with "
291
+ "kaggle_username and kaggle_key, then retry. "
292
+ f"Details: {e}"
293
+ )
245
294
 
246
295
  tmp_dir = Path(tempfile.mkdtemp(prefix="vesper_kaggle_assets_"))
247
296
  downloaded = 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vespermcp/mcp-server",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "AI-powered dataset discovery, quality analysis, and preparation MCP server with multimodal support (text, image, audio, video)",
5
5
  "type": "module",
6
6
  "main": "build/index.js",
@@ -60,6 +60,46 @@ class AssetDownloader:
60
60
  if asyncio.iscoroutine(maybe):
61
61
  await maybe
62
62
 
63
+ @staticmethod
64
+ def _hydrate_kaggle_credentials() -> None:
65
+ username = os.getenv("KAGGLE_USERNAME")
66
+ key = os.getenv("KAGGLE_KEY")
67
+
68
+ if not username or not key:
69
+ try:
70
+ from config import get_all # type: ignore
71
+ keys = get_all() or {}
72
+ except Exception:
73
+ keys = {}
74
+
75
+ username = username or keys.get("kaggle_username")
76
+ key = key or keys.get("kaggle_key")
77
+
78
+ if username:
79
+ os.environ["KAGGLE_USERNAME"] = str(username)
80
+ if key:
81
+ os.environ["KAGGLE_KEY"] = str(key)
82
+
83
+ username = os.getenv("KAGGLE_USERNAME")
84
+ key = os.getenv("KAGGLE_KEY")
85
+ if not username or not key:
86
+ return
87
+
88
+ kaggle_dir = Path.home() / ".kaggle"
89
+ kaggle_file = kaggle_dir / "kaggle.json"
90
+ try:
91
+ kaggle_dir.mkdir(parents=True, exist_ok=True)
92
+ kaggle_file.write_text(
93
+ json.dumps({"username": username, "key": key}, ensure_ascii=False),
94
+ encoding="utf-8",
95
+ )
96
+ try:
97
+ os.chmod(kaggle_file, 0o600)
98
+ except Exception:
99
+ pass
100
+ except Exception:
101
+ pass
102
+
63
103
  @staticmethod
64
104
  def find_image_column(dataset: Any) -> Optional[str]:
65
105
  features = getattr(dataset, "features", None)
@@ -240,8 +280,17 @@ class AssetDownloader:
240
280
 
241
281
  await self._emit("start", {"source": "kaggle", "dataset": kaggle_ref})
242
282
 
283
+ self._hydrate_kaggle_credentials()
284
+
243
285
  api = KaggleApi()
244
- api.authenticate()
286
+ try:
287
+ api.authenticate()
288
+ except Exception as e:
289
+ raise RuntimeError(
290
+ "Kaggle authentication failed. Run 'configure_kaggle' or 'configure_keys' with "
291
+ "kaggle_username and kaggle_key, then retry. "
292
+ f"Details: {e}"
293
+ )
245
294
 
246
295
  tmp_dir = Path(tempfile.mkdtemp(prefix="vesper_kaggle_assets_"))
247
296
  downloaded = 0