Apps can now declare MCP servers in their manifest using defineMcpServer from twenty-sdk. Two new helpers — attachRecordToInboxThread and detachRecordFromInboxThread — let apps and workspace members link records to inbox threads.
Three breaking changes require code updates. SystemPermissionFlag.CONNECTED_ACCOUNTS and APPLICATIONS are renamed to USER_APPS and WORKSPACE_APPS. MarketplaceApp.isVetted is replaced by isListed. FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLED is removed; campaigns are now on for all workspaces.
twenty app pull now restores package.json and yarn.lock alongside metadata, and can scaffold a new local project when run outside an existing directory. The --universal-identifier flag is removed. A type error in the generated client SDK where UpdateViewInput.translations referenced an output type is also fixed.
⚠️ Breaking changes
FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLEDis removed; campaigns are enabled for every workspace by default, so remove any code-path guards on this key. (#28929) by @neo773- Workflow builder workflows now export correctly via
twenty app pull; the manifest format was extended to preserve builder state that prior versions silently dropped. (#29053) by @FelixMalfait MarketplaceApp.isVettedis removed and replaced withisListed;ApplicationRegistrationandMarketplaceAppDetailalso dropisVetted, so update any code that reads or sets the vetted flag. (#29187) by @martmullSystemPermissionFlag.CONNECTED_ACCOUNTSis renamed toUSER_APPSandSystemPermissionFlag.APPLICATIONStoWORKSPACE_APPS; stored universal identifiers are unchanged, so only the names you type in manifests need updating. (#29194) by @ehconitintwenty app pullnow scaffolds a new local project from your workspace's custom app when run outside an existing directory. The--universal-identifierflag is removed. (#29207) by @Weiko
🌟 Highlights
SystemPermissionFlag.CONNECTED_ACCOUNTSandAPPLICATIONSare renamed toUSER_APPSandWORKSPACE_APPS— update every permission declaration in your manifest. (#29194)MarketplaceApp.isVettedis removed; replace it withisListedwherever you read or render the marketplace catalog. (#29187)FeatureFlagKey.IS_MESSAGE_CAMPAIGN_ENABLEDis gone; campaigns are enabled for all workspaces, so remove any guards on this key. (#28929)defineMcpServeris now exported fromtwenty-sdk— apps can declare an MCP server in their manifest for the first time. (#29158)attachRecordToInboxThreadanddetachRecordFromInboxThreadare new exports intwenty-sdk, letting apps link any record to an inbox thread. (#29090)twenty app pullnow initializes a new local project when run outside an existing directory; the--universal-identifierflag is removed. (#29207)
✨ New features
attachRecordToInboxThread(threadId, recordId)anddetachRecordFromInboxThread(threadId, recordId)are now exported fromtwenty-sdk, letting apps link records to inbox threads with caller-scoped permissions. (#29090) by @bosiraphaelUpdateViewInputnow acceptstranslations: [MetadataTranslationOverrideInput!]on both the GraphQLupdateViewmutation andPATCH /rest/metadata/views/:id. (#29095) by @ijreillydefineMcpServer({ universalIdentifier, name, label, url, connectionProvider? })is now exported fromtwenty-sdk— add it to your app manifest to ship an MCP server alongside your connection provider. (#29158) by @martmullagentChatChannelThreadIdsnow accepts afilterargument; channel and open-thread summaries return newmentionsCountandneedsInputCountfields. (#29192) by @bosiraphael- Apps can now receive server webhooks at
/webhooks/server/:appRegistrationId/:functionUniversalIdentifier, a stable URL apps can construct without a runtime lookup. (#29204) by @charlesBochet - The metadata API exposes
relatedRecordPathsandcreateRelatedRecordPathwhenIS_RELATED_RECORD_PATHS_ENABLEDis enabled. (#29243) by @charlesBochet
🐛 Bug fixes
- Menu item description text in
twenty-uinow renders in theLightcolor token instead ofSecondary, matching the Figma spec. (#29239) by @Bonapara UpdateViewInput.translationsin the generatedtwenty-client-sdktypes now correctly referencesMetadataTranslationOverrideInputinstead of the output-onlyMetadataTranslation. (#29264) by @ehconitin- The join word in keyboard shortcut sequences (e.g. "G then D") in
twenty-uinow renders inLightinstead ofSecondary. (#29275) by @Bonapara
🔧 Developer & API
- The CLI now discovers and bundles React and Twenty UI once from your installed app lockfile rather than re-installing per component preview revision. (#29018) by @Weiko
twenty app pullnow fetches and writesdependencies/package.jsonanddependencies/yarn.lock, restoring the full dependency snapshot alongside metadata. (#29197) by @Weiko
🏗️ Internal changes (5)
- Track unresolved mentions per member (#28719) by @bosiraphael
- Pin the current workspace in admin and unify avatars (#29117) by @Bonapara
- Add a Merge with command to record pages (#29155) by @FelixMalfait
- Store Cloudflare country, region and city on user sessions (#29196) by @FelixMalfait
- Add the related record path metadata entity (#29229) by @charlesBochet
🎉 New contributors
- @apoorv-xs made their first contribution in #29173
- @Tanguy-Magnaudet made their first contribution in #29269
Full changelog (22 PRs)
- Track unresolved mentions per member (#28719) by @bosiraphael
- Remove the IS_MESSAGE_CAMPAIGN_ENABLED feature flag (#28929) by @neo773
- Build frontend shared dependencies from app lockfiles (#29018) by @Weiko
- Round-trip workflows built in the workflow builder through the manifest (#29053) by @FelixMalfait
- Let apps attach records to inbox conversations (#29090) by @bosiraphael
- feat(view): let workspaces declare per-locale view name translations (#29095) by @ijreilly
- Pin the current workspace in admin and unify avatars (#29117) by @Bonapara
- Add a Merge with command to record pages (#29155) by @FelixMalfait
- Let applications declare MCP servers in their manifest (#29158) by @martmull
- chore: bump version to 2.54.0 (#29186) by @twenty-pr
- [BREAKING_CHANGE] Replace vetted apps with marketplace listing (#29187) by @martmull
- Move inbox filters into the list header (#29192) by @bosiraphael
- Name the User Apps and Workspace Apps permission flags USER_APPS and WORKSPACE_APPS in the SDK (#29194) by @ehconitin
- Store Cloudflare country, region and city on user sessions (#29196) by @FelixMalfait
- feat(cli): pull application dependency files (#29197) by @Weiko
- Route server webhooks by application registration and function universalIdentifier (#29204) by @charlesBochet
- feat(cli): pull existing apps or initialize the workspace custom app (#29207) by @Weiko
- Add the related record path metadata entity (#29229) by @charlesBochet
- Restore light description color on menu items (#29239) by @Bonapara
- Add the related record path metadata API (#29243) by @charlesBochet
- Regenerate the SDK metadata client (#29264) by @ehconitin
- Restore light join word in keyboard shortcuts (#29275) by @Bonapara
Full Changelog: sdk/v2.53.1...sdk/v2.54.0