Voter
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VoterPropose adding a dark mode toggle"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Voter — a WithVibe plugin
Turn any WithVibe env into a team-voted workspace. When this plugin is enabled, the AI doesn't apply a prompt straight away — it opens a proposal the team votes on, and only an approved proposal gets built. Enable it on any env and that env becomes a vote-gated sandbox.
You (in chat): "add a dark-mode toggle"
│
▼
voter_propose_change ──────► Proposal #7 opens (10-min vote)
│ 👍 👎 team votes in the panel
voter_await_decision ◄─────── APPROVED ✅ / REJECTED ✗
│
▼ (only if approved)
agent makes the change ──► voter_record_change ──► shows up in HistoryIt's content-agnostic — it knows nothing about what the env contains. Whatever the env is (an app, a doc, a 3D scene, a config), enabling Voter makes every change go through the team first. Multiple envs = multiple independent boards.
How the gate works (and why it's just a plugin)
WithVibe auto-injects an enabled plugin's MCP tools into the agent's turn. Voter uses that to gate prompts without any change to WithVibe core:
voter_propose_change(prompt)— opens a proposal and tells the agent to not touch anything yet.voter_await_decision(proposal_id)— long-polls the vote. The platform's MCP bridge caps a single tool call at 60s, so this returns after ~45s withSTILL_VOTINGand the agent simply calls it again until it's terminal.On
APPROVED, the agent makes the change and callsvoter_record_change. OnREJECTED/EXPIREDit makes no change.
Meanwhile every teammate votes in the plugin's own UI panel — independent of the agent. The gate is agent-cooperative (enforced via tool instructions), which is the right trade-off for a friendly workflow; hardening it to be unbypassable is a later option that would need a small core hook.
Related MCP server: vibecompass-mcp
MCP tools
Tool | Purpose |
| Open a proposal for the requested change. Agent must call this instead of editing. |
| Long-poll the team's verdict ( |
| Record what shipped after applying an approved change. |
| Mark an approved change as failed (e.g. build broke). |
| Show the current board: proposals in voting + recently resolved. |
State
Four tables in the plugin's isolated Postgres schema (shared-postgres storage):
settings (vote window + thresholds), proposal, vote, feed_event.
Resolution rule: a proposal passes when approvals reach the threshold, fails when rejections reach the threshold, and at the deadline the majority wins (ties expire). Defaults: 600s window, 1 approval / 1 rejection — tune them in the panel.
Architecture
manifest.yaml ──► WithVibe spawns one container per env (scope: env)
│
server.js (express)
├── /health platform health probe
├── /mcp agent's MCP endpoint ─► mcp.js (the gate)
├── /ui htmx voting panel ─► ui.js
└── /ui/version cheap freshness check (live updates)
│
db.js (pg) ─► shared-postgres, per-env schemaBuild
docker build -t local/voter:0.1 .For the marketplace this is published multi-arch as ghcr.io/withvibe/voter:<version>.
Install in WithVibe
Workspace admin → Plugins → Install plugin (or Marketplace once listed).
Paste manifest.yaml (or 1-click install from the catalog).
Open any env → enable Voter → that env is now a vote-gated workspace.
Local development
docker build -t local/voter:0.1 .
docker run --rm -p 8080:8080 \
-e DATABASE_URL="postgres://user:pass@host.docker.internal:5432/withvibe_plugins" \
-e PGSCHEMA="voter_dev" \
local/voter:0.1
# open http://localhost:8080/ui — two browsers = two votersRepository layout
manifest.yaml WithVibe plugin manifest (install input)
Dockerfile runtime image
package.json deps (express, pg, @modelcontextprotocol/sdk, zod)
server.js express entry — HTTP + MCP routes + vote handling
db.js pg pool, schema, proposal/vote/resolution helpers
mcp.js the gate: propose / await / record MCP tools
ui.js htmx voting panel + dark themeLicense
Apache License 2.0. See NOTICE for attribution.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted MCP server for AI agent identity, permissions, verification, and reusable proof.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceMCP server that intercepts and controls AI agent actions in your codebase by enforcing policies on file operations and commands, with logging, approval workflows, and rollback capabilities.-
- AlicenseAqualityBmaintenanceMCP server that connects AI coding tools to VibeCompass projects for reading context and writing decisions, conflicts, and session notes.1011 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server that provides impact preview and approval workflow for AI agent actions, allowing users to see diffs and risk assessments before any changes are executed.1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that provides human-in-the-loop approval for risky AI agent actions, with durable state and audit logs.MIT