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.
- strava_activity_mcp_server/strava_activity_mcp_server.py +118 -16
- {strava_activity_mcp_server-0.2.7.dist-info → strava_activity_mcp_server-0.2.8.dist-info}/METADATA +1 -1
- strava_activity_mcp_server-0.2.8.dist-info/RECORD +8 -0
- strava_activity_mcp_server-0.2.7.dist-info/RECORD +0 -8
- {strava_activity_mcp_server-0.2.7.dist-info → strava_activity_mcp_server-0.2.8.dist-info}/WHEEL +0 -0
- {strava_activity_mcp_server-0.2.7.dist-info → strava_activity_mcp_server-0.2.8.dist-info}/entry_points.txt +0 -0
- {strava_activity_mcp_server-0.2.7.dist-info → strava_activity_mcp_server-0.2.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -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
|
-
|
|
287
|
-
|
|
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 {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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 {
|
|
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(
|
|
@@ -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,,
|
{strava_activity_mcp_server-0.2.7.dist-info → strava_activity_mcp_server-0.2.8.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|