# `io.github.SusanAcharya/design-lounge` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.SusanAcharya/design-lounge
- JSON: https://anlyon.dev/api/v1/servers/io.github.SusanAcharya/design-lounge
- Version: 0.2.0 (active)
- Publisher: io.github.SusanAcharya (GitHub account)
- Runs: remote (streamable-http), local (npm)
- Sign-in to list tools: none
- Repository: https://github.com/SusanAcharya/Design-Lounge
- Metadata from the official MCP Registry, synced 2026-10-26T20:18:01.638Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Design Lounge
A UI design library and skill for agents, with a page review for AI giveaways, SEO, AEO, and GEO.
```

Scanned 2026-10-26T20:18:03.254Z over streamable-http.

**18 tools: 7 change things and 11 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 7 | ask |
| Only reads | read | 11 | allow |

## Exfil surface

24 private-data -> untrusted-input -> outbound paths in this server alone. Denying 1 private-data tool breaks every one: `mcp__design-lounge__read_guide`.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__design-lounge__read_guide` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__design-lounge__audit_search` `mcp__design-lounge__audit_slop` `mcp__design-lounge__browse_library` `mcp__design-lounge__get_pairing` `mcp__design-lounge__review_page` `mcp__design-lounge__suggest_schema` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | `mcp__design-lounge__audit_search` `mcp__design-lounge__audit_slop` `mcp__design-lounge__review_page` `mcp__design-lounge__suggest_schema` |

| Private data | Untrusted input | Outbound |
| --- | --- | --- |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_search` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_search` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_search` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_search` | `mcp__design-lounge__suggest_schema` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_slop` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_slop` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_slop` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__audit_slop` | `mcp__design-lounge__suggest_schema` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__browse_library` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__browse_library` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__browse_library` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__browse_library` | `mcp__design-lounge__suggest_schema` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__get_pairing` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__get_pairing` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__get_pairing` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__get_pairing` | `mcp__design-lounge__suggest_schema` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__review_page` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__review_page` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__review_page` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__review_page` | `mcp__design-lounge__suggest_schema` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__suggest_schema` | `mcp__design-lounge__audit_search` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__suggest_schema` | `mcp__design-lounge__audit_slop` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__suggest_schema` | `mcp__design-lounge__review_page` |
| `mcp__design-lounge__read_guide` | `mcp__design-lounge__suggest_schema` | `mcp__design-lounge__suggest_schema` |

## Findings

- **warn** Annotations that disagree with the tool in `start_design` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "start_design" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "start_design" says "start": a word for a change.
```

- **warn** Annotations that disagree with the tool in `pick_direction` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "pick_direction" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":false}; The description's first verb is "apply": a word for a change.
```


## Changes things (7)

Creates or changes something that can be changed back. Claude Code: ask.

### `audit_slop`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Design only: the tells of a generated page (stock copy, em dashes, buzzwords, icon-card trios, gradients, the indigo palette, emoji icons, numbered eyebrows, placeholder copy, made-up numbers) and drift from the locked kit (faces, colours, radius, shadow). Static by default; render=true adds the measured checks.
```

### `check_pick`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

Description, as the server wrote it:

```untrusted-server-text
The uniqueness check from Recent picks: direction, hero, and effect against this recipe; two of hero, work, footer against the related group; hero shape against the last two; frame against the last three. Returns problems and the Unlike line for the sheet.
```

### `name_number`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

Description, as the server wrote it:

```untrusted-server-text
The tie-break from rule 5 of Pick a direction: the sum of each letter's place in the alphabet, mod the number of fitting directions.
```

### `pick_direction`

- The description's first verb is "apply": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Apply rules 3 to 5 of Pick a direction and the Recent picks check: calm words narrow to quiet, editorial, or sharp families; the history blocks recent directions, heroes, and effects; the group check blocks two-of-three matches; the name number breaks the tie. You judge which directions fit the subject (rules 1, 2, 4) and pass them as `fitting`.
```

### `review_page`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
The all-in-one check for a built page: AI giveaways and kit drift (the Look fails), SEO, AEO, GEO, and, when Chromium is available, a rendered pass at 1280×800 and 390×844 with axe accessibility, measured labels, faces, primaries, tap targets, and saved screenshots. Returns scores, fails first, each with its evidence and fix.
```

### `start_design`

- The name "start_design" says "start": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Call first for any new website, app, screen, or UI. Reads their request the way the method does (flow, mode, named style, calm words), ranks the recipes, reads the project folder and the recent picks, and returns the brief to fill and the steps, each naming the tool to use.
```

