Give your AI agent live posture context—locally.
Pelion Posture ships a Model Context Protocol server, so Claude Code, Cursor and other MCP clients can read what your neck is doing while you work. It speaks stdio only, opens no port, makes no network request, and stays off until you switch it on.
- Local stdio
- No listening port
- Off by default
- No camera images
How it fits together
- 1Pelion PostureEstimates your posture on-device while it runs.
- 2Current snapshotA single private file on your Mac, rewritten at most once a second.
- 3Bundled MCP serverA small executable your client launches on demand. Reads the snapshot; opens no port.
- 4Your AI clientClaude Code, Cursor or any MCP client, over stdio.
Nothing in that chain leaves your Mac. The snapshot holds one instant — no images, no history — and is deleted when you switch MCP off.
The measured product walkthrough shows this boundary visually and publishes the five-run MCP timing data.
Set it up
Pelion must be installed and running, with the switch on in Settings → MCP. Then point your client at the bundled executable.
Claude Code
claude mcp add pelion-posture -- "/Applications/PelionPosture.app/Contents/MacOS/pelion-posture-mcp"Cursor, or any other MCP client
{
"mcpServers": {
"pelion-posture": {
"command": "/Applications/PelionPosture.app/Contents/MacOS/pelion-posture-mcp"
}
}
}The executable lives inside the app bundle, so it updates when the app does. If your client requires the path to be quoted, keep the quotes — several Pelion builds have lived at paths containing a space.
Resources
All 7 are free to read. Each returns JSON.
| URI | Name | What it returns |
|---|---|---|
| posture://current | Current posture | Live neck load, tilt and zone (honest unknowns) |
| posture://today | Today summary | Monitored time, healthy %, peak, nudges |
| posture://fatigue | Fatigue | Fatigue index, headroom, budget, ETA to high |
| posture://settings | Settings | Read-only settings summary |
| posture://frame | Derived frame | Full gated derived frame (DIY) |
| posture://buckets/{date} | 5-minute buckets | Bucket5m array for a date or 'today' (DIY) |
| posture://config | Tuning config | Tunables, ranges, pending requests (DIY) |
Tools
10 tools in total: 3 that return data, 2 that file a request you approve in the app, and 5 agent behaviour tools that ship with Pro and are not open yet. Calling a gated tool returns a structured error explaining why, so your agent can tell you rather than failing silently.
| Tool | Availability | Behaviour |
|---|---|---|
| get_current_posture | Free | Read posture://current (live load, tilt, zone; honest unknowns) |
| get_posture_summary | Free | Read posture://today + posture://fatigue merged |
| get_tuning | Free | Read posture://config (tunables, ranges, pending requests) |
| request_tuning_change | Free · needs your approval | Request a tuning change (lands in the user-approval inbox) |
| reset_tuning | Free · needs your approval | Request resetting a key (or all) to default (user-approval inbox) |
| pause_monitoring | Pro · not open yet | Pause monitoring (gated: Pelion Pro — not open yet) |
| resume_monitoring | Pro · not open yet | Resume monitoring (gated: Pelion Pro — not open yet) |
| send_posture_nudge | Pro · not open yet | Send an agent nudge (gated: Pelion Pro — not open yet) |
| set_focus_session | Pro · not open yet | Set a focus session (gated: Pelion Pro — not open yet) |
| start_relief_session | Pro · not open yet | Start a relief session (gated: Pelion Pro — not open yet) |
Prompts to try
Each of these uses only the free reading capabilities above.
Check posture://current and tell me in one line what my neck is carrying right now.
Keep an eye on posture://fatigue while we work. If fatigue crosses 80, say so once and suggest I step away for a minute.
Read posture://today and summarise how my posture went: monitored time, healthy percentage, and when my worst moment was.
Read posture://buckets/today and tell me which hour of the day my neck load was highest.
Privacy and lifecycle
- Off by default. While off, the app writes no readings to disk and the server refuses every request.
- The snapshot is a private file readable only by your macOS user, holding one instant — no images, no raw sensor values, no history.
- A reading older than ten seconds is treated as absent, so your agent never gets a stale number presented as current.
- Switching MCP off deletes the file. Quitting Pelion leaves a final marker containing no readings.
- The server makes no network request and opens no port. It is launched by your client and talks to it over stdio.
Full detail is in the privacy policy.
If something is not working
| What you see | What it means |
|---|---|
| app_not_running | Pelion is quit, paused, or its last reading is more than ten seconds old. Launch the app and make sure monitoring is active. |
| server_disabled | The MCP switch is off. Turn it on in Settings → MCP; the app starts writing the snapshot again immediately. |
| pro_required | You called one of the agent behaviour tools. Those ship with Pelion Pro, which is not open yet — the error's explanation says so, so your agent can pass it on. |
| Client cannot find the executable | Check the path matches your installed app exactly and is quoted if it contains a space. The server only exists inside the app bundle, so it must be installed first. |
| invalid_tuning | A tuning request used a key outside the allowed list, or a value outside its safe range. The error carries the permitted range. |
Versions
This page describes MCP protocol version 2025-06-18 as shipped in Pelion Posture 0.1.1. The capability tables above are checked against a recorded transcript from the shipped server, so they cannot drift from what you actually get. The verified changelog ties that public version label to the exact downloadable artifact.