@buildinternet/releases-skills 0.45.0 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buildinternet/releases-skills",
3
- "version": "0.45.0",
3
+ "version": "0.47.0",
4
4
  "description": "Agent skills bundled with the Releases CLI. Markdown playbooks for changelog ingest, discovery, and analysis.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -13,16 +13,20 @@ description: >
13
13
 
14
14
  Turn changelog data into competitive intelligence by analyzing release patterns across a cohort of related companies.
15
15
 
16
- ## Key Operations
16
+ This is a **reader** workflow — it uses only the public, unauthenticated tools. There is no AI summarize/compare tool on the hosted MCP and no `summary`/`compare` command in the CLI; you fetch the raw release data and synthesize the analysis yourself.
17
17
 
18
- | Operation | CLI | Typed tool |
19
- |-----------|-----|------------|
20
- | Check existing sources | `releases list --query <company> --json` | `list_catalog` with query param; `list_sources` is a deprecated alias |
21
- | Fetch releases | `releases admin source fetch <slug> --max 50` | `manage_source` action "fetch" with identifier (ID or slug) |
22
- | Get latest releases | `releases tail <slug> --json` | `get_latest_releases` with source/org and limit |
23
- | Search releases | `releases search <query> --json` | `search` with `type: ["releases"]`; `search_releases` is a deprecated alias |
24
- | Summarize | `releases summary <slug> --json` | (not available as typed tool) |
25
- | Compare | `releases compare <slugA> <slugB> --json` | (not available as typed tool) |
18
+ ## Tools for each step
19
+
20
+ | Operation | CLI (reader) | MCP tool |
21
+ |-----------|--------------|----------|
22
+ | Find what's indexed for a company | `releases search <company> --json` | `search` (with `type: ["orgs","catalog"]`) |
23
+ | List a company's sources | `releases list --query <company> --json` | `list_catalog` (scope with `organization`) |
24
+ | Latest releases (source or org) | `releases tail <slug> --json` · `releases tail --org <org> --json` | `get_latest_releases` (`organization` / `product`, `since`/`until`) |
25
+ | Keyword/semantic release search | `releases search <query> --json` | `search` with `type: ["releases"]` |
26
+ | Read one release in full | `releases get <rel_id> --json` | `get_release` |
27
+ | Read a tracked CHANGELOG slice | `releases admin source changelog <slug> --tokens <n>` (key-gated; readers use MCP) | `get_catalog_entry` with `changelog_tokens` / `changelog_offset` (keyless) |
28
+
29
+ All releases are indexed already — you don't need to (and as a reader can't) trigger fetches. If a company isn't in the registry at all, say so rather than trying to onboard it; onboarding is an operator task.
26
30
 
27
31
  ## Workflow
28
32
 
@@ -30,45 +34,40 @@ Turn changelog data into competitive intelligence by analyzing release patterns
30
34
 
31
35
  Pick 3-6 companies in the same competitive space. Good cohorts share a common buyer or technical layer (e.g., developer databases, frontend frameworks, observability tools).
32
36
 
33
- ### 2. Check existing sources
34
-
35
- Search for each company to see what sources are indexed. If a company isn't in the system, it needs to be onboarded first.
36
-
37
- ### 3. Fetch recent releases
37
+ ### 2. See what's indexed
38
38
 
39
- Fetch each source. The system skips unchanged feeds automatically.
39
+ Resolve each company with `search` (or `releases search`). For discovery-style cohorts ("find observability vendors with edge offerings"), `search` with `type: ["orgs","catalog"]` is vector-backed and matches on description and category — better than a slug-substring `list_catalog --query`. If a company isn't found, note it as a gap rather than fabricating data.
40
40
 
41
- ### 4. Get latest releases
41
+ ### 3. Pull latest releases with dates
42
42
 
43
- Get structured release data with dates for each source. Use a limit (e.g., 50) to cap results. For org-wide views, filter by organization instead of individual source.
43
+ Get structured release data per source or per org. Scope by `organization` for a whole-company view, or by a single source/product for a narrower one. Use a `since` window (e.g. `"6m"`) or a count limit to bound the set. Dates are what you'll count for velocity, so keep them.
44
44
 
