reshaper-ai
v1.0.0
Published
Command line tool and MCP server for Reshaper AI — turn one piece of content into finished posts from your terminal, Claude, or Codex.
Maintainers
Readme
reshaper-ai
Reshaper AI from your terminal, your scripts, and inside Claude or Codex.
One piece of source material in. Finished LinkedIn posts, Instagram captions, Substack notes and articles, rendered carousels, LinkedIn images and YouTube packaging out, all written in your own brand voice.
Everything here uses the same credits as the app. Nothing is billed twice.
Install
npm install -g reshaper-aiOr skip the install and use npx reshaper-ai@latest in front of any command below.
Then log in with a key from reshaper.ai/api-keys:
reshaper-ai login rai_live_...The name is reshaper-ai everywhere — including npm create reshaper-ai@latest, which scaffolds a project built on the API. reshaper works as a shorter alias if you prefer it.
Use it in Claude or Codex
npx reshaper-ai@latest install-mcpThat prints one line per client. Pick yours:
| Client | Command |
| --- | --- |
| Claude Code | reshaper-ai install-mcp claude-code |
| Claude Desktop | reshaper-ai install-mcp claude-desktop |
| Codex | reshaper-ai install-mcp codex |
| Anything else | reshaper-ai install-mcp manual |
Claude Code talks to the hosted server directly over HTTP. Claude Desktop and Codex launch reshaper-mcp, which pipes stdio to that same server, so both always have the current tool list.
Once connected, you can just ask:
Turn my last YouTube video into a LinkedIn post and a carousel, in my brand voice.
Files work too
The hosted server cannot see your disk, but the local bridge can. Name a file and it is read, prepared and sent for you:
Make a carousel from ~/Downloads/talk.mp4
Video never uploads whole. The bridge strips the video track with ffmpeg and sends only the audio, which is all the transcript needs, exactly as the app does in your browser. A long reel becomes a couple of MB.
That needs ffmpeg on your PATH:
| | |
| --- | --- |
| macOS | brew install ffmpeg |
| Windows | winget install ffmpeg |
| Linux | apt install ffmpeg |
Would rather not? Put the video in Google Drive and pass the link as videoUrl instead, and the server fetches it.
Use it from the terminal
# One post
reshaper-ai reshape "we shipped dark mode today" --out "LinkedIn Post"
# From a file, into a file
reshaper-ai reshape @notes.md --out "Substack Notes" > notes.txt
# From a pipe
pbpaste | reshaper reshape - --out "Instagram Caption"
# Everything at once, saved to your library
reshaper-ai all @notes.md --save
# A rendered carousel
reshaper-ai carousel "5 lessons from 2 years of building" --template black
# A YouTube video, packaged
reshaper-ai youtube https://youtube.com/watch?v=... --thumbnail
# A transcript, free
reshaper-ai transcript https://youtube.com/watch?v=... > transcript.txt
# A reel, turned into writing (audio is extracted first)
reshaper-ai reel ~/Downloads/talk.mp4 --out "LinkedIn Post"
# Read someone else's carousel and write your own
reshaper-ai read-carousel ./their-deck.pdf --out "LinkedIn Post"Teach it your voice
Instead of hand-writing a voice profile, give it your own writing and let it work one out:
reshaper-ai voice add ./post-1.txt
reshaper-ai voice add ./post-2.txt
reshaper-ai voice add ./post-3.txt
reshaper-ai voice analyzeThree samples is the minimum. Add --dry-run to see the voice before it is saved.
For a client workspace, point it at their brand documents instead:
reshaper-ai clients create "Acme Co"
reshaper-ai clients docs <id> ./brand-guide.pdf
reshaper-ai clients logo <id> ./acme-logo.pngRun reshaper-ai help for the full list.
Text input
Every command that takes text accepts three forms:
- Literal text:
reshaper-ai reshape "my idea" - A file:
reshaper-ai reshape @notes.md - stdin:
cat notes.md | reshaper-ai reshape -
File input
Anywhere a photo, video, PDF or document is wanted, pass a local path and it is read and sent for you. An https URL works too. Video has its audio extracted first.
Useful flags
| Flag | What it does |
| --- | --- |
| --in <type> | Source type: Raw Thoughts, LinkedIn Post, Substack Article, YouTube Video |
| --out <type> | What to write: LinkedIn Post, Instagram Caption, Substack Notes, Substack Article |
| --client <id> | Write in a client workspace's brand voice |
| --save | Save the result to your Reshaper library |
| --json | Print the raw API response |
| --quiet | Hide the credit footer |
Run reshaper options to see every valid type, template and price.
Use it from your own code
import { createClient } from "reshaper-ai/src/client.mjs";
const reshaper = createClient({ apiKey: process.env.RESHAPER_API_KEY });
const result = await reshaper.reshape({
text: "we shipped dark mode today",
inputType: "Raw Thoughts",
outputType: "LinkedIn Post",
});
console.log(result.notes[0]);Or skip the package and call the REST API directly — see reshaper.ai/docs/api.
Configuration
| Setting | Where |
| --- | --- |
| API key | reshaper-ai login, or RESHAPER_API_KEY |
| Server | RESHAPER_BASE_URL (defaults to https://reshaper.ai) |
| Saved config | ~/.reshaper/config.json |
Environment variables win over the saved file, so CI and one-off shells can use a different account without touching your login.
Credits
Generation costs credits; reading and saving does not. reshaper-ai credits shows your balance, and every generating command prints what it spent. A failed generation is refunded automatically.
