mirror of
https://github.com/upstash/skills.git
synced 2026-09-17 14:20:06 +08:00
d995ff5115
* DX-2996 surface the MCP in plugin descriptions and ship the Codex icon The manifests gained an MCP server but kept their skills-only descriptions, and Codex installed the plugin with no Upstash icon because `.codex-plugin/plugin.json` had an incomplete `interface` block. - Descriptions across all six manifests (and the Claude/Cursor marketplace entries) now lead with the MCP server, and are identical everywhere. They had drifted into two different wordings before this. - `.codex-plugin/plugin.json` gains the required `longDescription` and `capabilities`, plus `logo`/`composerIcon` pointing at `assets/upstash-icon-white-bg.png`, `brandColor` (#00C98D, sampled from the icon), `defaultPrompt`, and the privacy/terms URLs. Drops the non-spec `interface.repository`. This mirrors the asset layout redis/agent-skills uses — Codex is the only client with an icon field, so the other manifests cannot carry one. - Category is "Developer Tools" for Codex and the .agents marketplace entry. - Fills the gaps the icon audit turned up: `skills: "./skills/"` stated explicitly for Claude/Codex/Cursor, `displayName`, `author.url`, and the full metadata set (version, author, homepage, license, keywords, category, tags) on both marketplace entries. Version bumped to 1.2.0 in lockstep. Adds `scripts/check-manifests.mjs`, run by `npm run check`, so this drift fails CI instead of shipping: it pins version/description/repository/license across manifests, requires the description to mention MCP, requires every client to point at https://mcp.upstash.com/mcp, and requires the Codex interface block to be complete with logo files that actually exist. Gitignores `opencode.json`. OpenCode reads it from the project root, so a committed one would only configure OpenCode for people working inside a clone of this repo — a personal dev setting the repo has no reason to ship. Claude-Session: https://claude.ai/code/session_01FPx9e82XCTxDH1msNUAV1q * DX-2996 title the plugin "Upstash Redis" for marketplace search The skills and MCP cover every Upstash product and the descriptions still list them all, but the title now leads with the flagship. Marketplace search is largely name-driven, so a plugin called "Upstash" does not surface for people browsing for "redis". Sets `displayName` to "Upstash Redis" in the Claude and Cursor plugin.json and in both marketplace entries, and `interface.displayName` for Codex. Cursor's plugin.json had no display name at all, so it fell back to the slug. Deliberately unchanged, and now asserted by the check script: - `"name": "upstash"` — the install identifier behind `/plugin install upstash@upstash` and `codex plugin marketplace add`. Renaming it would break every install command in the README. - `author.name` / `owner.name` — the company, not the plugin. - The marketplace-level displayName, which names the vendor's marketplace rather than the plugin inside it. - Skill names, which AGENTS.md already rules out renaming for ranking. AGENTS.md documents the title and the three things adjacent to it that must not be renamed, including why this does not contradict the skills rule. Claude-Session: https://claude.ai/code/session_01FPx9e82XCTxDH1msNUAV1q * DX-2996 conform the Cursor manifests to their real schema, add $schema refs Answering "does every client actually accept displayName?" turned up a bug I introduced two commits ago. Cursor publishes real JSON Schemas (github.com/cursor/plugins/schemas) and both are additionalProperties:false. - `.cursor-plugin/marketplace.json` entries accept only name, source, description and minClientVersions. The earlier commit added nine fields Cursor rejects — displayName, version, author, homepage, repository, license, keywords, category, tags — plus owner.url. All removed; the entry now matches the shape Cursor's own marketplace uses. - That metadata belongs in `.cursor-plugin/plugin.json`, which does take it. Moved category and tags there. - Cursor has a `logo` field, so the icon works there too. Earlier commits claimed Codex was the only client with one; that was wrong, and the README and AGENTS.md are corrected. Cursor's own plugins use a bare relative path ("assets/logo.png", no "./"), so ours matches. $schema is added only where it is accepted: - `.claude-plugin/plugin.json` — verified with `claude plugin validate`, which passes with the key present. marketplace.json already had one. - Cursor takes none: its schemas declare no $schema property under additionalProperties:false, and none of Cursor's 65 official manifests carry one. The check script now fails if someone adds it. - Codex and Gemini CLI publish no schema URL, so neither gets one. - plugin.json and mcp.json keep the agent-plugins.org URLs, the only ones that actually serve JSON rather than a docs page. AGENTS.md gains a per-client schema table and the two Cursor traps, so the next person copies fields between manifests only after checking. Claude-Session: https://claude.ai/code/session_01FPx9e82XCTxDH1msNUAV1q