45
- ### 5. Search and cross-reference
45
+ ### 4. Search and cross-reference
46
46
 
47
- Search across all indexed releases to find specific features, breaking changes, or patterns. The unified `search` tool (with `type: ["releases"]`) is hybrid (lexical + semantic) by default natural-language queries like "auth refresh tokens" or "cold start improvements" work without exact keyword matches. Pass `mode: "lexical"` if you need strict keyword behavior.
47
+ Search across all indexed releases to find a specific feature, breaking change, or pattern. Release search is hybrid (lexical + semantic) by default, so natural-language queries like "auth refresh tokens" or "cold start improvements" work without exact keyword matches. Pass `mode: "lexical"` (CLI `--mode lexical`) when you need strict keyword behavior.
48
48
 
49
49
  **Result shape:** every hit carries a `kind` discriminator:
50
- - `kind: "release"` — a normal release row, use as-is.
51
- - `kind: "changelog_chunk"` — a passage from a stored CHANGELOG.md file. The hit includes `sourceSlug`, `chunkOffset`, and `chunkLength`. Chain into `get_source_changelog({ slug: sourceSlug, offset: chunkOffset, limit: chunkLength * 3 })` to read the surrounding section before quoting it. Chunk hits often surface older or more granular notes than what's in the indexed release rows, so they're useful for "when did X first ship" questions.
52
50
 
53
- For org/product/source discovery (e.g. "find observability vendors with edge offerings"), use `search` with `type: ["orgs", "catalog"]` instead of `list_catalog --query` it's vector-backed and matches on description and category, not just slug substring.
51
+ - `kind: "release"` — a normal release row; use it directly.
52
+ - `kind: "changelog_chunk"` — a passage from a stored CHANGELOG.md. The hit includes the source id and the chunk's `offset` and `length`. To read the surrounding section before quoting, call `get_catalog_entry` with that source id and `changelog_offset` set to the chunk offset (add `changelog_tokens`, e.g. 2000, for a heading-aligned slice). Chunk hits often surface older or more granular notes than the indexed release rows, so they're useful for "when did X first ship" questions.
54
53
 
55
- ### 6. Synthesize
54
+ ### 5. Synthesize
56
55
 
57
- Combine summaries and comparisons into a structured analysis:
56
+ Combine the raw data into a structured analysis:
58
57
 
59
- - **Release velocity table** — releases per company, cadence pattern
58
+ - **Release velocity table** — releases per company over the window, cadence pattern
60
59
  - **Trends adopted across the board** — features 3+ companies shipped in the same window
61
60
  - **Differentiating bets** — what each company is investing in that others aren't
62
- - **Gaps** — what competitors shipped that a company hasn't
63
- - **Forecasts** — specific predictions based on pre-release tracks, deprecations, and trajectory
61
+ - **Gaps** — what competitors shipped that a given company hasn't
62
+ - **Forecasts** — predictions grounded in pre-release tracks, deprecations, and trajectory
64
63
 
65
64
  ## Output
66
65
 
67
- Ask the user where to save the analysis, or use your best judgment based on the project's conventions. Include a "Process Notes" section documenting which CLI commands were used so the analysis is reproducible.
66
+ Ask the user where to save the analysis, or use your best judgment based on the project's conventions. Include a short "Process Notes" section listing the exact commands/tools used, so the analysis is reproducible.
68
67
 
69
68
  ## Important
70
69
 
71
- - Focus on what companies shipped. If a source has noisy data (blog posts mixed in, missing dates), work around it silently. Don't include source quality commentary in the report unless a company had to be substantially excluded.
72
- - Fill data gaps with web fetches. List sources to get release URLs, then WebFetch to spot-check pages for missing dates, versions, or feature details.
73
- - For velocity counting, get the latest releases with dates CLI: `releases tail <slug> --json`, typed tool: `get_latest_releases`.
74
- - AI-powered summarize and compare are only available via CLI (`releases summary`, `releases compare`). When using typed tools, synthesize manually from raw release data.
70
+ - Focus on what companies shipped. If a source has noisy data (blog posts mixed in, missing dates), work around it silently — don't pad the report with source-quality commentary unless a company had to be substantially excluded.
71
+ - Fill data gaps with web fetches: list a source to get release URLs, then WebFetch to spot-check pages for a missing date, version, or detail.
72
+ - For velocity counting, lean on the dated rows from `get_latest_releases` / `releases tail --json`.
73
+ - Comparison and summarization are yours to synthesize from raw release data there is no built-in tool that does it for you.
@@ -1,102 +1,62 @@
1
1
  ---
