@zeroheight/mcp-server 1.2.0 → 2.0.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 +0,0 @@
1
- {"version":3,"file":"styleguide.test.js","sources":["common/formatters/styleguide.test.ts"],"sourceRoot":"/","sourcesContent":["import { expect, describe, it } from \"@rstest/core\";\n\nimport {\n formatStyleguideListAsMarkdown,\n formatTreeAsJson,\n} from \"./styleguide.js\";\nimport { NodeType } from \"../../api/types/styleguide.js\";\n\ndescribe(\"formatStyleguideListAsMarkdown\", () => {\n describe(\"when list is empty\", () => {\n it(\"returns an empty string\", () => {\n expect(formatStyleguideListAsMarkdown([])).toBe(\"\");\n });\n });\n\n describe(\"when there's one styleguide\", () => {\n it(\"formats styleguide list as markdown list on one line\", () => {\n expect(\n formatStyleguideListAsMarkdown([\n { id: 1, name: \"Styleguide 1\", team_id: 1, share_id: \"abc123\" },\n ]),\n ).toBe(\"- Styleguide 1 (ID: 1)\");\n });\n });\n\n describe(\"when there's multiple styleguides\", () => {\n it(\"formats styleguide list as markdown list\", () => {\n expect(\n formatStyleguideListAsMarkdown([\n { id: 1, name: \"Styleguide 1\", team_id: 1, share_id: \"abc123\" },\n { id: 2, name: \"Styleguide 2\", team_id: 1, share_id: \"xyz987\" },\n ]),\n ).toBe(\"- Styleguide 1 (ID: 1)\\n- Styleguide 2 (ID: 2)\");\n });\n });\n});\n\ndescribe(\"formatTreeAsJson\", () => {\n describe(\"when tree is empty\", () => {\n it(\"returns an empty object\", () => {\n expect(formatTreeAsJson([])).toEqual({});\n });\n });\n\n describe(\"when tree has a single page node\", () => {\n it(\"creates nested structure with page info\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"Documentation\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"page\",\n name: \"Getting Started\",\n url: \"/docs/getting-started\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Documentation: {\n \"Getting Started\": {\n id: 2,\n url: \"/docs/getting-started\",\n },\n },\n });\n });\n });\n\n describe(\"when tree has multiple categories\", () => {\n it(\"creates nested structure for each category\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"API\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"page\",\n name: \"REST API\",\n url: \"/api/rest\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n {\n id: 3,\n type: \"category\",\n name: \"Guides\",\n hidden: false,\n children: [\n {\n id: 4,\n type: \"page\",\n name: \"Tutorial\",\n url: \"/guides/tutorial\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n API: {\n \"REST API\": {\n id: 2,\n url: \"/api/rest\",\n },\n },\n Guides: {\n Tutorial: {\n id: 4,\n url: \"/guides/tutorial\",\n },\n },\n });\n });\n });\n\n describe(\"when tree has nested categories\", () => {\n it(\"creates deeply nested structure\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"Documentation\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"category\",\n name: \"API\",\n hidden: false,\n children: [\n {\n id: 3,\n type: \"page\",\n name: \"Reference\",\n url: \"/docs/api/reference\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Documentation: {\n API: {\n Reference: {\n id: 3,\n url: \"/docs/api/reference\",\n },\n },\n },\n });\n });\n });\n\n describe(\"when tree has navigation nodes\", () => {\n it(\"processes navigation nodes and their children\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"navigation\",\n name: \"Main Nav\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"page\",\n name: \"Home\",\n url: \"/home\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n {\n id: 3,\n type: \"category\",\n name: \"Products\",\n hidden: false,\n children: [\n {\n id: 4,\n type: \"page\",\n name: \"Product A\",\n url: \"/products/a\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n \"Main Nav\": {\n Home: {\n id: 2,\n url: \"/home\",\n },\n Products: {\n \"Product A\": {\n id: 4,\n url: \"/products/a\",\n },\n },\n },\n });\n });\n });\n\n describe(\"when nodes have duplicate names\", () => {\n it(\"appends numbers to make names unique\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"Docs\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"page\",\n name: \"Overview\",\n url: \"/docs/overview1\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n {\n id: 3,\n type: \"page\",\n name: \"Overview\",\n url: \"/docs/overview2\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n {\n id: 4,\n type: \"page\",\n name: \"Overview\",\n url: \"/docs/overview3\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Docs: {\n Overview: {\n id: 2,\n url: \"/docs/overview1\",\n },\n \"Overview 1\": {\n id: 3,\n url: \"/docs/overview2\",\n },\n \"Overview 2\": {\n id: 4,\n url: \"/docs/overview3\",\n },\n },\n });\n });\n });\n\n describe(\"when nodes have no name\", () => {\n it(\"uses node type as fallback name\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"page\",\n name: \"\",\n url: \"/page1\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n category: {\n page: {\n id: 2,\n url: \"/page1\",\n },\n },\n });\n });\n });\n\n describe(\"when tree has tab nodes\", () => {\n it(\"ignores tab nodes\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"Main\",\n hidden: false,\n children: [\n {\n id: 3,\n type: \"page\",\n name: \"Page1\",\n url: \"/page1\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"tab\",\n name: \"Tab1\",\n url: \"/tab1\",\n hidden: false,\n children: [],\n },\n ],\n category_overview_page: false,\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Main: {\n Page1: {\n id: 3,\n url: \"/page1\",\n },\n },\n });\n });\n });\n\n describe(\"when tree has complex nested structure\", () => {\n it(\"handles multiple levels of nesting correctly\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"navigation\",\n name: \"Root\",\n hidden: false,\n children: [\n {\n id: 2,\n type: \"category\",\n name: \"Section A\",\n hidden: false,\n children: [\n {\n id: 3,\n type: \"category\",\n name: \"Subsection 1\",\n hidden: false,\n children: [\n {\n id: 4,\n type: \"page\",\n name: \"Page A\",\n url: \"/a/1/a\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n {\n id: 5,\n type: \"page\",\n name: \"Page B\",\n url: \"/a/1/b\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n {\n id: 6,\n type: \"page\",\n name: \"Direct Page\",\n url: \"/a/direct\",\n hidden: false,\n children: [],\n category_overview_page: false,\n },\n ],\n },\n ],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Root: {\n \"Section A\": {\n \"Subsection 1\": {\n \"Page A\": {\n id: 4,\n url: \"/a/1/a\",\n },\n \"Page B\": {\n id: 5,\n url: \"/a/1/b\",\n },\n },\n \"Direct Page\": {\n id: 6,\n url: \"/a/direct\",\n },\n },\n },\n });\n });\n });\n\n describe(\"when multiple root nodes have duplicate names\", () => {\n it(\"handles duplicate names at root level\", () => {\n const tree: NodeType[] = [\n {\n id: 1,\n type: \"category\",\n name: \"Section\",\n hidden: false,\n children: [],\n },\n {\n id: 2,\n type: \"category\",\n name: \"Section\",\n hidden: false,\n children: [],\n },\n ];\n\n const result = formatTreeAsJson(tree);\n expect(result).toEqual({\n Section: {},\n \"Section 1\": {},\n });\n });\n });\n});\n"],"names":[],"mappings":"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","debug_id":"a1566a24-9938-599b-a8a8-1237e4dbc1d7"}
package/dist/index.js DELETED
@@ -1,60 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c0c825d2-da83-500a-98f6-80086abbe1a6")}catch(e){}}();
4
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
- import packageJson from "../package.json" with { type: "json" };
7
- import { registerStyleguideListResource, registerStyleguideResource, } from "./resources/styleguide.js";
8
- import { registerListPagesResource, registerPageResource, } from "./resources/page.js";
9
- import { registerGetStyleguideTreeTool, registerListStyleguidesTool, } from "./tools/styleguide.js";
10
- import { registerGetPageTool, registerListPagesTool } from "./tools/page.js";
11
- import { recommendSummarizePagePrompt } from "./prompts/page.js";
12
- import { registerRecommendPagesPrompt } from "./prompts/styleguide.js";
13
- import { initSentry } from "./api/sentry.js";
14
- import { captureException } from "./common/errors.js";
15
- function createServer() {
16
- // Create server instance
17
- const server = new McpServer({
18
- name: "zeroheight",
19
- version: packageJson.version,
20
- capabilities: {
21
- resources: {},
22
- tools: {},
23
- },
24
- });
25
- // Register all tools
26
- [
27
- registerListPagesTool,
28
- registerGetPageTool,
29
- registerListStyleguidesTool,
30
- registerGetStyleguideTreeTool,
31
- ].forEach((fn) => fn(server));
32
- // Register all resources
33
- [
34
- registerStyleguideListResource,
35
- registerStyleguideResource,
36
- registerListPagesResource,
37
- registerPageResource,
38
- ].forEach((fn) => fn(server));
39
- // Register all prompts
40
- [registerRecommendPagesPrompt, recommendSummarizePagePrompt].forEach((fn) => fn(server));
41
- return server;
42
- }
43
- // Start server on STDIO
44
- async function main() {
45
- const disableTelemetry = process.env["ZEROHEIGHT_MCP_DISABLE_TELEMETRY"];
46
- if (!disableTelemetry) {
47
- initSentry();
48
- }
49
- const server = createServer();
50
- const transport = new StdioServerTransport();
51
- await server.connect(transport);
52
- console.error("zeroheight MCP Server running on stdio");
53
- }
54
- main().catch((error) => {
55
- console.error("Fatal error in main():", error);
56
- captureException(error);
57
- process.exit(1);
58
- });
59
- //# sourceMappingURL=index.js.map
60
- //# debugId=c0c825d2-da83-500a-98f6-80086abbe1a6
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["index.ts"],"sourceRoot":"/","sourcesContent":["#!/usr/bin/env node\n\nimport * as Sentry from \"@sentry/node\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport {\n registerStyleguideListResource,\n registerStyleguideResource,\n} from \"./resources/styleguide.js\";\nimport {\n registerListPagesResource,\n registerPageResource,\n} from \"./resources/page.js\";\nimport {\n registerGetStyleguideTreeTool,\n registerListStyleguidesTool,\n} from \"./tools/styleguide.js\";\nimport { registerGetPageTool, registerListPagesTool } from \"./tools/page.js\";\nimport { recommendSummarizePagePrompt } from \"./prompts/page.js\";\nimport { registerRecommendPagesPrompt } from \"./prompts/styleguide.js\";\nimport { initSentry } from \"./api/sentry.js\";\nimport { captureException } from \"./common/errors.js\";\n\nfunction createServer() {\n // Create server instance\n const server = new McpServer({\n name: \"zeroheight\",\n version: packageJson.version,\n capabilities: {\n resources: {},\n tools: {},\n },\n });\n\n // Register all tools\n [\n registerListPagesTool,\n registerGetPageTool,\n registerListStyleguidesTool,\n registerGetStyleguideTreeTool,\n ].forEach((fn) => fn(server));\n\n // Register all resources\n [\n registerStyleguideListResource,\n registerStyleguideResource,\n registerListPagesResource,\n registerPageResource,\n ].forEach((fn) => fn(server));\n\n // Register all prompts\n [registerRecommendPagesPrompt, recommendSummarizePagePrompt].forEach((fn) =>\n fn(server),\n );\n\n return server;\n}\n\n// Start server on STDIO\nasync function main() {\n const disableTelemetry = process.env[\"ZEROHEIGHT_MCP_DISABLE_TELEMETRY\"];\n if (!disableTelemetry) {\n initSentry();\n }\n\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"zeroheight MCP Server running on stdio\");\n}\n\nmain().catch((error) => {\n console.error(\"Fatal error in main():\", error);\n captureException(error);\n process.exit(1);\n});\n"],"names":[],"mappings":";;;AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,SAAS,YAAY;IACnB,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,YAAY,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;SACV;KACF,CAAC,CAAC;IAEH,qBAAqB;IACrB;QACE,qBAAqB;QACrB,mBAAmB;QACnB,2BAA2B;QAC3B,6BAA6B;KAC9B,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,yBAAyB;IACzB;QACE,8BAA8B;QAC9B,0BAA0B;QAC1B,yBAAyB;QACzB,oBAAoB;KACrB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,uBAAuB;IACvB,CAAC,4BAA4B,EAAE,4BAA4B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1E,EAAE,CAAC,MAAM,CAAC,CACX,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wBAAwB;AACxB,KAAK,UAAU,IAAI;IACjB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC1D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","debug_id":"c0c825d2-da83-500a-98f6-80086abbe1a6"}
@@ -1,78 +0,0 @@
1
- /**
2
- * Page Resources
3
- */
4
-
5
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="55dbe510-b8b2-58cc-aee9-97cd6357263a")}catch(e){}}();
6
- import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import { completionForStyleduideId, listStyleguideResources, } from "./styleguide.js";
8
- import { getPage, listPages } from "../api/page.js";
9
- import { formatPageAsMarkdown } from "../common/formatters/page.js";
10
- export function registerListPagesResource(server) {
11
- server.registerResource("styleguide-page-list", new ResourceTemplate("zeroheight://styleguide/{styleguideId}/page-list", {
12
- list: listStyleguideResources,
13
- complete: {
14
- styleguideId: completionForStyleduideId,
15
- },
16
- }), {
17
- title: "List the pages for a styleguide",
18
- description: "List all pages in a styleguide",
19
- mimeType: "text/markdown",
20
- }, async (uri, { styleguideId }) => {
21
- const selectedId = Array.isArray(styleguideId)
22
- ? styleguideId[0]
23
- : styleguideId;
24
- const parsedStyleguideId = parseInt(selectedId, 10);
25
- const pages = await listPages(parsedStyleguideId);
26
- return {
27
- contents: [
28
- {
29
- uri: uri.href,
30
- text: pages
31
- .map((page) => `- ${page.name} (id: ${page.id})`)
32
- .join("\n"),
33
- },
34
- ],
35
- };
36
- });
37
- }
38
- export function registerPageResource(server) {
39
- server.registerResource("page", new ResourceTemplate("zeroheight://styleguide/{styleguideId}/page/{pageId}", {
40
- list: undefined,
41
- complete: {
42
- styleguideId: completionForStyleduideId,
43
- pageId: completionForStyleduideId,
44
- },
45
- }), {
46
- title: "Page",
47
- description: "Design system page",
48
- mimeType: "text/markdown",
49
- }, async (uri, { pageId }) => {
50
- const selectedId = Array.isArray(pageId) ? pageId[0] : pageId;
51
- const parsedPageId = parseInt(selectedId, 10);
52
- const page = await getPage(parsedPageId);
53
- if (!page) {
54
- throw new Error("Couldn't find the page");
55
- }
56
- return {
57
- contents: [
58
- {
59
- uri: uri.href,
60
- text: formatPageAsMarkdown(page),
61
- mimeType: "text/markdown",
62
- },
63
- ],
64
- };
65
- });
66
- }
67
- /** Utils */
68
- export async function completionForPageId(searchTerm, context) {
69
- const styleguideId = parseInt(context.arguments?.styleguideId ?? "", 10);
70
- const pageList = await listPages(styleguideId);
71
- const matchingPages = pageList.filter((page) => page.id
72
- .toString()
73
- .toLocaleLowerCase()
74
- .includes(searchTerm.toLocaleLowerCase()));
75
- return matchingPages.map((page) => page.id.toString());
76
- }
77
- //# sourceMappingURL=page.js.map
78
- //# debugId=55dbe510-b8b2-58cc-aee9-97cd6357263a
@@ -1 +0,0 @@
1
- {"version":3,"file":"page.js","sources":["resources/page.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Page Resources\n */\n\nimport {\n McpServer,\n ResourceTemplate,\n} from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nimport {\n completionForStyleduideId,\n listStyleguideResources,\n} from \"./styleguide.js\";\nimport { getPage, listPages } from \"../api/page.js\";\nimport { formatPageAsMarkdown } from \"../common/formatters/page.js\";\n\nexport function registerListPagesResource(server: McpServer) {\n server.registerResource(\n \"styleguide-page-list\",\n new ResourceTemplate(\"zeroheight://styleguide/{styleguideId}/page-list\", {\n list: listStyleguideResources,\n complete: {\n styleguideId: completionForStyleduideId,\n },\n }),\n {\n title: \"List the pages for a styleguide\",\n description: \"List all pages in a styleguide\",\n mimeType: \"text/markdown\",\n },\n async (uri, { styleguideId }) => {\n const selectedId = Array.isArray(styleguideId)\n ? styleguideId[0]\n : styleguideId;\n\n const parsedStyleguideId = parseInt(selectedId, 10);\n const pages = await listPages(parsedStyleguideId);\n\n return {\n contents: [\n {\n uri: uri.href,\n text: pages\n .map((page) => `- ${page.name} (id: ${page.id})`)\n .join(\"\\n\"),\n },\n ],\n };\n },\n );\n}\n\nexport function registerPageResource(server: McpServer) {\n server.registerResource(\n \"page\",\n new ResourceTemplate(\n \"zeroheight://styleguide/{styleguideId}/page/{pageId}\",\n {\n list: undefined,\n complete: {\n styleguideId: completionForStyleduideId,\n pageId: completionForStyleduideId,\n },\n },\n ),\n {\n title: \"Page\",\n description: \"Design system page\",\n mimeType: \"text/markdown\",\n },\n async (uri, { pageId }) => {\n const selectedId = Array.isArray(pageId) ? pageId[0] : pageId;\n const parsedPageId = parseInt(selectedId, 10);\n const page = await getPage(parsedPageId);\n\n if (!page) {\n throw new Error(\"Couldn't find the page\");\n }\n\n return {\n contents: [\n {\n uri: uri.href,\n text: formatPageAsMarkdown(page),\n mimeType: \"text/markdown\",\n },\n ],\n };\n },\n );\n}\n\n/** Utils */\n\nexport async function completionForPageId(\n searchTerm: string,\n context: {\n arguments?: Record<string, string>;\n },\n) {\n const styleguideId = parseInt(context.arguments?.styleguideId ?? \"\", 10);\n const pageList = await listPages(styleguideId);\n const matchingPages = pageList.filter((page) =>\n page.id\n .toString()\n .toLocaleLowerCase()\n .includes(searchTerm.toLocaleLowerCase()),\n );\n return matchingPages.map((page) => page.id.toString());\n}\n"],"names":[],"mappings":"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","debug_id":"55dbe510-b8b2-58cc-aee9-97cd6357263a"}
@@ -1,91 +0,0 @@
1
- /**
2
- * Styleguide Resources
3
- */
4
-
5
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="24d1c786-6c08-54bb-8217-d21f78b2cba8")}catch(e){}}();
6
- import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import { getStyleguideTree, listStyleguides } from "../api/styleguide.js";
8
- import { DEFAULT_NAME, formatTreeAsJson, } from "../common/formatters/styleguide.js";
9
- export function registerStyleguideListResource(server) {
10
- server.registerResource("styleguide-list", "zeroheight://styleguide/list", {
11
- title: "Styleguide list",
12
- description: "List all accessible styleguides",
13
- mimeType: "application/json",
14
- }, async (uri) => {
15
- const styleguideList = await listStyleguides();
16
- const styleguideResources = styleguideList.map((styleguide) => ({
17
- id: styleguide.id,
18
- name: styleguide.name ?? DEFAULT_NAME,
19
- }));
20
- return {
21
- contents: [
22
- {
23
- uri: uri.href,
24
- text: JSON.stringify(styleguideResources, null, 2),
25
- mimeType: "application/json",
26
- },
27
- ],
28
- };
29
- });
30
- }
31
- export function registerStyleguideResource(server) {
32
- server.registerResource("styleguide", new ResourceTemplate("zeroheight://styleguide/{styleguideId}", {
33
- list: undefined,
34
- complete: {
35
- styleguideId: completionForStyleduideId,
36
- },
37
- }), {
38
- title: "Styleguide Navigation",
39
- description: "Access the styleguide's navigation including categories, pages and tabs",
40
- }, async (uri, { styleguideId }) => {
41
- console.log({ uri, styleguideId });
42
- const selectedId = Array.isArray(styleguideId)
43
- ? styleguideId[0]
44
- : styleguideId;
45
- console.log({ selectedId });
46
- const parsedStyleguideId = parseInt(selectedId, 10);
47
- // TODO: Make endpoint to get basic styleguide info instead
48
- const styleguideList = await listStyleguides();
49
- console.log({ styleguideList });
50
- const currentStyleguide = styleguideList.find((styleguide) => styleguide.id === parsedStyleguideId);
51
- if (!currentStyleguide) {
52
- return { contents: [] };
53
- }
54
- const tree = await getStyleguideTree(parsedStyleguideId);
55
- const formattedTree = formatTreeAsJson(tree);
56
- return {
57
- contents: [
58
- {
59
- mimeType: "application/json",
60
- uri: uri.href,
61
- text: JSON.stringify(formattedTree, null, 2),
62
- },
63
- ],
64
- };
65
- });
66
- }
67
- /** Utils */
68
- export async function completionForStyleduideId(searchTerm) {
69
- const styleguideList = await listStyleguides();
70
- const matchingStyleguides = styleguideList.filter((styleguide) => styleguide.id
71
- .toString()
72
- .toLocaleLowerCase()
73
- .includes(searchTerm.toLocaleLowerCase()));
74
- return matchingStyleguides.map((styleguide) => styleguide.id.toString());
75
- }
76
- export async function listStyleguideResources() {
77
- const styleguideList = await listStyleguides();
78
- const resources = styleguideList.map((styleguide) => ({
79
- uri: `zeroheight://styleguide/${styleguide.id}`,
80
- name: `${styleguide.name ?? DEFAULT_NAME}`,
81
- _meta: {
82
- id: styleguide.id,
83
- shareId: styleguide.share_id,
84
- },
85
- }));
86
- return {
87
- resources,
88
- };
89
- }
90
- //# sourceMappingURL=styleguide.js.map
91
- //# debugId=24d1c786-6c08-54bb-8217-d21f78b2cba8
@@ -1 +0,0 @@
1
- {"version":3,"file":"styleguide.js","sources":["resources/styleguide.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Styleguide Resources\n */\n\nimport {\n McpServer,\n ResourceTemplate,\n} from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nimport { getStyleguideTree, listStyleguides } from \"../api/styleguide.js\";\nimport {\n DEFAULT_NAME,\n formatTreeAsJson,\n} from \"../common/formatters/styleguide.js\";\n\nexport function registerStyleguideListResource(server: McpServer) {\n server.registerResource(\n \"styleguide-list\",\n \"zeroheight://styleguide/list\",\n {\n title: \"Styleguide list\",\n description: \"List all accessible styleguides\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n const styleguideList = await listStyleguides();\n const styleguideResources = styleguideList.map((styleguide) => ({\n id: styleguide.id,\n name: styleguide.name ?? DEFAULT_NAME,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n text: JSON.stringify(styleguideResources, null, 2),\n mimeType: \"application/json\",\n },\n ],\n };\n },\n );\n}\n\nexport function registerStyleguideResource(server: McpServer) {\n server.registerResource(\n \"styleguide\",\n new ResourceTemplate(\"zeroheight://styleguide/{styleguideId}\", {\n list: undefined,\n complete: {\n styleguideId: completionForStyleduideId,\n },\n }),\n {\n title: \"Styleguide Navigation\",\n description:\n \"Access the styleguide's navigation including categories, pages and tabs\",\n },\n async (uri, { styleguideId }) => {\n console.log({ uri, styleguideId });\n const selectedId = Array.isArray(styleguideId)\n ? styleguideId[0]\n : styleguideId;\n\n console.log({ selectedId });\n\n const parsedStyleguideId = parseInt(selectedId, 10);\n // TODO: Make endpoint to get basic styleguide info instead\n const styleguideList = await listStyleguides();\n console.log({ styleguideList });\n const currentStyleguide = styleguideList.find(\n (styleguide) => styleguide.id === parsedStyleguideId,\n );\n\n if (!currentStyleguide) {\n return { contents: [] };\n }\n\n const tree = await getStyleguideTree(parsedStyleguideId);\n\n const formattedTree = formatTreeAsJson(tree);\n\n return {\n contents: [\n {\n mimeType: \"application/json\",\n uri: uri.href,\n text: JSON.stringify(formattedTree, null, 2),\n },\n ],\n };\n },\n );\n}\n\n/** Utils */\n\nexport async function completionForStyleduideId(searchTerm: string) {\n const styleguideList = await listStyleguides();\n const matchingStyleguides = styleguideList.filter((styleguide) =>\n styleguide.id\n .toString()\n .toLocaleLowerCase()\n .includes(searchTerm.toLocaleLowerCase()),\n );\n return matchingStyleguides.map((styleguide) => styleguide.id.toString());\n}\n\nexport async function listStyleguideResources() {\n const styleguideList = await listStyleguides();\n const resources = styleguideList.map((styleguide) => ({\n uri: `zeroheight://styleguide/${styleguide.id}`,\n name: `${styleguide.name ?? DEFAULT_NAME}`,\n _meta: {\n id: styleguide.id,\n shareId: styleguide.share_id,\n },\n }));\n\n return {\n resources,\n };\n}\n"],"names":[],"mappings":"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","debug_id":"24d1c786-6c08-54bb-8217-d21f78b2cba8"}