{"_id":"@feelreef/mcp","_rev":"3-95cbc1c0ade2accebcfa83d2b9c782cd","name":"@feelreef/mcp","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@feelreef/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","feelreef","sitetile","static-site","ai"],"license":"MIT","_id":"@feelreef/mcp@0.1.0","maintainers":[{"name":"cvernet","email":"hi@cver.net"}],"homepage":"https://feelreef.com","bugs":{"url":"https://github.com/CVERInc/reef/issues"},"bin":{"feelreef-mcp":"src/index.js"},"dist":{"shasum":"f496cfa980bc8a407ec3c929e492039e5ca8d411","tarball":"https://registry.npmjs.org/@feelreef/mcp/-/mcp-0.1.0.tgz","fileCount":19,"integrity":"sha512-uha/KFYakTzkcEcRAob98FHsmfDpyjk1B310HRl2EH49fn3Z+lVR/CJfRG4dz+0EsK76OGbf6f3pg+f0sX8YAw==","signatures":[{"sig":"MEUCIQDrYK2B20GjZ9/sjyHQ3+BzZBxspOpF8CWqtLYZ9E92AQIgRi7uBMhb720kT1/zwnIkw3HHOCN4sx/kkn3fznoRORc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204782},"type":"module","engines":{"node":">=20"},"gitHead":"2334ea5ba95f5f9a5935ccfdadebc5a9978419a0","scripts":{"test":"node --test tests/*.test.js","start":"node src/index.js","vendor":"./scripts/vendor-tile.sh","prepack":"./scripts/vendor-tile.sh"},"_npmUser":{"name":"cvernet","email":"hi@cver.net"},"repository":{"url":"git+https://github.com/CVERInc/reef.git","type":"git","directory":"apps/reef-mcp"},"_npmVersion":"10.9.8","description":"REEF with MCP — edit a feelreef native site's markdown from any MCP client: read the page grammar, save to a preview, inspect what you built, publish when you mean to. The AI-first way to build on feelreef.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1784099086978_0.503426105178201","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@feelreef/mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","feelreef","sitetile","static-site","ai"],"license":"MIT","_id":"@feelreef/mcp@0.1.1","maintainers":[{"name":"cvernet","email":"hi@cver.net"}],"homepage":"https://feelreef.com","bin":{"feelreef-mcp":"src/index.js"},"dist":{"shasum":"69c6c6c2ae07b1667681f977cdcf49b3d59525ae","tarball":"https://registry.npmjs.org/@feelreef/mcp/-/mcp-0.1.1.tgz","fileCount":20,"integrity":"sha512-Ro5mGOc7JsPrDtQwZpBfGM9nG5FaqiwRqBZDhNEqbLSO1GfF/wM4HmOT9yoR6stcs+UYTLtfDwMAMXEjQ7pceA==","signatures":[{"sig":"MEQCIF+2NPPjhA6gL6JuediP+PYPd+5S7OGqG8IkBw4X4iB/AiBzk44cy+XAo9F7uMaST6cE9EyyYgF5as9qTfbGZ4myAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220186},"type":"module","engines":{"node":">=20"},"gitHead":"0465c36049522fd84bc491f287f4620957667a89","scripts":{"test":"node --test tests/*.test.js","start":"node src/index.js","vendor":"./scripts/vendor-tile.sh","prepack":"./scripts/vendor-tile.sh","test:container":"node --test tests-container/*.test.js"},"_npmUser":{"name":"cvernet","email":"hi@cver.net"},"_npmVersion":"10.9.8","description":"REEF with MCP — edit a feelreef native site's markdown from any MCP client: read the page grammar, save to a preview, inspect what you built, publish when you mean to. The AI-first way to build on feelreef.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1784193264022_0.4449276044275512","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@feelreef/mcp","version":"0.1.2","description":"REEF with MCP — edit a feelreef native site's markdown from any MCP client: read the page grammar, save to a preview, inspect what you built, publish when you mean to. The AI-first way to build on feelreef.","type":"module","bin":{"feelreef-mcp":"src/index.js"},"engines":{"node":">=20"},"homepage":"https://feelreef.com","keywords":["mcp","model-context-protocol","feelreef","sitetile","static-site","ai"],"license":"MIT","scripts":{"start":"node src/index.js","test":"node --test tests/*.test.js","test:container":"node --test tests-container/*.test.js","vendor":"./scripts/vendor-tile.sh","prepack":"./scripts/vendor-tile.sh"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"_id":"@feelreef/mcp@0.1.2","_nodeVersion":"22.23.0","_npmVersion":"10.9.8","dist":{"integrity":"sha512-ZbYJeKNILjTF8HkxVkHAk2dzwluSZyQnYyVubbSFLtx+rlDT83Wd4MJ/X+QyAl/q9E4vb2WAh5aPeTs4PNLHsA==","shasum":"591e733c2085fb0fe6b47531fec9034d5e430cd9","tarball":"https://registry.npmjs.org/@feelreef/mcp/-/mcp-0.1.2.tgz","fileCount":20,"unpackedSize":220958,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCgJBCZI5dkrRaSIfOz7MKbaT+80TSHFF/gxiFIojDTPAIhAOC0O5u6G7HZW2nYdrWe7AOG9BvpiArvHSVFc4lrb9zu"}]},"_npmUser":{"name":"cvernet","email":"hi@cver.net"},"directories":{},"maintainers":[{"name":"cvernet","email":"hi@cver.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.2_1784254692415_0.7406463707231297"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T07:04:46.786Z","modified":"2026-07-17T02:18:12.751Z","0.1.0":"2026-07-15T07:04:47.125Z","0.1.1":"2026-07-16T09:14:24.186Z","0.1.2":"2026-07-17T02:18:12.562Z"},"license":"MIT","homepage":"https://feelreef.com","keywords":["mcp","model-context-protocol","feelreef","sitetile","static-site","ai"],"description":"REEF with MCP — edit a feelreef native site's markdown from any MCP client: read the page grammar, save to a preview, inspect what you built, publish when you mean to. The AI-first way to build on feelreef.","maintainers":[{"name":"cvernet","email":"hi@cver.net"}],"readme":"# @feelreef/mcp\n\nEdit a [feelreef](https://feelreef.com) **native site** from any MCP client — Claude, ChatGPT,\nyour own agent. Every edit lands on the site's own git repo (the source of truth), builds to a\npreview, and goes live only when you say so.\n\nThe site's content is plain markdown plus a one-line `%% sitetile: … %%` grammar in a git repo —\nan LLM's native tongue, not a wall of block JSON. So an agent connected here can *read what it\nbuilt*, not just write blindly. That's the point.\n\n```\nnpx @feelreef/mcp        # or add it to your MCP client (below)\n```\n\n> **Scope, honestly.** These tools edit a feelreef native site that **already exists** — there is\n> no create-a-site-from-nothing tool, and the hosted path for owners who aren't us is still parked\n> (`src/phase2/`). Building needs either the sitetile renderer on your machine or a runner we\n> provision per site. If you're a cold-start agent hoping to spin a site up unattended: not today.\n> Editing, reading back, previewing and publishing an existing site — that part is real and it's\n> yours. See <https://feelreef.com/for/agents>.\n\n## Install (Claude Code)\n\n```\nclaude mcp add feelreef -- npx -y @feelreef/mcp\n```\n\nPoint any MCP client at the `feelreef-mcp` binary. Editing needs nothing but Node ≥20 — the\nsitetile parser is vendored into the package, so `get_page` / `save_page` / `create_page` work on a\nfresh machine with no other checkout. **Building** (turning the repo into a deployed site) needs\neither the local sitetile renderer or a runner — see [Building](#building).\n\n## The tools\n\n| tool | what it does |\n|---|---|\n| `list_sites` | the sites this adapter can edit |\n| `add_site` / `check_site` / `remove_site` | register / preflight / unregister a site |\n| `list_pages` · `get_page` | a site's pages + posts; one page's markdown + parsed structure |\n| `describe_page_grammar` | the coral vocabulary for a page body, so you never guess a section |\n| `save_page` · `create_page` · `create_post` | validate, write, git-commit (no deploy) |\n| `inspect_page` | **see** the built page: links, images, headings + a `problems` list |\n| `site_status` | repo vs live — did my edit actually ship? |\n| `build_preview` | build the repo IR → deploy to the preview `*.pages.dev` |\n| `publish_site` | deploy to the **live domain**. Never automatic; needs `confirm:true` |\n\nNo delete tool by design: an agent that can't delete a page can't lose one.\n\n## The loop\n\n```\nget_page → (edit the markdown) → save_page → build_preview → inspect_page the *.pages.dev\n                                                                   │\n                                                     happy?  →  publish_site {confirm:true}\n```\n\n`save_page` commits to the repo but changes nothing live. `build_preview` shows the result on a\npreview URL. `publish_site` is the only thing that touches the real domain.\n\n## Building\n\n`build_preview` / `publish_site` are the same verbs wherever the build runs. The adapter picks the\npath automatically:\n\n- **Local** — on a machine with the sitetile renderer (`~/Developer/tile`), the build runs here.\n  This is the maintainer's dogfood path.\n- **Runner** — on any other machine, point the site at a reef-runner and the build\n  happens in the cloud: the adapter uploads the site's IR, the runner builds and deploys it, and\n  hands back the same honest report (a routes manifest and a read-back that the deployed URL really\n  serves *this* build). Configure it per site:\n\n  ```\n  add_site key:\"mysite\" repo:\"/path/to/site\" previewProject:\"mysite-preview\"\n           runner:{ url:\"https://<your-reef-runner>\", token:\"<token>\" }\n  ```\n\n- **Neither** — `build_preview` returns an honest error telling you to set up one of the above,\n  rather than failing cryptically.\n\nRunner access is provisioned per site today, not self-serve — ask us (hi@cver.net) and we'll\npoint one at your site. The runner's source and protocol spec live in the monorepo, which isn't\npublic yet; what ships here is the adapter that talks to it.\n\n## Adding a site\n\n`add_site` never trusts a path — it preflights the repo first (is it git, does its IR parse as\nsitetile, is there a build-fixture trap, does Cloudflare actually bind the domain) and refuses\nanything unsafe to edit. A site with a live domain + prod project is added *full* (can publish); a\nsite with only a preview project is *preview-only* (edit + preview, publish disabled until cutover).\n\n## License\n\nMIT © CVER Inc. — including the vendored sitetile parser in `vendor/`, which ships in this\ntarball and is the thing that reads and writes your markdown. Read it: that's the whole content\nmodel. (The renderer's own repo isn't public yet; the moat was never the parser — it's the loop\nquality and the running platform.)\n","readmeFilename":"README.md"}