PageSourceSearch

https://docs.voiden.md/assets/js/20a846d4.3258e588.js

js voiden.md collected 2026-10-04 00:21:28 UTC 8,524 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkvoiden_docs=globalThis.webpackChunkvoiden_docs||[]).push([[3032],{3178:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"plugins/core-plugins/voiden-mcp-client","title":"Voiden MCP Client","description":"The Voiden MCP Client plugin lets you connect to an external MCP server \u2014 anything reachable over the network, remote or on localhost \u2014 and try out what it offers, the same way .void files already test REST and GraphQL requests. Use it to explore, test, and assert on someone else\'s MCP server, the reverse direction of the Voiden Tool plugin, which serves your own requests as MCP tools.","source":"@site/docs/plugins/core-plugins/voiden-mcp-client.md","sourceDirName":"plugins/core-plugins","slug":"/plugins/core-plugins/voiden-mcp-client","permalink":"/docs/plugins/core-plugins/voiden-mcp-client","draft":false,"unlisted":false,"editUrl":"https://github.com/VoidenHQ/docs/tree/main/docs/plugins/core-plugins/voiden-mcp-client.md","tags":[],"version":"current","lastUpdatedAt":1790146608000,"frontMatter":{"id":"voiden-mcp-client","title":"Voiden MCP Client","sidebar_label":"Voiden MCP Client"},"sidebar":"tutorialSidebar","previous":{"title":"Voiden Tool","permalink":"/docs/plugins/core-plugins/voiden-mcp-tool"},"next":{"title":"Introduction","permalink":"/docs/plugins/community-plugins/overview"}}');var r=s(4848),t=s(8453);const i={id:"voiden-mcp-client",title:"Voiden MCP Client",sidebar_label:"Voiden MCP Client"},l="Voiden MCP Client",d={},c=[{value:"Key Features",id:"key-features",level:2},{value:"<strong>Tools, Resources, and Prompts</strong>",id:"tools-resources-and-prompts",level:3},{value:"<strong>Config Import</strong>",id:"config-import",level:3},{value:"<strong>Reuses Existing Request Machinery</strong>",id:"reuses-existing-request-machinery",level:3},{value:"Block Ownership",id:"block-ownership",level:2},{value:"Request Pipeline",id:"request-pipeline",level:2},{value:"Dependencies",id:"dependencies",level:2}];function a(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"voiden-mcp-client",children:"Voiden MCP Client"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Voiden MCP Client"})," plugin lets you connect to an external ",(0,r.jsx)(n.a,{href:"https://modelcontextprotocol.io",children:"MCP"})," server \u2014 anything reachable over the network, remote or on ",(0,r.jsx)(n.code,{children:"localhost"})," \u2014 and try out what it offers, the same way ",(0,r.jsx)(n.code,{children:".void"})," files already test REST and GraphQL requests. Use it to explore, test, and assert on someone else's MCP server, the reverse direction of the ",(0,r.jsx)(n.a,{href:"/docs/plugins/core-plugins/voiden-mcp-tool",children:"Voiden Tool"})," plugin, which serves your ",(0,r.jsx)(n.em,{children:"own"})," requests as MCP tools."]}),"\n",(0,r.jsx)(n.p,{children:"Phase 1: Streamable-HTTP transport only \u2014 a server that only runs as a local, spawned process (stdio) isn't supported yet."}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"key-features",children:"Key Features"}),"\n",(0,r.jsx)(n.h3,{id:"tools-resources-and-prompts",children:(0,r.jsx)(n.strong,{children:"Tools, Resources, and Prompts"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Connect to any Streamable-HTTP MCP server, remote or running on ",(0,r.jsx)(n.code,{children:"localhost"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Pick what you want to call by ",(0,r.jsx)(n.strong,{children:"Type"})," \u2014 ",(0,r.jsx)(n.strong,{children:"Tool"})," (an action), ",(0,r.jsx)(n.strong,{children:"Resource"})," (a piece of data by URI), or ",(0,r.jsx)(n.strong,{children:"Prompt"})," (a template) \u2014 and Voiden auto-discovers the server's real names for a dropdown, instead of you needing to know them upfront."]}),"\n",(0,r.jsxs)(n.li,{children:["Tool/prompt arguments are authored as JSON (auto-filled from the tool/prompt's own schema when you pick it), with ",(0,r.jsx)(n.code,{children:"{{...}}"})," placeholders \u2014 environment and runtime variables resolve before the call is sent. (Faker tokens don't yet resolve inside these arguments \u2014 support is planned.)"]}),"\n",(0,r.jsxs)(n.li,{children:["If the server requires sign-in, an ",(0,r.jsx)(n.strong,{children:"Authorize"})," button walks you through it in your browser \u2014 no manual token copying."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"config-import",children:(0,r.jsx)(n.strong,{children:"Config Import"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Paste a Claude Desktop / Cursor / VS Code / Windsurf-style config directly into a ",(0,r.jsx)(n.code,{children:".void"})," file \u2014 both ",(0,r.jsx)(n.code,{children:'{"mcpServers": {...}}
1'})," and VS Code's ",(0,r.jsx)(n.code,{children:'{"servers": {...}}'})," shape are recognized \u2014 and Voiden fills in the URL and headers automatically. Every HTTP-transport server in the config becomes its own Connection block, not just the first."]}),"\n",(0,r.jsxs)(n.li,{children:["An ",(0,r.jsx)(n.code,{children:"mcp-remote"}),"-wrapped entry (",(0,r.jsx)(n.code,{children:"npx -y mcp-remote <url> [--header ...]"}),") unwraps into the real remote URL and headers directly \u2014 it's a stdio\u2194HTTP bridge, not a local server, so nothing gets spawned."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"reuses-existing-request-machinery",children:(0,r.jsx)(n.strong,{children:"Reuses Existing Request Machinery"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The same ",(0,r.jsx)(n.strong,{children:"Auth"})," block every other protocol uses \u2014 including inherited auth from a ",(0,r.jsx)(n.code,{children:".voiden-inherited.void"})," ancestor file."]}),"\n",(0,r.jsxs)(n.li,{children:["The same ",(0,r.jsx)(n.strong,{children:"Headers"})," table, with cookie merging."]}),"\n",(0,r.jsxs)(n.li,{children:["The same ",(0,r.jsx)(n.strong,{children:"Assertions"})," table, applied to the MCP response."]}),"\n",(0,r.jsx)(n.li,{children:"The same code viewer every other block uses for rendering the response body \u2014 syntax highlighting, search, and selection, with JSON-encoded text content auto-detected and pretty-printed."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"No separate auth system or assertion syntax to learn."}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"block-ownership",children:"Block Ownership"}),"\n",(0,r.jsx)(n.p,{children:"This plugin owns 3 block types for MCP server connection, operation, and response rendering:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/docs/mcp/connection-block",children:(0,r.jsx)(n.code,{children:"mcp-connection \u2197"})})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"mcpoperation"})," \u2014 the Type/Tool/Resource/Prompt picker and arguments editor, part of the MCP Connection block"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"mcp-response"})," \u2014 response rendering"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"request-pipeline",children:"Request Pipeline"}),"\n",(0,r.jsxs)(n.p,{children:["The plugin registers build and response handlers for the MCP protocol, reusing the same shared request-building utilities (",(0,r.jsx)(n.code,{children:"voiden-rest-api"}),"'s ",(0,r.jsx)(n.code,{children:"context.helpers.requestUtils"}),") other protocols use for headers, cookies, query/path params, and auth \u2014 rather than a separate hand-rolled implementation."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"dependencies",children:"Dependencies"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n  "core": ">=2.1.0",\n  "sdk": "1.0.10"\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>l});var o=s(6540);const r={},t=o.createContext(r);function i(e){const n=o.useContext(t);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.