2
2
  name: releases-cli
3
- description: Use the `releases` CLI to search, inspect, and manage the Releases.sh changelog registry from the terminal. Activate when the user mentions "releases CLI", runs a `releases` command, asks how to install the CLI, or wants to add/edit/fetch sources or organizations programmatically.
3
+ description: Use the `releases` CLI to search, browse, and read the Releases.sh changelog registry from the terminal — the keyless, agent-friendly peer of the Releases MCP. Activate when the user mentions "releases CLI", runs a `releases` command, asks how to install it, or wants to look up releases, sources, orgs, collections, or changelogs from a shell.
4
4
  ---
5
5
 
6
6
  # releases CLI
7
7
 
8
- The `releases` CLI does two things: lets anyone search and browse the public changelog registry at [releases.sh](https://releases.sh), and lets API-key holders manage orgs, products, sources, and releases through `releases admin` subcommands.
8
+ The `releases` CLI is a first-class, **keyless** way to query the public changelog registry at [releases.sh](https://releases.sh) the terminal peer of the Releases MCP. Anyone can search, tail, list, and inspect releases with no account and no API key; it talks to `api.releases.sh` by default with zero configuration. (A separate, invite-only `admin` surface exists for maintainers — see the short note at the end — but reads never need it.)
9
+
10
+ Reach for the CLI when the user is working in a shell or wants piped/scriptable output; reach for the MCP when you're answering conversationally with typed tools. They cover the same registry.
9
11
 
10
12
  ## Install
11
13
 
12
14
  ```bash
13
15
  brew install buildinternet/tap/releases # recommended on macOS / Linux
14
- npm install -g @buildinternet/releases # or via npm
15
- ```
16
-
17
- Or run one-off without installing:
18
-
19
- ```bash
20
- npx @buildinternet/releases search "react"
16
+ npm install -g @buildinternet/releases # or via npm
17
+ npx @buildinternet/releases search "react" # one-off, no install
21
18
  ```
22
19
 
23
- The CLI talks to `api.releases.sh` by default — no configuration needed for reader commands.
24
-
25
- ### Refreshing this skill
20
+ ## Reader commands (no auth, no key)
26
21
 
27
- To install or refresh the bundled releases skills (this one + `releases-mcp`, `finding-changelogs`, etc.) for any supported agent:
22
+ Full reference: **[references/reader.md](references/reader.md)**. The shape is verb-first, and every command takes `--json`.
28
23
 
29
24
  ```bash
30
- releases skills install # detected agent (auto), current project
31
- releases skills install -g # user-wide install instead
25
+ releases search "breaking change" # unified search: orgs, catalog, collections, releases
26
+ releases tail next-js # latest releases from one source (slug or src_…)
27
+ releases tail --org vercel --count 20 # latest across a whole org
28
+ releases list --category ai # browse sources (alias: `releases sources`)
29
+ releases list --query shadcn # name / slug / url substring
30
+ releases get vercel # inspect any entity by id or slug
31
+ releases lookup domain vercel.com # resolve a domain/URL to its registry entry
32
+ releases collection list # browse curated cross-org playlists
33
+ releases collection releases frontier-ai-labs # the feed for one collection
34
+ releases stats # registry overview
35
+ releases categories # valid --category values (fixed taxonomy)
32
36
  ```
33
37
 
34
- Skills are symlinked by default — re-running `releases skills install` refreshes everything atomically.
38
+ Two commands built for agents specifically:
35
39
 
36
- ## Command shape
40
+ - `releases agent-context` — emits a versioned JSON document describing every command, argument, and option. When in doubt about exact flags, call this instead of guessing; it's the CLI's machine-readable source of truth.
41
+ - `releases skills install` — installs/refreshes the bundled skills (`-g` for user-wide). Symlinked by default, so re-running refreshes atomically.
37
42
 
38
- - **Reads (verb-first):** `releases list` · `releases search` · `releases tail` · `releases get` · `releases stats`
39
- - **Writes (`admin <noun> <verb>`):** `releases admin source update` · `releases admin source create` · `releases admin product create` · `releases admin org create`
40
- - List sources with `releases list` (also `releases sources` — alias). Do NOT guess `releases sources list`; that path does not exist.
41
- - Writes live under `releases admin <noun> <verb>`, not at the top level.
43
+ ### Conventions worth knowing (all in the reader reference)
42
44
 
43
- ## What this skill covers
44
-
45
- - **[Reader commands](references/reader.md)**Search, inspect, and export changelog data. No API key required.
46
- - **[Admin commands](references/admin.md)** — Add/edit sources, manage orgs and products, fetch releases, run policies. Requires `RELEASES_API_KEY`.
47
-
48
- ## Quick Reference
49
-
50
- ```bash
51
- # Reader (no auth required)
52
- releases search "breaking change" # hybrid FTS + semantic search
53
- releases tail next-js # latest releases from one source
54
- releases tail src_abc123 # IDs work anywhere a slug does
55
- releases tail --org vercel --count 20 # latest from a whole org
56
- releases list --category ai # browse sources
57
- releases get vercel # dispatch by id or slug
58
- releases get org_abc123 # typed IDs are accepted
59
- releases stats # registry overview
60
- releases categories # list valid category values
61
-
62
- # Admin (requires RELEASES_API_KEY)
63
- releases admin source create "Linear" --url https://linear.app/changelog
64
- releases admin source fetch <source> --max 50 # source = src_… or slug
65
- releases admin org create "Acme" --category cloud
66
- releases admin product create "CLI" --org acme # --org accepts org_…, slug, domain, name, or handle
67
- releases admin discovery onboard "Stripe" # AI-powered discovery agent
68
-
69
- # Local stdio MCP bridge (proxies to api.releases.sh)
70
- releases admin mcp serve
71
- ```
45
+ - **IDs and slugs are interchangeable** wherever an identifier is expected (`org_…`, `prod_…`, `src_…`, `rel_…`); IDs are stable across renames. Source/product commands also take an `org/slug` coordinate (e.g. `vercel/vercel-ai-sdk`), which skips a resolver round-trip.
46
+ - **`--json` everywhere** for stable output. Release readers (`get`, `search`, `tail`) return a **slim** shape by default (core fields + markdown-stripped `excerpt` + `contentTokens` hint) to save tokens; pass `--full` for the complete payload. (`list` is the inverse: verbose by default, `--compact` for less.)
47
+ - **Piped output is bare TSV** (no headers/color/truncation), so `releases list | cut -f2` works without parsing ANSI but note release rows repeat the title across several columns, so check the layout or just use `--json` before slicing by column number. `COLUMNS=<n>` overrides detected width.
72
48
 
73
- Every command that takes an org / product / source / release identifier accepts the typed ID (`org_…`, `prod_…`, `src_…`, `rel_…`) interchangeably with the slug — including `--org`, `--product`, `--source` flags. IDs are stable across renames; slugs are friendlier to type. Source and product commands also accept an `org/slug` coordinate (e.g. `vercel/vercel-ai-sdk`); coordinates and typed IDs are unambiguous and skip an extra resolver round-trip that bare slugs require. Every reader command accepts `--json` for machine-readable output.
49
+ ### Reading a tracked changelog
74
50
 
75
- Tabular reader commands fit themselves to the terminal width when stdout is a TTY (column truncation with `…`) and switch to bare TSV (no headers, no color, no truncation) when stdout is piped so `releases org list | cut -f2` works without parsing ANSI. Set `COLUMNS=<n>` to override the detected width. Use `--json` whenever you need stable, complete output for parsing.
51
+ `releases get <source> --json` reports `hasChangelogFile` and the `changelogUrl` keyless, so you can tell whether a source maintains a checked-in CHANGELOG.md. To read the **sliced content** keyless, use the MCP's `get_catalog_entry` (with `changelog_tokens` / `nextOffset`) or fetch the `changelogUrl` directly the CLI's `releases admin source changelog` wrapper is key-gated and won't run without auth.
76
52
 
77
- The release readers (`get`, `search`, `tail`/`latest`) return a **slim** JSON shape by default — core fields plus a markdown-stripped `excerpt` and `contentChars`/`contentTokens` size hints — to keep agent token usage down; pass `--full` for the complete payload. (This is the inverse of `list`, which is verbose by default with an opt-in `--compact`.) See `references/reader.md`.
78
-
79
- Every mutating admin command accepts `--dry-run` to print the planned write (with all validations applied) without calling the API. Pair with `--json` for a machine-readable plan. See `references/admin.md` for the full coverage list.
80
-
81
- ## Authentication
82
-
83
- Reader access is unauthenticated and may be rate-limited per IP.
84
-
85
- **Admin access is closed beta.** `releases admin …` commands require a Bearer token, but the hosted registry does not currently expose a self-serve flow for generating keys — an external user cannot create one on their own. If the user asks how to get an API key, explain this and point them at the project repo to request access. Don't invent a signup URL.
86
-
87
- If a key is available:
88
-
89
- ```bash
90
- export RELEASES_API_KEY=your_key
91
- export RELEASES_API_URL=https://api.releases.sh # optional, this is the default
92
- ```
53
+ ## Common Mistakes
93
54
 
94
- These can also go in a `.env` file Bun auto-loads it when running from source.
55
+ - `releases list` lists sources (alias `releases sources`). Do NOT write `releases sources list` — it reads `list` as a source slug and fails with "Source not found: list".
56
+ - Default read cap is 200 releases per source; use `--max <n>` or `--all` to override.
57
+ - There is **no** `summary` or `compare` command in this CLI, and **no** AI summarization tools on the hosted MCP (`summarize_changes` / `compare_products` do not exist). To summarize or compare, read each entity with `releases get` / `releases tail` (or `--json`) and synthesize the answer yourself.
58
+ - Don't reach for `admin` commands to do reads — every read above is keyless. `admin` is only for registry maintenance and requires a key (below).
95
59
 
96
- ## Common Mistakes
60
+ ## Admin surface (invite-only — reads never need it)
97
61
 
98
- - `releases admin …` without `RELEASES_API_KEY` set fails fast with a clear error don't retry the same command. Note that keys are not self-serve yet (see Authentication).
99
- - Slug renames (`admin source update <identifier> --slug new-slug`) require `--confirm-slug-change` because they break web links.
100
- - `releases admin source fetch` with no source or filter is blocked in remote mode. Use `--stale`, `--unfetched`, `--retry-errors`, `--changed`, or a source identifier (src_… or slug).
101
- - Default fetch cap is 200 releases per source (GitHub pagination limits). Use `--max <n>` or `--all` to override.
102
- - `summary` and `compare` are *not* in this CLI. Those commands require AI provider calls and live in the private maintainer tooling. Use the hosted MCP tools `summarize_changes` / `compare_products` at `mcp.releases.sh` instead.
62
+ `releases admin <noun> <verb>` manages the registry (create/update sources, orgs, products; fetch; discovery; policies). It requires `RELEASES_API_KEY`, and **keys are not self-serve** — there's no public signup. Admin commands fail fast at startup without a key, so don't retry them unauthenticated, and don't fall back to them for read tasks. If a user asks how to get a key, tell them access is currently invite-only and point them at the project repo; don't invent a signup URL. Full operator reference: **[references/admin.md](references/admin.md)**.
@@ -4,6 +4,8 @@ Reader commands are unauthenticated — no API key required. They talk to `api.r
4
4
 
5
5
  **Release JSON is slim by default.** `get`, `search`, and `tail`/`latest` return a lean release shape — `id`, `version`, `title`, `summary`, a markdown-stripped `excerpt`, `url`, `publishedAt`, nested `source`/`org`, and `contentChars`/`contentTokens` size hints. This drops storage internals (`contentHash`, `sourceId`, `versionSort`, `fetchedAt`, …) and the redundant `title*` variants to keep token usage low. Add `--full` when you need the complete payload (including the full `content` body). `summary` may be `null`; lean on `excerpt` / `contentChars` to decide whether to pull more.
6
6
 
7
+ > **Piping note:** in the default (non-`--json`) TSV output, release rows repeat the title across several columns (raw title, normalized title, version). Don't assume `cut -f2` lands on a unique field — check the row layout first, or just use `--json` for stable parsing.
8
+
7
9
  ## Search
8
10
 
9
11
  Unified search across organizations, the catalog (products + standalone sources), and releases.
@@ -100,15 +102,40 @@ releases categories --json
100
102
 
101
103
  The category list is fixed — adding a new category requires a code change in `@buildinternet/releases-core`.
102
104
 
103
- ## Changelog slicing (admin CLI, reader endpoint)
105
+ ## Reading a tracked changelog
106
+
107
+ `releases get <source> --json` reports `hasChangelogFile` and `changelogUrl` keyless, so you can detect whether a source maintains a checked-in CHANGELOG.md. This only exists for **sources that track one** — tag-only repos (e.g. Next.js, which ships GitHub releases but no CHANGELOG file) and products report `hasChangelogFile: false`.
108
+
109
+ To read the **sliced content** without a key, use one of:
110
+
111
+ - The MCP tool `get_catalog_entry` with `changelog_tokens` (heading-aligned; recommended brackets 2000 / 5000 / 10000 / 20000) and chain via the returned `nextOffset`. Every response reports `totalTokens` so you can budget calls upfront.
112
+ - Fetch the `changelogUrl` directly (it points at the raw file on GitHub).
113
+
114
+ > The CLI also has a `releases admin source changelog <slug>` wrapper, but it lives under `admin` and is **key-gated** — it fails with `"admin" requires an API key` for keyless users. Prefer the two keyless paths above unless you already hold an admin key.
115
+
116
+ ## Collections
117
+
118
+ Curated cross-org "playlists" (e.g. Frontier AI Labs, Coding Agents), keyless:
119
+
120
+ ```bash
121
+ releases collection list # all collections
122
+ releases collection get frontier-ai-labs # members of one collection
123
+ releases collection releases frontier-ai-labs # interleaved cross-org release feed (--limit <n>, --json)
124
+ ```
125
+
126
+ ## Domain lookup
127
+
128
+ Resolve a domain or URL to the org/product that owns it (keyless):
129
+
130
+ ```bash
131
+ releases lookup domain vercel.com
132
+ releases lookup domain https://tailwindcss.com/blog
133
+ ```
104
134
 
105
- The stored CHANGELOG.md for a GitHub source can be sliced from the reader API. The CLI wrapper lives under admin for discoverability but the endpoint itself is public:
135
+ ## Agent self-discovery
106
136
 
107
137
  ```bash
108
- releases admin source changelog apollo-client # full file
109
- releases admin source changelog apollo-client --limit 10000 # first 10k chars, heading-aligned
110
- releases admin source changelog apollo-client --tokens 5000 # first ~5k cl100k_base tokens
111
- releases admin source changelog apollo-client --offset 10000 --json
138
+ releases agent-context # versioned JSON: every command, argument, and option
112
139
  ```
113
140
 
114
- `tokens` and `limit` are both heading-aware; `tokens` wins when both are passed. Chain successive calls via the returned `nextOffset` to reconstruct the file exactly. Recommended token brackets: 2000 / 5000 / 10000 / 20000.
141
+ When unsure of exact flags or subcommands, call `agent-context` rather than guessing it's the CLI's own machine-readable contract, versioned via `schemaVersion`.
@@ -5,7 +5,7 @@ description: Use when the user asks about recent releases, changelogs, what's ne
5
5
 
6
6
  # Releases.sh — Changelog Lookup
7
7
 
8
- When the user asks about releases, changelogs, or version updates, use the Releases.sh MCP tools to fetch current data instead of relying on training data.
8
+ When the user asks about releases, changelogs, or version updates, use the Releases.sh MCP tools to fetch current data instead of relying on training data. Training data is stale for fast-moving libraries; these tools read the live registry.
9
9
 
10
10
  ## When to Use This Skill
11
11
 
@@ -15,43 +15,57 @@ Activate when the user:
15
15
  - Wants recent releases or changelogs ("Show me the latest Tailwind releases")
16
16
  - Asks about breaking changes or migration ("Were there breaking changes in Prisma 6?")
17
17
  - Wants to compare release activity between products ("Compare Bun vs Deno releases")
18
- - Mentions version updates, release notes, or changelogs in the context of a specific product
18
+ - Mentions version updates, release notes, or changelogs for a specific product
19
+ - Asks about a curated topic feed ("what's new across the AI labs?")
20
+
21
+ ## The Tools
22
+
23
+ The hosted server exposes these tools. There is no AI summarization or comparison tool — you synthesize those yourself from the data below.
24
+
25
+ - `search` — unified search across four sections: orgs, catalog (products + standalone sources), collections, and releases. Your default entry point.
26
+ - `get_latest_releases` — recent releases, optionally scoped by `organization` or `product`. Use `since` / `until` for time windows.
27
+ - `list_organizations` / `get_organization` — browse and inspect orgs.
28
+ - `list_catalog` / `get_catalog_entry` — browse and inspect catalog entries. Each entry carries `entryType: "product" | "source"`. `get_catalog_entry` also serves CHANGELOG slices (see below).
29
+ - `get_release` — fetch one release in full by its `rel_` id (ids come from `search` / `get_latest_releases`).
30
+ - `list_collections` / `get_collection` / `get_collection_releases` — curated cross-org "playlists" (e.g. "Frontier AI Labs", "Coding Agents") independent of the category taxonomy.
31
+ - `lookup_domain` — resolve a URL/domain to the org that owns it. Use when you have a URL-shaped input rather than a name.
19
32
 
20
33
  ## How to Look Up Releases
21
34
 
22
- ### Step 1: Find the Organization or Catalog Entry
35
+ ### Step 1: Resolve the entity
36
+
37
+ Start with `search` and the product or company name — it returns orgs, catalog, collections, and releases in one call, so you usually don't need a separate lookup. Narrow with `type` (e.g. `type: ["catalog"]` for a fast registry-only lookup, `type: ["releases"]` for pure release content).
38
+
39
+ If a name doesn't resolve, try variations:
23
40
 
24
- Call `list_organizations` with the library/product name as the `query` parameter. For product-specific questions, browse the catalog (products + standalone sources) with `list_catalog` and fetch detail with `get_catalog_entry` — these replaced the older `list_products` / `get_product` / `list_sources` / `get_source` tools, which still exist as deprecated aliases.
41
+ - The company instead of the product ("Vercel" rather than "Next.js")
42
+ - The GitHub org ("supabase")
43
+ - A domain — or use `lookup_domain` directly (e.g. "tailwindcss.com")
44
+ - A `{org}/{repo}` GitHub coordinate ("vercel/next.js"). When nothing matches a coordinate-shaped query, the registry probes GitHub on demand and the response carries a `lookup` field with status `indexed` / `existing` / `empty` / `not_found` / `deferred`. Coordinate matching is case-insensitive.
25
45
 
26
- The unified `search` tool is also available — it returns `orgs`, `catalog`, and `releases` sections in one call. Catalog hits carry a `kind: "product" | "source"` discriminator, so you can route a click to either a product page or a standalone source. (Older API responses send the same array under a deprecated `products` alias; new clients should consume `catalog`.)
46
+ ### Step 2: Pick the right follow-up
27
47
 
28
- If the query returns no results, try variations:
29
- - The company name instead of the product name (e.g., "Vercel" instead of "Next.js")
30
- - The GitHub org name (e.g., "supabase")
31
- - A domain (e.g., "tailwindcss.com")
32
- - A `{org}/{repo}` GitHub coordinate (e.g., "vercel/next.js" or "github:vercel/next.js"). When `search` finds no entity match for a coordinate-shaped query, the registry probes GitHub on demand and the response includes a `lookup` field with status `indexed` / `existing` / `empty` / `not_found` / `deferred`. Coordinate matching is case-insensitive, so `Shopify/toxiproxy` and `shopify/toxiproxy` resolve identically.
48
+ - **"What's new?" / "Latest releases"** `get_latest_releases` with `organization` or `product`. Add `since` (e.g. `"30d"`, `"6m"`, or an ISO date) for "last month" / "since v4" style asks.
49
+ - **Keyword across the whole registry** `search` with a descriptive query; narrow with `type`.
50
+ - **One release in full** (to quote a note verbatim) → `get_release` with the `rel_` id from search results.
51
+ - **Entity metadata** → `get_catalog_entry` (products/sources) or `get_organization` (orgs, with an AI overview preview; `include_overview: true` for the full briefing).
52
+ - **Full maintained CHANGELOG.md** → `get_catalog_entry` with `include_changelog: true`. This only applies to **source** entries that track a checked-in CHANGELOG.md — products and tag-only repos (e.g. Next.js, which ships GitHub releases but no CHANGELOG file) return none. For large files, pass `changelog_tokens` (recommended brackets: 2000 / 5000 / 10000 / 20000) to get a heading-aligned slice, then chain via the returned `nextOffset`. Every response reports `totalTokens` so you can budget calls upfront.
53
+ - **A curated topic feed** → `list_collections` to discover, `get_collection_releases` for the interleaved cross-org feed.
33
54
 
34
- ### Step 2: Choose the Right Tool
55
+ ### Step 3: Compare products (no built-in tool)
35
56
 
36
- - **"What's new?" / "Latest releases"** Use `get_latest_releases` with the organization or product identifier (typed ID like `org_…` / `prod_…` / `src_…`, slug, or `org/slug` coordinate)
37
- - **Specific feature or keyword across orgs + catalog + releases** → Use `search` (unified) with a descriptive query; narrow via `type: ["releases"]` etc.
38
- - **Releases-only search** → Use `search_releases` (kept for back-compat) when you only want release rows
39
- - **Single release by id** → Use `get_release` when you already have a `rel_` id (search results include ids)
40
- - **Catalog deep-dive (product or standalone source)** → Use `get_catalog_entry` for metadata, tags, and linkage
41
- - **Organization detail** → Use `get_organization`
42
- - **Canonical CHANGELOG.md from a GitHub repo** → Use `get_catalog_entry` with `include_changelog: true` when the user wants the full maintained file, not just the tagged releases (refreshed on every fetch). For large files, pass `changelog_tokens` (cl100k_base budget, e.g. 5000 or 10000) to get a heading-aligned slice that fits a known context window; chain via the returned `nextOffset`. Every response reports `totalTokens` so you can plan how many calls you need upfront.
43
- - **Compare two products** → Fetch each product separately with `get_catalog_entry` (and `get_latest_releases` for recent activity), then synthesize the comparison from the returned data. The hosted MCP server does not expose AI summarization tools.
57
+ There is no `compare_products` or `summarize_changes` tool on the hosted server. To compare, fetch each product separately (`get_catalog_entry` for metadata, `get_latest_releases` for recent activity) and synthesize the comparison yourself. Both products must be indexed if one isn't found, say which is missing rather than guessing.
44
58
 
45
- ### Step 3: Present Results
59
+ ### Step 4: Present results
46
60
 
47
- - Lead with the most relevant information for the user's question
48
- - Include version numbers and dates when available
49
- - Quote key changes directly from the release notes
50
- - If results are sparse, mention that the product may not be fully indexed yet
61
+ - Lead with what answers the user's question.
62
+ - Include version numbers and dates when available.
63
+ - Quote key changes from the release notes (keep quotes short).
64
+ - If results are sparse, say the product may not be fully indexed yet — don't fabricate release info.
51
65
 
52
66
  ## Guidelines
53
67
 
54
- - Pass the user's full question context into query parameters for better relevance
55
- - When the user mentions a time range ("last month", "since v4"), use the `days` parameter on `get_latest_releases`
56
- - If a product isn't found, say so clearly don't fabricate release information
57
- - For comparison questions, both products must be indexed; if one isn't found, explain which is missing
68
+ - Pass the user's full question into query parameters for better relevance.
69
+ - For time windows, use `since` / `until` on `get_latest_releases` and `search` (relative shorthand like `"90d"` or ISO dates).
70
+ - The `kind` filter (`platform|sdk|mobile|desktop|docs|integration|tool`) behaves differently by surface: on **release** results a source inherits its parent product's kind, so `kind: "sdk"` returns content under any SDK product; on **catalog** results it matches the row's own kind only. Reach for it when a query is explicitly scoped to one kind ("which SDKs shipped this week").
71
+ - If a product isn't found, say so clearly don't invent releases.