config_get.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. args := request.GetArguments()
  21. relativePath := args["relative_path"].(string)
  22. absPath := nginx.GetConfPath(relativePath)
  23. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  24. return nil, config.ErrPathIsNotUnderTheNginxConfDir
  25. }
  26. stat, err := os.Stat(absPath)
  27. if err != nil {
  28. return nil, err
  29. }
  30. content, err := os.ReadFile(absPath)
  31. if err != nil {
  32. return nil, err
  33. }
  34. q := query.Config
  35. g := query.ChatGPTLog
  36. chatgpt, err := g.Where(g.Name.Eq(absPath)).FirstOrCreate()
  37. if err != nil {
  38. return nil, err
  39. }
  40. cfg, err := q.Where(q.Filepath.Eq(absPath)).FirstOrInit()
  41. if err != nil {
  42. return nil, err
  43. }
  44. result := map[string]interface{}{
  45. "name": stat.Name(),
  46. "content": string(content),
  47. "chat_gpt_messages": chatgpt.Content,
  48. "file_path": absPath,
  49. "modified_at": stat.ModTime(),
  50. "dir": filepath.Dir(relativePath),
  51. "sync_node_ids": cfg.SyncNodeIds,
  52. "sync_overwrite": cfg.SyncOverwrite,
  53. }
  54. jsonResult, _ := json.Marshal(result)
  55. return mcp.NewToolResultText(string(jsonResult)), nil
  56. }