@pulsarinteractive/geniusfitness 0.1.0-beta.3 → 0.1.0-beta.5

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.
@@ -47,7 +47,7 @@
47
47
  {
48
48
  "name": "fitness_resources",
49
49
  "title": "Read records",
50
- "description": "Read a bounded page or exact record before modifying it. Preserve epoch/revision. Never crawl all collections. Use personal scope only for the connected owner; revoked access is unavailable.",
50
+ "description": "Read a bounded page or exact record before modifying it. Preserve epoch/revision. Never crawl all collections. Use personal scope only for the connected owner; revoked access is unavailable. Prefer the permission-specific read tools for new calls.",
51
51
  "inputSchema": {
52
52
  "type": "object",
53
53
  "properties": {
@@ -95,7 +95,7 @@
95
95
  },
96
96
  "archive": {
97
97
  "type": "string",
98
- "enum": ["true", "false"]
98
+ "enum": ["active", "archived", "all"]
99
99
  }
100
100
  },
101
101
  "required": ["scope", "collection"],
@@ -148,6 +148,40 @@
148
148
  "scopes": ["exercises:read"],
149
149
  "route": "catalog"
150
150
  },
151
+ {
152
+ "name": "fitness_session_analysis",
153
+ "title": "Analyze a training session",
154
+ "description": "Read recorded time per set and exercise, actual rest and measurement coverage for one session. Long timers may include interruptions; do not assume continuous effort or invent wearable measurements. Sets page at 50; continue with nextSetOffset as offset and the same revision.",
155
+ "inputSchema": {
156
+ "type": "object",
157
+ "properties": {
158
+ "scope": {
159
+ "type": "string",
160
+ "pattern": "^project:[A-Za-z0-9_-]{1,128}$",
161
+ "maxLength": 160
162
+ },
163
+ "id": {
164
+ "type": "string",
165
+ "pattern": "^[A-Za-z0-9_-]{1,128}$",
166
+ "maxLength": 128
167
+ },
168
+ "offset": {
169
+ "type": "integer",
170
+ "minimum": 0,
171
+ "maximum": 1000
172
+ },
173
+ "revision": {
174
+ "type": "string",
175
+ "pattern": "^(0|[1-9][0-9]{0,15})$",
176
+ "maxLength": 16
177
+ }
178
+ },
179
+ "required": ["scope", "id"],
180
+ "additionalProperties": false
181
+ },
182
+ "scopes": ["metrics:read"],
183
+ "route": "session-analysis"
184
+ },
151
185
  {
152
186
  "name": "fitness_metrics",
153
187
  "title": "Training progress",
@@ -316,7 +350,7 @@
316
350
  {
317
351
  "name": "fitness_execute_command",
318
352
  "title": "Apply the approved edit",
319
- "description": "Execute the exact command returned by prepare_command after user approval. This changes account data and may delete records. After timeout retry the SAME command; after conflict read the current record and ask before preparing a replacement. Permissions, subscription and quotas are checked on the server.",
353
+ "description": "Execute the exact command returned by prepare_command after user approval. This changes account data and may delete records. After timeout retry the SAME command; after conflict read the current record and ask before preparing a replacement. Permissions, subscription and quotas are checked on the server. Prefer the permission-specific edit tools for new calls; this generic entry point remains for existing clients.",
320
354
  "inputSchema": {
321
355
  "type": "object",
322
356
  "properties": {
@@ -415,5 +449,861 @@
415
449
  "route": "commands",
416
450
  "write": true,
417
451
  "destructive": true
452
+ },
453
+ {
454
+ "name": "fitness_edit_exercises",
455
+ "title": "Apply approved exercises changes",
456
+ "description": "Apply an exact immutable command returned by prepare_command for exercises, after user approval. Only the listed command kinds are accepted. Preserve operationId and all fields for retries. Existing account, resource, subscription and quota checks apply.",
457
+ "inputSchema": {
458
+ "type": "object",
459
+ "properties": {
460
+ "operationId": {
461
+ "type": "string",
462
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
463
+ },
464
+ "issuedAt": {
465
+ "type": "integer",
466
+ "minimum": 0
467
+ },
468
+ "kind": {
469
+ "type": "string",
470
+ "enum": ["exercise.create", "exercise.delete", "exercise.import", "exercise.update"]
471
+ },
472
+ "scope": {
473
+ "type": "string",
474
+ "minLength": 1,
475
+ "maxLength": 256
476
+ },
477
+ "id": {
478
+ "type": "string",
479
+ "minLength": 1,
480
+ "maxLength": 128
481
+ },
482
+ "epoch": {
483
+ "type": "string",
484
+ "minLength": 1,
485
+ "maxLength": 128
486
+ },
487
+ "expectedRevision": {
488
+ "anyOf": [
489
+ {
490
+ "type": "string",
491
+ "minLength": 1,
492
+ "maxLength": 32
493
+ },
494
+ {
495
+ "type": "null"
496
+ }
497
+ ]
498
+ },
499
+ "data": {
500
+ "type": "object",
501
+ "maxProperties": 40
502
+ }
503
+ },
504
+ "required": [
505
+ "operationId",
506
+ "issuedAt",
507
+ "kind",
508
+ "scope",
509
+ "id",
510
+ "epoch",
511
+ "expectedRevision",
512
+ "data"
513
+ ],
514
+ "additionalProperties": false
515
+ },
516
+ "scopes": ["exercises:write"],
517
+ "route": "commands",
518
+ "write": true,
519
+ "destructive": true
520
+ },
521
+ {
522
+ "name": "fitness_edit_health",
523
+ "title": "Apply approved health changes",
524
+ "description": "Apply an exact immutable command returned by prepare_command for health, after user approval. Only the listed command kinds are accepted. Preserve operationId and all fields for retries. Existing account, resource, subscription and quota checks apply.",
525
+ "inputSchema": {
526
+ "type": "object",
527
+ "properties": {
528
+ "operationId": {
529
+ "type": "string",
530
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
531
+ },
532
+ "issuedAt": {
533
+ "type": "integer",
534
+ "minimum": 0
535
+ },
536
+ "kind": {
537
+ "type": "string",
538
+ "enum": ["health.create", "health.delete", "health.update"]
539
+ },
540
+ "scope": {
541
+ "type": "string",
542
+ "minLength": 1,
543
+ "maxLength": 256
544
+ },
545
+ "id": {
546
+ "type": "string",
547
+ "minLength": 1,
548
+ "maxLength": 128
549
+ },
550
+ "epoch": {
551
+ "type": "string",
552
+ "minLength": 1,
553
+ "maxLength": 128
554
+ },
555
+ "expectedRevision": {
556
+ "anyOf": [
557
+ {
558
+ "type": "string",
559
+ "minLength": 1,
560
+ "maxLength": 32
561
+ },
562
+ {
563
+ "type": "null"
564
+ }
565
+ ]
566
+ },
567
+ "data": {
568
+ "type": "object",
569
+ "maxProperties": 40
570
+ }
571
+ },
572
+ "required": [
573
+ "operationId",
574
+ "issuedAt",
575
+ "kind",
576
+ "scope",
577
+ "id",
578
+ "epoch",
579
+ "expectedRevision",
580
+ "data"
581
+ ],
582
+ "additionalProperties": false
583
+ },
584
+ "scopes": ["health:write"],
585
+ "route": "commands",
586
+ "write": true,
587
+ "destructive": true
588
+ },
589
+ {
590
+ "name": "fitness_edit_metrics",
591
+ "title": "Apply approved metrics changes",
592
+ "description": "Apply an exact immutable command returned by prepare_command for metrics, after user approval. Only the listed command kinds are accepted. Preserve operationId and all fields for retries. Existing account, resource, subscription and quota checks apply.",
593
+ "inputSchema": {
594
+ "type": "object",
595
+ "properties": {
596
+ "operationId": {
597
+ "type": "string",
598
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
599
+ },
600
+ "issuedAt": {
601
+ "type": "integer",
602
+ "minimum": 0
603
+ },
604
+ "kind": {
605
+ "type": "string",
606
+ "enum": [
607
+ "run.create",
608
+ "run.delete",
609
+ "run.update",
610
+ "session.create",
611
+ "session.delete",
612
+ "session.update"
613
+ ]
614
+ },
615
+ "scope": {
616
+ "type": "string",
617
+ "minLength": 1,
618
+ "maxLength": 256
619
+ },
620
+ "id": {
621
+ "type": "string",
622
+ "minLength": 1,
623
+ "maxLength": 128
624
+ },
625
+ "epoch": {
626
+ "type": "string",
627
+ "minLength": 1,
628
+ "maxLength": 128
629
+ },
630
+ "expectedRevision": {
631
+ "anyOf": [
632
+ {
633
+ "type": "string",
634
+ "minLength": 1,
635
+ "maxLength": 32
636
+ },
637
+ {
638
+ "type": "null"
639
+ }
640
+ ]
641
+ },
642
+ "data": {
643
+ "type": "object",
644
+ "maxProperties": 40
645
+ }
646
+ },
647
+ "required": [
648
+ "operationId",
649
+ "issuedAt",
650
+ "kind",
651
+ "scope",
652
+ "id",
653
+ "epoch",
654
+ "expectedRevision",
655
+ "data"
656
+ ],
657
+ "additionalProperties": false
658
+ },
659
+ "scopes": ["metrics:write"],
660
+ "route": "commands",
661
+ "write": true,
662
+ "destructive": true
663
+ },
664
+ {
665
+ "name": "fitness_coach_metrics",
666
+ "title": "Coach: apply approved metrics changes",
667
+ "description": "Apply an approved metrics command to another athlete's authorized program. Requires an active Coach subscription, explicit coaching permission and current program membership. Prepare the exact command first; preserve it for retries. Never use this to widen access.",
668
+ "inputSchema": {
669
+ "type": "object",
670
+ "properties": {
671
+ "operationId": {
672
+ "type": "string",
673
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
674
+ },
675
+ "issuedAt": {
676
+ "type": "integer",
677
+ "minimum": 0
678
+ },
679
+ "kind": {
680
+ "type": "string",
681
+ "enum": [
682
+ "run.create",
683
+ "run.delete",
684
+ "run.update",
685
+ "session.create",
686
+ "session.delete",
687
+ "session.update"
688
+ ]
689
+ },
690
+ "scope": {
691
+ "type": "string",
692
+ "minLength": 1,
693
+ "maxLength": 256
694
+ },
695
+ "id": {
696
+ "type": "string",
697
+ "minLength": 1,
698
+ "maxLength": 128
699
+ },
700
+ "epoch": {
701
+ "type": "string",
702
+ "minLength": 1,
703
+ "maxLength": 128
704
+ },
705
+ "expectedRevision": {
706
+ "anyOf": [
707
+ {
708
+ "type": "string",
709
+ "minLength": 1,
710
+ "maxLength": 32
711
+ },
712
+ {
713
+ "type": "null"
714
+ }
715
+ ]
716
+ },
717
+ "data": {
718
+ "type": "object",
719
+ "maxProperties": 40
720
+ }
721
+ },
722
+ "required": [
723
+ "operationId",
724
+ "issuedAt",
725
+ "kind",
726
+ "scope",
727
+ "id",
728
+ "epoch",
729
+ "expectedRevision",
730
+ "data"
731
+ ],
732
+ "additionalProperties": false
733
+ },
734
+ "scopes": ["metrics:write", "coaching:write"],
735
+ "route": "commands",
736
+ "write": true,
737
+ "destructive": true
738
+ },
739
+ {
740
+ "name": "fitness_edit_planning",
741
+ "title": "Apply approved planning changes",
742
+ "description": "Apply an exact immutable command returned by prepare_command for planning, after user approval. Only the listed command kinds are accepted. Preserve operationId and all fields for retries. Existing account, resource, subscription and quota checks apply.",
743
+ "inputSchema": {
744
+ "type": "object",
745
+ "properties": {
746
+ "operationId": {
747
+ "type": "string",
748
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
749
+ },
750
+ "issuedAt": {
751
+ "type": "integer",
752
+ "minimum": 0
753
+ },
754
+ "kind": {
755
+ "type": "string",
756
+ "enum": [
757
+ "goal.create",
758
+ "goal.delete",
759
+ "goal.update",
760
+ "planning.create",
761
+ "planning.delete",
762
+ "planning.update",
763
+ "schedule.create",
764
+ "schedule.delete",
765
+ "schedule.update"
766
+ ]
767
+ },
768
+ "scope": {
769
+ "type": "string",
770
+ "minLength": 1,
771
+ "maxLength": 256
772
+ },
773
+ "id": {
774
+ "type": "string",
775
+ "minLength": 1,
776
+ "maxLength": 128
777
+ },
778
+ "epoch": {
779
+ "type": "string",
780
+ "minLength": 1,
781
+ "maxLength": 128
782
+ },
783
+ "expectedRevision": {
784
+ "anyOf": [
785
+ {
786
+ "type": "string",
787
+ "minLength": 1,
788
+ "maxLength": 32
789
+ },
790
+ {
791
+ "type": "null"
792
+ }
793
+ ]
794
+ },
795
+ "data": {
796
+ "type": "object",
797
+ "maxProperties": 40
798
+ }
799
+ },
800
+ "required": [
801
+ "operationId",
802
+ "issuedAt",
803
+ "kind",
804
+ "scope",
805
+ "id",
806
+ "epoch",
807
+ "expectedRevision",
808
+ "data"
809
+ ],
810
+ "additionalProperties": false
811
+ },
812
+ "scopes": ["planning:write"],
813
+ "route": "commands",
814
+ "write": true,
815
+ "destructive": true
816
+ },
817
+ {
818
+ "name": "fitness_coach_planning",
819
+ "title": "Coach: apply approved planning changes",
820
+ "description": "Apply an approved planning command to another athlete's authorized program. Requires an active Coach subscription, explicit coaching permission and current program membership. Prepare the exact command first; preserve it for retries. Never use this to widen access.",
821
+ "inputSchema": {
822
+ "type": "object",
823
+ "properties": {
824
+ "operationId": {
825
+ "type": "string",
826
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
827
+ },
828
+ "issuedAt": {
829
+ "type": "integer",
830
+ "minimum": 0
831
+ },
832
+ "kind": {
833
+ "type": "string",
834
+ "enum": [
835
+ "goal.create",
836
+ "goal.delete",
837
+ "goal.update",
838
+ "planning.create",
839
+ "planning.delete",
840
+ "planning.update",
841
+ "schedule.create",
842
+ "schedule.delete",
843
+ "schedule.update"
844
+ ]
845
+ },
846
+ "scope": {
847
+ "type": "string",
848
+ "minLength": 1,
849
+ "maxLength": 256
850
+ },
851
+ "id": {
852
+ "type": "string",
853
+ "minLength": 1,
854
+ "maxLength": 128
855
+ },
856
+ "epoch": {
857
+ "type": "string",
858
+ "minLength": 1,
859
+ "maxLength": 128
860
+ },
861
+ "expectedRevision": {
862
+ "anyOf": [
863
+ {
864
+ "type": "string",
865
+ "minLength": 1,
866
+ "maxLength": 32
867
+ },
868
+ {
869
+ "type": "null"
870
+ }
871
+ ]
872
+ },
873
+ "data": {
874
+ "type": "object",
875
+ "maxProperties": 40
876
+ }
877
+ },
878
+ "required": [
879
+ "operationId",
880
+ "issuedAt",
881
+ "kind",
882
+ "scope",
883
+ "id",
884
+ "epoch",
885
+ "expectedRevision",
886
+ "data"
887
+ ],
888
+ "additionalProperties": false
889
+ },
890
+ "scopes": ["planning:write", "coaching:write"],
891
+ "route": "commands",
892
+ "write": true,
893
+ "destructive": true
894
+ },
895
+ {
896
+ "name": "fitness_edit_programs",
897
+ "title": "Apply approved programs changes",
898
+ "description": "Apply an exact immutable command returned by prepare_command for programs, after user approval. Only the listed command kinds are accepted. Preserve operationId and all fields for retries. Existing account, resource, subscription and quota checks apply.",
899
+ "inputSchema": {
900
+ "type": "object",
901
+ "properties": {
902
+ "operationId": {
903
+ "type": "string",
904
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
905
+ },
906
+ "issuedAt": {
907
+ "type": "integer",
908
+ "minimum": 0
909
+ },
910
+ "kind": {
911
+ "type": "string",
912
+ "enum": [
913
+ "exercise.document.create",
914
+ "exercise.document.delete",
915
+ "exercise.document.update",
916
+ "program.create",
917
+ "program.delete",
918
+ "program.update",
919
+ "workout.create",
920
+ "workout.delete",
921
+ "workout.exercise.create",
922
+ "workout.exercise.delete",
923
+ "workout.exercise.update",
924
+ "workout.update"
925
+ ]
926
+ },
927
+ "scope": {
928
+ "type": "string",
929
+ "minLength": 1,
930
+ "maxLength": 256
931
+ },
932
+ "id": {
933
+ "type": "string",
934
+ "minLength": 1,
935
+ "maxLength": 128
936
+ },
937
+ "epoch": {
938
+ "type": "string",
939
+ "minLength": 1,
940
+ "maxLength": 128
941
+ },
942
+ "expectedRevision": {
943
+ "anyOf": [
944
+ {
945
+ "type": "string",
946
+ "minLength": 1,
947
+ "maxLength": 32
948
+ },
949
+ {
950
+ "type": "null"
951
+ }
952
+ ]
953
+ },
954
+ "data": {
955
+ "type": "object",
956
+ "maxProperties": 40
957
+ }
958
+ },
959
+ "required": [
960
+ "operationId",
961
+ "issuedAt",
962
+ "kind",
963
+ "scope",
964
+ "id",
965
+ "epoch",
966
+ "expectedRevision",
967
+ "data"
968
+ ],
969
+ "additionalProperties": false
970
+ },
971
+ "scopes": ["programs:write"],
972
+ "route": "commands",
973
+ "write": true,
974
+ "destructive": true
975
+ },
976
+ {
977
+ "name": "fitness_coach_programs",
978
+ "title": "Coach: apply approved programs changes",
979
+ "description": "Apply an approved programs command to another athlete's authorized program. Requires an active Coach subscription, explicit coaching permission and current program membership. Prepare the exact command first; preserve it for retries. Never use this to widen access.",
980
+ "inputSchema": {
981
+ "type": "object",
982
+ "properties": {
983
+ "operationId": {
984
+ "type": "string",
985
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
986
+ },
987
+ "issuedAt": {
988
+ "type": "integer",
989
+ "minimum": 0
990
+ },
991
+ "kind": {
992
+ "type": "string",
993
+ "enum": [
994
+ "exercise.document.create",
995
+ "exercise.document.delete",
996
+ "exercise.document.update",
997
+ "program.create",
998
+ "program.delete",
999
+ "program.update",
1000
+ "workout.create",
1001
+ "workout.delete",
1002
+ "workout.exercise.create",
1003
+ "workout.exercise.delete",
1004
+ "workout.exercise.update",
1005
+ "workout.update"
1006
+ ]
1007
+ },
1008
+ "scope": {
1009
+ "type": "string",
1010
+ "minLength": 1,
1011
+ "maxLength": 256
1012
+ },
1013
+ "id": {
1014
+ "type": "string",
1015
+ "minLength": 1,
1016
+ "maxLength": 128
1017
+ },
1018
+ "epoch": {
1019
+ "type": "string",
1020
+ "minLength": 1,
1021
+ "maxLength": 128
1022
+ },
1023
+ "expectedRevision": {
1024
+ "anyOf": [
1025
+ {
1026
+ "type": "string",
1027
+ "minLength": 1,
1028
+ "maxLength": 32
1029
+ },
1030
+ {
1031
+ "type": "null"
1032
+ }
1033
+ ]
1034
+ },
1035
+ "data": {
1036
+ "type": "object",
1037
+ "maxProperties": 40
1038
+ }
1039
+ },
1040
+ "required": [
1041
+ "operationId",
1042
+ "issuedAt",
1043
+ "kind",
1044
+ "scope",
1045
+ "id",
1046
+ "epoch",
1047
+ "expectedRevision",
1048
+ "data"
1049
+ ],
1050
+ "additionalProperties": false
1051
+ },
1052
+ "scopes": ["programs:write", "coaching:write"],
1053
+ "route": "commands",
1054
+ "write": true,
1055
+ "destructive": true
1056
+ },
1057
+ {
1058
+ "name": "fitness_read_exercises",
1059
+ "title": "Read exercises records",
1060
+ "description": "Read one authorized page or exact record from the listed exercises collections. Preserve epoch/revision and follow nextAfter only when needed. This tool cannot change data. Existing resource access and quotas apply.",
1061
+ "inputSchema": {
1062
+ "type": "object",
1063
+ "properties": {
1064
+ "scope": {
1065
+ "type": "string",
1066
+ "minLength": 1,
1067
+ "maxLength": 256
1068
+ },
1069
+ "collection": {
1070
+ "type": "string",
1071
+ "enum": ["exercises"]
1072
+ },
1073
+ "id": {
1074
+ "type": "string",
1075
+ "minLength": 1,
1076
+ "maxLength": 128
1077
+ },
1078
+ "after": {
1079
+ "type": "string",
1080
+ "minLength": 1,
1081
+ "maxLength": 4096
1082
+ },
1083
+ "epoch": {
1084
+ "type": "string",
1085
+ "minLength": 1,
1086
+ "maxLength": 128
1087
+ },
1088
+ "checkpoint": {
1089
+ "type": "string",
1090
+ "minLength": 1,
1091
+ "maxLength": 128
1092
+ },
1093
+ "archive": {
1094
+ "type": "string",
1095
+ "enum": ["active", "archived", "all"]
1096
+ }
1097
+ },
1098
+ "required": ["scope", "collection"],
1099
+ "additionalProperties": false
1100
+ },
1101
+ "scopes": ["exercises:read"],
1102
+ "route": "resources"
1103
+ },
1104
+ {
1105
+ "name": "fitness_read_health",
1106
+ "title": "Read health records",
1107
+ "description": "Read one authorized page or exact record from the listed health collections. Preserve epoch/revision and follow nextAfter only when needed. This tool cannot change data. Existing resource access and quotas apply.",
1108
+ "inputSchema": {
1109
+ "type": "object",
1110
+ "properties": {
1111
+ "scope": {
1112
+ "type": "string",
1113
+ "minLength": 1,
1114
+ "maxLength": 256
1115
+ },
1116
+ "collection": {
1117
+ "type": "string",
1118
+ "enum": ["health"]
1119
+ },
1120
+ "id": {
1121
+ "type": "string",
1122
+ "minLength": 1,
1123
+ "maxLength": 128
1124
+ },
1125
+ "after": {
1126
+ "type": "string",
1127
+ "minLength": 1,
1128
+ "maxLength": 4096
1129
+ },
1130
+ "epoch": {
1131
+ "type": "string",
1132
+ "minLength": 1,
1133
+ "maxLength": 128
1134
+ },
1135
+ "checkpoint": {
1136
+ "type": "string",
1137
+ "minLength": 1,
1138
+ "maxLength": 128
1139
+ },
1140
+ "archive": {
1141
+ "type": "string",
1142
+ "enum": ["active", "archived", "all"]
1143
+ }
1144
+ },
1145
+ "required": ["scope", "collection"],
1146
+ "additionalProperties": false
1147
+ },
1148
+ "scopes": ["health:read"],
1149
+ "route": "resources"
1150
+ },
1151
+ {
1152
+ "name": "fitness_read_metrics",
1153
+ "title": "Read metrics records",
1154
+ "description": "Read one authorized page or exact record from the listed metrics collections. Preserve epoch/revision and follow nextAfter only when needed. This tool cannot change data. Existing resource access and quotas apply.",
1155
+ "inputSchema": {
1156
+ "type": "object",
1157
+ "properties": {
1158
+ "scope": {
1159
+ "type": "string",
1160
+ "minLength": 1,
1161
+ "maxLength": 256
1162
+ },
1163
+ "collection": {
1164
+ "type": "string",
1165
+ "enum": ["runs", "sessions"]
1166
+ },
1167
+ "id": {
1168
+ "type": "string",
1169
+ "minLength": 1,
1170
+ "maxLength": 128
1171
+ },
1172
+ "after": {
1173
+ "type": "string",
1174
+ "minLength": 1,
1175
+ "maxLength": 4096
1176
+ },
1177
+ "epoch": {
1178
+ "type": "string",
1179
+ "minLength": 1,
1180
+ "maxLength": 128
1181
+ },
1182
+ "checkpoint": {
1183
+ "type": "string",
1184
+ "minLength": 1,
1185
+ "maxLength": 128
1186
+ },
1187
+ "archive": {
1188
+ "type": "string",
1189
+ "enum": ["active", "archived", "all"]
1190
+ }
1191
+ },
1192
+ "required": ["scope", "collection"],
1193
+ "additionalProperties": false
1194
+ },
1195
+ "scopes": ["metrics:read"],
1196
+ "route": "resources"
1197
+ },
1198
+ {
1199
+ "name": "fitness_read_planning",
1200
+ "title": "Read planning records",
1201
+ "description": "Read one authorized page or exact record from the listed planning collections. Preserve epoch/revision and follow nextAfter only when needed. This tool cannot change data. Existing resource access and quotas apply.",
1202
+ "inputSchema": {
1203
+ "type": "object",
1204
+ "properties": {
1205
+ "scope": {
1206
+ "type": "string",
1207
+ "minLength": 1,
1208
+ "maxLength": 256
1209
+ },
1210
+ "collection": {
1211
+ "type": "string",
1212
+ "enum": ["goals", "planning", "schedules"]
1213
+ },
1214
+ "id": {
1215
+ "type": "string",
1216
+ "minLength": 1,
1217
+ "maxLength": 128
1218
+ },
1219
+ "after": {
1220
+ "type": "string",
1221
+ "minLength": 1,
1222
+ "maxLength": 4096
1223
+ },
1224
+ "epoch": {
1225
+ "type": "string",
1226
+ "minLength": 1,
1227
+ "maxLength": 128
1228
+ },
1229
+ "checkpoint": {
1230
+ "type": "string",
1231
+ "minLength": 1,
1232
+ "maxLength": 128
1233
+ },
1234
+ "archive": {
1235
+ "type": "string",
1236
+ "enum": ["active", "archived", "all"]
1237
+ }
1238
+ },
1239
+ "required": ["scope", "collection"],
1240
+ "additionalProperties": false
1241
+ },
1242
+ "scopes": ["planning:read"],
1243
+ "route": "resources"
1244
+ },
1245
+ {
1246
+ "name": "fitness_read_programs",
1247
+ "title": "Read programs records",
1248
+ "description": "Read one authorized page or exact record from the listed programs collections. Preserve epoch/revision and follow nextAfter only when needed. This tool cannot change data. Existing resource access and quotas apply.",
1249
+ "inputSchema": {
1250
+ "type": "object",
1251
+ "properties": {
1252
+ "scope": {
1253
+ "type": "string",
1254
+ "minLength": 1,
1255
+ "maxLength": 256
1256
+ },
1257
+ "collection": {
1258
+ "type": "string",
1259
+ "enum": ["exerciseDocuments", "members", "programs", "workoutExercises", "workouts"]
1260
+ },
1261
+ "id": {
1262
+ "type": "string",
1263
+ "minLength": 1,
1264
+ "maxLength": 128
1265
+ },
1266
+ "after": {
1267
+ "type": "string",
1268
+ "minLength": 1,
1269
+ "maxLength": 4096
1270
+ },
1271
+ "epoch": {
1272
+ "type": "string",
1273
+ "minLength": 1,
1274
+ "maxLength": 128
1275
+ },
1276
+ "checkpoint": {
1277
+ "type": "string",
1278
+ "minLength": 1,
1279
+ "maxLength": 128
1280
+ },
1281
+ "archive": {
1282
+ "type": "string",
1283
+ "enum": ["active", "archived", "all"]
1284
+ }
1285
+ },
1286
+ "required": ["scope", "collection"],
1287
+ "additionalProperties": false
1288
+ },
1289
+ "scopes": ["programs:read"],
1290
+ "route": "resources"
1291
+ },
1292
+ {
1293
+ "name": "fitness_workflow",
1294
+ "title": "Workflow guides",
1295
+ "description": "Read reviewed product instructions for a specific workflow before unfamiliar operations. Explains available commands, permissions, pagination and remote versus local retry behavior; does not read personal data or grant access.",
1296
+ "inputSchema": {
1297
+ "type": "object",
1298
+ "properties": {
1299
+ "topic": {
1300
+ "type": "string",
1301
+ "enum": ["connection", "mutations", "catalogue", "planning", "progress", "coaching"]
1302
+ }
1303
+ },
1304
+ "required": ["topic"],
1305
+ "additionalProperties": false
1306
+ },
1307
+ "scopes": []
418
1308
  }
419
1309
  ]