diff --git a/README.md b/README.md index b402a50..1fb820c 100644 --- a/README.md +++ b/README.md @@ -5,28 +5,19 @@ makes existing web apps agent-ready via [WebMCP](https://webmachinelearning.gith (`document.modelContext`), with a human approval gate and real-browser verification of every exposed tool. -Static site with a dependency-free German-page generator: HTML, CSS, JavaScript, -`robots.txt` and `sitemap.xml` are served directly. -English default with a client-side German toggle. `/de/` is the crawlable German -variant — regenerate it with `python3 build-de.py` after editing `index.html` -and commit both files (hreflang pairs live in both pages and `sitemap.xml`). +This repository contains the static site. It uses plain HTML, CSS and JavaScript, +plus dependency-free generators for derived files. Routes: | Path | Purpose | |---|---| -| `/` · `/de/` | start page (bilingual copy, `/de/` generated from `index.html`) | -| `/webmcp-agent-skill/` | the category page: **its title and `

` must keep the phrase "WebMCP agent skill"** — `webmcpify` is a coined single token and cannot rank for it. Bilingual in place, no separate `/de/` variant, so it is not part of `build-de.py`. Per-runtime install instructions live here. | -| `/docs/` | technical entry point: coverage targets, evidence-aware resume, scoped verification and dated source boundaries | -| `/docs/site-tools/` | dated ChatGPT Site tools setup and troubleshooting guide; official claims must stay sourced | +| `/` · `/de/` | Start page in English and German | +| `/webmcp-agent-skill/` | WebMCP agent skill overview and installation instructions | +| `/docs/` | Technical documentation | +| `/docs/site-tools/` | ChatGPT Site tools setup and troubleshooting guide | | `/imprint.html` · `/privacy.html` | legal pages (`noindex`) | -`tests/pages.test.mjs` guards the parts that silently rot: the consent surface on -every page, a self-canonical per indexable page, the category phrase on -`/webmcp-agent-skill/`, that the start and documentation pages form a linked -tree, that every public route remains in the sitemap, and that every `FAQPage` -schema answer still exists in the visible copy of its page. - Production: https://webmcpify.at Google Analytics 4 measurement is documented in @@ -34,43 +25,38 @@ Google Analytics 4 measurement is documented in banner (Statistics / Marketing); the compliance record lives in [`docs/LEGAL_COMPLIANCE_PLAN.md`](docs/LEGAL_COMPLIANCE_PLAN.md). -Run its dependency-free contract tests with `node --test 'tests/*.test.mjs'`. +## Development -## Agent surface +After editing `index.html`, regenerate and commit the German page: -The site is itself agent-ready, in the three layers a WebMCP integration can have: +```sh +python3 build-de.py +``` -- **Imperative** — `webmcp/tools.js` holds the tool contracts (`get_install_command`, - `get_pipeline_overview`, `get_faq`, `set_language`) as pure data; - `webmcp/site-tools.js` registers them via `document.modelContext` with the - vendored runtime (`webmcp/webmcpify.js`). -- **Declarative** — the install form (`#install-picker`) carries `toolname`, - `tooldescription`, `toolautosubmit` and a `required` select with - `toolparamdescription`, so `show_install_command` exists without JavaScript - registration. Agents and humans go through the same submit handler; without - scripting the control row is hidden and every install route is listed as text. -- **Pre-visit discovery** — [`.well-known/webmcp.json`](.well-known/webmcp.json), - served at `/.well-known/webmcp` (nginx alias, `application/json`) and advertised - from every page via `` plus an RFC 8288 `Link` response header. - The WebMCP spec defines **no** manifest format; this follows the de-facto shape - third-party crawlers and inspectors probe. Runtime registration stays - authoritative: the manifest is **generated** — run `node build-manifest.mjs` and - commit the result after changing any tool contract; the tests fail if the - committed file is stale or disagrees with the form. +After changing a tool contract, regenerate and commit the discovery manifest: -## Deploy +```sh +node build-manifest.mjs +``` + +Run the dependency-free contract tests with: -Merging to `main` deploys automatically. `.github/workflows/site.yml` runs the contract -tests and the generated-file check on every PR, then on every push to `main`: +```sh +node --test 'tests/*.test.mjs' +``` -1. pulls `main` into the docroot on the host through a restricted deploy key, whose - forced command only runs `git pull --ff-only` and prints the deployed `HEAD`; -2. fails unless the deployed commit contains the pushed one; -3. verifies `https://webmcpify.at/` (200 + HSTS) and every public route. +## Agent surface + +The site is itself agent-ready, in the three layers a WebMCP integration can have: -Host: `tuejon.at`, docroot `/opt/webmcpify` (clone of `main`, no build step), nginx vhost -`/etc/nginx/sites-available/25-webmcpify.conf` (TLS via Let's Encrypt/certbot, -http→https and www→apex 301s, HSTS). Jobs run on the repo's self-hosted `tuejon-ci` -runner and skip pull requests from forks. +- **Imperative** — tool contracts in `webmcp/tools.js` are registered through + `document.modelContext` by `webmcp/site-tools.js`. +- **Declarative** — the install form exposes an equivalent tool through HTML + attributes and keeps the same workflow available without scripting. +- **Pre-visit discovery** — [`.well-known/webmcp.json`](.well-known/webmcp.json) + advertises the available tools to compatible crawlers and inspectors. + +## Deploy -Manual fallback (same effect as the pipeline): `ssh tj@tuejon.at 'cd /opt/webmcpify && git pull --ff-only'`. +Pull requests run the contract tests and generated-file checks. Merges to `main` +deploy automatically and verify the public routes.