strava-activity-mcp-server 0.2.7__py3-none-any.whl → 0.2.8__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.

Potentially problematic release.


This version of strava-activity-mcp-server might be problematic. Click here for more details.

@@ -271,30 +271,121 @@ async def get_athlete_stats_with_token(
271
271
  query_string = "&".join(params) if params else ""
272
272
  url = f"https://www.strava.com/api/v3/athlete/activities?{query_string}"
273
273
 
274
- # Debug output
275
- print(f"DEBUG: Requesting URL: {url}")
276
-
277
274
  headers = {
278
275
  "accept": "application/json",
279
276
  "authorization": f"Bearer {access_token}"
280
277
  }
281
278
 
282
- response = requests.get(url, headers=headers)
283
-
284
279
  try:
280
+ response = requests.get(url, headers=headers)
281
+
282
+ # Include debug information in the response
283
+ debug_info = {
284
+ "request_url": url,
285
+ "response_status": response.status_code,
286
+ "response_headers": dict(response.headers),
287
+ "filters_applied": {
288
+ "after": after,
289
+ "before": before,
290
+ "page": page,
291
+ "per_page": per_page
292
+ }
293
+ }
294
+
285
295
  response.raise_for_status()
286
- except requests.HTTPError:
287
- return {"error": "API request failed", "status_code": response.status_code, "response": response.text}
296
+
297
+ activities_data = response.json()
298
+
299
+ return {
300
+ "activities": activities_data,
301
+ "count": len(activities_data) if isinstance(activities_data, list) else 0,
302
+ "status": "success",
303
+ "debug": debug_info
304
+ }
305
+
306
+ except requests.HTTPError as e:
307
+ return {
308
+ "error": "API request failed",
309
+ "status_code": response.status_code,
310
+ "response": response.text,
311
+ "debug": {
312
+ "request_url": url,
313
+ "response_status": response.status_code,
314
+ "response_headers": dict(response.headers),
315
+ "filters_applied": {
316
+ "after": after,
317
+ "before": before,
318
+ "page": page,
319
+ "per_page": per_page
320
+ }
321
+ }
322
+ }
288
323
  except Exception as e:
289
- return {"error": "API request failed", "status_code": response.status_code, "response": response.text, "error": str(e)}
290
-
291
- activities_data = response.json()
292
- print(f"DEBUG: Response status: {response.status_code}, Activities count: {len(activities_data) if isinstance(activities_data, list) else 0}")
293
- return {
294
- "activities": activities_data,
295
- "count": len(activities_data) if isinstance(activities_data, list) else 0,
296
- "status": "success"
324
+ return {
325
+ "error": "API request failed",
326
+ "error_message": str(e),
327
+ "debug": {
328
+ "request_url": url,
329
+ "filters_applied": {
330
+ "after": after,
331
+ "before": before,
332
+ "page": page,
333
+ "per_page": per_page
334
+ }
335
+ }
336
+ }
337
+
338
+ @mcp.tool("strava://debug/test-connection")
339
+ async def test_strava_connection(access_token: str) -> dict:
340
+ """Test the Strava API connection and token validity with debug information."""
341
+ if not access_token:
342
+ return {"error": "access token is required"}
343
+
344
+ # Test 1: Simple request without filters
345
+ url_no_filters = "https://www.strava.com/api/v3/athlete/activities?per_page=5"
346
+ headers = {
347
+ "accept": "application/json",
348
+ "authorization": f"Bearer {access_token}"
297
349
  }
350
+
351
+ try:
352
+ response = requests.get(url_no_filters, headers=headers)
353
+
354
+ debug_info = {
355
+ "test_url": url_no_filters,
356
+ "response_status": response.status_code,
357
+ "response_headers": dict(response.headers),
358
+ "content_length": len(response.content) if response.content else 0
359
+ }
360
+
361
+ if response.status_code == 200:
362
+ activities_data = response.json()
363
+ debug_info["activities_count"] = len(activities_data) if isinstance(activities_data, list) else 0
364
+ debug_info["sample_activity"] = activities_data[0] if activities_data and len(activities_data) > 0 else None
365
+
366
+ return {
367
+ "status": "success",
368
+ "message": "Connection successful",
369
+ "activities": activities_data,
370
+ "debug": debug_info
371
+ }
372
+ else:
373
+ debug_info["response_text"] = response.text
374
+ return {
375
+ "status": "error",
376
+ "message": f"API returned status {response.status_code}",
377
+ "debug": debug_info
378
+ }
379
+
380
+ except Exception as e:
381
+ return {
382
+ "status": "error",
383
+ "message": f"Request failed: {str(e)}",
384
+ "debug": {
385
+ "test_url": url_no_filters,
386
+ "error": str(e)
387
+ }
388
+ }
298
389
 
299
390
  @mcp.tool("strava://auth/save")
300
391
  async def save_tokens(tokens: dict | None = None) -> dict:
@@ -361,7 +452,18 @@ async def refresh_and_get_stats(
361
452
  page=page,
362
453
  per_page=per_page
363
454
  )
364
- return {"activities": activities, "tokens": refreshed}
455
+ return {
456
+ "activities": activities,
457
+ "tokens": refreshed,
458
+ "debug": {
459
+ "filters_applied": {
460
+ "after": after,
461
+ "before": before,
462
+ "page": page,
463
+ "per_page": per_page
464
+ }
465
+ }
466
+ }
365
467
 
366
468
  @mcp.tool("strava://session/start")
367
469
  async def start_session(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: strava-activity-mcp-server
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Summary: Strava MCP server: one-time browser auth, then automatic refresh-token login
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.10
@@ -0,0 +1,8 @@
1
+ strava_activity_mcp_server/__init__.py,sha256=NgXC8CeBg0qFRHdZJJKjQlX9_RwSETJ9O6PNy0leOTI,107
2
+ strava_activity_mcp_server/__main__.py,sha256=SAdVoObdjb5UP4MY-Y2_uCXpnthB6hgxlb1KNVNgOrc,58
3
+ strava_activity_mcp_server/strava_activity_mcp_server.py,sha256=0IklWuom7yko50BjtoKv8SmW9pO-gAIWTk_F5ZPVSQg,18665
4
+ strava_activity_mcp_server-0.2.8.dist-info/METADATA,sha256=sPjFgTv4Z3wn87K4D_PRD_2Qh_5RwJfJ2jqIWg8ZzfU,7665
5
+ strava_activity_mcp_server-0.2.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
6
+ strava_activity_mcp_server-0.2.8.dist-info/entry_points.txt,sha256=F6PO_DBSThhtmX2AC-tu2MIiCJkGi31LCaQJxfUzZ5g,79
7
+ strava_activity_mcp_server-0.2.8.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
8
+ strava_activity_mcp_server-0.2.8.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- strava_activity_mcp_server/__init__.py,sha256=NgXC8CeBg0qFRHdZJJKjQlX9_RwSETJ9O6PNy0leOTI,107
2
- strava_activity_mcp_server/__main__.py,sha256=SAdVoObdjb5UP4MY-Y2_uCXpnthB6hgxlb1KNVNgOrc,58
3
- strava_activity_mcp_server/strava_activity_mcp_server.py,sha256=6Ib6jABSRJHkWGSBZMbht1FwpUjlob2REXuBGlaLp3E,15516
4
- strava_activity_mcp_server-0.2.7.dist-info/METADATA,sha256=kiw0VX3T2b1K48oJ1MUZn6F58D7SkewCXZCosKB90pI,7665
5
- strava_activity_mcp_server-0.2.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
6
- strava_activity_mcp_server-0.2.7.dist-info/entry_points.txt,sha256=F6PO_DBSThhtmX2AC-tu2MIiCJkGi31LCaQJxfUzZ5g,79
7
- strava_activity_mcp_server-0.2.7.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
8
- strava_activity_mcp_server-0.2.7.dist-info/RECORD,,