You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Local plugin in ~/.cursor/plugins/local/upstash (no plugin CLI, and not in the Cursor marketplace yet)
VS Code, Copilot CLI, OpenCode
Remote MCP (https://mcp.upstash.com/mcp) merged into the agent's config + the combined upstash skill
Plugin agents fall back to MCP + skill when the plugin can't be installed (CLI not on PATH, install error), --project is used for a user-only plugin, or --auth api-key is set (the plugins are OAuth-only). Reruns refresh the marketplace and update the plugin.
Flags
--claude --codex --cursor --gemini --vscode --copilot --opencode, --mode auto|plugin|mcp, --auth oauth|api-key (api-key uses the existing resolveAuth: flags, env, or upstash login; header is Authorization: Bearer email:key), -p/--project, -y/--yes, --ref, --dry-run, --json. With no agent flags it prompts (TTY) or uses detected agents (non-TTY / -y).
Differences from ctx7 setup
ctx7 never installs plugins; this does, since upstash/skills already ships Claude/Codex/Cursor/Gemini manifests that bundle the MCP.
No rules files — the combined skill already tells the agent when to prefer MCP tools.
No new dependencies (the CLI only has commander + dotenv). Skills come from one codeload.github.com tarball download, parsed with a ~60-line tar reader; no GitHub API rate limits.
Warns when a manual upstash MCP entry and the plugin would both load the server.
End-to-end in a sandbox with the real claude 2.1.263 and codex 0.153.4 CLIs: plugin installs are idempotent and show up in claude plugin list / ~/.codex/config.toml; TOML and JSON merges keep other servers; project scope writes .claude/settings.json with the plugin enabled.
Not tested: Gemini CLI install (not in the sandbox) and Cursor actually loading the local plugin — worth a manual check on a Mac before merging.
Follow-ups
Switch Cursor to the marketplace install once the listing is accepted.
Document upstash setup in the upstash-cli skill and the docs "Install by agent" page.
upstash setup --remove, and an API-key option for plugins (e.g. a headersHelper like context7's Claude plugin).
Installs the upstash/skills plugin (MCP server + skills) through each agent's
own CLI where plugins are supported (Claude Code, Codex, Gemini CLI), as a
local plugin for Cursor, and otherwise writes the remote MCP server into the
agent's config and installs the combined `upstash` skill (VS Code, Copilot
CLI, OpenCode). Falls back to MCP + skill when a plugin can't be installed.
Supports --project, --mode auto|plugin|mcp, --auth oauth|api-key, --dry-run,
--json, and agent detection. No new dependencies: skills come from the
upstash/skills tarball, parsed with a small tar reader.
Replaces the numbered readline prompt with an arrow-key flow when run in a
terminal: pick scope, multi-select agents (detected ones pre-checked,
already-connected ones marked), pick OAuth or API key (prompting for
credentials when none are saved), confirm a plan, then a spinner per agent
with its steps. Flags still answer questions up front; -y, --json and
non-TTY runs keep the existing plain output unchanged.
@clack/prompts is pinned to ~1.0.1, the last line that runs on Node 18.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LWUubWwYWp1dZTK1S9Ek95
Every agent entry and plugin installer now cites the documentation page its
config paths, entry shape and CLI commands come from. Where the docs are
silent (where .claude.json lives under CLAUDE_CONFIG_DIR, the dotted
OpenCode file names) the comment says so and what the code relies on
instead. Comments only; no behavior change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LWUubWwYWp1dZTK1S9Ek95
Drop --auth api-key and the API-key prompts. Setup now never writes a
credential: every agent gets the bare server entry and signs in with OAuth
on first use. Rerunning setup replaces an `upstash` entry left by an older
API-key setup, so its header is removed too.
Also fixes the other review findings:
- Only a missing config file reads as empty; other read errors (EACCES,
EISDIR) now stop the write instead of overwriting the file from {}.
- JSONC configs with trailing commas parse.
- TOML table matching resolves quoted keys, so [mcp_servers."upstash"] is
replaced instead of declared a second time.
- Skill/plugin trees are validated and written to a staging directory
before the old install is removed.
- --ref with a non-default branch uses MCP + skill for Claude Code and
Codex, whose plugin installs cannot pin a ref, instead of silently
installing the default branch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LWUubWwYWp1dZTK1S9Ek95
Handle inline and dotted MCP tables before appending TOML sections
src/setup/mcp-config.ts:167
This only detects explicit table headers. A valid Codex config can instead contain mcp_servers.upstash = { url = "old" }; appending [mcp_servers.upstash] then declares the same table twice and makes the entire TOML config invalid. Handle dotted assignments/inline tables before appending, or use a TOML parser for the merge.
- Remove --ref. Everything installs from the default branch of
upstash/skills, so no user-supplied string reaches an agent CLI (Gemini's
install runs through a shell on Windows) or the download URL.
- writeTree moves the previous install to a backup before renaming the
staged tree into place, and restores it if that rename fails.
- Codex config: refuse to append [mcp_servers.upstash] when the server is
already defined inline or with dotted keys (mcp_servers.upstash = {...},
or upstash = {...} under [mcp_servers]), which would declare the table
twice and break the file. The step fails with a message saying how to fix
the file, and hasMcpEntry recognises those forms too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LWUubWwYWp1dZTK1S9Ek95
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upstash's answer to
npx ctx7 setup: one command that wires the Upstash MCP server and skills into the user's agents.What it installs
claude plugin marketplace add upstash/skills+claude plugin install upstash@upstash(user or project scope)codex plugin marketplace add upstash/skills+codex plugin add upstash@upstashgemini extensions install https://github.com/upstash/skills --consent~/.cursor/plugins/local/upstash(no plugin CLI, and not in the Cursor marketplace yet)https://mcp.upstash.com/mcp) merged into the agent's config + the combinedupstashskillPlugin agents fall back to MCP + skill when the plugin can't be installed (CLI not on
PATH, install error),--projectis used for a user-only plugin, or--auth api-keyis set (the plugins are OAuth-only). Reruns refresh the marketplace and update the plugin.Flags
--claude --codex --cursor --gemini --vscode --copilot --opencode,--mode auto|plugin|mcp,--auth oauth|api-key(api-key uses the existingresolveAuth: flags, env, orupstash login; header isAuthorization: Bearer email:key),-p/--project,-y/--yes,--ref,--dry-run,--json. With no agent flags it prompts (TTY) or uses detected agents (non-TTY /-y).Differences from ctx7 setup
codeload.github.comtarball download, parsed with a ~60-line tar reader; no GitHub API rate limits.upstashMCP entry and the plugin would both load the server.Tested
tests/unit/setup.test.ts): synthetic tarball, fake agent-CLI runner, tempHOME.claude2.1.263 andcodex0.153.4 CLIs: plugin installs are idempotent and show up inclaude plugin list/~/.codex/config.toml; TOML and JSON merges keep other servers; project scope writes.claude/settings.jsonwith the plugin enabled.Follow-ups
upstash setupin theupstash-cliskill and the docs "Install by agent" page.upstash setup --remove, and an API-key option for plugins (e.g. aheadersHelperlike context7's Claude plugin).