Odel
FrancoLabs

FrancoLabs

@glauberfrancodesignData & AnalyticsTypeScriptUpdated 1w ago

UX research platform: manage studies, browse templates, read responses and analytics.

Server endpointStreamable HTTP

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

FrancoLabs MCP Server

Connect AI assistants to FrancoLabs — a UX research platform — over the Model Context Protocol. Let Claude, ChatGPT and other MCP clients create and manage studies, browse templates, read participant responses and analytics, run AI-grounded analysis, and turn insights into product opportunities on your behalf.

  • Endpoint: https://francolabs.vercel.app/mcp
  • Transport: Streamable HTTP (MCP protocol 2025-06-18)
  • Auth: OAuth 2.1 (Dynamic Client Registration + PKCE) or Personal Access Token
  • Registry: io.github.glauberfrancodesign/francolabs

Connect

Claude (claude.ai / Desktop)

Settings → ConnectorsAdd custom connector → URL:

https://francolabs.vercel.app/mcp

Complete the OAuth consent screen — you choose exactly which scopes to grant and can toggle read-only access.

ChatGPT

Enable Developer Mode, then Settings → ConnectorsAdd → same URL. Authenticate via the OAuth flow.

Claude Code / Cursor (manual token)

Generate a Personal Access Token in Settings → Integrations, then:

claude mcp add --transport http francolabs \
  "https://francolabs.vercel.app/mcp" \
  --header "Authorization: Bearer <your-token>"

Tools

ToolScopeDescription
list_question_typestemplates:readList question/block types and their settings
list_templatestemplates:readList study templates, optionally by category
list_workspacesprojects:readList the workspaces (teams) you belong to and your role in each
list_projectsprojects:readList your projects
get_projectprojects:readGet a single project by id
create_projectprojects:writeCreate a new project (optionally in a specific workspace)
list_studiesstudies:readList studies (filter by status/project)
get_studystudies:readGet a full study with blocks and settings
create_studystudies:writeCreate a study (auto-scaffolds welcome + thank-you)
update_studystudies:writeUpdate title, blocks, settings or project
set_study_statusstudies:writeLaunch / pause / resume / complete a study
delete_studystudies:writePermanently delete a study and its responses
list_responsesresponses:readList participant responses (most recent first)
get_study_analyticsresponses:readAggregated KPIs: NPS, completion, distributions
get_study_digestresponses:readDeterministic, PII-free statistical digest of a study's results
run_universal_analysisresponses:readRun/refresh the full AI analysis (digest + grounded synthesis)
analysis_chatresponses:readAsk a natural-language question, grounded in the study's analysis
get_insightsresponses:readList curated insight cards for a study
upsert_insightstudies:writeCreate or update a curated insight card
generate_study_from_objectivestudies:readTurn a research objective into a typed study skeleton
review_study_qualitystudies:readReview a study's questionnaire for survey-design issues
list_opportunitiesresponses:readList product opportunities distilled from a study's insights
create_opportunity_from_insightsstudies:writeDistill insights into decision-ready product opportunities

create_project and create_study write into a workspace — pass workspaceId (see list_workspaces), or omit it to use your oldest workspace by default.

Two resources are also exposed: francolabs://templates and francolabs://question-types.

Scopes

templates:read · projects:read · projects:write · studies:read · studies:write · responses:read

Tools you didn't grant are hidden from tools/list. A read-only grant blocks every write tool server-side, regardless of scopes.

Security

  • Tokens are stored only as SHA-256 hashes — never in plaintext.
  • Each request mints a short-lived (5 min) JWT so all data access runs under per-user row-level security; the service role is used only for the token lookup.
  • Access is revocable anytime from Settings → Integrations.
  • OAuth follows RFC 9728 (protected-resource discovery), RFC 8414 (AS metadata), RFC 7591 (dynamic client registration) and PKCE S256.

Source

This repository mirrors the server's source for transparency. The server runs as a Supabase Edge Function (src/mcp, src/mcp-oauth, src/_shared).


© FrancoLabs. All rights reserved.