SomaCheck Vibecheck
SomaCheck lets an agent request consented phone-based body-alignment readings for first-person statements, retrieve and contextualize results, and optionally manage a reflection feed.
Send an immediate vibecheck to the person's phone with
request_vibecheck, using explicit consent and an idempotency key; it waits up to 45 seconds for an Aligned/Unaligned result with confidence.Poll or read one exact request by
request_idwithget_vibecheck_result, checking status, verdict, confidence, latency, and feedback without blocking.Read recent completed check-ins as context with
get_vibecheck_context.Check feed/link status, pending requests, proposition capacity, replenishment timing, and first-contact guidance with
get_vibecheck_status.Stock 1–3 optional personalized reflection statements for later with
post_vibecheck_statement; this does not create an immediate phone ask or verify phone display.Share 1–20 bounded, derived, user-authorized observations with
share_somacheck_context; raw conversations, secrets, identifiers, and diagnostic claims are not allowed.Use results as contextual signals only: no raw motion data reaches the agent, no phone-display proof is inferred from database state, and SomaCheck is not for evaluating other people or making medical claims.
vibecheck by Sensie
SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. The reading is a pre-verbal signal: the person's bodily response to that statement before words shape it, against their own baseline; a signal about the person in relation to the statement. Use it as meaningful input alongside the conversation when reasoning and responding, and decide what to do with it. Confidence describes the classifier’s uncertainty.
The agent never receives raw motion data.
How people use it
SomaCheck gives your agent a consented body-language signal. Your agent sends one proposition to your phone, you answer with a three-second gesture, and it gets back Aligned or Unaligned with the model's confidence: your body's response to that proposition, against your own baseline. Your agent uses it as meaningful context and makes up its own mind, the same way it would with anything else you gave it.
Three ways people use it:
Mid-task: when words are the bottleneck, a three-second check-in can re-orient the whole task. No typing out how you feel.
Wellbeing check-ins: after hours of grinding, or when you say you are stretched thin, your agent can offer a check-in. Only ever with your OK.
Big decisions: before you commit, check how your body answers "I'm ready to decide this." Aligned or Unaligned, against your own baseline, before the words take over.
Before your first check-in: install the SomaCheck app on your iPhone and sign in with the same account you connect in your agent. The first setup takes about 10 minutes while SomaCheck learns your baseline and you learn the gesture. Every check after that takes three seconds. iPhone only for now.
The server states facts and hard boundaries: consent, privacy, and never evaluating another person. What a reading means, what to say next, and when to offer a check-in are the agent's call.
Starter prompts:
Give me a SomaCheck vibecheck on the decision I'm trying to make, and use the result to help me think it through.
I've been at this for hours. Offer me a SomaCheck check-in if it would help.
Before I commit to this, run a SomaCheck vibecheck on "I'm ready to decide this" and tell me what you notice.
Related MCP server: phaedo-mcp
Tools
The vibecheck MCP server exposes exactly six tools. Only request_vibecheck
creates an immediate phone ask; post_vibecheck_statement only stocks the
optional feed when you ask it to. Raw motion and private conversation
history never reach the agent through this connector, and a database state
is never proof of phone display.
Tool | Purpose |
| Ask the person's body now: send one statement to their phone and wait up to 45 seconds for a pre-verbal reading, Aligned or Unaligned. |
| Read the body's answer to one statement by |
| Read the person's recent completed readings, newest first, as pre-verbal context. Not for one pending ask. |
| Report how many statements the optional reflection feed needs and when replenishment is due. Says nothing about the phone or any reading. |
| Give the person insight statements to test on their own time. Adds one to three items to the optional reflection feed, returns immediately, never notifies the phone. |
| Share 1–20 bounded, derived, user-authorized observations; raw conversations and secrets are rejected. |
First successful vibecheck
Pick the host you actually use. Each route is separate; the next section only matches the route you choose.
Claude Code (local Channel plugin). Install the plugin and link SomaCheck in Install the Claude Code Channel plugin below, then launch Claude Code with the approved Channel command. Channels remain the preferred path whenever Anthropic has allowlisted
vibecheck@somacheck(or your Team/Enterprise admin has added it toallowedChannelPlugins); without that acceptance, plain Claude Code does not promise automatic next-turn delivery of the answer, so you will use the recovery handle described below.Codex (local plugin). Install this repository's portable plugin from the
somacheck-localmarketplace as described in Install in Codex. It starts the same pinned 0.6.25 local runtime for Codex. Codex does not use Claude Channels, so keep a pending request's handle and check that same request again until it is terminal.Claude.ai and Claude Desktop (hosted OAuth). The hosted OAuth route is served by the separately deployed MCP server at
https://mcp.somacheck.com/functions/v1/mcp; the local Channel plugin does not change or claim that deployment. You connect Claude.ai or Claude Desktop to that hosted endpoint following somacheck.com/docs/hosted-mcp. This README does not assert that Anthropic's hosted OAuth path has accepted the plugin on your behalf. Real acceptance has to be observed in the host, not inferred from this repository.Cursor and Windsurf. Use the developer-preview packages in this repository's
cursor/andwindsurf/directories. Their developer-preview setup guides are real; actual host OAuth and phone acceptance in each client have not been independently verified here, so do not treat either route as already accepted.
After the host is ready, ask the agent for one consented immediate vibecheck. The existing explicit ask is the consent. Do not bolt on redundant "are you sure?" prompts. The agent picks the tool:
Immediate phone ask:
request_vibecheck. This is the only tool that sends a statement to your phone right now and waits up to 45 seconds for the answer. Use it when the user wants a check-in now.Optional feed stock (not an immediate ask):
post_vibecheck_statementonly stocks the reflection feed for later consideration. It does not ask your phone and does not verify delivery. Do not choose it when the person asked for an immediate vibecheck.
The result returns three separate things: (a) the first-person statement
your agent sent, (b) the binary reading (Aligned or Unaligned), and
(c) the returned confidence. They are what the server recorded for that
request_id. The reading is derived from your phone gesture, but the returned
record alone is not independent proof of what your phone displayed.
Only your own observation of what your phone actually showed you
confirms the phone display.
If the request is still pending, keep the same request_id handle and
poll get_vibecheck_result about every 15 seconds until the status is
answered, expired, or cancelled. Do not create a second
request_vibecheck for the same proposition just to poll status. Open
the same SomaCheck app on the same account the original ask went to (or
wait with the existing handle) instead. Wasting a phone ask on a duplicate
is its own problem; preserving the original handle is the recovery path.
Example (non-sensitive, no efficacy claim):
Agent, give me a vibecheck on "I want to commit to this direction for the rest of the week."
This is a hypothetical prompt. The only real outcome is the actual
returned result your phone and this server produce together. For example,
if the actual returned result is Unaligned with confidence 0.71.
If the actual returned result is
Cancelled, the request has been terminated and the handle is no longer
polled. If the phone is unreachable (no display, no prompt, no
network), keep and check the same handle, then check delivery, account, and
connection state, including whether you are signed into the same SomaCheck
account on the phone. This is not an unreadable capture. If the capture itself was unreadable (motion
artifact, dropped gesture, bad baseline), retry the gesture in the app against
the original pending ask; retry the gesture; do not treat the unreadable capture as a result. Create a fresh request_vibecheck only after the original ask
is terminal and the person explicitly wants a new ask.
What this repository is
This public repository contains the Claude marketplace manifest (.claude-plugin/marketplace.json), the Claude plugin manifest (.claude-plugin/plugin.json), the agent skill (SKILL.md), and a bundled local Channel server (.mcp.json). The Channel lets an authorized phone result enter the same open Claude Code conversation so Claude can continue without another typed message.
The portable Codex package lives under plugins/vibecheck/ with its own
plugin.json, mcp.json, and skills/vibecheck/SKILL.md;
.agents/plugins/marketplace.json points to that package. Its
local stdio server uses @somacheck/vibecheck@0.6.25 with --client codex.
The local marketplace is a direct install path. It is separate from the
ChatGPT app directory, where SomaCheck is available, and from the Codex public directory submission.
The hosted vibecheck MCP server itself is not built from this repo. It is deployed and operated separately by Sensie. The local MCP runtime, with Claude Code continuation support, is distributed under MIT as the public @somacheck/vibecheck npm package. This repository's Dockerfile assembles that exact, locked local stdio runtime for Glama's isolated build, security scan, and tool-schema introspection. It does not contain the server source and does not prove the hosted OAuth deployment.
Concretely:
SKILL.md: what Claude reads to decide when a vibecheck would help..claude-plugin/marketplace.json: Claude marketplace listing forclaude plugin marketplace add …..claude-plugin/plugin.json: declares thevibecheckMCP server as a Claude Channel..mcp.json: launches the pinned public npm runtime locally over stdio with Channel support.glama.json: declares maintainers for the Glama MCP registry; see Glama docs.Dockerfile,package.json, andpackage-lock.json: reproducible, non-root Glama image for the local stdio runtime. The image contains no SomaCheck account credential..github/workflows/ci.yml: public CI that validates the manifests, builds and probes the Glama image, and guards the README doctrine and version drift. It uses no secrets and performs no deployment or publication.
Install in Codex
Use the checked-out repository as a local marketplace source:
codex plugin marketplace add /absolute/path/to/vibecheck
codex plugin add vibecheck@somacheck-localThe package starts the local stdio runtime; it does not pair your account. Install SomaCheck on your phone and complete its in-app setup. In the app, open Settings > Agent > Connect your agent to obtain a short-lived code, then link this Codex client:
npx -y @somacheck/vibecheck@0.6.25 link <CODE> --client codexThe code is private: enter it on your own device and terminal, never in a
plugin manifest or chat. Restart Codex after installation or linking, then
ask for one vibecheck on your own exact first-person statement. If you already
have a Codex vibecheck MCP registration, review it before using both paths;
two server registrations can show duplicate tool sets. A pending request is
continued with get_vibecheck_result on its original request_id.
Install the Claude Code Channel plugin
claude plugin marketplace add Sensie-agents/vibecheck
claude plugin install vibecheck@somacheckInstalling the plugin configures a local, plugin-scoped vibecheck MCP server. It reads the independently revocable Claude credential stored by the link command and never puts that credential in the plugin manifest.
Install SomaCheck from the App Store and complete its in-app setup first, then in the CLI or your agent's native app ask: Give me a SomaCheck vibecheck based on what you know about me.
Link SomaCheck and start the Channel
Get <CODE> from SomaCheck's Settings > Agent > Connect your agent, then link the local runtime:
npx -y @somacheck/vibecheck@0.6.25 link <CODE> --client claudeAlready linked? Install or repair the managed Claude setup without linking again:
npx -y @somacheck/vibecheck@0.6.25 setup claudeBoth commands install or update the public plugin, migrate recognized old
SomaCheck registrations, and enable Claude's native marketplace auto-updates
(autoUpdate: true) for somacheck. Unrelated configuration is preserved;
custom or ambiguous registrations require review and are not silently replaced.
This release is plugin 0.6.26, launching runtime 0.6.25. These version
numbers are independent.
Future reviewed plugin releases can update through Claude's marketplace. Updates do not replace the running MCP process mid-conversation; reload the plugin or start a new session after an update. This does not update the phone app, Claude.ai, or a manually installed Desktop connector.
Then start Claude Code with this plugin's Channel:
claude --channels plugin:vibecheck@somacheckAnthropic currently permits that safe command only after either Anthropic has
allowlisted the plugin or a Team/Enterprise administrator has added
vibecheck@somacheck to allowedChannelPlugins. While Anthropic reviews the
plugin, its development-only acceptance test still uses the warning-gated
development flag. That flag is not the intended user experience.
Keep the session open; a closed session cannot receive Channel events. The stable request handle remains the recovery path if an event is not delivered. Claude Code does not acknowledge Channel notifications, so the plugin does not also install a competing wake hook that could continue the same result twice.
Claude.ai remains available through the separately deployed hosted OAuth
connector at https://mcp.somacheck.com/functions/v1/mcp; the local Channel
plugin does not change or claim that deployment.
Glama/local container boundary
The Glama release represents the local stdio runtime, not the separately hosted OAuth connector. It can be started without a credential so Glama can inspect its six tool schemas. Actual tool calls remain account-bound and fail with setup guidance until the person has linked SomaCheck.
For a single person's self-hosted local use, mount that person's existing link configuration read-only:
docker run --rm -i -v "$HOME/.sensie:/home/node/.sensie:ro" somacheck-vibecheck:0.6.25Never bake a pairing code, token, or config.json into the image. Do not share one mounted configuration between people or use this image as a multi-tenant service. Glama schema discovery alone is not evidence of an authenticated phone round trip.
Documentation
Cursor and Windsurf
Use the Cursor setup package to add SomaCheck's hosted connection and skill to a project. Its installer previews changes, preserves existing configuration, and verifies the result. The Windsurf / Cascade setup guide includes the native remote-server configuration.
Both use your own SomaCheck OAuth connection and phone. These are developer preview packages; actual host OAuth and phone acceptance and marketplace listings remain to be verified. Claude Code Channels are a separate host capability.
Full setup, the six MCP tools, revocation, and troubleshooting for Claude Code, Codex, and Claude.ai: somacheck.com/docs (hosted MCP guide).
Privacy boundary
Raw motion data and conversation history never cross this connection. A vibecheck applies only to the person using SomaCheck.
SomaCheck is a general wellness tool. It is not a medical device and does not diagnose or treat any condition.
Full privacy policy, including agent connections and data retention: somacheck.com/privacy.
License
MIT
Available Tools
6 toolsget_vibecheck_contextVibecheck ContextARead-onlyIdempotent
Read recent completed check-ins for this linked agent, newest first. Use the outcomes as contextual signals and replenish the feed when status requests it.
Inputs: no named parameters. Returns: checkins
get_vibecheck_resultGet Vibecheck ResultARead-onlyIdempotent
Read one exact proposition or immediate vibecheck by request_id. This is a single non-blocking read: queued is cached, and pending is not answered. Immediate vibecheck handles begin with live: and remain bound to the originating client.
Inputs: request_id (required). Returns: status, verdict, latency_s, confidence, +2 more
get_vibecheck_statusVibecheck StatusBRead-onlyIdempotent
Read the SomaCheck database feed before posting. Reports available proposition capacity, when routine replenishment is due, and whether this is the agent's first contact. Database state does not verify phone display.
Inputs: no named parameters. Returns: linked, cadence, copy_guidance, first_run_intro, +8 more
post_vibecheck_statementPost Vibecheck StatementA
When the person asks to stock reflections for later, or has explicitly authorized scheduled stocking, add one to three optional personalized reflections under Settings → Vibe Checks and return immediately. One can become database-current for Home; the rest stay Up next without extra pushes. This does not verify phone display or delivery. Never call this to add follow-up asks after request_vibecheck. Call get_vibecheck_status first; propositions_needed is the available maximum, not a quota. Submit only genuinely useful statements and never invent extras to fill capacity. A still-active scheduled authorization does not require repeated consent each run.
Inputs: statements (required). Returns: propositions
request_vibecheckRequest a VibecheckADestructiveIdempotent
Send one statement to the person's phone for a SomaCheck vibecheck. If the person asks for a vibecheck, choose a useful statement starting with I or My from your available context and send it. Preserve the person's supplied first-person wording verbatim. Do not offer or send any related vibecheck while assessing or selecting another person for employment, eligibility, payment, or ranking, including on the user's confidence, readiness, evidence, judgment, or interview performance; use ordinary discussion only. The user's own career choices remain eligible for self-reflection. For proactive offers, call only after the person accepts. The result is context, not authorization. This call waits up to 45 seconds. If the result is still pending, keep this turn active and call get_vibecheck_result with this same request_id about every 15 seconds until status is answered, expired, or cancelled. Never create a duplicate request.
Inputs: statement (required), consent_basis (required), idempotency_key (required). Returns: state, verdict, confidence, error_code, +7 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
The three read tools (get_vibecheck_context, get_vibecheck_result, get_vibecheck_status) target distinct data sources but share the 'vibecheck' noun and require careful reading to separate. request_vibecheck and post_vibecheck_statement both submit statements, and while the descriptions cross-reference each other to disambiguate, an agent could plausibly pick the wrong write tool.
Names follow a consistent verb_ prefix pattern (request_, get_, post_, share_) with a noun suffix. Minor deviation: one tool uses 'somacheck' while the rest use 'vibecheck', and the noun is multi-word and verbose in places, but the convention is otherwise predictable.
Six tools is well-scoped for a narrow, single-domain service covering request, read, status, write, and context-sharing operations. Each tool earns its place with no redundant or filler entries.
The surface covers the core lifecycle: status check, request submission, result retrieval, context reading, scheduled stocking, and context sharing. The only visible gap is a cancel/expire operation, since 'cancelled' appears as a status but no tool can trigger it.
Maintenance
Related MCP Connectors
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
EU AI Act Art-14 runtime oversight: allow / flag / gate-to-human on an agent action, with receipt.
Human approval for AI agents: one ask, one person, one boolean.
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
Related MCP Servers
- AlicenseBqualityBmaintenanceEstablishes feedback-oriented development workflows with Web UI and desktop application dual interfaces, enabling AI to confirm with users and consolidate tool calls into feedback requests to reduce costs and improve development efficiency.21,453 PyPI3,752MIT

phaedo-mcpofficial
AlicenseNot gradedqualityBmaintenanceMake AI apps answer your way, check with you before acting, and get approvals on your phone.Apache 2.0- AlicenseNot gradedqualityCmaintenanceEnables governed execution of Alexa+ MCP workflows where agents can propose actions but consequential side effects require separate human approval, producing verifiable execution receipts.MIT
- AlicenseNot gradedqualityCmaintenanceEnables an older adult to talk with Alexa+ about medicines and daily routine while a caregiver sees a calm, consent-gated dashboard and push alerts only when a genuine pattern (e.g. an unusually late first activity) appears. Includes elicitation-based consent, emergency bypass, resumable SSE streams, and an inline MCP App view.1MIT