@volue/wave-mcp 0.2.0-next.2 → 0.2.0-next.4
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/app.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{WebStandardStreamableHTTPServerTransport as m}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{ErrorCode as s}from"@modelcontextprotocol/sdk/types.js";import{Hono as l}from"hono";import{cors as d}from"hono/cors";import{c as v,p as a}from"./server-
|
|
2
|
+
import{WebStandardStreamableHTTPServerTransport as m}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import{ErrorCode as s}from"@modelcontextprotocol/sdk/types.js";import{Hono as l}from"hono";import{cors as d}from"hono/cors";import{c as v,p as a}from"./server-C2avQp6z.js";import{p as n,i as h}from"./index-Q44b4yQq.js";import"@modelcontextprotocol/sdk/server/mcp.js";import"@modelcontextprotocol/sdk/validation/cfworker";import"@volue/design-colors/generic";import"@volue/design-icons";import"@volue/design-media-queries";import"remark-parse";import"unified";import"zod";import"@volue/design-colors/flat";const r=new l,S=n(process.env.CORS_ORIGIN)??"*";r.use("*",d({origin:S}));const i=n(process.env.ALLOWED_HOSTS),p=n(process.env.ALLOWED_ORIGINS);r.post("/mcp",async e=>{try{const o=v();await h(o);const t=new m({sessionIdGenerator:void 0,enableJsonResponse:!0,enableDnsRebindingProtection:!!(i||p),allowedHosts:i,allowedOrigins:p});await o.connect(t);const c=await t.handleRequest(e.req.raw);return await o.close(),c}catch(o){return console.error("Error handling MCP request:",o),e.json({jsonrpc:"2.0",error:{code:s.InternalError,message:"Internal server error"},id:null},500)}}),r.on(["GET","DELETE"],"/mcp",e=>e.json({jsonrpc:"2.0",error:{code:s.ConnectionClosed,message:"Method not allowed"},id:null},405)),r.get("/",e=>e.json({name:"Wave MCP Server",version:a.version,description:a.description,endpoints:{"/":"Server information (this response)","/mcp":"Streamable HTTP endpoint for MCP connection","/health":"Health check endpoint"}})),r.get("/health",e=>e.json({status:"healthy",timestamp:new Date().toISOString()}));export{r as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var A=Object.defineProperty;var i=(e,t)=>A(e,"name",{value:t,configurable:!0});import N from"@volue/design-colors/generic";import*as D from"@volue/design-icons";import*as F from"@volue/design-media-queries";import j from"remark-parse";import O from"unified";import{z as y}from"zod";import{core as H,background as V,foreground as G,border as X,rgb as q,data as J}from"@volue/design-colors/flat";const $=1e4;async function C(e,t,n){const o=n??`fetch ${e}`,r=AbortSignal.timeout($);try{const a=await fetch(e,{signal:r,...t});if(!a.ok)throw new Error(`Failed to ${o}: ${a.status} ${a.statusText}`);return await a.text()}catch(a){throw r.aborted?new Error(`Failed to ${o}: timed out after ${$}ms`):a}}i(C,"fetchMarkdown");function B(e,t){const n=new Map,o=new Map;return async r=>{const a=n.get(r);if(a&&Date.now()<a.expiresAt)return a.value;let s=o.get(r);return s||(s=t(r).then(c=>(n.set(r,{value:c,expiresAt:Date.now()+e}),c)).finally(()=>o.delete(r)),o.set(r,s)),s}}i(B,"createTtlCache");function d(e,t){return e.type===t}i(d,"isNodeType");function v(e){return Array.from(new Set(e))}i(v,"uniq");function p(e){return e instanceof Error?e.message:"Unknown error"}i(p,"getErrorMessage");function Q(e){const t=e?.split(",").map(n=>n.trim()).filter(Boolean);return t?.length?t:void 0}i(Q,"parseCsvEnv");function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},m.apply(null,arguments)}i(m,"_extends");const Y="0 1px 2.5px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.08)), 0 3px 9px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.048))",K="0 0.4px 2.2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.022)), 0 1.4px 5px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.04)), 0 5px 14px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.06))",Z="0 0.3px 2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.015)), 0 1.5px 8px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.024)), 0 4px 16px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.04)), 0 8px 24px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.07))",ee="0 0.7px 2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.015)), 0 1.6px 8px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.024)), 0 3.3px 16px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.034)), 0 5px 26px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.06)), 0 12px 42px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.08))";var te=Object.freeze({__proto__:null,elevationL:ee,elevationM:Z,elevationS:K,elevationXs:Y}),h={base:{2:"0.125rem",4:"0.25rem",6:"0.375rem",8:"0.5rem",12:"0.75rem",14:"0.875rem",16:"1rem",20:"1.25rem",24:"1.5rem",28:"1.75rem",32:"2rem",36:"2.25rem",40:"2.5rem",44:"2.75rem",48:"3rem",64:"4rem",72:"4.5rem",80:"5rem",96:"6rem",112:"7rem",128:"8rem"},borderRadius:{xs:"0.25rem",s:"0.375rem",m:"0.5rem",l:"0.75rem",xl:"1rem",full:"100vh"},spacing:{xs:"0.25rem",s:"0.5rem",m:"1rem",l:"1.5rem",xl:"2rem",xxl:"3rem",xxxl:"4.5rem"}},u={font:{family:{base:"'IBM Plex Sans', 'IBM Plex Sans Fallback: -apple-system', 'IBM Plex Sans Fallback: Segoe UI', 'IBM Plex Sans Fallback: Roboto', 'IBM Plex Sans Fallback: Arial', 'IBM Plex Sans Fallback: Noto Sans', -apple-system, 'Segoe UI', Roboto, Arial, 'Noto Sans', sans-serif",display:"'IBM Plex Sans', 'IBM Plex Sans Fallback: -apple-system', 'IBM Plex Sans Fallback: Segoe UI', 'IBM Plex Sans Fallback: Roboto', 'IBM Plex Sans Fallback: Arial', 'IBM Plex Sans Fallback: Noto Sans', -apple-system, 'Segoe UI', Roboto, Arial, 'Noto Sans', sans-serif",mono:"ui-monospace, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"},weight:{normal:"400",semibold:"600"}},size:{font:{base:"16px",eta:"12px",zeta:"14px",epsilon:"16px",delta:"19px",gamma:"21px",beta:"28px",alpha:"38px",giga:"51px"},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"normal",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",body:"1.5",base:"1.5rem",small:"1.25rem",xSmall:"1.125rem",zeta:"1.714286",epsilon:"1.5",delta:"1.263158",gamma:"1.52381",beta:"1.714286",alpha:"1.263158",giga:"1.411765"}}};function ne(e){return e.charAt(0).toUpperCase()+e.slice(1)}i(ne,"capitalizeFirstLetter");var I=Object.keys(h.spacing).reduce(function(e,t){var n;return m({},e,(n={},n["spacing"+ne(t)]=h.spacing[t],n))},{}),E={colors:m({},H,V,G,X,q,J),space:I,zIndices:{auto:"auto",0:"0",1:"100",2:"200",3:"300",4:"400",5:"500",9:"900"},fonts:u.font.family,fontWeights:u.font.weight,fontSizes:u.size.font,lineHeights:u.size.lineHeight,letterSpacings:u.size.letterSpacing,sizes:m({},h.base,{measureNarrow:"30ch",measureMedium:"60ch",measureWide:"90ch",containerNarrow:"32rem",containerMedium:"48rem",containerWide:"74rem"}),radii:m({},h.borderRadius,I),shadows:m({},te,{lift:"0 10px 20px -5px rgba(0, 0, 0, 0.15)"})};const oe=O().use(j),R={Components:"component","UX patterns":"pattern"};function re(e,t){const n=oe.parse(e),o=new URL(`${t}/`);let r=null;return n.children.reduce((a,s)=>{if(d(s,"heading")&&s.depth===2)return r=ae(s),a;if(!r||!d(s,"list"))return a;const c=r,l=s.children.map(g=>se(g,c,o)).filter(g=>g!==null);return a.concat(l)},[])}i(re,"parseLlmsIndex");function ae(e){const[t]=e.children;if(!t||!d(t,"text"))return null;const n=t.value.trim();if(!(n in R))return null;const o=R[n];return{title:n,type:o}}i(ae,"extractSectionContext");function se(e,t,n){const[o]=e.children;if(!o||!d(o,"paragraph")||o.children.length!==2)return null;const[r,a]=o.children;if(!d(r,"link")||!d(a,"text")||r.children.length!==1)return null;const s=r.children[0];if(!d(s,"text"))return null;const c=s.value.trim(),l=new URL(r.url,n);if(l.origin!==n.origin)return console.warn(`Skipping llms.txt entry "${c}": ${r.url} is outside ${n.origin}`),null;const g=l.toString(),T=l.pathname.replace(/^\//,""),
|
|
1
|
+
var A=Object.defineProperty;var i=(e,t)=>A(e,"name",{value:t,configurable:!0});import N from"@volue/design-colors/generic";import*as D from"@volue/design-icons";import*as F from"@volue/design-media-queries";import j from"remark-parse";import O from"unified";import{z as y}from"zod";import{core as H,background as V,foreground as G,border as X,rgb as q,data as J}from"@volue/design-colors/flat";const $=1e4;async function C(e,t,n){const o=n??`fetch ${e}`,r=AbortSignal.timeout($);try{const a=await fetch(e,{signal:r,...t});if(!a.ok)throw new Error(`Failed to ${o}: ${a.status} ${a.statusText}`);return await a.text()}catch(a){throw r.aborted?new Error(`Failed to ${o}: timed out after ${$}ms`):a}}i(C,"fetchMarkdown");function B(e,t){const n=new Map,o=new Map;return async r=>{const a=n.get(r);if(a&&Date.now()<a.expiresAt)return a.value;let s=o.get(r);return s||(s=t(r).then(c=>(n.set(r,{value:c,expiresAt:Date.now()+e}),c)).finally(()=>o.delete(r)),o.set(r,s)),s}}i(B,"createTtlCache");function d(e,t){return e.type===t}i(d,"isNodeType");function v(e){return Array.from(new Set(e))}i(v,"uniq");function p(e){return e instanceof Error?e.message:"Unknown error"}i(p,"getErrorMessage");function Q(e){const t=e?.split(",").map(n=>n.trim()).filter(Boolean);return t?.length?t:void 0}i(Q,"parseCsvEnv");function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},m.apply(null,arguments)}i(m,"_extends");const Y="0 1px 2.5px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.08)), 0 3px 9px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.048))",K="0 0.4px 2.2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.022)), 0 1.4px 5px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.04)), 0 5px 14px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.06))",Z="0 0.3px 2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.015)), 0 1.5px 8px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.024)), 0 4px 16px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.04)), 0 8px 24px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.07))",ee="0 0.7px 2px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.015)), 0 1.6px 8px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.024)), 0 3.3px 16px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.034)), 0 5px 26px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.06)), 0 12px 42px hsla(var(--shadow-color, 166, 48%, 7%), calc(var(--shadow-intensity, 1) * 0.08))";var te=Object.freeze({__proto__:null,elevationL:ee,elevationM:Z,elevationS:K,elevationXs:Y}),h={base:{2:"0.125rem",4:"0.25rem",6:"0.375rem",8:"0.5rem",12:"0.75rem",14:"0.875rem",16:"1rem",20:"1.25rem",24:"1.5rem",28:"1.75rem",32:"2rem",36:"2.25rem",40:"2.5rem",44:"2.75rem",48:"3rem",64:"4rem",72:"4.5rem",80:"5rem",96:"6rem",112:"7rem",128:"8rem"},borderRadius:{xs:"0.25rem",s:"0.375rem",m:"0.5rem",l:"0.75rem",xl:"1rem",full:"100vh"},spacing:{xs:"0.25rem",s:"0.5rem",m:"1rem",l:"1.5rem",xl:"2rem",xxl:"3rem",xxxl:"4.5rem"}},u={font:{family:{base:"'IBM Plex Sans', 'IBM Plex Sans Fallback: -apple-system', 'IBM Plex Sans Fallback: Segoe UI', 'IBM Plex Sans Fallback: Roboto', 'IBM Plex Sans Fallback: Arial', 'IBM Plex Sans Fallback: Noto Sans', -apple-system, 'Segoe UI', Roboto, Arial, 'Noto Sans', sans-serif",display:"'IBM Plex Sans', 'IBM Plex Sans Fallback: -apple-system', 'IBM Plex Sans Fallback: Segoe UI', 'IBM Plex Sans Fallback: Roboto', 'IBM Plex Sans Fallback: Arial', 'IBM Plex Sans Fallback: Noto Sans', -apple-system, 'Segoe UI', Roboto, Arial, 'Noto Sans', sans-serif",mono:"ui-monospace, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"},weight:{normal:"400",semibold:"600"}},size:{font:{base:"16px",eta:"12px",zeta:"14px",epsilon:"16px",delta:"19px",gamma:"21px",beta:"28px",alpha:"38px",giga:"51px"},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"normal",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",body:"1.5",base:"1.5rem",small:"1.25rem",xSmall:"1.125rem",zeta:"1.714286",epsilon:"1.5",delta:"1.263158",gamma:"1.52381",beta:"1.714286",alpha:"1.263158",giga:"1.411765"}}};function ne(e){return e.charAt(0).toUpperCase()+e.slice(1)}i(ne,"capitalizeFirstLetter");var I=Object.keys(h.spacing).reduce(function(e,t){var n;return m({},e,(n={},n["spacing"+ne(t)]=h.spacing[t],n))},{}),E={colors:m({},H,V,G,X,q,J),space:I,zIndices:{auto:"auto",0:"0",1:"100",2:"200",3:"300",4:"400",5:"500",9:"900"},fonts:u.font.family,fontWeights:u.font.weight,fontSizes:u.size.font,lineHeights:u.size.lineHeight,letterSpacings:u.size.letterSpacing,sizes:m({},h.base,{measureNarrow:"30ch",measureMedium:"60ch",measureWide:"90ch",containerNarrow:"32rem",containerMedium:"48rem",containerWide:"74rem"}),radii:m({},h.borderRadius,I),shadows:m({},te,{lift:"0 10px 20px -5px rgba(0, 0, 0, 0.15)"}),transitions:{iconRotate:"transform 0.15s cubic-bezier(0.33, 0, 0.67, 1)"}};const oe=O().use(j),R={Components:"component","UX patterns":"pattern"};function re(e,t){const n=oe.parse(e),o=new URL(`${t}/`);let r=null;return n.children.reduce((a,s)=>{if(d(s,"heading")&&s.depth===2)return r=ae(s),a;if(!r||!d(s,"list"))return a;const c=r,l=s.children.map(g=>se(g,c,o)).filter(g=>g!==null);return a.concat(l)},[])}i(re,"parseLlmsIndex");function ae(e){const[t]=e.children;if(!t||!d(t,"text"))return null;const n=t.value.trim();if(!(n in R))return null;const o=R[n];return{title:n,type:o}}i(ae,"extractSectionContext");function se(e,t,n){const[o]=e.children;if(!o||!d(o,"paragraph")||o.children.length!==2)return null;const[r,a]=o.children;if(!d(r,"link")||!d(a,"text")||r.children.length!==1)return null;const s=r.children[0];if(!d(s,"text"))return null;const c=s.value.trim(),l=new URL(r.url,n);if(l.origin!==n.origin)return console.warn(`Skipping llms.txt entry "${c}": ${r.url} is outside ${n.origin}`),null;const g=l.toString(),T=l.pathname.replace(/^\//,""),L=ie(T),P=ce(t.title,T,t.type),W=pe(a.value);return{name:c,slug:L,category:P,section:t.title,type:t.type,url:g,description:W??void 0}}i(se,"listItemToResource");function ie(e){return e.replace(/\.md$/,"").split("/").pop()??""}i(ie,"deriveSlug");function ce(e,t,n){const o=t.replace(/\.md$/,"").split("/");if(n==="component"||n==="pattern"){const r=o.length>=3?o[o.length-2]:null;return r?`${e} / ${le(r)}`:e}return e}i(ce,"deriveCategory");function le(e){return e.split("-").filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}i(le,"formatSegment");function pe(e){if(!e)return null;const t=e.replace(/^\s*:\s*/,"").trim();return t.toLowerCase()==="no description available"?null:t}i(pe,"normalizeDescription");const x=process.env.USE_STABLE_DOCS==="true"||process.env.USE_STABLE_DOCS==="1"?"https://wave.volue.com":"https://next.wave-design-system.pages.dev",de=`${x}/llms.txt`,me=1e3*60*15,M=process.env.WAVE_RESOURCES_CACHE_TIME?Number.parseInt(process.env.WAVE_RESOURCES_CACHE_TIME,10):me;function b(e){const t=new URL(e,x);return t.pathname.endsWith(".md")||(t.pathname+=".md"),t.toString()}i(b,"createUrl");const ge=B(M,async e=>{const t=await C(e,void 0,"fetch llms.txt");return re(t,x)}),f=B(M,e=>C(e));function ue(e){return f(e.url)}i(ue,"fetchComponent");function he(e){return f(e.url)}i(he,"fetchPattern");function fe(){return f(b("get-started/developing"))}i(fe,"fetchDevelopingGuide");function ye(){return f(b("tokens/colors"))}i(ye,"fetchColorUsageGuidelines");function S(){return Object.entries(D).map(([e,t])=>({name:e,svg:t}))}i(S,"listIcons");function ve(){const e=S();return v(e.map(t=>t.name))}i(ve,"getIconNames");function xe(e,t){const n=t.trim().toLowerCase();return e.find(o=>o.name.toLowerCase()===n)}i(xe,"findIconByName");async function _(e){return(await ge(de)).filter(n=>n.type===e)}i(_,"listResourcesByType");function U(e,t){const n=t.trim().toLowerCase();return e.find(o=>o.name.toLowerCase()===n)}i(U,"findResourceByName");function w(){return _("component")}i(w,"listComponents");async function be(){const e=await w();return v(e.map(t=>t.name))}i(be,"getComponentNames");function k(){return _("pattern")}i(k,"listPatterns");async function Se(){const e=await k();return v(e.map(t=>t.name))}i(Se,"getPatternNames");function z(e){return e.reduce((t,n)=>(t[n.category]||(t[n.category]=[]),t[n.category].push(n),t),{})}i(z,"groupResourcesByCategory");const we={name:"get_color_usage",description:"Retrieve the Wave Design System color tokens and guidelines for applying color in user interfaces.",exec(e,{name:t,description:n}){e.registerTool(t,{description:n},async()=>{try{const o=await ye();return{content:[{type:"text",text:JSON.stringify(N)},{type:"text",text:`Here are the Wave Design System color usage guidelines:
|
|
2
2
|
|
|
3
3
|
${o}
|
|
4
4
|
|
|
@@ -266,7 +266,7 @@ It's **important** that if the project is using a tool like Vite or Next.js, one
|
|
|
266
266
|
---
|
|
267
267
|
|
|
268
268
|
${await fe()}
|
|
269
|
-
`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve getting started documentation: ${p(o)}`}]}}})}},Re={name:"list_components",description:"List all components available from the Wave Design System. This tool retrieves the names of all available Wave Design System components grouped by category.",exec(e,{name:t,description:n}){e.registerTool(t,{description:n},async()=>{try{const o=await w(),r=
|
|
269
|
+
`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve getting started documentation: ${p(o)}`}]}}})}},Re={name:"list_components",description:"List all components available from the Wave Design System. This tool retrieves the names of all available Wave Design System components grouped by category.",exec(e,{name:t,description:n}){e.registerTool(t,{description:n},async()=>{try{const o=await w(),r=z(o);return{content:[{type:"text",text:`The following components are available in the Wave Design System:
|
|
270
270
|
|
|
271
271
|
${Object.entries(r).map(([s,c])=>`## ${s}
|
|
272
272
|
${c.map(l=>`- ${l.name}`).join(`
|
|
@@ -281,7 +281,7 @@ Use these components from the \`@volue/wave-react\` package.`}]}}catch(o){return
|
|
|
281
281
|
${S().map(a=>`- ${a.name}`).join(`
|
|
282
282
|
`)}
|
|
283
283
|
|
|
284
|
-
Use the \`get_icon\` tool to retrieve the SVG markup and usage guidelines for a specific icon.`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve the icon data: ${p(o)}`}]}}})}},_e={name:"list_patterns",description:"List all UX patterns available from the Wave Design System. This tool retrieves the names of all available Wave Design System patterns grouped by category.",exec(e,{name:t,description:n}){e.registerTool(t,{description:n},async()=>{try{const o=await k(),r=
|
|
284
|
+
Use the \`get_icon\` tool to retrieve the SVG markup and usage guidelines for a specific icon.`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve the icon data: ${p(o)}`}]}}})}},_e={name:"list_patterns",description:"List all UX patterns available from the Wave Design System. This tool retrieves the names of all available Wave Design System patterns grouped by category.",exec(e,{name:t,description:n}){e.registerTool(t,{description:n},async()=>{try{const o=await k(),r=z(o);return{content:[{type:"text",text:`The following UX patterns are available in the Wave Design System:
|
|
285
285
|
|
|
286
286
|
${Object.entries(r).map(([s,c])=>`## ${s}
|
|
287
287
|
${c.map(l=>`- ${l.name}`).join(`
|
|
@@ -289,4 +289,4 @@ ${c.map(l=>`- ${l.name}`).join(`
|
|
|
289
289
|
|
|
290
290
|
`)}
|
|
291
291
|
|
|
292
|
-
Use the \`get_pattern\` tool to access detailed guidance for a specific pattern.`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve the pattern index: ${p(o)}`}]}}})}},Ue=[Ee,Re,ke,_e,$e,we,Me,Te,Ie,Ce];async function
|
|
292
|
+
Use the \`get_pattern\` tool to access detailed guidance for a specific pattern.`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Failed to retrieve the pattern index: ${p(o)}`}]}}})}},Ue=[Ee,Re,ke,_e,$e,we,Me,Te,Ie,Ce];async function ze(e){await Promise.all(Ue.map(async t=>{let n;try{n=await t.ctx?.()}catch(o){console.error(`Skipping tool "${t.name}":`,o);return}t.exec(e,{name:t.name,description:t.description,ctx:n})}))}i(ze,"initializeTools");export{ze as i,Q as p};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var a=Object.defineProperty;var s=(o,r)=>a(o,"name",{value:r,configurable:!0});import{i}from"./isEntryFile-gJoj6hFD.js";import{c as g}from"./server-
|
|
2
|
+
var a=Object.defineProperty;var s=(o,r)=>a(o,"name",{value:r,configurable:!0});import{i}from"./isEntryFile-gJoj6hFD.js";import{c as g}from"./server-C2avQp6z.js";import"node:fs";import"node:url";import"@modelcontextprotocol/sdk/server/mcp.js";import"@modelcontextprotocol/sdk/validation/cfworker";if(i(import.meta.url)){const r=process.argv.slice(2)[0]||"stdio";async function e(){try{switch(r){case"stdio":await import("./transports/stdio.js");break;case"http":{const{startServer:t}=await import("./transports/http.js");t();break}default:console.error(`Unknown transport: ${r}`),console.error("Available transports: stdio, http"),process.exit(1)}}catch(t){console.error("Error running transport:",t),process.exit(1)}}s(e,"run"),e()}export{g as createServer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t=Object.defineProperty;var e=(o,n)=>t(o,"name",{value:n,configurable:!0});import{McpServer as a}from"@modelcontextprotocol/sdk/server/mcp.js";import{CfWorkerJsonSchemaValidator as s}from"@modelcontextprotocol/sdk/validation/cfworker";var i="0.2.0-next.
|
|
1
|
+
var t=Object.defineProperty;var e=(o,n)=>t(o,"name",{value:n,configurable:!0});import{McpServer as a}from"@modelcontextprotocol/sdk/server/mcp.js";import{CfWorkerJsonSchemaValidator as s}from"@modelcontextprotocol/sdk/validation/cfworker";var i="0.2.0-next.4",c="An MCP server that connects AI tools to the Wave Design System",r={version:i,description:c};function v(){return new a({name:"Wave Design System",version:r.version},{capabilities:{tools:{}},jsonSchemaValidator:new s})}e(v,"createServer");export{v as c,r as p};
|
package/dist/transports/http.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var m=Object.defineProperty;var e=(o,r)=>m(o,"name",{value:r,configurable:!0});import{serve as n}from"@hono/node-server";import c from"../app.js";import{i as l}from"../isEntryFile-gJoj6hFD.js";import"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import"@modelcontextprotocol/sdk/types.js";import"hono";import"hono/cors";import"../server-
|
|
2
|
+
var m=Object.defineProperty;var e=(o,r)=>m(o,"name",{value:r,configurable:!0});import{serve as n}from"@hono/node-server";import c from"../app.js";import{i as l}from"../isEntryFile-gJoj6hFD.js";import"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";import"@modelcontextprotocol/sdk/types.js";import"hono";import"hono/cors";import"../server-C2avQp6z.js";import"@modelcontextprotocol/sdk/server/mcp.js";import"@modelcontextprotocol/sdk/validation/cfworker";import"../index-Q44b4yQq.js";import"@volue/design-colors/generic";import"@volue/design-icons";import"@volue/design-media-queries";import"remark-parse";import"unified";import"zod";import"@volue/design-colors/flat";import"node:fs";import"node:url";function i(){const o=process.env.HOST??"localhost",r=process.env.PORT?Number(process.env.PORT):3e3,p=n({fetch:c.fetch,hostname:o,port:r},()=>{console.log(`\u{1F680} Wave MCP Server running on http://${o}:${r}`),console.log(`\u{1F517} Connect via http://${o}:${r}/mcp`)});p.on("error",t=>{console.error("\u274C Failed to start server:",t),process.exit(1)});const s=e(async()=>{await new Promise(t=>p.close(()=>t())),console.log("\u{1F44B} Server shut down gracefully"),process.exit(0)},"cleanup");process.on("SIGTERM",s),process.on("SIGINT",s)}e(i,"startServer"),l(import.meta.url)&&i();export{i as startServer};
|
package/dist/transports/stdio.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var e=Object.defineProperty;var t=(o,r)=>e(o,"name",{value:r,configurable:!0});import{StdioServerTransport as s}from"@modelcontextprotocol/sdk/server/stdio.js";import{c as a}from"../server-
|
|
2
|
+
var e=Object.defineProperty;var t=(o,r)=>e(o,"name",{value:r,configurable:!0});import{StdioServerTransport as s}from"@modelcontextprotocol/sdk/server/stdio.js";import{c as a}from"../server-C2avQp6z.js";import{i as c}from"../index-Q44b4yQq.js";import"@modelcontextprotocol/sdk/server/mcp.js";import"@modelcontextprotocol/sdk/validation/cfworker";import"@volue/design-colors/generic";import"@volue/design-icons";import"@volue/design-media-queries";import"remark-parse";import"unified";import"zod";import"@volue/design-colors/flat";async function p(){const o=a();await c(o);const r=new s;await o.connect(r);const i=t(async()=>{await r.close(),process.exit(0)},"cleanup");process.on("SIGTERM",i),process.on("SIGINT",i)}t(p,"main"),p().catch(o=>{console.error("\u274C Failed to start server:",o),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volue/wave-mcp",
|
|
3
|
-
"version": "0.2.0-next.
|
|
3
|
+
"version": "0.2.0-next.4",
|
|
4
4
|
"description": "An MCP server that connects AI tools to the Wave Design System",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -51,8 +51,9 @@
|
|
|
51
51
|
"start": "yarn run build && yarn node dist/transports/http.js",
|
|
52
52
|
"dev": "tsx watch --clear-screen=false src/transports/http.ts",
|
|
53
53
|
"prepack": "yarn run build",
|
|
54
|
-
"
|
|
55
|
-
"deploy:
|
|
54
|
+
"build:deps": "yarn workspaces foreach -Rpv --topological-dev --from @volue/wave-mcp --exclude @volue/wave-mcp run prepack",
|
|
55
|
+
"deploy:next": "yarn run build:deps && yarn dlx -q wrangler@4 deploy --env next",
|
|
56
|
+
"deploy:production": "yarn run build:deps && yarn dlx -q wrangler@4 deploy --env production",
|
|
56
57
|
"inspect": "yarn run build && yarn dlx -q @modelcontextprotocol/inspector --transport=stdio node dist/transports/stdio.js",
|
|
57
58
|
"inspect:http": "yarn dlx -q @modelcontextprotocol/inspector --transport http --server-url http://localhost:3000/mcp"
|
|
58
59
|
},
|
|
@@ -61,24 +62,24 @@
|
|
|
61
62
|
"@hono/node-server": "2.1.1",
|
|
62
63
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
63
64
|
"@types/mdast": "3.0.15",
|
|
64
|
-
"@volue/design-colors": "^3.1.2-next.
|
|
65
|
-
"@volue/design-icons": "^2.0.2-next.
|
|
66
|
-
"@volue/design-media-queries": "^1.3.24-next.
|
|
67
|
-
"hono": "4.13.
|
|
65
|
+
"@volue/design-colors": "^3.1.2-next.5",
|
|
66
|
+
"@volue/design-icons": "^2.0.2-next.5",
|
|
67
|
+
"@volue/design-media-queries": "^1.3.24-next.5",
|
|
68
|
+
"hono": "4.13.7",
|
|
68
69
|
"remark-parse": "8.0.3",
|
|
69
70
|
"unified": "9.2.2",
|
|
70
|
-
"zod": "4.4
|
|
71
|
+
"zod": "4.5.4"
|
|
71
72
|
},
|
|
72
73
|
"devDependencies": {
|
|
73
74
|
"@types/node": "22.20.1",
|
|
74
75
|
"@volue/eslint-config": "1.3.12",
|
|
75
|
-
"@volue/wave-react": "2.0.0-next.
|
|
76
|
+
"@volue/wave-react": "2.0.0-next.14",
|
|
76
77
|
"eslint": "9.39.5",
|
|
77
78
|
"npm-run-all2": "8.0.4",
|
|
78
|
-
"pkgroll": "2.
|
|
79
|
+
"pkgroll": "2.28.1",
|
|
79
80
|
"premove": "4.0.0",
|
|
80
81
|
"prettier": "3.9.6",
|
|
81
|
-
"tsx": "4.23.
|
|
82
|
+
"tsx": "4.23.13",
|
|
82
83
|
"typescript": "5.9.3"
|
|
83
84
|
}
|
|
84
85
|
}
|