MCP server

One MCP server for every LogPulse changelog, over Streamable HTTP. Reading is open to anyone with no sign-in and only returns what owners already publish to the world. Publishing a release or a roadmap update needs your own API key.

Connect

Endpoint
https://release-ripple-roadmap.lovable.app/mcp
Transport
Streamable HTTP (JSON-RPC over POST)
Reading
No authentication — published releases and public roadmap items only
Writing
HTTP header Authorization: Bearer lp_… with a LogPulse API key
Server name
logpulse
Server card
https://release-ripple-roadmap.lovable.app/mcp/server-card

To read changelogs, add the server with no key:

Terminal
claude mcp add --transport http logpulse https://release-ripple-roadmap.lovable.app/mcp

Lovable, Claude Desktop, Windsurf and other clients take the same URL under their “custom MCP server” or “connector” setting. Clients that support discovery can read the endpoint, protocol versions, the optional API-key header and every tool's input schema from the server card (also listed in the API catalog).

Read tools

Every tool returns a readable text answer plus structuredContent JSON with the same data. Tools that take a changelog use its slug — find one with search_changelogs. Drafts, scheduled releases and private roadmap items are never returned. For projects that aren't on LogPulse, convert_changelog turns their CHANGELOG.md or GitHub releases into the same shape.

search_changelogs

Find a public LogPulse changelog by package name, repository, product name or slug. Returns slugs to use with the other tools.

FieldTypeDescription
query*stringPackage (e.g. @acme/analytics), repository (acme/analytics-js), product name or slug.
limitinteger (1–25)Maximum results. Default 10.
Example arguments
{
  "query": "@acme/analytics"
}

get_changelog

Get a changelog's name, repository, packages, latest version and feed links.

FieldTypeDescription
changelog*stringChangelog slug, e.g. "acme". Use search_changelogs to find it from a package or repository name.
Example arguments
{
  "changelog": "acme"
}

list_releases

List published releases, newest first, with versions, breaking changes, migration steps and deprecations.

FieldTypeDescription
changelog*stringChangelog slug, e.g. "acme". Use search_changelogs to find it from a package or repository name.
limitinteger (1–100)Maximum releases. Default 20.
sincestring (date-time)Only releases published at or after this ISO 8601 time.
breaking_onlybooleanOnly releases that contain breaking changes.
Example arguments
{
  "changelog": "acme",
  "limit": 5
}

get_release

Get one release by version (2.0.0 or v2.0.0) or URL slug, with full notes, breaking changes and deprecations.

FieldTypeDescription
changelog*stringChangelog slug, e.g. "acme". Use search_changelogs to find it from a package or repository name.
release*stringVersion like 2.0.0, or the release's URL slug.
Example arguments
{
  "changelog": "acme",
  "release": "2.0.0"
}

compare_versions

Answer “what changed between two versions, and what do I need to change?”: breaking changes with migration steps, deprecations and every release after `from` up to `to`.

FieldTypeDescription
changelog*stringChangelog slug, e.g. "acme". Use search_changelogs to find it from a package or repository name.
fromstringThe version the user is on, e.g. 1.4.0. Omit to start from the first release.
tostringThe version to upgrade to. Omit for the latest.
format"markdown" | "json"markdown (default) returns an upgrade guide; json returns structured data.
Example arguments
{
  "changelog": "acme",
  "from": "1.4.0",
  "to": "2.0.0"
}

get_roadmap

Get the public roadmap: items under review, planned, in progress and shipped, with vote counts.

FieldTypeDescription
changelog*stringChangelog slug, e.g. "acme". Use search_changelogs to find it from a package or repository name.
status"under_review" | "planned" | "in_progress" | "shipped"Only items in this column.
Example arguments
{
  "changelog": "acme",
  "status": "in_progress"
}

convert_changelog

Turn any project's CHANGELOG.md text, or a GitHub release, releases page, repository or changelog file URL, into a machine-readable changelog: versions, dates, breaking changes with migration steps, and deprecations. Works for projects that aren't on LogPulse.

FieldTypeDescription
urlstring (GitHub URL)A release (…/releases/tag/v1.2.0), the releases page, a repository or a CHANGELOG.md file. Use this or markdown.
markdownstring (≤900 KB)The changelog text itself. Use this or url.
namestringProject name to use in the summary.
include_notesbooleanInclude each release's full notes in the JSON. Default false.
Example arguments
{
  "url": "https://github.com/vercel/next.js/releases/tag/v15.0.0"
}

