A developer-owned personal signal layer for people and agents.
Antenna collects reviewed sources into owner-scoped collections. An installable Preact app presents, arranges, and plays them as a slideshow; MCP lets an agent inspect the same governed data and propose approved changes. A Cloudflare Worker remains authoritative for auth, source policy, persistence, planning, and connector dispatch.
Agents are more useful when they can read current, trustworthy context without copy-and-paste. Antenna is aimed at developers who are comfortable asking an agent to configure a signal or implement and deploy a missing connector:
- every value includes its source and freshness
- private, shared-link, and public reads are enforced server-side
- connectors are pure adapters with explicit configuration schemas
- unsupported requests become setup requests instead of unsafe arbitrary fetches
- MCP clients use the same ownership and policy boundaries as the browser
- the PWA retains saved card arrangement, slideshow, offline presentation, and source/status detail
MCP is the primary signal-authoring surface. The browser composer is a small fresh-account fallback, not a no-code connector marketplace.
Antenna is an early open-source release intended for self-hosting and experimentation. Private collections and owner-scoped MCP access are the primary surfaces. Review the security model and source-policy contract before operating a public instance.
- Cloudflare Workers, D1, R2, Durable Objects, Analytics Engine, and Assets
- Hono, Better Auth, Drizzle ORM, and Zod
- Preact, Vite, Tailwind CSS, and Playwright
- TypeScript MCP server for local stdio and hosted HTTP access
Requirements:
- Node.js 22 or later
- npm
- Graphviz for diagram verification
- a Google OAuth client for interactive sign-in
cp .env.example .env
cp apps/worker/.dev.vars.example apps/worker/.dev.vars
npm ci
npm run db:migrate:local --workspace=apps/worker
npm run build
npm run dev --workspace=apps/workerThe local Worker runs at http://localhost:8787. Set the Google OAuth redirect
URI to http://localhost:8787/api/auth/callback/google.
For a test-only session that does not use Google OAuth, follow the E2E setup in
CONTRIBUTING.md. The bypass is ignored whenever
NODE_ENV=production.
Antenna is infrastructure-dependent and intentionally does not ship a production deployment target. Before deploying:
- Create your own D1 database and R2 bucket.
- Replace the placeholder resource identifiers in
apps/worker/wrangler.toml. - Set the Worker URL and optional custom route.
- Configure Google OAuth and the secrets documented in docs/SECRETS.md.
- Apply D1 migrations, build the web and MCP packages, then deploy.
See docs/SELF_HOSTING.md for the complete sequence.
apps/worker— HTTP API, auth, persistence, cron dispatch, source gatesapps/web— Preact single-page applicationapps/mcp— MCP server and token CLIpackages/connectors— pure source adapterspackages/registry— connector templates and source policypackages/shared— shared wire types and validation schemastests/e2e— Playwright browser testsdocs/diagrams— Graphviz sources and rendered architecture diagrams
npm run verify
npm run test:contracts
npm run test:e2e
npm run check:bundle
npm run audit:securitynpm run verify checks formatting, documentation links, import boundaries,
lint, types, generated skill content, MCP build smoke tests, diagrams, prompt
parity, and unit tests.
Please report vulnerabilities privately as described in SECURITY.md. Do not open a public issue for a suspected vulnerability.
MIT. See LICENSE.
