[{"data":1,"prerenderedAt":438},["ShallowReactive",2],{"navigation_docs":3,"-guide-ai-tools":104,"-guide-ai-tools-surround":433},[4,46,67,91],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Guide","i-lucide-book-open","\u002Fguide","1.guide",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fguide\u002Fintroduction","1.guide\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"How it works","\u002Fguide\u002Fhow-it-works","1.guide\u002F2.how-it-works","i-lucide-workflow",{"title":21,"path":22,"stem":23,"icon":24},"Data modes","\u002Fguide\u002Fdata-modes","1.guide\u002F3.data-modes","i-lucide-git-fork",{"title":26,"path":27,"stem":28,"icon":29},"Options","\u002Fguide\u002Foptions","1.guide\u002F4.options","i-lucide-settings-2",{"title":31,"path":32,"stem":33,"icon":34},"Gradients","\u002Fguide\u002Fgradients","1.guide\u002F5.gradients","i-lucide-palette",{"title":36,"path":37,"stem":38,"icon":39},"WebSocket protocol","\u002Fguide\u002Fwebsocket-protocol","1.guide\u002F6.websocket-protocol","i-lucide-radio",{"title":41,"path":42,"stem":43,"icon":44},"AI tools","\u002Fguide\u002Fai-tools","1.guide\u002F7.ai-tools","i-lucide-bot",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Core","i-lucide-box","\u002Fcore","2.core",[52,57,62],{"title":53,"path":54,"stem":55,"icon":56},"Installation","\u002Fcore\u002Finstallation","2.core\u002F1.installation","i-lucide-download",{"title":58,"path":59,"stem":60,"icon":61},"API reference","\u002Fcore\u002Fapi","2.core\u002F2.api","i-lucide-code",{"title":63,"path":64,"stem":65,"icon":66},"Audio engines","\u002Fcore\u002Faudio-engines","2.core\u002F3.audio-engines","i-lucide-audio-lines",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":45},"Vue","i-simple-icons-vuedotjs","\u002Fvue","3.vue",[73,76,81,86],{"title":53,"path":74,"stem":75,"icon":56},"\u002Fvue\u002Finstallation","3.vue\u002F1.installation",{"title":77,"path":78,"stem":79,"icon":80},"Props, events & methods","\u002Fvue\u002Fprops","3.vue\u002F2.props","i-lucide-sliders-horizontal",{"title":82,"path":83,"stem":84,"icon":85},"Composables","\u002Fvue\u002Fcomposables","3.vue\u002F3.composables","i-lucide-plug",{"title":87,"path":88,"stem":89,"icon":90},"Nuxt","\u002Fvue\u002Fnuxt","3.vue\u002F4.nuxt","i-simple-icons-nuxtdotjs",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":45},"React","i-simple-icons-react","\u002Freact","4.react",[97,100],{"title":53,"path":98,"stem":99,"icon":56},"\u002Freact\u002Finstallation","4.react\u002F1.installation",{"title":101,"path":102,"stem":103,"icon":80},"Props, callbacks & ref","\u002Freact\u002Fprops","4.react\u002F2.props",{"id":105,"title":41,"body":106,"description":426,"extension":427,"links":428,"meta":429,"navigation":430,"path":42,"seo":431,"stem":43,"__hash__":432},"docs\u002F1.guide\u002F7.ai-tools.md",{"type":107,"value":108,"toc":418},"minimark",[109,113,118,129,132,137,172,176,179,289,293,317,331,335,338,374,381,414],[110,111,112],"p",{},"These docs are machine-readable. There is an MCP server that any compatible assistant can\nconnect to, and a set of plain-text files for tools that don't speak MCP. Both serve the same\ncontent as the pages you're reading — so an assistant using them cites what is actually\ndocumented rather than reconstructing an API from training data.",[114,115,117],"h2",{"id":116},"mcp-server","MCP server",[119,120,125],"pre",{"className":121,"code":123,"language":124},[122],"language-text","https:\u002F\u002Fwww.fftvisualizer.com\u002Fmcp\n","text",[126,127,123],"code",{"__ignoreMap":128},"",[110,130,131],{},"Streamable HTTP, no authentication, no API key. Nothing to install.",[133,134,136],"h3",{"id":135},"claude-code","Claude Code",[119,138,142],{"className":139,"code":140,"language":141,"meta":128,"style":128},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http fft-visualizer https:\u002F\u002Fwww.fftvisualizer.com\u002Fmcp\n","bash",[126,143,144],{"__ignoreMap":128},[145,146,149,153,157,160,163,166,169],"span",{"class":147,"line":148},"line",1,[145,150,152],{"class":151},"sBMFI","claude",[145,154,156],{"class":155},"sfazB"," mcp",[145,158,159],{"class":155}," add",[145,161,162],{"class":155}," --transport",[145,164,165],{"class":155}," http",[145,167,168],{"class":155}," fft-visualizer",[145,170,171],{"class":155}," https:\u002F\u002Fwww.fftvisualizer.com\u002Fmcp\n",[133,173,175],{"id":174},"other-clients","Other clients",[110,177,178],{},"Most MCP clients take a JSON block like this — the file it goes in and the exact field names\nvary, so check your client's own docs:",[119,180,184],{"className":181,"code":182,"language":183,"meta":128,"style":128},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"mcpServers\": {\n    \"fft-visualizer\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fwww.fftvisualizer.com\u002Fmcp\"\n    }\n  }\n}\n","json",[126,185,186,192,211,226,251,271,277,283],{"__ignoreMap":128},[145,187,188],{"class":147,"line":148},[145,189,191],{"class":190},"sMK4o","{\n",[145,193,195,198,202,205,208],{"class":147,"line":194},2,[145,196,197],{"class":190},"  \"",[145,199,201],{"class":200},"spNyl","mcpServers",[145,203,204],{"class":190},"\"",[145,206,207],{"class":190},":",[145,209,210],{"class":190}," {\n",[145,212,214,217,220,222,224],{"class":147,"line":213},3,[145,215,216],{"class":190},"    \"",[145,218,219],{"class":151},"fft-visualizer",[145,221,204],{"class":190},[145,223,207],{"class":190},[145,225,210],{"class":190},[145,227,229,232,236,238,240,243,246,248],{"class":147,"line":228},4,[145,230,231],{"class":190},"      \"",[145,233,235],{"class":234},"sbssI","type",[145,237,204],{"class":190},[145,239,207],{"class":190},[145,241,242],{"class":190}," \"",[145,244,245],{"class":155},"http",[145,247,204],{"class":190},[145,249,250],{"class":190},",\n",[145,252,254,256,259,261,263,265,268],{"class":147,"line":253},5,[145,255,231],{"class":190},[145,257,258],{"class":234},"url",[145,260,204],{"class":190},[145,262,207],{"class":190},[145,264,242],{"class":190},[145,266,267],{"class":155},"https:\u002F\u002Fwww.fftvisualizer.com\u002Fmcp",[145,269,270],{"class":190},"\"\n",[145,272,274],{"class":147,"line":273},6,[145,275,276],{"class":190},"    }\n",[145,278,280],{"class":147,"line":279},7,[145,281,282],{"class":190},"  }\n",[145,284,286],{"class":147,"line":285},8,[145,287,288],{"class":190},"}\n",[133,290,292],{"id":291},"available-tools","Available tools",[294,295,296,306],"ul",{},[297,298,299,305],"li",{},[300,301,302],"strong",{},[126,303,304],{},"list-pages"," — every documentation page, with its title, path and description.",[297,307,308,313,314,316],{},[300,309,310],{},[126,311,312],{},"get-page"," — the full Markdown of one page, given a path from ",[126,315,304],{},".",[110,318,319,320,322,323,325,326,330],{},"A typical exchange is one ",[126,321,304],{}," call to find the right page, then one ",[126,324,312],{}," to read\nit — so a question about, say, Nuxt integration is answered from\n",[327,328,329],"a",{"href":88},"that page"," verbatim.",[114,332,334],{"id":333},"without-mcp","Without MCP",[110,336,337],{},"For assistants that can fetch a URL but don't support MCP, the same content is available as\nplain text:",[294,339,340,351,361],{},[297,341,342,350],{},[327,343,347],{"href":344,"rel":345},"https:\u002F\u002Fwww.fftvisualizer.com\u002Fllms.txt",[346],"nofollow",[126,348,349],{},"\u002Fllms.txt"," — an index: every page with a one-line\nsummary and a link.",[297,352,353,360],{},[327,354,357],{"href":355,"rel":356},"https:\u002F\u002Fwww.fftvisualizer.com\u002Fllms-full.txt",[346],[126,358,359],{},"\u002Fllms-full.txt"," — the entire documentation in a\nsingle file, around 55 KB.",[297,362,363,366,367,316],{},[126,364,365],{},"\u002Fraw\u002F\u003Cpath>.md"," — any single page as Markdown, e.g.\n",[327,368,371],{"href":369,"rel":370},"https:\u002F\u002Fwww.fftvisualizer.com\u002Fraw\u002Fvue\u002Fnuxt.md",[346],[126,372,373],{},"\u002Fraw\u002Fvue\u002Fnuxt.md",[110,375,376,377,380],{},"Pasting ",[126,378,379],{},"llms-full.txt"," into a chat is the zero-setup option: it fits comfortably in a modern\ncontext window and covers the guide, the Core API, and both wrappers.",[382,383,384,385,387,388,391,392,397,398,403,404,409,410,413],"note",{},"If an assistant suggests installing ",[126,386,219],{}," unscoped, or calling an ",[126,389,390],{},"init()"," method on\nthe class, it is answering from memory — the packages are\n",[327,393,394],{"href":54},[126,395,396],{},"@fft-visualizer\u002Fcore",", ",[327,399,400],{"href":74},[126,401,402],{},"@fft-visualizer\u002Fvue"," and\n",[327,405,406],{"href":98},[126,407,408],{},"@fft-visualizer\u002Freact",", and the canvas is a\n",[327,411,412],{"href":59},"constructor argument",". Connecting one of the sources above is the fix.",[415,416,417],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":128,"searchDepth":194,"depth":194,"links":419},[420,425],{"id":116,"depth":194,"text":117,"children":421},[422,423,424],{"id":135,"depth":213,"text":136},{"id":174,"depth":213,"text":175},{"id":291,"depth":213,"text":292},{"id":333,"depth":194,"text":334},"Point Claude Code, Cursor or any MCP client at these docs so it answers from them instead of from memory.","md",null,{},{"icon":44},{"title":41,"description":426},"bOlc2t3Fvpm96IgL0jxv6haoeSpAmPHJV8lOE2zXFbQ",[434,436],{"title":36,"path":37,"stem":38,"description":435,"icon":39,"children":-1},"The remote-FFT wire protocol the visualizer speaks in websocket mode, and the reference servers.",{"title":53,"path":54,"stem":55,"description":437,"icon":56,"children":-1},"Install @fft-visualizer\u002Fcore and render a spectrum onto a canvas — no framework required.",1785144671314]