@pulsarinteractive/geniusfitness 0.1.0-beta.2 → 0.1.0-beta.4

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"],
@@ -316,7 +316,7 @@
316
316
  {
317
317
  "name": "fitness_execute_command",
318
318
  "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.",
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. Prefer the permission-specific edit tools for new calls; this generic entry point remains for existing clients.",
320
320
  "inputSchema": {
321
321
  "type": "object",
322
322
  "properties": {
@@ -415,5 +415,861 @@
415
415
  "route": "commands",
416
416
  "write": true,
417
417
  "destructive": true
418
+ },
419
+ {
420
+ "name": "fitness_edit_exercises",
421
+ "title": "Apply approved exercises changes",
422
+ "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.",
423
+ "inputSchema": {
424
+ "type": "object",
425
+ "properties": {
426
+ "operationId": {
427
+ "type": "string",
428
+ "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}$"
429
+ },
430
+ "issuedAt": {
431
+ "type": "integer",
432
+ "minimum": 0
433
+ },
434
+ "kind": {
435
+ "type": "string",
436
+ "enum": ["exercise.create", "exercise.delete", "exercise.import", "exercise.update"]
437
+ },
438
+ "scope": {
439
+ "type": "string",
440
+ "minLength": 1,
441
+ "maxLength": 256
442
+ },
443
+ "id": {
444
+ "type": "string",
445
+ "minLength": 1,
446
+ "maxLength": 128
447
+ },
448
+ "epoch": {
449
+ "type": "string",
450
+ "minLength": 1,
451
+ "maxLength": 128
452
+ },
453
+ "expectedRevision": {
454
+ "anyOf": [
455
+ {
456
+ "type": "string",
457
+ "minLength": 1,
458
+ "maxLength": 32
459
+ },
460
+ {
461
+ "type": "null"
462
+ }
463
+ ]
464
+ },
465
+ "data": {
466
+ "type": "object",
467
+ "maxProperties": 40
468
+ }
469
+ },
470
+ "required": [
471
+ "operationId",
472
+ "issuedAt",
473
+ "kind",
474
+ "scope",
475
+ "id",
476
+ "epoch",
477
+ "expectedRevision",
478
+ "data"
479
+ ],
480
+ "additionalProperties": false
481
+ },
482
+ "scopes": ["exercises:write"],
483
+ "route": "commands",
484
+ "write": true,
485
+ "destructive": true
486
+ },
487
+ {
488
+ "name": "fitness_edit_health",
489
+ "title": "Apply approved health changes",
490
+ "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.",
491
+ "inputSchema": {
492
+ "type": "object",
493
+ "properties": {
494
+ "operationId": {
495
+ "type": "string",
496
+ "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}$"
497
+ },
498
+ "issuedAt": {
499
+ "type": "integer",
500
+ "minimum": 0
501
+ },
502
+ "kind": {
503
+ "type": "string",
504
+ "enum": ["health.create", "health.delete", "health.update"]
505
+ },
506
+ "scope": {
507
+ "type": "string",
508
+ "minLength": 1,
509
+ "maxLength": 256
510
+ },
511
+ "id": {
512
+ "type": "string",
513
+ "minLength": 1,
514
+ "maxLength": 128
515
+ },
516
+ "epoch": {
517
+ "type": "string",
518
+ "minLength": 1,
519
+ "maxLength": 128
520
+ },
521
+ "expectedRevision": {
522
+ "anyOf": [
523
+ {
524
+ "type": "string",
525
+ "minLength": 1,
526
+ "maxLength": 32
527
+ },
528
+ {
529
+ "type": "null"
530
+ }
531
+ ]
532
+ },
533
+ "data": {
534
+ "type": "object",
535
+ "maxProperties": 40
536
+ }
537
+ },
538
+ "required": [
539
+ "operationId",
540
+ "issuedAt",
541
+ "kind",
542
+ "scope",
543
+ "id",
544
+ "epoch",
545
+ "expectedRevision",
546
+ "data"
547
+ ],
548
+ "additionalProperties": false
549
+ },
550
+ "scopes": ["health:write"],
551
+ "route": "commands",
552
+ "write": true,
553
+ "destructive": true
554
+ },
555
+ {
556
+ "name": "fitness_edit_metrics",
557
+ "title": "Apply approved metrics changes",
558
+ "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.",
559
+ "inputSchema": {
560
+ "type": "object",
561
+ "properties": {
562
+ "operationId": {
563
+ "type": "string",
564
+ "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}$"
565
+ },
566
+ "issuedAt": {
567
+ "type": "integer",
568
+ "minimum": 0
569
+ },
570
+ "kind": {
571
+ "type": "string",
572
+ "enum": [
573
+ "run.create",
574
+ "run.delete",
575
+ "run.update",
576
+ "session.create",
577
+ "session.delete",
578
+ "session.update"
579
+ ]
580
+ },
581
+ "scope": {
582
+ "type": "string",
583
+ "minLength": 1,
584
+ "maxLength": 256
585
+ },
586
+ "id": {
587
+ "type": "string",
588
+ "minLength": 1,
589
+ "maxLength": 128
590
+ },
591
+ "epoch": {
592
+ "type": "string",
593
+ "minLength": 1,
594
+ "maxLength": 128
595
+ },
596
+ "expectedRevision": {
597
+ "anyOf": [
598
+ {
599
+ "type": "string",
600
+ "minLength": 1,
601
+ "maxLength": 32
602
+ },
603
+ {
604
+ "type": "null"
605
+ }
606
+ ]
607
+ },
608
+ "data": {
609
+ "type": "object",
610
+ "maxProperties": 40
611
+ }
612
+ },
613
+ "required": [
614
+ "operationId",
615
+ "issuedAt",
616
+ "kind",
617
+ "scope",
618
+ "id",
619
+ "epoch",
620
+ "expectedRevision",
621
+ "data"
622
+ ],
623
+ "additionalProperties": false
624
+ },
625
+ "scopes": ["metrics:write"],
626
+ "route": "commands",
627
+ "write": true,
628
+ "destructive": true
629
+ },
630
+ {
631
+ "name": "fitness_coach_metrics",
632
+ "title": "Coach: apply approved metrics changes",
633
+ "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.",
634
+ "inputSchema": {
635
+ "type": "object",
636
+ "properties": {
637
+ "operationId": {
638
+ "type": "string",
639
+ "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}$"
640
+ },
641
+ "issuedAt": {
642
+ "type": "integer",
643
+ "minimum": 0
644
+ },
645
+ "kind": {
646
+ "type": "string",
647
+ "enum": [
648
+ "run.create",
649
+ "run.delete",
650
+ "run.update",
651
+ "session.create",
652
+ "session.delete",
653
+ "session.update"
654
+ ]
655
+ },
656
+ "scope": {
657
+ "type": "string",
658
+ "minLength": 1,
659
+ "maxLength": 256
660
+ },
661
+ "id": {
662
+ "type": "string",
663
+ "minLength": 1,
664
+ "maxLength": 128
665
+ },
666
+ "epoch": {
667
+ "type": "string",
668
+ "minLength": 1,
669
+ "maxLength": 128
670
+ },
671
+ "expectedRevision": {
672
+ "anyOf": [
673
+ {
674
+ "type": "string",
675
+ "minLength": 1,
676
+ "maxLength": 32
677
+ },
678
+ {
679
+ "type": "null"
680
+ }
681
+ ]
682
+ },
683
+ "data": {
684
+ "type": "object",
685
+ "maxProperties": 40
686
+ }
687
+ },
688
+ "required": [
689
+ "operationId",
690
+ "issuedAt",
691
+ "kind",
692
+ "scope",
693
+ "id",
694
+ "epoch",
695
+ "expectedRevision",
696
+ "data"
697
+ ],
698
+ "additionalProperties": false
699
+ },
700
+ "scopes": ["metrics:write", "coaching:write"],
701
+ "route": "commands",
702
+ "write": true,
703
+ "destructive": true
704
+ },
705
+ {
706
+ "name": "fitness_edit_planning",
707
+ "title": "Apply approved planning changes",
708
+ "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.",
709
+ "inputSchema": {
710
+ "type": "object",
711
+ "properties": {
712
+ "operationId": {
713
+ "type": "string",
714
+ "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}$"
715
+ },
716
+ "issuedAt": {
717
+ "type": "integer",
718
+ "minimum": 0
719
+ },
720
+ "kind": {
721
+ "type": "string",
722
+ "enum": [
723
+ "goal.create",
724
+ "goal.delete",
725
+ "goal.update",
726
+ "planning.create",
727
+ "planning.delete",
728
+ "planning.update",
729
+ "schedule.create",
730
+ "schedule.delete",
731
+ "schedule.update"
732
+ ]
733
+ },
734
+ "scope": {
735
+ "type": "string",
736
+ "minLength": 1,
737
+ "maxLength": 256
738
+ },
739
+ "id": {
740
+ "type": "string",
741
+ "minLength": 1,
742
+ "maxLength": 128
743
+ },
744
+ "epoch": {
745
+ "type": "string",
746
+ "minLength": 1,
747
+ "maxLength": 128
748
+ },
749
+ "expectedRevision": {
750
+ "anyOf": [
751
+ {
752
+ "type": "string",
753
+ "minLength": 1,
754
+ "maxLength": 32
755
+ },
756
+ {
757
+ "type": "null"
758
+ }
759
+ ]
760
+ },
761
+ "data": {
762
+ "type": "object",
763
+ "maxProperties": 40
764
+ }
765
+ },
766
+ "required": [
767
+ "operationId",
768
+ "issuedAt",
769
+ "kind",
770
+ "scope",
771
+ "id",
772
+ "epoch",
773
+ "expectedRevision",
774
+ "data"
775
+ ],
776
+ "additionalProperties": false
777
+ },
778
+ "scopes": ["planning:write"],
779
+ "route": "commands",
780
+ "write": true,
781
+ "destructive": true
782
+ },
783
+ {
784
+ "name": "fitness_coach_planning",
785
+ "title": "Coach: apply approved planning changes",
786
+ "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.",
787
+ "inputSchema": {
788
+ "type": "object",
789
+ "properties": {
790
+ "operationId": {
791
+ "type": "string",
792
+ "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}$"
793
+ },
794
+ "issuedAt": {
795
+ "type": "integer",
796
+ "minimum": 0
797
+ },
798
+ "kind": {
799
+ "type": "string",
800
+ "enum": [
801
+ "goal.create",
802
+ "goal.delete",
803
+ "goal.update",
804
+ "planning.create",
805
+ "planning.delete",
806
+ "planning.update",
807
+ "schedule.create",
808
+ "schedule.delete",
809
+ "schedule.update"
810
+ ]
811
+ },
812
+ "scope": {
813
+ "type": "string",
814
+ "minLength": 1,
815
+ "maxLength": 256
816
+ },
817
+ "id": {
818
+ "type": "string",
819
+ "minLength": 1,
820
+ "maxLength": 128
821
+ },
822
+ "epoch": {
823
+ "type": "string",
824
+ "minLength": 1,
825
+ "maxLength": 128
826
+ },
827
+ "expectedRevision": {
828
+ "anyOf": [
829
+ {
830
+ "type": "string",
831
+ "minLength": 1,
832
+ "maxLength": 32
833
+ },
834
+ {
835
+ "type": "null"
836
+ }
837
+ ]
838
+ },
839
+ "data": {
840
+ "type": "object",
841
+ "maxProperties": 40
842
+ }
843
+ },
844
+ "required": [
845
+ "operationId",
846
+ "issuedAt",
847
+ "kind",
848
+ "scope",
849
+ "id",
850
+ "epoch",
851
+ "expectedRevision",
852
+ "data"
853
+ ],
854
+ "additionalProperties": false
855
+ },
856
+ "scopes": ["planning:write", "coaching:write"],
857
+ "route": "commands",
858
+ "write": true,
859
+ "destructive": true
860
+ },
861
+ {
862
+ "name": "fitness_edit_programs",
863
+ "title": "Apply approved programs changes",
864
+ "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.",
865
+ "inputSchema": {
866
+ "type": "object",
867
+ "properties": {
868
+ "operationId": {
869
+ "type": "string",
870
+ "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}$"
871
+ },
872
+ "issuedAt": {
873
+ "type": "integer",
874
+ "minimum": 0
875
+ },
876
+ "kind": {
877
+ "type": "string",
878
+ "enum": [
879
+ "exercise.document.create",
880
+ "exercise.document.delete",
881
+ "exercise.document.update",
882
+ "program.create",
883
+ "program.delete",
884
+ "program.update",
885
+ "workout.create",
886
+ "workout.delete",
887
+ "workout.exercise.create",
888
+ "workout.exercise.delete",
889
+ "workout.exercise.update",
890
+ "workout.update"
891
+ ]
892
+ },
893
+ "scope": {
894
+ "type": "string",
895
+ "minLength": 1,
896
+ "maxLength": 256
897
+ },
898
+ "id": {
899
+ "type": "string",
900
+ "minLength": 1,
901
+ "maxLength": 128
902
+ },
903
+ "epoch": {
904
+ "type": "string",
905
+ "minLength": 1,
906
+ "maxLength": 128
907
+ },
908
+ "expectedRevision": {
909
+ "anyOf": [
910
+ {
911
+ "type": "string",
912
+ "minLength": 1,
913
+ "maxLength": 32
914
+ },
915
+ {
916
+ "type": "null"
917
+ }
918
+ ]
919
+ },
920
+ "data": {
921
+ "type": "object",
922
+ "maxProperties": 40
923
+ }
924
+ },
925
+ "required": [
926
+ "operationId",
927
+ "issuedAt",
928
+ "kind",
929
+ "scope",
930
+ "id",
931
+ "epoch",
932
+ "expectedRevision",
933
+ "data"
934
+ ],
935
+ "additionalProperties": false
936
+ },
937
+ "scopes": ["programs:write"],
938
+ "route": "commands",
939
+ "write": true,
940
+ "destructive": true
941
+ },
942
+ {
943
+ "name": "fitness_coach_programs",
944
+ "title": "Coach: apply approved programs changes",
945
+ "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.",
946
+ "inputSchema": {
947
+ "type": "object",
948
+ "properties": {
949
+ "operationId": {
950
+ "type": "string",
951
+ "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}$"
952
+ },
953
+ "issuedAt": {
954
+ "type": "integer",
955
+ "minimum": 0
956
+ },
957
+ "kind": {
958
+ "type": "string",
959
+ "enum": [
960
+ "exercise.document.create",
961
+ "exercise.document.delete",
962
+ "exercise.document.update",
963
+ "program.create",
964
+ "program.delete",
965
+ "program.update",
966
+ "workout.create",
967
+ "workout.delete",
968
+ "workout.exercise.create",
969
+ "workout.exercise.delete",
970
+ "workout.exercise.update",
971
+ "workout.update"
972
+ ]
973
+ },
974
+ "scope": {
975
+ "type": "string",
976
+ "minLength": 1,
977
+ "maxLength": 256
978
+ },
979
+ "id": {
980
+ "type": "string",
981
+ "minLength": 1,
982
+ "maxLength": 128
983
+ },
984
+ "epoch": {
985
+ "type": "string",
986
+ "minLength": 1,
987
+ "maxLength": 128
988
+ },
989
+ "expectedRevision": {
990
+ "anyOf": [
991
+ {
992
+ "type": "string",
993
+ "minLength": 1,
994
+ "maxLength": 32
995
+ },
996
+ {
997
+ "type": "null"
998
+ }
999
+ ]
1000
+ },
1001
+ "data": {
1002
+ "type": "object",
1003
+ "maxProperties": 40
1004
+ }
1005
+ },
1006
+ "required": [
1007
+ "operationId",
1008
+ "issuedAt",
1009
+ "kind",
1010
+ "scope",
1011
+ "id",
1012
+ "epoch",
1013
+ "expectedRevision",
1014
+ "data"
1015
+ ],
1016
+ "additionalProperties": false
1017
+ },
1018
+ "scopes": ["programs:write", "coaching:write"],
1019
+ "route": "commands",
1020
+ "write": true,
1021
+ "destructive": true
1022
+ },
1023
+ {
1024
+ "name": "fitness_read_exercises",
1025
+ "title": "Read exercises records",
1026
+ "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.",
1027
+ "inputSchema": {
1028
+ "type": "object",
1029
+ "properties": {
1030
+ "scope": {
1031
+ "type": "string",
1032
+ "minLength": 1,
1033
+ "maxLength": 256
1034
+ },
1035
+ "collection": {
1036
+ "type": "string",
1037
+ "enum": ["exercises"]
1038
+ },
1039
+ "id": {
1040
+ "type": "string",
1041
+ "minLength": 1,
1042
+ "maxLength": 128
1043
+ },
1044
+ "after": {
1045
+ "type": "string",
1046
+ "minLength": 1,
1047
+ "maxLength": 4096
1048
+ },
1049
+ "epoch": {
1050
+ "type": "string",
1051
+ "minLength": 1,
1052
+ "maxLength": 128
1053
+ },
1054
+ "checkpoint": {
1055
+ "type": "string",
1056
+ "minLength": 1,
1057
+ "maxLength": 128
1058
+ },
1059
+ "archive": {
1060
+ "type": "string",
1061
+ "enum": ["active", "archived", "all"]
1062
+ }
1063
+ },
1064
+ "required": ["scope", "collection"],
1065
+ "additionalProperties": false
1066
+ },
1067
+ "scopes": ["exercises:read"],
1068
+ "route": "resources"
1069
+ },
1070
+ {
1071
+ "name": "fitness_read_health",
1072
+ "title": "Read health records",
1073
+ "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.",
1074
+ "inputSchema": {
1075
+ "type": "object",
1076
+ "properties": {
1077
+ "scope": {
1078
+ "type": "string",
1079
+ "minLength": 1,
1080
+ "maxLength": 256
1081
+ },
1082
+ "collection": {
1083
+ "type": "string",
1084
+ "enum": ["health"]
1085
+ },
1086
+ "id": {
1087
+ "type": "string",
1088
+ "minLength": 1,
1089
+ "maxLength": 128
1090
+ },
1091
+ "after": {
1092
+ "type": "string",
1093
+ "minLength": 1,
1094
+ "maxLength": 4096
1095
+ },
1096
+ "epoch": {
1097
+ "type": "string",
1098
+ "minLength": 1,
1099
+ "maxLength": 128
1100
+ },
1101
+ "checkpoint": {
1102
+ "type": "string",
1103
+ "minLength": 1,
1104
+ "maxLength": 128
1105
+ },
1106
+ "archive": {
1107
+ "type": "string",
1108
+ "enum": ["active", "archived", "all"]
1109
+ }
1110
+ },
1111
+ "required": ["scope", "collection"],
1112
+ "additionalProperties": false
1113
+ },
1114
+ "scopes": ["health:read"],
1115
+ "route": "resources"
1116
+ },
1117
+ {
1118
+ "name": "fitness_read_metrics",
1119
+ "title": "Read metrics records",
1120
+ "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.",
1121
+ "inputSchema": {
1122
+ "type": "object",
1123
+ "properties": {
1124
+ "scope": {
1125
+ "type": "string",
1126
+ "minLength": 1,
1127
+ "maxLength": 256
1128
+ },
1129
+ "collection": {
1130
+ "type": "string",
1131
+ "enum": ["runs", "sessions"]
1132
+ },
1133
+ "id": {
1134
+ "type": "string",
1135
+ "minLength": 1,
1136
+ "maxLength": 128
1137
+ },
1138
+ "after": {
1139
+ "type": "string",
1140
+ "minLength": 1,
1141
+ "maxLength": 4096
1142
+ },
1143
+ "epoch": {
1144
+ "type": "string",
1145
+ "minLength": 1,
1146
+ "maxLength": 128
1147
+ },
1148
+ "checkpoint": {
1149
+ "type": "string",
1150
+ "minLength": 1,
1151
+ "maxLength": 128
1152
+ },
1153
+ "archive": {
1154
+ "type": "string",
1155
+ "enum": ["active", "archived", "all"]
1156
+ }
1157
+ },
1158
+ "required": ["scope", "collection"],
1159
+ "additionalProperties": false
1160
+ },
1161
+ "scopes": ["metrics:read"],
1162
+ "route": "resources"
1163
+ },
1164
+ {
1165
+ "name": "fitness_read_planning",
1166
+ "title": "Read planning records",
1167
+ "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.",
1168
+ "inputSchema": {
1169
+ "type": "object",
1170
+ "properties": {
1171
+ "scope": {
1172
+ "type": "string",
1173
+ "minLength": 1,
1174
+ "maxLength": 256
1175
+ },
1176
+ "collection": {
1177
+ "type": "string",
1178
+ "enum": ["goals", "planning", "schedules"]
1179
+ },
1180
+ "id": {
1181
+ "type": "string",
1182
+ "minLength": 1,
1183
+ "maxLength": 128
1184
+ },
1185
+ "after": {
1186
+ "type": "string",
1187
+ "minLength": 1,
1188
+ "maxLength": 4096
1189
+ },
1190
+ "epoch": {
1191
+ "type": "string",
1192
+ "minLength": 1,
1193
+ "maxLength": 128
1194
+ },
1195
+ "checkpoint": {
1196
+ "type": "string",
1197
+ "minLength": 1,
1198
+ "maxLength": 128
1199
+ },
1200
+ "archive": {
1201
+ "type": "string",
1202
+ "enum": ["active", "archived", "all"]
1203
+ }
1204
+ },
1205
+ "required": ["scope", "collection"],
1206
+ "additionalProperties": false
1207
+ },
1208
+ "scopes": ["planning:read"],
1209
+ "route": "resources"
1210
+ },
1211
+ {
1212
+ "name": "fitness_read_programs",
1213
+ "title": "Read programs records",
1214
+ "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.",
1215
+ "inputSchema": {
1216
+ "type": "object",
1217
+ "properties": {
1218
+ "scope": {
1219
+ "type": "string",
1220
+ "minLength": 1,
1221
+ "maxLength": 256
1222
+ },
1223
+ "collection": {
1224
+ "type": "string",
1225
+ "enum": ["exerciseDocuments", "members", "programs", "workoutExercises", "workouts"]
1226
+ },
1227
+ "id": {
1228
+ "type": "string",
1229
+ "minLength": 1,
1230
+ "maxLength": 128
1231
+ },
1232
+ "after": {
1233
+ "type": "string",
1234
+ "minLength": 1,
1235
+ "maxLength": 4096
1236
+ },
1237
+ "epoch": {
1238
+ "type": "string",
1239
+ "minLength": 1,
1240
+ "maxLength": 128
1241
+ },
1242
+ "checkpoint": {
1243
+ "type": "string",
1244
+ "minLength": 1,
1245
+ "maxLength": 128
1246
+ },
1247
+ "archive": {
1248
+ "type": "string",
1249
+ "enum": ["active", "archived", "all"]
1250
+ }
1251
+ },
1252
+ "required": ["scope", "collection"],
1253
+ "additionalProperties": false
1254
+ },
1255
+ "scopes": ["programs:read"],
1256
+ "route": "resources"
1257
+ },
1258
+ {
1259
+ "name": "fitness_workflow",
1260
+ "title": "Workflow guides",
1261
+ "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.",
1262
+ "inputSchema": {
1263
+ "type": "object",
1264
+ "properties": {
1265
+ "topic": {
1266
+ "type": "string",
1267
+ "enum": ["connection", "mutations", "catalogue", "planning", "progress", "coaching"]
1268
+ }
1269
+ },
1270
+ "required": ["topic"],
1271
+ "additionalProperties": false
1272
+ },
1273
+ "scopes": []
418
1274
  }
419
1275
  ]