Ballad
Product · Agents & developers

Build on Ballad, or let Claude drive it.

An MCP server for your agents, a content API and Next.js package for your site, a first-party attribution script, and webhooks for what happens in your repo and your product. Every door leads into the same loop, and the same review gate.

01 · Agents

Claude works in Ballad, on your terms.

Ballad is an MCP server. Add it to Claude as a connector, sign in with Ballad, and choose on a consent screen what it may do. Then ask Claude for a draft, a launch week, a plan change or this week's numbers, and it happens inside the same loop, with the same review gate.

  • OAuth for connectors, keys for the rest. Claude connectors sign in and can be revoked from Settings in a click. Any other agent gets a key with the same scopes.
  • Scopes, not superpowers. Read, draft, propose, decide, publish, signals. An agent's drafts always come to you for review, and nothing publishes without the publish scope.
  • Every call in the audit log. Which agent, which tool, which arguments and what changed, next to every human decision.
Connect Claude
C
Claude wants to work in Ballad
It will act in Northwind as maya@northwind.com.
read See drafts, lanes, plan, events
draft Start generation and submit drafts
propose Propose plan changes for you to approve
decide Approve one-tap drafts, undo, set cadence
publish Mark posts as posted
signals Record metrics for published pieces
Drafts it makes still come to you for review. Nothing publishes without the publish scope. Every call lands in your audit log.
AllowDeny
"Draft a LinkedIn post about the retry bug""What's waiting for my review?"
02 · Content API

Your blog and changelog, on your own site.

Everything long-form is served by a typed, read-only content API and rendered by your site, under your design and your URLs. For Next.js, @balladlabs/next does the pages, metadata, feed, sitemap and refresh-on-publish in a few lines; anything else can use REST or RSS.

  • One call per lane. A blog, a changelog, a founder journal: each collection is its own set of pages from the same client.
  • Fresh on publish. Ballad calls your revalidate endpoint the moment something publishes, so the page is live without a redeploy.
  • SEO included. Canonical URLs on your domain, meta descriptions, JSON-LD and an RSS feed, from the same response.
Set up your Next.js blog
lib/ballad.tsapp/changelog/page.tsx
import { createBallad } from "@balladlabs/next";
import { createBlogPages } from "@balladlabs/next/pages";

export const ballad = createBallad({
  apiKey: process.env.BALLAD_CONTENT_KEY,
});

// one lane per collection, each with its own path
export const changelog = createBlogPages(ballad, {
  basePath: "/changelog",
  collection: "changelog",
});
@balladlabs/nextRSS + sitemaprevalidate on publish
03 · Attribution

Every signup, back to the post that earned it.

A small first-party script, as a tag or an npm package with a React component. It keeps how a visitor first arrived in their own browser, reports conversions with the properties and account you pass, and hands its record to your server when the signup happens there.

  • track, identify, group. Named conversions with flat properties, who a returning user is, and the account they belong to, the way you'd already call Segment.
  • Across your own origins. Hand the visitor's touch from your marketing site to your app, so a signup on another subdomain still knows the post.
  • No cookies, and polite. No visitor id, no cross-site profile, and nothing identifying when a browser sends Global Privacy Control.
Read the attribution guide
app/layout.tsxsignup.ts
import { group, touches, track } from "@balladlabs/beacon";

track("signup", { email }, { plan: "trial" });
group(workspace.id, { name: workspace.name, seats: 4 });

// signing up on your server? send the touch along
await fetch("/api/signup", {
  method: "POST",
  body: JSON.stringify({ email, touches: touches() }),
});
@balladlabs/beaconfirst-party · no cookies
04 · Webhooks & events

Send Ballad what happened.

Some of the best marketing inputs never pass through a browser. Point GitHub at Ballad and every release or push becomes changelog material; report product events and imports from your server, and they land on the same People record the script writes to.

  • Releases and commits. A GitHub release or push webhook signed with the product's secret, or a bearer request from your own tooling. Commits are digested on the cadence you set.
  • Server-side events and imports. Record a conversion, an account or a whole customer list through the agent API, with the browser's touch when you have it.
  • And Slack. Approve drafts, answer the numbers check and see threads worth joining without opening Ballad.
github → balladresponse
# GitHub → Settings → Webhooks → release events
POST /api/webhooks/releases/prod_9f2c…

{
  "action": "published",
  "release": {
    "tag_name": "v2.4.0",
    "name": "Undo a pay run",
    "body": "- 24-hour undo window…"
  }
}

# → 202, a minor release; the changelog entry is drafted
X-Hub-Signature-256x.0.0 major · x.y.0 minor
Integrations

What Ballad connects to.

Connect what you already use in Settings. Where Ballad doesn't post for you, it hands you the post ready to go and asks for the numbers afterwards.

Claude
A connector over MCP with OAuth and scoped consent.
X
Posts and threads published per voice; metrics and replies read back.
LinkedIn
Posts, carousels and a newsletter, handed to you ready to post.
Bluesky and Threads
Posts and threads, handed to you ready to post.
Instagram
Image cards and carousels, ready to post.
Resend
Newsletter issues and sequences sent; bounces, opens and clicks read back.
Google Search Console
Your queries and positions, read daily.
Vercel Web Analytics
Pageviews per post alongside Ballad's own script.
GitHub
Release and push webhooks into the changelog.
Slack
Draft approvals, numbers checks and conversation cards.
Hacker News
Threads worth joining, comments as feedback, and Show HN drafts.
Reddit and Product Hunt
Launch posts written for each community's rules.
By role

The marketing hires you haven't made.

The same loop, read through the job a marketing team would split it into. Each page covers the parts of Ballad that do that job.