@ourroadmaps/mcp 0.2.0 → 0.4.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 +128 -3
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -23746,11 +23746,12 @@ var prdSchema = exports_external.object({
|
|
|
23746
23746
|
var savePrdInputSchema = exports_external.object({
|
|
23747
23747
|
what: exports_external.string().nullable(),
|
|
23748
23748
|
why: exports_external.string().nullable(),
|
|
23749
|
+
status: prdStatusSchema,
|
|
23749
23750
|
outcomes: exports_external.array(exports_external.object({
|
|
23750
23751
|
id: exports_external.string().uuid().optional(),
|
|
23751
23752
|
description: exports_external.string(),
|
|
23752
|
-
|
|
23753
|
-
}))
|
|
23753
|
+
order: exports_external.number().int().min(0)
|
|
23754
|
+
}))
|
|
23754
23755
|
});
|
|
23755
23756
|
var brainstormMediaSchema = exports_external.object({
|
|
23756
23757
|
id: exports_external.string().uuid(),
|
|
@@ -24032,6 +24033,28 @@ class ApiClient {
|
|
|
24032
24033
|
method: "DELETE"
|
|
24033
24034
|
});
|
|
24034
24035
|
}
|
|
24036
|
+
async listStatusUpdates() {
|
|
24037
|
+
const response = await this.request("/v1/status-updates");
|
|
24038
|
+
return response.data;
|
|
24039
|
+
}
|
|
24040
|
+
async createStatusUpdate(data) {
|
|
24041
|
+
const response = await this.request("/v1/status-updates", {
|
|
24042
|
+
method: "POST",
|
|
24043
|
+
body: JSON.stringify(data)
|
|
24044
|
+
});
|
|
24045
|
+
return response.data;
|
|
24046
|
+
}
|
|
24047
|
+
async getHistory(params) {
|
|
24048
|
+
const searchParams = new URLSearchParams({
|
|
24049
|
+
startDate: params.startDate,
|
|
24050
|
+
endDate: params.endDate
|
|
24051
|
+
});
|
|
24052
|
+
if (params.entityType) {
|
|
24053
|
+
searchParams.set("entityType", params.entityType);
|
|
24054
|
+
}
|
|
24055
|
+
const response = await this.request(`/v1/history?${searchParams.toString()}`);
|
|
24056
|
+
return response.data;
|
|
24057
|
+
}
|
|
24035
24058
|
}
|
|
24036
24059
|
var client = null;
|
|
24037
24060
|
function getApiClient() {
|
|
@@ -24073,6 +24096,9 @@ function registerAllTools(server) {
|
|
|
24073
24096
|
registerCreateAudience(server);
|
|
24074
24097
|
registerUpdateAudience(server);
|
|
24075
24098
|
registerDeleteAudience(server);
|
|
24099
|
+
registerListStatusUpdates(server);
|
|
24100
|
+
registerGetHistory(server);
|
|
24101
|
+
registerCreateStatusUpdate(server);
|
|
24076
24102
|
}
|
|
24077
24103
|
function registerSearchRoadmaps(server) {
|
|
24078
24104
|
server.registerTool("search_roadmaps", {
|
|
@@ -24522,7 +24548,8 @@ function registerSavePrd(server) {
|
|
|
24522
24548
|
const prd = await client2.savePrd(roadmapId, {
|
|
24523
24549
|
what: what ?? null,
|
|
24524
24550
|
why: why ?? null,
|
|
24525
|
-
|
|
24551
|
+
status: "draft",
|
|
24552
|
+
outcomes: (outcomes ?? []).map((desc, index) => ({ description: desc, order: index }))
|
|
24526
24553
|
});
|
|
24527
24554
|
return {
|
|
24528
24555
|
content: [
|
|
@@ -25133,6 +25160,104 @@ function registerDeleteAudience(server) {
|
|
|
25133
25160
|
};
|
|
25134
25161
|
});
|
|
25135
25162
|
}
|
|
25163
|
+
function registerListStatusUpdates(server) {
|
|
25164
|
+
server.registerTool("list_status_updates", {
|
|
25165
|
+
description: "List all status reports for the organization. Use this to find when the last report ended to auto-detect start date for a new report.",
|
|
25166
|
+
inputSchema: {}
|
|
25167
|
+
}, async () => {
|
|
25168
|
+
const client2 = getApiClient();
|
|
25169
|
+
const updates = await client2.listStatusUpdates();
|
|
25170
|
+
return {
|
|
25171
|
+
content: [
|
|
25172
|
+
{
|
|
25173
|
+
type: "text",
|
|
25174
|
+
text: JSON.stringify(updates.map((u) => ({
|
|
25175
|
+
id: u.id,
|
|
25176
|
+
title: u.title,
|
|
25177
|
+
startDate: u.startDate,
|
|
25178
|
+
endDate: u.endDate,
|
|
25179
|
+
createdAt: u.createdAt
|
|
25180
|
+
})), null, 2)
|
|
25181
|
+
}
|
|
25182
|
+
]
|
|
25183
|
+
};
|
|
25184
|
+
});
|
|
25185
|
+
}
|
|
25186
|
+
function registerGetHistory(server) {
|
|
25187
|
+
server.registerTool("get_history", {
|
|
25188
|
+
description: "Get history events for a date range. Returns all changes (created, updated, deleted) to roadmaps, features, ideas, etc. Use this to gather data for generating status reports.",
|
|
25189
|
+
inputSchema: {
|
|
25190
|
+
startDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
25191
|
+
endDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
|
|
25192
|
+
entityType: exports_external.enum([
|
|
25193
|
+
"roadmap",
|
|
25194
|
+
"feature",
|
|
25195
|
+
"idea",
|
|
25196
|
+
"prd",
|
|
25197
|
+
"wireframe",
|
|
25198
|
+
"product",
|
|
25199
|
+
"audience",
|
|
25200
|
+
"scenario"
|
|
25201
|
+
]).optional().describe("Filter to specific entity type")
|
|
25202
|
+
}
|
|
25203
|
+
}, async ({
|
|
25204
|
+
startDate,
|
|
25205
|
+
endDate,
|
|
25206
|
+
entityType
|
|
25207
|
+
}) => {
|
|
25208
|
+
const client2 = getApiClient();
|
|
25209
|
+
const events = await client2.getHistory({ startDate, endDate, entityType });
|
|
25210
|
+
return {
|
|
25211
|
+
content: [
|
|
25212
|
+
{
|
|
25213
|
+
type: "text",
|
|
25214
|
+
text: JSON.stringify(events, null, 2)
|
|
25215
|
+
}
|
|
25216
|
+
]
|
|
25217
|
+
};
|
|
25218
|
+
});
|
|
25219
|
+
}
|
|
25220
|
+
function registerCreateStatusUpdate(server) {
|
|
25221
|
+
server.registerTool("create_status_update", {
|
|
25222
|
+
description: "Create a new status report. Use this after generating the report content from history events.",
|
|
25223
|
+
inputSchema: {
|
|
25224
|
+
startDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
|
|
25225
|
+
endDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
|
|
25226
|
+
content: exports_external.string().describe("The markdown content of the status report"),
|
|
25227
|
+
title: exports_external.string().optional().describe("Optional title for the report")
|
|
25228
|
+
}
|
|
25229
|
+
}, async ({
|
|
25230
|
+
startDate,
|
|
25231
|
+
endDate,
|
|
25232
|
+
content,
|
|
25233
|
+
title
|
|
25234
|
+
}) => {
|
|
25235
|
+
const client2 = getApiClient();
|
|
25236
|
+
const update = await client2.createStatusUpdate({
|
|
25237
|
+
startDate,
|
|
25238
|
+
endDate,
|
|
25239
|
+
content,
|
|
25240
|
+
title
|
|
25241
|
+
});
|
|
25242
|
+
return {
|
|
25243
|
+
content: [
|
|
25244
|
+
{
|
|
25245
|
+
type: "text",
|
|
25246
|
+
text: JSON.stringify({
|
|
25247
|
+
success: true,
|
|
25248
|
+
statusUpdate: {
|
|
25249
|
+
id: update.id,
|
|
25250
|
+
title: update.title,
|
|
25251
|
+
startDate: update.startDate,
|
|
25252
|
+
endDate: update.endDate,
|
|
25253
|
+
createdAt: update.createdAt
|
|
25254
|
+
}
|
|
25255
|
+
}, null, 2)
|
|
25256
|
+
}
|
|
25257
|
+
]
|
|
25258
|
+
};
|
|
25259
|
+
});
|
|
25260
|
+
}
|
|
25136
25261
|
|
|
25137
25262
|
// src/index.ts
|
|
25138
25263
|
async function main() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ourroadmaps/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.24.3",
|
|
36
36
|
"@ourroadmaps/shared": "*",
|
|
37
37
|
"zod": "^3.23.0"
|
|
38
38
|
},
|