Changelogs your coding agents can read
MCP server
Streamable HTTP. 7 read tools with no sign-in, plus publishing with an API key.
release-ripple-roadmap.lovable.app/mcp
REST API
Releases, version diffs, JSON Feed, roadmap and search.
/api/public/v1
Quickstart
1. Find the changelog. Search by package, repository or product name. Every result has a slug you use everywhere else.
curl "https://release-ripple-roadmap.lovable.app/api/public/v1/search?q=@acme/analytics"2. Ask for an upgrade guide. The diff endpoint returns every breaking change with its migration steps, every deprecation, and each release in between.
curl "https://release-ripple-roadmap.lovable.app/api/public/v1/changelogs/acme/diff?from=1.4.0&to=2.0.0&format=markdown"3. Or give your agent the MCP server and just ask in plain language.
claude mcp add --transport http logpulse https://release-ripple-roadmap.lovable.app/mcp“Using the LogPulse changelog "acme", what changed between v1.4.0 and v2.0.0, and what do I need to change in my code?”
Data model
A release is a normal, human-friendly release note plus structured upgrade details.
| Field | Type | Description |
|---|---|---|
| version | string | null | Version it ships in, e.g. 2.0.0. Unique per changelog. |
| title | string | Headline. |
| summary | string | null | One sentence. |
| category | new | improved | fixed | What kind of change it is. |
| published_at | date-time | When it went live. |
| notes_markdown | string | Full release notes in Markdown. |
| has_breaking_changes | boolean | True when breaking_changes is not empty. |
| breaking_changes[] | object | { summary, affects?, migration? } — migration is Markdown steps. |
| deprecations[] | object | { item, replacement?, removal_version?, note? } |
| url | string | The release on the hosted changelog. |
{
"summary": "The callback option was removed from init()",
"affects": "@acme/analytics",
"migration": "Replace `init({ callback })` with `await init()`."
}How versions compare
- A diff covers releases after
fromup to and includingto— the changes you get by upgrading. - Comparison is semver-style and forgiving:
v2.0.0equals2.0.0, two- or four-part versions work, and pre-releases like2.0.0-beta.1sort before2.0.0. - Releases without a version still appear in the feed, but can't be placed in a range, so diffs skip them.
- Unknown versions don't fail: the diff still runs and adds a note to
notesso agents can tell the user.
Publishing from agents
Create an API key in Dashboard → Agents & API, store it as LOGPULSE_API_KEY, and post a release right after you ship. Publishing updates the widget, the hosted changelog, every feed and the MCP server at once — and emails subscribers on paid plans.
curl -X POST https://release-ripple-roadmap.lovable.app/api/public/v1/releases \
-H "Authorization: Bearer $LOGPULSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Webhooks retry automatically",
"version": "2.1.0",
"category": "improved",
"status": "published",
"body": "Failed webhook deliveries now retry with backoff for 24 hours.",
"deprecations": [{ "item": "retry_once option", "replacement": "retry_policy", "removal_version": "3.0" }]
}'Drop this into your AGENTS.md or CLAUDE.md so your coding agent does it for you:
## Release notes (LogPulse)
After you ship a user-facing change, publish a release note to our LogPulse changelog "your-slug":
- If the LogPulse MCP server is connected (https://release-ripple-roadmap.lovable.app/mcp, with our API key in its Authorization header), call publish_release. Otherwise POST https://release-ripple-roadmap.lovable.app/api/public/v1/releases with header `Authorization: Bearer $LOGPULSE_API_KEY`.
- Fields: "title", "version", "category": "new" | "improved" | "fixed", "body" (markdown), "status": "published"
- List breaking changes in "breaking_changes": [{ "summary", "affects", "migration" }] and deprecations in "deprecations": [{ "item", "replacement", "removal_version" }]
- Use "status": "draft" when a human should review it first.
- When a roadmap item ships, call post_roadmap_update (or PATCH https://release-ripple-roadmap.lovable.app/api/public/v1/roadmap/{id}) with { "status": "shipped", "linked_release": "<version>" }.
- Never paste the API key into chat or commit it; it lives in the environment.
Spec: https://release-ripple-roadmap.lovable.app/openapi.jsonAgents connected to the MCP server can do the same with the publish_release and post_roadmap_update tools, using the key as an HTTP header. Every write needs a key, so nobody can write to your changelog without one. See the REST reference and the MCP write tools.
Changelog converter (free)
For projects that aren't on LogPulse yet: send a CHANGELOG.md or a GitHub URL and get the same structured shape back — versions, dates, breaking changes with migration steps, deprecations — plus an llms.txt-style summary. No key, nothing stored. Try it in the browser at Changelog to JSON, or from MCP with convert_changelog.
curl "https://release-ripple-roadmap.lovable.app/api/public/v1/convert?url=https://github.com/vercel/next.js/releases/tag/v15.0.0&format=llms"curl -X POST https://release-ripple-roadmap.lovable.app/api/public/v1/convert \
-H "Content-Type: text/markdown" \
--data-binary @CHANGELOG.md- Endpoint:
https://release-ripple-roadmap.lovable.app/api/public/v1/convert. GET with?url=, or POST JSON{ "markdown": … }/{ "url": … }, or a rawtext/markdownbody. Addformat=llmsfor plain text only. - GitHub URLs: a release (
…/releases/tag/v1.2.0,…/releases/latest), the releases page (100 most recent), a repository (its CHANGELOG.md, or its releases) or any markdown file in a public repo. - Breaking changes come from Breaking / Major Changes / Migration headings,
BREAKING, ⚠️ or 💥 markers and conventional commits with!. Removed items count as breaking unless the changelog marks breaking changes itself. - Limits: 10 conversions per minute and 100 per day per IP, shared between the API and MCP; up to 1 MB per changelog.
Agent discovery
Agents and crawlers can find everything above from the domain alone:
| Field | Type | Description |
|---|---|---|
| /llms.txt | text/plain | What LogPulse is and where to read more (llms-full.txt has the full docs). |
| /.well-known/api-catalog | linkset+json | RFC 9727 API catalog: links the REST API to its OpenAPI spec and docs, and the MCP server to its card. |
| /mcp/server-card | mcp-server-card+json | MCP Server Card: endpoint, transport, protocol versions, optional API-key header and every tool with its input schema. |
| /.well-known/mcp/server-card.json | mcp-server-card+json | The same card at the older well-known path. |
| /.well-known/ai-catalog.json | ai-catalog+json | AI Catalog entry pointing to the server card. |
| /openapi.json | application/json | OpenAPI 3.1 description of the REST API. |
curl https://release-ripple-roadmap.lovable.app/.well-known/api-catalog
curl https://release-ripple-roadmap.lovable.app/mcp/server-card
curl -I https://release-ripple-roadmap.lovable.app/.well-known/api-catalogA HEAD request to the API catalog answers with Link: <…/.well-known/api-catalog>; rel="api-catalog", and every page carries <link rel="api-catalog"> in its head, so an agent that lands anywhere on release-ripple-roadmap.lovable.app can find the APIs.
Limits & caching
- Feed responses are cached for 60 seconds. New releases appear within a minute.
- All feed endpoints allow cross-origin requests and need no authentication.
- Rate limits: 300 REST requests and 120 MCP requests per minute per IP, and 120 per minute per API key. The free converter allows 10 conversions per minute and 100 per day per IP. Over the limit you get
429withRetry-After. - Only releases that are published, not scheduled for later and not targeted at a segment appear in feeds.
- Request bodies are limited to 200 KB; up to 50 breaking changes and 50 deprecations per release.
- Errors always look like
{ "error": { "code", "message", "details?" } }.
Open-source projects
Public repositories with an open-source license get every paid feature free — unlimited releases, AI drafts from GitHub and email blasts. Link your changelog from your README and verify in Dashboard → Billing. Learn more.