Atlas / MCP servers / manavarya09 / Designlang

DesignlangBLOCK

mcp/manavarya09/designlang

Extract any website's complete design system with one command. DTCG tokens, semantic+primitive+composite, MCP server for Claude Code/Cursor/Windsurf, multi-platform emitters (iOS SwiftUI, Android Compose, Flutter, WordPress), Tailwind v4, Figma variables, shadcn/ui, CSS health audit, WCAG remediatio

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
16 15r · 1w · 0d
Transport
stdio
License
MIT
Stars
4,132
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Built by Manav Arya Singh (@Manavarya09)

Read from source at commit f27906d699a8OBSERVED · 2026-09-22
02

Connect

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-code
claude mcp add website --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ATLASCLOUD_API_KEY=${ATLASCLOUD_API_KEY} --env ATLAS_CLOUD_API_KEY=${ATLAS_CLOUD_API_KEY} --env BLOB_READ_WRITE_TOKEN=${BLOB_READ_WRITE_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "website": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "ATLASCLOUD_API_KEY": "${ATLASCLOUD_API_KEY}",
        "ATLAS_CLOUD_API_KEY": "${ATLAS_CLOUD_API_KEY}",
        "BLOB_READ_WRITE_TOKEN": "${BLOB_READ_WRITE_TOKEN}"
      }
    }
  }
}
03

Exposed tools (16)

15 read · 1 write · 0 destructive.

ToolRiskDescription
cancel_jobreadCancel a running extraction job; its result is discarded.
compute_driftwriteCompare two finished jobs (e.g. production vs a preview deploy): colours, typography, spacing, accessibility and components that changed.
exportreadRender a finished job in a target format.
extract_designreadExtract the design system of a live URL in a real browser. Returns a job_id immediately; poll get_job_status, then pass the job_id to get_tokens, get_colors, get_typography, get_components, get_findings, compute_drift or export.
find_nearest_colorreadFind the nearest palette color that passes the requested WCAG contrast rule against the given hex.
get_colorsreadColour system for a finished job: primary/secondary/accent, backgrounds, text, full palette with usage.
get_componentreadReturn the component cluster with matching kind, optionally narrowed to a variant index.
get_componentsreadComponent styles for a finished job: buttons, inputs, cards, links and their variants.
get_findingsreadDesign-system quality findings for a finished job: token lint (colour sprawl, scale consistency) and WCAG contrast summary.
get_job_statusreadStatus of an extraction job (running, done, failed, cancelled). A done job includes a short summary: primary colour, font families, counts.
get_regionreadReturn the region with the given role (e.g. hero, nav, footer).
get_tokensreadW3C DTCG design tokens (primitive + semantic tiers) for a finished job.
get_typographyreadTypography for a finished job: families, type scale, weights, line heights.
list_failing_contrast_pairsreadReturn the accessibility remediation array (failing fg/bg pairs with suggestions).
list_jobsreadAll extraction jobs in this session.
search_tokensreadCase-insensitive substring match over all token dot-paths.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (4 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
bin/design-extract.js:128
.option('--insecure', 'ignore HTTPS/SSL certificate errors (self-signed, dev, proxies)')
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
vscode-extension/designlang-vscode-0.1.0.vsix
designlang-vscode-0.1.0.vsix
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
github-action/diff-tokens.cjs:65
console.log(`**${total} token changes** vs baseline (${changed.length} changed, ${added.length} added, ${removed.length} removed).`);
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
bench/run.mjs:154
`A colour counts when it is within ΔE ${COLOR_TOLERANCE} (CIE76) of the site's brand colour; a font counts when it names the body-text family.`,
LOWInventory / provenance · inv.hidden_file · CWE-1104
vscode-extension/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/motion-emitters.test.js:127
new Function('module', out)(mod);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/motion-emitters.test.js:138
new Function('module', out)(mod);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/motion-emitters.test.js:146
new Function('module', out)(mod);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/formatters/design-md.js:352
const url = new URL('../../package.json', import.meta.url);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/server.js:75
const { version } = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8'));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
website/app/api/badge/[host]/route.js:11
import { extractDesignLanguage } from '../../../../../src/index.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
website/app/api/badge/[host]/route.js:12
import { formatScoreBadge } from '../../../../../src/formatters/badge.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
website/app/api/badge/[host]/route.js:13
import { validateTargetUrl } from '../../../../lib/url-safety.js';
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:119
test('rejects IPv4-mapped IPv6 cloud metadata ::ffff:169.254.169.254', () => {
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:120
const r = validateTargetUrl('http://[::ffff:169.254.169.254]');
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:135
const r = validateTargetUrl('http://[64:ff9b::169.254.169.254]');
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:39
const r = validateTargetUrl('http://127.0.0.1');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:44
const r = validateTargetUrl('http://10.1.2.3');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:49
const r = validateTargetUrl('http://192.168.0.1');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:54
const r = validateTargetUrl('http://172.20.0.5');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
website/lib/url-safety.test.js:59
const r = validateTargetUrl('http://172.15.0.1');
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
website/public/gallery/spotify-com/spotify-com-design-language.md:54
background-image: linear-gradient(rgba(0, 0, 0, 0.6) 0%, rgb(18, 18, 18) 100%), url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vc
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
website/public/gallery/spotify-com/spotify-com-design-language.md:355
--background-noise: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4KICAgPGZpbH
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
website/public/gallery/spotify-com/spotify-com-preview.html:402
<div class="swatch"><div class="swatch-color" style="background-image:linear-gradient(rgba(0, 0, 0, 0.6) 0%, rgb(18, 18, 18) 100%), url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZ
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
website/public/gallery/spotify-com/spotify-com-variables.css:202
--background-noise: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4KICAgPGZpbH

Gates applied: no_behavioural_pass.

Audited 2026-09-22 · audit v0.4.1 · source sha f27906d699a8full audit observations/trust-audit/mcp-server/manavarya09__designlang.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-22f27906d699a8BLOCKD69source changed, verdict held
06

Questions

What is the Designlang MCP server?

Extract any website's complete design system with one command. DTCG tokens, semantic+primitive+composite, MCP server for Claude Code/Cursor/Windsurf, multi-platform emitters (iOS SwiftUI, Android Compose, Flutter, WordPress), Tailwind v4, Figma variables, shadcn/ui, CSS health audit, WCAG remediatio

What tools does Designlang expose?

16 in total: 15 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Designlang safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does Designlang need?

It reads ANTHROPIC_API_KEY, ATLASCLOUD_API_KEY, ATLAS_CLOUD_API_KEY, BLOB_READ_WRITE_TOKEN, BROWSERLESS_TOKEN and OPENAI_API_KEY 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 Designlang run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as website at 0.1.0.

How current is this page?

The grade is for one exact copy of the source (f27906d699a8), read on 2026-09-22. The repository is watched and re-audited when it changes.

Advertisement