Initial commit: Caddy MCP Server

This commit is contained in:
2026-04-10 21:57:20 -07:00
commit 2a3107f9e2
21 changed files with 2194 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
package main
import "fmt"
func (c *CaddyClient) AddFileServer(domain, root string, browse bool) error {
route := map[string]interface{}{
"handle": []interface{}{
map[string]interface{}{
"handler": "vars",
"root": root,
},
map[string]interface{}{
"handler": "file_server",
"browse": browse,
"hide": []string{".git", ".env"},
},
},
"match": []interface{}{map[string]interface{}{"host": []string{domain}}},
"terminal": true,
}
config, _ := c.GetConfig()
apps, _ := config["apps"].(map[string]interface{})
httpApps, _ := apps["http"].(map[string]interface{})
servers, _ := httpApps["servers"].(map[string]interface{})
for srvName := range servers {
routesPath := fmt.Sprintf("apps/http/servers/%s/routes", srvName)
routes, _ := c.GetConfigAtPath(routesPath)
if routes != nil {
routesList, _ := routes.([]interface{})
routesList = append(routesList, route)
return c.SetConfig(routesPath, routesList)
}
}
return c.SetConfig("apps/http/servers/srv0/routes", []interface{}{route})
}
func (c *CaddyClient) UpdateFileServerRoot(domain, root string) error {
config, err := c.GetConfig()
if err != nil {
return err
}
apps, _ := config["apps"].(map[string]interface{})
httpApps, _ := apps["http"].(map[string]interface{})
servers, _ := httpApps["servers"].(map[string]interface{})
for srvName, server := range servers {
srv, _ := server.(map[string]interface{})
routes, _ := srv["routes"].([]interface{})
for routeIdx, route := range routes {
routeMap, _ := route.(map[string]interface{})
matches, _ := routeMap["match"].([]interface{})
for _, match := range matches {
matchMap, _ := match.(map[string]interface{})
hosts, _ := matchMap["host"].([]interface{})
if len(hosts) > 0 {
d, _ := hosts[0].(string)
if d == domain {
handle, _ := routeMap["handle"].([]interface{})
for i, h := range handle {
handlerMap, ok := h.(map[string]interface{})
if !ok {
continue
}
if handlerMap["handler"] == "vars" {
handlerMap["root"] = root
handle[i] = handlerMap
routeMap["handle"] = handle
routes[routeIdx] = routeMap
configPath := fmt.Sprintf("apps/http/servers/%s/routes", srvName)
return c.SetConfig(configPath, routes)
}
}
}
}
}
}
}
return fmt.Errorf("file server not found for: %s", domain)
}