diff --git a/whatsapp-mcp-server/helpers/mcp_tool.go b/whatsapp-mcp-server/helpers/mcp_tool.go index 73660ca..219608a 100644 --- a/whatsapp-mcp-server/helpers/mcp_tool.go +++ b/whatsapp-mcp-server/helpers/mcp_tool.go @@ -62,20 +62,27 @@ func InitMcpTool() { Description: "Get most recent WhatsApp message involving the contact.", }, getLastInteractionHandler) - mcp.AddTool[sendMessageInput, map[string]any](server, &mcp.Tool{ - Name: "send_message", - Description: "Send a text message to a person or group on WhatsApp. For groups use the group JID.", - }, sendMessageHandler) + // Send tools are registered unless the connector runs in read-only mode. + // WHATSAPP_READ_ONLY=true (or 1) hides all outbound tools — defense-in-depth on top of the + // soul's per-send consent gate. Default: send tools available (consent still required upstream). + readOnly := strings.ToLower(ReadEnv("WHATSAPP_READ_ONLY", "false")) == "true" || + ReadEnv("WHATSAPP_READ_ONLY", "0") == "1" + if !readOnly { + mcp.AddTool[sendMessageInput, map[string]any](server, &mcp.Tool{ + Name: "send_message", + Description: "Send a text message to a person or group on WhatsApp. For groups use the group JID.", + }, sendMessageHandler) - mcp.AddTool[sendFileInput, map[string]any](server, &mcp.Tool{ - Name: "send_file", - Description: "Send image, video, document or any file via WhatsApp.", - }, sendFileHandler) + mcp.AddTool[sendFileInput, map[string]any](server, &mcp.Tool{ + Name: "send_file", + Description: "Send image, video, document or any file via WhatsApp.", + }, sendFileHandler) - mcp.AddTool[sendAudioMessageInput, map[string]any](server, &mcp.Tool{ - Name: "send_audio_message", - Description: "Send audio/voice message (converted to Opus .ogg if needed).", - }, sendAudioMessageHandler) + mcp.AddTool[sendAudioMessageInput, map[string]any](server, &mcp.Tool{ + Name: "send_audio_message", + Description: "Send audio/voice message (converted to Opus .ogg if needed).", + }, sendAudioMessageHandler) + } mcp.AddTool[downloadMediaInput, map[string]any](server, &mcp.Tool{ Name: "download_media",