If you keep a research or link-tracking timeline in jotsum — saving links as you find them, with a short reaction underneath each one — you can turn that timeline into a ready-to-publish Instagram queue, with nothing written from scratch. This is a working guide to how, built using Claude, jotsum's MCP server, and Buffer's API.
What it does
- Reads your timeline through jotsum's MCP server.
- Pairs each saved link with your reaction to it.
- Renders both into a 1080×1080 on-brand image, with your reaction as the on-image quote.
- Writes a matching caption (full quote, source link, hashtags).
- Pushes the image and caption into a Buffer queue, so posts go out on a schedule without you touching Instagram directly.
Nothing here is AI-generated commentary — the voice of every post is your own reaction, already sitting in your timeline. Claude's job is pairing, layout, and plumbing, not writing.
Architecture
jotsum timeline → Claude (via MCP) → rendered images and captions → Buffer API → scheduled posts.
- jotsum timeline: your existing tracker, e.g. an "AI Links" tracker where each link is a main entry and your reaction is a subentry logged the same day.
- MCP server: jotsum exposes timeline data to Claude as tools. No custom scraping — Claude reads your data the same way you'd browse it in the app.
- Claude: pairs entries, cleans titles, and writes a small script to render images and captions consistently.
- Buffer API: the only piece that needs a per-user credential. Buffer queues and publishes on your behalf; jotsum and Claude never touch your Instagram login.
What you need first
- A jotsum timeline with enough entries to be worth automating — a link plus a short reaction works best; bare links with no commentary get skipped.
- Claude Code (or another MCP-capable Claude client) connected to jotsum's MCP server.
- A Buffer account with the Instagram channel you want to post to already connected, plus a Buffer API access token.
- Python 3 with Pillow installed for rendering images locally.
You'll find the MCP connection details in jotsum under Settings → Integrations → AI Assistants. Copy the API key and endpoint into your Claude client's config, choose whether assistants can reach all your trackers or just one, and restart the app.
Finding the right timeline
Ask Claude to look at your timelines. Under the hood this calls jotsum's MCP tools: one that ranks your trackers by relevance to a topic, one that returns entry counts and date range so you can confirm you've picked the right tracker, and one that pulls the actual entries, paginated, oldest or newest first.
In practice you just say: "Find my AI links timeline and pull the most recent entries." If you keep duplicate or test trackers around, tell Claude which one is canonical — it can't always tell from the name alone.
Pairing links with reactions
jotsum entries come back flat: some are links (often with a source URL attached), others are your reactions, logged the same day. The pairing rule that worked well:
- Group entries by day.
- For each link entry, prefer a reaction that shares the same source link.
- If none matches, fall back to the next unused reaction logged that day.
- Skip a link entry if no title text remains once the raw URL is stripped out — that's usually noise.
This is a plain pass over the data your timeline returns — no AI judgement needed once the rule is written down.
Rendering on-brand images
Each post is a 1080×1080 image: a small label line (feed name, post number, date), the link's title, and your reaction as body text, on a flat brand-colour background. Two things mattered in practice:
Don't cap the quote length up front. An early version truncated reactions to a fixed character count and added an ellipsis — most of the time the full reaction actually fit once the layout used all the available space. Compute the wrapped line count first, and only truncate, or split into a carousel, if it genuinely doesn't fit.
Carousel fallback for the rare long reaction. If a reaction is too long for one card even at a sensible font size, split it across a second slide instead of cutting it off, labelling each "1/2", "2/2" in the header. Instagram carousels handle this natively.
Output two files per post: the image and a matching caption file (title, full reaction quote, source link, hashtags). Number them consistently so the upload step can walk the folder in order.
Pushing to Buffer
Buffer's API accepts an access token generated from your own account — no OAuth app review needed for personal use. The upload step is a plain script: upload each image to get a media reference, create a post per queue item with that media, the caption text, and the target Instagram profile, then either let Buffer's own queue handle timing or set an explicit schedule per post.
Because this step is the only one touching a real account, treat the access token like a password — keep it in an environment variable, not pasted into a shared document or committed anywhere public.
Customising it for your own timeline
- Visual style: swap the colours, font, and card copy for your own brand. The layout logic doesn't depend on the colours.
- Cadence: decide how many posts per day or week make sense before queuing hundreds at once.
- Attribution post: it's worth adding one non-numbered "about this feed" post explaining it's generated from a live timeline, styled identically to the rest of the feed so it doesn't stand out as an ad.
- Scope filter: decide whether every link becomes a post, or only ones with your own reaction attached. Bare links with no commentary make weaker posts.
What this doesn't automate
- Reading and reacting to links — that's still you, in jotsum, as part of your normal capture habit. The automation starts after that.
- Instagram login or session handling — Buffer owns that; nothing here touches Instagram credentials directly.
- Editorial judgement on tone — Claude pairs and lays out entries; it doesn't rewrite or invent commentary. If a timeline has no reactions, this pipeline has nothing to caption with, and posts will read thin.