MakersMCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MakersMCPget the brand kit and fonts for stripe.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Field | Kit | Tools |
Design | easybrandkit: a website's logo files, colors, fonts and first screen |
|
Design | easyfontkit: a site's fonts with their licenses and free look-alikes |
|
Image | easyscreenshot: clean screenshots and a short demo video of a website |
|
Video | launch-film: a launch film with music, the launch pictures, and a check for any video |
|
Sound | musicfit (soon): a music track cut to fit your video |
|
More kits are on the way.
Related MCP server: ollos-mcp
Set it up
The first release on npm is on its way, so until it is out the npx setups below will not find the package; run it from source works today. Star the repo to hear when it ships.
You need Node 22 or newer and the Chrome, Chromium, Edge or Brave you already have. The video and sound kits also need ffmpeg. Every setup runs npx -y makersmcp@0.1.0: 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.0Check 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.0"]
}
}
}Claude Desktop starts servers outside any project, so the files go to ~/makersmcp. For another folder, add "env": { "MAKERSMCP_OUT": "<folder>" } to the entry.
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.0"]
}
}
}VS Code
code --add-mcp '{"name":"makersmcp","command":"npx","args":["-y","makersmcp@0.1.0"]}'Codex
codex mcp add makersmcp -- npx -y makersmcp@0.1.0Windsurf
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.0"]
}
}
}
}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.0"]
timeout: 60Other clients
Any MCP client that runs stdio servers can start it with npx -y makersmcp@0.1.0.
Run it from source
git clone https://github.com/EminBudak/makersmcp.git
cd makersmcp
npm install
npm run buildIn 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.0 # every kit
npx -y makersmcp@0.1.0 --kits all # every kit, the same
npx -y makersmcp@0.1.0 --kits easybrandkit,launch-film # only these twoIn a client's settings, the same goes at the end of args, like ["-y", "makersmcp@0.1.0", "--kits", "easybrandkit,launch-film"].
Where the files go
Every tool saves its files in a folder and returns the folder, the files in it 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. Choose another place with --out <dir> or MAKERSMCP_OUT, or give a tool its own out_dir.
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 something fails
The tools don't appear: check that
node --versionsays 22 or newer, then restart the client.npx -y makersmcp@0.1.0 --checklists what makersmcp found.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 |
|
| turns on only these kits, like |
|
| where the folders go |
|
| uses a kit's checkout instead of its package |
| prints the kits, Chrome, ffmpeg and the folder, and exits |
Use it in your own server
import { createMcpServer } from 'makersmcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createMcpServer({ kits: ['easybrandkit', 'launch-film'], outDir: '/srv/makersmcp' });
await server.connect(new StdioServerTransport());createMcpServer takes kits, outDir, kitPaths and definitions, and works over any MCP transport; its running jobs stop when the transport closes. loadKitDefinitions, validateKitDefinition 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 package.json; removing a kit is the reverse. docs/kits.md describes the file.
Develop
npm install
npm testTo try a kit from its checkout before it is on npm, start makersmcp with --kit-path <kit>=<folder>, like --kit-path musicfit=../musicfit.
Available Tools
11 toolscancel_jobCancel a jobADestructiveIdempotent
Stops a running job and the browser or ffmpeg it started. Files it already saved stay where they are.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id a makersmcp tool returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description earns credit for disclosing what actually gets terminated (the spawned browser/ffmpeg process) and what survives (files already written), which is real context an agent cannot read off the annotations. It stops short of saying whether the job lands in a cancelled state or how cancelling a completed job behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the destructive effect is front-loaded and the side-effect caveat follows. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one fully documented parameter and an output schema present, the description needs only to explain the action and its side effects, which it does. The minor gap is terminal state and error behavior for an already-finished or unknown job_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single job_id parameter is documented in the schema as coming from a makersmcp tool return. The description adds no further meaning about the identifier, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Stops a running job") and adds the concrete effect ("the browser or ffmpeg it started"), which is far more informative than the title's restatement. The verb alone separates it from list_jobs and wait_for_job, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the note that already-saved files persist hints at a trade-off, but there is no explicit when-to-use vs. wait_for_job, no statement about cancelling a job that already finished, and no preconditions. An agent can infer the purpose but gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_setupCheck the setupARead-onlyIdempotent
Shows which kits makersmcp has and their versions, whether Chrome and ffmpeg were found, and where files are saved. Use it when a tool is missing or a kit fails to start.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context beyond that: it lists exactly what gets inspected (kits, versions, Chrome, ffmpeg, and file save location), which tells an agent this is a passive diagnostic that probes the local environment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two sentences with no waste. The first sentence front-loads the information the tool returns, and the second gives the trigger condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic, the description names the categories of information it returns. However, there is no output schema, so the description must cover return behavior, and it does not say how the results are presented (such as a status summary or a report) or whether failures are surfaced as errors. It is adequate, but it leaves some ambiguity about the shape of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to clarify about argument meaning. The baseline score for a zero-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Shows' with a concrete inventory: available kits and their versions, Chrome/ffmpeg detection, and the save location for files. That is clearly distinguishable from sibling tools like list_jobs or make_brand_kit, which handle job state and creation rather than environment diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'Use it when a tool is missing or a kit fails to start.' This is good diagnostic guidance, but it does not mention alternatives or exclusion cases, such as when waiting on an existing job would be the better first move rather than re-checking setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_videoCheck a videoA
Checks any rendered video by measuring it: size, frame rate, length, black, still and silent stretches, loudness, peaks, and whether the cuts land on the beat. Writes CHECK.md (pass or fail, with every check), check.json, sheet.png (a frame from each shot) and wave.png. A failed check is a normal result here; read CHECK.md for what to fix. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| cues | No | The music's cues.json (from fit_music), to check the cuts land on the beat. | |
| cuts | No | The cuts in seconds, like 3.2,7.5, or a JSON file, when the video has no timeline from launch-film. | |
| film | Yes | The video to check, like film.mp4. | |
| lufs | No | The integrated loudness it should have, like -14 (give or take 1 LU). | |
| allow | No | Stretches meant to hold still, black or silent, in seconds, like 27-30,0-0.5. | |
| expect | No | The size and frame rate it should have, like 1920x1080@30. | |
| out_dir | No | Folder to save into, absolute or relative to /app. Default: {dir:film}/check. | |
| seconds | No | The length it should have: 30 (give or take half a second) or a range like 28-32. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, consistent with a tool that writes files. The description adds valuable behavioral detail beyond annotations: it specifies the exact output files (CHECK.md, check.json, sheet.png, wave.png) and clarifies that a failed check is a normal outcome, not an error. It does not describe overwrite behavior or rate limits, but the core side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and measurements, then lists outputs and usage guidance. It is dense but well-organized; the parenthetical version/machine note is minor and does not distract. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 100% schema description coverage, the description need not explain return values. It covers what the tool measures, what files it writes, and how to interpret failures, which is sufficient for an agent to invoke it correctly. The only minor gap is explicit guidance on when to run it relative to the render step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains every parameter in detail. The description adds little semantic meaning beyond what the schema provides, aside from implicitly linking the 'cues' parameter to the beat-checking behavior. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Checks') and resource ('any rendered video') and enumerates the exact measurements it performs: size, frame rate, length, black/still/silent stretches, loudness, peaks, and beat-cut alignment. This clearly distinguishes it from siblings like render_launch_film or plan_launch_film.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context that this is for rendered videos and that a failed check is a normal result, directing the agent to read CHECK.md for fixes. However, it does not explicitly name when to use this versus alternatives (e.g., after render_launch_film), leaving that to inference from the tool name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_film_guideLaunch film looks and scene typesARead-onlyIdempotent
Lists launch-film's looks and what each one suits (topic looks), or its scene types and their fields (topic types), for picking a look or editing film.json. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | looks or types. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that this is launch-film 0.2.0 data local to this machine. It does not add behavioral detail such as result shape or the job_id fallback, though those are partly covered by schema fields and the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no filler. Parenthetical clauses carry the topic distinctions efficiently. The version and machine note is compact, though slightly incidental to tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters, full schema coverage, rich annotations, and an output schema, the description supplies enough context to select and call the tool. The wait_seconds/job_id behavior is left to the schema, which is reasonable. A minor gap is the absence of explicit guidance on result shape or when a job_id is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description nonetheless adds meaning to the topic enum by explaining that 'looks' returns looks with suitable topics and 'types' returns scene types with their fields. That is useful semantic detail beyond the terse enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it lists launch-film's looks and what each suits, or its scene types and their fields. The two topic branches are clearly distinguished. It does not explicitly differentiate itself from sibling pipeline tools like plan_launch_film or make_launch_film, but the reference-data nature is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage contexts: picking a look or editing film.json. That tells the agent when this tool is relevant. It stops short of naming alternatives or stating when not to use it, so it is not fully explicit about routing versus sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsList jobsARead-onlyIdempotent
Lists the jobs makersmcp started since it was launched, running or ended, with their folders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description usefully adds the completeness of the result set (everything since launch, including ended jobs) and that folders are attached. It does not disclose ordering, result size, or whether the listing is truncated, which matters for an unbounded history list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifiers (since launch, running or ended) and payload note (with folders) each carry information. Nothing is repeated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless read tool with full annotation coverage and no output schema, the description is nearly sufficient — it says what is enumerated and what comes back. The only gap is that it does not describe the shape of a job entry or how to handle a large history.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the schema shows. Baseline for a no-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists the jobs") and adds scope: jobs started since launch, whether running or ended, plus their folders. That is enough to distinguish it from the sibling job tools (wait_for_job, cancel_job), though those alternatives are never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the discovery/status-overview call before drilling into a specific job with wait_for_job or cancel_job. There is no explicit when-to-use or when-not-to-use statement, and no guidance on using the returned job identifiers with the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_brand_kitBrand kit from a websiteA
Reads a website in a headless browser, the way it is drawn, and saves its brand in one folder: the logo files cut from their real background (PNG and SVG), the colors with where each one is used, the fonts, the first screen, a brand card, and the app store icon and screenshots when the site links to its apps. BRAND.md is for people and agents, brand.json for tools, _brand.yml for Quarto and Shiny. With facts, it also lists what the site claims about itself, each claim with its page, in FACTS.md. Read BRAND.md before designing anything for that product. (easybrandkit 0.4.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website, like https://linear.app | |
| facts | No | Also read what the site claims about itself from its home, pricing, customers, security, integrations and about pages. Takes longer. | |
| stores | No | Set to false to skip app store listings and social profiles. | |
| out_dir | No | Folder to save into, absolute or relative to /app. Default: easybrandkit-{host}. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. | |
| timeout_seconds | No | Give up after this many seconds (default 120, or 240 with facts). |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a non-read-only, open-world, non-idempotent but non-destructive write operation. The description adds valuable behavioral detail beyond the annotations: it uses a headless browser, writes files into a folder, produces specific file formats and manifests, and includes optional app-store capture when the site links to apps. It does not discuss permissions, rate limits, or failure modes in depth, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, opening with the core read-and-save behavior before listing outputs. It is longer than typical, but most sentences earn their place by naming concrete artifacts and file consumers. Minor repetition exists around the generated files, but it remains readable and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with six parameters and an output schema, the description covers the main artifacts, output files, optional facts behavior, and the recommended reading order. It does not need to explain return values because an output schema exists, but it could say more about long-running job behavior and failure handling. Overall it is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters thoroughly, including defaults and limits. The description reinforces what facts adds (claims with pages in FACTS.md) and what stores controls, but does not add much parameter meaning beyond the schema. A baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reads a website in a headless browser and saves its brand assets into one folder. The long artifact list (logos, colors, fonts, first screen, brand card, app store assets) makes clear this is a brand-kit extraction tool, not a launch-film or job tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the output (e.g., read BRAND.md before designing anything for that product) and explains the optional facts behavior. It does not explicitly name when to choose this over a sibling tool or when not to use it, but the purpose is narrow enough that the usage context is largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_launch_filmLaunch film from a websiteA
Makes a 20 to 40 second launch film from a product's own site: it reads the brand and the page, plans the film (name and promise, the real screen in a browser window, the page's own headline, feature cards, a number the page states, the logo close) and renders film.mp4 with music and sound effects, all with Chrome and ffmpeg on this machine. Nothing is generated by AI: the film shows what the site says. film.json is the plan; edit it and call render_launch_film to render again. Rendering takes a few minutes. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| sfx | No | Set to false to leave out the sound effects. | |
| url | Yes | The product's website, like https://linear.app | |
| jobs | No | Clips rendered at once (default 2). | |
| keep | No | Keep the work files, each clip's MP4. | |
| look | No | The film's look (default: picked from the brand). launch_film_guide with topic looks says what each one suits. | |
| brand | No | A brand kit you already have: an easybrandkit folder or its brand.json. | |
| music | No | Set to false to leave out the music bed. | |
| words | No | A words.json you already have, instead of reading the page again. | |
| aspect | No | 16:9 (default) or 9:16 for phones. | |
| out_dir | No | Folder to save into, absolute or relative to /app. Default: launch-film-{host}. | |
| seconds | No | Aim for this length (default 30). | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, openWorld=true, idempotent=false, destructive=false), the description discloses the runtime stack (Chrome and ffmpeg on this machine), the latency ('rendering takes a few minutes'), that output is a non-AI factual rendering of the site, and that film.json is an editable intermediate plan. That is materially useful behavior an agent cannot get from the annotation block.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome, then flows into mechanics, the film.json/render_launch_film follow-up, and latency. It is a single dense paragraph rather than a list, and the parenthetical build/version tag at the end is low-value, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, long-running generative-ish job tool with an output schema, the description covers the artifact, its composition, the plan file, and expected runtime. It leaves the job_id/wait behavior to the wait_seconds schema entry, which is acceptable given coverage is complete and an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (look, seconds, aspect, music, sfx, jobs, wait_seconds, brand, words) is already documented. The description adds only incidental context — the 20–40 second window and the musical/sfx layer — without explaining defaults or interactions between them; baseline 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Makes a 20 to 40 second launch film from a product's own site') and enumerates what the film contains, so it is immediately distinguishable from render_launch_film (render only) and plan_launch_film (plan only). The scope — read the brand/page, plan, render film.mp4 — is concrete enough that an agent knows exactly what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to a sibling explicitly: 'film.json is the plan; edit it and call render_launch_film to render again,' and points at launch_film_guide (via the look param) for look selection. What is missing is a direct statement of when to choose make_launch_film over calling plan_launch_film first to review the plan, or when to use make_launch_stills instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_launch_stillsLaunch picturesA
Makes the pictures a launch needs at the exact size each place asks for: Product Hunt (ph), link previews (og), X (x), Google Play (play) and the Chrome Web Store (chrome). They come from the film's look, the brand's logo and the site's real screen, as opaque PNGs in stills/, listed in STILLS.md. Give a site and it plans a film first, or give a film.json so the pictures match the film. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| for | No | Which places to make pictures for (default all of them). | |
| source | Yes | The product's website, or a film.json you already have. | |
| out_dir | No | Folder to save into, absolute or relative to /app. Default: launch-film-{host}. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true and non-idempotent, and the description adds meaningful behavior beyond them: opaque PNG output, files written to stills/ and indexed in STILLS.md, and the side effect that supplying a site triggers film planning first. It does not discuss permissions or failure modes, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and platform list, then the input-mode rule. Dense but every clause carries information; the version/machine parenthetical is the only low-value fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, yet the description still notes the job_id/wait behavior and where artifacts land. For a 4-parameter tool with full schema coverage, this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by decoding the enum values (ph = Product Hunt, og = link previews, x, play, chrome) and clarifying that source may be a website or an existing film.json. That is genuine meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Makes the pictures a launch needs') and enumerates the exact platforms and output artifacts (stills/, STILLS.md), which clearly separates it from make_launch_film and render_launch_film.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two input modes ('Give a site and it plans a film first, or give a film.json so the pictures match the film'), which is real usage guidance. It stops short of explicitly saying when to prefer this over make_launch_film or plan_launch_film.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_launch_filmPlan a launch filmA
Reads a product's brand and page and writes film.json, the plan of a launch film, without rendering it. Edit film.json (launch_film_guide with topic types lists the scene types and their fields), then call render_launch_film. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| sfx | No | Set to false to plan the film without sound effects. | |
| url | Yes | The product's website, like https://linear.app | |
| look | No | The film's look (default: picked from the brand). | |
| brand | No | A brand kit you already have: an easybrandkit folder or its brand.json. | |
| music | No | Set to false to plan the film without the music bed. | |
| words | No | A words.json you already have, instead of reading the page again. | |
| aspect | No | 16:9 (default) or 9:16 for phones. | |
| out_dir | No | Folder to save into, absolute or relative to /app. Default: launch-film-{host}. | |
| seconds | No | Aim for this length (default 30). | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readonly, non-idempotent, open-world, non-destructive, so the bar is lower. The description still adds real value: it discloses that the tool writes a film.json artifact and stops short of rendering, and it names the version/runtime ('launch-film 0.2.0, on this machine'), which signals local execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action, followed by the next-step instruction. The trailing parenthetical version/environment note is marginally useful context rather than filler, though it slightly dilutes the ending.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the write-then-render lifecycle plus the guide pointer for editing the artifact. The only gap relative to tool complexity is not clarifying the relationship to make_launch_film.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 10 parameters carries its own description (defaults, enums, bounds, wait_seconds rationale), so the schema does the heavy lifting. The description adds no parameter-level meaning beyond pointing at film.json and launch_film_guide; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses specific verbs and resources: 'Reads a product's brand and page and writes film.json, the plan of a launch film, without rendering it.' The explicit 'without rendering it' cleanly separates it from render_launch_film and make_launch_film, so an agent can pick it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow: run this, edit film.json (consult launch_film_guide for scene types and fields), then call render_launch_film. It does not, however, say when to prefer this two-step path over the sibling make_launch_film, which is the main remaining routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_launch_filmRender a launch filmA
Renders a film.json into film.mp4 next to it, with Chrome and ffmpeg on this machine. Use it after plan_launch_film or after editing the film.json of make_launch_film. Rendering takes a few minutes. (launch-film 0.2.0, on this machine.)
| Name | Required | Description | Default |
|---|---|---|---|
| film | Yes | The film.json to render. | |
| jobs | No | Clips rendered at once (default 2). | |
| keep | No | Keep the work files, each clip's MP4. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only mark it non-read-only, non-destructive, non-idempotent), the description discloses that rendering happens locally via Chrome and ffmpeg, writes output adjacent to the input, and takes a few minutes. The duration warning is the key behavioral signal an agent needs to avoid an impatient retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and outcome before the sequencing advice and the duration warning. The '(launch-film 0.2.0, on this machine.)' trailer repeats locality already stated and is minor filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values including job_id need no explanation here. Inputs, prerequisites, runtime cost, and locality are all covered; only the interaction between wait_seconds timeout and job_id polling is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with jobs, keep, and wait_seconds all documented in-schema, so baseline is 3. The description only adds the output-location detail ('next to it') for the film parameter and nothing further about jobs or keep.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and both endpoints: it renders a film.json into a film.mp4 placed next to it, using Chrome and ffmpeg locally. That distinguishes it from the sibling authoring tools (plan_launch_film, make_launch_film) that produce the input rather than the finished video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it after plan_launch_film or after editing the film.json from make_launch_film, which gives a clear prerequisite sequence. It does not name alternatives such as wait_for_job/cancel_job, but the wait_seconds schema text covers the follow-up path for long renders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_jobWait for a jobARead-onlyIdempotent
Waits for a job a makersmcp tool started and returns its result once it ends. If it is still running, call this again with the same job_id. Never start the original tool again to check on a job: that starts a second one.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id a makersmcp tool returned. | |
| wait_seconds | No | How long to wait for the result before returning a job_id to wait on. 45 is safe for clients that stop a tool call after 60 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kit | Yes | |
| tool | Yes | |
| files | No | |
| folder | No | Where the kit saved its files. |
| job_id | Yes | |
| passed | No | For checks: whether the check passed. |
| status | Yes | |
| exit_code | No | |
| last_line | No | What the kit was doing last. |
| next_action | No | |
| elapsed_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description adds the non-obvious polling contract and the duplicate-job hazard. It does not spell out what happens when the job fails or is cancelled, but that gap is modest given the annotated idempotency and the existing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose, then the retry rule and the anti-pattern. Every clause carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async polling tool the description covers purpose, retry behavior, and the main misuse risk, while the schema documents both parameters and an output schema exists for the return value. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so job_id and wait_seconds are already fully documented in the schema. The description reinforces job_id's reuse semantics across calls but adds nothing about wait_seconds, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Waits for a job a makersmcp tool started and returns its result once it ends" gives a specific verb (waits) and resource (job started by a makersmcp tool), plus the outcome. The explicit warning not to re-run the originating tool separates it from the make_*/render_* siblings that an agent might otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the exact usage loop ("If it is still running, call this again with the same job_id") and an explicit when-not ("Never start the original tool again to check on a job: that starts a second one"). The agent needs no inference to know how to poll.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
cancel_job - First observed
check_setup - First observed
check_video - First observed
launch_film_guide - First observed
list_jobs - First observed
make_brand_kit - First observed
make_launch_film - First observed
make_launch_stills - First observed
plan_launch_film - First observed
render_launch_film - First observed
wait_for_job
TDQS
Scored across 11 tools
Most tools have clear, distinct targets: job management (list/wait/cancel), setup inspection, brand kit creation, video checking, and film guide. The only real overlap is make_launch_film versus plan_launch_film + render_launch_film, but the descriptions explicitly clarify the one-shot versus decomposed workflows. An agent should be able to select correctly after reading the descriptions.
All names are snake_case and mostly follow a verb_noun pattern (list_jobs, make_brand_kit, plan_launch_film, render_launch_film, check_video, wait_for_job, cancel_job). The main deviation is launch_film_guide, which is noun-only rather than verb-led, but it is still readable and predictable.
Eleven tools is well within the ideal range and each tool earns its place: three job tools, one setup check, three brand/film planning tools, two film rendering/stills tools, one video checker, and one guide. The decomposition of plan/render is justified by the iterative editing workflow.
The surface covers the full launch-film lifecycle: brand extraction, planning, rendering, still generation, video quality checks, guidance, and async job control. Minor gaps remain, such as no explicit tool to delete or prune jobs and no tool to read back brand kit outputs other than reading files on disk, but these are workable.
Maintenance
Related MCP Connectors
Generate images, video, music and voice from your CLI or AI agent. On-brand AI media toolkit.
Productivity toolbox for Personal Agents: create PPTs, covers, websites, music and process files.
Generate and edit images, video, voice, lip-sync and 3D models from your AI agent.
On-brand creative studio for AI agents: images, video, audio, and 3D.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA collection of self-hosted, open-source tools that enable AI agents to perform web searching, content crawling, and code analysis tasks like linting and security scanning. It provides power-user capabilities for MCP-compatible clients without requiring external accounts or third-party infrastructure.415 PyPI5MIT
- AlicenseNot gradedqualityAmaintenanceProvides local, offline transcription, keyframe extraction, OCR, and pre-publish review of audio, video, and image files, enabling AI agents to see and hear media without cloud or API keys.52 npmApache 2.0

postward-creative-mcpofficial
AlicenseBqualityBmaintenanceEnables AI assistants to generate images, videos, music, and voiceovers with your own provider keys, and edit video locally with ffmpeg — all on your machine with no account, watermark, or telemetry.3540 npmMIT- AlicenseAqualityBmaintenanceA local stdio MCP server that enables coding agents to find licensed photos and icons, generate color palettes and simple SVG assets, and preview static web prototypes. It also supports editable agent skills for design and prototype review workflows.23MIT