Skip to main content
Glama

edit_project_create

Create a canvas project from a Fabric.js toJSON serialization (canvas_json, required): every embedded data:image src is pulled out, hashed, and written to a tenant-scoped, content-addressed R2 key before the row is saved, so canvas_json never carries image bytes and identical images dedupe across projects. SVG, an unrecognized image type, an oversized embedded image, or a canvas still too large after externalization refuse the whole create — nothing is silently dropped. An optional thumbnail_data_url is externalized the same way into thumbnail_key; thumbnail_key and version are server-set and refuse if you pass them. NEXT: edit_project_update to autosave the same project as it changes.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "edit_project_create"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNo
widthNo
heightNo
versionNo
canvas_jsonNo
thumbnail_keyNo
thumbnail_data_urlNoOptional thumbnail as a data: URL (PNG/JPEG/WebP/GIF, max 2MB) — externalized into thumbnail_key the same way embedded canvas images are. Omit to skip thumbnail externalization (create: no thumbnail_key is set; update: the existing thumbnail_key is left unchanged).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic write profile (readOnly=false, destructive=false, idempotent=false); the description goes well beyond by disclosing content-addressed R2 externalization, cross-project image dedupe, tenant scoping, atomic refuse-rather-than-drop semantics, and that thumbnail_key/version are server-set and rejected if supplied. That is exactly the behavioral context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first clause front-loads what the tool does and its main input, and each subsequent sentence adds a distinct behavioral fact (externalization, dedupe, refusals, server-set fields, next step). Slightly dense with long compound sentences, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema, the description covers the risky and non-obvious parts (embedded image handling, atomic failure, server-set fields) thoroughly. Gaps remain around name/width/height semantics and what the create actually returns beyond the implication that version and thumbnail_key are populated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 14% (only thumbnail_data_url is documented in the schema), so the description must compensate and largely does: it explains canvas_json's externalization contract, thumbnail_data_url's identical treatment, and that thumbnail_key and version are server-set and refuse if passed. It leaves name, width, and height unexplained, and notably claims canvas_json is required while the schema lists no required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (create a canvas project) plus the exact input contract (Fabric.js toJSON serialization) and the processing it triggers. The final sentence names the sibling edit_project_update and its role, so an agent can separate create from autosave without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use this to create, then edit_project_update to autosave the same project. Refusal conditions (SVG, unrecognized image type, oversized image, over-large canvas) tell the agent when a call will fail, but there is no explicit statement of when to prefer a different tool for an existing project's modification beyond the NEXT pointer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources