Free kits for makers, one MCP. https://makersmcp.com
Open source kits for people who make things, from creators to product teams: image, video, sound, design and more. MakersMCP serves every kit to your agent through one MCP server, and they all run on your own machine, with no account or key.
The kits
Each kit lives in its own repository and works on its own too, as a CLI and an agent skill. makersmcp comes with all of them, so no kit needs installing on its own.
| Field | Kit | Tools |
|---|---|---|
| Design | easybrandkit: a website's logo files, colors, fonts and first screen | make_brand_kit |
| Design | easyfontkit: a site's fonts with their licenses and free look-alikes | make_font_kit |
| Image | easyscreenshotkit: clean screenshots and a short demo video of a website | take_screenshots, record_demo_video, check_pwa_screenshots |
| Video | launch-film: a launch film with music, the launch pictures, and a check for any video | make_launch_film, plan_launch_film, render_launch_film, make_launch_stills, check_video, launch_film_guide |
| Sound | musicfit: a music track cut to fit your video | fit_music, analyze_music |
More kits are on the way.
Set it up
You need Node 22 or newer and the Chrome, Chromium, Edge or Brave you already have. Demo videos, launch films and music also need ffmpeg. Every setup runs npx -y makersmcp@0.1.1: keep the version in it, since npx can otherwise go on using an older copy it cached.
Then ask your agent for what you need, like "make a launch film for linear.app" or "get the brand kit and the fonts of stripe.com".
Claude Code
claude mcp add makersmcp -- npx -y makersmcp@0.1.1
Check it with claude mcp get makersmcp, or /mcp inside Claude Code.
Claude Desktop
Add this to claude_desktop_config.json, then quit Claude Desktop fully and open it again:
{
"mcpServers": {
"makersmcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "makersmcp@0.1.1"]
}
}
}
Claude Desktop starts servers outside any project, so the files go to ~/makersmcp, which makersmcp makes with the first job. For another folder, add "env": { "MAKERSMCP_OUT": "<folder>" } to the entry, like "~/Documents/makersmcp": a leading ~ is your home folder.
Cursor
Open the command palette (Cmd+Shift+P, or Ctrl+Shift+P on Windows and Linux), run "Open MCP settings" and add:
{
"mcpServers": {
"makersmcp": {
"command": "npx",
"args": ["-y", "makersmcp@0.1.1"]
}
}
}
VS Code
code --add-mcp '{"name":"makersmcp","command":"npx","args":["-y","makersmcp@0.1.1"]}'
Codex
codex mcp add makersmcp -- npx -y makersmcp@0.1.1
Windsurf
Open Settings, then MCP, and add the same entry as for Cursor.
OpenClaw
Add it under mcp.servers in your OpenClaw config:
{
"mcp": {
"servers": {
"makersmcp": {
"command": "npx",
"args": ["-y", "makersmcp@0.1.1"]
}
}
}
}
Check it with openclaw mcp doctor makersmcp --probe.
Hermes
Add it under mcp_servers in ~/.hermes/config.yaml, then run /reload-mcp:
mcp_servers:
makersmcp:
command: "npx"
args: ["-y", "makersmcp@0.1.1"]
timeout: 60
Other clients
Any MCP client that runs stdio servers can start it with npx -y makersmcp@0.1.1.
Run it from source
git clone https://github.com/EminBudak/makersmcp.git
cd makersmcp
npm install
npm run build
In any setup above, use node as the command and the full path of dist/index.js as its argument. node dist/index.js --check lists the kits it found, Chrome, ffmpeg and the folder it saves to.
Pick your kits
Every kit is on unless you say otherwise. To give your agent fewer tools, name the kits you use:
npx -y makersmcp@0.1.1 # every kit
npx -y makersmcp@0.1.1 --kits all # every kit, the same
npx -y makersmcp@0.1.1 --kits easybrandkit,launch-film # only these two
In a client's settings, the same goes at the end of args, like ["-y", "makersmcp@0.1.1", "--kits", "easybrandkit,launch-film"].
Where the files go
Every tool saves its files in a folder and returns the folder, the files it saved there and the kit's own notes, like BRAND.md. The folders go where makersmcp starts, which is your project for a coding agent, or ~/makersmcp when it can't write there; a folder that is not there yet is made with the first job. Choose another place with --out <dir> or MAKERSMCP_OUT, or give a tool its own out_dir.
launch-film keeps the brand kit a film uses in a brand/ folder next to film.json. When it plans from a brand kit you give it, or from an App Store page, it deletes that folder and makes it again; from any other site, easybrandkit makes the kit again in it, replacing only a kit's own files. Its tools tell the client they may replace files, and they do not start when makersmcp finds they would lose anything in that brand/ but a kit's own files: a file you added, a file named like a kit's own in other letters or with a character that does not show, a link the kit would delete files through, or a kit you give that is that same brand/ folder under another name, holds it, or has its brand.json as a link into it. To use a brand/ folder where it is, give it as brand written the way out_dir is, with /brand added. makersmcp looks only before the kit starts, and a folder mounted from the same disk, inside brand/ or as the out_dir, can still hide from it where it really is, so keep files you care about outside brand/.
A long job, like rendering a film, keeps going after the tool returns. The tool then gives back a job_id, and your agent calls wait_for_job with it until the job ends. list_jobs and cancel_job do what they say, and check_setup tells what is missing when a kit fails to start. When the client closes makersmcp, or makersmcp ends some other way, its jobs stop too, with the browsers and ffmpeg they started.
When something fails
- The tools don't appear: check that
node --versionsays 22 or newer, then restart the client.npx -y makersmcp@0.1.1 --checklists what makersmcp found. - A kit's tools are missing:
--checksays why. Every kit comes with makersmcp, so look at--kitsand--kit-path, and from source runnpm installagain after a pull. - A kit can't find Chrome or ffmpeg: set
CHROME_PATHandFFMPEG_PATHin the server'senv. launch-film readsLAUNCH_FILM_CHROMEandLAUNCH_FILM_FFMPEG. - A long job meets the client's time limit: no call waits longer than
wait_seconds, 45 by default. A job still running then comes back with ajob_idandnext_action: wait_for_job, and the agent should call that, never the first tool again, which would start a second job. Where a client lets you set a tool timeout, keep it above 45 seconds.
Settings
| Option | Environment | What it does |
|---|---|---|
--kits <list> | MAKERSMCP_KITS | turns on only these kits, like easybrandkit,launch-film; leave it out or give all for every kit |
--out <dir> | MAKERSMCP_OUT | where the folders go, made with the first job; ~ is your home folder |
--kit-path <kit>=<dir> | MAKERSMCP_KIT_PATHS | runs a kit's checkout instead of the package that comes with makersmcp; ~ is your home folder |
--check | prints the kits, Chrome, ffmpeg and the folder, and exits |
Use it in your own server
import { serveStdio } from 'makersmcp';
await serveStdio({ kits: ['easybrandkit', 'launch-film'], outDir: '/srv/makersmcp' });
serveStdio serves on stdin and stdout and ends the process when the client goes away. createMcpServer takes the same options, kits, outDir, kitPaths, definitions and backend, and works over any MCP transport; close the server when the client is gone, since the stdio transport alone never notices. The backend decides where the jobs run. The default, LocalBackend, runs them on this machine and stops them when the server closes or the process ends. A service that runs kits for others can give LocalBackend an env of its own, so its secrets never reach a kit, and confine: true, so no tool call can name a file or folder outside baseDir, and no job returns a doc or lists a file a kit left outside it or behind a link. To run its kits as another user, it gives a launcher: a command that execs makersmcp's dist/supervise.js in place of itself with the kit's script and arguments, like ["sudo", "-n", "-u", "<kit user>", "--", "<wrapper>", "run"]. No signal reaches another user's processes, so a cancel then closes the supervisor's stdin, and the supervisor stops the kit; a job's pid is its process group, the one to keep while it runs when the service sweeps up what kits left behind. A service can also pass its own KitBackend (src/backend.ts) to run them on its machines; the tools then take a file an earlier job saved, as job:<job_id>/<path>, or a link where a parameter takes one, instead of paths, and return links to the files. loadKitDefinitions, validateKitDefinition, buildCommand and describeSetup are exported too.
Add a kit
makersmcp has no code for any kit. Each kit is a JSON file in kits/ that names its npm package, its tools, and how each tool's parameters become the kit's arguments. A new kit is a new file there and its package in the dependencies of package.json, which is how it comes with makersmcp; removing a kit is the reverse, and npm test fails while the two do not match. docs/kits.md describes the file.
Develop
npm install
npm test
To try changes to a kit that are not on npm yet, start makersmcp with --kit-path <kit>=<folder>, like --kit-path musicfit=../musicfit, and it runs that checkout instead of the package. npm test tries the bounds of every number in kits/ with each kit's package; MAKERSMCP_KIT_PATHS=musicfit=../musicfit npm test tries the checkout's instead.