rolling-design-syncBLOCK
Per-node design-implementation ledger: a Figma plugin, API, and agent tooling that tell coding agents exactly which design changes aren't built yet.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Tell your coding agent exactly which parts of a Figma design aren't built yet.
[](https://github.com/deven-bryant/rolling-design-sync/actions/workflows/ci.yml) [](https://github.com/deven-bryant/rolling-design-sync/actions/workflows/e2e.yml) [](LICENSE) [](apps/api/LICENSE.md)
Rolling Design Sync is a per-node design-implementation ledger for Figma. A Figma plugin records what the design says, coding agents mark nodes as implemented once the code matches, and what's left is exactly the design work that hasn't been built — node by node, property by property.
https://github.com/user-attachments/assets/1b32ff1d-47f8-40c0-9097-fc93ffc743ac
A sync from the Figma plugin, then the changed nodes waiting in the portal.
Status: 0.14 beta. It works end to end, but the API, plugin protocol, MCP tools and CLI may still change between minor releases until 1.0. What's promised, and when, is in the compatibility policy.
Quickstart → from a clean machine to an agent clearing its first Figma changes.
Why
Asking an agent to "implement this Figma frame" works the first time. After that it breaks down:
- Agents start cold. They re-scan the whole frame, get the big structure
right, and quietly drop details.
- Figma has no "what changed" API. Webhooks tell you a file changed, not
which nodes or properties.
- **The real question is "what changed since the code caught up
037b82fda4e4OBSERVED · 2026-10-14Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add e2e-portal --env RDS_AGENT_TOKEN=${RDS_AGENT_TOKEN} --env RDS_PLUGIN_TOKEN=${RDS_PLUGIN_TOKEN} --env RDS_TOKENS_FILE=${RDS_TOKENS_FILE} --env RDS_VIEWER_TOKEN=${RDS_VIEWER_TOKEN} -- npx -y @rolling-design-sync/[email protected]{
"mcpServers": {
"e2e-portal": {
"command": "npx",
"args": [
"-y",
"@rolling-design-sync/[email protected]"
],
"env": {
"RDS_AGENT_TOKEN": "${RDS_AGENT_TOKEN}",
"RDS_PLUGIN_TOKEN": "${RDS_PLUGIN_TOKEN}",
"RDS_TOKENS_FILE": "${RDS_TOKENS_FILE}",
"RDS_VIEWER_TOKEN": "${RDS_VIEWER_TOKEN}"
}
}
}
}Exposed tools (1)
0 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
rds_session | write | The browser session POST /v3/session mints: a cookie of the same role as the token it was minted from. |
Trust audit
BLOCKgrade F · trust 57/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (4 observation(s))
- Network
- declared (6 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
const ssl = process.env.PGSSLMODE === 'disable' ? false : { rejectUnauthorized: false };DATABASE_URL=postgresql://postgres:[email protected]_REF.supabase.co:5432/postgres
console.log(`Generated ${local.generated.join(' and ')} token(s), stored in ${local.file} (shown only once):`);# http://127.0.0.1:<port>, comma-separated; anything else fails startup.
DATABASE_URL: postgresql://postgres:[email protected]:5432/fds
DATABASE_URL=postgresql://postgres:[email protected]:5433/postgres PGSSLMODE=disable \
DATABASE_URL=postgresql://postgres:[email protected]:5433/postgres \
expect(sideLabel({ token: 'Colors/Background/bg-primary', value: [] })).toBe('bg-primary');const run = () => new Function(script)();
const MIGRATIONS_DIR = path.resolve(__dirname, '../../../supabase/migrations');
const DEFAULT_MIGRATIONS_DIR = path.resolve(__dirname, '../../../../supabase/migrations');
const { version: SERVER_VERSION } = require('../../package.json');const { version } = require('../../package.json');const { MemoryStore } = require('../../src/store/memory');RDS_API_URL: http://127.0.0.1:8787
RDS_API_URL: http://127.0.0.1:8787
RDS_API_URL: http://127.0.0.1:8787
RDS_API_URL: http://127.0.0.1:8787
@fastify/cors, @rolling-design-sync/core, pg
@rolling-design-sync/core
@rolling-design-sync/core, @rolling-design-sync/api
(the SDK's OAuth client could send credentials to an authorization server
- **Upload token** — one of the server's `RDS_PLUGIN_TOKENS`.
<label for="token">Upload token</label><input type="password" id="token" placeholder="One of the server's RDS_PLUGIN_TOKENS" autocomplete="off">
| `RDS_AGENT_TOKEN` | yes | An agent token (`RDS_AGENT_TOKENS` on the API; `agent` in `tokens.json` for `RDS_STORE=local` — [docs/agents.md](https://github.com/deven-bryant/rolling-design-sync/blob/ma
Gates applied: no_behavioural_pass.
037b82fda4e4full audit observations/trust-audit/mcp-server/deven-bryant__rolling-design-sync.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-14 | 037b82fda4e4 | BLOCK | F | 57 | first audit |
Questions
What is the rolling-design-sync MCP server?
Per-node design-implementation ledger: a Figma plugin, API, and agent tooling that tell coding agents exactly which design changes aren't built yet.
What tools does rolling-design-sync expose?
1 in total: 0 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is rolling-design-sync safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (57/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does rolling-design-sync need?
It reads RDS_AGENT_TOKEN, RDS_PLUGIN_TOKEN, RDS_TOKENS_FILE and RDS_VIEWER_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does rolling-design-sync run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @rolling-design-sync/e2e-portal at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (037b82fda4e4), read on 2026-10-14. The repository is watched and re-audited when it changes.