Write tools

publish_release and post_roadmap_update write to your own changelog, so an agent can publish the release note right after it ships. They act with a LogPulse API key that your MCP client sends as an HTTP header — set it once in the client config, from an environment variable or a password prompt. Keys are never tool arguments, so they don't end up in prompts or chat transcripts.

  1. Create a key in Dashboard → Agents & API with the releases:write and/or roadmap:write permission.
  2. Store it as LOGPULSE_API_KEY in your environment, then add the server with the header:
Terminal
claude mcp add --transport http logpulse https://release-ripple-roadmap.lovable.app/mcp \
  --header "Authorization: Bearer $LOGPULSE_API_KEY"

Without a key, or with a key missing the permission, these tools return an error that says what to fix. Read tools keep working either way. Free plan limits apply to releases published from agents too.

publish_release

Publish a release note to your own changelog right after shipping — with version, breaking changes, migration steps and deprecations. Goes live in the hosted changelog, the widget and release emails.

Needs an API key with the releases:write permission.

FieldTypeDescription
title*string (≤140)Short, user-facing headline.
versionstringSemantic version like 2.1.0 (a leading v is dropped). Must be unique in your changelog.
summarystring (≤280)One-sentence summary shown in lists and feeds.
bodystring (markdown)Full release notes.
category"new" | "improved" | "fixed"Default new.
labelsstring[] (≤10)Short labels, e.g. API, Dashboard.
status"published" | "draft"published (default) goes live now, or at published_at. draft waits for a human to review it.
published_atstring (date-time)Schedule for later. Defaults to now.
breaking_changes{ summary, affects?, migration? }[]What breaks for existing users, each with migration steps (markdown).
deprecations{ item, replacement?, removal_version?, note? }[]What is deprecated, its replacement and planned removal version.
author_namestringShown as the author. Defaults to the API key's name.
slugstringURL slug. Generated from the title when omitted.
Example arguments
{
  "title": "Webhooks retry automatically",
  "version": "2.1.0",
  "category": "improved",
  "body": "Failed webhook deliveries now retry with backoff for 24 hours.",
  "deprecations": [
    {
      "item": "retry_once option",
      "replacement": "retry_policy",
      "removal_version": "3.0.0"
    }
  ]
}

post_roadmap_update

Add an item to your roadmap, or update one by id — move it to in progress or shipped, change its ETA, or link the release that shipped it.

Needs an API key with the roadmap:write permission.

FieldTypeDescription
idstring (uuid)Update this item instead of creating a new one. get_roadmap lists ids.
titlestring (≤140)Item title. Required when creating.
descriptionstring | nullWhat and why, in a sentence or two.
status"under_review" | "planned" | "in_progress" | "shipped"Roadmap column. New items default to planned.
labelstring | nullShort tag, e.g. API or Mobile.
etastring | nullFree text, e.g. Q3 or July.
is_publicbooleanShow on the public roadmap. Defaults to true for new items.
linked_releasestring | nullRelease id, version or slug that shipped this item.
Example arguments
{
  "id": "3f0c5c1e-7b7a-4b9e-9a54-2c1d8f6a1b20",
  "status": "shipped",
  "linked_release": "2.1.0"
}

Rate limits

  • 120 requests per minute per IP address on the MCP server, and 120 per minute per API key.
  • convert_changelog also counts toward the free converter's budget: 10 conversions per minute and 100 per day per IP, shared with the REST endpoint.
  • Over the limit, the server answers HTTP 429 with a Retry-After header (seconds). Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.
  • Need more for a CI pipeline or a large agent fleet? Contact us and we'll raise it.

Example prompts

  • “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?”
  • “We use @acme/analytics 1.6 — is anything we rely on deprecated?”
  • “Upgrade this project to the latest Acme SDK and apply every migration step.”
  • “What is Acme building next? Check their roadmap.”
  • “Convert the changelog at github.com/vitejs/vite and tell me what breaks between Vite 6 and 8.”
  • “We just shipped cursor pagination — publish it to our LogPulse changelog as 2.1.0 and mark the roadmap item shipped.”