@ourroadmaps/mcp 0.5.0 → 0.6.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 +158 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -23976,6 +23976,21 @@ class ApiClient {
|
|
|
23976
23976
|
});
|
|
23977
23977
|
return response.data;
|
|
23978
23978
|
}
|
|
23979
|
+
async getProduct(id) {
|
|
23980
|
+
const response = await this.request(`/v1/products/${id}`);
|
|
23981
|
+
return response.data;
|
|
23982
|
+
}
|
|
23983
|
+
async getProductDocumentation(productId) {
|
|
23984
|
+
const response = await this.request(`/v1/products/${productId}/documentation`);
|
|
23985
|
+
return response.data;
|
|
23986
|
+
}
|
|
23987
|
+
async updateProductDocumentation(productId, data) {
|
|
23988
|
+
const response = await this.request(`/v1/products/${productId}/documentation`, {
|
|
23989
|
+
method: "PUT",
|
|
23990
|
+
body: JSON.stringify(data)
|
|
23991
|
+
});
|
|
23992
|
+
return response.data;
|
|
23993
|
+
}
|
|
23979
23994
|
async listAudiences() {
|
|
23980
23995
|
const response = await this.request("/v1/audiences");
|
|
23981
23996
|
return response.data;
|
|
@@ -24093,6 +24108,10 @@ function registerAllTools(server) {
|
|
|
24093
24108
|
registerCreateProduct(server);
|
|
24094
24109
|
registerUpdateProduct(server);
|
|
24095
24110
|
registerDeleteProduct(server);
|
|
24111
|
+
registerGetProduct(server);
|
|
24112
|
+
registerSearchProducts(server);
|
|
24113
|
+
registerGetProductDocumentation(server);
|
|
24114
|
+
registerUpdateProductDocumentation(server);
|
|
24096
24115
|
registerCreateAudience(server);
|
|
24097
24116
|
registerUpdateAudience(server);
|
|
24098
24117
|
registerDeleteAudience(server);
|
|
@@ -25043,6 +25062,145 @@ function registerDeleteProduct(server) {
|
|
|
25043
25062
|
};
|
|
25044
25063
|
});
|
|
25045
25064
|
}
|
|
25065
|
+
function registerGetProduct(server) {
|
|
25066
|
+
server.registerTool("get_product", {
|
|
25067
|
+
description: "Get full details of a product by ID, including its documentation (design system and ADRs).",
|
|
25068
|
+
inputSchema: {
|
|
25069
|
+
id: exports_external.string().describe("The UUID of the product")
|
|
25070
|
+
}
|
|
25071
|
+
}, async ({ id }) => {
|
|
25072
|
+
const client2 = getApiClient();
|
|
25073
|
+
const [product2, documentation] = await Promise.all([
|
|
25074
|
+
client2.getProduct(id),
|
|
25075
|
+
client2.getProductDocumentation(id)
|
|
25076
|
+
]);
|
|
25077
|
+
return {
|
|
25078
|
+
content: [
|
|
25079
|
+
{
|
|
25080
|
+
type: "text",
|
|
25081
|
+
text: JSON.stringify({
|
|
25082
|
+
product: {
|
|
25083
|
+
id: product2.id,
|
|
25084
|
+
type: product2.type,
|
|
25085
|
+
name: product2.name,
|
|
25086
|
+
parentId: product2.parentId,
|
|
25087
|
+
order: product2.order,
|
|
25088
|
+
isExpanded: product2.isExpanded,
|
|
25089
|
+
createdAt: product2.createdAt
|
|
25090
|
+
},
|
|
25091
|
+
documentation: documentation ? {
|
|
25092
|
+
designSystem: documentation.designSystem,
|
|
25093
|
+
adrs: documentation.adrs,
|
|
25094
|
+
updatedAt: documentation.updatedAt
|
|
25095
|
+
} : null
|
|
25096
|
+
}, null, 2)
|
|
25097
|
+
}
|
|
25098
|
+
]
|
|
25099
|
+
};
|
|
25100
|
+
});
|
|
25101
|
+
}
|
|
25102
|
+
function registerSearchProducts(server) {
|
|
25103
|
+
server.registerTool("search_products", {
|
|
25104
|
+
description: "Search for products by name. Returns a list of matching products with basic info.",
|
|
25105
|
+
inputSchema: {
|
|
25106
|
+
query: exports_external.string().optional().describe("Search query to match against product name"),
|
|
25107
|
+
type: productTypeSchema2.optional().describe("Filter by product type")
|
|
25108
|
+
}
|
|
25109
|
+
}, async ({ query, type }) => {
|
|
25110
|
+
const client2 = getApiClient();
|
|
25111
|
+
let products = await client2.listProducts();
|
|
25112
|
+
if (query) {
|
|
25113
|
+
const lowerQuery = query.toLowerCase();
|
|
25114
|
+
products = products.filter((p) => p.name.toLowerCase().includes(lowerQuery));
|
|
25115
|
+
}
|
|
25116
|
+
if (type) {
|
|
25117
|
+
products = products.filter((p) => p.type === type);
|
|
25118
|
+
}
|
|
25119
|
+
return {
|
|
25120
|
+
content: [
|
|
25121
|
+
{
|
|
25122
|
+
type: "text",
|
|
25123
|
+
text: JSON.stringify({
|
|
25124
|
+
count: products.length,
|
|
25125
|
+
products: products.map((p) => ({
|
|
25126
|
+
id: p.id,
|
|
25127
|
+
type: p.type,
|
|
25128
|
+
name: p.name,
|
|
25129
|
+
parentId: p.parentId
|
|
25130
|
+
}))
|
|
25131
|
+
}, null, 2)
|
|
25132
|
+
}
|
|
25133
|
+
]
|
|
25134
|
+
};
|
|
25135
|
+
});
|
|
25136
|
+
}
|
|
25137
|
+
function registerGetProductDocumentation(server) {
|
|
25138
|
+
server.registerTool("get_product_documentation", {
|
|
25139
|
+
description: "Get the documentation (design system and ADRs) for a product. Use this to read existing documentation before updating.",
|
|
25140
|
+
inputSchema: {
|
|
25141
|
+
productId: exports_external.string().describe("The UUID of the product")
|
|
25142
|
+
}
|
|
25143
|
+
}, async ({ productId }) => {
|
|
25144
|
+
const client2 = getApiClient();
|
|
25145
|
+
const documentation = await client2.getProductDocumentation(productId);
|
|
25146
|
+
return {
|
|
25147
|
+
content: [
|
|
25148
|
+
{
|
|
25149
|
+
type: "text",
|
|
25150
|
+
text: JSON.stringify({
|
|
25151
|
+
productId,
|
|
25152
|
+
documentation: documentation ? {
|
|
25153
|
+
id: documentation.id,
|
|
25154
|
+
designSystem: documentation.designSystem,
|
|
25155
|
+
adrs: documentation.adrs,
|
|
25156
|
+
createdAt: documentation.createdAt,
|
|
25157
|
+
updatedAt: documentation.updatedAt
|
|
25158
|
+
} : null
|
|
25159
|
+
}, null, 2)
|
|
25160
|
+
}
|
|
25161
|
+
]
|
|
25162
|
+
};
|
|
25163
|
+
});
|
|
25164
|
+
}
|
|
25165
|
+
function registerUpdateProductDocumentation(server) {
|
|
25166
|
+
server.registerTool("update_product_documentation", {
|
|
25167
|
+
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.",
|
|
25168
|
+
inputSchema: {
|
|
25169
|
+
productId: exports_external.string().describe("The UUID of the product"),
|
|
25170
|
+
designSystem: exports_external.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
|
|
25171
|
+
adrs: exports_external.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
|
|
25172
|
+
}
|
|
25173
|
+
}, async ({
|
|
25174
|
+
productId,
|
|
25175
|
+
designSystem,
|
|
25176
|
+
adrs
|
|
25177
|
+
}) => {
|
|
25178
|
+
const client2 = getApiClient();
|
|
25179
|
+
const updates = {};
|
|
25180
|
+
if (designSystem !== undefined)
|
|
25181
|
+
updates.designSystem = designSystem;
|
|
25182
|
+
if (adrs !== undefined)
|
|
25183
|
+
updates.adrs = adrs;
|
|
25184
|
+
const documentation = await client2.updateProductDocumentation(productId, updates);
|
|
25185
|
+
return {
|
|
25186
|
+
content: [
|
|
25187
|
+
{
|
|
25188
|
+
type: "text",
|
|
25189
|
+
text: JSON.stringify({
|
|
25190
|
+
success: true,
|
|
25191
|
+
documentation: {
|
|
25192
|
+
id: documentation.id,
|
|
25193
|
+
productId: documentation.productId,
|
|
25194
|
+
designSystem: documentation.designSystem,
|
|
25195
|
+
adrs: documentation.adrs,
|
|
25196
|
+
updatedAt: documentation.updatedAt
|
|
25197
|
+
}
|
|
25198
|
+
}, null, 2)
|
|
25199
|
+
}
|
|
25200
|
+
]
|
|
25201
|
+
};
|
|
25202
|
+
});
|
|
25203
|
+
}
|
|
25046
25204
|
var audienceTypeSchema2 = exports_external.enum(["stakeholder", "user_persona"]);
|
|
25047
25205
|
function registerCreateAudience(server) {
|
|
25048
25206
|
server.registerTool("create_audience", {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ourroadmaps/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"url": "https://github.com/bgraner/roadmaps3.git",
|
|
31
31
|
"directory": "apps/mcp"
|
|
32
32
|
},
|
|
33
|
-
"license": "
|
|
33
|
+
"license": "UNLICENSED",
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@modelcontextprotocol/sdk": "^1.24.3",
|
|
36
36
|
"@ourroadmaps/shared": "*",
|