@ourroadmaps/mcp 0.7.5 → 0.8.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.
Files changed (2) hide show
  1. package/dist/index.js +33 -29
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -461,9 +461,15 @@ class ApiClient {
461
461
  }
462
462
  return await response.json();
463
463
  }
464
- async listRoadmaps() {
465
- const response = await this.request("/v1/roadmaps");
466
- return response.data;
464
+ async listRoadmaps(params) {
465
+ const searchParams = new URLSearchParams;
466
+ if (params?.limit)
467
+ searchParams.set("limit", String(params.limit));
468
+ if (params?.offset)
469
+ searchParams.set("offset", String(params.offset));
470
+ const query = searchParams.toString();
471
+ const path = query ? `/v1/roadmaps?${query}` : "/v1/roadmaps";
472
+ return await this.request(path);
467
473
  }
468
474
  async getRoadmap(id) {
469
475
  const response = await this.request(`/v1/roadmaps/${id}`);
@@ -756,15 +762,20 @@ function registerSearchRoadmaps(server) {
756
762
  inputSchema: {
757
763
  query: z10.string().optional().describe("Search query to match against title or description"),
758
764
  status: roadmapStatusSchema.optional().describe("Filter by status"),
759
- horizon: horizonSchema.optional().describe("Filter by planning horizon")
765
+ horizon: horizonSchema.optional().describe("Filter by planning horizon"),
766
+ limit: z10.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
767
+ offset: z10.number().int().min(0).optional().describe("Number of items to skip (default 0)")
760
768
  }
761
769
  }, async ({
762
770
  query,
763
771
  status,
764
- horizon
772
+ horizon,
773
+ limit,
774
+ offset
765
775
  }) => {
766
776
  const client2 = getApiClient();
767
- let roadmaps = await client2.listRoadmaps();
777
+ const response = await client2.listRoadmaps({ limit, offset });
778
+ let roadmaps = response.items;
768
779
  if (query) {
769
780
  const q = query.toLowerCase();
770
781
  roadmaps = roadmaps.filter((r) => r.title.toLowerCase().includes(q));
@@ -779,15 +790,18 @@ function registerSearchRoadmaps(server) {
779
790
  content: [
780
791
  {
781
792
  type: "text",
782
- text: JSON.stringify(roadmaps.map((r) => ({
783
- id: r.id,
784
- title: r.title,
785
- status: r.status,
786
- horizon: r.horizon,
787
- value: r.value,
788
- effort: r.effort,
789
- order: r.order
790
- })), null, 2)
793
+ text: JSON.stringify({
794
+ items: roadmaps.map((r) => ({
795
+ id: r.id,
796
+ title: r.title,
797
+ status: r.status,
798
+ horizon: r.horizon,
799
+ value: r.value,
800
+ effort: r.effort,
801
+ order: r.order
802
+ })),
803
+ pagination: response.pagination
804
+ }, null, 2)
791
805
  }
792
806
  ]
793
807
  };
@@ -954,28 +968,20 @@ function registerGetContext(server) {
954
968
  - Audiences: Who the product serves (stakeholders and user personas) with their preferences
955
969
  - Scenarios: User workflows and how they accomplish goals
956
970
  - Features: Capabilities and functionality areas organized hierarchically
957
- - Roadmap Summary: Count of items by status and horizon for planning overview
971
+ - Roadmap Summary: Total count of roadmap items
958
972
 
959
973
  Use this as your FIRST call when starting work on a roadmap to understand the full context.`,
960
974
  inputSchema: {}
961
975
  }, async () => {
962
976
  const client2 = getApiClient();
963
- const [strategy, products, audiences, scenarios, features, roadmaps] = await Promise.all([
977
+ const [strategy, products, audiences, scenarios, features, roadmapsResponse] = await Promise.all([
964
978
  client2.getStrategy(),
965
979
  client2.listProducts(),
966
980
  client2.listAudiences(),
967
981
  client2.listScenarios(),
968
982
  client2.listFeatures(),
969
- client2.listRoadmaps()
983
+ client2.listRoadmaps({ limit: 1 })
970
984
  ]);
971
- const statusCounts = {};
972
- const horizonCounts = {};
973
- for (const r of roadmaps) {
974
- const status = r.status ?? "unknown";
975
- const horizon = r.horizon ?? "unknown";
976
- statusCounts[status] = (statusCounts[status] || 0) + 1;
977
- horizonCounts[horizon] = (horizonCounts[horizon] || 0) + 1;
978
- }
979
985
  return {
980
986
  content: [
981
987
  {
@@ -1013,9 +1019,7 @@ Use this as your FIRST call when starting work on a roadmap to understand the fu
1013
1019
  parentId: f.parentId
1014
1020
  })),
1015
1021
  roadmapSummary: {
1016
- total: roadmaps.length,
1017
- byStatus: statusCounts,
1018
- byHorizon: horizonCounts
1022
+ total: roadmapsResponse.pagination.total
1019
1023
  }
1020
1024
  }, null, 2)
1021
1025
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.7.5",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {