{
  "markdown": "# FrancoLabs MCP Server\n\nConnect AI assistants to [FrancoLabs](https://francolabs.vercel.app) — a UX\nresearch platform — over the [Model Context Protocol](https://modelcontextprotocol.io).\nLet Claude, ChatGPT and other MCP clients create and manage studies, browse\ntemplates, read participant responses and analytics, run AI-grounded analysis,\nand turn insights into product opportunities on your behalf.\n\n- **Endpoint:** `https://francolabs.vercel.app/mcp`\n- **Transport:** Streamable HTTP (MCP protocol `2025-06-18`)\n- **Auth:** OAuth 2.1 (Dynamic Client Registration + PKCE) or Personal Access Token\n- **Registry:** `io.github.glauberfrancodesign/francolabs`\n\n---\n\n## Connect\n\n### Claude (claude.ai / Desktop)\n\nSettings → **Connectors** → *Add custom connector* → URL:\n\n```\nhttps://francolabs.vercel.app/mcp\n```\n\nComplete the OAuth consent screen — you choose exactly which scopes to grant and\ncan toggle read-only access.\n\n### ChatGPT\n\nEnable **Developer Mode**, then Settings → **Connectors** → *Add* → same URL.\nAuthenticate via the OAuth flow.\n\n### Claude Code / Cursor (manual token)\n\nGenerate a Personal Access Token in\n[Settings → Integrations](https://francolabs.vercel.app/settings/integrations), then:\n\n```bash\nclaude mcp add --transport http francolabs \\\n  \"https://francolabs.vercel.app/mcp\" \\\n  --header \"Authorization: Bearer <your-token>\"\n```\n\n---\n\n## Tools\n\n| Tool | Scope | Description |\n|------|-------|-------------|\n| `list_question_types` | `templates:read` | List question/block types and their settings |\n| `list_templates` | `templates:read` | List study templates, optionally by category |\n| `list_workspaces` | `projects:read` | List the workspaces (teams) you belong to and your role in each |\n| `list_projects` | `projects:read` | List your projects |\n| `get_project` | `projects:read` | Get a single project by id |\n| `create_project` | `projects:write` | Create a new project (optionally in a specific workspace) |\n| `list_studies` | `studies:read` | List studies (filter by status/project) |\n| `get_study` | `studies:read` | Get a full study with blocks and settings |\n| `create_study` | `studies:write` | Create a study (auto-scaffolds welcome + thank-you) |\n| `update_study` | `studies:write` | Update title, blocks, settings or project |\n| `set_study_status` | `studies:write` | Launch / pause / resume / complete a study |\n| `delete_study` | `studies:write` | Permanently delete a study and its responses |\n| `list_responses` | `responses:read` | List participant responses (most recent first) |\n| `get_study_analytics` | `responses:read` | Aggregated KPIs: NPS, completion, distributions |\n| `get_study_digest` | `responses:read` | Deterministic, PII-free statistical digest of a study's results |\n| `run_universal_analysis` | `responses:read` | Run/refresh the full AI analysis (digest + grounded synthesis) |\n| `analysis_chat` | `responses:read` | Ask a natural-language question, grounded in the study's analysis |\n| `get_insights` | `responses:read` | List curated insight cards for a study |\n| `upsert_insight` | `studies:write` | Create or update a curated insight card |\n| `generate_study_from_objective` | `studies:read` | Turn a research objective into a typed study skeleton |\n| `review_study_quality` | `studies:read` | Review a study's questionnaire for survey-design issues |\n| `list_opportunities` | `responses:read` | List product opportunities distilled from a study's insights |\n| `create_opportunity_from_insights` | `studies:write` | Distill insights into decision-ready product opportunities |\n\n`create_project` and `create_study` write into a workspace — pass `workspaceId`\n(see `list_workspaces`), or omit it to use your oldest workspace by default.\n\nTwo resources are also exposed: `francolabs://templates` and\n`francolabs://question-types`.\n\n## Scopes\n\n`templates:read` · `projects:read` · `projects:write` · `studies:read` ·\n`studies:write` · `responses:read`\n\nTools you didn't grant are hidden from `tools/list`. A **read-only** grant blocks\nevery write tool server-side, regardless of scopes.\n\n## Security\n\n- Tokens are stored only as SHA-256 hashes — never in plaintext.\n- Each request mints a short-lived (5 min) JWT so all data access runs under\n  per-user row-level security; the service role is used only for the token lookup.\n- Access is revocable anytime from Settings → Integrations.\n- OAuth follows RFC 9728 (protected-resource discovery), RFC 8414 (AS metadata),\n  RFC 7591 (dynamic client registration) and PKCE S256.\n\n## Source\n\nThis repository mirrors the server's source for transparency. The server runs as\na Supabase Edge Function (`src/mcp`, `src/mcp-oauth`, `src/_shared`).\n\n---\n\n© FrancoLabs. All rights reserved.\n",
  "bytes": 4699,
  "sha": "ec973c8a59fd96f97ff4c9a3fb65e863cf2e15be61ff3d89421512b9c4f2e860",
  "repo_slug": "glauberfrancodesign/francolabs-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_glauberfrancodesign_francolabs_6779f9a5/readme"
}