@ourroadmaps/mcp 0.29.0 → 0.30.0
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.
- package/dist/index.js +551 -493
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -903,31 +903,476 @@ var statusUpdateSchema = z14.object({
|
|
|
903
903
|
items: z14.array(statusUpdateItemSchema).optional()
|
|
904
904
|
});
|
|
905
905
|
var statusUpdateListSchema = z14.array(statusUpdateSchema);
|
|
906
|
-
// ../../packages/shared/src/schemas/
|
|
906
|
+
// ../../packages/shared/src/schemas/tool-inputs.ts
|
|
907
907
|
import { z as z15 } from "zod";
|
|
908
|
-
var
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
908
|
+
var paginationFields = {
|
|
909
|
+
limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
|
|
910
|
+
offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
|
|
911
|
+
};
|
|
912
|
+
var idField = (entity) => z15.string().describe(`The UUID of the ${entity}`);
|
|
913
|
+
var uuidField = (entity) => z15.string().uuid().describe(`The UUID of the ${entity}`);
|
|
914
|
+
var orderItemsField = (entity) => z15.array(z15.object({
|
|
915
|
+
id: z15.string().describe(`The UUID of the ${entity}`),
|
|
916
|
+
order: z15.number().int().min(0).describe("The new order value (0-based)")
|
|
917
|
+
})).describe(`Array of ${entity}s with their new order values`);
|
|
918
|
+
var yyyyMmDdField = (description) => z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe(description);
|
|
919
|
+
var sizeSchema = z15.enum(["xs", "s", "m", "l", "xl"]);
|
|
920
|
+
var searchRoadmapsInput = {
|
|
921
|
+
query: z15.string().optional().describe("Search query to match against title or description"),
|
|
922
|
+
status: roadmapStatusSchema.optional().describe("Filter by status"),
|
|
923
|
+
horizon: horizonSchema.optional().describe("Filter by planning horizon"),
|
|
924
|
+
phase: z15.string().optional().describe("Filter by phase"),
|
|
925
|
+
phaseStep: z15.string().optional().describe("Filter by phase step"),
|
|
926
|
+
...paginationFields
|
|
927
|
+
};
|
|
928
|
+
var getRoadmapInput = {
|
|
929
|
+
id: idField("roadmap item")
|
|
930
|
+
};
|
|
931
|
+
var createRoadmapItemInput = {
|
|
932
|
+
title: z15.string().describe("Title of the roadmap item"),
|
|
933
|
+
status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
|
|
934
|
+
horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
|
|
935
|
+
phase: z15.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
|
|
936
|
+
phaseStep: z15.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
|
|
937
|
+
initiativeId: z15.string().optional().describe("UUID of initiative to link this item to on creation"),
|
|
938
|
+
dateGranularity: dateGranularitySchema.optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
|
|
939
|
+
dateValue: z15.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
|
|
940
|
+
targetGranularity: dateGranularitySchema.optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
|
|
941
|
+
targetValue: z15.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
|
|
942
|
+
};
|
|
943
|
+
var updateRoadmapItemInput = {
|
|
944
|
+
id: idField("roadmap item to update"),
|
|
945
|
+
title: z15.string().optional().describe("New title"),
|
|
946
|
+
status: roadmapStatusSchema.optional().describe("New status"),
|
|
947
|
+
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
948
|
+
phase: z15.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
|
|
949
|
+
phaseStep: z15.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
|
|
950
|
+
value: z15.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
|
|
951
|
+
effort: effortSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
|
|
952
|
+
order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
|
|
953
|
+
initiativeId: z15.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
|
|
954
|
+
designDescription: z15.string().nullable().optional().describe("Description for the Design phase"),
|
|
955
|
+
planDescription: z15.string().nullable().optional().describe("Description for the Planning phase"),
|
|
956
|
+
buildDescription: z15.string().nullable().optional().describe("Description for the Build phase"),
|
|
957
|
+
releaseDescription: z15.string().nullable().optional().describe("Description for the Release phase"),
|
|
958
|
+
prompt: z15.string().nullable().optional().describe("Build prompt for the roadmap item"),
|
|
959
|
+
dateGranularity: dateGranularitySchema.nullable().optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
|
|
960
|
+
dateValue: z15.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
|
|
961
|
+
targetGranularity: dateGranularitySchema.nullable().optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
|
|
962
|
+
targetValue: z15.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
|
|
963
|
+
};
|
|
964
|
+
var deleteRoadmapItemInput = {
|
|
965
|
+
id: idField("roadmap item to delete")
|
|
966
|
+
};
|
|
967
|
+
var reorderRoadmapsInput = {
|
|
968
|
+
items: z15.array(z15.object({
|
|
969
|
+
id: z15.string().describe("The UUID of the roadmap item"),
|
|
970
|
+
order: z15.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
|
|
971
|
+
})).describe("Array of roadmap items with their new order values")
|
|
972
|
+
};
|
|
973
|
+
var savePrdInput = {
|
|
974
|
+
roadmapId: idField("roadmap item"),
|
|
975
|
+
what: z15.string().nullable().describe("What is being built - the feature description"),
|
|
976
|
+
why: z15.string().nullable().describe("Why this is being built - the business justification"),
|
|
977
|
+
outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes/success criteria")
|
|
978
|
+
};
|
|
979
|
+
var updateBrainstormNotesInput = {
|
|
980
|
+
roadmapId: idField("roadmap item"),
|
|
981
|
+
notes: z15.string().describe("The brainstorm notes content")
|
|
982
|
+
};
|
|
983
|
+
var searchFeaturesInput = {
|
|
984
|
+
query: z15.string().optional().describe("Search query to match against name"),
|
|
985
|
+
type: featureTypeSchema.optional().describe("Filter by type (feature or area)")
|
|
986
|
+
};
|
|
987
|
+
var getFeatureInput = {
|
|
988
|
+
id: idField("feature")
|
|
989
|
+
};
|
|
990
|
+
var addFeatureInput = {
|
|
991
|
+
name: z15.string().describe("Name of the feature"),
|
|
992
|
+
description: z15.string().optional().describe("Description of the feature"),
|
|
993
|
+
type: featureTypeSchema.optional().describe('Type - "feature" for specific functionality, "area" for grouping (defaults to "feature")'),
|
|
994
|
+
parentId: z15.string().optional().describe("UUID of parent feature/area to nest under"),
|
|
995
|
+
outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes for this feature"),
|
|
996
|
+
linkToRoadmapId: z15.string().optional().describe("UUID of roadmap item to link this feature to")
|
|
997
|
+
};
|
|
998
|
+
var updateFeatureInput = {
|
|
999
|
+
id: idField("feature to update"),
|
|
1000
|
+
name: z15.string().optional().describe("New name for the feature"),
|
|
1001
|
+
type: featureTypeSchema.optional().describe('New type - "feature" or "area"'),
|
|
1002
|
+
parentId: z15.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
|
|
1003
|
+
};
|
|
1004
|
+
var deleteFeatureInput = {
|
|
1005
|
+
id: idField("feature to delete")
|
|
1006
|
+
};
|
|
1007
|
+
var searchIdeasInput = {
|
|
1008
|
+
query: z15.string().optional().describe("Search query to match against title or description"),
|
|
1009
|
+
status: ideaStatusSchema.optional().describe("Filter by status")
|
|
1010
|
+
};
|
|
1011
|
+
var getIdeaInput = {
|
|
1012
|
+
id: idField("idea")
|
|
1013
|
+
};
|
|
1014
|
+
var captureIdeaInput = {
|
|
1015
|
+
title: z15.string().describe("Title of the idea"),
|
|
1016
|
+
description: z15.string().optional().describe("Detailed description of the idea"),
|
|
1017
|
+
source: z15.string().optional().describe('Source of the idea (defaults to "claude-code")')
|
|
1018
|
+
};
|
|
1019
|
+
var updateIdeaInput = {
|
|
1020
|
+
id: idField("idea to update"),
|
|
1021
|
+
title: z15.string().optional().describe("New title"),
|
|
1022
|
+
description: z15.string().nullable().optional().describe("New description"),
|
|
1023
|
+
status: ideaStatusSchema.optional().describe("New status"),
|
|
1024
|
+
value: sizeSchema.nullable().optional().describe("Estimated value"),
|
|
1025
|
+
effort: sizeSchema.nullable().optional().describe("Estimated effort")
|
|
1026
|
+
};
|
|
1027
|
+
var deleteIdeaInput = {
|
|
1028
|
+
id: idField("idea to delete")
|
|
1029
|
+
};
|
|
1030
|
+
var updateStrategyInput = {
|
|
1031
|
+
vision: z15.string().nullable().optional().describe("The vision statement - where the product is headed"),
|
|
1032
|
+
mission: z15.string().nullable().optional().describe("The mission statement - why the product exists")
|
|
1033
|
+
};
|
|
1034
|
+
var createScenarioInput = {
|
|
1035
|
+
title: z15.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
|
|
1036
|
+
description: z15.string().nullable().optional().describe("Detailed description of the scenario workflow")
|
|
1037
|
+
};
|
|
1038
|
+
var updateScenarioInput = {
|
|
1039
|
+
id: idField("scenario to update"),
|
|
1040
|
+
title: z15.string().optional().describe("New title"),
|
|
1041
|
+
description: z15.string().nullable().optional().describe("New description")
|
|
1042
|
+
};
|
|
1043
|
+
var deleteScenarioInput = {
|
|
1044
|
+
id: idField("scenario to delete")
|
|
1045
|
+
};
|
|
1046
|
+
var searchProductsInput = {
|
|
1047
|
+
query: z15.string().optional().describe("Search query to match against product name"),
|
|
1048
|
+
type: productTypeSchema.optional().describe("Filter by product type")
|
|
1049
|
+
};
|
|
1050
|
+
var getProductInput = {
|
|
1051
|
+
id: idField("product")
|
|
1052
|
+
};
|
|
1053
|
+
var createProductInput = {
|
|
1054
|
+
type: productTypeSchema.describe("Type of product"),
|
|
1055
|
+
name: z15.string().describe("Name of the product"),
|
|
1056
|
+
parentId: z15.string().nullable().optional().describe("UUID of parent product to nest under")
|
|
1057
|
+
};
|
|
1058
|
+
var updateProductInput = {
|
|
1059
|
+
id: idField("product to update"),
|
|
1060
|
+
name: z15.string().optional().describe("New name"),
|
|
1061
|
+
parentId: z15.string().nullable().optional().describe("New parent product UUID, or null to move to root")
|
|
1062
|
+
};
|
|
1063
|
+
var deleteProductInput = {
|
|
1064
|
+
id: idField("product to delete")
|
|
1065
|
+
};
|
|
1066
|
+
var getProductDocumentationInput = {
|
|
1067
|
+
productId: idField("product")
|
|
1068
|
+
};
|
|
1069
|
+
var updateProductDocumentationInput = {
|
|
1070
|
+
productId: idField("product"),
|
|
1071
|
+
designSystem: z15.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
|
|
1072
|
+
adrs: z15.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
|
|
1073
|
+
};
|
|
1074
|
+
var createAudienceInput = {
|
|
1075
|
+
name: z15.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
|
|
1076
|
+
description: z15.string().nullable().optional().describe("Description of the audience")
|
|
1077
|
+
};
|
|
1078
|
+
var updateAudienceInput = {
|
|
1079
|
+
id: idField("audience to update"),
|
|
1080
|
+
name: z15.string().optional().describe("New name"),
|
|
1081
|
+
description: z15.string().nullable().optional().describe("New description")
|
|
1082
|
+
};
|
|
1083
|
+
var deleteAudienceInput = {
|
|
1084
|
+
id: idField("audience to delete")
|
|
1085
|
+
};
|
|
1086
|
+
var getHistoryInput = {
|
|
1087
|
+
startDate: yyyyMmDdField("Start date in YYYY-MM-DD format"),
|
|
1088
|
+
endDate: yyyyMmDdField("End date in YYYY-MM-DD format"),
|
|
1089
|
+
entityType: z15.enum([
|
|
1090
|
+
"roadmap",
|
|
1091
|
+
"feature",
|
|
1092
|
+
"idea",
|
|
1093
|
+
"prd",
|
|
1094
|
+
"wireframe",
|
|
1095
|
+
"product",
|
|
1096
|
+
"audience",
|
|
1097
|
+
"scenario"
|
|
1098
|
+
]).optional().describe("Filter to specific entity type")
|
|
1099
|
+
};
|
|
1100
|
+
var getHistorySummaryInput = {
|
|
1101
|
+
startDate: yyyyMmDdField("Start date in YYYY-MM-DD format"),
|
|
1102
|
+
endDate: yyyyMmDdField("End date in YYYY-MM-DD format")
|
|
1103
|
+
};
|
|
1104
|
+
var createStatusUpdateInput = {
|
|
1105
|
+
startDate: yyyyMmDdField("Report period start date in YYYY-MM-DD format"),
|
|
1106
|
+
endDate: yyyyMmDdField("Report period end date in YYYY-MM-DD format"),
|
|
1107
|
+
content: z15.string().describe("The markdown content of the status report"),
|
|
1108
|
+
title: z15.string().optional().describe("Optional title for the report"),
|
|
1109
|
+
items: z15.array(z15.object({
|
|
1110
|
+
roadmapItemId: z15.string().describe("UUID of the roadmap item"),
|
|
1111
|
+
status: z15.string().describe("Status of the item at report creation time")
|
|
1112
|
+
})).optional().describe("Roadmap items to include in the report snapshot")
|
|
1113
|
+
};
|
|
1114
|
+
var saveStoriesInput = {
|
|
1115
|
+
roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
|
|
1116
|
+
epics: z15.array(z15.object({
|
|
1117
|
+
title: z15.string().min(1).describe("Title of the epic"),
|
|
1118
|
+
description: z15.string().nullable().optional().describe("Description of the epic"),
|
|
1119
|
+
stories: z15.array(z15.object({
|
|
1120
|
+
title: z15.string().min(1).describe("Title of the story"),
|
|
1121
|
+
description: z15.string().nullable().optional().describe("Description of the story")
|
|
1122
|
+
})).optional().describe("Stories within this epic")
|
|
1123
|
+
})).optional().describe("List of epics with their nested stories"),
|
|
1124
|
+
stories: z15.array(z15.object({
|
|
1125
|
+
title: z15.string().min(1).describe("Title of the story"),
|
|
1126
|
+
description: z15.string().nullable().optional().describe("Description of the story")
|
|
1127
|
+
})).optional().describe("List of standalone stories (not part of any epic)")
|
|
1128
|
+
};
|
|
1129
|
+
var searchInitiativesInput = {
|
|
1130
|
+
query: z15.string().optional().describe("Search query to match against title or description"),
|
|
1131
|
+
horizon: horizonSchema.optional().describe("Filter by planning horizon"),
|
|
1132
|
+
...paginationFields
|
|
1133
|
+
};
|
|
1134
|
+
var getInitiativeInput = {
|
|
1135
|
+
id: idField("initiative")
|
|
1136
|
+
};
|
|
1137
|
+
var createInitiativeInput = {
|
|
1138
|
+
title: z15.string().describe("Title of the initiative"),
|
|
1139
|
+
description: z15.string().optional().describe("Description of the initiative (markdown)"),
|
|
1140
|
+
horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
|
|
1141
|
+
dateGranularity: dateGranularitySchema.optional().describe("Target date granularity: day, month, quarter, half-year, or year"),
|
|
1142
|
+
dateValue: z15.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
|
|
1143
|
+
targetDate: z15.string().optional().describe("Target date in YYYY-MM-DD format")
|
|
1144
|
+
};
|
|
1145
|
+
var updateInitiativeInput = {
|
|
1146
|
+
id: idField("initiative to update"),
|
|
1147
|
+
title: z15.string().optional().describe("New title"),
|
|
1148
|
+
description: z15.string().nullable().optional().describe("New description (null to clear)"),
|
|
1149
|
+
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
1150
|
+
dateGranularity: dateGranularitySchema.nullable().optional().describe("New target date granularity (null to clear)"),
|
|
1151
|
+
dateValue: z15.string().nullable().optional().describe("New target date value (null to clear)"),
|
|
1152
|
+
targetDate: z15.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
|
|
1153
|
+
order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
|
|
1154
|
+
};
|
|
1155
|
+
var deleteInitiativeInput = {
|
|
1156
|
+
id: idField("initiative to delete")
|
|
1157
|
+
};
|
|
1158
|
+
var reorderInitiativesInput = {
|
|
1159
|
+
items: orderItemsField("initiative")
|
|
1160
|
+
};
|
|
1161
|
+
var uploadWireframeInput = {
|
|
1162
|
+
roadmapId: idField("roadmap item"),
|
|
1163
|
+
filePath: z15.string().describe("Absolute path to the image file on disk"),
|
|
1164
|
+
description: z15.string().optional().describe("Optional description of the wireframe"),
|
|
1165
|
+
outcomeIds: z15.array(z15.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
|
|
1166
|
+
};
|
|
1167
|
+
var updateWireframeInput = {
|
|
1168
|
+
id: idField("wireframe"),
|
|
1169
|
+
description: z15.string().nullable().optional().describe("New description for the wireframe"),
|
|
1170
|
+
outcomeIds: z15.array(z15.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
|
|
1171
|
+
};
|
|
1172
|
+
var deleteWireframeInput = {
|
|
1173
|
+
id: idField("wireframe to delete")
|
|
1174
|
+
};
|
|
1175
|
+
var uploadBrainstormMediaInput = {
|
|
1176
|
+
roadmapId: idField("roadmap item"),
|
|
1177
|
+
filePath: z15.string().describe("Absolute path to the image or video file on disk"),
|
|
1178
|
+
description: z15.string().optional().describe("Optional description of the media")
|
|
1179
|
+
};
|
|
1180
|
+
var updateBrainstormMediaInput = {
|
|
1181
|
+
id: idField("brainstorm media"),
|
|
1182
|
+
description: z15.string().nullable().describe("New description for the media")
|
|
1183
|
+
};
|
|
1184
|
+
var deleteBrainstormMediaInput = {
|
|
1185
|
+
id: idField("brainstorm media to delete")
|
|
1186
|
+
};
|
|
1187
|
+
var uploadProductDesignMediaInput = {
|
|
1188
|
+
productId: idField("product"),
|
|
1189
|
+
filePath: z15.string().describe("Absolute path to the image or video file on disk"),
|
|
1190
|
+
description: z15.string().optional().describe("Optional description of the media")
|
|
1191
|
+
};
|
|
1192
|
+
var updateProductDesignMediaInput2 = {
|
|
1193
|
+
productId: idField("product"),
|
|
1194
|
+
mediaId: idField("design media"),
|
|
1195
|
+
description: z15.string().nullable().describe("New description for the media")
|
|
1196
|
+
};
|
|
1197
|
+
var deleteProductDesignMediaInput = {
|
|
1198
|
+
productId: idField("product"),
|
|
1199
|
+
mediaId: idField("design media to delete")
|
|
1200
|
+
};
|
|
1201
|
+
var uploadDesignWalkthroughInput = {
|
|
1202
|
+
roadmapId: idField("roadmap item"),
|
|
1203
|
+
filePath: z15.string().describe("Absolute path to the video file on disk")
|
|
1204
|
+
};
|
|
1205
|
+
var uploadReleaseWalkthroughInput = {
|
|
1206
|
+
roadmapId: idField("roadmap item"),
|
|
1207
|
+
filePath: z15.string().describe("Absolute path to the video file on disk")
|
|
1208
|
+
};
|
|
1209
|
+
var publishPrototypeInput = {
|
|
1210
|
+
roadmapId: z15.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
|
|
1211
|
+
folderPath: z15.string().describe("Absolute path to the local mockup folder"),
|
|
1212
|
+
entryPoint: z15.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
|
|
1213
|
+
};
|
|
1214
|
+
var listPrototypesInput = {
|
|
1215
|
+
roadmapId: z15.string().uuid().describe("The UUID of the roadmap item")
|
|
1216
|
+
};
|
|
1217
|
+
var createFeedbackSessionInput = {
|
|
1218
|
+
prototypeId: uuidField("prototype to create a feedback session for"),
|
|
1219
|
+
name: z15.string().describe('Name for this feedback session (e.g., "Round 1 Review")'),
|
|
1220
|
+
expiresInDays: z15.number().int().min(1).max(90).optional().describe("Number of days until the session expires (default 7)")
|
|
1221
|
+
};
|
|
1222
|
+
var listFeedbackSessionsInput = {
|
|
1223
|
+
prototypeId: uuidField("prototype")
|
|
1224
|
+
};
|
|
1225
|
+
var getFeedbackSummaryInput = {
|
|
1226
|
+
prototypeId: uuidField("prototype"),
|
|
1227
|
+
sessionId: uuidField("feedback session"),
|
|
1228
|
+
filter: z15.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: unresolved)")
|
|
1229
|
+
};
|
|
1230
|
+
var getFeedbackDetailInput = {
|
|
1231
|
+
prototypeId: uuidField("prototype"),
|
|
1232
|
+
sessionId: uuidField("feedback session"),
|
|
1233
|
+
commentId: z15.string().uuid().optional().describe("Optional: get detail for a single comment"),
|
|
1234
|
+
filter: z15.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: all). Ignored if commentId is provided.")
|
|
1235
|
+
};
|
|
1236
|
+
var resolveFeedbackCommentInput = {
|
|
1237
|
+
prototypeId: uuidField("prototype"),
|
|
1238
|
+
sessionId: uuidField("feedback session"),
|
|
1239
|
+
commentId: uuidField("comment to resolve/unresolve")
|
|
1240
|
+
};
|
|
1241
|
+
var searchExportsInput = {
|
|
1242
|
+
roadmapId: z15.string().uuid().optional().describe("Filter by roadmap item ID"),
|
|
1243
|
+
externalSystem: externalSystemSchema.optional().describe("Filter by external system"),
|
|
1244
|
+
localEntityType: localEntityTypeSchema.optional().describe("Filter by local entity type"),
|
|
1245
|
+
localEntityId: z15.string().uuid().optional().describe("Filter by local entity ID"),
|
|
1246
|
+
...paginationFields
|
|
1247
|
+
};
|
|
1248
|
+
var getExportInput = {
|
|
1249
|
+
id: z15.string().uuid().describe("The UUID of the export record")
|
|
1250
|
+
};
|
|
1251
|
+
var createExportInput = {
|
|
1252
|
+
roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
|
|
1253
|
+
localEntityType: localEntityTypeSchema.describe("Type of local entity being exported"),
|
|
1254
|
+
localEntityId: z15.string().uuid().describe("The UUID of the local entity"),
|
|
1255
|
+
externalSystem: externalSystemSchema.describe("External system where the entity was exported"),
|
|
1256
|
+
externalObjectType: z15.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
|
|
1257
|
+
externalId: z15.string().min(1).describe("ID of the object in the external system"),
|
|
1258
|
+
externalUrl: z15.string().url().optional().describe("URL to the object in the external system"),
|
|
1259
|
+
metadata: z15.record(z15.unknown()).optional().describe("Additional metadata about the export")
|
|
1260
|
+
};
|
|
1261
|
+
var updateExportInput = {
|
|
1262
|
+
id: z15.string().uuid().describe("The UUID of the export record to update"),
|
|
1263
|
+
externalUrl: z15.string().url().nullable().optional().describe("New URL to the object in the external system"),
|
|
1264
|
+
metadata: z15.record(z15.unknown()).optional().describe("New metadata to replace existing metadata")
|
|
1265
|
+
};
|
|
1266
|
+
var deleteExportInput = {
|
|
1267
|
+
id: z15.string().uuid().describe("The UUID of the export record to delete")
|
|
1268
|
+
};
|
|
1269
|
+
var getPresentationInput = {
|
|
1270
|
+
id: idField("presentation")
|
|
1271
|
+
};
|
|
1272
|
+
var createPresentationInput = {
|
|
1273
|
+
title: z15.string().describe("Title of the presentation"),
|
|
1274
|
+
description: z15.string().nullable().optional().describe("Description of the presentation")
|
|
1275
|
+
};
|
|
1276
|
+
var updatePresentationInput = {
|
|
1277
|
+
id: idField("presentation to update"),
|
|
1278
|
+
title: z15.string().optional().describe("New title"),
|
|
1279
|
+
description: z15.string().nullable().optional().describe("New description")
|
|
1280
|
+
};
|
|
1281
|
+
var deletePresentationInput = {
|
|
1282
|
+
id: idField("presentation to delete")
|
|
1283
|
+
};
|
|
1284
|
+
var reorderPresentationsInput = {
|
|
1285
|
+
items: orderItemsField("presentation")
|
|
1286
|
+
};
|
|
1287
|
+
var listVariantsInput = {
|
|
1288
|
+
presentationId: idField("presentation")
|
|
1289
|
+
};
|
|
1290
|
+
var getVariantInput = {
|
|
1291
|
+
presentationId: idField("presentation"),
|
|
1292
|
+
variantId: idField("variant")
|
|
1293
|
+
};
|
|
1294
|
+
var createVariantInput = {
|
|
1295
|
+
presentationId: idField("presentation"),
|
|
1296
|
+
name: z15.string().describe("Name of the variant"),
|
|
1297
|
+
audienceId: z15.string().nullable().optional().describe("The UUID of the target audience")
|
|
1298
|
+
};
|
|
1299
|
+
var updateVariantInput = {
|
|
1300
|
+
presentationId: idField("presentation"),
|
|
1301
|
+
variantId: idField("variant to update"),
|
|
1302
|
+
name: z15.string().optional().describe("New name"),
|
|
1303
|
+
audienceId: z15.string().nullable().optional().describe("New target audience UUID")
|
|
1304
|
+
};
|
|
1305
|
+
var deleteVariantInput = {
|
|
1306
|
+
presentationId: idField("presentation"),
|
|
1307
|
+
variantId: idField("variant to delete")
|
|
1308
|
+
};
|
|
1309
|
+
var reorderVariantsInput = {
|
|
1310
|
+
presentationId: idField("presentation"),
|
|
1311
|
+
items: orderItemsField("variant")
|
|
1312
|
+
};
|
|
1313
|
+
var cloneVariantInput = {
|
|
1314
|
+
presentationId: idField("presentation"),
|
|
1315
|
+
variantId: idField("variant to clone")
|
|
1316
|
+
};
|
|
1317
|
+
var setDefaultVariantInput = {
|
|
1318
|
+
presentationId: idField("presentation"),
|
|
1319
|
+
variantId: idField("variant to set as default")
|
|
1320
|
+
};
|
|
1321
|
+
var listSlidesInput = {
|
|
1322
|
+
variantId: idField("variant")
|
|
1323
|
+
};
|
|
1324
|
+
var getSlideInput = {
|
|
1325
|
+
variantId: idField("variant"),
|
|
1326
|
+
slideId: idField("slide")
|
|
1327
|
+
};
|
|
1328
|
+
var createSlideInput = {
|
|
1329
|
+
variantId: idField("variant"),
|
|
1330
|
+
slideType: slideTypeSchema.default("bullets").describe("The type of slide to create"),
|
|
1331
|
+
content: z15.record(z15.unknown()).optional().describe('Type-specific content object. For bullets: {title, items: ["..."]}. For title: {title, subtitle}. For two_column: {title, left, right}. For quote: {quote, attribution}. For mermaid: {title, code: "graph TD; A-->B"}. For paragraph: {title, body}. Etc.'),
|
|
1332
|
+
speakerNotes: z15.string().nullable().optional().describe("Speaker notes for the slide")
|
|
1333
|
+
};
|
|
1334
|
+
var updateSlideInput = {
|
|
1335
|
+
variantId: idField("variant"),
|
|
1336
|
+
slideId: idField("slide to update"),
|
|
1337
|
+
title: z15.string().optional().describe("New title"),
|
|
1338
|
+
content: z15.object({ body: z15.string().optional() }).nullable().optional().describe("New slide content with markdown body"),
|
|
1339
|
+
speakerNotes: z15.string().nullable().optional().describe("New speaker notes")
|
|
1340
|
+
};
|
|
1341
|
+
var deleteSlideInput = {
|
|
1342
|
+
variantId: idField("variant"),
|
|
1343
|
+
slideId: idField("slide to delete")
|
|
1344
|
+
};
|
|
1345
|
+
var reorderSlidesInput = {
|
|
1346
|
+
variantId: idField("variant"),
|
|
1347
|
+
items: orderItemsField("slide")
|
|
1348
|
+
};
|
|
1349
|
+
var uploadSlideImageInput = {
|
|
1350
|
+
variantId: idField("variant"),
|
|
1351
|
+
slideId: idField("slide to add the image to"),
|
|
1352
|
+
filePath: z15.string().describe("Absolute path to the image file on disk")
|
|
1353
|
+
};
|
|
1354
|
+
// ../../packages/shared/src/schemas/variant.ts
|
|
1355
|
+
import { z as z16 } from "zod";
|
|
1356
|
+
var variantSchema = z16.object({
|
|
1357
|
+
id: z16.string().uuid(),
|
|
1358
|
+
presentationId: z16.string().uuid(),
|
|
1359
|
+
name: z16.string(),
|
|
1360
|
+
audienceId: z16.string().uuid().nullable(),
|
|
1361
|
+
isDefault: z16.boolean(),
|
|
1362
|
+
order: z16.number().int(),
|
|
1363
|
+
createdAt: z16.string(),
|
|
1364
|
+
createdBy: z16.string(),
|
|
1365
|
+
updatedAt: z16.string().nullable()
|
|
918
1366
|
});
|
|
919
|
-
var createVariantSchema =
|
|
920
|
-
name:
|
|
921
|
-
audienceId:
|
|
1367
|
+
var createVariantSchema = z16.object({
|
|
1368
|
+
name: z16.string().min(1),
|
|
1369
|
+
audienceId: z16.string().uuid().nullable().optional()
|
|
922
1370
|
});
|
|
923
|
-
var updateVariantSchema =
|
|
924
|
-
name:
|
|
925
|
-
audienceId:
|
|
1371
|
+
var updateVariantSchema = z16.object({
|
|
1372
|
+
name: z16.string().min(1).optional(),
|
|
1373
|
+
audienceId: z16.string().uuid().nullable().optional()
|
|
926
1374
|
});
|
|
927
|
-
var variantListSchema =
|
|
928
|
-
// src/tools/index.ts
|
|
929
|
-
import { z as z16 } from "zod";
|
|
930
|
-
|
|
1375
|
+
var variantListSchema = z16.array(variantSchema);
|
|
931
1376
|
// src/auth.ts
|
|
932
1377
|
function getCredentials() {
|
|
933
1378
|
const apiKey = process.env.ROADMAPS_API_KEY;
|
|
@@ -1751,15 +2196,7 @@ function registerGetWorkflows(server) {
|
|
|
1751
2196
|
function registerSearchRoadmaps(server) {
|
|
1752
2197
|
server.registerTool("search_roadmaps", {
|
|
1753
2198
|
description: "Search for roadmap items by title, status, or horizon. Returns a list of matching roadmap items with basic info.",
|
|
1754
|
-
inputSchema:
|
|
1755
|
-
query: z16.string().optional().describe("Search query to match against title or description"),
|
|
1756
|
-
status: roadmapStatusSchema.optional().describe("Filter by status"),
|
|
1757
|
-
horizon: horizonSchema.optional().describe("Filter by planning horizon"),
|
|
1758
|
-
phase: z16.string().optional().describe("Filter by phase"),
|
|
1759
|
-
phaseStep: z16.string().optional().describe("Filter by phase step"),
|
|
1760
|
-
limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
|
|
1761
|
-
offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
|
|
1762
|
-
}
|
|
2199
|
+
inputSchema: searchRoadmapsInput
|
|
1763
2200
|
}, async ({
|
|
1764
2201
|
query,
|
|
1765
2202
|
status,
|
|
@@ -1808,9 +2245,7 @@ function registerSearchRoadmaps(server) {
|
|
|
1808
2245
|
function registerGetRoadmap(server) {
|
|
1809
2246
|
server.registerTool("get_roadmap", {
|
|
1810
2247
|
description: "Get full details of a roadmap item including PRD, wireframes, brainstorm media, linked features, epics, and stories.",
|
|
1811
|
-
inputSchema:
|
|
1812
|
-
id: z16.string().describe("The UUID of the roadmap item")
|
|
1813
|
-
}
|
|
2248
|
+
inputSchema: getRoadmapInput
|
|
1814
2249
|
}, async ({ id }) => {
|
|
1815
2250
|
const client2 = getApiClient();
|
|
1816
2251
|
const roadmap2 = await client2.getRoadmap(id);
|
|
@@ -1870,10 +2305,7 @@ function registerGetRoadmap(server) {
|
|
|
1870
2305
|
function registerSearchFeatures(server) {
|
|
1871
2306
|
server.registerTool("search_features", {
|
|
1872
2307
|
description: "Search for features and feature areas by name. Returns a list of matching features with basic info.",
|
|
1873
|
-
inputSchema:
|
|
1874
|
-
query: z16.string().optional().describe("Search query to match against name"),
|
|
1875
|
-
type: featureTypeSchema.optional().describe("Filter by type (feature or area)")
|
|
1876
|
-
}
|
|
2308
|
+
inputSchema: searchFeaturesInput
|
|
1877
2309
|
}, async ({ query, type }) => {
|
|
1878
2310
|
const client2 = getApiClient();
|
|
1879
2311
|
let features = await client2.listFeatures();
|
|
@@ -1902,9 +2334,7 @@ function registerSearchFeatures(server) {
|
|
|
1902
2334
|
function registerGetFeature(server) {
|
|
1903
2335
|
server.registerTool("get_feature", {
|
|
1904
2336
|
description: "Get full details of a feature including outcomes, child features, and linked roadmap items.",
|
|
1905
|
-
inputSchema:
|
|
1906
|
-
id: z16.string().describe("The UUID of the feature")
|
|
1907
|
-
}
|
|
2337
|
+
inputSchema: getFeatureInput
|
|
1908
2338
|
}, async ({ id }) => {
|
|
1909
2339
|
const client2 = getApiClient();
|
|
1910
2340
|
const feature2 = await client2.getFeature(id);
|
|
@@ -1941,10 +2371,7 @@ function registerGetFeature(server) {
|
|
|
1941
2371
|
function registerSearchIdeas(server) {
|
|
1942
2372
|
server.registerTool("search_ideas", {
|
|
1943
2373
|
description: "Search for ideas by title or status. Returns a list of matching ideas with basic info.",
|
|
1944
|
-
inputSchema:
|
|
1945
|
-
query: z16.string().optional().describe("Search query to match against title or description"),
|
|
1946
|
-
status: ideaStatusSchema.optional().describe("Filter by status")
|
|
1947
|
-
}
|
|
2374
|
+
inputSchema: searchIdeasInput
|
|
1948
2375
|
}, async ({ query, status }) => {
|
|
1949
2376
|
const client2 = getApiClient();
|
|
1950
2377
|
let ideas = await client2.listIdeas();
|
|
@@ -2041,11 +2468,7 @@ Use this as your FIRST call when starting work on a roadmap to understand the fu
|
|
|
2041
2468
|
function registerCaptureIdea(server) {
|
|
2042
2469
|
server.registerTool("capture_idea", {
|
|
2043
2470
|
description: "Quickly capture a new idea. Ideas are suggestions that can later be reviewed and potentially converted to roadmap items.",
|
|
2044
|
-
inputSchema:
|
|
2045
|
-
title: z16.string().describe("Title of the idea"),
|
|
2046
|
-
description: z16.string().optional().describe("Detailed description of the idea"),
|
|
2047
|
-
source: z16.string().optional().describe('Source of the idea (defaults to "claude-code")')
|
|
2048
|
-
}
|
|
2471
|
+
inputSchema: captureIdeaInput
|
|
2049
2472
|
}, async ({
|
|
2050
2473
|
title,
|
|
2051
2474
|
description,
|
|
@@ -2080,18 +2503,7 @@ function registerCaptureIdea(server) {
|
|
|
2080
2503
|
function registerCreateRoadmapItem(server) {
|
|
2081
2504
|
server.registerTool("create_roadmap_item", {
|
|
2082
2505
|
description: "Create a new roadmap item. Use this to add planned work to the roadmap.",
|
|
2083
|
-
inputSchema:
|
|
2084
|
-
title: z16.string().describe("Title of the roadmap item"),
|
|
2085
|
-
status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
|
|
2086
|
-
horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
|
|
2087
|
-
phase: z16.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
|
|
2088
|
-
phaseStep: z16.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
|
|
2089
|
-
initiativeId: z16.string().optional().describe("UUID of initiative to link this item to on creation"),
|
|
2090
|
-
dateGranularity: dateGranularitySchema2.optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
|
|
2091
|
-
dateValue: z16.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
|
|
2092
|
-
targetGranularity: dateGranularitySchema2.optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
|
|
2093
|
-
targetValue: z16.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
|
|
2094
|
-
}
|
|
2506
|
+
inputSchema: createRoadmapItemInput
|
|
2095
2507
|
}, async ({
|
|
2096
2508
|
title,
|
|
2097
2509
|
status,
|
|
@@ -2152,31 +2564,10 @@ function registerCreateRoadmapItem(server) {
|
|
|
2152
2564
|
};
|
|
2153
2565
|
});
|
|
2154
2566
|
}
|
|
2155
|
-
var effortSizeSchema = z16.enum(["xs", "s", "m", "l", "xl"]);
|
|
2156
2567
|
function registerUpdateRoadmapItem(server) {
|
|
2157
2568
|
server.registerTool("update_roadmap_item", {
|
|
2158
2569
|
description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, initiative link, target date, phase, phaseStep, or brainstorm notes.",
|
|
2159
|
-
inputSchema:
|
|
2160
|
-
id: z16.string().describe("The UUID of the roadmap item to update"),
|
|
2161
|
-
title: z16.string().optional().describe("New title"),
|
|
2162
|
-
status: roadmapStatusSchema.optional().describe("New status"),
|
|
2163
|
-
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
2164
|
-
phase: z16.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
|
|
2165
|
-
phaseStep: z16.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
|
|
2166
|
-
value: z16.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
|
|
2167
|
-
effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
|
|
2168
|
-
order: z16.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
|
|
2169
|
-
initiativeId: z16.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
|
|
2170
|
-
designDescription: z16.string().nullable().optional().describe("Description for the Design phase"),
|
|
2171
|
-
planDescription: z16.string().nullable().optional().describe("Description for the Planning phase"),
|
|
2172
|
-
buildDescription: z16.string().nullable().optional().describe("Description for the Build phase"),
|
|
2173
|
-
releaseDescription: z16.string().nullable().optional().describe("Description for the Release phase"),
|
|
2174
|
-
prompt: z16.string().nullable().optional().describe("Build prompt for the roadmap item"),
|
|
2175
|
-
dateGranularity: dateGranularitySchema2.nullable().optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
|
|
2176
|
-
dateValue: z16.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
|
|
2177
|
-
targetGranularity: dateGranularitySchema2.nullable().optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
|
|
2178
|
-
targetValue: z16.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
|
|
2179
|
-
}
|
|
2570
|
+
inputSchema: updateRoadmapItemInput
|
|
2180
2571
|
}, async ({
|
|
2181
2572
|
id,
|
|
2182
2573
|
title,
|
|
@@ -2285,14 +2676,7 @@ function registerUpdateRoadmapItem(server) {
|
|
|
2285
2676
|
function registerAddFeature(server) {
|
|
2286
2677
|
server.registerTool("add_feature", {
|
|
2287
2678
|
description: "Create a new feature with optional outcomes. Features represent capabilities or functionality areas.",
|
|
2288
|
-
inputSchema:
|
|
2289
|
-
name: z16.string().describe("Name of the feature"),
|
|
2290
|
-
description: z16.string().optional().describe("Description of the feature"),
|
|
2291
|
-
type: featureTypeSchema.optional().describe('Type - "feature" for specific functionality, "area" for grouping (defaults to "feature")'),
|
|
2292
|
-
parentId: z16.string().optional().describe("UUID of parent feature/area to nest under"),
|
|
2293
|
-
outcomes: z16.array(z16.string()).optional().describe("List of expected outcomes for this feature"),
|
|
2294
|
-
linkToRoadmapId: z16.string().optional().describe("UUID of roadmap item to link this feature to")
|
|
2295
|
-
}
|
|
2679
|
+
inputSchema: addFeatureInput
|
|
2296
2680
|
}, async ({
|
|
2297
2681
|
name,
|
|
2298
2682
|
description,
|
|
@@ -2337,12 +2721,7 @@ function registerAddFeature(server) {
|
|
|
2337
2721
|
function registerSavePrd(server) {
|
|
2338
2722
|
server.registerTool("save_prd", {
|
|
2339
2723
|
description: "Save or update the PRD (Product Requirements Document) content for a roadmap item. Content should be markdown.",
|
|
2340
|
-
inputSchema:
|
|
2341
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
2342
|
-
what: z16.string().nullable().describe("What is being built - the feature description"),
|
|
2343
|
-
why: z16.string().nullable().describe("Why this is being built - the business justification"),
|
|
2344
|
-
outcomes: z16.array(z16.string()).optional().describe("List of expected outcomes/success criteria")
|
|
2345
|
-
}
|
|
2724
|
+
inputSchema: savePrdInput
|
|
2346
2725
|
}, async ({
|
|
2347
2726
|
roadmapId,
|
|
2348
2727
|
what,
|
|
@@ -2378,10 +2757,7 @@ function registerSavePrd(server) {
|
|
|
2378
2757
|
function registerUpdateBrainstormNotes(server) {
|
|
2379
2758
|
server.registerTool("update_brainstorm_notes", {
|
|
2380
2759
|
description: "Update the brainstorm notes for a roadmap item. Use this to capture ideas, questions, and research notes.",
|
|
2381
|
-
inputSchema:
|
|
2382
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
2383
|
-
notes: z16.string().describe("The brainstorm notes content")
|
|
2384
|
-
}
|
|
2760
|
+
inputSchema: updateBrainstormNotesInput
|
|
2385
2761
|
}, async ({ roadmapId, notes }) => {
|
|
2386
2762
|
const client2 = getApiClient();
|
|
2387
2763
|
const roadmap2 = await client2.updateRoadmap(roadmapId, {
|
|
@@ -2408,9 +2784,7 @@ function registerUpdateBrainstormNotes(server) {
|
|
|
2408
2784
|
function registerDeleteRoadmapItem(server) {
|
|
2409
2785
|
server.registerTool("delete_roadmap_item", {
|
|
2410
2786
|
description: "Delete a roadmap item. This is a soft delete - the item can potentially be recovered.",
|
|
2411
|
-
inputSchema:
|
|
2412
|
-
id: z16.string().describe("The UUID of the roadmap item to delete")
|
|
2413
|
-
}
|
|
2787
|
+
inputSchema: deleteRoadmapItemInput
|
|
2414
2788
|
}, async ({ id }) => {
|
|
2415
2789
|
const client2 = getApiClient();
|
|
2416
2790
|
await client2.deleteRoadmap(id);
|
|
@@ -2430,12 +2804,7 @@ function registerDeleteRoadmapItem(server) {
|
|
|
2430
2804
|
function registerReorderRoadmaps(server) {
|
|
2431
2805
|
server.registerTool("reorder_roadmaps", {
|
|
2432
2806
|
description: "Bulk reorder roadmap items by setting their order values. Use this to prioritize and organize the roadmap. Lower order values appear first.",
|
|
2433
|
-
inputSchema:
|
|
2434
|
-
items: z16.array(z16.object({
|
|
2435
|
-
id: z16.string().describe("The UUID of the roadmap item"),
|
|
2436
|
-
order: z16.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
|
|
2437
|
-
})).describe("Array of roadmap items with their new order values")
|
|
2438
|
-
}
|
|
2807
|
+
inputSchema: reorderRoadmapsInput
|
|
2439
2808
|
}, async ({ items }) => {
|
|
2440
2809
|
const client2 = getApiClient();
|
|
2441
2810
|
const result = await client2.reorderRoadmaps(items);
|
|
@@ -2456,12 +2825,7 @@ function registerReorderRoadmaps(server) {
|
|
|
2456
2825
|
function registerUpdateFeature(server) {
|
|
2457
2826
|
server.registerTool("update_feature", {
|
|
2458
2827
|
description: "Update an existing feature. Can update name, type, or parent.",
|
|
2459
|
-
inputSchema:
|
|
2460
|
-
id: z16.string().describe("The UUID of the feature to update"),
|
|
2461
|
-
name: z16.string().optional().describe("New name for the feature"),
|
|
2462
|
-
type: featureTypeSchema.optional().describe('New type - "feature" or "area"'),
|
|
2463
|
-
parentId: z16.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
|
|
2464
|
-
}
|
|
2828
|
+
inputSchema: updateFeatureInput
|
|
2465
2829
|
}, async ({
|
|
2466
2830
|
id,
|
|
2467
2831
|
name,
|
|
@@ -2498,9 +2862,7 @@ function registerUpdateFeature(server) {
|
|
|
2498
2862
|
function registerDeleteFeature(server) {
|
|
2499
2863
|
server.registerTool("delete_feature", {
|
|
2500
2864
|
description: "Delete a feature. This is a soft delete that also deletes all child features.",
|
|
2501
|
-
inputSchema:
|
|
2502
|
-
id: z16.string().describe("The UUID of the feature to delete")
|
|
2503
|
-
}
|
|
2865
|
+
inputSchema: deleteFeatureInput
|
|
2504
2866
|
}, async ({ id }) => {
|
|
2505
2867
|
const client2 = getApiClient();
|
|
2506
2868
|
await client2.deleteFeature(id);
|
|
@@ -2520,9 +2882,7 @@ function registerDeleteFeature(server) {
|
|
|
2520
2882
|
function registerGetIdea(server) {
|
|
2521
2883
|
server.registerTool("get_idea", {
|
|
2522
2884
|
description: "Get full details of a single idea by ID.",
|
|
2523
|
-
inputSchema:
|
|
2524
|
-
id: z16.string().describe("The UUID of the idea")
|
|
2525
|
-
}
|
|
2885
|
+
inputSchema: getIdeaInput
|
|
2526
2886
|
}, async ({ id }) => {
|
|
2527
2887
|
const client2 = getApiClient();
|
|
2528
2888
|
const idea2 = await client2.getIdea(id);
|
|
@@ -2549,14 +2909,7 @@ function registerGetIdea(server) {
|
|
|
2549
2909
|
function registerUpdateIdea(server) {
|
|
2550
2910
|
server.registerTool("update_idea", {
|
|
2551
2911
|
description: "Update an existing idea. Can update title, description, status, value, or effort.",
|
|
2552
|
-
inputSchema:
|
|
2553
|
-
id: z16.string().describe("The UUID of the idea to update"),
|
|
2554
|
-
title: z16.string().optional().describe("New title"),
|
|
2555
|
-
description: z16.string().nullable().optional().describe("New description"),
|
|
2556
|
-
status: ideaStatusSchema.optional().describe("New status"),
|
|
2557
|
-
value: z16.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
|
|
2558
|
-
effort: z16.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
|
|
2559
|
-
}
|
|
2912
|
+
inputSchema: updateIdeaInput
|
|
2560
2913
|
}, async ({
|
|
2561
2914
|
id,
|
|
2562
2915
|
title,
|
|
@@ -2601,9 +2954,7 @@ function registerUpdateIdea(server) {
|
|
|
2601
2954
|
function registerDeleteIdea(server) {
|
|
2602
2955
|
server.registerTool("delete_idea", {
|
|
2603
2956
|
description: "Delete an idea. This is a soft delete.",
|
|
2604
|
-
inputSchema:
|
|
2605
|
-
id: z16.string().describe("The UUID of the idea to delete")
|
|
2606
|
-
}
|
|
2957
|
+
inputSchema: deleteIdeaInput
|
|
2607
2958
|
}, async ({ id }) => {
|
|
2608
2959
|
const client2 = getApiClient();
|
|
2609
2960
|
await client2.deleteIdea(id);
|
|
@@ -2643,10 +2994,7 @@ function registerGetStrategy(server) {
|
|
|
2643
2994
|
function registerUpdateStrategy(server) {
|
|
2644
2995
|
server.registerTool("update_strategy", {
|
|
2645
2996
|
description: "Update the organization strategy. Can update vision, mission, or both. Use this to set or refine the high-level direction.",
|
|
2646
|
-
inputSchema:
|
|
2647
|
-
vision: z16.string().nullable().optional().describe("The vision statement - where the product is headed"),
|
|
2648
|
-
mission: z16.string().nullable().optional().describe("The mission statement - why the product exists")
|
|
2649
|
-
}
|
|
2997
|
+
inputSchema: updateStrategyInput
|
|
2650
2998
|
}, async ({ vision, mission }) => {
|
|
2651
2999
|
const client2 = getApiClient();
|
|
2652
3000
|
const updates = {};
|
|
@@ -2692,10 +3040,7 @@ function registerListScenarios(server) {
|
|
|
2692
3040
|
function registerCreateScenario(server) {
|
|
2693
3041
|
server.registerTool("create_scenario", {
|
|
2694
3042
|
description: "Create a new user scenario. Scenarios describe user workflows and how they accomplish goals.",
|
|
2695
|
-
inputSchema:
|
|
2696
|
-
title: z16.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
|
|
2697
|
-
description: z16.string().nullable().optional().describe("Detailed description of the scenario workflow")
|
|
2698
|
-
}
|
|
3043
|
+
inputSchema: createScenarioInput
|
|
2699
3044
|
}, async ({ title, description }) => {
|
|
2700
3045
|
const client2 = getApiClient();
|
|
2701
3046
|
const scenario2 = await client2.createScenario({
|
|
@@ -2722,11 +3067,7 @@ function registerCreateScenario(server) {
|
|
|
2722
3067
|
function registerUpdateScenario(server) {
|
|
2723
3068
|
server.registerTool("update_scenario", {
|
|
2724
3069
|
description: "Update an existing scenario.",
|
|
2725
|
-
inputSchema:
|
|
2726
|
-
id: z16.string().describe("The UUID of the scenario to update"),
|
|
2727
|
-
title: z16.string().optional().describe("New title"),
|
|
2728
|
-
description: z16.string().nullable().optional().describe("New description")
|
|
2729
|
-
}
|
|
3070
|
+
inputSchema: updateScenarioInput
|
|
2730
3071
|
}, async ({
|
|
2731
3072
|
id,
|
|
2732
3073
|
title,
|
|
@@ -2759,9 +3100,7 @@ function registerUpdateScenario(server) {
|
|
|
2759
3100
|
function registerDeleteScenario(server) {
|
|
2760
3101
|
server.registerTool("delete_scenario", {
|
|
2761
3102
|
description: "Delete a scenario. This is a soft delete.",
|
|
2762
|
-
inputSchema:
|
|
2763
|
-
id: z16.string().describe("The UUID of the scenario to delete")
|
|
2764
|
-
}
|
|
3103
|
+
inputSchema: deleteScenarioInput
|
|
2765
3104
|
}, async ({ id }) => {
|
|
2766
3105
|
const client2 = getApiClient();
|
|
2767
3106
|
await client2.deleteScenario(id);
|
|
@@ -2775,22 +3114,10 @@ function registerDeleteScenario(server) {
|
|
|
2775
3114
|
};
|
|
2776
3115
|
});
|
|
2777
3116
|
}
|
|
2778
|
-
var productTypeSchema2 = z16.enum([
|
|
2779
|
-
"brand",
|
|
2780
|
-
"product",
|
|
2781
|
-
"app",
|
|
2782
|
-
"marketing_site",
|
|
2783
|
-
"landing_page",
|
|
2784
|
-
"service"
|
|
2785
|
-
]);
|
|
2786
3117
|
function registerCreateProduct(server) {
|
|
2787
3118
|
server.registerTool("create_product", {
|
|
2788
3119
|
description: "Create a new product, app, brand, or service. Products represent what the organization builds and offers.",
|
|
2789
|
-
inputSchema:
|
|
2790
|
-
type: productTypeSchema2.describe("Type of product"),
|
|
2791
|
-
name: z16.string().describe("Name of the product"),
|
|
2792
|
-
parentId: z16.string().nullable().optional().describe("UUID of parent product to nest under")
|
|
2793
|
-
}
|
|
3120
|
+
inputSchema: createProductInput
|
|
2794
3121
|
}, async ({
|
|
2795
3122
|
type,
|
|
2796
3123
|
name,
|
|
@@ -2823,11 +3150,7 @@ function registerCreateProduct(server) {
|
|
|
2823
3150
|
function registerUpdateProduct(server) {
|
|
2824
3151
|
server.registerTool("update_product", {
|
|
2825
3152
|
description: "Update an existing product.",
|
|
2826
|
-
inputSchema:
|
|
2827
|
-
id: z16.string().describe("The UUID of the product to update"),
|
|
2828
|
-
name: z16.string().optional().describe("New name"),
|
|
2829
|
-
parentId: z16.string().nullable().optional().describe("New parent product UUID, or null to move to root")
|
|
2830
|
-
}
|
|
3153
|
+
inputSchema: updateProductInput
|
|
2831
3154
|
}, async ({ id, name, parentId }) => {
|
|
2832
3155
|
const client2 = getApiClient();
|
|
2833
3156
|
const updates = {};
|
|
@@ -2857,9 +3180,7 @@ function registerUpdateProduct(server) {
|
|
|
2857
3180
|
function registerDeleteProduct(server) {
|
|
2858
3181
|
server.registerTool("delete_product", {
|
|
2859
3182
|
description: "Delete a product. This is a soft delete that also deletes all child products.",
|
|
2860
|
-
inputSchema:
|
|
2861
|
-
id: z16.string().describe("The UUID of the product to delete")
|
|
2862
|
-
}
|
|
3183
|
+
inputSchema: deleteProductInput
|
|
2863
3184
|
}, async ({ id }) => {
|
|
2864
3185
|
const client2 = getApiClient();
|
|
2865
3186
|
const result = await client2.deleteProduct(id);
|
|
@@ -2880,9 +3201,7 @@ function registerDeleteProduct(server) {
|
|
|
2880
3201
|
function registerGetProduct(server) {
|
|
2881
3202
|
server.registerTool("get_product", {
|
|
2882
3203
|
description: "Get full details of a product by ID, including its documentation (design system and ADRs).",
|
|
2883
|
-
inputSchema:
|
|
2884
|
-
id: z16.string().describe("The UUID of the product")
|
|
2885
|
-
}
|
|
3204
|
+
inputSchema: getProductInput
|
|
2886
3205
|
}, async ({ id }) => {
|
|
2887
3206
|
const client2 = getApiClient();
|
|
2888
3207
|
const [product2, documentation] = await Promise.all([
|
|
@@ -2917,10 +3236,7 @@ function registerGetProduct(server) {
|
|
|
2917
3236
|
function registerSearchProducts(server) {
|
|
2918
3237
|
server.registerTool("search_products", {
|
|
2919
3238
|
description: "Search for products by name. Returns a list of matching products with basic info.",
|
|
2920
|
-
inputSchema:
|
|
2921
|
-
query: z16.string().optional().describe("Search query to match against product name"),
|
|
2922
|
-
type: productTypeSchema2.optional().describe("Filter by product type")
|
|
2923
|
-
}
|
|
3239
|
+
inputSchema: searchProductsInput
|
|
2924
3240
|
}, async ({ query, type }) => {
|
|
2925
3241
|
const client2 = getApiClient();
|
|
2926
3242
|
let products = await client2.listProducts();
|
|
@@ -2952,9 +3268,7 @@ function registerSearchProducts(server) {
|
|
|
2952
3268
|
function registerGetProductDocumentation(server) {
|
|
2953
3269
|
server.registerTool("get_product_documentation", {
|
|
2954
3270
|
description: "Get the documentation (design system and ADRs) for a product. Use this to read existing documentation before updating.",
|
|
2955
|
-
inputSchema:
|
|
2956
|
-
productId: z16.string().describe("The UUID of the product")
|
|
2957
|
-
}
|
|
3271
|
+
inputSchema: getProductDocumentationInput
|
|
2958
3272
|
}, async ({ productId }) => {
|
|
2959
3273
|
const client2 = getApiClient();
|
|
2960
3274
|
const documentation = await client2.getProductDocumentation(productId);
|
|
@@ -2980,11 +3294,7 @@ function registerGetProductDocumentation(server) {
|
|
|
2980
3294
|
function registerUpdateProductDocumentation(server) {
|
|
2981
3295
|
server.registerTool("update_product_documentation", {
|
|
2982
3296
|
description: "Update the documentation for a product. Use this to keep design system and ADRs up to date. Creates documentation if it does not exist.",
|
|
2983
|
-
inputSchema:
|
|
2984
|
-
productId: z16.string().describe("The UUID of the product"),
|
|
2985
|
-
designSystem: z16.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
|
|
2986
|
-
adrs: z16.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
|
|
2987
|
-
}
|
|
3297
|
+
inputSchema: updateProductDocumentationInput
|
|
2988
3298
|
}, async ({
|
|
2989
3299
|
productId,
|
|
2990
3300
|
designSystem,
|
|
@@ -3019,10 +3329,7 @@ function registerUpdateProductDocumentation(server) {
|
|
|
3019
3329
|
function registerCreateAudience(server) {
|
|
3020
3330
|
server.registerTool("create_audience", {
|
|
3021
3331
|
description: "Create a new audience member. Audiences represent who the product serves.",
|
|
3022
|
-
inputSchema:
|
|
3023
|
-
name: z16.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
|
|
3024
|
-
description: z16.string().nullable().optional().describe("Description of the audience")
|
|
3025
|
-
}
|
|
3332
|
+
inputSchema: createAudienceInput
|
|
3026
3333
|
}, async ({ name, description }) => {
|
|
3027
3334
|
const client2 = getApiClient();
|
|
3028
3335
|
const audience2 = await client2.createAudience({
|
|
@@ -3049,11 +3356,7 @@ function registerCreateAudience(server) {
|
|
|
3049
3356
|
function registerUpdateAudience(server) {
|
|
3050
3357
|
server.registerTool("update_audience", {
|
|
3051
3358
|
description: "Update an existing audience member.",
|
|
3052
|
-
inputSchema:
|
|
3053
|
-
id: z16.string().describe("The UUID of the audience to update"),
|
|
3054
|
-
name: z16.string().optional().describe("New name"),
|
|
3055
|
-
description: z16.string().nullable().optional().describe("New description")
|
|
3056
|
-
}
|
|
3359
|
+
inputSchema: updateAudienceInput
|
|
3057
3360
|
}, async ({
|
|
3058
3361
|
id,
|
|
3059
3362
|
name,
|
|
@@ -3086,9 +3389,7 @@ function registerUpdateAudience(server) {
|
|
|
3086
3389
|
function registerDeleteAudience(server) {
|
|
3087
3390
|
server.registerTool("delete_audience", {
|
|
3088
3391
|
description: "Delete an audience member. This is a soft delete.",
|
|
3089
|
-
inputSchema:
|
|
3090
|
-
id: z16.string().describe("The UUID of the audience to delete")
|
|
3091
|
-
}
|
|
3392
|
+
inputSchema: deleteAudienceInput
|
|
3092
3393
|
}, async ({ id }) => {
|
|
3093
3394
|
const client2 = getApiClient();
|
|
3094
3395
|
await client2.deleteAudience(id);
|
|
@@ -3128,20 +3429,7 @@ function registerListStatusUpdates(server) {
|
|
|
3128
3429
|
function registerGetHistory(server) {
|
|
3129
3430
|
server.registerTool("get_history", {
|
|
3130
3431
|
description: "Get raw history events for a date range. Returns full event details including payloads. " + "Use entityType or entityId filters to narrow results. For status reports, prefer " + "get_history_summary to avoid context overflow.",
|
|
3131
|
-
inputSchema:
|
|
3132
|
-
startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
3133
|
-
endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
|
|
3134
|
-
entityType: z16.enum([
|
|
3135
|
-
"roadmap",
|
|
3136
|
-
"feature",
|
|
3137
|
-
"idea",
|
|
3138
|
-
"prd",
|
|
3139
|
-
"wireframe",
|
|
3140
|
-
"product",
|
|
3141
|
-
"audience",
|
|
3142
|
-
"scenario"
|
|
3143
|
-
]).optional().describe("Filter to specific entity type")
|
|
3144
|
-
}
|
|
3432
|
+
inputSchema: getHistoryInput
|
|
3145
3433
|
}, async ({
|
|
3146
3434
|
startDate,
|
|
3147
3435
|
endDate,
|
|
@@ -3162,10 +3450,7 @@ function registerGetHistory(server) {
|
|
|
3162
3450
|
function registerGetHistorySummary(server) {
|
|
3163
3451
|
server.registerTool("get_history_summary", {
|
|
3164
3452
|
description: "Get a summary of history events for a date range. Returns counts by entity type, " + "list of changed entities with titles, and total event count. Use this for status " + "report generation instead of get_history to avoid context overflow.",
|
|
3165
|
-
inputSchema:
|
|
3166
|
-
startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
3167
|
-
endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
|
|
3168
|
-
}
|
|
3453
|
+
inputSchema: getHistorySummaryInput
|
|
3169
3454
|
}, async ({ startDate, endDate }) => {
|
|
3170
3455
|
const client2 = getApiClient();
|
|
3171
3456
|
const summary = await client2.getHistorySummary({ startDate, endDate });
|
|
@@ -3182,16 +3467,7 @@ function registerGetHistorySummary(server) {
|
|
|
3182
3467
|
function registerCreateStatusUpdate(server) {
|
|
3183
3468
|
server.registerTool("create_status_update", {
|
|
3184
3469
|
description: "Create a new status report. Use this after generating the report content from history events.",
|
|
3185
|
-
inputSchema:
|
|
3186
|
-
startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
|
|
3187
|
-
endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
|
|
3188
|
-
content: z16.string().describe("The markdown content of the status report"),
|
|
3189
|
-
title: z16.string().optional().describe("Optional title for the report"),
|
|
3190
|
-
items: z16.array(z16.object({
|
|
3191
|
-
roadmapItemId: z16.string().describe("UUID of the roadmap item"),
|
|
3192
|
-
status: z16.string().describe("Status of the item at report creation time")
|
|
3193
|
-
})).optional().describe("Roadmap items to include in the report snapshot")
|
|
3194
|
-
}
|
|
3470
|
+
inputSchema: createStatusUpdateInput
|
|
3195
3471
|
}, async ({
|
|
3196
3472
|
startDate,
|
|
3197
3473
|
endDate,
|
|
@@ -3229,21 +3505,7 @@ function registerCreateStatusUpdate(server) {
|
|
|
3229
3505
|
function registerSaveStories(server) {
|
|
3230
3506
|
server.registerTool("save_stories", {
|
|
3231
3507
|
description: "Save epics and stories for a roadmap item. Replaces all existing epics/stories. Use this to set the complete list of epics and stories for a roadmap.",
|
|
3232
|
-
inputSchema:
|
|
3233
|
-
roadmapId: z16.string().uuid().describe("The UUID of the roadmap item"),
|
|
3234
|
-
epics: z16.array(z16.object({
|
|
3235
|
-
title: z16.string().min(1).describe("Title of the epic"),
|
|
3236
|
-
description: z16.string().nullable().optional().describe("Description of the epic"),
|
|
3237
|
-
stories: z16.array(z16.object({
|
|
3238
|
-
title: z16.string().min(1).describe("Title of the story"),
|
|
3239
|
-
description: z16.string().nullable().optional().describe("Description of the story")
|
|
3240
|
-
})).optional().describe("Stories within this epic")
|
|
3241
|
-
})).optional().describe("List of epics with their nested stories"),
|
|
3242
|
-
stories: z16.array(z16.object({
|
|
3243
|
-
title: z16.string().min(1).describe("Title of the story"),
|
|
3244
|
-
description: z16.string().nullable().optional().describe("Description of the story")
|
|
3245
|
-
})).optional().describe("List of standalone stories (not part of any epic)")
|
|
3246
|
-
}
|
|
3508
|
+
inputSchema: saveStoriesInput
|
|
3247
3509
|
}, async ({
|
|
3248
3510
|
roadmapId,
|
|
3249
3511
|
epics,
|
|
@@ -3272,12 +3534,7 @@ function registerSaveStories(server) {
|
|
|
3272
3534
|
function registerUploadWireframe(server) {
|
|
3273
3535
|
server.registerTool("upload_wireframe", {
|
|
3274
3536
|
description: "Upload an image to a roadmap item's wireframes. Returns a curl command to execute for the upload, then creates the wireframe record. After running the curl command, the wireframe will be visible in the web app.",
|
|
3275
|
-
inputSchema:
|
|
3276
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
3277
|
-
filePath: z16.string().describe("Absolute path to the image file on disk"),
|
|
3278
|
-
description: z16.string().optional().describe("Optional description of the wireframe"),
|
|
3279
|
-
outcomeIds: z16.array(z16.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
|
|
3280
|
-
}
|
|
3537
|
+
inputSchema: uploadWireframeInput
|
|
3281
3538
|
}, async ({
|
|
3282
3539
|
roadmapId,
|
|
3283
3540
|
filePath,
|
|
@@ -3329,11 +3586,7 @@ function registerUploadWireframe(server) {
|
|
|
3329
3586
|
function registerUpdateWireframe(server) {
|
|
3330
3587
|
server.registerTool("update_wireframe", {
|
|
3331
3588
|
description: "Update a wireframe's description or outcome tags.",
|
|
3332
|
-
inputSchema:
|
|
3333
|
-
id: z16.string().describe("The UUID of the wireframe"),
|
|
3334
|
-
description: z16.string().nullable().optional().describe("New description for the wireframe"),
|
|
3335
|
-
outcomeIds: z16.array(z16.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
|
|
3336
|
-
}
|
|
3589
|
+
inputSchema: updateWireframeInput
|
|
3337
3590
|
}, async ({
|
|
3338
3591
|
id,
|
|
3339
3592
|
description,
|
|
@@ -3367,9 +3620,7 @@ function registerUpdateWireframe(server) {
|
|
|
3367
3620
|
function registerDeleteWireframe(server) {
|
|
3368
3621
|
server.registerTool("delete_wireframe", {
|
|
3369
3622
|
description: "Delete a wireframe (soft delete).",
|
|
3370
|
-
inputSchema:
|
|
3371
|
-
id: z16.string().describe("The UUID of the wireframe to delete")
|
|
3372
|
-
}
|
|
3623
|
+
inputSchema: deleteWireframeInput
|
|
3373
3624
|
}, async ({ id }) => {
|
|
3374
3625
|
const client2 = getApiClient();
|
|
3375
3626
|
await client2.deleteWireframe(id);
|
|
@@ -3386,11 +3637,7 @@ function registerDeleteWireframe(server) {
|
|
|
3386
3637
|
function registerUploadBrainstormMedia(server) {
|
|
3387
3638
|
server.registerTool("upload_brainstorm_media", {
|
|
3388
3639
|
description: "Upload an image or video to a roadmap item's brainstorming section. Returns a curl command to execute for the upload.",
|
|
3389
|
-
inputSchema:
|
|
3390
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
3391
|
-
filePath: z16.string().describe("Absolute path to the image or video file on disk"),
|
|
3392
|
-
description: z16.string().optional().describe("Optional description of the media")
|
|
3393
|
-
}
|
|
3640
|
+
inputSchema: uploadBrainstormMediaInput
|
|
3394
3641
|
}, async ({
|
|
3395
3642
|
roadmapId,
|
|
3396
3643
|
filePath,
|
|
@@ -3440,10 +3687,7 @@ function registerUploadBrainstormMedia(server) {
|
|
|
3440
3687
|
function registerUpdateBrainstormMedia(server) {
|
|
3441
3688
|
server.registerTool("update_brainstorm_media", {
|
|
3442
3689
|
description: "Update a brainstorm media item's description.",
|
|
3443
|
-
inputSchema:
|
|
3444
|
-
id: z16.string().describe("The UUID of the brainstorm media"),
|
|
3445
|
-
description: z16.string().nullable().describe("New description for the media")
|
|
3446
|
-
}
|
|
3690
|
+
inputSchema: updateBrainstormMediaInput
|
|
3447
3691
|
}, async ({ id, description }) => {
|
|
3448
3692
|
const client2 = getApiClient();
|
|
3449
3693
|
const media = await client2.updateBrainstormMedia(id, { description });
|
|
@@ -3465,9 +3709,7 @@ function registerUpdateBrainstormMedia(server) {
|
|
|
3465
3709
|
function registerDeleteBrainstormMedia(server) {
|
|
3466
3710
|
server.registerTool("delete_brainstorm_media", {
|
|
3467
3711
|
description: "Delete a brainstorm media item (soft delete).",
|
|
3468
|
-
inputSchema:
|
|
3469
|
-
id: z16.string().describe("The UUID of the brainstorm media to delete")
|
|
3470
|
-
}
|
|
3712
|
+
inputSchema: deleteBrainstormMediaInput
|
|
3471
3713
|
}, async ({ id }) => {
|
|
3472
3714
|
const client2 = getApiClient();
|
|
3473
3715
|
await client2.deleteBrainstormMedia(id);
|
|
@@ -3484,11 +3726,7 @@ function registerDeleteBrainstormMedia(server) {
|
|
|
3484
3726
|
function registerUploadProductDesignMedia(server) {
|
|
3485
3727
|
server.registerTool("upload_product_design_media", {
|
|
3486
3728
|
description: "Upload an image or video to a product's design media section. Returns a curl command to execute for the upload.",
|
|
3487
|
-
inputSchema:
|
|
3488
|
-
productId: z16.string().describe("The UUID of the product"),
|
|
3489
|
-
filePath: z16.string().describe("Absolute path to the image or video file on disk"),
|
|
3490
|
-
description: z16.string().optional().describe("Optional description of the media")
|
|
3491
|
-
}
|
|
3729
|
+
inputSchema: uploadProductDesignMediaInput
|
|
3492
3730
|
}, async ({
|
|
3493
3731
|
productId,
|
|
3494
3732
|
filePath,
|
|
@@ -3539,11 +3777,7 @@ function registerUploadProductDesignMedia(server) {
|
|
|
3539
3777
|
function registerUpdateProductDesignMedia(server) {
|
|
3540
3778
|
server.registerTool("update_product_design_media", {
|
|
3541
3779
|
description: "Update a product design media item's description.",
|
|
3542
|
-
inputSchema:
|
|
3543
|
-
productId: z16.string().describe("The UUID of the product"),
|
|
3544
|
-
mediaId: z16.string().describe("The UUID of the design media"),
|
|
3545
|
-
description: z16.string().nullable().describe("New description for the media")
|
|
3546
|
-
}
|
|
3780
|
+
inputSchema: updateProductDesignMediaInput
|
|
3547
3781
|
}, async ({
|
|
3548
3782
|
productId,
|
|
3549
3783
|
mediaId,
|
|
@@ -3569,10 +3803,7 @@ function registerUpdateProductDesignMedia(server) {
|
|
|
3569
3803
|
function registerDeleteProductDesignMedia(server) {
|
|
3570
3804
|
server.registerTool("delete_product_design_media", {
|
|
3571
3805
|
description: "Delete a product design media item (soft delete).",
|
|
3572
|
-
inputSchema:
|
|
3573
|
-
productId: z16.string().describe("The UUID of the product"),
|
|
3574
|
-
mediaId: z16.string().describe("The UUID of the design media to delete")
|
|
3575
|
-
}
|
|
3806
|
+
inputSchema: deleteProductDesignMediaInput
|
|
3576
3807
|
}, async ({ productId, mediaId }) => {
|
|
3577
3808
|
const client2 = getApiClient();
|
|
3578
3809
|
await client2.deleteProductDesignMedia(productId, mediaId);
|
|
@@ -3592,10 +3823,7 @@ function isVideoContentType(contentType) {
|
|
|
3592
3823
|
function registerUploadDesignWalkthrough(server) {
|
|
3593
3824
|
server.registerTool("upload_design_walkthrough", {
|
|
3594
3825
|
description: "Upload a walkthrough video to a roadmap item's design phase. Returns a curl command to execute for the upload.",
|
|
3595
|
-
inputSchema:
|
|
3596
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
3597
|
-
filePath: z16.string().describe("Absolute path to the video file on disk")
|
|
3598
|
-
}
|
|
3826
|
+
inputSchema: uploadDesignWalkthroughInput
|
|
3599
3827
|
}, async ({ roadmapId, filePath }) => {
|
|
3600
3828
|
const client2 = getApiClient();
|
|
3601
3829
|
const filename = filePath.split("/").pop() || "video.mp4";
|
|
@@ -3635,10 +3863,7 @@ function registerUploadDesignWalkthrough(server) {
|
|
|
3635
3863
|
function registerUploadReleaseWalkthrough(server) {
|
|
3636
3864
|
server.registerTool("upload_release_walkthrough", {
|
|
3637
3865
|
description: "Upload a walkthrough video to a roadmap item's release phase. Returns a curl command to execute for the upload.",
|
|
3638
|
-
inputSchema:
|
|
3639
|
-
roadmapId: z16.string().describe("The UUID of the roadmap item"),
|
|
3640
|
-
filePath: z16.string().describe("Absolute path to the video file on disk")
|
|
3641
|
-
}
|
|
3866
|
+
inputSchema: uploadReleaseWalkthroughInput
|
|
3642
3867
|
}, async ({ roadmapId, filePath }) => {
|
|
3643
3868
|
const client2 = getApiClient();
|
|
3644
3869
|
const filename = filePath.split("/").pop() || "video.mp4";
|
|
@@ -3694,11 +3919,7 @@ function getPrototypeContentType(filename) {
|
|
|
3694
3919
|
function registerPublishPrototype(server) {
|
|
3695
3920
|
server.registerTool("publish_prototype", {
|
|
3696
3921
|
description: "Publish a local prototype folder to a shareable URL. Uploads all files from the folder and returns a time-limited shareable link.",
|
|
3697
|
-
inputSchema:
|
|
3698
|
-
roadmapId: z16.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
|
|
3699
|
-
folderPath: z16.string().describe("Absolute path to the local mockup folder"),
|
|
3700
|
-
entryPoint: z16.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
|
|
3701
|
-
}
|
|
3922
|
+
inputSchema: publishPrototypeInput
|
|
3702
3923
|
}, async ({
|
|
3703
3924
|
roadmapId,
|
|
3704
3925
|
folderPath,
|
|
@@ -3857,9 +4078,7 @@ Expires: ${expiryDate}`
|
|
|
3857
4078
|
function registerListPrototypes(server) {
|
|
3858
4079
|
server.registerTool("list_prototypes", {
|
|
3859
4080
|
description: "List published prototypes for a roadmap item. Returns prototype IDs needed for creating feedback sessions.",
|
|
3860
|
-
inputSchema:
|
|
3861
|
-
roadmapId: z16.string().uuid().describe("The UUID of the roadmap item")
|
|
3862
|
-
}
|
|
4081
|
+
inputSchema: listPrototypesInput
|
|
3863
4082
|
}, async ({ roadmapId }) => {
|
|
3864
4083
|
const client2 = getApiClient();
|
|
3865
4084
|
const prototypes = await client2.listPrototypes(roadmapId);
|
|
@@ -3902,16 +4121,10 @@ ${lines.join(`
|
|
|
3902
4121
|
};
|
|
3903
4122
|
});
|
|
3904
4123
|
}
|
|
3905
|
-
var dateGranularitySchema2 = z16.enum(["day", "month", "quarter", "half-year", "year"]);
|
|
3906
4124
|
function registerSearchInitiatives(server) {
|
|
3907
4125
|
server.registerTool("search_initiatives", {
|
|
3908
4126
|
description: "Search for initiatives by title or filter by horizon. Returns a list of matching initiatives with item counts.",
|
|
3909
|
-
inputSchema:
|
|
3910
|
-
query: z16.string().optional().describe("Search query to match against title or description"),
|
|
3911
|
-
horizon: horizonSchema.optional().describe("Filter by planning horizon"),
|
|
3912
|
-
limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
|
|
3913
|
-
offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
|
|
3914
|
-
}
|
|
4127
|
+
inputSchema: searchInitiativesInput
|
|
3915
4128
|
}, async ({
|
|
3916
4129
|
query,
|
|
3917
4130
|
horizon,
|
|
@@ -3959,9 +4172,7 @@ function registerSearchInitiatives(server) {
|
|
|
3959
4172
|
function registerGetInitiative(server) {
|
|
3960
4173
|
server.registerTool("get_initiative", {
|
|
3961
4174
|
description: "Get full details of an initiative including all linked roadmap items.",
|
|
3962
|
-
inputSchema:
|
|
3963
|
-
id: z16.string().describe("The UUID of the initiative")
|
|
3964
|
-
}
|
|
4175
|
+
inputSchema: getInitiativeInput
|
|
3965
4176
|
}, async ({ id }) => {
|
|
3966
4177
|
const client2 = getApiClient();
|
|
3967
4178
|
const result = await client2.getInitiative(id);
|
|
@@ -3984,14 +4195,7 @@ function registerGetInitiative(server) {
|
|
|
3984
4195
|
function registerCreateInitiative(server) {
|
|
3985
4196
|
server.registerTool("create_initiative", {
|
|
3986
4197
|
description: "Create a new initiative. Initiatives group related roadmap items for cross-functional coordination.",
|
|
3987
|
-
inputSchema:
|
|
3988
|
-
title: z16.string().describe("Title of the initiative"),
|
|
3989
|
-
description: z16.string().optional().describe("Description of the initiative (markdown)"),
|
|
3990
|
-
horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
|
|
3991
|
-
dateGranularity: dateGranularitySchema2.optional().describe("Target date granularity: day, month, quarter, half-year, or year"),
|
|
3992
|
-
dateValue: z16.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
|
|
3993
|
-
targetDate: z16.string().optional().describe("Target date in YYYY-MM-DD format")
|
|
3994
|
-
}
|
|
4198
|
+
inputSchema: createInitiativeInput
|
|
3995
4199
|
}, async ({
|
|
3996
4200
|
title,
|
|
3997
4201
|
description,
|
|
@@ -4033,16 +4237,7 @@ function registerCreateInitiative(server) {
|
|
|
4033
4237
|
function registerUpdateInitiative(server) {
|
|
4034
4238
|
server.registerTool("update_initiative", {
|
|
4035
4239
|
description: "Update an existing initiative.",
|
|
4036
|
-
inputSchema:
|
|
4037
|
-
id: z16.string().describe("The UUID of the initiative to update"),
|
|
4038
|
-
title: z16.string().optional().describe("New title"),
|
|
4039
|
-
description: z16.string().nullable().optional().describe("New description (null to clear)"),
|
|
4040
|
-
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
4041
|
-
dateGranularity: dateGranularitySchema2.nullable().optional().describe("New target date granularity (null to clear)"),
|
|
4042
|
-
dateValue: z16.string().nullable().optional().describe("New target date value (null to clear)"),
|
|
4043
|
-
targetDate: z16.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
|
|
4044
|
-
order: z16.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
|
|
4045
|
-
}
|
|
4240
|
+
inputSchema: updateInitiativeInput
|
|
4046
4241
|
}, async ({
|
|
4047
4242
|
id,
|
|
4048
4243
|
title,
|
|
@@ -4095,9 +4290,7 @@ function registerUpdateInitiative(server) {
|
|
|
4095
4290
|
function registerDeleteInitiative(server) {
|
|
4096
4291
|
server.registerTool("delete_initiative", {
|
|
4097
4292
|
description: "Delete an initiative. This is a soft delete that also unlinks all roadmap items from the initiative.",
|
|
4098
|
-
inputSchema:
|
|
4099
|
-
id: z16.string().describe("The UUID of the initiative to delete")
|
|
4100
|
-
}
|
|
4293
|
+
inputSchema: deleteInitiativeInput
|
|
4101
4294
|
}, async ({ id }) => {
|
|
4102
4295
|
const client2 = getApiClient();
|
|
4103
4296
|
await client2.deleteInitiative(id);
|
|
@@ -4114,12 +4307,7 @@ function registerDeleteInitiative(server) {
|
|
|
4114
4307
|
function registerReorderInitiatives(server) {
|
|
4115
4308
|
server.registerTool("reorder_initiatives", {
|
|
4116
4309
|
description: "Bulk reorder initiatives by setting their order values. Lower order values appear first.",
|
|
4117
|
-
inputSchema:
|
|
4118
|
-
items: z16.array(z16.object({
|
|
4119
|
-
id: z16.string().describe("The UUID of the initiative"),
|
|
4120
|
-
order: z16.number().int().min(0).describe("The new order value (0-based)")
|
|
4121
|
-
})).describe("Array of initiatives with their new order values")
|
|
4122
|
-
}
|
|
4310
|
+
inputSchema: reorderInitiativesInput
|
|
4123
4311
|
}, async ({ items }) => {
|
|
4124
4312
|
const client2 = getApiClient();
|
|
4125
4313
|
await client2.reorderInitiatives(items);
|
|
@@ -4136,14 +4324,7 @@ function registerReorderInitiatives(server) {
|
|
|
4136
4324
|
function registerSearchExports(server) {
|
|
4137
4325
|
server.registerTool("search_exports", {
|
|
4138
4326
|
description: "Search for export records by roadmap, external system, or entity. Returns a list of matching exports with pagination.",
|
|
4139
|
-
inputSchema:
|
|
4140
|
-
roadmapId: z16.string().uuid().optional().describe("Filter by roadmap item ID"),
|
|
4141
|
-
externalSystem: z16.enum(["linear", "notion", "jira", "github"]).optional().describe("Filter by external system"),
|
|
4142
|
-
localEntityType: z16.enum(["roadmap", "prd", "epic", "story", "design"]).optional().describe("Filter by local entity type"),
|
|
4143
|
-
localEntityId: z16.string().uuid().optional().describe("Filter by local entity ID"),
|
|
4144
|
-
limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
|
|
4145
|
-
offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
|
|
4146
|
-
}
|
|
4327
|
+
inputSchema: searchExportsInput
|
|
4147
4328
|
}, async ({
|
|
4148
4329
|
roadmapId,
|
|
4149
4330
|
externalSystem,
|
|
@@ -4178,9 +4359,7 @@ function registerSearchExports(server) {
|
|
|
4178
4359
|
function registerGetExport(server) {
|
|
4179
4360
|
server.registerTool("get_export", {
|
|
4180
4361
|
description: "Get full details of a single export record by ID.",
|
|
4181
|
-
inputSchema:
|
|
4182
|
-
id: z16.string().uuid().describe("The UUID of the export record")
|
|
4183
|
-
}
|
|
4362
|
+
inputSchema: getExportInput
|
|
4184
4363
|
}, async ({ id }) => {
|
|
4185
4364
|
const client2 = getApiClient();
|
|
4186
4365
|
const exportRecord = await client2.getExport(id);
|
|
@@ -4197,16 +4376,7 @@ function registerGetExport(server) {
|
|
|
4197
4376
|
function registerCreateExport(server) {
|
|
4198
4377
|
server.registerTool("create_export", {
|
|
4199
4378
|
description: "Record a new export (with upsert). If an export with the same roadmap, entity, and external system already exists, it will be updated.",
|
|
4200
|
-
inputSchema:
|
|
4201
|
-
roadmapId: z16.string().uuid().describe("The UUID of the roadmap item"),
|
|
4202
|
-
localEntityType: z16.enum(["roadmap", "prd", "epic", "story", "design"]).describe("Type of local entity being exported"),
|
|
4203
|
-
localEntityId: z16.string().uuid().describe("The UUID of the local entity"),
|
|
4204
|
-
externalSystem: z16.enum(["linear", "notion", "jira", "github"]).describe("External system where the entity was exported"),
|
|
4205
|
-
externalObjectType: z16.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
|
|
4206
|
-
externalId: z16.string().min(1).describe("ID of the object in the external system"),
|
|
4207
|
-
externalUrl: z16.string().url().optional().describe("URL to the object in the external system"),
|
|
4208
|
-
metadata: z16.record(z16.unknown()).optional().describe("Additional metadata about the export")
|
|
4209
|
-
}
|
|
4379
|
+
inputSchema: createExportInput
|
|
4210
4380
|
}, async ({
|
|
4211
4381
|
roadmapId,
|
|
4212
4382
|
localEntityType,
|
|
@@ -4241,11 +4411,7 @@ function registerCreateExport(server) {
|
|
|
4241
4411
|
function registerUpdateExport(server) {
|
|
4242
4412
|
server.registerTool("update_export", {
|
|
4243
4413
|
description: "Update an export record. Can update the external URL or metadata.",
|
|
4244
|
-
inputSchema:
|
|
4245
|
-
id: z16.string().uuid().describe("The UUID of the export record to update"),
|
|
4246
|
-
externalUrl: z16.string().url().nullable().optional().describe("New URL to the object in the external system"),
|
|
4247
|
-
metadata: z16.record(z16.unknown()).optional().describe("New metadata to replace existing metadata")
|
|
4248
|
-
}
|
|
4414
|
+
inputSchema: updateExportInput
|
|
4249
4415
|
}, async ({
|
|
4250
4416
|
id,
|
|
4251
4417
|
externalUrl,
|
|
@@ -4266,9 +4432,7 @@ function registerUpdateExport(server) {
|
|
|
4266
4432
|
function registerDeleteExport(server) {
|
|
4267
4433
|
server.registerTool("delete_export", {
|
|
4268
4434
|
description: "Delete an export record. This is a soft delete.",
|
|
4269
|
-
inputSchema:
|
|
4270
|
-
id: z16.string().uuid().describe("The UUID of the export record to delete")
|
|
4271
|
-
}
|
|
4435
|
+
inputSchema: deleteExportInput
|
|
4272
4436
|
}, async ({ id }) => {
|
|
4273
4437
|
const client2 = getApiClient();
|
|
4274
4438
|
await client2.deleteExport(id);
|
|
@@ -4302,9 +4466,7 @@ function registerListPresentations(server) {
|
|
|
4302
4466
|
function registerGetPresentation(server) {
|
|
4303
4467
|
server.registerTool("get_presentation", {
|
|
4304
4468
|
description: "Get presentation with variants and slides.",
|
|
4305
|
-
inputSchema:
|
|
4306
|
-
id: z16.string().describe("The UUID of the presentation")
|
|
4307
|
-
}
|
|
4469
|
+
inputSchema: getPresentationInput
|
|
4308
4470
|
}, async ({ id }) => {
|
|
4309
4471
|
const client2 = getApiClient();
|
|
4310
4472
|
const presentation2 = await client2.getPresentation(id);
|
|
@@ -4332,10 +4494,7 @@ function registerGetPresentation(server) {
|
|
|
4332
4494
|
function registerCreatePresentation(server) {
|
|
4333
4495
|
server.registerTool("create_presentation", {
|
|
4334
4496
|
description: "Create a new presentation.",
|
|
4335
|
-
inputSchema:
|
|
4336
|
-
title: z16.string().describe("Title of the presentation"),
|
|
4337
|
-
description: z16.string().nullable().optional().describe("Description of the presentation")
|
|
4338
|
-
}
|
|
4497
|
+
inputSchema: createPresentationInput
|
|
4339
4498
|
}, async ({ title, description }) => {
|
|
4340
4499
|
const client2 = getApiClient();
|
|
4341
4500
|
const presentation2 = await client2.createPresentation({
|
|
@@ -4355,11 +4514,7 @@ function registerCreatePresentation(server) {
|
|
|
4355
4514
|
function registerUpdatePresentation(server) {
|
|
4356
4515
|
server.registerTool("update_presentation", {
|
|
4357
4516
|
description: "Update an existing presentation.",
|
|
4358
|
-
inputSchema:
|
|
4359
|
-
id: z16.string().describe("The UUID of the presentation to update"),
|
|
4360
|
-
title: z16.string().optional().describe("New title"),
|
|
4361
|
-
description: z16.string().nullable().optional().describe("New description")
|
|
4362
|
-
}
|
|
4517
|
+
inputSchema: updatePresentationInput
|
|
4363
4518
|
}, async ({
|
|
4364
4519
|
id,
|
|
4365
4520
|
title,
|
|
@@ -4385,9 +4540,7 @@ function registerUpdatePresentation(server) {
|
|
|
4385
4540
|
function registerDeletePresentation(server) {
|
|
4386
4541
|
server.registerTool("delete_presentation", {
|
|
4387
4542
|
description: "Delete a presentation.",
|
|
4388
|
-
inputSchema:
|
|
4389
|
-
id: z16.string().describe("The UUID of the presentation to delete")
|
|
4390
|
-
}
|
|
4543
|
+
inputSchema: deletePresentationInput
|
|
4391
4544
|
}, async ({ id }) => {
|
|
4392
4545
|
const client2 = getApiClient();
|
|
4393
4546
|
await client2.deletePresentation(id);
|
|
@@ -4404,12 +4557,7 @@ function registerDeletePresentation(server) {
|
|
|
4404
4557
|
function registerReorderPresentations(server) {
|
|
4405
4558
|
server.registerTool("reorder_presentations", {
|
|
4406
4559
|
description: "Reorder presentations by setting their order values. Lower order values appear first.",
|
|
4407
|
-
inputSchema:
|
|
4408
|
-
items: z16.array(z16.object({
|
|
4409
|
-
id: z16.string().describe("The UUID of the presentation"),
|
|
4410
|
-
order: z16.number().int().min(0).describe("The new order value (0-based)")
|
|
4411
|
-
})).describe("Array of presentations with their new order values")
|
|
4412
|
-
}
|
|
4560
|
+
inputSchema: reorderPresentationsInput
|
|
4413
4561
|
}, async ({ items }) => {
|
|
4414
4562
|
const client2 = getApiClient();
|
|
4415
4563
|
await client2.reorderPresentations(items);
|
|
@@ -4426,9 +4574,7 @@ function registerReorderPresentations(server) {
|
|
|
4426
4574
|
function registerListVariants(server) {
|
|
4427
4575
|
server.registerTool("list_variants", {
|
|
4428
4576
|
description: "List all variants for a presentation.",
|
|
4429
|
-
inputSchema:
|
|
4430
|
-
presentationId: z16.string().describe("The UUID of the presentation")
|
|
4431
|
-
}
|
|
4577
|
+
inputSchema: listVariantsInput
|
|
4432
4578
|
}, async ({ presentationId }) => {
|
|
4433
4579
|
const client2 = getApiClient();
|
|
4434
4580
|
const result = await client2.listVariants(presentationId);
|
|
@@ -4445,10 +4591,7 @@ function registerListVariants(server) {
|
|
|
4445
4591
|
function registerGetVariant(server) {
|
|
4446
4592
|
server.registerTool("get_variant", {
|
|
4447
4593
|
description: "Get variant with its slides.",
|
|
4448
|
-
inputSchema:
|
|
4449
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4450
|
-
variantId: z16.string().describe("The UUID of the variant")
|
|
4451
|
-
}
|
|
4594
|
+
inputSchema: getVariantInput
|
|
4452
4595
|
}, async ({ presentationId, variantId }) => {
|
|
4453
4596
|
const client2 = getApiClient();
|
|
4454
4597
|
const variant2 = await client2.getVariant(presentationId, variantId);
|
|
@@ -4469,11 +4612,7 @@ function registerGetVariant(server) {
|
|
|
4469
4612
|
function registerCreateVariant(server) {
|
|
4470
4613
|
server.registerTool("create_variant", {
|
|
4471
4614
|
description: "Create a new variant for a presentation.",
|
|
4472
|
-
inputSchema:
|
|
4473
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4474
|
-
name: z16.string().describe("Name of the variant"),
|
|
4475
|
-
audienceId: z16.string().nullable().optional().describe("The UUID of the target audience")
|
|
4476
|
-
}
|
|
4615
|
+
inputSchema: createVariantInput
|
|
4477
4616
|
}, async ({
|
|
4478
4617
|
presentationId,
|
|
4479
4618
|
name,
|
|
@@ -4497,12 +4636,7 @@ function registerCreateVariant(server) {
|
|
|
4497
4636
|
function registerUpdateVariant(server) {
|
|
4498
4637
|
server.registerTool("update_variant", {
|
|
4499
4638
|
description: "Update an existing variant.",
|
|
4500
|
-
inputSchema:
|
|
4501
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4502
|
-
variantId: z16.string().describe("The UUID of the variant to update"),
|
|
4503
|
-
name: z16.string().optional().describe("New name"),
|
|
4504
|
-
audienceId: z16.string().nullable().optional().describe("New target audience UUID")
|
|
4505
|
-
}
|
|
4639
|
+
inputSchema: updateVariantInput
|
|
4506
4640
|
}, async ({
|
|
4507
4641
|
presentationId,
|
|
4508
4642
|
variantId,
|
|
@@ -4529,10 +4663,7 @@ function registerUpdateVariant(server) {
|
|
|
4529
4663
|
function registerDeleteVariant(server) {
|
|
4530
4664
|
server.registerTool("delete_variant", {
|
|
4531
4665
|
description: "Delete a variant.",
|
|
4532
|
-
inputSchema:
|
|
4533
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4534
|
-
variantId: z16.string().describe("The UUID of the variant to delete")
|
|
4535
|
-
}
|
|
4666
|
+
inputSchema: deleteVariantInput
|
|
4536
4667
|
}, async ({ presentationId, variantId }) => {
|
|
4537
4668
|
const client2 = getApiClient();
|
|
4538
4669
|
await client2.deleteVariant(presentationId, variantId);
|
|
@@ -4549,13 +4680,7 @@ function registerDeleteVariant(server) {
|
|
|
4549
4680
|
function registerReorderVariants(server) {
|
|
4550
4681
|
server.registerTool("reorder_variants", {
|
|
4551
4682
|
description: "Reorder variants by setting their order values. Lower order values appear first.",
|
|
4552
|
-
inputSchema:
|
|
4553
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4554
|
-
items: z16.array(z16.object({
|
|
4555
|
-
id: z16.string().describe("The UUID of the variant"),
|
|
4556
|
-
order: z16.number().int().min(0).describe("The new order value (0-based)")
|
|
4557
|
-
})).describe("Array of variants with their new order values")
|
|
4558
|
-
}
|
|
4683
|
+
inputSchema: reorderVariantsInput
|
|
4559
4684
|
}, async ({
|
|
4560
4685
|
presentationId,
|
|
4561
4686
|
items
|
|
@@ -4575,10 +4700,7 @@ function registerReorderVariants(server) {
|
|
|
4575
4700
|
function registerCloneVariant(server) {
|
|
4576
4701
|
server.registerTool("clone_variant", {
|
|
4577
4702
|
description: "Clone a variant with all its slides.",
|
|
4578
|
-
inputSchema:
|
|
4579
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4580
|
-
variantId: z16.string().describe("The UUID of the variant to clone")
|
|
4581
|
-
}
|
|
4703
|
+
inputSchema: cloneVariantInput
|
|
4582
4704
|
}, async ({ presentationId, variantId }) => {
|
|
4583
4705
|
const client2 = getApiClient();
|
|
4584
4706
|
const clonedVariant = await client2.cloneVariant(presentationId, variantId);
|
|
@@ -4595,10 +4717,7 @@ function registerCloneVariant(server) {
|
|
|
4595
4717
|
function registerSetDefaultVariant(server) {
|
|
4596
4718
|
server.registerTool("set_default_variant", {
|
|
4597
4719
|
description: "Set a variant as the default for the presentation.",
|
|
4598
|
-
inputSchema:
|
|
4599
|
-
presentationId: z16.string().describe("The UUID of the presentation"),
|
|
4600
|
-
variantId: z16.string().describe("The UUID of the variant to set as default")
|
|
4601
|
-
}
|
|
4720
|
+
inputSchema: setDefaultVariantInput
|
|
4602
4721
|
}, async ({ presentationId, variantId }) => {
|
|
4603
4722
|
const client2 = getApiClient();
|
|
4604
4723
|
await client2.setDefaultVariant(presentationId, variantId);
|
|
@@ -4615,9 +4734,7 @@ function registerSetDefaultVariant(server) {
|
|
|
4615
4734
|
function registerListSlides(server) {
|
|
4616
4735
|
server.registerTool("list_slides", {
|
|
4617
4736
|
description: "List all slides in a variant.",
|
|
4618
|
-
inputSchema:
|
|
4619
|
-
variantId: z16.string().describe("The UUID of the variant")
|
|
4620
|
-
}
|
|
4737
|
+
inputSchema: listSlidesInput
|
|
4621
4738
|
}, async ({ variantId }) => {
|
|
4622
4739
|
const client2 = getApiClient();
|
|
4623
4740
|
const presentationId = await client2.getVariantPresentationId(variantId);
|
|
@@ -4645,10 +4762,7 @@ function registerListSlides(server) {
|
|
|
4645
4762
|
function registerGetSlide(server) {
|
|
4646
4763
|
server.registerTool("get_slide", {
|
|
4647
4764
|
description: "Get a slide by ID.",
|
|
4648
|
-
inputSchema:
|
|
4649
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4650
|
-
slideId: z16.string().describe("The UUID of the slide")
|
|
4651
|
-
}
|
|
4765
|
+
inputSchema: getSlideInput
|
|
4652
4766
|
}, async ({ variantId, slideId }) => {
|
|
4653
4767
|
const client2 = getApiClient();
|
|
4654
4768
|
const presentationId = await client2.getVariantPresentationId(variantId);
|
|
@@ -4676,25 +4790,7 @@ function registerGetSlide(server) {
|
|
|
4676
4790
|
function registerCreateSlide(server) {
|
|
4677
4791
|
server.registerTool("create_slide", {
|
|
4678
4792
|
description: "Create a new slide in a variant. Slide types: title (title + subtitle), section_header (title + subtitle), bullets (title + items array), two_column (title + left/right text), comparison (leftLabel + leftContent + rightLabel + rightContent), timeline (title + steps array of {title, description}), image (title + imageUrl + caption), quote (quote + attribution), code (title + code + language), thank_you (title + subtitle), mermaid (title + code with mermaid diagram syntax), paragraph (title + body with markdown text).",
|
|
4679
|
-
inputSchema:
|
|
4680
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4681
|
-
slideType: z16.enum([
|
|
4682
|
-
"title",
|
|
4683
|
-
"section_header",
|
|
4684
|
-
"bullets",
|
|
4685
|
-
"two_column",
|
|
4686
|
-
"comparison",
|
|
4687
|
-
"timeline",
|
|
4688
|
-
"image",
|
|
4689
|
-
"quote",
|
|
4690
|
-
"code",
|
|
4691
|
-
"thank_you",
|
|
4692
|
-
"mermaid",
|
|
4693
|
-
"paragraph"
|
|
4694
|
-
]).default("bullets").describe("The type of slide to create"),
|
|
4695
|
-
content: z16.record(z16.unknown()).optional().describe('Type-specific content object. For bullets: {title, items: ["..."]}. For title: {title, subtitle}. For two_column: {title, left, right}. For quote: {quote, attribution}. For mermaid: {title, code: "graph TD; A-->B"}. For paragraph: {title, body}. Etc.'),
|
|
4696
|
-
speakerNotes: z16.string().nullable().optional().describe("Speaker notes for the slide")
|
|
4697
|
-
}
|
|
4793
|
+
inputSchema: createSlideInput
|
|
4698
4794
|
}, async ({
|
|
4699
4795
|
variantId,
|
|
4700
4796
|
slideType,
|
|
@@ -4731,13 +4827,7 @@ function registerCreateSlide(server) {
|
|
|
4731
4827
|
function registerUpdateSlide(server) {
|
|
4732
4828
|
server.registerTool("update_slide", {
|
|
4733
4829
|
description: "Update an existing slide.",
|
|
4734
|
-
inputSchema:
|
|
4735
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4736
|
-
slideId: z16.string().describe("The UUID of the slide to update"),
|
|
4737
|
-
title: z16.string().optional().describe("New title"),
|
|
4738
|
-
content: z16.object({ body: z16.string().optional() }).nullable().optional().describe("New slide content with markdown body"),
|
|
4739
|
-
speakerNotes: z16.string().nullable().optional().describe("New speaker notes")
|
|
4740
|
-
}
|
|
4830
|
+
inputSchema: updateSlideInput
|
|
4741
4831
|
}, async ({
|
|
4742
4832
|
variantId,
|
|
4743
4833
|
slideId,
|
|
@@ -4778,10 +4868,7 @@ function registerUpdateSlide(server) {
|
|
|
4778
4868
|
function registerDeleteSlide(server) {
|
|
4779
4869
|
server.registerTool("delete_slide", {
|
|
4780
4870
|
description: "Delete a slide (soft delete).",
|
|
4781
|
-
inputSchema:
|
|
4782
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4783
|
-
slideId: z16.string().describe("The UUID of the slide to delete")
|
|
4784
|
-
}
|
|
4871
|
+
inputSchema: deleteSlideInput
|
|
4785
4872
|
}, async ({ variantId, slideId }) => {
|
|
4786
4873
|
const client2 = getApiClient();
|
|
4787
4874
|
const presentationId = await client2.getVariantPresentationId(variantId);
|
|
@@ -4809,13 +4896,7 @@ function registerDeleteSlide(server) {
|
|
|
4809
4896
|
function registerReorderSlides(server) {
|
|
4810
4897
|
server.registerTool("reorder_slides", {
|
|
4811
4898
|
description: "Reorder slides by setting their order values. Lower order values appear first.",
|
|
4812
|
-
inputSchema:
|
|
4813
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4814
|
-
items: z16.array(z16.object({
|
|
4815
|
-
id: z16.string().describe("The UUID of the slide"),
|
|
4816
|
-
order: z16.number().int().min(0).describe("The new order value (0-based)")
|
|
4817
|
-
})).describe("Array of slides with their new order values")
|
|
4818
|
-
}
|
|
4899
|
+
inputSchema: reorderSlidesInput
|
|
4819
4900
|
}, async ({
|
|
4820
4901
|
variantId,
|
|
4821
4902
|
items
|
|
@@ -4846,11 +4927,7 @@ function registerReorderSlides(server) {
|
|
|
4846
4927
|
function registerUploadSlideImage(server) {
|
|
4847
4928
|
server.registerTool("upload_slide_image", {
|
|
4848
4929
|
description: 'Upload an image to a slide. Gets a presigned URL and returns a curl command to execute for the upload, then updates the slide content with the image URL. The slide must be of type "image".',
|
|
4849
|
-
inputSchema:
|
|
4850
|
-
variantId: z16.string().describe("The UUID of the variant"),
|
|
4851
|
-
slideId: z16.string().describe("The UUID of the slide to add the image to"),
|
|
4852
|
-
filePath: z16.string().describe("Absolute path to the image file on disk")
|
|
4853
|
-
}
|
|
4930
|
+
inputSchema: uploadSlideImageInput
|
|
4854
4931
|
}, async ({
|
|
4855
4932
|
variantId,
|
|
4856
4933
|
slideId,
|
|
@@ -4922,11 +4999,7 @@ function registerUploadSlideImage(server) {
|
|
|
4922
4999
|
function registerCreateFeedbackSession(server) {
|
|
4923
5000
|
server.registerTool("create_feedback_session", {
|
|
4924
5001
|
description: "Create a feedback session for a prototype and get a shareable review link. Reviewers who open the link can optionally enter their name before leaving pin-based feedback.",
|
|
4925
|
-
inputSchema:
|
|
4926
|
-
prototypeId: z16.string().uuid().describe("The UUID of the prototype to create a feedback session for"),
|
|
4927
|
-
name: z16.string().describe('Name for this feedback session (e.g., "Round 1 Review")'),
|
|
4928
|
-
expiresInDays: z16.number().int().min(1).max(90).optional().describe("Number of days until the session expires (default 7)")
|
|
4929
|
-
}
|
|
5002
|
+
inputSchema: createFeedbackSessionInput
|
|
4930
5003
|
}, async ({
|
|
4931
5004
|
prototypeId,
|
|
4932
5005
|
name,
|
|
@@ -4973,9 +5046,7 @@ function registerCreateFeedbackSession(server) {
|
|
|
4973
5046
|
function registerListFeedbackSessions(server) {
|
|
4974
5047
|
server.registerTool("list_feedback_sessions", {
|
|
4975
5048
|
description: "List all feedback sessions for a prototype with comment counts and status.",
|
|
4976
|
-
inputSchema:
|
|
4977
|
-
prototypeId: z16.string().uuid().describe("The UUID of the prototype")
|
|
4978
|
-
}
|
|
5049
|
+
inputSchema: listFeedbackSessionsInput
|
|
4979
5050
|
}, async ({ prototypeId }) => {
|
|
4980
5051
|
const client2 = getApiClient();
|
|
4981
5052
|
const sessions = await client2.listFeedbackSessions(prototypeId);
|
|
@@ -5024,11 +5095,7 @@ function formatCommentLine(c) {
|
|
|
5024
5095
|
function registerGetFeedbackSummary(server) {
|
|
5025
5096
|
server.registerTool("get_feedback_summary", {
|
|
5026
5097
|
description: "Get a human-readable summary of feedback for a session, grouped by page. Shows pin numbers, reviewer names, comment text, and which element was pinned. Use this for a quick overview of feedback.",
|
|
5027
|
-
inputSchema:
|
|
5028
|
-
prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
|
|
5029
|
-
sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
|
|
5030
|
-
filter: z16.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: unresolved)")
|
|
5031
|
-
}
|
|
5098
|
+
inputSchema: getFeedbackSummaryInput
|
|
5032
5099
|
}, async ({
|
|
5033
5100
|
prototypeId,
|
|
5034
5101
|
sessionId,
|
|
@@ -5067,12 +5134,7 @@ function registerGetFeedbackSummary(server) {
|
|
|
5067
5134
|
function registerGetFeedbackDetail(server) {
|
|
5068
5135
|
server.registerTool("get_feedback_detail", {
|
|
5069
5136
|
description: "Get full raw pin data for feedback comments, including CSS selectors, bounding boxes, parent/sibling DOM context, and coordinates. Use this when you need exact element information to make targeted code changes.",
|
|
5070
|
-
inputSchema:
|
|
5071
|
-
prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
|
|
5072
|
-
sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
|
|
5073
|
-
commentId: z16.string().uuid().optional().describe("Optional: get detail for a single comment"),
|
|
5074
|
-
filter: z16.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: all). Ignored if commentId is provided.")
|
|
5075
|
-
}
|
|
5137
|
+
inputSchema: getFeedbackDetailInput
|
|
5076
5138
|
}, async ({
|
|
5077
5139
|
prototypeId,
|
|
5078
5140
|
sessionId,
|
|
@@ -5116,11 +5178,7 @@ function registerGetFeedbackDetail(server) {
|
|
|
5116
5178
|
function registerResolveFeedbackComment(server) {
|
|
5117
5179
|
server.registerTool("resolve_feedback_comment", {
|
|
5118
5180
|
description: "Toggle the resolved status on a feedback comment. If currently unresolved, marks it as resolved. If already resolved, marks it as unresolved.",
|
|
5119
|
-
inputSchema:
|
|
5120
|
-
prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
|
|
5121
|
-
sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
|
|
5122
|
-
commentId: z16.string().uuid().describe("The UUID of the comment to resolve/unresolve")
|
|
5123
|
-
}
|
|
5181
|
+
inputSchema: resolveFeedbackCommentInput
|
|
5124
5182
|
}, async ({
|
|
5125
5183
|
prototypeId,
|
|
5126
5184
|
sessionId,
|