McpUrlConfigurator
A connection configurator for Contentstack Profile Hub MCP profiles: pick a profile, fill in its configuration, copy an install command for your AI client.
Anatomy
| Section | What it does |
|---|---|
| Profile | <select> of the system profiles, its description, and a NoticeShell warning when the profile can write or delete |
| Required | Labelled inputs for the params the profile needs, two columns from sm up |
| Optional configuration | <details> disclosure (the FAQ pattern) holding params that override a stack default |
| Install | Optional one-click deeplink buttons (show_install_links), then a role="tablist" of manual targets, the editable server name, and the generated snippet in CodeBlockWithCopy. The last tab is the raw URL |
Sections are separated by border-t border-border-light, not nested cards.
Reused atoms
Title, Button (PrimaryFillButton for Copy, UnderlineButton/ButtonContainer for the
tabs), Icons, NoticeShell, CodeBlockWithCopy. Inputs and the select use the field
treatment from SearchBar (border-border-light, bg-on-surface-2-strong, h-10) and the
focus ring from Button. Typography uses the cs-* utilities. No new component system.
Props
Props come from the mcp_connector block (global field mcp_connect), typed as
McpConnector in types/types.ts.
| Prop | Type | Default | Notes |
|---|---|---|---|
copy | RichText | – | Nested rich_text global field (title, tag, variant, fancy background, body), rendered with the RichText organism as the intro. With no title or body, a built-in heading and description render instead |
profiles | string[] | all profiles | Profile ids to offer, in CMS order. Matching ignores case, spaces, and dashes (Brand Kit → brandkit). Unknown values are skipped. With one profile the select is hidden |
show_install_links | boolean | false | Shows the one-click Add to Claude / Cursor deeplinks above the manual tabs |
className | string | – | Extra classes on the section |
noPadding | boolean | false | Drops the section padding utility |
Usage
CMS-only. Registered in ComponentsRenderer as
mcp_connector (the block uid in the page components field), so it renders wherever an
editor places that block. There is no standalone route — noPadding is injected by the
renderer when the surrounding layout already pads.
Rules
lib/mcp-url-configurator.ts is the single source of
truth and drives the form:
PARAMS— every query param, with its label, sample value, and serialization order.PROFILES— per profile: label, description,requiredparams,optionalparams, and awritesflag for the safety notice. Adding a profile is one entry.DEEPLINKS— one-click install links, each abuild(name, url). Both formats are verified: Claude usesclaude.ai/customize/connectors?modal=add-custom-connectorwithconnectorName/connectorUrl(shipped May 2026); Cursor usescursor://anysphere.cursor-deeplink/mcp/installwithnameand a base64configholding just the inner server object (docs). Both clients ask the user to confirm before saving. Rendered withbuttonVariants()on an<a>, the same link-as-button pattern asListFilters.CLIENTS— manual install targets, each with a language and abuild(name, url)function. Formats verified against each client's own docs (Claude Code CLI, CursormcpServers.url, Codex[mcp_servers.NAME]TOML, genericmcp.json) plus aurltarget that returns the bare URL.usesServerName: falsehides the server name field for targets that have no name to set.
buildUrl returns errors (malformed values — these block the URL) separately from
missing (blank required params — the URL still builds, install snippets wait). Blank values
are never serialized. The whole Install section is hidden until the configuration is complete.
Notes
- The endpoint origin is fixed and not configurable.
- Everything is reactive; there is no Generate action.
apikeyis a stack pointer, not a credential, so it is not masked.- OAuth authenticates the connection; the URL only configures it.