gearvn-pages-mcp-server 1.8.0 → 1.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"get-page.d.ts","sourceRoot":"","sources":["../../src/tools/get-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,eAAO,MAAM,aAAa,EAAE,IAe3B,CAAC;AAEF,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO;;;;;GA4BhD"}
1
+ {"version":3,"file":"get-page.d.ts","sourceRoot":"","sources":["../../src/tools/get-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,eAAO,MAAM,aAAa,EAAE,IA+C3B,CAAC;AAEF,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO;;;;;GAuChD"}
@@ -1,7 +1,24 @@
1
1
  import { callAPI } from "../api.js";
2
2
  export const GET_PAGE_TOOL = {
3
3
  name: "get-page",
4
- description: "Get the full content of a page by its slug. Returns the complete page data including HTML content, title, and tags. Use the exact slug from list-pages response (including timestamp suffix).",
4
+ description: `Get the full content of a page by its slug.
5
+
6
+ CONTENT FORMAT:
7
+ - By default, returns HTML content
8
+ - md=true: Returns content converted to Markdown (useful for AI processing)
9
+
10
+ METADATA CONTROL:
11
+ - By default, metadata only returns keys with empty values (to reduce payload)
12
+ - metafull=true: Returns full metadata with all values
13
+ - metafields=["key1","key2"]: Returns values only for specified keys
14
+
15
+ EXAMPLES:
16
+ 1. Get page HTML: get-page with slug="my-page-123456"
17
+ 2. Get page as Markdown: get-page with slug="my-page-123456", md=true
18
+ 3. Get page with full metadata: get-page with slug="my-page-123456", metafull=true
19
+ 4. Get page with specific metadata: get-page with slug="my-page-123456", metafields=["risks","actions"]
20
+
21
+ Returns: Page data with id, slug, title, content (HTML or Markdown), tags, and metadata.`,
5
22
  inputSchema: {
6
23
  type: "object",
7
24
  properties: {
@@ -9,18 +26,42 @@ export const GET_PAGE_TOOL = {
9
26
  type: "string",
10
27
  description: "The exact slug of the page to retrieve (must match the slug from list-pages response, including timestamp suffix)",
11
28
  },
29
+ md: {
30
+ type: "boolean",
31
+ description: "Set to true to return content as Markdown instead of HTML. Useful for AI processing.",
32
+ },
33
+ metafull: {
34
+ type: "boolean",
35
+ description: "Set to true to return full metadata with all values. By default, metadata only returns keys with empty values.",
36
+ },
37
+ metafields: {
38
+ type: "array",
39
+ items: { type: "string" },
40
+ description: "Array of metadata keys to return with full values. E.g., ['risks', 'actions'] returns only these keys with values.",
41
+ },
12
42
  },
13
43
  required: ["slug"],
14
44
  },
15
45
  };
16
46
  export async function handleGetPage(args) {
17
- const { slug } = args;
47
+ const { slug, md, metafull, metafields } = args;
18
48
  // Validate inputs
19
49
  if (!slug) {
20
50
  throw new Error("Missing required parameter: slug is required");
21
51
  }
52
+ // Build query parameters
53
+ const params = new URLSearchParams();
54
+ if (md)
55
+ params.append("md", "1");
56
+ if (metafull)
57
+ params.append("metafull", "1");
58
+ if (metafields && metafields.length > 0) {
59
+ params.append("metafields", `[${metafields.join(",")}]`);
60
+ }
61
+ const queryString = params.toString();
62
+ const endpoint = queryString ? `/v1/get-page?${queryString}` : "/v1/get-page";
22
63
  // Call the get-page API
23
- const response = await callAPI("/v1/get-page", "POST", {
64
+ const response = await callAPI(endpoint, "POST", {
24
65
  slug,
25
66
  });
26
67
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"get-page.js","sourceRoot":"","sources":["../../src/tools/get-page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,+LAA+L;IACjM,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mHAAmH;aACtH;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAmB,CAAC;IAErC,kBAAkB;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAkB,cAAc,EAAE,MAAM,EAAE;QACtE,IAAI;KACL,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,QAAQ;iBACf,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-page.js","sourceRoot":"","sources":["../../src/tools/get-page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE;;;;;;;;;;;;;;;;;yFAiB0E;IACvF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mHAAmH;aACtH;YACD,EAAE,EAAE;gBACF,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,sFAAsF;aACzF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,gHAAgH;aACnH;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,oHAAoH;aACvH;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC/C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAmB,CAAC;IAE/D,kBAAkB;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,EAAE;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,QAAQ;QAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAE9E,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAkB,QAAQ,EAAE,MAAM,EAAE;QAChE,IAAI;KACL,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,QAAQ;iBACf,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-pages.d.ts","sourceRoot":"","sources":["../../src/tools/list-pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,eAAO,MAAM,eAAe,EAAE,IAmD7B,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO;;;;;GAgCnD"}
1
+ {"version":3,"file":"list-pages.d.ts","sourceRoot":"","sources":["../../src/tools/list-pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAI1D,eAAO,MAAM,eAAe,EAAE,IA+E7B,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO;;;;;GAyCnD"}
@@ -1,7 +1,11 @@
1
1
  import { callAPI } from "../api.js";
2
2
  export const LIST_PAGES_TOOL = {
3
3
  name: "list-pages",
4
- description: `List all deployed pages with optional filtering and search capabilities.
4
+ description: `List all deployed pages with optional filtering, search, and pagination.
5
+
6
+ PAGINATION:
7
+ - page: Page number (default: 1)
8
+ - limit: Items per page (default: 50)
5
9
 
6
10
  FILTERING OPTIONS:
7
11
  - Filter by tag: Use 'tags' parameter to find pages with a specific tag
@@ -16,17 +20,30 @@ SEARCH BEHAVIOR:
16
20
  - key="metadata": Search in metadata values (all nested levels)
17
21
  - With 'key=metadata' + 'metadata_key': Search in a specific metadata field only
18
22
 
23
+ METADATA CONTROL:
24
+ - By default, metadata only returns keys with empty values (to reduce payload)
25
+ - metafull=true: Returns full metadata with all values
26
+ - metafields=["key1","key2"]: Returns values only for specified keys
27
+
19
28
  EXAMPLES:
20
29
  1. Find all pages: list-pages (no params)
21
- 2. Find pages tagged "marketing": list-pages with tags="marketing"
22
- 3. Find pages mentioning "dashboard": list-pages with search="dashboard"
23
- 4. Find pages with "admin" in title: list-pages with search="admin", key="title"
24
- 5. Find pages where vendor is "Apple": list-pages with search="Apple", key="metadata", metadata_key="vendor"
30
+ 2. Paginate: list-pages with page=2, limit=10
31
+ 3. Find pages tagged "marketing": list-pages with tags="marketing"
32
+ 4. Find pages with full metadata: list-pages with metafull=true
33
+ 5. Find pages with specific metadata: list-pages with metafields=["risks","actions"]
25
34
 
26
- Returns: Array of page summaries (id, slug, title, url, tags, metadata, timestamps). Does not include page content.`,
35
+ Returns: Paginated response with total, page, limit, and array of page summaries.`,
27
36
  inputSchema: {
28
37
  type: "object",
29
38
  properties: {
39
+ page: {
40
+ type: "number",
41
+ description: "Page number for pagination (default: 1)",
42
+ },
43
+ limit: {
44
+ type: "number",
45
+ description: "Number of items per page (default: 50)",
46
+ },
30
47
  tags: {
31
48
  type: "string",
32
49
  description: "Filter by exact tag match (case-insensitive). Returns pages that have this tag.",
@@ -44,11 +61,20 @@ Returns: Array of page summaries (id, slug, title, url, tags, metadata, timestam
44
61
  type: "string",
45
62
  description: "When key='metadata', specify a specific metadata field to search in. E.g., 'vendor' to search only in metadata.vendor",
46
63
  },
64
+ metafull: {
65
+ type: "boolean",
66
+ description: "Set to true to return full metadata with all values. By default, metadata only returns keys with empty values.",
67
+ },
68
+ metafields: {
69
+ type: "array",
70
+ items: { type: "string" },
71
+ description: "Array of metadata keys to return with full values. E.g., ['risks', 'actions'] returns only these keys with values.",
72
+ },
47
73
  },
48
74
  },
49
75
  };
50
76
  export async function handleListPages(args) {
51
- const { tags, search, key, metadata_key } = args || {};
77
+ const { tags, search, key, metadata_key, page, limit, metafull, metafields } = args || {};
52
78
  // Build query parameters
53
79
  const params = new URLSearchParams();
54
80
  if (tags)
@@ -59,6 +85,15 @@ export async function handleListPages(args) {
59
85
  params.append("key", key);
60
86
  if (metadata_key)
61
87
  params.append("metadata_key", metadata_key);
88
+ if (page)
89
+ params.append("page", page.toString());
90
+ if (limit)
91
+ params.append("limit", limit.toString());
92
+ if (metafull)
93
+ params.append("metafull", "1");
94
+ if (metafields && metafields.length > 0) {
95
+ params.append("metafields", `[${metafields.join(",")}]`);
96
+ }
62
97
  const queryString = params.toString();
63
98
  const endpoint = queryString ? `/v1/pages?${queryString}` : "/v1/pages";
64
99
  // Call the list pages API
@@ -69,7 +104,9 @@ export async function handleListPages(args) {
69
104
  type: "text",
70
105
  text: JSON.stringify({
71
106
  success: true,
72
- count: response.count,
107
+ total: response.total,
108
+ page: response.page,
109
+ limit: response.limit,
73
110
  pages: response.pages,
74
111
  }, null, 2),
75
112
  },
@@ -1 +1 @@
1
- {"version":3,"file":"list-pages.js","sourceRoot":"","sources":["../../src/tools/list-pages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;oHAsBqG;IAClH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,iFAAiF;aACpF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,6IAA6I;aAChJ;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;gBAC3C,WAAW,EACT,mGAAmG;aACtG;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uHAAuH;aAC1H;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAI,IAAsB,IAAI,EAAE,CAAC;IAE1E,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,IAAI;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,GAAG;QAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,YAAY;QAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAExE,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAoB,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;iBACtB,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list-pages.js","sourceRoot":"","sources":["../../src/tools/list-pages.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -19,7 +19,9 @@ export interface PageSummary {
19
19
  updated_at: string;
20
20
  }
21
21
  export interface ListPagesResponse {
22
- count: number;
22
+ total: number;
23
+ page: number;
24
+ limit: number;
23
25
  pages: PageSummary[];
24
26
  }
25
27
  export interface UpdatePageArgs {
@@ -41,6 +43,9 @@ export interface DeletePageResponse {
41
43
  }
42
44
  export interface GetPageArgs {
43
45
  slug: string;
46
+ metafull?: boolean;
47
+ metafields?: string[];
48
+ md?: boolean;
44
49
  }
45
50
  export interface GetPageResponse {
46
51
  id: number;
@@ -55,5 +60,9 @@ export interface ListPagesArgs {
55
60
  search?: string;
56
61
  key?: "title" | "tags" | "slug" | "metadata";
57
62
  metadata_key?: string;
63
+ page?: number;
64
+ limit?: number;
65
+ metafull?: boolean;
66
+ metafields?: string[];
58
67
  }
59
68
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gearvn-pages-mcp-server",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "MCP Server for GearVN Pages deployment and management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -4,8 +4,24 @@ import { GetPageArgs, GetPageResponse } from "../types.js";
4
4
 
5
5
  export const GET_PAGE_TOOL: Tool = {
6
6
  name: "get-page",
7
- description:
8
- "Get the full content of a page by its slug. Returns the complete page data including HTML content, title, and tags. Use the exact slug from list-pages response (including timestamp suffix).",
7
+ description: `Get the full content of a page by its slug.
8
+
9
+ CONTENT FORMAT:
10
+ - By default, returns HTML content
11
+ - md=true: Returns content converted to Markdown (useful for AI processing)
12
+
13
+ METADATA CONTROL:
14
+ - By default, metadata only returns keys with empty values (to reduce payload)
15
+ - metafull=true: Returns full metadata with all values
16
+ - metafields=["key1","key2"]: Returns values only for specified keys
17
+
18
+ EXAMPLES:
19
+ 1. Get page HTML: get-page with slug="my-page-123456"
20
+ 2. Get page as Markdown: get-page with slug="my-page-123456", md=true
21
+ 3. Get page with full metadata: get-page with slug="my-page-123456", metafull=true
22
+ 4. Get page with specific metadata: get-page with slug="my-page-123456", metafields=["risks","actions"]
23
+
24
+ Returns: Page data with id, slug, title, content (HTML or Markdown), tags, and metadata.`,
9
25
  inputSchema: {
10
26
  type: "object",
11
27
  properties: {
@@ -14,21 +30,48 @@ export const GET_PAGE_TOOL: Tool = {
14
30
  description:
15
31
  "The exact slug of the page to retrieve (must match the slug from list-pages response, including timestamp suffix)",
16
32
  },
33
+ md: {
34
+ type: "boolean",
35
+ description:
36
+ "Set to true to return content as Markdown instead of HTML. Useful for AI processing.",
37
+ },
38
+ metafull: {
39
+ type: "boolean",
40
+ description:
41
+ "Set to true to return full metadata with all values. By default, metadata only returns keys with empty values.",
42
+ },
43
+ metafields: {
44
+ type: "array",
45
+ items: { type: "string" },
46
+ description:
47
+ "Array of metadata keys to return with full values. E.g., ['risks', 'actions'] returns only these keys with values.",
48
+ },
17
49
  },
18
50
  required: ["slug"],
19
51
  },
20
52
  };
21
53
 
22
54
  export async function handleGetPage(args: unknown) {
23
- const { slug } = args as GetPageArgs;
55
+ const { slug, md, metafull, metafields } = args as GetPageArgs;
24
56
 
25
57
  // Validate inputs
26
58
  if (!slug) {
27
59
  throw new Error("Missing required parameter: slug is required");
28
60
  }
29
61
 
62
+ // Build query parameters
63
+ const params = new URLSearchParams();
64
+ if (md) params.append("md", "1");
65
+ if (metafull) params.append("metafull", "1");
66
+ if (metafields && metafields.length > 0) {
67
+ params.append("metafields", `[${metafields.join(",")}]`);
68
+ }
69
+
70
+ const queryString = params.toString();
71
+ const endpoint = queryString ? `/v1/get-page?${queryString}` : "/v1/get-page";
72
+
30
73
  // Call the get-page API
31
- const response = await callAPI<GetPageResponse>("/v1/get-page", "POST", {
74
+ const response = await callAPI<GetPageResponse>(endpoint, "POST", {
32
75
  slug,
33
76
  });
34
77
 
@@ -4,7 +4,11 @@ import { ListPagesArgs, ListPagesResponse } from "../types.js";
4
4
 
5
5
  export const LIST_PAGES_TOOL: Tool = {
6
6
  name: "list-pages",
7
- description: `List all deployed pages with optional filtering and search capabilities.
7
+ description: `List all deployed pages with optional filtering, search, and pagination.
8
+
9
+ PAGINATION:
10
+ - page: Page number (default: 1)
11
+ - limit: Items per page (default: 50)
8
12
 
9
13
  FILTERING OPTIONS:
10
14
  - Filter by tag: Use 'tags' parameter to find pages with a specific tag
@@ -19,17 +23,30 @@ SEARCH BEHAVIOR:
19
23
  - key="metadata": Search in metadata values (all nested levels)
20
24
  - With 'key=metadata' + 'metadata_key': Search in a specific metadata field only
21
25
 
26
+ METADATA CONTROL:
27
+ - By default, metadata only returns keys with empty values (to reduce payload)
28
+ - metafull=true: Returns full metadata with all values
29
+ - metafields=["key1","key2"]: Returns values only for specified keys
30
+
22
31
  EXAMPLES:
23
32
  1. Find all pages: list-pages (no params)
24
- 2. Find pages tagged "marketing": list-pages with tags="marketing"
25
- 3. Find pages mentioning "dashboard": list-pages with search="dashboard"
26
- 4. Find pages with "admin" in title: list-pages with search="admin", key="title"
27
- 5. Find pages where vendor is "Apple": list-pages with search="Apple", key="metadata", metadata_key="vendor"
33
+ 2. Paginate: list-pages with page=2, limit=10
34
+ 3. Find pages tagged "marketing": list-pages with tags="marketing"
35
+ 4. Find pages with full metadata: list-pages with metafull=true
36
+ 5. Find pages with specific metadata: list-pages with metafields=["risks","actions"]
28
37
 
29
- Returns: Array of page summaries (id, slug, title, url, tags, metadata, timestamps). Does not include page content.`,
38
+ Returns: Paginated response with total, page, limit, and array of page summaries.`,
30
39
  inputSchema: {
31
40
  type: "object",
32
41
  properties: {
42
+ page: {
43
+ type: "number",
44
+ description: "Page number for pagination (default: 1)",
45
+ },
46
+ limit: {
47
+ type: "number",
48
+ description: "Number of items per page (default: 50)",
49
+ },
33
50
  tags: {
34
51
  type: "string",
35
52
  description:
@@ -51,12 +68,24 @@ Returns: Array of page summaries (id, slug, title, url, tags, metadata, timestam
51
68
  description:
52
69
  "When key='metadata', specify a specific metadata field to search in. E.g., 'vendor' to search only in metadata.vendor",
53
70
  },
71
+ metafull: {
72
+ type: "boolean",
73
+ description:
74
+ "Set to true to return full metadata with all values. By default, metadata only returns keys with empty values.",
75
+ },
76
+ metafields: {
77
+ type: "array",
78
+ items: { type: "string" },
79
+ description:
80
+ "Array of metadata keys to return with full values. E.g., ['risks', 'actions'] returns only these keys with values.",
81
+ },
54
82
  },
55
83
  },
56
84
  };
57
85
 
58
86
  export async function handleListPages(args?: unknown) {
59
- const { tags, search, key, metadata_key } = (args as ListPagesArgs) || {};
87
+ const { tags, search, key, metadata_key, page, limit, metafull, metafields } =
88
+ (args as ListPagesArgs) || {};
60
89
 
61
90
  // Build query parameters
62
91
  const params = new URLSearchParams();
@@ -64,6 +93,12 @@ export async function handleListPages(args?: unknown) {
64
93
  if (search) params.append("search", search);
65
94
  if (key) params.append("key", key);
66
95
  if (metadata_key) params.append("metadata_key", metadata_key);
96
+ if (page) params.append("page", page.toString());
97
+ if (limit) params.append("limit", limit.toString());
98
+ if (metafull) params.append("metafull", "1");
99
+ if (metafields && metafields.length > 0) {
100
+ params.append("metafields", `[${metafields.join(",")}]`);
101
+ }
67
102
 
68
103
  const queryString = params.toString();
69
104
  const endpoint = queryString ? `/v1/pages?${queryString}` : "/v1/pages";
@@ -78,7 +113,9 @@ export async function handleListPages(args?: unknown) {
78
113
  text: JSON.stringify(
79
114
  {
80
115
  success: true,
81
- count: response.count,
116
+ total: response.total,
117
+ page: response.page,
118
+ limit: response.limit,
82
119
  pages: response.pages,
83
120
  },
84
121
  null,
package/src/types.ts CHANGED
@@ -22,7 +22,9 @@ export interface PageSummary {
22
22
  }
23
23
 
24
24
  export interface ListPagesResponse {
25
- count: number;
25
+ total: number;
26
+ page: number;
27
+ limit: number;
26
28
  pages: PageSummary[];
27
29
  }
28
30
 
@@ -49,6 +51,9 @@ export interface DeletePageResponse {
49
51
 
50
52
  export interface GetPageArgs {
51
53
  slug: string;
54
+ metafull?: boolean;
55
+ metafields?: string[];
56
+ md?: boolean;
52
57
  }
53
58
 
54
59
  export interface GetPageResponse {
@@ -65,4 +70,8 @@ export interface ListPagesArgs {
65
70
  search?: string;
66
71
  key?: "title" | "tags" | "slug" | "metadata";
67
72
  metadata_key?: string;
73
+ page?: number;
74
+ limit?: number;
75
+ metafull?: boolean;
76
+ metafields?: string[];
68
77
  }