genie in Cline
Cline is tools-only — it has no MCP Apps UI capability, so _meta.ui.resourceUri content is present in every preview result for spec-compliant clients, but Cline never renders it inline; the response Cline actually shows is plain text. What that text contains depends on preview locality, which genie resolves from the transport, not from the harness:
- Local stdio connection. Use
--transport stdio. Same-machine HTTP can opt in with--preview-locality localorGENIE_PREVIEW_LOCALITY=local.previewalways returns afileUrl; it also returns aviewerUrlwhen the local viewer boots successfully. - Remote HTTP connection (the default locality for HTTP, e.g. the
url+headersregistration below with no locality override) — there is noviewerUrl/file://fallback.preview's text is either"Preview ready in the inline MCP App."(when the server has a usable previews origin or the filtered manifest is empty, even though Cline cannot render it) or a"Remote preview unavailable: …"message. Cline receives the second only when the filtered manifest has components and no usableGENIE_PREVIEWS_BASE_URL. Neither outcome is browsable in Cline. Point Cline at a local stdio server if you need a viewer/file URL.
Skill support carries the conjure → plan → write_files → preview workflow; without it, tool descriptions are the fallback guidance. See Install the Agent Skill below — current Cline (cline@3.0.42, confirmed 2026-07-16) discovers portable SKILL.md packages via its own skill subcommand (cline skill add OWNER/REPO --skill NAME --agent cline), which forwards to the open skills CLI and installs into the shared .agents/skills / ~/.agents/skills convention the other harness guides (codex.md, cursor.md) also use. Cline ships frequent releases, so treat the exact version number as a point-in-time data point rather than a pin — re-check cline --version against your own install if these specifics matter.
Empirical findings (probed 2026-07-14 and 2026-07-16)
The research report's open question (§8, item 12) flagged the type key and the settings-file path as unconfirmed. The CLI behavior is confirmed against the pinned cline@3.0.42 smoke, and the extension path was independently probed against an installed Cursor extension on 2026-07-16:
The
typekey exists and matters. This corrects the report's original "notypekey" claim, accurate for an older release but not the current schema. Cline's settings schema accepts a flat{ type, url, headers, ... }shape; per Cline's own docs and schema comments, omittingtypeon a flat,url-based entry silently falls back to the legacyssetransport, not stdio-vs-http inference. Always settype: "streamableHttp"explicitly for genie's HTTP endpoint.The CLI writes a nested
transportobject, not the flat shape — a live run of:npx cline@3.0.42 mcp install genie http://127.0.0.1:9/mcp \ --transport streamableHttp \ --header "Authorization: Bearer testtoken" --yes --jsonproduced, verbatim, in
~/.cline/data/settings/cline_mcp_settings.json:json{ "mcpServers": { "genie": { "transport": { "type": "streamableHttp", "url": "http://127.0.0.1:9/mcp", "headers": { "Authorization": "Bearer testtoken" } } } } }Cline's settings loader accepts this nested form and flattens it internally. The pinned smoke uses this shape because it is the one Cline itself writes and consumes. Use it for portable CLI/extension configuration rather than a hand-edited compatibility form.
Settings-file path — confirmed by the same live run above: the CLI wrote to
~/.cline/data/settings/cline_mcp_settings.json(cline --helpindependently confirms this as the--config/--data-dirdefault:--config <path>defaults to~/.cline/data/settings,--data-dir <path>defaults to~/.cline). This corrects the previous "~/.cline/mcp.json" claim.CLINE_MCP_SETTINGS_PATH,CLINE_DATA_DIR, andCLINE_DIRenvironment variables override the path at increasing specificity, in that priority order, before the default applies.IDE-extension path — independently live-probed 2026-07-16. Cursor's activated Cline extension
3.89.2loaded its real settings file at<Cursor user-data>/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json. Current Cline source migrates that per-host file (and the olderDocuments/Cline/MCP/cline_mcp_settings.json) into the shared CLI path~/.cline/data/settings/cline_mcp_settings.json; after migration, use the shared path as the canonical file. This distinction matters for older installed extensions that have not yet migrated.Cline Skills discovery — the following command was run live from a project directory:
cline skill add anthropics/skills --skill pdf --agent cline --yesIt installed into
.agents/skills/pdf/SKILL.md(project-scoped;-g/--global installs to~/.agents/skillsper the underlyingskillsCLI's Cline adapter, which detects Cline via~/.clineand reuses the shared.agents/skillsdirectory other Agent-Skills-compatible harnesses use). This correctsdocs/harness/README.md's prior "no Skill support" claim for Cline.
Register the server (~/.cline/data/settings/cline_mcp_settings.json)
{
"mcpServers": {
"genie": {
"transport": {
"type": "streamableHttp",
"url": "https://genie.<operator-domain>/mcp",
"headers": {
"Authorization": "Bearer <paste-token-here>"
}
},
"disabled": false,
"autoApprove": [
"mcp__genie__list_components",
"mcp__genie__preview",
"mcp__genie__list_files"
]
}
}
}transport.type: "streamableHttp"— required; do not omit (see above).transport.headers.Authorization— genie's static Bearer token fallback (M5-02, DRO-274). Mint a token server-side withgenie token create --sub cline. The CLI forwards header strings literally, so do not use${env:GENIE_TOKEN}in a CLI-consumed config: it would send that text and receive 401. The extension host can expand${env:...}, but the portable configuration above uses a literal token because it works in both surfaces. Keep this user-local settings file out of version control and rotate the token if it is exposed.autoApprove— uses genie's actual registered MCP tool names (mcp__genie__list_components,mcp__genie__preview,mcp__genie__list_files— seepackages/server/src/tools/*.ts's*_TOOL_NAMEexports), not the bare verb names; Cline matchesautoApproveentries against the exact tool name fromtools/list, so bare names like"list_components"never match and silently auto-approve nothing. This conservative baseline includes read-only listing plus non-destructivepreview; preview may persist the derived manifest and boot a viewer, but does not change authored component files. Keepconjureandrefineoutside the list because they incur model cost, and keepwrite_filesoutside because it mutates the UI kit. This per-tool list is consumed by the Cline IDE extension. Cline CLI 3.0.42 currently has only a run-level--auto-approveswitch; it preserves this field on disk but does not enforce selective per-server approval.disabled: false— Cline's toggle to keep the server registered but inactive without deleting the entry.
This snippet registers a remote HTTP endpoint, so — per the locality section above — preview returns either "Preview ready in the inline MCP App." or "Remote preview unavailable: …", depending on the server's previews-origin configuration and whether the filtered manifest is empty. Neither is a browsable URL in Cline. If you want a browsable viewerUrl/fileUrl, run genie over local stdio instead:
{
"mcpServers": {
"genie": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/genie/packages/server/dist/cli.js", "--transport", "stdio"]
}
}
}For the VS Code/JetBrains extension, use the MCP Servers sidebar icon → Configure tab → Configure MCP Servers, which opens the same shared cline_mcp_settings.json in an editor tab (a Remote Servers tab in the same panel accepts name/URL/transport via form fields as an alternative to hand-editing JSON). See the versioned extension-path probe above. You can also register the server non-interactively with the CLI:
npx cline@3.0.42 mcp install genie https://genie.<operator-domain>/mcp \
--transport streamableHttp \
--header "Authorization: Bearer <paste-token-here>" \
--yesInstall the Agent Skill (optional)
npx cline@3.0.42 skill add <owner/repo> --skill genie --agent cline --yesor, from a local checkout of this repo, install the portable Skill directly into the shared convention Cline's skill subcommand also targets:
mkdir -p .agents/skills
cp -R packages/plugin/skills/genie .agents/skills/genieWithout the Skill installed, tool descriptions alone still carry enough guidance for the four-verb chain — the Skill just removes the need to spell out the workflow in the prompt.
Using it
Ask for a component in chat; the Skill (or tool-description fallback) runs the four-verb chain. Cline is tools-only: preview's _meta.ui.resourceUri is present in the tool result but Cline does not consume it, so the response still shows the plain-text tool output described in the locality section above. Over the remote HTTP registration documented here, that text is either "Preview ready in the inline MCP App." or "Remote preview unavailable: …"; the former appears when a previews origin is usable or the filtered manifest is empty. Neither is a clickable Cline preview — see Register the server for the local-stdio alternative if you need a browsable viewer.
Out of scope
One-click install via the Cline Marketplace is not covered here — mention only; no smoke test exercises it.