Skip to content

Say an ended trial up front in list_connectors; any user can reactivate - #1576

Merged
helpcodeai merged 1 commit into
mainfrom
feat/trial-ended-notice-in-list
Nov 7, 2026
Merged

helpcodeai merged 1 commit into
mainfrom
feat/trial-ended-notice-in-list

Conversation

@helpcodeai

Copy link
Copy Markdown
Contributor

Summary

Two follow-ups to #1574, from the production test on 2026-11-07:

  1. List connectors on an ended trial. On a workspace whose trial ended, anythingmcp_list_connectors answered as if everything worked. The user only learned about the ended trial when a tool call failed. The list now starts with a trialEnded block: the same message and reactivation link a blocked call gives, plus a hint to show the link first. The connectors are still listed. This applies on the shared endpoint (Claude Directory and the default set) and in the ChatGPT database plugin.
  2. Blocked-call text. The text no longer says "an administrator can reactivate the workspace". Both links (the no-login page and the pricing page) let anyone choose a plan and pay without signing in. New wording: "To keep using this tool, the user reactivates the workspace by choosing a plan at the link below; no sign-in is needed."

Changes

  • DynamicMcpTools.trialEndedNotice(orgId, userId): runs the licence check. On TrialEndedException it returns { message, reactivateUrl }, using the same A/B link as a blocked call (trialReactivationLink). Otherwise it returns null: active licence, self-hosted, or any other refusal.
  • SharedToolsetDeps.trialEnded?, wired in mcp-endpoint.controller.ts to the connection's workspace (the setup org, else the grant or user org).
  • trialEndedBlock() is used by both anythingmcp_list_connectors implementations. It is best-effort: an error there leaves the list unchanged.
  • No event is recorded for the notice. trial_expired_call_blocked still counts real blocked calls only, so the blocked-calls email and the A/B denominator are unchanged.

Deployment modes

  • Cloud: as above.
  • Self-hosted: checkLicenseActive never throws TrialEndedException there, so there is no block and no change.

Type

  • Bug fix

Testing

  • Added/updated unit tests

In packages/backend:

  • npx jest --maxWorkers=4 src/mcp-server src/license: 1,030 passed, 5 skipped. New specs:
    • the list with and without the notice, and with a failing notice;
    • the executor notice;
    • the text without "administrator".
  • npx tsc --noEmit -p tsconfig.json: clean.
  • npx eslint on the 7 changed files: clean.

Checklist

  • My code follows the existing code style
  • I have tested my changes locally
  • This PR has a descriptive title

anythingmcp_list_connectors (shared endpoint and ChatGPT plugin) now starts
with a trialEnded block (message, reactivation link, hint) when the
workspace's trial has ended, so the user hears it before a tool call fails.
The blocked-call text no longer says an administrator must reactivate: the
link lets anyone choose a plan and pay, without signing in.
@helpcodeai
helpcodeai enabled auto-merge (squash) November 7, 2026 21:45
@helpcodeai
helpcodeai merged commit 8d8ca62 into main Nov 7, 2026
17 checks passed
@helpcodeai
helpcodeai deleted the feat/trial-ended-notice-in-list branch November 7, 2026 22:01
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 7, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant