{
  "markdown": "# Sensact\n\nSensact is a `Supabase`-hosted `remote MCP` device platform.\n\nThe goal is to let `LLM` clients such as `Codex` or `Claude` discover and invoke capabilities on user-owned devices through a standard MCP server, while `Supabase Auth` provides the OAuth 2.1 authorization flow and `Postgres + Realtime + Storage` provide the control plane.\n\n## MCP Registry Preview\n\n`Sensact` is prepared for the official MCP Registry as a `remote-only public preview` server.\n\n- Registry name: `io.github.sensact-agents/sensact`\n- Registry metadata file: [server.json](/Users/luolingfeng/Sensact/server.json)\n- Canonical repository: `https://github.com/sensact-agents/Sensact`\n- Public preview MCP URL: `https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp`\n- Public preview protected resource metadata: `https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp/.well-known/oauth-protected-resource`\n- Public preview authorization server metadata: `https://helavgrvwipmdvyejfom.supabase.co/auth/v1/.well-known/oauth-authorization-server`\n\n## Current Scope\n\n`v1` is focused on one-shot device capability invocation:\n\n- list devices visible to the authenticated user\n- inspect device capabilities\n- invoke simple device capabilities through jobs\n- return structured results or artifact references\n\nReference `v1` capabilities:\n\n- `vision.camera_capture`\n- `contacts.find_contact`\n- `vision.screen_capture`\n\nPlanned later phases:\n\n- `v2`: `WebRTC` media sessions for realtime audio/video\n- `v3`: advanced actions and realtime inference orchestration\n\n## Repository Layout\n\n- [docs](/Users/luolingfeng/Sensact/docs)\n  - Product, architecture, data model, MCP API, Supabase schema, consent, runtime design\n- [schemas/mcp](/Users/luolingfeng/Sensact/schemas/mcp)\n  - JSON Schema contracts and MCP tool registration metadata\n- [services/mcp-service](/Users/luolingfeng/Sensact/services/mcp-service)\n  - Shared TypeScript package for MCP tool definitions and server-side structure\n- [services/oauth-consent-app](/Users/luolingfeng/Sensact/services/oauth-consent-app)\n  - Browser auth + consent UI for the Supabase OAuth server at `/` and `/oauth/consent`\n- [supabase](/Users/luolingfeng/Sensact/supabase)\n  - Edge Function MCP gateway, migrations, config, seed\n\nNot part of this repository snapshot:\n\n- [mediapipe](/Users/luolingfeng/Sensact/mediapipe)\n  - ignored as a nested upstream repository\n\n## Key Documents\n\n- [sensact-app-product-design.md](/Users/luolingfeng/Sensact/docs/sensact-app-product-design.md)\n- [sensact-system-architecture.md](/Users/luolingfeng/Sensact/docs/sensact-system-architecture.md)\n- [sensact-mcp-api.md](/Users/luolingfeng/Sensact/docs/sensact-mcp-api.md)\n- [sensact-supabase-schema.md](/Users/luolingfeng/Sensact/docs/sensact-supabase-schema.md)\n- [sensact-oauth-consent.md](/Users/luolingfeng/Sensact/docs/sensact-oauth-consent.md)\n\n## Current Implementation Status\n\nImplemented in this repository:\n\n- `Supabase Edge Function` MCP gateway at [supabase/functions/mcp](/Users/luolingfeng/Sensact/supabase/functions/mcp)\n- protected resource metadata and `WWW-Authenticate` challenge for remote MCP OAuth\n- `list_devices`, `list_device_capabilities`, `invoke_device_capability`, `get_artifact`\n- Supabase SQL migrations for core registry, capability, execution, artifact, and RLS setup\n- browser auth app with Google sign-in, magic-link fallback, and OAuth consent UI for `Supabase Auth`\n\nKnown limitations:\n\n- No real device runtime is wired yet, so device discovery depends on external device registration\n- `invoke_device_capability` requires an actual device runtime to consume jobs and write results\n- The consent app should be served from `https://www.sensactagent.com/oauth/consent` in production\n\n## Prerequisites\n\n- `Node.js 20+`\n- `npm`\n- `Supabase CLI`\n- a `Supabase` project with:\n  - OAuth server enabled\n  - dynamic OAuth app registration enabled\n  - this repository linked or configured against that project\n\n## Local Development\n\n### 1. MCP shared package\n\n```bash\ncd /Users/luolingfeng/Sensact/services/mcp-service\nnpm install\nnpm run typecheck\n```\n\n### 2. Web auth app\n\n```bash\ncd /Users/luolingfeng/Sensact/services/oauth-consent-app\ncp .env.example .env\n```\n\nSet:\n\n- `VITE_SUPABASE_URL`\n- `VITE_SUPABASE_ANON_KEY`\n\nThen run:\n\n```bash\nnpm install\nnpm run dev\n```\n\nFor local development the web auth app runs at:\n\n```text\nhttp://127.0.0.1:3000/\nhttp://127.0.0.1:3000/oauth/consent\n```\n\nProduction web auth URLs:\n\n```text\nhttps://www.sensactagent.com/\nhttps://www.sensactagent.com/oauth/consent\n```\n\n### 3. Supabase schema and function deployment\n\nPush migrations:\n\n```bash\ncd /Users/luolingfeng/Sensact\nsupabase db push --linked --yes\n```\n\nDeploy the MCP function:\n\n```bash\ncd /Users/luolingfeng/Sensact\nsupabase functions deploy mcp --project-ref <project-ref> --use-api --no-verify-jwt\n```\n\n`--no-verify-jwt` is intentional. The gateway must return its own `401 + WWW-Authenticate` challenge for remote MCP discovery.\n\n## MCP Endpoints\n\nPublic preview server URL:\n\n```text\nhttps://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp\n```\n\nPublic preview protected resource metadata:\n\n```text\nhttps://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp/.well-known/oauth-protected-resource\n```\n\nPublic preview authorization server metadata:\n\n```text\nhttps://helavgrvwipmdvyejfom.supabase.co/auth/v1/.well-known/oauth-authorization-server\n```\n\nDeployment template:\n\n```text\nhttps://<project-ref>.supabase.co/functions/v1/mcp\nhttps://<project-ref>.supabase.co/functions/v1/mcp/.well-known/oauth-protected-resource\nhttps://<project-ref>.supabase.co/auth/v1/.well-known/oauth-authorization-server\n```\n\n## Using With MCP Clients\n\nRegistry lookup:\n\n```bash\ncurl \"https://registry.modelcontextprotocol.io/v0/servers?search=io.github.sensact-agents/sensact\"\n```\n\nFallback install for `Codex`:\n\n```bash\ncodex mcp add sensact --url https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp\n```\n\nLog in through Supabase OAuth:\n\n```bash\ncodex mcp login sensact\n```\n\nCheck status:\n\n```bash\ncodex mcp list\ncodex mcp get sensact\n```\n\nFallback install for `Claude Code`:\n\n```bash\nclaude mcp add --transport http sensact https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp\n```\n\n## Publishing To MCP Registry\n\nThe repository publishes to the official MCP Registry from Git tags via GitHub Actions OIDC.\n\nCreate and push a release tag:\n\n```bash\ngit tag vX.Y.Z\ngit push origin vX.Y.Z\n```\n\nThe workflow at [.github/workflows/publish-mcp.yml](/Users/luolingfeng/Sensact/.github/workflows/publish-mcp.yml) will:\n\n- run the repository-level publication tests\n- typecheck `services/mcp-service`\n- test and build `services/oauth-consent-app`\n- smoke test the public preview MCP endpoint\n- validate `server.json` against its `$schema`\n- stamp the pushed tag version into `server.json`\n- authenticate with `mcp-publisher login github-oidc`\n- publish `io.github.sensact-agents/sensact` to the Registry\n\nAfter publication, verify the public entry:\n\n```bash\ncurl \"https://registry.modelcontextprotocol.io/v0/servers?search=io.github.sensact-agents/sensact\"\n```\n\n## Verification Commands\n\nConsent app:\n\n```bash\ncd /Users/luolingfeng/Sensact/services/oauth-consent-app\nnpm test\nnpm run build\n```\n\nMCP shared package:\n\n```bash\ncd /Users/luolingfeng/Sensact/services/mcp-service\nnpm run typecheck\n```\n\nRegistry publication assets:\n\n```bash\ncd /Users/luolingfeng/Sensact\nnode --test scripts/registry-publication.test.mjs\nnode scripts/validate-server-json.mjs\nnode scripts/smoke-test-remote-mcp.mjs\n```\n\nRemote MCP discovery:\n\n```bash\ncurl -i https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp\ncurl -i https://helavgrvwipmdvyejfom.supabase.co/functions/v1/mcp/.well-known/oauth-protected-resource\ncurl -i https://helavgrvwipmdvyejfom.supabase.co/auth/v1/.well-known/oauth-authorization-server\n```\n\n## Git\n\nCurrent repository bootstrap:\n\n- commit: `d394e5b`\n- tag: `v0.1.0`\n",
  "bytes": 7882,
  "sha": "29d5af7d05026cb105e20260f96423bd1e30b15ebb05f136a1db48eb964003c2",
  "repo_slug": "sensact-agents/sensact",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sensact_agents_sensact_a93c39ca/readme"
}