### `suggest_schema`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
JSON-LD for the page built only from facts on it: the entity (Organization, LocalBusiness subtypes, Person, Product, SoftwareApplication) with name, url, description, image, phone, email, address, sameAs; and FAQPage from its own questions. Lists the fields it could not find. Never invents ratings, reviews, or prices.
```

## Only reads (11)

Looks things up and changes nothing. Claude Code: allow.

### `audit_search`

- The name "audit_search" says "search": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Whether search engines can index the page and show it well (SEO), answer engines can lift a direct answer (AEO), and AI engines can reach it, read it without JavaScript, and name the entity (GEO): title, description, headings, alt, share card and its 1200×630 image, canonical, robots.txt for search and AI crawlers, sitemap, JSON-LD, question headings with short answers, server-rendered text.
```

### `browse_library`

- The name "browse_library" says "browse": a word for reading.
- Tag untrusted-input: The name "browse_library" says "browse": it reads web pages, which anyone can write.

Description, as the server wrote it:

```untrusted-server-text
List themes, pairings, families, recipes, piece categories, collections, or kinds. Themes and pairings can be ranked by a mood ("warm craft", "editorial serif", "dark technical").
```

### `get_family`

- The name "get_family" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
A family's rules: radius, button style, density, shadow, and the sentences that lock them. The family wins over a brief for radius, shadow, button, and density.
```

### `get_icons`

- The name "get_icons" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
SVG for Lounge Icons by name (24px, stroke 1.75). With no names, lists them by group. Missing names come back as missing: then follow Icon and nav in components.md, never an emoji.
```

### `get_pairing`

- The name "get_pairing" says "get": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
A pairing's CSS (Google Fonts import, --font-display, --font-text, mono if any), its numbers face, and any caution to say before you write.
```

### `get_piece`

- The name "get_piece" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
The spec for one piece, with a picture of its demo: structure, counts, sizes, motion timing, states, hit targets, acceptance checklist. By default stops at "Optional below this line"; full=true adds the demo's exact paint and motion notes. demo=true adds the demo's HTML source, the acceptance file. Its colours and fonts are the demo's: translate them onto the locked kit.
```

### `get_recipe`

- The name "get_recipe" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
A recipe (start) with its directions: each a complete look (theme, pairing, family, hero, effect, work, footer). Each direction says whether the recent history blocks it.
```

### `get_theme`

- The name "get_theme" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
A theme's full CSS (primary, secondary, tertiary, feedback, surfaces, link) and its pair for the other mode. Colour only: fonts come from the pairing, radius and shadow from the family.
```

### `read_guide`

- The name "read_guide" says "read": a word for reading.
- Tag private-data: The description's first sentence says "read" and "file": it reads files. The input names a file (input.file), and the tool reads: it reads files.

Description, as the server wrote it:

```untrusted-server-text
Read a method file or one section of it. Files: SKILL.md, app.md, brief.md, components.md, examples.md, flows.md, locale.md, native.md, practice.md, reference.md, search.md, show.md, styles.md, taste.md, website.md. Give a heading ("Look", "Write the idea", "Recent picks") to get only that section; outline=true lists the headings.
```

### `search_pieces`

- The name "search_pieces" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search 543 piece briefs by words (job, component, style, tag) and filters. Returns ids, summaries, and demo links. Then get_piece for the brief.
```

### `search_wada`

- The name "search_wada" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Sanzo Wada's 348 combinations, by colour or material word (russet, slate, "dark warm") or nearest to a hex. Only for Free colour, a brand board no theme fits, or colours they asked for. Take one line whole; the header says how to map it to roles.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `design-lounge`:

```json
{
  "permissions": {
    "allow": [
      "mcp__design-lounge__get_recipe",
      "mcp__design-lounge__search_pieces",
      "mcp__design-lounge__get_piece",
      "mcp__design-lounge__browse_library",
      "mcp__design-lounge__get_theme",
      "mcp__design-lounge__get_pairing",
      "mcp__design-lounge__get_family",
      "mcp__design-lounge__get_icons",
      "mcp__design-lounge__search_wada",
      "mcp__design-lounge__read_guide"
    ],
    "ask": [
      "mcp__design-lounge__start_design",
      "mcp__design-lounge__pick_direction",
      "mcp__design-lounge__check_pick",
      "mcp__design-lounge__name_number",
      "mcp__design-lounge__review_page",
      "mcp__design-lounge__audit_slop",
      "mcp__design-lounge__audit_search",
      "mcp__design-lounge__suggest_schema"
    ],
    "deny": []
  }
}
```

Capability tags behind the rules (a read tagged outbound is asked about):

- `mcp__design-lounge__browse_library`: untrusted-input
- `mcp__design-lounge__get_pairing`: untrusted-input
- `mcp__design-lounge__read_guide`: private-data
- `mcp__design-lounge__review_page`: untrusted-input, outbound
- `mcp__design-lounge__audit_slop`: untrusted-input, outbound
- `mcp__design-lounge__audit_search`: untrusted-input, outbound
- `mcp__design-lounge__suggest_schema`: untrusted-input, outbound
