[{"data":1,"prerenderedAt":555},["ShallowReactive",2],{"copilot-navigation":3,"mdc-o8y00b-key":152,"copilot-version":194,"\u002Fdocs\u002Fcopilot\u002Fagents\u002Fhosting":197,"\u002Fdocs\u002Fcopilot\u002Fagents\u002Fhosting-surround":551},[4,15,33,54,79,116,133],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fdocs\u002Fcopilot\u002Fgetting-started","1.docs\u002F1.copilot\u002F1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Installation","\u002Fdocs\u002Fcopilot\u002Fgetting-started\u002Finstallation","1.docs\u002F1.copilot\u002F1.getting-started\u002F2.installation",{"title":16,"path":17,"stem":18,"children":19,"page":32},"Configuration","\u002Fdocs\u002Fcopilot\u002Fconfiguration","1.docs\u002F1.copilot\u002F2.configuration",[20,24,28],{"title":21,"path":22,"stem":23},"Global Configuration","\u002Fdocs\u002Fcopilot\u002Fconfiguration\u002Fglobal","1.docs\u002F1.copilot\u002F2.configuration\u002F1.global",{"title":25,"path":26,"stem":27},"View Button & Field Configuration","\u002Fdocs\u002Fcopilot\u002Fconfiguration\u002Flocal","1.docs\u002F1.copilot\u002F2.configuration\u002F2.local",{"title":29,"path":30,"stem":31},"System Prompt","\u002Fdocs\u002Fcopilot\u002Fconfiguration\u002Fsystem-prompt","1.docs\u002F1.copilot\u002F2.configuration\u002F3.system-prompt",false,{"title":34,"path":35,"stem":36,"children":37,"page":32},"Usage","\u002Fdocs\u002Fcopilot\u002Fusage","1.docs\u002F1.copilot\u002F3.usage",[38,42,46,50],{"title":39,"path":40,"stem":41},"View Button","\u002Fdocs\u002Fcopilot\u002Fusage\u002Fview-button","1.docs\u002F1.copilot\u002F3.usage\u002F1.view-button",{"title":43,"path":44,"stem":45},"Toolbar Buttons","\u002Fdocs\u002Fcopilot\u002Fusage\u002Ftoolbar-buttons","1.docs\u002F1.copilot\u002F3.usage\u002F2.toolbar-buttons",{"title":47,"path":48,"stem":49},"Inline Suggestions","\u002Fdocs\u002Fcopilot\u002Fusage\u002Finline-suggestions","1.docs\u002F1.copilot\u002F3.usage\u002F3.inline-suggestions",{"title":51,"path":52,"stem":53},"Copilot Section","\u002Fdocs\u002Fcopilot\u002Fusage\u002Fsection","1.docs\u002F1.copilot\u002F3.usage\u002F4.section",{"title":55,"path":56,"stem":57,"children":58,"page":32},"Prompt Dialog","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog","1.docs\u002F1.copilot\u002F4.prompt-dialog",[59,63,67,71,75],{"title":60,"path":61,"stem":62},"Field Placeholders","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog\u002Fplaceholders","1.docs\u002F1.copilot\u002F4.prompt-dialog\u002F1.placeholders",{"title":64,"path":65,"stem":66},"Prompt Templates","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog\u002Ftemplates","1.docs\u002F1.copilot\u002F4.prompt-dialog\u002F2.templates",{"title":68,"path":69,"stem":70},"File Attachments","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog\u002Ffiles","1.docs\u002F1.copilot\u002F4.prompt-dialog\u002F3.files",{"title":72,"path":73,"stem":74},"Page References","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog\u002Fpage-references","1.docs\u002F1.copilot\u002F4.prompt-dialog\u002F4.page-references",{"title":76,"path":77,"stem":78},"Skills","\u002Fdocs\u002Fcopilot\u002Fprompt-dialog\u002Fskills","1.docs\u002F1.copilot\u002F4.prompt-dialog\u002F5.skills",{"title":80,"path":81,"stem":82,"children":83},"PHP Classes","\u002Fdocs\u002Fcopilot\u002Fphp-classes","1.docs\u002F1.copilot\u002F5.php-classes\u002F1.index",[84,86,90,112],{"title":85,"path":81,"stem":82},"Overview",{"title":87,"path":88,"stem":89},"Client","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fclient","1.docs\u002F1.copilot\u002F5.php-classes\u002F2.client",{"title":91,"path":92,"stem":93,"children":94,"defaultOpen":32},"Providers","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fproviders","1.docs\u002F1.copilot\u002F5.php-classes\u002F3.providers\u002F1.index",[95,96,100,104,108],{"title":85,"path":92,"stem":93},{"title":97,"path":98,"stem":99},"OpenAIProvider","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fproviders\u002Fopenai","1.docs\u002F1.copilot\u002F5.php-classes\u002F3.providers\u002F2.openai",{"title":101,"path":102,"stem":103},"AnthropicProvider","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fproviders\u002Fanthropic","1.docs\u002F1.copilot\u002F5.php-classes\u002F3.providers\u002F3.anthropic",{"title":105,"path":106,"stem":107},"GeminiProvider","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fproviders\u002Fgemini","1.docs\u002F1.copilot\u002F5.php-classes\u002F3.providers\u002F4.gemini",{"title":109,"path":110,"stem":111},"MistralProvider","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fproviders\u002Fmistral","1.docs\u002F1.copilot\u002F5.php-classes\u002F3.providers\u002F5.mistral",{"title":113,"path":114,"stem":115},"Exceptions","\u002Fdocs\u002Fcopilot\u002Fphp-classes\u002Fexceptions","1.docs\u002F1.copilot\u002F5.php-classes\u002F4.exceptions",{"title":117,"path":118,"stem":119,"children":120,"page":32},"Advanced","\u002Fdocs\u002Fcopilot\u002Fadvanced","1.docs\u002F1.copilot\u002F6.advanced",[121,125,129],{"title":122,"path":123,"stem":124},"Blocks & Layouts","\u002Fdocs\u002Fcopilot\u002Fadvanced\u002Fblocks-and-layouts","1.docs\u002F1.copilot\u002F6.advanced\u002F1.blocks-and-layouts",{"title":126,"path":127,"stem":128},"Quick Reference","\u002Fdocs\u002Fcopilot\u002Fadvanced\u002Freference","1.docs\u002F1.copilot\u002F6.advanced\u002F2.reference",{"title":130,"path":131,"stem":132},"Troubleshooting","\u002Fdocs\u002Fcopilot\u002Fadvanced\u002Ftroubleshooting","1.docs\u002F1.copilot\u002F6.advanced\u002F3.troubleshooting",{"title":134,"path":135,"stem":136,"children":137},"Agents","\u002Fdocs\u002Fcopilot\u002Fagents","1.docs\u002F1.copilot\u002F7.agents\u002F1.index",[138,140,144,148],{"title":139,"path":135,"stem":136},"Connect an Agent",{"title":141,"path":142,"stem":143},"Permissions & Review","\u002Fdocs\u002Fcopilot\u002Fagents\u002Fpermissions-and-review","1.docs\u002F1.copilot\u002F7.agents\u002F2.permissions-and-review",{"title":145,"path":146,"stem":147},"Tools","\u002Fdocs\u002Fcopilot\u002Fagents\u002Ftools","1.docs\u002F1.copilot\u002F7.agents\u002F3.tools",{"title":149,"path":150,"stem":151},"Hosting & Troubleshooting","\u002Fdocs\u002Fcopilot\u002Fagents\u002Fhosting","1.docs\u002F1.copilot\u002F7.agents\u002F4.hosting",{"data":153,"body":154},{},{"type":155,"children":156},"root",[157],{"type":158,"tag":159,"props":160,"children":161},"element","p",{},[162,165,174,176,183,185,192],{"type":163,"value":164},"text","Kirby Tools is built on ",{"type":158,"tag":166,"props":167,"children":171},"a",{"href":168,"rel":169},"https:\u002F\u002Fgetkirby.com",[170],"nofollow",[172],{"type":163,"value":173},"Kirby",{"type":163,"value":175}," – with gratitude to the team and community who make it. Help me improve the plugins: share feedback in ",{"type":158,"tag":166,"props":177,"children":180},{"href":178,"rel":179},"https:\u002F\u002Fgithub.com\u002Fkirby-tools\u002Fcommunity\u002Fdiscussions",[170],[181],{"type":163,"value":182},"Discussions",{"type":163,"value":184}," or report bugs via ",{"type":158,"tag":166,"props":186,"children":189},{"href":187,"rel":188},"https:\u002F\u002Fgithub.com\u002Fkirby-tools\u002Fcommunity\u002Fissues",[170],[190],{"type":163,"value":191},"Issues",{"type":163,"value":193},".",{"title":195,"date":196},"v3.14.0","2026-10-10",{"id":198,"title":149,"body":199,"description":545,"extension":546,"meta":547,"navigation":548,"path":150,"seo":549,"stem":151,"__hash__":550},"docs\u002F1.docs\u002F1.copilot\u002F7.agents\u002F4.hosting.md",{"type":200,"value":201,"toc":533},"minimark",[202,207,210,221,226,229,243,253,257,264,336,347,351,360,369,372,381,388,405,440,444,447,451,454,522,526,529],[203,204,206],"h2",{"id":205},"the-agents-view-checks-your-server","The Agents View Checks Your Server",[159,208,209],{},"Each time you open the Agents view, it checks the URLs an agent loads before it connects, and names the problems it finds, with the fix.",[211,212,213],"note",{},[159,214,215,216,220],{},"Claude Code remembers the login server of an earlier connection. After you change a server rule, run ",[217,218,219],"code",{},"claude mcp remove kirby",", then add the MCP URL again.",[222,223,225],"h3",{"id":224},"agents-cant-load-the-discovery-documents","Agents Can't Load the Discovery Documents",[159,227,228],{},"Agents find the Panel's login through two documents at the root of your domain:",[230,231,232,238],"ul",{},[233,234,235],"li",{},[217,236,237],{},"\u002F.well-known\u002Foauth-protected-resource",[233,239,240],{},[217,241,242],{},"\u002F.well-known\u002Foauth-authorization-server",[159,244,245,246,249,250,193],{},"Many hosts answer requests to ",[217,247,248],{},"\u002F.well-known\u002F"," themselves, so they never reach Kirby. Pass both paths, and the paths below them, to Kirby's ",[217,251,252],{},"index.php",[222,254,256],{"id":255},"kirby-runs-in-a-subfolder","Kirby Runs in a Subfolder",[159,258,259,260,263],{},"With Kirby in a subfolder, requests to the domain root never reach it. Add two rules at the domain root that pass the discovery documents to Kirby. For a Kirby in ",[217,261,262],{},"\u002Fcms",":",[265,266,267,297],"code-group",{},[268,269,275],"pre",{"className":270,"code":271,"filename":272,"language":273,"meta":274,"style":274},"language-apache shiki shiki-themes github-light github-light github-dark","RewriteEngine on\nRewriteRule ^\\.well-known\u002Foauth-protected-resource$ \u002Fcms\u002F.well-known\u002Foauth-protected-resource [L]\nRewriteRule ^\\.well-known\u002Foauth-authorization-server\u002Fcms$ \u002Fcms\u002F.well-known\u002Foauth-authorization-server [L]\n",".htaccess","apache","",[217,276,277,285,291],{"__ignoreMap":274},[278,279,282],"span",{"class":280,"line":281},"line",1,[278,283,284],{},"RewriteEngine on\n",[278,286,288],{"class":280,"line":287},2,[278,289,290],{},"RewriteRule ^\\.well-known\u002Foauth-protected-resource$ \u002Fcms\u002F.well-known\u002Foauth-protected-resource [L]\n",[278,292,294],{"class":280,"line":293},3,[278,295,296],{},"RewriteRule ^\\.well-known\u002Foauth-authorization-server\u002Fcms$ \u002Fcms\u002F.well-known\u002Foauth-authorization-server [L]\n",[268,298,302],{"className":299,"code":300,"filename":301,"language":301,"meta":274,"style":274},"language-nginx shiki shiki-themes github-light github-light github-dark","location = \u002F.well-known\u002Foauth-protected-resource {\n    rewrite ^ \u002Fcms\u002F.well-known\u002Foauth-protected-resource last;\n}\nlocation = \u002F.well-known\u002Foauth-authorization-server\u002Fcms {\n    rewrite ^ \u002Fcms\u002F.well-known\u002Foauth-authorization-server last;\n}\n","nginx",[217,303,304,309,314,319,325,331],{"__ignoreMap":274},[278,305,306],{"class":280,"line":281},[278,307,308],{},"location = \u002F.well-known\u002Foauth-protected-resource {\n",[278,310,311],{"class":280,"line":287},[278,312,313],{},"    rewrite ^ \u002Fcms\u002F.well-known\u002Foauth-protected-resource last;\n",[278,315,316],{"class":280,"line":293},[278,317,318],{},"}\n",[278,320,322],{"class":280,"line":321},4,[278,323,324],{},"location = \u002F.well-known\u002Foauth-authorization-server\u002Fcms {\n",[278,326,328],{"class":280,"line":327},5,[278,329,330],{},"    rewrite ^ \u002Fcms\u002F.well-known\u002Foauth-authorization-server last;\n",[278,332,334],{"class":280,"line":333},6,[278,335,318],{},[159,337,338,339,342,343,346],{},"Replace every ",[217,340,341],{},"cms"," with your subfolder, including the end of the second rule's source path. On nginx, the rules sit next to Kirby's usual ",[217,344,345],{},"location \u002Fcms\u002F"," block.",[222,348,350],{"id":349},"agents-cant-log-in","Agents Can't Log In",[159,352,353,354,357,358,263],{},"Your server drops the ",[217,355,356],{},"Authorization"," header before the request reaches Kirby. On Apache, add the line from Kirby's own ",[217,359,272],{},[268,361,363],{"className":270,"code":362,"filename":272,"language":273,"meta":274,"style":274},"SetEnvIf Authorization \"(.+)\" HTTP_AUTHORIZATION=$1\n",[217,364,365],{"__ignoreMap":274},[278,366,367],{"class":280,"line":281},[278,368,362],{},[159,370,371],{},"On nginx with PHP-FPM, pass the header in the block that hands requests to PHP:",[268,373,375],{"className":299,"code":374,"language":301,"meta":274,"style":274},"fastcgi_param HTTP_AUTHORIZATION $http_authorization;\n",[217,376,377],{"__ignoreMap":274},[278,378,379],{"class":280,"line":281},[278,380,374],{},[222,382,384,385],{"id":383},"the-mcp-url-starts-with-http","The MCP URL Starts With ",[217,386,387],{},"http:\u002F\u002F",[159,389,390,391,393,394,397,398,401,402,404],{},"Agents connect only over HTTPS. Behind a proxy that doesn't forward the scheme, Kirby builds its URLs with ",[217,392,387],{}," while the Panel runs on ",[217,395,396],{},"https:\u002F\u002F",". Set Kirby's ",[217,399,400],{},"url"," option to your ",[217,403,396],{}," address:",[268,406,411],{"className":407,"code":408,"filename":409,"language":410,"meta":274,"style":274},"language-php shiki shiki-themes github-light github-light github-dark","return [\n    'url' => 'https:\u002F\u002Fexample.com'\n];\n","site\u002Fconfig\u002Fconfig.php","php",[217,412,413,423,435],{"__ignoreMap":274},[278,414,415,419],{"class":280,"line":281},[278,416,418],{"class":417},"s8jYJ","return",[278,420,422],{"class":421},"sxrX7"," [\n",[278,424,425,429,432],{"class":280,"line":287},[278,426,428],{"class":427},"sIIMD","    'url'",[278,430,431],{"class":417}," =>",[278,433,434],{"class":427}," 'https:\u002F\u002Fexample.com'\n",[278,436,437],{"class":280,"line":293},[278,438,439],{"class":421},"];\n",[222,441,443],{"id":442},"agents-cant-reach-the-mcp-url","Agents Can't Reach the MCP URL",[159,445,446],{},"A firewall, a security plugin, or a server rule may block POST requests to the MCP URL. Allow them for that URL.",[203,448,450],{"id":449},"why-an-agents-write-is-refused","Why an Agent's Write Is Refused",[159,452,453],{},"A refused write tells the agent why:",[455,456,457,470],"table",{},[458,459,460],"thead",{},[461,462,463,467],"tr",{},[464,465,466],"th",{},"The agent says",[464,468,469],{},"What to do",[471,472,473,482,490,498,506,514],"tbody",{},[461,474,475,479],{},[476,477,478],"td",{},"… contains …, which the site doesn't accept from agents",[476,480,481],{},"Ask for the value without it, or add that markup in the Panel",[461,483,484,487],{},[476,485,486],{},"… unsaved changes, which someone may still be working on",[476,488,489],{},"Publish or discard the changes before the agent deletes the page or file",[461,491,492,495],{},[476,493,494],{},"… is editing this content in the Panel",[476,496,497],{},"Wait until your colleague leaves the page's view, or ask them to publish or discard their changes",[461,499,500,503],{},[476,501,502],{},"The draft has unsaved changes …, so it stays a draft",[476,504,505],{},"Let the agent publish the changes first, or publish them in the Panel",[461,507,508,511],{},[476,509,510],{},"The changes have validation errors",[476,512,513],{},"Let the agent fix the named fields, or fix them in the Panel, before publishing",[461,515,516,519],{},[476,517,518],{},"The page has validation errors, so it stays a draft",[476,520,521],{},"Let the agent fix the named fields and publish the fix, or fix them in the Panel, before it changes the status",[203,523,525],{"id":524},"requests-fail-with-429","Requests Fail With 429",[159,527,528],{},"A connection may send 120 requests a minute to the MCP URL, and an IP address 30 requests a minute to each step of the login. Beyond that, the site answers with 429 Too Many Requests until the minute is over.",[530,531,532],"style",{},"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 .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":274,"searchDepth":287,"depth":287,"links":534},[535,543,544],{"id":205,"depth":287,"text":206,"children":536},[537,538,539,540,542],{"id":224,"depth":293,"text":225},{"id":255,"depth":293,"text":256},{"id":349,"depth":293,"text":350},{"id":383,"depth":293,"text":541},"The MCP URL Starts With http:\u002F\u002F",{"id":442,"depth":293,"text":443},{"id":449,"depth":287,"text":450},{"id":524,"depth":287,"text":525},"Fix the server problems the Agents view reports, from a subfolder install to a missing Authorization header, and read why an agent's write is refused or rate-limited.","md",{},true,{"title":149,"description":545},"TYnFIaf6r23-L2kvfhNxcbkJHZfvmWX0TppvoQ-yLOg",[552,554],{"title":145,"path":146,"stem":147,"description":553,"children":-1},"The tools an agent calls on the site, the permission each one needs, and what the site tells an agent when it connects.",null,1791648014043]