{
  "markdown": "# ⚡ WebMCP Today\n\nWebMCP Today is a registry for declarative packages that add WebMCP tools to\nsites that do not expose them. A package describes a site's tools and the API\nrequests they use. The browser extension installs packages locally and\nregisters their tools on matching pages.\n\nThe registry is live at [webmcp.today](https://webmcp.today).\n\n## OpenAI WebMCP Challenge: Judge Testing\n\nThe live site now registers four read-only WebMCP tools directly from\n`webmcp.today`. These tools require no WebMCP Today extension or local bridge.\n\n### Test in ChatGPT desktop\n\n1. Use an up-to-date ChatGPT desktop app and a model with WebMCP enabled.\n2. Open [https://webmcp.today](https://webmcp.today) in ChatGPT's in-app browser.\n3. Ask ChatGPT to use the site's tools with one of the sample prompts below.\n\n### Test in Chrome 149+\n\n1. Open `chrome://flags/#enable-webmcp-testing`, enable WebMCP testing, and relaunch Chrome.\n2. Open [https://webmcp.today](https://webmcp.today).\n3. Use Chrome's WebMCP-capable agent or tool inspector to discover and invoke the site tools.\n\n### Site tool inventory\n\n| Tool                | Purpose                                                                                                           |\n| ------------------- | ----------------------------------------------------------------------------------------------------------------- |\n| `search_packages`   | Search all currently servable registry packages by package metadata or tool text, with optional domain filtering. |\n| `get_package`       | Return the latest served package document for a package ID.                                                       |\n| `compare_packages`  | Compare two to four packages, including common and package-unique tool names.                                     |\n| `verify_site_tools` | Show which registry packages match a URL and the tool descriptors those packages would expose there.              |\n\nSample prompts:\n\n- \"Search WebMCP Today for Reddit packages, then show me the full details of the best match.\"\n- \"Find packages for Reddit and Google, then compare the best match for each.\"\n- \"Verify which registry-provided tools are available for https://news.ycombinator.com/news.\"\n\n### Eligibility and self-sufficiency\n\nThe annotated `pre-webmcp-challenge` tag marks commit `60e3660`, the baseline\nbefore challenge-specific work. [NEW-WORK.md](NEW-WORK.md) is the dated changelog\nfor work after that tag.\n\nThe judge path is self-sufficient within this repository: the Next.js web app\nuses its own public API, database, schema package, and curated seed package. It\ndoes not load code or package data from `webmcp-packages` or another repository\nat runtime.\n\nLicensing remains split as documented in [License](#license): the server and\ndatabase are **AGPL-3.0-only** under the root `LICENSE`; the reusable schema,\nengine, MCP bridge, curated packages, skill, and extension carry their own\n**MIT** licenses.\n\n## Agent Skill\n\nInstall the public skill for researching, creating, validating, and safely testing a\nWebMCP Today package:\n\n```bash\nnpx skills@1.5.22 add robertn702/webmcp-today --skill create-webmcp-package\n```\n\nThe skill creates `webmcp-package.json` and stops before registry publication.\n\n## Packages\n\n| Path              | What                                                                                                        |\n| ----------------- | ----------------------------------------------------------------------------------------------------------- |\n| `packages/schema` | `@webmcp-today/schema` — published zod package format                                                       |\n| `packages/engine` | `@webmcp-today/engine` — API execution engine                                                               |\n| `packages/db`     | Drizzle + Neon schema and client                                                                            |\n| `packages/mcp`    | `@webmcp-today/mcp-bridge` — published public-beta registry MCP server + local bridge for live WebMCP tools |\n| `apps/web`        | Next.js registry UI + public REST API                                                                       |\n| `apps/extension`  | WXT extension: package lookup + WebMCP tool injection                                                       |\n\n## Quickstart\n\n```bash\nbun install\nbunx turbo run build --filter=\"@webmcp-today/mcp-bridge...\"\nbun run typecheck && bun run lint && bun run test\n\n# web (needs apps/web/.env — see .env.example)\ncd packages/db && bun run db:migrate   # fresh local Neon only\ncd apps/web && bun run dev             # http://localhost:3000\nbun run scripts/seed.ts                # optional: seed the curated packages\n\n# extension (Chrome 149+; enable chrome://flags/#enable-webmcp-testing only for Chrome native-agent discovery)\ncd apps/extension && bun run dev\n```\n\nThe extension's local bridge fallback works without the WebMCP testing flag. Enable\nthe flag when you want Chrome's native agent to discover the extension's tools.\n\n## Development\n\n**Prerequisites:** `bun@1.3.14` (pinned in root `package.json` `packageManager`), Node for Next.js/WXT and some CLIs. The local MCP bridge requires Node 20 or newer or Bun.\n\n**Setup:**\n\n```bash\nbun install\nbunx turbo run build --filter=\"@webmcp-today/mcp-bridge...\" # creates the opencode.json MCP entrypoint\ncp apps/web/.env.example apps/web/.env   # then fill real values\n```\n\n`apps/web/.env` needs `DATABASE_URL` (Neon), a per-environment `BETTER_AUTH_SECRET` (`openssl rand -base64 32`), a shared `OAUTH_PROXY_SECRET` for local/Preview/Production (`openssl rand -base64 32`), the development GitHub OAuth App credentials (callback `http://localhost:3000/api/auth/callback/github`), and `BETTER_AUTH_URL=http://localhost:3000`. Leave `OAUTH_PROXY_PRODUCTION_URL` unset locally; in Vercel Preview and Production it is `https://webmcp.today` and routes OAuth through the production GitHub OAuth App callback.\n\n```bash\nbun run --filter @webmcp-today/db db:migrate   # or cd packages/db && bun run db:migrate — applies Drizzle migrations to Neon\n# schema changes: bun run --filter @webmcp-today/db db:generate && db:migrate (db:push for quick prototyping)\n\nbun run --filter @webmcp-today/web db:seed     # or cd apps/web && bun run db:seed — runs scripts/seed.ts, seeds curated packages\n```\n\nThese are ordinary fresh-database setup commands. They do not reset an existing\ndatabase.\n\n**Historical migration baseline:**\n`packages/db/migrations/0000_init.sql` is the initial schema baseline and will\nnot replay against an existing deployed Neon database. Never reset or recreate\nproduction data to apply it. For schema changes, generate and review a new\nDrizzle migration and apply it with `db:migrate`. Run `db:seed` only for fresh\nor local databases until it is idempotent and version-aware; use a reviewed\nproduction procedure for curated seed changes.\n\n**Running locally:**\n\n- Web: `cd apps/web && bun run dev` → `http://localhost:3000` (Next.js). Extension's default registry URL points here.\n- Extension: `cd apps/extension && bun run dev` → WXT dev server on `http://localhost:5173`, launches a dedicated Chrome profile at `.wxt/chrome-profile/` with `--enable-features=WebMCP,WebMCPTesting` force-enabled (`chrome://flags` still shows \"Default\" — check `chrome://version`). One instance only — second crashes on profile lock and corrupts `.output/`. Model Context Tool Inspector is installed once into that profile and persists.\n- Local bridge: configure the native host in `packages/mcp/README.md`, then start `node packages/mcp/dist/index.js`. Its MCP tools invoke live WebMCP tools in the selected normal Chrome tab without Chrome DevTools MCP, a remote-debugging port, or `chrome.debugger`. The built-in fallback works without the WebMCP testing flag; enable it only for Chrome's native agent to discover the tools.\n- Ports: web 3000 / WXT 5173. Find strays with `lsof -nP -i :3000 -i :5173`; killing a bun wrapper does NOT kill its node child.\n\n**Quality gates:** `bun run typecheck && bun run lint && bun run test` before every commit — same as CI (`.github/workflows/ci.yml` via `oven-sh/setup-bun@v2` `1.3.14` + `--frozen-lockfile`). Pre-commit runs `husky` + `lint-staged` (eslint + prettier on staged source, prettier on json/md/css/yaml) and enforces `CLAUDE.md -> AGENTS.md` symlink drift.\n\n**Deeper context:** root `AGENTS.md` (stack, conventions, decisions log, cross-cutting gotchas) and nested `apps/web/AGENTS.md` (package-install registry model, served truth, env/t3-env notes) + `apps/extension/AGENTS.md` (dev browser, silent-fallback trap, selector-rot recipe).\n\n## License\n\nSplit, so the pieces worth adopting stay permissive:\n\n- **AGPL-3.0-only** — the server: `apps/web` and `packages/db` (root `LICENSE`). Run a modified copy as a network service and you owe your users the source.\n- **MIT** — everything built to be adopted freely: `packages/schema` (package format), `packages/engine` (execution engine), `packages/mcp` (MCP server), `packages/curated-packages` (curated packages), and `apps/extension` (browser extension). Each carries its own `LICENSE`.\n\nCommunity-submitted packages are not code and are not covered by either license. Publishing one grants the registry a permanent license to host and redistribute it, and offers it onward under **CC0 1.0** — see [the terms](https://webmcp.today/terms) (`apps/web/app/(registry)/terms`). `packages/curated-packages` is the first-party exception: it ships as MIT source.\n\nContributions are covered by the agreement in [CONTRIBUTING.md](CONTRIBUTING.md).\n",
  "bytes": 9575,
  "sha": "4725e7e851b30cbf2b920168d3c69f4b76b22a768accb24d8c4d86fd1004513b",
  "repo_slug": "robertn702/webmcp-today",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_robertn702_webmcp_today_01f7ddb2/readme"
}