{"_id":"@a2uicatalog/mcp","_rev":"4-475847512fd5962083967ae716ce84c8","name":"@a2uicatalog/mcp","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@a2uicatalog/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","a2ui","ui-generation","claude","agent","google-apps-script"],"author":{"name":"Curtis Krygier"},"license":"MIT","_id":"@a2uicatalog/mcp@0.1.0","maintainers":[{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"}],"homepage":"https://a2uicatalog.ai","bugs":{"url":"https://github.com/a2uicatalog/a2ui/issues"},"bin":{"a2uicatalog-mcp":"server.mjs"},"dist":{"shasum":"776d3c714c9111e70e5bcc16595f7b62fe8bdf0c","tarball":"https://registry.npmjs.org/@a2uicatalog/mcp/-/mcp-0.1.0.tgz","fileCount":11,"integrity":"sha512-2bZKVnWhxoPXJXSoXaOoq7a3qlJwMlDYHm+12eZeWGFvMC92tnBgwQuCDb5+a3iZb3BjvCsZlNq0tNEAnLU5IQ==","signatures":[{"sig":"MEUCIQDwUA1TUXGVc33IgzFEhp6CTbbvU6mQnvO2GgpMuY5HdgIgDxEdjEGhu4Y9QdmbYQY6AyiKIMqEdVUon0tlfx71GAc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":623913},"type":"module","engines":{"node":">=18"},"gitHead":"9243e26b5a4fd1be378464d665d623e825905497","scripts":{"demo":"node demo.mjs","test":"node test.mjs","sync-data":"node scripts/sync-data.mjs","prepublishOnly":"npm run sync-data && npm test"},"_npmUser":{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"},"repository":{"url":"git+https://github.com/a2uicatalog/a2ui.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"Local MCP server for the A2UI Atomic Catalog: browse the 474-atom vocabulary, validate a payload (hallucinated atom = parse error, not a broken screen), get a shareable preview URL, and deploy a training.md to your own Google Apps Script. Pure-local for b","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1785487596746_0.9618713836532637","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@a2uicatalog/mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","a2ui","ui-generation","claude","agent","google-apps-script"],"author":{"name":"Curtis Krygier"},"license":"MIT","_id":"@a2uicatalog/mcp@0.1.1","maintainers":[{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"}],"homepage":"https://a2uicatalog.ai","bugs":{"url":"https://github.com/a2uicatalog/a2ui/issues"},"bin":{"a2uicatalog-mcp":"server.mjs"},"dist":{"shasum":"e05094e24941be9eeca1ddbb631daf8ea692075a","tarball":"https://registry.npmjs.org/@a2uicatalog/mcp/-/mcp-0.1.1.tgz","fileCount":11,"integrity":"sha512-StOtl8XRmpd9OVOc/IWWQ2eRa1h3Y0kZKQgUtMkDfB1TmgQBEdAAbGeGYpXUsic4k+mFTfEkFIE0SaN5OVhrLA==","signatures":[{"sig":"MEYCIQC15Rg5ITWEClKUp5TYS4hFlJC0T1CUOUyEgj2sIzJSxQIhAKsH2D4xFzDXsdcHjqOZe/tKPS/YfvVYnZMw2NTzDopo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":624951},"type":"module","engines":{"node":">=18"},"gitHead":"5b049eae14ce86402f3c4265b0d3deebbfbc377d","scripts":{"demo":"node demo.mjs","test":"node test.mjs","sync-data":"node scripts/sync-data.mjs","prepublishOnly":"npm run sync-data && npm test"},"_npmUser":{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"},"repository":{"url":"git+https://github.com/a2uicatalog/a2ui.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"Local MCP server for the A2UI Atomic Catalog: browse the 474-atom vocabulary, validate a payload (hallucinated atom = parse error, not a broken screen), get a shareable preview URL, and deploy a training.md to your own Google Apps Script. Pure-local for b","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1785488285505_0.31267654893245633","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@a2uicatalog/mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","cli","a2ui","ui-generation","claude","agent","google-apps-script"],"author":{"name":"Curtis Krygier"},"license":"MIT","_id":"@a2uicatalog/mcp@0.2.0","maintainers":[{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"}],"homepage":"https://a2uicatalog.ai","bugs":{"url":"https://github.com/a2uicatalog/a2ui/issues"},"bin":{"a2ui":"cli.mjs","a2uicatalog-mcp":"server.mjs"},"dist":{"shasum":"080edbc5cdeda360a2b6d20ca75e4cd9a9d5eda1","tarball":"https://registry.npmjs.org/@a2uicatalog/mcp/-/mcp-0.2.0.tgz","fileCount":13,"integrity":"sha512-qEnorwgoUhkn0jrB1s0RBAR/Ev5xBdFNMq8PR0qkHijX/HKUOYdig2L43LtFk3NU5Rj4TpK47/6e/kG8ojtUGw==","signatures":[{"sig":"MEUCIBT5tFC3IRjLGIoQsA98TMnw80DJEccqlXfVIlg3LjpmAiEAnc6wyZfJqN7QDDFbpQ348Y9Ez79Gs7v/O/eZZKxyw/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":639359},"type":"module","engines":{"node":">=18"},"gitHead":"da0a13a67ec4e177f9adabbdb24b7d6ee6cbb5ea","scripts":{"demo":"node demo.mjs","test":"node test.mjs && node cli-test.mjs","sync-data":"node scripts/sync-data.mjs","prepublishOnly":"npm run sync-data && npm test"},"_npmUser":{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"},"repository":{"url":"git+https://github.com/a2uicatalog/a2ui.git","type":"git","directory":"mcp"},"_npmVersion":"11.6.2","description":"CLI + local MCP server for the A2UI Atomic Catalog. Render an A2UI payload to HTML with no account and no MCP client (`npx @a2uicatalog/mcp render page.json`), browse and validate the 474-atom vocabulary offline, or run the local MCP server for Claude/Cur","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.2.0_1785701294940_0.8264575130457859","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@a2uicatalog/mcp","version":"0.2.1","description":"CLI + local MCP server for the A2UI Atomic Catalog. Render an A2UI payload to HTML with no account and no MCP client (`npx -p @a2uicatalog/mcp a2ui render page.json`), browse and validate the 474-atom vocabulary offline, or run the local MCP server for Cl","type":"module","bin":{"a2uicatalog-mcp":"server.mjs","a2ui":"cli.mjs"},"engines":{"node":">=18"},"license":"MIT","author":{"name":"Curtis Krygier"},"homepage":"https://a2uicatalog.ai","repository":{"type":"git","url":"git+https://github.com/a2uicatalog/a2ui.git","directory":"mcp"},"bugs":{"url":"https://github.com/a2uicatalog/a2ui/issues"},"keywords":["mcp","model-context-protocol","cli","a2ui","ui-generation","claude","agent","google-apps-script"],"scripts":{"test":"node test.mjs && node cli-test.mjs","demo":"node demo.mjs","sync-data":"node scripts/sync-data.mjs","prepublishOnly":"npm run sync-data && npm test"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.0"},"gitHead":"ae0db07b4d233290bcf8dec311e0d5a402b44a19","_id":"@a2uicatalog/mcp@0.2.1","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-/Yo8SDkY7BAUkOKnwFp4jTYVjjF/NZ7HVdbYazL/xhqR70+Fw6sE8rMqxP4GFQWKn/GH07+k1aCLiFre20Tbng==","shasum":"ddf328bab58605b59a9267992c5179003ceaa4da","tarball":"https://registry.npmjs.org/@a2uicatalog/mcp/-/mcp-0.2.1.tgz","fileCount":13,"unpackedSize":639918,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGZvO/SuCsIlmbqs1HRurUBnrcS3E9oka0i1q6ktZz7tAiEAs/X7WRx9+QGN9Exm3WKtpPi54Ak7j2ijQYSBbS+i/vU="}]},"_npmUser":{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"},"directories":{},"maintainers":[{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.2.1_1785701611692_0.561718284578411"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-31T08:46:36.524Z","modified":"2026-08-02T20:13:31.996Z","0.1.0":"2026-07-31T08:46:36.890Z","0.1.1":"2026-07-31T08:58:05.656Z","0.2.0":"2026-08-02T20:08:15.097Z","0.2.1":"2026-08-02T20:13:31.857Z"},"bugs":{"url":"https://github.com/a2uicatalog/a2ui/issues"},"author":{"name":"Curtis Krygier"},"license":"MIT","homepage":"https://a2uicatalog.ai","keywords":["mcp","model-context-protocol","cli","a2ui","ui-generation","claude","agent","google-apps-script"],"repository":{"type":"git","url":"git+https://github.com/a2uicatalog/a2ui.git","directory":"mcp"},"description":"CLI + local MCP server for the A2UI Atomic Catalog. Render an A2UI payload to HTML with no account and no MCP client (`npx -p @a2uicatalog/mcp a2ui render page.json`), browse and validate the 474-atom vocabulary offline, or run the local MCP server for Cl","maintainers":[{"name":"a2uicatalog","email":"a2uicatalog@krygier.co.uk"}],"readme":"# a2uicatalog-mcp — build live Google Apps Script web apps from your agent\n\n**A2UI over MCP. Author, validate, deploy — no code.**\n\nA local MCP server that gives any MCP-capable agent (Claude Desktop, Cursor, …)\na first-class Apps Script dev loop: browse the A2UI vocabulary, validate a wired\npayload, and **deploy it to a live Google Apps Script web app** — returning a URL.\n\nIt's the agent-native way to build living, stateful GAS web apps: the agent\nspeaks the vocabulary, the parser catches mistakes (a hallucinated atom is a\nparse error, not a broken screen), and `build_app` ships it.\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `list_atoms` | Browse the atom vocabulary (`a2ui-atoms-v1`, compact descriptions) |\n| `validate_payload` | Structural validation against **both** catalogs — atoms (`a2ui-atoms-v1`) + state primitives (`a2ui-state-v1`). No execution. |\n| `encode_url` | gzip+base64url a payload into a renderer `?p=` preview URL |\n| `get_ui` | Serve a reference wired A2UI surface as an `EmbeddedResource` (`application/a2ui+json`) |\n| **`build_app`** | **Deploy a `training.md` to YOUR Apps Script → live GAS web app URL** |\n\nPlus MCP **Resources** (`a2ui://<name>`) exposing reference wired UIs.\n\n## Security — BYO, local, no shared secret\n\nThis is a **local dev tool**. It deploys to **your own** Apps Script using\n**your own** token, read from your environment — never bundled, never a shared\nhosted server. Nothing leaves your machine except the authenticated call to your\nown Build API.\n\n- `validate_payload` / `list_atoms` / `encode_url` are pure-local (no network, no secret).\n- `build_app` requires two env vars **you** set, pointing at **your** deployment.\n\n## Install\n\n```bash\nnpm install -g @a2uicatalog/mcp\n```\n\n`list_atoms` / `get_atom_schema` / `validate_payload` / `encode_url` / `get_ui`\nwork immediately — no setup, no account. `build_app` (deploy to your own\nApps Script) needs the two env vars below.\n\nAdd to Claude Desktop (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"a2ui\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@a2uicatalog/mcp\"],\n      \"env\": {\n        \"BUILD_API_URL\": \"https://script.google.com/macros/s/<your-api-deployment>/exec\",\n        \"BUILD_API_TOKEN\": \"<your token>\"\n      }\n    }\n  }\n}\n```\n\nSet your Build API endpoint + token (from your own A2UI Apps Script deployment,\nonly needed for `build_app`):\n\n```bash\nexport BUILD_API_URL=\"https://script.google.com/macros/s/<your-api-deployment>/exec\"\nexport BUILD_API_TOKEN=\"<your A2UI_API_TOKEN>\"   # minted via ?api_setup=1 on your deployment\n```\n\n### Developing from a checkout of this repo\n\n```bash\ncd mcp && npm install\n```\n\nThen point `claude_desktop_config.json`'s `command`/`args` at\n`node /absolute/path/to/mcp/server.mjs` instead of the `npx` form above.\n\n## The loop\n\n1. `list_atoms` — the agent learns the vocabulary\n2. compose a `training.md` (or a wired payload)\n3. `validate_payload` — catch atom/wire errors before deploying\n4. `build_app` — **live Apps Script URL back**\n\nStart with the GAS surface; the same payloads render across web, Meet, email,\nand PDF — portability is the expansion, not a rewrite.\n\n## Status\n\nv0.1.0 — first public release. GAS-first, local stdio, fully self-contained\n(bundles its own catalog snapshot, no network for the read-only tools).\nCatalogs: `a2ui-atoms-v1` (474 atoms) + `a2ui-state-v1` (25 primitives).\n","readmeFilename":"README.md"}