Skip to content

eminbudak/makersmcp

v0.1.1MIT

Free kits for makers in one MCP: brand kits, fonts, screenshots, demo videos, launch films and fitted music, made on your own machine.

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.

FieldKitTools
Designeasybrandkit: a website's logo files, colors, fonts and first screenmake_brand_kit
Designeasyfontkit: a site's fonts with their licenses and free look-alikesmake_font_kit
Imageeasyscreenshotkit: clean screenshots and a short demo video of a websitetake_screenshots, record_demo_video, check_pwa_screenshots
Videolaunch-film: a launch film with music, the launch pictures, and a check for any videomake_launch_film, plan_launch_film, render_launch_film, make_launch_stills, check_video, launch_film_guide
Soundmusicfit: a music track cut to fit your videofit_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 --version says 22 or newer, then restart the client. npx -y makersmcp@0.1.1 --check lists what makersmcp found.
  • A kit's tools are missing: --check says why. Every kit comes with makersmcp, so look at --kits and --kit-path, and from source run npm install again after a pull.
  • A kit can't find Chrome or ffmpeg: set CHROME_PATH and FFMPEG_PATH in the server's env. launch-film reads LAUNCH_FILM_CHROME and LAUNCH_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 a job_id and next_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

OptionEnvironmentWhat it does
--kits <list>MAKERSMCP_KITSturns on only these kits, like easybrandkit,launch-film; leave it out or give all for every kit
--out <dir>MAKERSMCP_OUTwhere the folders go, made with the first job; ~ is your home folder
--kit-path <kit>=<dir>MAKERSMCP_KIT_PATHSruns a kit's checkout instead of the package that comes with makersmcp; ~ is your home folder
--checkprints 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.

MIT