[{"data":1,"prerenderedAt":634},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-connect":25,"-getting-started-connect-surround":631},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Connect your agent","\u002Fgetting-started\u002Fconnect","1.getting-started\u002F1.connect","i-lucide-plug",{"title":16,"path":17,"stem":18,"icon":19},"Your first VM","\u002Fgetting-started\u002Ffirst-vm","1.getting-started\u002F2.first-vm","i-lucide-server",{"title":21,"path":22,"stem":23,"icon":24},"Your own server","\u002Fgetting-started\u002Fyour-own-server","1.getting-started\u002F3.your-own-server","i-lucide-house",{"id":26,"title":11,"body":27,"description":624,"extension":625,"links":626,"meta":627,"navigation":628,"path":12,"seo":629,"stem":13,"__hash__":630},"docs\u002F1.getting-started\u002F1.connect.md",{"type":28,"value":29,"toc":616},"minimark",[30,34,56,61,114,124,127,130,141,144,240,243,251,264,267,270,291,298,360,363,394,397,412,422,436,440,447,553,558,570,573,576,602,606,612],[31,32,33],"p",{},"Connect once, and your agent has machines of its own. It creates a VM when it needs one, builds and\nruns anything in it, puts it on the internet, and lets it vanish when the work is done. You don't\nprovision anything.",[31,35,36,37,41,42,45,46,49,50,55],{},"Ghostdock meets your agent where it already lives: ",[38,39,40],"strong",{},"MCP"," in chat apps, the ",[38,43,44],{},"CLI"," anywhere there\nis a shell, the ",[38,47,48],{},"REST API"," for everything else. Every way in has the same tools and the same\n",[51,52,54],"a",{"href":53},"#skills","skills",", so nothing your agent learns is tied to one of them.",[57,58,60],"h2",{"id":59},"pick-your-way-in","Pick your way in",[62,63,64,77],"table",{},[65,66,67],"thead",{},[68,69,70,74],"tr",{},[71,72,73],"th",{},"You are…",[71,75,76],{},"Use",[78,79,80,91,101],"tbody",{},[68,81,82,86],{},[83,84,85],"td",{},"In Claude, ChatGPT, Cursor or another app that connects to MCP servers, on desktop, web or mobile",[83,87,88],{},[51,89,40],{"href":90},"#mcp",[68,92,93,96],{},[83,94,95],{},"An agent with a shell and internet access (Claude Code, Codex, a script)",[83,97,98],{},[51,99,44],{"href":100},"#cli",[68,102,103,106],{},[83,104,105],{},"CI, or a headless agent that cannot open a browser",[83,107,108,109,113],{},"an ",[51,110,112],{"href":111},"#api-tokens","API token"," with the CLI, MCP or REST",[31,115,116,117,123],{},"All of them need a Ghostdock account: ",[51,118,122],{"href":119,"rel":120},"https:\u002F\u002Fghostdock.ai",[121],"nofollow","sign up at ghostdock.ai",".",[57,125,40],{"id":126},"mcp",[31,128,129],{},"The server URL:",[131,132,138],"pre",{"className":133,"code":135,"language":136,"meta":137},[134],"language-text","https:\u002F\u002Fghostdock.ai\u002Fmcp\n","text","",[139,140,135],"code",{"__ignoreMap":137},[31,142,143],{},"Add it as a remote MCP server in your client. Most clients take an entry like this:",[131,145,150],{"className":146,"code":147,"filename":148,"language":149,"meta":137,"style":137},"language-json shiki shiki-themes material-theme-lighter github-dark-default github-dark-default","{\n  \"mcpServers\": {\n    \"ghostdock\": {\n      \"url\": \"https:\u002F\u002Fghostdock.ai\u002Fmcp\"\n    }\n  }\n}\n","mcp.json","json",[139,151,152,161,181,197,222,228,234],{"__ignoreMap":137},[153,154,157],"span",{"class":155,"line":156},"line",1,[153,158,160],{"class":159},"sZegt","{\n",[153,162,164,168,172,175,178],{"class":155,"line":163},2,[153,165,167],{"class":166},"sq7BE","  \"",[153,169,171],{"class":170},"sz_rW","mcpServers",[153,173,174],{"class":166},"\"",[153,176,177],{"class":159},":",[153,179,180],{"class":159}," {\n",[153,182,184,187,191,193,195],{"class":155,"line":183},3,[153,185,186],{"class":166},"    \"",[153,188,190],{"class":189},"s9ijq","ghostdock",[153,192,174],{"class":166},[153,194,177],{"class":159},[153,196,180],{"class":159},[153,198,200,203,207,209,211,215,219],{"class":155,"line":199},4,[153,201,202],{"class":166},"      \"",[153,204,206],{"class":205},"sj84f","url",[153,208,174],{"class":166},[153,210,177],{"class":159},[153,212,214],{"class":213},"sDFjk"," \"",[153,216,218],{"class":217},"soMwW","https:\u002F\u002Fghostdock.ai\u002Fmcp",[153,220,221],{"class":213},"\"\n",[153,223,225],{"class":155,"line":224},5,[153,226,227],{"class":159},"    }\n",[153,229,231],{"class":155,"line":230},6,[153,232,233],{"class":159},"  }\n",[153,235,237],{"class":155,"line":236},7,[153,238,239],{"class":159},"}\n",[31,241,242],{},"The first connection opens a consent page in your browser. Approve it there: no password or token\never goes into the client. Connect once in a desktop or web app, and the same connection follows\nyou to that app on your phone.",[31,244,245,246,123],{},"To see which clients are connected, or to revoke one, sign in and go to\n",[51,247,250],{"href":248,"rel":249},"https:\u002F\u002Fghostdock.ai\u002Fuser\u002Fsettings\u002Faccount\u002Fmcp",[121],"Account settings → MCP",[252,253,254,255,259,260,263],"tip",{},"Ask your agent: ",[256,257,258],"em",{},"\"Which Ghostdock organizations can you use?\""," It calls ",[139,261,262],{},"organization_list",", and\nthe answer proves the connection works.",[57,265,44],{"id":266},"cli",[31,268,269],{},"Run it without installing:",[131,271,276],{"className":272,"code":273,"filename":274,"language":275,"meta":137,"style":137},"language-bash shiki shiki-themes material-theme-lighter github-dark-default github-dark-default","npx ghostdock --help\n","Terminal","bash",[139,277,278],{"__ignoreMap":137},[153,279,280,284,287],{"class":155,"line":156},[153,281,283],{"class":282},"se-ri","npx",[153,285,286],{"class":217}," ghostdock",[153,288,290],{"class":289},"sx258"," --help\n",[31,292,293,294,297],{},"If you will use it more than once, install it. You get the short name ",[139,295,296],{},"gdock",", tab completion and\nfaster runs:",[299,300,301,318,342],"code-group",{},[131,302,305],{"className":272,"code":303,"filename":304,"language":275,"meta":137,"style":137},"brew install brainchimps\u002Ftap\u002Fghostdock\n","Homebrew",[139,306,307],{"__ignoreMap":137},[153,308,309,312,315],{"class":155,"line":156},[153,310,311],{"class":282},"brew",[153,313,314],{"class":217}," install",[153,316,317],{"class":217}," brainchimps\u002Ftap\u002Fghostdock\n",[131,319,322],{"className":272,"code":320,"filename":321,"language":275,"meta":137,"style":137},"curl -fsSL https:\u002F\u002Fghostdock.ai\u002Finstall.sh | sh\n","Script",[139,323,324],{"__ignoreMap":137},[153,325,326,329,332,335,339],{"class":155,"line":156},[153,327,328],{"class":282},"curl",[153,330,331],{"class":289}," -fsSL",[153,333,334],{"class":217}," https:\u002F\u002Fghostdock.ai\u002Finstall.sh",[153,336,338],{"class":337},"sebAQ"," |",[153,340,341],{"class":282}," sh\n",[131,343,346],{"className":272,"code":344,"filename":345,"language":275,"meta":137,"style":137},"npm install -g ghostdock\n","npm",[139,347,348],{"__ignoreMap":137},[153,349,350,352,354,357],{"class":155,"line":156},[153,351,345],{"class":282},[153,353,314],{"class":217},[153,355,356],{"class":289}," -g",[153,358,359],{"class":217}," ghostdock\n",[31,361,362],{},"Log in. The CLI prints a link to open in your browser; approve it there:",[131,364,366],{"className":272,"code":365,"filename":274,"language":275,"meta":137,"style":137},"ghostdock login start    # prints the browser link at once\nghostdock login finish   # after you approve it\n",[139,367,368,382],{"__ignoreMap":137},[153,369,370,372,375,378],{"class":155,"line":156},[153,371,190],{"class":282},[153,373,374],{"class":217}," login",[153,376,377],{"class":217}," start",[153,379,381],{"class":380},"sTKkQ","    # prints the browser link at once\n",[153,383,384,386,388,391],{"class":155,"line":163},[153,385,190],{"class":282},[153,387,374],{"class":217},[153,389,390],{"class":217}," finish",[153,392,393],{"class":380},"   # after you approve it\n",[31,395,396],{},"Check that it works:",[131,398,400],{"className":272,"code":399,"filename":274,"language":275,"meta":137,"style":137},"ghostdock organization list\n",[139,401,402],{"__ignoreMap":137},[153,403,404,406,409],{"class":155,"line":156},[153,405,190],{"class":282},[153,407,408],{"class":217}," organization",[153,410,411],{"class":217}," list\n",[31,413,414,415,421],{},"Output is for people by default. ",[38,416,417,418],{},"Agents and scripts pass ",[139,419,420],{},"--json",": stdout then holds exactly one\nJSON document, and notices and errors go to stderr.",[31,423,424,425,430,431,123],{},"The full CLI guide, for people and agents: ",[51,426,429],{"href":427,"rel":428},"https:\u002F\u002Fghostdock.ai\u002Fcli.md",[121],"ghostdock.ai\u002Fcli.md",".\nEvery command with its flags: ",[51,432,435],{"href":433,"rel":434},"https:\u002F\u002Fghostdock.ai\u002Fcli-reference.md",[121],"ghostdock.ai\u002Fcli-reference.md",[57,437,439],{"id":438},"api-tokens","API tokens",[31,441,442,443,446],{},"For CI and agents that cannot open a browser. An organization owner or admin creates a token under\n",[38,444,445],{},"Organization settings → API tokens",". A token acts only in its organization, and only within the\nscopes it was given.",[299,448,449,489],{},[131,450,452],{"className":272,"code":451,"filename":44,"language":275,"meta":137,"style":137},"GHOSTDOCK_TOKEN=\u003Ctoken> GHOSTDOCK_ORG=\u003Corg> npx ghostdock vm list\n",[139,453,454],{"__ignoreMap":137},[153,455,456,460,463,466,469,472,474,477,479,482,484,487],{"class":155,"line":156},[153,457,459],{"class":458},"sINcL","GHOSTDOCK_TOKEN",[153,461,462],{"class":337},"=\u003C",[153,464,465],{"class":217},"token",[153,467,468],{"class":337},">",[153,470,471],{"class":458}," GHOSTDOCK_ORG",[153,473,462],{"class":337},[153,475,476],{"class":217},"org",[153,478,468],{"class":337},[153,480,481],{"class":282}," npx",[153,483,286],{"class":217},[153,485,486],{"class":217}," vm",[153,488,411],{"class":217},[131,490,493],{"className":272,"code":491,"filename":492,"language":275,"meta":137,"style":137},"curl -X POST https:\u002F\u002Fghostdock.ai\u002Fapi\u002Fv1\u002Ftools\u002Fvm_list \\\n  -H \"Authorization: Bearer \u003Ctoken>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"organization\": \"\u003Corg>\"}'\n","REST",[139,494,495,512,526,539],{"__ignoreMap":137},[153,496,497,499,502,505,508],{"class":155,"line":156},[153,498,328],{"class":282},[153,500,501],{"class":289}," -X",[153,503,504],{"class":217}," POST",[153,506,507],{"class":217}," https:\u002F\u002Fghostdock.ai\u002Fapi\u002Fv1\u002Ftools\u002Fvm_list",[153,509,511],{"class":510},"sOWcn"," \\\n",[153,513,514,517,519,522,524],{"class":155,"line":163},[153,515,516],{"class":289},"  -H",[153,518,214],{"class":213},[153,520,521],{"class":217},"Authorization: Bearer \u003Ctoken>",[153,523,174],{"class":213},[153,525,511],{"class":510},[153,527,528,530,532,535,537],{"class":155,"line":183},[153,529,516],{"class":289},[153,531,214],{"class":213},[153,533,534],{"class":217},"Content-Type: application\u002Fjson",[153,536,174],{"class":213},[153,538,511],{"class":510},[153,540,541,544,547,550],{"class":155,"line":199},[153,542,543],{"class":289},"  -d",[153,545,546],{"class":213}," '",[153,548,549],{"class":217},"{\"organization\": \"\u003Corg>\"}",[153,551,552],{"class":213},"'\n",[31,554,555,556,123],{},"Over MCP, send the same token as the header ",[139,557,521],{},[31,559,560,561,564,565,123],{},"The REST API is every tool as ",[139,562,563],{},"POST \u002Fapi\u002Fv1\u002Ftools\u002F\u003Ctool>",". Its OpenAPI 3.1 description:\n",[51,566,569],{"href":567,"rel":568},"https:\u002F\u002Fghostdock.ai\u002Fopenapi.json",[121],"ghostdock.ai\u002Fopenapi.json",[57,571,572],{"id":54},"Skills",[31,574,575],{},"Your agent doesn't start from zero. Ghostdock ships skills: short guides that teach an agent how to\ndo a job well, such as creating a VM or publishing a site. Agents find and read them on their own.",[577,578,579,589],"ul",{},[580,581,582,585,586,123],"li",{},[38,583,584],{},"MCP:"," as resources. The index is ",[139,587,588],{},"skill:\u002F\u002Findex.json",[580,590,591,594,595,598,599,123],{},[38,592,593],{},"CLI:"," ",[139,596,597],{},"ghostdock skill list",", then for example ",[139,600,601],{},"ghostdock skill get vm",[57,603,605],{"id":604},"next","Next",[31,607,608,609,123],{},"You're docked. ",[51,610,611],{"href":17},"Create your first VM",[613,614,615],"style",{},"html pre.shiki code .sZegt, html code.shiki .sZegt{--shiki-light:#39ADB5;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .sq7BE, html code.shiki .sq7BE{--shiki-light:#39ADB5;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .sz_rW, html code.shiki .sz_rW{--shiki-light:#9C3EDA;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .s9ijq, html code.shiki .s9ijq{--shiki-light:#E2931D;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .sj84f, html code.shiki .sj84f{--shiki-light:#F76D47;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .sDFjk, html code.shiki .sDFjk{--shiki-light:#39ADB5;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .soMwW, html code.shiki .soMwW{--shiki-light:#91B859;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}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 .se-ri, html code.shiki .se-ri{--shiki-light:#E2931D;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .sx258, html code.shiki .sx258{--shiki-light:#91B859;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .sebAQ, html code.shiki .sebAQ{--shiki-light:#39ADB5;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .sTKkQ, html code.shiki .sTKkQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#8B949E;--shiki-default-font-style:inherit;--shiki-dark:#8B949E;--shiki-dark-font-style:inherit}html pre.shiki code .sINcL, html code.shiki .sINcL{--shiki-light:#90A4AE;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .sOWcn, html code.shiki .sOWcn{--shiki-light:#90A4AE;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}",{"title":137,"searchDepth":163,"depth":163,"links":617},[618,619,620,621,622,623],{"id":59,"depth":163,"text":60},{"id":126,"depth":163,"text":40},{"id":266,"depth":163,"text":44},{"id":438,"depth":163,"text":439},{"id":54,"depth":163,"text":572},{"id":604,"depth":163,"text":605},"Give your agent VMs of its own, from any MCP client, the CLI or the REST API. One connection, then it builds and ships on its own.","md",null,{},{"icon":14},{"title":11,"description":624},"CWNWq-CzHhSNOSI_TF34eKz9sHPLW5qm9L6O-XtEobM",[626,632],{"title":16,"path":17,"stem":18,"description":633,"icon":19,"children":-1},"A whole Linux machine, a web server and a public URL in about a minute. Then make it vanish.",1794018912713]