{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "twentyhq--twenty",
    "name": "Twenty",
    "tagline": "Open-source CRM with an in-product MCP server: per-object CRUD, workflows, metadata, views and webhooks over OAuth.",
    "shortTagline": "Open-source CRM with MCP",
    "description": "Objects, views, workflows and agents you shape in-product or as code with the twenty-sdk. Every workspace serves an MCP endpoint at <workspace>/mcp; the Builder's Codex plugin ships a use-twenty-mcp skill and a setup script. Self-host under AGPL (enterprise files marked) or use Twenty Cloud.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "smb-ops-crm",
    "alternativeTo": [
      "Salesforce",
      "HubSpot",
      "Attio"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "hybrid",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "NestJS",
        "React",
        "Nx",
        "BullMQ",
        "Jotai",
        "Lingui"
      ],
      "packageManager": "yarn",
      "database": [
        "PostgreSQL",
        "Redis"
      ],
      "hostingTarget": [
        "Docker Compose"
      ]
    },
    "modelStack": {
      "providers": [
        "configurable (in-product AI agents)"
      ],
      "models": [],
      "requiredKeys": [],
      "promptLocations": [
        "packages/twenty-codex-plugin/skills/use-twenty-mcp/SKILL.md"
      ],
      "tools": [
        "find_many_{objects}",
        "find_one_{object}",
        "group_by_{objects}",
        "create_one_{object}",
        "create_many_{objects}",
        "update_one_{object}",
        "upsert_many_{objects}",
        "delete_one_{object}",
        "list_workflows",
        "create_complete_workflow",
        "get/create/update/delete_object_metadata",
        "get/create/update/delete_field_metadata",
        "get_views",
        "create/update/delete_view",
        "list/create/update/delete_webhook",
        "create_complete_dashboard",
        "list_object_metadata_names",
        "list_skills"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/twentyhq/twenty",
        "owner": "twentyhq",
        "name": "twenty",
        "license": "AGPL-3.0 core with marked enterprise files",
        "stars": 56077,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "mcp",
      "url": "https://github.com/twentyhq/twenty/tree/main/packages/twenty-codex-plugin/references/use-twenty-mcp",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Read, search and aggregate records of any object",
        "reachable": true,
        "evidence": "build-mcp-server-instructions.util.ts: find_many_{objects}, find_one_{object}, group_by_{objects}"
      },
      {
        "job": "Create, update, upsert and delete records",
        "reachable": true,
        "evidence": "Same file: create_one/many, update_one/many, upsert_many, delete_one/many per object"
      },
      {
        "job": "Attach notes, tasks and activities",
        "reachable": true,
        "evidence": "Instructions: note / task / activity attachable through targetRecordId"
      },
      {
        "job": "Build and run workflows",
        "reachable": true,
        "evidence": "WORKFLOW tools: list_workflows, create_complete_workflow, activate/deactivate_workflow_version, list_workflow_runs"
      },
      {
        "job": "Add objects and fields",
        "reachable": true,
        "evidence": "METADATA tools: create/update/delete_object_metadata and field_metadata; skill warns to load the metadata skill first"
      },
      {
        "job": "Create views, filters and sorts",
        "reachable": true,
        "evidence": "VIEW tools: create/update/delete_view, manage view fields, filters, sorts"
      },
      {
        "job": "Webhooks and navigation",
        "reachable": true,
        "evidence": "WEBHOOK and NAVIGATION tool groups"
      },
      {
        "job": "Build dashboards",
        "reachable": true,
        "evidence": "create_complete_dashboard after loading the dashboard-building skill"
      },
      {
        "job": "Connect email and calendar accounts",
        "reachable": false,
        "evidence": "Connected accounts are set up in the UI with OAuth; no MCP tool listed"
      },
      {
        "job": "Publish an app to the workspace",
        "reachable": false,
        "evidence": "Done with npx twenty app:publish (CLI), not MCP; SKILL.md says use develop-app instead"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/twentyhq/twenty"
          },
          {
            "kind": "container",
            "url": "https://docs.twenty.com/developers/self-host/capabilities/docker-compose"
          }
        ]
      },
      {
        "name": "Cloud",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://twenty.com"
          }
        ]
      },
      {
        "name": "Enterprise",
        "price": null,
        "open": false,
        "distributions": []
      }
    ],
    "skills": {
      "kind": "bundled",
      "paths": [
        "packages/twenty-codex-plugin/skills/*/SKILL.md",
        "packages/twenty-claude-skills/skills/*/SKILL.md"
      ],
      "install": null,
      "note": "Twenty ships a Codex plugin and a Claude skills package teaching an agent to use the Twenty MCP server and build Twenty apps; the repo separately carries contributor-only skills."
    },
    "customization": {
      "summary": "The named env vars (packages/twenty-server/.env.example) and Docker Compose file are deployment configuration: SERVER_URL, PG_DATABASE_URL, REDIS_URL, APP_SECRET, STORAGE_TYPE, EMAIL_* and auth-provider ids. Business adaptation lives in the workspace UI: Settings > Data model for objects and fields, views, Workflows, roles, and API keys and webhooks; the same surface is reachable over the in-product MCP. A twenty-sdk app (defineObject) is an optional code path, not the default.",
      "envVars": [
        "SERVER_URL",
        "PG_DATABASE_URL",
        "REDIS_URL",
        "APP_SECRET",
        "STORAGE_TYPE",
        "EMAIL_DRIVER",
        "EMAIL_SMTP_HOST"
      ],
      "configFiles": [
        "packages/twenty-docker/docker-compose.yml",
        "packages/twenty-server/.env"
      ],
      "promptFiles": [
        "packages/twenty-codex-plugin/skills/use-twenty-mcp/SKILL.md"
      ],
      "effort": "config-only",
      "surfaceKind": "admin-ui",
      "editCount": 10
    },
    "useWhen": [
      "I want a CRM our agent can query, update and reshape (new objects, fields, workflows) without a wrapper",
      "I want to version our CRM's data model as code and ship it to a workspace"
    ],
    "accounts": [
      "Twenty Cloud account (cloud edition)",
      "SMTP provider (self-host)",
      "Google or Microsoft OAuth apps (email and calendar sync)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "Env var names above come from the self-host docs and the .mcp.json dev config (PG_DATABASE_URL); confirm the current list at docs.twenty.com",
      "The root .mcp.json is developer tooling (postgres, playwright, context7), not the product MCP",
      "Metadata and workflow tools require loading a skill first or the agent misbuilds",
      "AGPL core; enterprise files are marked and not free"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: NestJS plus React monorepo, Docker Compose self-host",
      "executionModel": "README: agents are a building block; MCP list_skills and dashboard skills; CRM core deterministic",
      "operability": "packages/twenty-server/src/engine/api/mcp in the Builder's repo; codex plugin setup.md normalises <workspace>/mcp and uses OAuth",
      "effort": "README Self-hosting links; twenty-sdk app flow",
      "editions": "README: Cloud sign-up at twenty.com; AGPL license with enterprise files",
      "active": "GitHub pushedAt 2026-09-03"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.75,
      "operability": 0.95,
      "effort": 0.85,
      "reach": 0.9,
      "editions": 0.6
    },
    "openQuestions": [
      "Cloud prices and whether a free cloud plan exists",
      "Verify the self-host env var list on docs.twenty.com",
      "Is the product MCP available on self-host without an enterprise license?"
    ],
    "sources": [
      {
        "url": "https://github.com/twentyhq/twenty",
        "foundBy": "sourcing:smb-ops-crm:github"
      },
      {
        "url": "https://docs.twenty.com",
        "foundBy": "sourcing:smb-ops-crm:github"
      },
      {
        "url": "https://github.com/mhenry3164/twenty-crm-mcp-server",
        "foundBy": "sourcing:smb-ops-crm:github"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "Read packages/twenty-server/.env.example on main: database, Redis, secret, frontend URL, auth providers, storage, email, logging and billing flags. The CRM's shape is workspace data with no file representation in the repo. The listed SKILL.md exists but is an agent-usage prompt for the MCP, not a customization file.",
      "disputed": [
        {
          "field": "customization.effort",
          "reason": "Env vars are deployment; objects, fields, views and workflows are workspace data edited in-product or over MCP."
        }
      ]
    },
    "url": "apps/twentyhq--twenty.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/twentyhq--twenty.json"
  }
}
