config_get.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package config
  2. import (
  3. "context"
  4. "encoding/json"
  5. "os"
  6. "path/filepath"
  7. "github.com/0xJacky/Nginx-UI/internal/config"
  8. "github.com/0xJacky/Nginx-UI/internal/helper"
  9. "github.com/0xJacky/Nginx-UI/internal/nginx"
  10. "github.com/0xJacky/Nginx-UI/query"
  11. "github.com/mark3labs/mcp-go/mcp"
  12. )
  13. const nginxConfigGetToolName = "nginx_config_get"
  14. var nginxConfigGetTool = mcp.NewTool(
  15. nginxConfigGetToolName,
  16. mcp.WithDescription("Get a specific Nginx configuration file"),
  17. mcp.WithString("relative_path", mcp.Description("The relative path to the configuration file")),
  18. )
  19. func handleNginxConfigGet(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  20. relativePath := request.Params.Arguments["relative_path"].(string)
  21. absPath := nginx.GetConfPath(relativePath)
  22. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  23. return nil, config.ErrPathIsNotUnderTheNginxConfDir
  24. }
  25. stat, err := os.Stat(absPath)
  26. if err != nil {
  27. return nil, err
  28. }
  29. content, err := os.ReadFile(absPath)
  30. if err != nil {
  31. return nil, err
  32. }
  33. q := query.Config
  34. g := query.ChatGPTLog
  35. chatgpt, err := g.Where(g.Name.Eq(absPath)).FirstOrCreate()
  36. if err != nil {
  37. return nil, err
  38. }
  39. cfg, err := q.Where(q.Filepath.Eq(absPath)).FirstOrInit()
  40. if err != nil {
  41. return nil, err
  42. }
  43. result := map[string]interface{}{
  44. "name": stat.Name(),
  45. "content": string(content),
  46. "chat_gpt_messages": chatgpt.Content,
  47. "file_path": absPath,
  48. "modified_at": stat.ModTime(),
  49. "dir": filepath.Dir(relativePath),
  50. "sync_node_ids": cfg.SyncNodeIds,
  51. "sync_overwrite": cfg.SyncOverwrite,
  52. }
  53. jsonResult, _ := json.Marshal(result)
  54. return mcp.NewToolResultText(string(jsonResult)), nil
  55. }