VirWave Breathe
Calm, animated breathing sessions paced to your breath. Runs locally and collects nothing.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"virwave-breathe": {
"command": "npx",
"args": [
"virwave-breathe"
]
}
}
}Runnable packages
1.2.0stdioRemote endpoints
https://xswebtvkueusdaeboizp.supabase.co/functions/v1/breathestreamable-httpWhat it can do
Tool inventory
Tools (3)
🟢list_patterns
Lists the VirWave breathing patterns this server can play: phases and seconds, what each rhythm is good for, which shapes can draw it, whether it is hold-free, and any safety note about breath holds. Hold-free patterns are listed first.
Input Schema
{
"type": "object",
"properties": {}
}⚪breathe(pattern, shape, minutes, cycles)
Creates an animated VirWave breathing session the person can follow with their eyes. Invoke it when someone asks for a breathing break, a breathing exercise, guided breathing, or a moment to calm down, relax, or reset: the visual session is the breathing break. In a client that supports MCP Apps (Claude on the web and in the desktop app, for example), the session appears in the chat itself. The result also carries a link to the same session as a web page, for any client that cannot draw it there. Either way the session opens at rest and starts when the person presses Begin, so nothing moves without their say-so. With no inputs, it plays the default Circle 4-8 Breathing session, which has no breath holds.
Input Schema
{
"type": "object",
"properties": {
"pattern": {
"description": "Pattern id from list_patterns. Defaults to in-out-extended-exhale. list_patterns marks each hold-free pattern with \"holdFree\": true.",
"type": "string",
"enum": [
"in-out-equal-4",
"in-out-slow-5",
"in-out-extended-exhale",
"in-out-quick-2",
"in-hold-out-equal-4",
"in-hold-out-extended-exhale",
"in-hold-out-quick-2",
"box-equal-4",
"box-quick-3",
"4-7-8-signature"
]
},
"shape": {
"description": "Shape to draw. Each pattern lists the shapes it can use; defaults to the pattern's first. box: A square whose outline draws itself once per breath cycle. triangle: A triangle whose outline draws itself once per breath cycle. circle: A ring that draws itself once per breath cycle, with no corners to turn. focus-point: A calm point drifting slowly across the field. infinity: A continuous figure-eight with no start or end. ripple: Rings spreading out from a point of contact. color-field: Slow colour folding into itself.",
"type": "string",
"enum": [
"box",
"triangle",
"circle",
"focus-point",
"infinity",
"ripple",
"color-field"
]
},
"minutes": {
"description": "Approximate session length; rounded to whole breath cycles.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 30
},
"cycles": {
"description": "Exact number of breath cycles. Takes precedence over minutes.",
"type": "integer",
"minimum": 1,
"maximum": 60
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪start_session(feeling, goal, minutes)
Matches a VirWave session the way the app's entry flow does: how clearly a feeling is coming through, what they'd like instead, and how long they have. Invoke it when someone says how they are feeling, or what they would like to feel instead, and wants a breathing session that fits. The session moves through stages (arrive, the matched core, close), each with its own shape, at one steady breath pace, and ends at the chosen length. In a client that supports MCP Apps (Claude on the web and in the desktop app, for example), the session appears in the chat itself. The result also carries a link to the same session as a web page, for any client that cannot draw it there. Either way the session waits for Begin, and the result says why it was picked and which stages it has. Every matched session is hold-free: breathe in, a longer breath out.
Input Schema
{
"type": "object",
"properties": {
"feeling": {
"type": "string",
"enum": [
"flat",
"faint",
"nameable",
"directional",
"insistent",
"saturating"
],
"description": "How the feeling is coming through: how clearly, not which feeling it is. The options describe how clear the signal is, and none of them names an emotion. flat (Flat / no signal: Numb, far off, nothing registers.) faint (Faint trace: Something is there but not describable.) nameable (Nameable: A word fits, with hedging.) directional (Directional: It points at something specific.) insistent (Insistent: Hard to set aside, keeps returning.) saturating (Saturating: Too much at once, loud and fast.)"
},
"goal": {
"type": "string",
"enum": [
"grounded",
"calm",
"clear",
"unstuck",
"settled"
],
"description": "What they'd like instead. grounded (Grounded: Back in the body, contact restored.) calm (Calm: Slower, softer, less pressure.) clear (Clear: One thing at a time, in focus.) unstuck (Unstuck: The loop loosens and moves on.) settled (Settled: Steady enough to rest.)"
},
"minutes": {
"type": "number",
"enum": [
2,
5,
10,
15
],
"description": "How long they have: 2, 5, 10, or 15 minutes. Longer sessions move through more stages, not just more time."
}
},
"required": [
"feeling",
"goal",
"minutes"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence