Textwell MCP Server

  • tools
package tools import ( "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "github.com/nguyenvanduocit/all-in-one-model-context-protocol/services" "github.com/nguyenvanduocit/all-in-one-model-context-protocol/util" "google.golang.org/api/chat/v1" ) func RegisterGChatTool(s *server.MCPServer) { // List spaces tool listSpacesTool := mcp.NewTool("gchat_list_spaces", mcp.WithDescription("List all available Google Chat spaces/rooms"), ) // Send message tool sendMessageTool := mcp.NewTool("gchat_send_message", mcp.WithDescription("Send a message to a Google Chat space or direct message"), mcp.WithString("space_name", mcp.Required(), mcp.Description("Name of the space to send the message to")), mcp.WithString("message", mcp.Required(), mcp.Description("Text message to send")), ) s.AddTool(listSpacesTool, util.ErrorGuard(gChatListSpacesHandler)) s.AddTool(sendMessageTool, util.ErrorGuard(gChatSendMessageHandler)) } func gChatListSpacesHandler(arguments map[string]interface{}) (*mcp.CallToolResult, error) { spaces, err := services.DefaultGChatService().Spaces.List().Do() if err != nil { return mcp.NewToolResultError(fmt.Sprintf("failed to list spaces: %v", err)), nil } result := make([]map[string]interface{}, 0) for _, space := range spaces.Spaces { spaceInfo := map[string]interface{}{ "name": space.Name, "displayName": space.DisplayName, "type": space.Type, } result = append(result, spaceInfo) } jsonResult, err := json.MarshalIndent(result, "", " ") if err != nil { return mcp.NewToolResultError(fmt.Sprintf("failed to marshal spaces: %v", err)), nil } return mcp.NewToolResultText(string(jsonResult)), nil } func gChatSendMessageHandler(arguments map[string]interface{}) (*mcp.CallToolResult, error) { spaceName := arguments["space_name"].(string) message := arguments["message"].(string) msg := &chat.Message{ Text: message, } resp, err := services.DefaultGChatService().Spaces.Messages.Create(spaceName, msg).Do() if err != nil { return mcp.NewToolResultError(fmt.Sprintf("failed to send message: %v", err)), nil } return mcp.NewToolResultText(fmt.Sprintf("Message sent successfully. Message ID: %s", resp.Name)), nil }