{"_id":"@aestheticfunction/ds-mcp","_rev":"5-1a3c50b9f1a4f285f9526e04c8443b46","name":"@aestheticfunction/ds-mcp","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@aestheticfunction/ds-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"author":{"name":"Ryan Dombrowski"},"license":"Apache-2.0","_id":"@aestheticfunction/ds-mcp@0.1.0","maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"homepage":"https://github.com/aestheticfunction/ds-mcp#readme","bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"bin":{"ds-mcp":"dist/index.js"},"dist":{"shasum":"2cf937b22eb902f9097d0c8e037d63dcaefd6836","tarball":"https://registry.npmjs.org/@aestheticfunction/ds-mcp/-/ds-mcp-0.1.0.tgz","fileCount":72,"integrity":"sha512-MDRltk1SLcb2i+gYKmIiEswlmim3yFHtfeTvvIAXP19C1gjYhfz74kLiqeOBrshFCtYSeK6ocV8MrpGJJW7Ctg==","signatures":[{"sig":"MEQCICSsWkWKhmPN2E3ovPTdOoTXhFOdP6X5sTT+WNOpTOaeAiBk4hKiGhhZkpiDBz8V00pGDLOvMzBPtzgkJD91VqbZZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154489},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"29681957e314090007378923385526408959836a","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc","start":"node dist/index.js","pretest":"npm run build"},"_npmUser":{"name":"ryandmonk","email":"rdombrowski@gmail.com"},"repository":{"url":"git+https://github.com/aestheticfunction/ds-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for exposing dspack design system corpora to AI coding agents","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ajv":"^8.17.0","zod":"^3.25 || ^4.0","minimist":"^1.2.8","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.0.0","@types/minimist":"^1.2.5"},"_npmOperationalInternal":{"tmp":"tmp/ds-mcp_0.1.0_1779401665451_0.4980050878689901","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aestheticfunction/ds-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"author":{"name":"Ryan Dombrowski"},"license":"Apache-2.0","_id":"@aestheticfunction/ds-mcp@0.2.0","maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"homepage":"https://github.com/aestheticfunction/ds-mcp#readme","bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"bin":{"ds-mcp":"dist/index.js"},"dist":{"shasum":"d650433b4c640218c1632afbb8a0ba39356d92b1","tarball":"https://registry.npmjs.org/@aestheticfunction/ds-mcp/-/ds-mcp-0.2.0.tgz","fileCount":95,"integrity":"sha512-CqPrsV2QucmsmX2BPBtLFuleqZQr3bOvBK/XtlMr+fgiGICQLSgdibUgF7HXiYFKpUKkyfAgzqpvKQx0qVc8RQ==","signatures":[{"sig":"MEUCIQCdRRVzxAHlNLaM2u5+VYPNHFJfZirIm+Ld+CqxxwlZGgIgBKD176lpKBA0Sl4fAw9e8RE6xpp3m27aeI2sAPX7I3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319333},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"fac60c4b6f7310c5e3bfb5223be845bf62641d79","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc","start":"node dist/index.js","pretest":"npm run build"},"_npmUser":{"name":"ryandmonk","email":"rdombrowski@gmail.com"},"repository":{"url":"git+https://github.com/aestheticfunction/ds-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for exposing dspack design system corpora to AI coding agents","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ajv":"^8.17.0","zod":"^3.25 || ^4.0","minimist":"^1.2.8","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.0.0","@types/minimist":"^1.2.5"},"_npmOperationalInternal":{"tmp":"tmp/ds-mcp_0.2.0_1779847233904_0.169510967109318","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aestheticfunction/ds-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"author":{"name":"Ryan Dombrowski"},"license":"Apache-2.0","_id":"@aestheticfunction/ds-mcp@0.3.0","maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"homepage":"https://github.com/aestheticfunction/ds-mcp#readme","bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"bin":{"ds-mcp":"dist/index.js"},"dist":{"shasum":"c0e7fe634488388d1c016a1712c16cc2e7b2d1b5","tarball":"https://registry.npmjs.org/@aestheticfunction/ds-mcp/-/ds-mcp-0.3.0.tgz","fileCount":108,"integrity":"sha512-60P++8KvbRMk11aEyMQPqldmsnLpoZ+gclw4NxwOFQOh9wbCVEF1osIv0pAoz7EyZVfMK/Zh2O1J7WC4ZvHzNQ==","signatures":[{"sig":"MEUCIBmyCii0PWHIt6YZ4dCtIJZSqeBajF//FOuubFE38950AiEAjPA5R4cvb3Qc3G1j2zAjdwX295BGAEoYVUxEj/s7AWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531368},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"2239e7264a490064607fb0fdd952b8a2ce268c8c","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc && npm run bundle:core","start":"node dist/index.js","pretest":"npm run build","bundle:core":"esbuild node_modules/@aestheticfunction/dspack-gen/dist/core/index.js --bundle --format=esm --platform=node --external:ajv --outfile=dist/vendor/dspack-gen-core.js"},"_npmUser":{"name":"ryandmonk","email":"rdombrowski@gmail.com"},"repository":{"url":"git+https://github.com/aestheticfunction/ds-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for exposing dspack design system corpora to AI coding agents","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ajv":"^8.17.0","zod":"^3.25 || ^4.0","minimist":"^1.2.8","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.5.0","@types/node":"^20.0.0","@types/minimist":"^1.2.5","@aestheticfunction/dspack-gen":"git+https://github.com/aestheticfunction/dspack-gen.git#f6514330964ed7b62371e17eec4cdadaeeef9d52"},"_npmOperationalInternal":{"tmp":"tmp/ds-mcp_0.3.0_1783423328513_0.6872199616123702","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aestheticfunction/ds-mcp","version":"0.3.1","keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"author":{"name":"Ryan Dombrowski"},"license":"Apache-2.0","_id":"@aestheticfunction/ds-mcp@0.3.1","maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"homepage":"https://github.com/aestheticfunction/ds-mcp#readme","bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"bin":{"ds-mcp":"dist/index.js"},"dist":{"shasum":"2a6744ab9ba7247f61d74b5501f861dfecd43a2f","tarball":"https://registry.npmjs.org/@aestheticfunction/ds-mcp/-/ds-mcp-0.3.1.tgz","fileCount":112,"integrity":"sha512-qvQGJusFLW1V5C3VlcBd0l+oXeZWiLTlnrAnOXuOaaK2Dft5WIyM91TekkVOkkaiPCKfNAnLwtk/H2ASo2c/gA==","signatures":[{"sig":"MEYCIQCjlW2oiNxAMEC+/qNpFlgiATDZ8lZcnYST+THNXX5pKwIhAKToLedinsCKQZVe9HIKCnYDoQEwlfV6JmnRTnZiDwsn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aestheticfunction%2fds-mcp@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":539565},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"d7e6f30345770b39c3a48810c6f552d7519097ff","scripts":{"test":"node --test dist/tests/*.test.js","build":"tsc && npm run bundle:core","start":"node dist/index.js","pretest":"npm run build","bundle:core":"esbuild node_modules/@aestheticfunction/dspack-gen/dist/core/index.js --bundle --format=esm --platform=node --external:ajv --outfile=dist/vendor/dspack-gen-core.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b9cca35-e8b3-4ba5-8796-058ffb173056"}},"repository":{"url":"git+https://github.com/aestheticfunction/ds-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server for exposing dspack design system corpora to AI coding agents","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ajv":"^8.17.0","zod":"^3.25 || ^4.0","minimist":"^1.2.8","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0","typescript":"^5.5.0","@types/node":"^20.0.0","@types/minimist":"^1.2.5","@aestheticfunction/dspack-gen":"git+https://github.com/aestheticfunction/dspack-gen.git#374e1cd91f02701c0d4829ece0a79dd9b381f67b"},"_npmOperationalInternal":{"tmp":"tmp/ds-mcp_0.3.1_1784060028684_0.3157132036375039","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@aestheticfunction/ds-mcp","version":"0.3.2","description":"MCP server for exposing dspack design system corpora to AI coding agents","license":"Apache-2.0","type":"module","main":"dist/index.js","bin":{"ds-mcp":"dist/index.js"},"engines":{"node":">=20.0.0"},"author":{"name":"Ryan Dombrowski"},"keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"repository":{"type":"git","url":"git+https://github.com/aestheticfunction/ds-mcp.git"},"homepage":"https://github.com/aestheticfunction/ds-mcp#readme","bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"scripts":{"build":"tsc && npm run bundle:core","bundle:core":"esbuild node_modules/@aestheticfunction/dspack-gen/dist/core/index.js --bundle --format=esm --platform=node --external:ajv --outfile=dist/vendor/dspack-gen-core.js","start":"node dist/index.js","pretest":"npm run build","test":"node --test dist/tests/*.test.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","ajv":"^8.17.0","minimist":"^1.2.8","zod":"^3.25 || ^4.0"},"devDependencies":{"@aestheticfunction/dspack-gen":"git+https://github.com/aestheticfunction/dspack-gen.git#c5bfd6de979f811466c6ba1e1c0f978defc4236f","@types/minimist":"^1.2.5","esbuild":"^0.25.0","@types/node":"^20.0.0","typescript":"^5.5.0"},"gitHead":"235b1dd15cefc3a51e06df0cdae5eba0f799210f","types":"./dist/index.d.ts","_id":"@aestheticfunction/ds-mcp@0.3.2","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-Do/xjKhFtbmxih/xKVhC3QVq8mMn2fIvAahbx+jHK2HC/fOLjgVAzkf6h7NnTmQdlFgQhPhP6gpJcyPfotovmw==","shasum":"2bb08907281fec13aed338db5f59f4500c0854db","tarball":"https://registry.npmjs.org/@aestheticfunction/ds-mcp/-/ds-mcp-0.3.2.tgz","fileCount":112,"unpackedSize":546317,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aestheticfunction%2fds-mcp@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCA6E2rE9xfzjI/GJUKOTUo3f7i/r3N89QqU+6NtTtvEgIgBKH9CkMQMxLUxIkDVgwyXsLqtSy9NkPkyQYfy7R788I="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b9cca35-e8b3-4ba5-8796-058ffb173056"}},"directories":{},"maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ds-mcp_0.3.2_1784743790854_0.5411486559694523"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T22:14:25.319Z","modified":"2026-07-22T18:09:51.384Z","0.1.0":"2026-05-21T22:14:25.611Z","0.2.0":"2026-05-27T02:00:34.083Z","0.3.0":"2026-07-07T11:22:08.657Z","0.3.1":"2026-07-14T20:13:48.829Z","0.3.2":"2026-07-22T18:09:51.039Z"},"bugs":{"url":"https://github.com/aestheticfunction/ds-mcp/issues"},"author":{"name":"Ryan Dombrowski"},"license":"Apache-2.0","homepage":"https://github.com/aestheticfunction/ds-mcp#readme","keywords":["mcp","model-context-protocol","mcp-server","design-system","design-systems","design-tokens","ai-agents","coding-agents","llm","llm-tools","developer-tools","frontend","ui-components","component-library","dspack"],"repository":{"type":"git","url":"git+https://github.com/aestheticfunction/ds-mcp.git"},"description":"MCP server for exposing dspack design system corpora to AI coding agents","maintainers":[{"name":"ryandmonk","email":"rdombrowski@gmail.com"}],"readme":"# ds-mcp\n\n**Stop asking AI agents to guess your design system. Give them a contract they can query.**\n\n---\n\n## The problem\n\nAI coding agents generate UI by guessing: they invent component names,\nfabricate props, hardcode color values, and ignore the patterns your team\nhas documented. Every generated file needs manual correction to match your\ndesign system.\n\n## The solution\n\nds-mcp is a read-only [MCP](https://modelcontextprotocol.io/) server that\nloads a [dspack](https://github.com/aestheticfunction/dspack) file — a\nportable JSON description of your design system — and exposes its contents\nas tools that agents can query before generating code. The agent asks\nquestions; ds-mcp answers with your team's actual tokens, components,\nprops, patterns, and anti-patterns.\n\n## See it in action\n\nds-mcp serves a dspack contract to an agent; the same contract is then compiled ([dspack-emit](https://github.com/aestheticfunction/dspack-emit)) and rendered (A2UI). The query step starts here.\n\nhttps://github.com/user-attachments/assets/510a781b-4214-49b3-b997-9cbecdc36961\n\n## What this is\n\n- A read-only MCP server. It retrieves design system information. It does\n  not generate code, write files, or make network calls.\n- The reference implementation of the [dspack specification](https://github.com/aestheticfunction/dspack) (supports v0.1–v0.4).\n\n## What this is not\n\n- A code generator. Code generation is the agent's job.\n- A Figma sync tool. dspack files are authored and versioned by your team.\n- A runtime dependency. ds-mcp runs alongside your MCP client during\n  development, not in production.\n\n## How it works\n\n1. **Create a dspack file** describing your design system's tokens,\n   components, patterns, and anti-patterns. (Use the included\n   [shadcn/ui v0.4 example](examples/shadcn-ui-v04.dspack.json) to try\n   it now — it carries the governance blocks the generation tools need.\n   The [v0.2](examples/shadcn-ui-v02.dspack.json) and\n   [v0.1](examples/shadcn-ui.dspack.json) examples remain for the minimal\n   format. Have a React + Tailwind/shadcn codebase? You can\n   generate a starting file from it — see\n   [Don't have a dspack file yet?](#dont-have-a-dspack-file-yet) below.)\n2. **Start ds-mcp** with the dspack file. It loads the file once and\n   holds it in memory.\n3. **Connect your MCP client** (Claude Desktop, Claude Code, Cursor,\n   GitHub Copilot). The agent can now query your design system at\n   coding time.\n\n## Quick start\n\n```bash\n# 1. Install\nnpm install -g @aestheticfunction/ds-mcp\n\n# 2. Download the shadcn/ui v0.4 example dspack\ncurl -L https://raw.githubusercontent.com/aestheticfunction/ds-mcp/main/examples/shadcn-ui-v04.dspack.json \\\n  -o shadcn-ui.dspack.json\n\n# 3. Run with the downloaded file\nds-mcp --dspack ./shadcn-ui.dspack.json\n```\n\nConfigure your MCP client to connect to ds-mcp. See\n[docs/README.md](docs/README.md) for client-specific configuration examples.\n\n## Don't have a dspack file yet?\n\nIf your design system is a React + Tailwind/shadcn codebase, the\nexperimental [dspack-export](https://github.com/aestheticfunction/dspack-export)\ntool can generate a starting dspack file from it — components, props (with\ncva variant enums and defaults), color/radius tokens from your CSS custom\nproperties, dark-theme overrides, and breakpoints:\n\n```bash\ngit clone https://github.com/aestheticfunction/dspack-export\ncd dspack-export && npm install && npm run build && npm link\n\ncd /path/to/your/design-system\ndspack-export init        # detects conventions, writes a config\ndspack-export generate --config dspack-export.config.json\nds-mcp --dspack ./your-system.dspack.json\n```\n\nThe generated file is a snapshot of extractable facts. The sections that\nmake a dspack file most useful to agents — `patterns`, `antiPatterns`,\n`whenToUse`, `accessibility`, `constraints` — are deliberately left for\nyour team to author.\n\n## What agents can ask\n\n| Agent question | Tool call | Returns |\n|---|---|---|\n| What components are available? | `list-components` | Components with names, descriptions, deprecation and lifecycle status |\n| Which components are stable? | `list-components { status: \"stable\" }` | Only components with stable lifecycle status |\n| How do I use the Button component? | `get-component { id: \"button\" }` | Props, usage guidance, tokens, accessibility, composition, constraints |\n| What's the right layout for a settings form? | `get-pattern { id: \"settings-form\" }` | Components to use, guidance on control selection and layout |\n| What color token should I use for text? | `get-token { category: \"color\", name: \"foreground\" }` | Token value, description, type, tier, status, aliasOf |\n| Which tokens relate to spacing? | `search-tokens { query: \"spacing\" }` | All tokens matching \"spacing\" across names, categories, descriptions, tier |\n| What should I avoid doing? | `list-antipatterns` | Anti-patterns with reasoning, severity, and preferred alternatives |\n| What are the must-not rules? | `list-antipatterns { severity: \"must-not\" }` | Only anti-patterns with must-not severity |\n| How do I import Button in React? | `get-framework-mapping { framework: \"react\", componentId: \"button\" }` | Import path, install command, sub-component exports, guidance |\n| What overrides does the dark theme apply? | `get-theme { id: \"dark\" }` | Theme description and token override map |\n| What breakpoints should I use? | `get-layout` | Breakpoints, grid config, container sizes, spacing scale |\n\n## Tools\n\nds-mcp exposes eleven read-only tools:\n\n| Tool | Input | Description |\n|------|-------|-------------|\n| `get-token` | `{ category, name }` | Retrieve a single design token by category and name |\n| `search-tokens` | `{ query }` | Search tokens by name, category, description, type, tier, status, or aliasOf |\n| `get-component` | `{ id }` | Retrieve a full component definition including accessibility, composition, and constraints |\n| `list-components` | `{ status? }` | List all components; optionally filter by lifecycle status |\n| `get-pattern` | `{ id }` | Retrieve a documented usage pattern by ID |\n| `list-antipatterns` | `{ severity? }` | List all anti-patterns; optionally filter by severity |\n| `get-framework-mapping` | `{ framework, componentId? }` | Retrieve framework-specific information including sub-component export mappings |\n| `get-theme` | `{ id }` | Retrieve a theme definition with token overrides |\n| `get-layout` | none | Retrieve layout primitives: breakpoints, grid, containers, spacing scale |\n| `get-generation-context` | `{ intent }` | Compile a dspack 0.3/0.4 contract into generation context: system prompt, generation JSON schema, few-shot examples |\n| `validate-ui` | `{ surface, intent? }` | Lint a dspack surface against the contract's governance (gates S1/S2/S3) and return the findings |\n\n### The governed generation loop (dspack 0.3/0.4)\n\nWith a dspack 0.3/0.4 contract loaded, any MCP-connected agent becomes a\n*governed UI generator* without ds-mcp embedding a model:\n\n1. `get-generation-context { intent }` → system prompt + generation schema +\n   few-shot examples, compiled from the contract.\n2. The agent generates a dspack surface itself (it *is* the LLM).\n3. `validate-ui { surface }` → gates S1 (surface schema), S2 (contract\n   vocabulary), S3 (governance rules with rationales), independently\n   reported.\n4. The agent repairs against the findings and validates again.\n\nA `generate_ui` tool is **deliberately absent**: generation requires a model\ncall, which would break the no-network invariant — and the MCP host already\nis a model. Both tools are pure computation over the loaded contract, backed\nby `@aestheticfunction/dspack-gen/core` (that package's zero-network,\nemitter-free subpath); a boundary test scans the whole tool path for network\ncapability. Prompt steering is not enforcement: `validate-ui`'s gate S3 is\nthe guarantee.\n\ndspack-gen is a **build-time** dependency: its `core` subpath is bundled\ninto the published package (`dist/vendor/dspack-gen-core.js`) from a\ncommit-pinned devDependency, so installing ds-mcp from npm pulls nothing\nfrom git. The default posture is **tag-pinned**: the pin is the commit of\ndspack-gen's latest release tag, so the vendored core corresponds exactly\nto a published dspack-gen version. CI watches this two ways:\n`scripts/check-core-pin.mjs` fails loudly when a newer dspack-gen release\nchanges shipped `src/core` files (test files are excluded — the documented\nescape for intentional ahead-of-release pins), and the golden-context test\nbyte-compares `get-generation-context` output against dspack-gen's own\ncompiler golden. Updating governance semantics means re-pinning to the new\nrelease tag commit, `npm install`, `npm run build`, verifying the golden\ntests, and republishing ds-mcp.\n\n## Requirements\n\n- Node.js 20.0.0 or later\n- A dspack v0.1–v0.4 file (see the [dspack spec](https://github.com/aestheticfunction/dspack));\n  the generation tools require v0.3 or v0.4 (governance blocks; versions are hard-allowlisted)\n\n## Configuration\n\nds-mcp accepts the dspack file path via:\n\n1. `--dspack <path>` CLI flag (first priority)\n2. `DSPACK_PATH` environment variable (fallback)\n\nSet `DSMCP_DEBUG=true` for verbose stderr logging.\n\n## Documentation\n\n- [Installation and MCP client setup](docs/README.md)\n- [Architecture](docs/architecture.md)\n- [Demo walkthrough: shadcn/ui settings form](docs/demo-shadcn.md)\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\nbash scripts/smoke.sh\n```\n\n## Security\n\nds-mcp is architecturally read-only. It does not write files, execute\ncommands, or make network calls. Any behavior that violates these\nconstraints is a defect. The generation tools preserve the invariants: they\ncompile and lint in-process via `@aestheticfunction/dspack-gen/core` (a\nzero-network subpath), verified by a network-boundary test over the compiled\ntool path. See [SECURITY.md](SECURITY.md) for reporting instructions.\n\n## License\n\nCopyright 2026 Aesthetic Function, LLC.\n\nLicensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.\n","readmeFilename":"README.md"}