emspara.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package data
  2. import (
  3. "context"
  4. "fmt"
  5. "strconv"
  6. "github.com/mark3labs/mcp-go/mcp"
  7. "github.com/mark3labs/mcp-go/server"
  8. "fwh-toolbox-server/cmd/mcp/tools/helper"
  9. "fwh-toolbox-server/repositories"
  10. )
  11. func registerEmsparaTools(s *server.MCPServer) {
  12. s.AddTool(
  13. mcp.NewTool("data_emspara_vid_info",
  14. mcp.WithDescription("查询 EMS 参数 VID 信息(通过 VID ID 获取宏名和描述)"),
  15. mcp.WithString("id", mcp.Required(), mcp.Description("VID ID(数字)")),
  16. ),
  17. handleEmsparaVidInfo,
  18. )
  19. s.AddTool(
  20. mcp.NewTool("data_emspara_pid_info",
  21. mcp.WithDescription("查询 EMS 参数 PID 信息(通过 PID ID 获取宏名和描述)"),
  22. mcp.WithString("id", mcp.Required(), mcp.Description("PID ID(数字)")),
  23. ),
  24. handleEmsparaPidInfo,
  25. )
  26. }
  27. func handleEmsparaVidInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  28. idStr, err := req.RequireString("id")
  29. if err != nil {
  30. return helper.ParamError("id"), nil
  31. }
  32. id, err := strconv.ParseUint(idStr, 10, 64)
  33. if err != nil {
  34. return helper.ParamInvalidError("id", "必须是数字"), nil
  35. }
  36. name, desc, err := repositories.GetEmsparaVidInfo(uint(id))
  37. if err != nil {
  38. return helper.EmptyResult(fmt.Sprintf("未找到 VID %d 的信息: %v", id, err)), nil
  39. }
  40. return helper.JSONResult(map[string]any{
  41. "id": id,
  42. "type": "VID",
  43. "macro_name": name,
  44. "description": desc,
  45. }), nil
  46. }
  47. func handleEmsparaPidInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  48. idStr, err := req.RequireString("id")
  49. if err != nil {
  50. return helper.ParamError("id"), nil
  51. }
  52. id, err := strconv.ParseUint(idStr, 10, 64)
  53. if err != nil {
  54. return helper.ParamInvalidError("id", "必须是数字"), nil
  55. }
  56. name, desc, err := repositories.GetEmsparaPidInfo(uint(id))
  57. if err != nil {
  58. return helper.EmptyResult(fmt.Sprintf("未找到 PID %d 的信息: %v", id, err)), nil
  59. }
  60. return helper.JSONResult(map[string]any{
  61. "id": id,
  62. "type": "PID",
  63. "macro_name": name,
  64. "description": desc,
  65. }), nil
  66. }