{"name":"sh.releases/mcp","slug":"releases-mcp","title":"Releases","description":"An agent-friendly API for product changelogs. A unified registry via CLI, API, or MCP.","url":"https://mcp.market/server/releases-mcp","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","ai"],"presence":{"score":29,"stars":7,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T13:08:10.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T20:01:37.020Z","last_ok_at":"2026-09-19T20:01:37.020Z","latency_ms":890},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/buildinternet/releases","website":null,"version":"0.15.1","remotes":[{"type":"streamable-http","url":"https://agents.releases.sh/mcp"}],"packages":[],"tools":[{"name":"follow","description":"Follow an organization or a product so it appears in your personalized feed (`get_personalized_feed`). Following an organization implicitly includes all of its products.\n\nRequires a signed-in user (a `relu_` user key or an OAuth token). `entity` is a typed id — an `org_…` id or a `prod_…` id — as returned by `search`, `get_organization`, or `get_catalog_entry`. Idempotent: following something you already follow is a no-op.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity to follow — an `org_…` or `prod_…` id (from search / get_* results)."}},"required":["entity"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_catalog_entry","description":"Detail for a single catalog entry — accepts a prod_ id, src_ id, or an org-scoped coordinate in the form orgSlug/slug (e.g. 'vercel/nextjs' or 'vercel/next-js'). Returns the union of product / source detail fields depending on the entry kind. Source entries list tracked CHANGELOG files by path and byte size. Pass `include_changelog: true` to inline the root CHANGELOG, or `changelog_path` / `changelog_offset` / `changelog_limit` / `changelog_tokens` to embed a specific file or slice — heading-aligned, supports per-package files in monorepos (e.g. `packages/next/CHANGELOG.md`), and emits `totalTokens` / `sliceTokens` for LLM context budgeting. Files over 1MB are flagged as truncated so you know the tail is missing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"Catalog entry identifier: prod_ id, src_ id, or org-scoped coordinate orgSlug/slug (e.g. 'vercel/nextjs'). Bare slugs without an org prefix are not accepted."},"include_changelog":{"description":"When true, inline the root tracked CHANGELOG for a source-kind entry. Ignored for products.","type":"boolean"},"changelog_path":{"description":"Specific CHANGELOG path for a source-kind entry (e.g. 'packages/next/CHANGELOG.md'). Passing this implies include_changelog.","type":"string"},"changelog_offset":{"description":"Character offset into the selected CHANGELOG. Snapped forward to the next heading unless 0. Passing this implies include_changelog.","type":"number"},"changelog_limit":{"description":"Target slice size in characters. Slice ends at a heading boundary. Defaults to 40000 when slicing without a token budget. Passing this implies include_changelog.","type":"number"},"changelog_tokens":{"description":"Target slice size in tokens (cl100k_base). Takes precedence over changelog_limit. Recommended brackets: 2000, 5000, 10000, 20000. Passing this implies include_changelog.","type":"number"}},"required":["identifier"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_collection","description":"Detail for a single collection — name, description, and the ordered list of member organizations. Hidden / on-demand orgs never leak through; only publicly visible orgs appear in the member list.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Collection slug (e.g. 'frontier-ai-labs')."}},"required":["slug"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_collection_releases","description":"Interleaved cross-org release feed for a collection — same shape as `get_latest_releases` but scoped to the collection's member orgs.\n\nCursor-paginated: pass `limit` for slice size (default 20), `cursor` to continue from a prior call. The result's `_meta.pagination` carries `kind: 'cursor'`, `hasMore`, and `nextCursor` when more rows exist; the response text echoes `nextCursor` so an LLM caller can chain without parsing `_meta`. Cursors are stable under inserts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Collection slug (e.g. 'frontier-ai-labs')."},"limit":{"description":"Slice size (1–200). Defaults to 20.","type":"integer","minimum":1,"maximum":200},"cursor":{"description":"Opaque continuation token from a prior call's `_meta.pagination.nextCursor`. Stale cursors are silently ignored — the call returns a fresh head of the feed.","type":"string"},"include_prereleases":{"description":"Include prerelease tags (alphas, betas, RCs). Defaults to false so the feed matches the public web view.","type":"boolean"}},"required":["slug"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_latest_releases","description":"Get the most recent releases, optionally filtered by product or organization. Excludes prereleases (canaries / alphas / betas / RCs) by default — pass `include_prereleases: true` to include them.\n\nCursor-paginated: pass `limit` for slice size (default 10), `cursor` to continue from a prior call. The result's `_meta.pagination` carries `kind: 'cursor'`, `hasMore`, and `nextCursor` when more rows exist; the response text echoes `nextCursor` so an LLM caller can chain without parsing `_meta`. Cursors are stable under inserts — a release added between calls won't shift the slice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"product":{"description":"Filter to a product's cross-source release feed. Accepts a prod_ id (expands to ALL sources under the product), a src_ id (single source), or an org-scoped coordinate in the form orgSlug/productSlug (e.g. 'vercel/next-js'). Bare slugs without an org prefix are not accepted. Mirrors the REST ?product= expansion — multi-source products (e.g. Next.js with GitHub releases + blog) return releases from all of their sources interleaved.","type":"string"},"organization":{"description":"Filter to sources belonging to this organization. Accepts an org_ id, slug, or registered domain.","type":"string"},"type":{"description":"Filter by release type: 'feature' for individual releases, 'rollup' for seasonal/quarterly catch-all posts. Omit to include both.","type":"string","enum":["feature","rollup"]},"kind":{"description":"Filter to releases from sources of a specific kind. Resolves through `source.kind ?? product.kind`, so an SDK repo with no own kind still matches its product's kind. Omit to include all kinds.","type":"string","enum":["platform","sdk","mobile","desktop","docs","integration","tool"]},"limit":{"description":"Slice size (1–200). Defaults to 10.","type":"integer","minimum":1,"maximum":200},"cursor":{"description":"Opaque continuation token from a prior call's `_meta.pagination.nextCursor`. Pass to fetch the next slice. Stale cursors are silently ignored — the call returns a fresh head of the feed.","type":"string"},"include_coverage":{"description":"Include releases grouped as coverage of another (e.g. marketing posts that re-announce a platform release). Defaults to false so each underlying launch appears once.","type":"boolean"},"include_prereleases":{"description":"Include prerelease tags (alphas, betas, RCs, canaries). Defaults to false so the feed matches the public web view.","type":"boolean"},"since":{"description":"Keep only releases published at or after this bound. Accepts an ISO date/datetime (`2026-01-01`) or relative shorthand (`90d`, `4w`, `6m`, `2y`). Filters `published_at`; undated releases are dropped.","type":"string"},"until":{"description":"Keep only releases published at or before this bound. Same input formats as `since`.","type":"string"},"minImportance":{"description":"Only include releases with an AI-scored `importance` >= this value (1-5; 5=landmark, 1=housekeeping). Releases with no score (unscored) are excluded when this is set. Mirrors the REST `?minImportance=` filter.","type":"integer","minimum":1,"maximum":5}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_organization","description":"Get detailed information about a single organization — accounts, tags, sources, products, aliases. When an AI-generated overview exists the response includes a short preview; pass `include_overview: true` to inline the full briefing (with a stale warning if the content is older than 30 days since last write).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"Organization identifier. Accepts an org_ id, slug, domain, name, or account handle."},"include_overview":{"description":"When true, inline the full AI-generated overview instead of the default first-paragraph preview.","type":"boolean"}},"required":["identifier"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_personalized_feed","description":"Your personalized release feed — recent releases from the organizations and products you follow, newest first. Requires a signed-in user. Same item shape as `get_latest_releases`, scoped to your follows.\n\nCursor-paginated: pass `cursor` from a prior response's `_meta.pagination.nextCursor` and optional `limit` (1–100, default 30).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cursor":{"description":"Opaque cursor from a previous page's `_meta.pagination.nextCursor`.","type":"string"},"limit":{"description":"Entries per page (1–100). Defaults to 30.","type":"integer","minimum":1,"maximum":100}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_release","description":"Fetch the full content of a single release by id. Release ids are returned by search or get_latest_releases — pass them here to read the whole entry (e.g. to quote a specific Next.js release note). Accepts the full rel_<nanoid> form or the bare 21-char nanoid.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Release id — 'rel_<nanoid>' or a bare 21-char nanoid"}},"required":["id"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"list_catalog","description":"List catalog entries — products and standalone sources combined into one list with an `entryType: 'product' | 'source'` discriminator per row.\n\nOrgs that group multiple sources under a product (e.g. Vercel → Next.js, Turborepo) surface those products; orgs with a single source that isn't part of a product surface it directly as an `entryType: 'source'` entry. Either shape is a reasonable thing to pass to `search(entity: ...)`.\n\nPaginated: defaults to 50 entries per page. Pass `page: 2` for the next slice. The footer surfaces the total when more pages exist.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"organization":{"description":"Organization to scope to. Accepts an org_ id, slug, domain, or name.","type":"string"},"kind":{"description":"Filter to catalog entries of a specific kind. Matches each row's own kind (a product's kind, or a standalone source's kind) — no source→product inheritance on this catalog surface. Omit to include all kinds.","type":"string","enum":["platform","sdk","mobile","desktop","docs","integration","tool"]},"page":{"description":"1-based page number. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"description":"Entries per page (1–200). Defaults to 50.","type":"integer","minimum":1,"maximum":200}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"list_collections","description":"List curated collections — named cross-org playlists (e.g. 'Frontier AI Labs') independent of the fixed category taxonomy.\n\nUse `get_collection` for a collection's full member list, or `get_collection_releases` for the interleaved cross-org release feed. Paginated: defaults to 50 entries per page; pass `page: 2` for the next slice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"page":{"description":"1-based page number. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"description":"Entries per page (1–200). Defaults to 50.","type":"integer","minimum":1,"maximum":200}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"list_follows","description":"List the organizations and products you follow (newest first). Requires a signed-in user.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"list_organizations","description":"List all indexed organizations, optionally filtered. Paginated: defaults to 50 entries per page; pass `page: 2` for the next slice. Orgs with zero indexed releases are hidden by default (curator-stub noise); set `include_empty: true` to see them.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Search across org name, slug, domain, and account handles","type":"string"},"platform":{"description":"Filter to orgs with an account on this platform","type":"string"},"include_empty":{"description":"Include orgs with zero indexed releases. Default false — empty orgs are stubs from in-flight discovery or broken parsers and surface as noise on the public catalog.","type":"boolean"},"category":{"description":"Filter to a single category slug (e.g. `ai`, `devops`). Aliases (e.g. `e-commerce`) resolve to their canonical category (`commerce`); unknown values are ignored (unfiltered).","type":"string"},"page":{"description":"1-based page number. Defaults to 1.","type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"description":"Entries per page (1–200). Defaults to 50.","type":"integer","minimum":1,"maximum":200}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"lookup_domain","description":"Resolve a domain to the org or product that owns it. The domain is normalized first (scheme, `www.`, path, and trailing slash stripped, lowercased), so `https://vercel.com/about` and `vercel.com` both look up the same row.\n\nReturns the matching org (with primary-vs-alias distinction) and any products whose alias targets the same domain. Pure resolution — does not probe the domain or materialize anything; unknown domains surface a 'no match' message. Use `lookup_domain` when you have a URL-shaped input; use `get_organization` when you already have a slug or id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to resolve. Any URL-shaped form is accepted; the server normalizes it."}},"required":["domain"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"search","description":"Unified search across the registry and release content. Returns up to four sections — organizations, catalog entries (products + standalone sources folded into one list), curated collections (cross-org playlists), and releases with CHANGELOG chunks interleaved by relevance.\n\nUse `type` to narrow the surfaces you want and skip the expensive paths. For example, pass `type: ['catalog']` to look up a known entity by name (fast, registry-only); pass `type: ['releases']` when you only care about release content and want to avoid entity lookups. Omit `type` to search all four.\n\nCollections surface via two paths: a direct match on the collection's name/description (lexical in every mode, plus a vector match in hybrid/semantic mode) and a member rollup that includes every collection containing one of the matched orgs. Member rollups carry a list of result-set org slugs that triggered the rollup so a UI can render an \"includes X\" hint.\n\nUse `entity` (product slug / prod_ id OR source slug / src_ id) to scope release results to one catalog entry. Product identifiers expand to every source under the product. Use `organization` to scope to a whole org. Release retrieval defaults to hybrid (FTS5 + semantic vectors fused via RRF); it silently degrades to lexical when vector infra is unavailable and flags the result.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"type":{"description":"Which sections to return. Omit to return all four. Use to skip expensive paths — e.g. ['catalog'] for registry-only lookups, ['releases'] for pure release search, ['collections'] for a quick playlist lookup.","type":"array","items":{"type":"string","enum":["orgs","catalog","releases","collections"]}},"organization":{"description":"Scope release results to sources belonging to this organization. Accepts an org_ id, slug, or registered domain.","type":"string"},"domain":{"description":"Scope to the org owning this domain. Input is normalized (scheme/path/www stripped, lowercased), so `https://vercel.com/` and `vercel.com` both work. Falls back to a 'no match' message when the domain isn't owned by anything indexed. Use this instead of `organization` when you have a URL-shaped input.","type":"string"},"entity":{"description":"Scope release results to one catalog entry. Accepts a prod_ id (expands to every source under the product), a src_ id, or an org-scoped coordinate in the form orgSlug/slug (e.g. 'vercel/nextjs'). Bare slugs without an org prefix are not accepted.","type":"string"},"product":{"description":"Scope release results to a specific product's sources. Accepts a prod_ id or an org-scoped coordinate in the form orgSlug/productSlug (e.g. 'vercel/next-js'). Bare slugs without an org prefix are not accepted. When both `entity` and `product` are supplied, `entity` takes precedence. The resolved product coordinate is echoed on `_meta.search.product`.","type":"string"},"limit":{"description":"Max results per section (default 20)","type":"number"},"mode":{"description":"Release-retrieval strategy. 'hybrid' (default) fuses FTS + vector results. 'lexical' is legacy FTS only. 'semantic' is vectors only. Falls back to lexical if vector infra is unavailable.","type":"string","enum":["lexical","semantic","hybrid"]},"include_coverage":{"description":"Include releases grouped as coverage of another (e.g. marketing posts that re-announce a platform release). Defaults to false so each underlying launch appears once.","type":"boolean"},"include_empty":{"description":"Include orgs with zero indexed releases in the `orgs` section. Default false — empty orgs are stubs and surface as noise. Scoping by `domain` ignores this and always returns the resolved org.","type":"boolean"},"kind":{"description":"Filter to a specific source/product kind. Release hits resolve through `source.kind ?? product.kind`; catalog hits filter on the row's own kind. The orgs and collections sections are unaffected; changelog chunk hits are unaffected.","type":"string","enum":["platform","sdk","mobile","desktop","docs","integration","tool"]},"since":{"description":"Keep only release hits published at or after this bound. Accepts an ISO date/datetime (`2026-01-01`) or relative shorthand (`90d`, `4w`, `6m`, `2y`). Filters `published_at`; undated releases are dropped. Only the releases section is affected — great for capability-discovery queries like 'who added X in the last 90 days'.","type":"string"},"until":{"description":"Keep only release hits published at or before this bound. Same input formats as `since`.","type":"string"}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"unfollow","description":"Stop following an organization or product. Requires a signed-in user. `entity` is an `org_…` or `prod_…` id. Idempotent: unfollowing something you don't follow is a no-op.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"entity":{"type":"string","description":"Entity to unfollow — an `org_…` or `prod_…` id."}},"required":["entity"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"whats_changed","description":"Given a package and a `from`/`to` version, return the changelog entries between them — `(from, to]`, from exclusive, to inclusive — with summaries and breaking-change verdicts. One call instead of reading N changelog pages to plan an upgrade.\n\n`package` is a tracked source slug or a GitHub `owner/repo` coordinate (set `ecosystem: \"github\"` for a bare coordinate). Reads already-indexed releases only. If the package isn't in the catalog you'll get a clear 'not tracked' answer (npm/PyPI names may not be mapped to a source yet).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"package":{"type":"string","description":"Package identifier — a source slug or a GitHub \"owner/repo\" coordinate."},"from":{"type":"string","description":"Version you're upgrading FROM (exclusive)."},"to":{"type":"string","description":"Version you're upgrading TO (inclusive)."},"ecosystem":{"description":"Optional resolution hint; \"github\" enables matching a bare owner/repo.","type":"string","enum":["npm","pypi","github"]},"minImportance":{"description":"Only include entries with an AI-scored `importance` >= this value (1-5; 5=landmark, 1=housekeeping). Entries with no score (unscored) are excluded when this is set.","type":"integer","minimum":1,"maximum":5}},"required":["package","from","to"],"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-19T20:15:33.721Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:15:33.682Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1383ms"]},"poisoning":{"score":15,"max":15,"notes":["16 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://agents.releases.sh/mcp","reachable":true,"authRequired":false,"latencyMs":1383,"serverInfo":{"name":"releases","version":"0.15.1"}}],"packages":[],"repo":{"found":true,"owner":"buildinternet","repo":"releases","archived":false,"pushedAt":"2026-09-19T13:08:10Z","stars":7,"forks":0,"openIssues":171,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/445666?v=4","ownerCreatedAt":"2010-10-19T16:27:44Z","license":"Apache-2.0"},"icon":{"url":"https://releases.sh/icon.svg?icon.00kkz8x8iqte7.svg","source":"registry"},"presence":{"stars":7,"forks":0,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-09-19T13:08:10.000Z","score":29}}}},"grade_history":[{"kind":"restore","fromGrade":"B","toGrade":"A","reason":"score 88","createdAt":"2026-09-19T20:15:36.455Z"}],"reviews":[]}