Anima MCP Server
Server Details
Connect AI coding agents to Anima Playground, Figma, and your design system.
- Status
- Healthy
- Uptime
- 59.4% over 43 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- AnimaApp/mcp-server-guide
- GitHub Stars
- 6
- Server Listing
- Anima MCP Server
TDQS
Scored across 22 tools
Most tools target a clearly distinct resource+action (explore vs edit vs status vs publish vs unpublish vs update_metadata vs delete vs duplicate), and the two upload helpers are explicitly separated by asset-vs-zip. The main friction is artifact-create, which is overloaded to cover five generation/own-code types and overlaps conceptually with artifact-create_knowledge. Descriptions do resolve this, so misselection is possible but recoverable.
A predictable namespace_action pattern runs throughout: artifact-*, workspace-*, review-*, design_system-*, codegen-*. The only wart is mixed separators (hyphen between namespace and action, underscore inside multi-word actions like get_git_token / create_knowledge), but this is systematic rather than chaotic.
22 tools is on the heavy side of the 3-15 sweet spot, but the surface is cleanly partitioned into coherent namespaces (artifacts, uploads, reviews, workspaces, codegen, design_system) so each tool earns its place. It reads as a deep-but-scoped platform rather than tool sprawl.
Strong lifecycle coverage: create (multiple types), status, explore, edit, duplicate, metadata, publish/unpublish, delete, git access, review workflow, and workspace listing/moving are all present. Gaps are minor — soft delete has no restore/undelete tool, and there is no workspace create — but core workflows have no dead ends.
Available Tools
22 toolsartifact-createCreate ArtifactAInspect
Create a NEW artifact in Agent Grid; never edits an existing one.
Two independent axes, easy to confuse: type (below) is where the files come from, and artifactType is what the artifact IS. artifactType defaults to app — a live web application that renders and runs at the returned URL as soon as it is ready, which is what every type below produces unless you say otherwise. Pass artifactType markdown for a readable document, or asset for a stored file: neither is a running app, so do not promise a live URL for them.
Generation types (p2c/l2c/f2c) run ASYNCHRONOUSLY: this returns IMMEDIATELY with { status: 'generating', sessionId, artifactUrl, previewUrl, playgroundUrl } while the app is still being built. The preview link shows a live loading screen that swaps in the finished app. Most of the time, you need a single call to artifact-status with { sessionId, wait: true }, BEFORE you reply to the user because it blocks until the app is ready or failed, so you report a finished app rather than a promise (if it returns still 'generating', call it again). This artifact-create tool is NOT meant to be called multiple times for the same generation request. While a matching job is active, the same stable request identity may reuse that job for the team instead of creating another. The own-code types (empty/import) return immediately.
Do NOT use for: editing an existing artifact (artifact-explore + artifact-edit, or the git flow via artifact-get_git_token); rename/visibility (artifact-update_metadata); deploying live (artifact-publish).
type: Anima GENERATES (async — poll artifact-status):
p2c: text prompt (requires prompt; optional guidelines)
l2c: website (requires url)
f2c: Figma frames (requires fileKey + nodesId + X-Figma-Token header) YOU supply (ready immediately):
empty: empty git repo you push to (requires framework)
import: your code is the first commit; EXACTLY ONE of files (inline text, up to roughly 100 KB) or zipUploadId (binaries or larger)
framework: only html and react exist. Required for empty; optional for import (detected from package.json) and generation types (default html).
Returns: generation types (p2c/l2c/f2c) → { success, status: 'generating', sessionId, artifactUrl, playgroundUrl, previewUrl }; poll artifact-status for completion. Own-code types (empty/import) → sessionId, revision, artifactUrl, name, gitRemoteUrl, access, expiresAt, nextSteps (plus fileCount, skippedFiles for import), and a read-write git token in the same response — so do NOT call artifact-get_git_token after creating. playgroundUrl comes only when artifactType is app; previewUrl renders those plus markdown artifacts, while asset artifacts expose only artifactUrl. A markdown inline-files import also returns documentPreview plus documentPreviewTruncated, so the preview card can render the bounded document text without a follow-up read. revision is the first commit: pass it straight to artifact-edit as baseRevision if you edit without git. These are ready immediately (no 'generating' status): previewUrl renders the committed files right away for import, and the seed README for empty.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | REQUIRED for l2c only. Website URL to convert to code. | |
| name | No | Display name; applied by empty and import only (default "Untitled project"). p2c, l2c and f2c name the artifact from the generated content and IGNORE this. Rename any artifact afterwards via artifact-update_metadata. | |
| type | Yes | Where the code comes from. Anima GENERATES: p2c = text prompt (requires prompt); l2c = website URL (requires url); f2c = Figma frames (requires fileKey + nodesId + X-Figma-Token header). YOU supply: empty = empty git repo you push to (requires framework); import = your code as the first commit (EXACTLY ONE of files or zipUploadId). | |
| files | No | import only, inline transport: path-to-UTF-8-text map, becomes the first commit. TEXT only, up to roughly 100 KB of source; binaries or larger use zipUploadId via artifact-get_zip_upload_url. Mutually exclusive with zipUploadId. | |
| prompt | No | REQUIRED for p2c only. Text prompt describing the UI to generate. | |
| fileKey | No | REQUIRED for f2c only. Figma file key of the design; f2c also requires the X-Figma-Token header. | |
| nodesId | No | REQUIRED for f2c only. Figma node IDs of the frames to convert. | |
| styling | No | CSS strategy; generation types only, not empty or import. p2c: tailwind, css, inline_styles. l2c: tailwind, inline_styles, vanilla_css. f2c: tailwind, plain_css, css_modules, inline_styles. | tailwind |
| language | No | typescript or javascript; generation types with framework react only, ignored otherwise. l2c output is always typescript. | |
| framework | No | ONLY html and react exist. REQUIRED for empty (declare react if pushing React code). Optional for import (auto-detected from package.json) and for p2c/l2c/f2c (defaults to html). | |
| uiLibrary | No | Optional UI library; generation types with framework react only. l2c: shadcn only. f2c: mui, antd, shadcn, clean_react. Not for p2c. | |
| guidelines | No | Optional, p2c only. Guidelines to steer generation (conventions, structure, libraries). | |
| workspaceId | No | Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace. | |
| zipUploadId | No | import only: id from artifact-get_zip_upload_url, used AFTER HTTP PUTting the zip to its uploadUrl; for binaries or over roughly 100 KB of source. Single-use; valid within 30 minutes of the last upload. Mutually exclusive with files. | |
| artifactType | No | What the artifact IS, which decides how a human sees it. app (the default) = a running web page and needs an index.html among your files. markdown = a readable document and needs at least one .md file and no framework. Sending .md files as an app makes an artifact with nothing to render. asset = a stored image or video file; it can ONLY be created from a zipUploadId reserved with purpose "asset" via artifact-get_zip_upload_url — never from files. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, disclosing asynchronous behavior for generation types, immediate returns for own-code types, the inclusion of a read-write git token in the response, and the distinction between live app URLs versus markdown/asset artifacts. It even explains that a generated markdown import returns documentPreview fields. No annotation contradiction exists.
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 long, but the complexity justifies it. It is front-loaded with the most critical facts—never edits existing, do-not-use list, and the async warning—and organized with clear headers like 'type:' and 'Returns:'. There is minor redundancy around return handling, but overall it is structured well enough for an agent to extract actionable guidance without reading linearly.
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 no output schema, the description fully documents return values for both generation and own-code paths, including sessionId, previewUrl, gitRemoteUrl, revision, nextSteps, and fileCount. It also covers the polling workflow, the condition for calling artifact-get_git_token, and the URL behavior per artifactType, making the tool safe to invoke correctly in almost any situation.
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?
Although schema coverage is 100%, the description adds substantial cross-parameter meaning: it clarifies the easy-to-confuse type versus artifactType axes, per-type required fields, files/zipUploadId mutual exclusivity, workspaceId requirement conditions, and that name is ignored for p2c/l2c/f2c. This goes far beyond the schema's per-field descriptions.
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 opens with a precise statement: 'Create a NEW artifact in Agent Grid; never edits an existing one.' It clearly specifies the verb, resource, and scope, and differentiates itself from artifact-edit, artifact-update_metadata, and artifact-publish by explicitly naming what it is not for.
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 guidance is exceptionally explicit: it names exact alternative tools for editing, metadata changes, and publishing, and instructs agents to poll artifact-status with { sessionId, wait: true } before replying. It also warns against calling artifact-create multiple times for the same generation request, removing ambiguity about when to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-create_knowledgeCreate Knowledge ArtifactAInspect
Create a NEW knowledge artifact from Anima's knowledge-base template. Returns a ready artifact; never edits an existing one.
Call with no arguments, or with an optional name (defaults to "Untitled project") and workspaceId. No files, ZIP upload, framework, or artifact type are accepted. The template supplies the initial files and determines the framework.
Returns the sessionId, initial revision, artifactUrl, name, framework, fileCount, skippedFiles, and applicable preview URLs and Git access. Share artifactUrl with the human. Use artifact-explore and artifact-edit to inspect and change its contents. Only use artifact-publish when the user explicitly asks for a public deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name; defaults to "Untitled project". | |
| workspaceId | No | Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, open-world, non-idempotent, non-destructive operation. The description adds substantial context: it never edits existing artifacts, returns a ready artifact, lists the exact return fields, and instructs sharing the artifactUrl with the human. This goes well beyond the annotations and sets clear expectations.
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 compact yet information-dense: purpose is front-loaded, followed by call constraints, return values, and sibling routing. Every sentence earns its place, and nothing is redundant with the schema or annotations.
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 create tool with two optional parameters and no output schema, the description covers the purpose, invocation, parameter constraints, return structure, and recommended next steps (explore, edit, publish). An agent can call it correctly and know what to do with the result without any further lookups.
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 fully documents both 'name' and 'workspaceId' with defaults and source guidance. The description reiterates defaults and adds a useful constraint ('No files, ZIP upload, framework, or artifact type are accepted'), but overall it adds only marginal value beyond the schema. 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?
The description states a specific verb and resource ('Create a NEW knowledge artifact from Anima's knowledge-base template') and explicitly distinguishes it from editing ('never edits an existing one') and from other creation modes ('No files, ZIP upload, framework, or artifact type are accepted'). This differentiates it clearly from artifact-create, artifact-edit, and other siblings.
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 specifies how to call the tool ('Call with no arguments, or with an optional name... and workspaceId'), states what is not accepted, and routes the agent to sibling tools for subsequent actions ('Use artifact-explore and artifact-edit to inspect and change its contents. Only use artifact-publish when the user explicitly asks for a public deployment'). The 'never edits an existing one' line implicitly warns against using it for edits, giving a when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-deleteDelete ArtifactADestructiveIdempotentInspect
Delete an EXISTING artifact. Use this tool only when the user explicitly asks you to delete that artifact. Do not infer deletion from a cleanup request.
The tool makes a reversible soft deletion. It hides the artifact from normal lists and access paths. It keeps the artifact's code, assets, history, database content, and domain assignments. MCP cannot permanently delete an artifact.
The tool needs write access. Unpublish a published artifact before you delete it. If a publish is in progress, wait for the publish to finish. Then call artifact-unpublish. Then call artifact-delete again.
Set sessionId to the ID of the artifact to delete. An authorized repeated deletion succeeds.
Returns: { success, message }
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The value is the session ID of the artifact to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing soft-delete semantics: content/assets/database content are retained, MCP cannot permanently delete, write access is required, and repeated deletion succeeds. This meaningfully expands on the structured hints without contradicting them.
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 purpose alerting the agent to required user intent, then proceeds through prerequisites, behavior, and return shape. Every sentence adds operational value; there is no filler or repetition of the name/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 mutating tool with no output schema and one required parameter, the description supplies the essential invocation context: explicit request requirement, unpublish workflow, publish-in-progress handling, soft-delete behavior, idempotence, and return shape. An agent has enough information to call this tool safely and 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?
The single parameter sessionId is already fully described in the JSON schema as the session ID of the artifact to delete. The description restates this mapping ('Set sessionId to the ID of the artifact to delete') but does not add meaningful new semantics beyond what the schema already provides. With 100% schema coverage, the baseline of 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?
The description opens with a specific verb and resource: 'Delete an EXISTING artifact.' It then distinguishes this tool from deletion inferred by cleanup requests and sets an explicit boundary ('Use this tool only when the user explicitly asks to delete that artifact'). This clearly separates it from siblings like artifact-unpublish.
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?
Provides explicit when-to-use and when-not-to-use guidance, and practical sequencing: verify explicit user intent, do not infer deletion from cleanup, unpublish before deleting, wait for in-progress publishes, and note that authorized repeated deletions succeed. This is strong operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-duplicateDuplicate ArtifactAInspect
Duplicate (clone) an EXISTING artifact into a new, independent artifact.
This copies the artifact's code, assets, and supported database content. If a supported database cannot be copied, the entire duplication fails and no usable copy is returned. It does NOT copy chat or custom domains. This is different from running git clone locally: git clone only creates a local checkout, while this tool creates a new artifact with a new sessionId.
Requires sessionId for a readable source artifact that belongs to the caller's current team. Public, shared, or otherwise readable artifacts in other teams cannot be duplicated with this MCP v1 tool. You need write in the workspace the copy goes to. name is optional; the default is " (Copy)".
Retry safety: duplication is not idempotent. If a call times out or its response is lost, list recent artifacts (workspace-list_artifacts) before retrying because the first call may already have created the copy.
Returns: { success, sessionId, sourceSessionId, name, artifactType, artifactUrl, nextSteps } — plus playgroundUrl and previewUrl when the copy is an app or knowledge artifact; a markdown copy gets previewUrl only
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the duplicated artifact. | |
| sessionId | Yes | The session id of a readable source artifact that belongs to the caller's current team. | |
| workspaceId | No | Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses non-idempotency, retry behavior (list artifacts before retrying), atomic failure when a database cannot be copied, and what is not copied (chat, custom domains). This is substantial behavioral context that annotations alone could not convey.
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 longer than average but every sentence carries operational information, and it is front-loaded with the primary purpose before requirements and return shape. It could be tightened slightly, but the structure (purpose, exclusions, requirements, retry safety, returns) is logical.
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 no output schema, the description compensates by enumerating the exact return fields and their conditional presence (playgroundUrl/previewUrl). It covers failure semantics, permissions, retry behavior, and destination selection—enough for an agent to invoke it correctly without external context.
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 parameter descriptions already cover all three parameters (100% coverage), so the baseline is 3. The description adds real value by specifying the default name ('<source name> (Copy)') and clarifying when workspaceId is optional vs required—information absent from 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?
The description opens with a specific verb plus resource: 'Duplicate (clone) an EXISTING artifact into a new, independent artifact.' It states the key scope (copies code, assets, supported database content; does not copy chat/custom domains) and clearly separates this from artifact-create/delete/edit by emphasizing it acts on an existing artifact.
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 concrete conditions for use: source must be readable and in the caller's current team, caller needs write access to the destination workspace, and it explicitly contrasts itself with local git clone. It does not explicitly name a sibling like artifact-create as the alternative for creating from scratch, so it stops just short of an explicit when-to-use vs alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-editEdit Artifact FilesADestructiveInspect
Change the files of an EXISTING artifact and commit them, without git or a shell. Never creates a new artifact — the sessionId keeps pointing at the same one, and its playground URL does not change. If a Canvas draft exists, this refuses unless acknowledgeCanvasDraftRevision matches the draft you reviewed and the user explicitly chose to edit committed files. It does not edit, promote or discard the draft. All the changes you pass land as ONE commit: either every operation applies or none does. Read the files first with artifact-explore and pass the revision it returned as baseRevision; if someone else changed the artifact meanwhile the edit is rejected with REVISION_CONFLICT, which lists what changed so you can re-read those files and retry. Prefer op "str_replace" for edits to existing files (send the exact snippet), "write" to create a file or replace one wholesale, "delete", and "move" to rename. move does NOT rewrite imports — neither in the files that import the moved module, nor the relative imports INSIDE the moved file, which now resolve from its new folder, so read it first and add the str_replace operations that fix them. The live preview updates from the new commit immediately. To rename an artifact or change its visibility use artifact-update_metadata; for very large repositories or full git workflows (branches, history rewriting) use artifact-get_git_token.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | Up to 20 operations, applied IN ORDER and committed together as one commit. Each path resolves against the result of the operations before it, so a str_replace listed after a move of the same file must use the new path. | |
| sessionId | Yes | The artifact session id — the last path segment of the artifact URL (e.g. "mr25vsjppVtbMx" from https://app.agentgrid.io/artifacts/mr25vsjppVtbMx), or the id from artifact-create. | |
| baseRevision | Yes | The full commit id from your most recent artifact-explore response — exact, not "HEAD" or an abbreviation, since it is what the edit is checked against. If the artifact has changed since, the edit is rejected with REVISION_CONFLICT instead of overwriting the other change. | |
| commitMessage | Yes | Commit message describing the change, e.g. "Change pill color to blue". Keep the first line short. Plain text only: do not add attribution trailers (Co-Authored-By, Agent-Id, Anima-Actor-*) — the server stamps those itself and rejects the edit if the message contains them. | |
| acknowledgeCanvasDraftRevision | No | Only after explicitly choosing to edit committed files despite a Canvas draft: pass the draft revision reported by artifact-explore. A draft based on the previous head is superseded by this commit. This does not edit or promote it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state destructiveHint=true and readOnlyHint=false, but the description adds substantial behavior: operations are committed atomically as ONE commit, REVISION_CONFLICT occurs on staleness, the artifact URL remains unchanged, drafts are never edited/promoted/discarded, and move does not rewrite imports. It also notes the live preview updates immediately. This goes well beyond the annotations without contradicting them.
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 long but dense; every sentence addresses a distinct failure mode or usage rule (atomicity, draft handling, baseRevision conflicts, op choice, move caveat, alternatives). It front-loads the core function and scoping before diving into conditions, and there is no filler or repetition.
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 mutation tool, the description covers inputs, ordering, atomicity, conflict handling, draft behavior, and alternatives remarkably well. The only gap is that there is no output schema and the description does not state what the successful response contains (e.g., new commit id), leaving the agent to guess the return shape. Otherwise 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 schema already documents all parameters thoroughly. The description nevertheless adds valuable operational guidance: prefer str_replace for existing files, send exact snippets, and be aware that move does not fix import paths. This is complementary but largely reinforces rather than replacing the schema's already-rich parameter documentation.
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-resource pair ('Change the files of an EXISTING artifact and commit them') and immediately scopes itself by stating it never creates a new artifact. It also names sibling tools like artifact-update_metadata and artifact-get_git_token to route away from non-file-edit operations, making it easy to distinguish from the many artifact siblings.
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 explicitly says when to use this tool (editing existing artifact files without git/shell) and when not to (renaming/visibility changes → artifact-update_metadata; huge repos/full git workflows → artifact-get_git_token). It also gives a critical precondition: read files first with artifact-explore and pass the returned revision as baseRevision, plus the Canvas draft condition for acknowledgeCanvasDraftRevision. This is fully explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-exploreExplore Artifact FilesARead-onlyInspect
Inspect the files of an EXISTING artifact: list them, search their text, read them, or review the commit history. Works with no shell, no git and no network access, so prefer it whenever you cannot run git. Pass the sessionId (the last path segment of a .../chat/ URL). A canvasDraft field, when authorized, reports an uncommitted Canvas draft. Use action draft to inspect its projection overlay explicitly; ordinary reads remain committed files. Draft access requires write permission. Typical flow to change something: action "search" to find the file, action "read" for the files you will edit, then artifact-edit. Every response includes "revision", the artifact's current commit — pass it back as artifact-edit's baseRevision. Use action "read" with a "revision" to see how a file looked at an earlier commit (this is how you undo something). Assets — images, fonts, media — are readable too: action "read" answers with size, mime and oid under "asset": true whenever a file's bytes are not text, instead of content. That check is on the bytes, so it is the authority: an SVG reads as text, and a file with an unfamiliar extension may still come back as an asset. When a search comes back empty, check "notSearched": "assets" counts binary files a text query can never match, and "excluded" counts files under node_modules, dist or build — re-run with includeExcluded true to search those. A "tree" listing also maps any path artifact-edit cannot change under "unwritable". For generation or build progress use artifact-status instead; this shows the commit log, not build state.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | tree and search only: a literal directory prefix to look inside, e.g. "src" or "packages/ui". NOT a glob — no wildcards. | |
| limit | No | tree, search and history: maximum rows to return (tree ≤500, search ≤500, history ≤50). | |
| paths | No | For read (REQUIRED) or draft (optional; omit to list changed paths): up to 10 file paths to return in one call. The whole response shares a size budget: files past it come back with deferred: true. Every file reports startLine, endLine and totalLines, plus truncated: true when what you got is not the whole file — read the rest with an explicit range. A file whose bytes are not text comes back as asset: true with its size instead of content; committed reads also include mime and oid. | |
| query | No | search only, REQUIRED for it: text to find. Matching never spans lines, and is case-insensitive unless you pass caseSensitive. Each match reports occurrences, the count on that line — sum them when you need the total in a file, since one line can hold several. | |
| range | No | read or draft, optional: line window as "startLine,endLine" (1-based, inclusive), e.g. "1,120". Valid only when paths holds exactly one file. | |
| regex | No | search only: treat query as a JavaScript regular expression instead of literal text. | |
| action | Yes | What to look at. tree = list file paths. search = find text inside files (start here when you do not know which file to change). read = committed file contents. history = commits, newest first. draft = inspect the saved Canvas draft overlay; requires write access. Omit paths to list changed paths, or pass paths and an optional line range to read them. Not a Git revision; unchanged files belong to baseCommitHash. | |
| cursor | No | history only: continue the log after this point, using nextCursor from a previous response. | |
| revision | No | tree, read and search: look at the artifact as it was at this commit instead of now — this is how you recover earlier content. history: return this single commit with the files it changed. Accepts a commit id from action=history, an unambiguous abbreviation of one, or "HEAD"; not a branch name, tag or range. Commits are on main only. | |
| sessionId | Yes | The artifact session id — the last path segment of the artifact URL (e.g. "mr25vsjppVtbMx" from https://app.agentgrid.io/artifacts/mr25vsjppVtbMx), or the id from artifact-create. | |
| caseSensitive | No | search only: match case exactly. Use it before counting occurrences you intend to replace. | |
| includeExcluded | No | tree and search: also include node_modules, dist and build, which are skipped by default. When a search comes back empty with notSearched.excluded set, the term may be in there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnlyHint and non-destructive, the description adds substantial behavioral context: draft requires write permission, assets are detected by byte-check (SVG reads as text), empty searches explain notSearched.excluded and notSearched.assets, unwritable paths are mapped in tree, and response includes deferred files and truncated text with size budget. No contradiction with annotations; rich operational transparency.
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 and every sentence carries unique operational information—no filler or repetition. However, it is a single long unbroken paragraph, which makes scanning harder for an agent needing quick reference; slightly more structure (e.g., separating actions, revision, assets) would earn a 5.
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 12 parameters, no output schema, and rich edge cases, the description covers return semantics (revision, asset, notSearched, unwritable, deferred, truncated, nextCursor), version undo, asset distinction, search boundary behavior, and pagination. It even addresses the empty-search diagnostic path. Nothing essential for correct tool use 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 coverage is 100%, so baseline is 3, but the description adds meaning well beyond the schema: 'path' is explicitly NOT a glob, 'search' matching never spans lines, 'range' is only valid for a single file, 'revision' is not a branch/tag/range and commits are on main only, 'paths' for read is required and up to 10 files, and each action's expected parameter usage is spelled out (e.g. 'Omit paths to list changed paths'). This materially improves correct invocation.
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?
Opens with a precise verb+resource statement: 'Inspect the files of an EXISTING artifact: list them, search their text, read them, or review the commit history.' This clearly distinguishes the inspect/read role from sibling tools like artifact-edit (modify) and artifact-status (build progress), leaving no ambiguity about what the tool does.
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 states when to prefer this tool: 'Works with no shell, no git and no network access, so prefer it whenever you cannot run git.' It also names an alternative for a different use case: 'For generation or build progress use artifact-status instead.' The description even prescribes a typical workflow (search → read → artifact-edit) and explains when to use a revision for undo, giving agent clear selection and invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-get_asset_upload_urlStage an Artifact AssetAInspect
Step 1 of adding a LARGE asset (an image, font or media file) to an EXISTING artifact — anything over 256 KB, which is the most artifact-edit takes inline. Smaller files need no staging: send them to artifact-edit directly with encoding "base64".
Flow:
Call this with the sessionId and the filename: it returns assetUploadId, uploadUrl and uploadFields.
Upload the file with an HTTP POST of multipart/form-data to uploadUrl. Send EVERY key/value of uploadFields as a form field FIRST, then the file itself LAST, in a field named "file" — S3 ignores anything sent after the file part, so the order matters. Do not add a size or Content-Length field. Success is HTTP 204 with an empty body. With curl, uploadFields {"key": "abc", "policy": "xyz"} becomes: curl -X POST -F key=abc -F policy=xyz -F file=@/path/to/your-file.png
Call artifact-edit with a "write" change carrying assetUploadId instead of content, and the path the file should live at. Put the code that references it in the SAME edit, so both land in one commit.
Rules: one file per id, single use, 30 minutes to redeem it, 32 MB max — S3 rejects a larger body at step 2. Files over 10 MB are stored through Git LFS automatically: the commit carries a small pointer and .gitattributes gains the matching filter line, with no extra steps on your side. uploadFields carry the signature that authorizes the upload; treat them as a secret. If your host cannot make an HTTP request, use artifact-edit with encoding "base64" for a file that fits inline, or artifact-get_git_token to push the file with git.
Returns: success, assetUploadId, uploadUrl, uploadFields, expiresAt, maxBytes, nextSteps.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | The file you are uploading, e.g. "hero.png". Only its extension is read, to type the upload — the path the asset lands at is the one you pass to artifact-edit afterwards. | |
| sessionId | Yes | The artifact session id — the last path segment of the artifact URL (e.g. "mr25vsjppVtbMx" from https://app.agentgrid.io/artifacts/mr25vsjppVtbMx), or the id from artifact-create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations. It discloses the multi-step flow, the exact S3 upload requirements (order of form fields, file last, no size/Content-Length field), the 204 success response, one-file-per-id, single-use, 30-minute expiry, 32 MB max, automatic Git LFS behavior for files over 10 MB, and the security note about uploadFields being a secret. This is exceptionally transparent about behavior and constraints.
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 well-structured with clear sections (Flow, Rules, Returns). It front-loads the core purpose and the 256 KB threshold. It is longer than typical, but every sentence carries operational information an agent needs. The only minor issue is that the length could be slightly trimmed, but the structure keeps it navigable.
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 tool with no output schema, the description fully compensates by listing the return fields (success, assetUploadId, uploadUrl, uploadFields, expiresAt, maxBytes, nextSteps). It also covers the complete workflow, error-prone details (S3 field order), constraints, and fallback paths. An agent has everything needed to invoke this tool and execute the subsequent upload 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 both parameters. The description adds meaningful context: it explains that only the filename's extension is read for typing the upload, and that the actual path is passed later to artifact-edit. It also clarifies sessionId's format and source. This adds value beyond the schema, though the schema already covers the basics.
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 clearly states the tool's purpose: 'Step 1 of adding a LARGE asset to an EXISTING artifact' and distinguishes it from the alternative artifact-edit for smaller files. It names the specific verb (stage/get upload URL) and resource (artifact asset), and the flow makes the tool's role unambiguous.
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 provides explicit when-to-use guidance: use for files over 256 KB, and explicitly says smaller files should go to artifact-edit directly. It also names alternatives (artifact-edit with base64, artifact-get_git_token) and gives a fallback for hosts that cannot make HTTP requests. This is comprehensive routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-get_git_tokenGet Artifact Git TokenARead-onlyInspect
Get git access to an EXISTING artifact, for local development with a real git client. Use this when you HAVE a working shell with git and outbound network access AND the job suits a local checkout — a large refactor, running or testing the project, branches, or history rewriting. For ordinary reading and editing of an artifact’s files, prefer artifact-explore and artifact-edit: they need no shell, no git and no network of your own, and they change the same repository. An artifact is a real git repository. Pass the sessionId — the id of an existing artifact (e.g. the last path segment of a .../chat/ URL, like "mr25vsjppVtbMx") — and this returns a gitRemoteUrl plus the authenticated principal’s commitAuthor. After cloning, apply the returned git config user.name and user.email instructions before committing; then edit files, commit, and git push — pushing updates the live artifact. The gitRemoteUrl holds a short-lived access token scoped to this one artifact (read-only or read-write, depending on your access). Tokens CANNOT be renewed: on a "token expired" git error, call this tool again for a fresh gitRemoteUrl and run git remote set-url origin <new gitRemoteUrl>, then retry. If a git command instead fails because the host cannot resolve or reach the server (DNS, proxy or firewall errors), do NOT retry it — that environment has no route to the git remote, so use artifact-edit instead. Treat the gitRemoteUrl as a secret. To rename an artifact or change its visibility, use artifact-update_metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The artifact session id — the last path segment of the artifact URL (e.g. "mr25vsjppVtbMx" from https://app.agentgrid.io/artifacts/mr25vsjppVtbMx), or the id from artifact-create. | |
| ttlSeconds | No | Optional token lifetime in seconds. Default and maximum 3600 (1 hour); minimum 300. Expired tokens cannot be renewed — mint a new one and update the git remote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnlyHint/destructiveHint annotations. It explains the returned gitRemoteUrl contains a short-lived token scoped to one artifact, that tokens cannot be renewed, how to recover from expiry, that pushing updates the live artifact, and to treat the URL as a secret. It also clarifies that the tool itself is read-only even though the returned credentials may allow writes, which is consistent with the annotations.
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 long but every sentence earns its place. It front-loads the purpose and when-to-use, then covers return values, usage steps, error handling, security, and alternative tools. There is no fluff; each clause adds necessary operational detail. The structure is logical and efficient for the complexity of the tool.
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 tool with no output schema, the description fully explains what is returned (gitRemoteUrl and commitAuthor), how to use it after cloning, and how to handle failures (token expiry vs. DNS errors). It also points to artifact-update_metadata for rename/visibility tasks, covering all relevant operational scenarios. An agent can invoke this tool correctly with no ambiguity.
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% for both parameters, so the schema already documents sessionId and ttlSeconds in detail. The description adds some context (e.g., the example URL format and the relationship between ttlSeconds and the renewal workflow), but that information is largely present in the schema itself (e.g., 'Expired tokens cannot be renewed — mint a new one and update the git remote'). Thus the description adds marginal value beyond the schema, warranting the baseline of 3.
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 opens with a clear verb-resource-purpose statement: 'Get git access to an EXISTING artifact, for local development with a real git client.' It also explicitly names sibling alternatives (artifact-explore, artifact-edit) and explains when each is preferred, so the agent can distinguish this tool from the rest of the list.
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 explicit conditions for use: 'Use this when you HAVE a working shell with git and outbound network access AND the job suits a local checkout...' and lists concrete cases (large refactor, running/testing, branches, history rewriting). It also states when NOT to use it ('For ordinary reading and editing... prefer artifact-explore and artifact-edit') and how to handle DNS/proxy failures by falling back to artifact-edit. This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-get_zip_upload_urlGet ZIP Upload URLARead-onlyInspect
Step 1 of the zip import flow for artifact-create: for imports with binaries or over roughly 100 KB of source; small text-only projects pass files inline.
Flow:
Call this tool: returns zipUploadId and presigned uploadUrl.
HTTP PUT the project zip to uploadUrl.
Call artifact-create (type import) with zipUploadId within 30 minutes of the last upload; the zip becomes the first commit and zipUploadId is single-use.
Rules: zip max 50MB; source, config, assets only — no node_modules or build output. Shell/executable files are skipped and reported. uploadUrl is a secret.
Returns: success, zipUploadId, uploadUrl, uploadUrlExpiresAt, nextSteps.
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | Reserve the upload for a specific artifact kind. Omit for app or markdown source. Pass "asset" to import images or video — an asset artifact can ONLY be created from an upload reserved this way, and an asset-reserved upload can only become an asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses that uploadUrl is a secret, the 50MB zip limit, that shell/executable files are skipped and reported, that zipUploadId is single-use, and the 30-minute expiry window. This adds significant behavioral context without contradicting any annotation.
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 well-structured with clear sections (Flow, Rules, Returns) and every sentence provides necessary information. It is detailed but not verbose, with no wasted words, making it easy to scan and understand.
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 tool that is part of a multi-step import process, the description covers the entire flow, constraints, secrets, and return values. Even without an output schema, it lists exactly what the tool returns, making it fully self-contained for correct usage.
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 description enriches the single parameter 'purpose' far beyond the schema's enum. It explains when to omit it, what passing 'asset' means, and the exclusivity rules (asset artifacts can only be created from reserved uploads). This adds essential meaning that the schema alone lacks.
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 clearly states the tool's specific purpose: it is step 1 of the zip import flow for artifact-create, used for imports with binaries or large source. It distinguishes from inline file passing and implicitly from the asset upload sibling by explaining the purpose parameter, making its role unambiguous.
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 explicitly states when to use this tool (for binaries or over ~100 KB of source) versus the alternative (inline for small text-only projects). It also outlines the full multi-step flow, including the required sequence and the use of artifact-create afterwards, giving clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-publishPublish ArtifactADestructiveInspect
Publish an artifact — deploys its committed files (git HEAD; uncommitted edits are not included) to a live public URL. Works for app AND markdown artifacts; an asset artifact cannot be published (tell the user so and share its artifactUrl instead).
Publishing makes the content PUBLIC to the world. It is NOT needed for sharing — the artifact is already visible at its artifactUrl to everyone who can reach it, and liveUrl is NOT an editor. Call this only when the user explicitly asked to publish/deploy; otherwise share that URL and offer publishing as a follow-up question.
Requires a sessionId from a previously created artifact (via artifact-create).
What goes live:
app: the running web application.
markdown: one document. liveUrl renders the initial file (README.md if present, else the first .md lexicographically); the raw source is at /index.md (Content-Type: text/markdown) — give the user that path when they want the markdown. Other .md files are served raw at their own paths, each with a rendered .html sibling. ```mermaid fences render as diagrams; the .md keeps the fence. accTitle/accDescr label a diagram.
Modes:
"webapp" (default): Deploys to a live URL; use it for both app and markdown artifacts. Returns { success, liveUrl, subdomain }.
"designSystem": NOT available over MCP — always fails with an enterprise contact link, whatever you pass. Do not offer it as a capability.
Returns: { success, liveUrl, subdomain }
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deploy mode: "webapp" publishes to a live URL (for app and markdown artifacts alike), "designSystem" publishes as an npm package. | webapp |
| sessionId | Yes | The session ID of the artifact to publish (returned by artifact-create). | |
| packageName | No | [designSystem mode only] NPM package name. Required when mode is "designSystem". | |
| packageVersion | No | [designSystem mode only] NPM package version. Required when mode is "designSystem". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=true, readOnlyHint=false) are consistent with the description, and the description adds rich context beyond them: 'Publishing makes the content PUBLIC to the world,' only git HEAD is deployed ('uncommitted edits are not included'), designSystem mode 'always fails with an enterprise contact link,' and detailed rendering behavior for markdown artifacts. This explains the nature of the destructive action rather than merely flagging it. No annotation contradiction.
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 long but well-structured with headers (**What goes live:**, **Modes:**, **Returns:**), and the most decision-critical facts — asset artifacts can't be published, content becomes public, and when NOT to call it — are front-loaded. The markdown rendering details (lexicographic README selection, accTitle/accDescr, content-type of index.md) are more granular than strictly necessary but do serve the agent's follow-up messaging to the user.
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 4 params, 2 modes, 3 artifact types, no output schema, and a public-exposure consequence, the description is thorough: it covers preconditions, return shape { success, liveUrl, subdomain }, exclusions (asset artifacts, designSystem), the public-visibility warning, and the sharing alternative. An agent has everything needed to decide whether to call it and what to expect in return.
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. The description adds value on top of the schema by clarifying behavioral semantics of the parameters: it explains that 'webapp' is the default and works for both artifact types, that designSystem 'always fails' making packageName/packageVersion effectively unusable, and it specifies sessionId's origin. This goes beyond the schema's per-parameter text.
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 — 'Publish an artifact — deploys its committed files (git HEAD...) to a live public URL' — and disambiguates artifact types explicitly: 'Works for app AND markdown artifacts; an asset artifact cannot be published.' This clearly differentiates it from siblings like artifact-create, artifact-unpublish, and artifact-edit without needing to inspect them.
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 explicit when-to-call guidance: 'Call this only when the user explicitly asked to publish/deploy; otherwise share that URL and offer publishing as a follow-up question.' It also states what NOT to do, names the alternative action (sharing artifactUrl), and warns that designSystem 'is NOT available over MCP... Do not offer it as a capability.' Prerequisites are covered via 'Requires a sessionId from a previously created artifact (via artifact-create).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-statusCheck Artifact StatusARead-onlyInspect
Check the build status of an EXISTING artifact (from artifact-create). Read-only.
Generation is asynchronous, so this is how you find out it finished. Call it with { sessionId, wait: true } and it WAITS for you: the call returns as soon as status is 'ready' or 'failed', or after about 45 seconds still 'generating'. Then, you can call it again. This tool is meant to be called right after artifact-create, before replying to the user, and keep getting called until status is no longer 'generating'. ONLY when you want an instant snapshot, this tool can be called without wait (or false); the idea is to never spin on wait: false.
Requires sessionId — the id returned by artifact-create (or the last path segment of an artifact URL like https://app.agentgrid.io/artifacts/ or https://dev.animaapp.com/chat/).
Returns: { success, sessionId, status: 'generating' | 'ready' | 'failed', progress (0–100, while generating), name, artifactUrl (generating/ready only), playgroundUrl (app and knowledge artifacts only, generating/ready only), previewUrl (app, knowledge and markdown artifacts only, generating/ready only), error (when failed), nextStep (when a wait returned still generating) }
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait for generation to finish instead of returning the current snapshot. The call returns as soon as status is "ready" or "failed", or after about 45 seconds still "generating" — in that case call again to keep waiting. Use wait: true after artifact-create so you can report the finished app; do NOT call this tool in a tight loop with wait: false. | |
| sessionId | Yes | The artifact session id to check status for (returned by artifact-create). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds critical behavioral context: asynchronous generation, timeout after 45 seconds, and the exact wait semantics. It also discloses the return structure with fields for different statuses, which is beyond the annotations.
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 well-structured and front-loaded: purpose first, then usage flow, then parameter specifics, then return details. Every sentence adds value, and it avoids redundancy with the schema. It is detailed but not bloated.
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?
The description fully equips an agent to use the tool correctly: what it does, when to call, how to wait, what the sessionId is, and what the return object contains. For a complex async tool, nothing needed 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 coverage is 100%, so the schema already documents both parameters. However, the description adds crucial meaning: it explains that sessionId can derive from artifact-create or from a URL's last segment, and elaborates on the wait behavior (45-second timeout, recommended true, not to spin). This is far beyond the schema's basic definitions.
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 ('Check') and resource ('build status of an EXISTING artifact'), explicitly ties it to artifact-create, and clarifies it is read-only. This clearly distinguishes it from sibling tools like artifact-edit or artifact-delete.
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 explicit instructions: call right after artifact-create, keep calling until status is no longer 'generating', and warns against tight loops with wait: false. It also explains when to use wait: true vs false, leaving no ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-unpublishUnpublish ArtifactADestructiveIdempotentInspect
Take an EXISTING published artifact offline — clears its live URL so the deployed site (app or markdown document) stops being reachable. The inverse of artifact-publish. This only affects the live deployment: it does NOT delete the artifact, its code, or its content, and the same subdomain is reused if you publish again later.
Requires sessionId — the id of an existing, currently published artifact (returned by artifact-create; if you have an artifact URL like https://app.agentgrid.io/artifacts/, it is the last path segment).
Fields:
sessionId (required) — the artifact to unpublish.
Returns: { success, message }
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The artifact session id to unpublish (take its live URL offline). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds valuable context: it clarifies that the destructive effect is limited to the live URL, not the artifact itself, and that the subdomain is reused on republish. This goes beyond the annotations and helps the agent understand the exact scope of the destructive action. It doesn't mention rate limits or auth, but for this tool the key behavioral disclosure is well covered.
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 well-structured and front-loaded: the core action and effect come first, followed by exclusions, then parameter details and return value. Every sentence earns its place, and the formatting with bold fields and a returns line makes it scannable.
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 single-parameter tool with a simple output ({ success, message }), the description covers the action, the scope of the destructive effect, the required parameter, how to get it, and the inverse operation. There is no output schema, but the return shape is stated inline. 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 coverage is 100%, so the schema already documents sessionId. The description adds extra meaning by explaining how to obtain sessionId (returned by artifact-create, or extracted from the URL's last path segment), which is genuinely useful beyond the schema's one-line description. This is above the baseline 3.
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 ('Take an EXISTING published artifact offline'), a clear resource (published artifact), and the effect (clears its live URL so the deployed site stops being reachable). It also explicitly names the inverse sibling (artifact-publish), which distinguishes it from other artifact tools.
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 explicitly says when to use it (for an existing published artifact) and what it does NOT do (does not delete artifact/code/content). It also names the inverse sibling artifact-publish, giving the agent a clear alternative. It even explains how to derive sessionId from an artifact URL, which is practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifact-update_metadataUpdate Artifact MetadataADestructiveIdempotentInspect
Update an EXISTING artifact's metadata — its display name and/or visibility. Metadata only: this never changes code or content. For content edits use artifact-edit (or the git flow via artifact-get_git_token); to deploy use artifact-publish; to create a new artifact use artifact-create.
Requires sessionId — the id of an existing artifact (returned by artifact-create; if you have an artifact URL like https://app.agentgrid.io/artifacts/, it is the last path segment). Send at least one of name or privacy (both may be set in one call).
Renaming requires write capability. Changing visibility requires share capability. Sending both fields requires both capabilities on the artifact.
Fields:
sessionId (required) — the artifact to update.
name — new display name.
privacy — "public" (anyone with the link) or "private" (only the artifact's team).
Returns: { success, message }
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| privacy | No | New visibility. | |
| sessionId | Yes | The artifact session id to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag non-read-only, open-world, and destructive semantics. The description usefully narrows the side-effect surface to metadata only (never code/content) and names capability requirements, though it does not detail the destructive implications flagged by destructiveHint.
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 definition, one-line scope limitation, and compact routing guidance. The field details are brief and the capability notes are grouped without repetition.
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?
Includes return shape, capability requirements, sibling distinctions, and the at-least-one-parameter rule. It doesn't enumerate error cases, but for a simple metadata update with full schema coverage and a return description this is reasonably 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?
The description adds meaning beyond the schema: at least one of name/privacy must be sent, both may be set in one call, and sessionId can be derived from the artifact URL. This directly resolves ambiguity not present in 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?
Opens with a precise definition: update metadata (name/visibility) on an existing artifact, and explicitly says it is not for code/content. This cleanly separates it from artifact-edit and artifact-publish.
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 explicit routing guidance: use artifact-edit for code/content changes, artifact-publish for publishing, and artifact-create for new artifacts. It also says sessionId comes from an existing artifact and how to extract it from a URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen-figma_to_codeGenerate Code from FigmaAInspect
Convert a Figma design to production-ready code.
This tool generates code from Figma designs, supporting multiple frameworks and styling options.
Authentication: Requires X-Figma-Token header with your Figma personal access token.
Inputs:
fileKey: Figma file key extracted from the URL. For example, from "https://figma.com/design/abc123XYZ/MyDesign", the fileKey is "abc123XYZ".
nodesId: Array of Figma node IDs to convert. Extract from the URL's node-id parameter, replacing "-" with ":". For example, from "?node-id=1-2", the nodeId is "1:2".
framework: Target framework (react, html). Detect from the user's project to match their existing stack.
styling: CSS approach (tailwind, plain_css). Detect from the user's project to match their existing styling system.
language: TypeScript or JavaScript. Detect from the user's project.
uiLibrary: Optional UI component library (mui, antd, shadcn). Detect from the user's project if they use one of the supported libraries.
assetsBaseUrl: Base path for assets in generated code
Returns:
files: Generated code files as a record of {path: {content, isBinary}}
assets: Array of {name, url} for images/assets that need to be downloaded from Figma
tokenUsage: Approximate token count for the generation
snapshotsUrls: Record of {nodeId: url} with screenshot URLs for each requested node
guidelines: IMPORTANT Instructions for using the generated code effectively
Asset Handling: The generated code references assets at the assetsBaseUrl path. You must download the assets from the returned URLs and place them at your assetsBaseUrl location. For example, if assetsBaseUrl is "./assets" and an asset is named "logo.png", the code will reference "./assets/logo.png".
| Name | Required | Description | Default |
|---|---|---|---|
| fileKey | Yes | Figma file key extracted from the Figma URL. For example, from "figma.com/design/abc123XYZ/MyDesign", the file key is "abc123XYZ" | |
| nodesId | Yes | Array of Figma node IDs to generate code for. You can find node IDs in the Figma URL after selecting elements, e.g., "0:1", "123:456" | |
| styling | No | CSS styling approach for the generated code. Defaults to Tailwind | tailwind |
| language | No | Programming language for the generated code. Defaults to TypeScript | typescript |
| framework | No | Target framework for the generated code. Defaults to React | react |
| uiLibrary | No | UI component library or code style to use. Options: "mui" (Material UI), "antd" (Ant Design), "shadcn" (shadcn/ui), "clean_react" (production-ready React with semantic HTML, accessibility, and interactivity - no UI library). If not specified, generates plain React/HTML. | |
| assetsBaseUrl | No | Base URL or path for assets in generated code. For example, "./assets" will produce paths like "./assets/logo.png" | ./assets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description reinforces this by explaining it converts designs into files. It also discloses the authentication requirement (X-Figma-Token) and the asset-download behavior, which are behavioral details beyond the schema. It stops short of rate limits or failure modes, but the key side effects and prerequisites are covered.
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?
Purpose is front-loaded in a single sentence. The description is organized into labeled sections (Authentication, Inputs, Returns, Asset Handling), which makes it easy to scan. It is somewhat longer than strictly necessary, but every section adds distinct value; no filler or repetition of the input schema.
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?
Even though there is no output schema, the description enumerates the return aspects (generated code files, assets list, usage guidelines) and explains how to handle assets by downloading them from the returned URLs. It also states the auth requirement upfront. For a code-generation tool of this complexity, this is a complete picture an agent needs to invoke it 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?
The schema descriptions already cover the parameters well (with defaults and examples), giving a baseline of 3. The tool description goes further by teaching the agent how to extract fileKey from a URL and how to convert '-' to ':' for node IDs, plus recommending detection from the user's project to pick framework, styling, and language. This is actionable guidance that materially improves parameter selection.
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 opening line states a specific verb and object ('Convert a Figma design to production-ready code') that precisely captures the tool's function. The description continues with concrete parameter explanations)Skip. Among the sibling tools (artifact-create, design_system-get_manifest, etc.), this one is clearly the Figma-to-code converter, so there is no ambiguity about its unique role.
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 provides clear context for when the tool is used (when a Figma design should become code) and gives practical instructions for parameter selection, notably 'Detect from the user's project' for framework, styling, and language. It does not explicitly name alternative tools or state exclusion conditions, but sibling names make the distinction obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_system-get_filesGet Design System FilesARead-onlyInspect
Fetch multiple documentation files by their paths. Returns a JSON object mapping file paths to their content. Use this after getting the manifest to retrieve specific files like README.md, COMPONENTS.md, TROUBLESHOOTING.md or component documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| dsId | Yes | The design system ID | |
| filePaths | Yes | Array of file paths to fetch (e.g., ["README.md", "COMPONENTS.md"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavior beyond the schema by stating the return shape ('JSON object mapping file paths to their content'), which is not present in the input schema. It doesn't mention edge cases, but given the read-only nature, this is reasonable.
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 two sentences with no redundancy. The first sentence states the action and outcome; the second gives usage context and examples. Every word earns its place, and the key behavior is front-loaded.
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 two-parameter tool with no output schema, the description is sufficient. It specifies the return type, the sequencing relative to the manifest, and gives representative file paths. An agent has everything needed to call it correctly without further clarification.
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% for both params, so the baseline is 3. The description adds a small amount beyond the schema by listing example file paths and clarifying the mapping in the return, but it does not deeply enrich parameter meaning. It provides a practical orientation but no new semantic constraints.
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 ('Fetch') and a clear resource ('multiple documentation files by their paths'), and specifies the return format ('JSON object mapping file paths to their content'). It also distinguishes this from the sibling design_system-get_manifest by implying the manifest is for listing while this is for retrieving specific files.
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 explicit usage timing: 'Use this after getting the manifest', and provides concrete examples (README.md, COMPONENTS.md, TROUBLESHOOTING.md). This clearly instructs when to use this tool relative to its sibling and what it is for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_system-get_manifestGet Design System ManifestARead-onlyInspect
Get the manifest.json file describing the design system documentation structure. Returns a JSON object mapping file/folder paths to their metadata (description, type, optional tags/category).
| Name | Required | Description | Default |
|---|---|---|---|
| dsId | Yes | The design system ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=falsekin. The description adds useful behavioral detail by specifying the return value: a JSON object mapping paths to metadata (description, type, optional tags/category). It doesn't discuss auth or errors, but the safety profile is covered by annotations.
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 concise sentences. The first front-loads the purpose; the second clarifies the return shape without repetition.
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 readOne operation with a single parameter, the description adequately explains what is returned. It lacks details like error behavior or whether the manifest is cached/large, but the output shape and read-only nature are enough for an agent to decide whether to call it.
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%: the only parameter dsId is described as 'The design system ID'. The description adds nothing beyond the schema about dsId's format or how to find a valid ID, so it stays at the baseline for high coverage.
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 ('Get') and names a concrete resource ('manifest.json file'), and explains what it contains (mapping of file/folder paths to metadata). It doesn't explicitly contrast with the sibling design_system-get_files, but the resource is distinct enough.
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 implies the use case – retrieve the manifest describing the design system documentation structure – but offers no explicit guidance on when to choose this over the similar-sounding design_system-get_files sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review-listList Artifact ReviewsARead-onlyIdempotentInspect
Read the change requests humans have addressed to YOU on their artifacts. A review is a batch of comments a reviewer wrote together and sent as one, each pinned to a place in the artifact. Call this when a human says they left you comments or asked for changes, and at the start of work on an artifact you have been reviewed on before. Every comment carries an anchor. For an app artifact that is dom: sourceFile with sourceStart/sourceEnd points straight at the code when it resolved, and instanceCount above 1 warns that the markup is SHARED — changing the component changes every instance, so change the one instance unless the reviewer meant all of them. For a document it is markdownRange: find the text by SEARCHING the markdown for quote (with prefix/suffix to tell repeats apart), never by the offsets, which any edit above them invalidates; headingPath says which section it is in, and endQuote with spansBlocks marks a comment covering several blocks. isLatest false means the artifact moved since the review was written — pull and judge whether the comments still apply before acting. You see the comments addressed to you, plus any addressed to nobody, which arrive marked unassigned: a review may hold comments for several agents, and another agent's are not yours to act on or report on. An unassigned comment is anyone's to take: reply to say you are taking it, which announces the work but does not reserve it — the comment stays open to every agent, and another may be working the same one. A comment addressed to PEOPLE and not to you never reaches you at all. A comment may name several parties, agents and people together. alsoAsked lists everyone else it names, so you can see a colleague is on it and not redo their work. Any of them may resolve it, and resolving closes it FOR ALL OF THEM. The mentions in the body may scope parts of the request — "@you fix the header, @someone else the footer" — and that scoping is in the words, not in the fields. So when you have done only your part, REPLY rather than resolve: resolving would close the others' half too, and they would never learn it was dropped. A comment may point at nothing in particular — that is the reviewer's note about the artifact as a whole, and it carries no anchor. Each comment carries its own status and replies, the conversation so far. READ THE REPLIES before acting: they may answer a question you asked, and they may also add or change what is being asked for, since a reviewer can keep talking after sending. The comment body is where the request starts, not necessarily where it ends. To resolve, copy the review's resolveTrailer into your commit message — it is the exact lines that close these comments, one per comment. Drop the lines for any comment the commit does not address. Use review-resolve when no commit will, and review-reply to say something without closing it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum reviews to return, oldest first. Default 20. | |
| sessionId | No | Optional artifact session id — the last path segment of the artifact URL (e.g. "mr25vsjppVtbMx" from https://app.agentgrid.io/artifacts/mr25vsjppVtbMx). Omit it to see every open review addressed to you, across every artifact you can reach. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds substantial behavior beyond that: unassigned comments are anyone's to take but not reserved, resolving closes the comment for all named parties, isLatest=false means the artifact moved, replies can change the request, and resolveTrailer must be copied to close comments. No contradiction with annotations.
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 long and dense, but it is front-loaded with purpose and when-to-call guidance, then organized by anchors, assignment semantics, replies, and resolution. Some content, such as resolveTrailer and reply-versus-resolve guidance, is arguably more relevant to sibling tools, but it helps the agent understand the list output. It earns a high score but loses a point for length and occasional redundancy.
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 no output schema, the description must carry the burden of explaining return values and interpretation, and it does: anchors for both app and document artifacts, shared markup warnings, isLatest behavior, unassigned and alsoAsked semantics, no-anchor comments, status/replies, and resolveTrailer. The tool is complex enough that this depth is needed, and it is present.
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%: both limit and sessionId have detailed descriptions with defaults, bounds, and an example for sessionId. The description adds some context for sessionId by mentioning 'across every artifact you can reach,' but it does not need to compensate for schema gaps. 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?
The description states a specific verb and resource: 'Read the change requests humans have addressed to YOU on their artifacts.' It defines what a review is and clearly separates this tool from review-resolve and review-reply by noting those are for closing or replying rather than listing. An agent can tell what this tool is for without needing the title or 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?
It gives explicit triggers: 'Call this when a human says they left you comments or asked for changes, and at the start of work on an artifact you have been reviewed on before.' It also provides alternatives: 'Use review-resolve when no commit will, and review-reply to say something without closing it.' This is strong when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review-replyReply to a Review CommentAInspect
Say something back on ONE review comment and LEAVE IT OPEN — to ask what the reviewer meant, to report what you found, or to say you are blocked. Use this rather than review-resolve whenever the exchange is not finished: resolving closes it, and the reviewer would have to open a new comment to answer you. The reviewer sees your message in the artifact, and their answer comes back on the same comment — call review-list again to read it. They may not reply immediately, so do not wait on it. You may reply to a comment addressed to you, or to one marked unassigned. A closed comment takes no more replies — it answers replied: false, because nobody is reading that thread any more. Use mentionUserIds to bring a PERSON into the comment when you need a human decision, an approval, or information you cannot get yourself: pass the id of anyone in the artifact's mentionablePeople from review-list — they need not already be on the comment. Each person named is emailed, so name somebody only when the exchange genuinely needs them. You cannot mention another agent.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | What to say to the reviewer. The comment stays OPEN — use review-resolve to close it. | |
| commentId | Yes | The comment to reply to, as returned by review-list. | |
| mentionUserIds | No | People to pull into this comment, as the `id` of anyone in the artifact's `mentionablePeople` from review-list — they need not already be on the comment. Each one is emailed, so name somebody only when you need them. PEOPLE ONLY: agents cannot be mentioned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important side effects beyond the annotations: the comment stays open, the reviewer will see the reply on the same thread, responses may be delayed, closed comments stop accepting replies, and mentioning someone emails them. It also clearly states agents cannot be mentioned, which is non-obvious behavior.
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 long but dense: the main purpose and sibling distinction are front-loaded, followed by workflow and behavioral caveats. Every sentence contributes useful guidance, though some points are repeated from the input schema and the single-flow structure could be tighter.
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 tool with no output schema, the description gives agents a complete mental model: how to reply, how to read the reviewer's response, whether to wait, which comments are eligible, and how mentionUserIds changes behavior. It also names the sibling tools explicitly, so context switching is clear.
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 schema already documents all parameters at 100% coverage, including message behavior and mentionUserIds. The description adds practical value on top—such as when to bring in a person, that IDs must come from mentionablePeople, and that each mention triggers an email—but the additional nuance is somewhat redundant with the parameter descriptions.
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 concrete action—reply to one review comment—and immediately adds the key differentiator of leaving the comment open. It also explicitly contrasts with review-resolve, so the agent can distinguish it from the closest sibling.
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 explicitly says to prefer this tool over review-resolve whenever the exchange is not finished, and explains that resolving closes the thread. It also gives eligibility guidance, such as replying only to comments addressed to you or marked unassigned, and clarifies the mention flow for pulling in humans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review-resolveResolve a Review CommentAIdempotentInspect
Close ONE review comment WITHOUT a commit — for what a commit message cannot carry: a question answered, or a deliberate decision not to make the change, explained in note. When a commit does address the comment, prefer the trailer AgentGrid-Resolves: <reviewId>#<index> in its message: that records which commit resolved it, which this cannot. Closing ends the exchange — if you are asking the reviewer something rather than answering them, use review-reply instead, which leaves the comment open for them to come back to. You may close a comment addressed to you, or one marked unassigned. Safe to retry — a comment already closed answers resolved: false rather than failing.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note for the reviewer, for what a commit cannot say — a question answered, or a deliberate decision not to make the change. It is added to the comment as your closing message. | |
| commentId | Yes | The comment to close, as returned by review-list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate idempotentHint=true and readOnlyHint=false, but the description adds meaningful context: it states that closing ends the exchangeaiman, that it is safe to retry (already closed comments return resolved:false), and that it works without a commit. This goes beyond the annotations, providing important operational details about the tool's behavior.
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 a single paragraph with multiple sentences, but it is dense and information-rich. It is not overly long for the complexity of the tool, and each sentence adds value: purpose, use cases, alternatives, constraints, and retry behavior. It is well-structured with logical flow from what it does to when to use it to edge cases.
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 tool with only 2 parameters, no output schema, and annotations covering mutability and idempotency, the description covers the essential aspects: what it does, when to use it, how to use it, and what happens on retry. The only minor gap is not explicitly stating the outcome (that the comment becomes 'resolved'), but the description implies it. Overall, it is quite complete for its complexity.
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 schema description coverage is 100%, meaning the schema already fully documents both parameters. The description adds context for 'note' (what it is for) and 'commentId' (how it is obtained), which is slightly beyond the schema but not significantly. The baseline is 3 given the coverage, and the description doesn't add substantial new meaning beyond what the schema already provides.
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 clearly states the specific action: 'Close ONE review comment WITHOUT a commit' and explains its intended use cases (questions answered, deliberate decisions not to make changes). It distinguishes itself from siblings like review-reply and the commit trailer mechanism, making it easy to know exactly what this tool does.
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 provides explicit guidance on when to use this tool versus alternatives: it contrasts with the commit trailer (for when a commit addresses the comment) and review-reply (for asking a question instead of answering). It also notes that closing 'ends the exchange' and specifies that you may close comments addressed to you or marked 'unassigned'. This is comprehensive with clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace-list_artifactsList Workspace ArtifactsARead-onlyInspect
List the artifacts you can read, most recently updated first — across every workspace you can access, or in one with workspaceId.
Each row's sessionId is what artifact-explore, artifact-edit and artifact-get_git_token take.
Returns: { success: true, artifacts: [{ name, type: app | knowledge | markdown | asset, sessionId, workspaceId, workspaceName, updatedAt }], truncated, nextSteps }.
Rows cover only what you can access, and the listing is capped (truncated: true means more exist): report what you found, never a total, and never say the team has no artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional. List only this workspace — an id from workspace-list_workspaces. Omit to list every workspace you can access. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's read-only claim aligns. It adds value by disclosing truncation behavior (truncated: true means more exist) and instructing to never report a total or claim no artifacts exist, which are important behavioral nuances beyond the annotations.
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 sentences plus a return block, all essential. The core action and scope are front-loaded, and the return structure is clearly delineated. No wasted words.
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 1-param, optional list tool, the description covers scope, return format, truncation semantics, and reporting guidance. It fully equips an agent to call it correctly without an output 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 coverage is 100% with a clear description of workspaceId. The description reinforces that it's optional and specifies the source of the id (from workspace-list_workspaces), adding meaningful context beyond the schema alone.
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 (list), resource (artifacts), and scope (accessible ones, optionally filtered by workspaceId). It also distinguishes from siblings by noting sessionId is used by artifact-explore, artifact-edit, and artifact-get_git_token, clarifying this is the listing 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?
Clearly explains when to use it (to list artifacts across all accessible workspaces or a single one) and how to scope with workspaceId, even pointing to workspace-list_workspaces for the id. It does not explicitly contrast with alternatives, but the purpose is unambiguous given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace-list_workspacesList WorkspacesARead-onlyInspect
List the workspaces you can access and what you may do in each. Takes no parameters. Workspace ids are opaque: this names the ones you can reach, and a workspace-list_artifacts row carries the id its artifact is filed in.
Returns: { success: true, workspaces: [{ workspaceId, name, isGeneral, capabilities }] }. capabilities is a subset of read, write, share, publish; you need write to create or change an artifact in that workspace. isGeneral marks the team's General workspace.
An empty list means you have been granted no workspace, not that the team has none: ask the user for access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the meaning of an empty list ('you have been granted no workspace, not that the team has none: ask the user for access'), which is a non-obvious operational detail. It also explains the meaning of the `capabilities` field and `isGeneral`. This is above what annotations provide, though it doesn't discuss rate limits or pagination.
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-loads the purpose, then details on return shape and semantics in clearly delimited sections. Every sentence adds distinct value (opaque IDs, return fields, empty-list meaning). 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 a no-param, read-only listing tool with no output schema, the description is complete: it covers purpose, return shape, field meanings, edge-case semantics (empty list), and the relationship to a sibling. An agent has everything needed to invoke and interpret results 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?
Zero parameters, so baseline is 4. The description confirms 'Takes no parameters,' which is consistent with the empty 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 ('List') and resource ('workspaces you can access') and adds scope ('what you may do in each'). It also explicitly distinguishes itself from workspace-list_artifacts by explaining the relationship (the artifact row carries the workspace id). No ambiguity about which sibling to pick.
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 implies when to use it (discovering reachable workspaces and their capabilities) and explains the relationship to workspace-list_artifacts. It doesn't name explicit exclusions or say 'use X instead of Y' when the user already knows the workspace id, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace-move_artifactMove Artifact To Another WorkspaceADestructiveIdempotentInspect
Re-file an EXISTING artifact under a different workspace of the same team. The content stays put: the same git repository, sessionId, URL, history and live deployment. What changes is where it is listed and who reaches it — the destination's access decides that from here on, handing the artifact to the people who reach that workspace and taking it from the rest. Say what a move will change before making one a human did not ask for.
You need write on the artifact AND write in the destination. Moving an artifact where it already is succeeds and leaves everything as it was.
Returns: { success: true, sessionId, workspaceId, workspaceName, nextSteps }.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The artifact to move, from workspace-list_artifacts or artifact-create. | |
| workspaceId | Yes | Where to move it — an id from workspace-list_workspaces, in the same team. Required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint, idempotentHint and readOnlyHint=false, but the description adds the crucial meaning: content (repo, sessionId, URL, history, deployment) is preserved while access/listing changes, and moving to the same workspace is a no-op. This clarifies what 'destructive' actually destroys — reachability, not data.
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?
Well front-loaded (the core action and its non-destructive nature come first), with permissions and returns clearly sectioned. Slightly prose-heavy in the middle paragraph but each sentence carries 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?
For a 2-param mutation with no output schema, the description covers permissions, idempotency semantics, the access-change consequence, and an inline Returns block. Nothing needed to invoke it 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 coverage is 100% and both parameters are documented there, including their source tools. The description largely restates the same facts rather than adding format or edge-case detail 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 (re-file/move) and resource (artifact) with explicit scope: another workspace of the same team. An agent can distinguish this from artifact-duplicate, artifact-edit and the other artifact-* siblings without opening schemas.
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 clear context for when to use it and a strong caveat: confirm with a human before moving something they did not request, since access changes. It stops short of naming sibling alternatives (e.g. duplicate vs move) explicitly.
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.
1 tool update
- Added
workspace-move_artifact
1 tool update
- Changed
artifact-edit1 field changed- changed
Input schema / properties / acknowledgeCanvasDraftRevision / descriptionPrevious value: -"Only after explicitly choosing to edit committed files despite a Canvas draft: pass the draft revision reported by artifact-explore. The draft is preserved and may become outdated. This does not edit or promote it."New value: +"Only after explicitly choosing to edit committed files despite a Canvas draft: pass the draft revision reported by artifact-explore. A draft based on the previous head is superseded by this commit. This does not edit or promote it."
2 tool updates
- Changed
artifact-edit1 field changed- added
Input schema / properties / acknowledgeCanvasDraftRevisionAdded value: +{ + "description": "Only after explicitly choosing to edit committed files despite a Canvas draft: pass the draft revision reported by artifact-explore. The draft is preserved and may become outdated. This does not edit or promote it.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +}
- Changed
artifact-explore4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"What to look at. tree = list file paths. search = find text inside files (start here when you do not know which file to change). read = return file contents. history = commits, newest first."New value: +"What to look at. tree = list file paths. search = find text inside files (start here when you do not know which file to change). read = committed file contents. history = commits, newest first. draft = inspect the saved Canvas draft overlay; requires write access. Omit paths to list changed paths, or pass paths and an optional line range to read them. Not a Git revision; unchanged files belong to baseCommitHash." - changed
Input schema / properties / action / enumPrevious value: -[ - "tree", - "read", - "search", - "history" -]New value: +[ + "tree", + "read", + "search", + "history", + "draft" +] - changed
Input schema / properties / paths / descriptionPrevious value: -"read only, REQUIRED for it: up to 10 file paths to return in one call. The whole response shares a size budget: files past it come back with deferred: true. Every file reports startLine, endLine and totalLines, plus truncated: true when what you got is not the whole file — read the rest with an explicit range. A file whose bytes are not text comes back as asset: true with its size, mime and oid instead of content."New value: +"For read (REQUIRED) or draft (optional; omit to list changed paths): up to 10 file paths to return in one call. The whole response shares a size budget: files past it come back with deferred: true. Every file reports startLine, endLine and totalLines, plus truncated: true when what you got is not the whole file — read the rest with an explicit range. A file whose bytes are not text comes back as asset: true with its size instead of content; committed reads also include mime and oid." - changed
Input schema / properties / range / descriptionPrevious value: -"read only, optional: line window as \"startLine,endLine\" (1-based, inclusive), e.g. \"1,120\". Valid only when paths holds exactly one file."New value: +"read or draft, optional: line window as \"startLine,endLine\" (1-based, inclusive), e.g. \"1,120\". Valid only when paths holds exactly one file."
3 tool updates
- Changed
artifact-create1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace.", + "type": "string" +}
- Changed
artifact-create_knowledge1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace.", + "type": "string" +}
- Changed
artifact-duplicate1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Where to create it — an id from workspace-list_workspaces. Optional when you can create in only one workspace; otherwise required, since there is no default workspace.", + "type": "string" +}
2 tool updates
- Changed
workspace-list_artifacts1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Optional. List only this workspace — an id from workspace-list_workspaces. Omit to list every workspace you can access.", + "type": "string" +}
- Added
workspace-list_workspaces
1 tool update
- Changed
artifact-create4 fields changed- changed
Input schema / properties / artifactType / descriptionPrevious value: -"What the artifact IS, which decides how a human sees it. app (the default) = a running web page and needs an index.html among your files. knowledge = a knowledge artifact; behaves exactly like app today. markdown = a readable document and needs at least one .md file and no framework. Sending .md files as an app makes an artifact with nothing to render."New value: +"What the artifact IS, which decides how a human sees it. app (the default) = a running web page and needs an index.html among your files. markdown = a readable document and needs at least one .md file and no framework. Sending .md files as an app makes an artifact with nothing to render. asset = a stored image or video file; it can ONLY be created from a zipUploadId reserved with purpose \"asset\" via artifact-get_zip_upload_url — never from files." - changed
Input schema / properties / artifactType / enumPrevious value: -[ - "app", - "markdown", - "asset", - "knowledge" -]New value: +[ + "app", + "markdown", + "asset" +] - changed
Input schema / properties / files / descriptionPrevious value: -"import only, inline transport: path-to-UTF-8-text map, becomes the first commit. TEXT only, up to roughly 100 KB of source; binaries or larger use zipUploadId via artifact-get_zip_upload_url. Mutually exclusive with zipUploadId. Omit both (with artifactType: knowledge) to seed from Anima's knowledge-base template instead of supplying your own files."New value: +"import only, inline transport: path-to-UTF-8-text map, becomes the first commit. TEXT only, up to roughly 100 KB of source; binaries or larger use zipUploadId via artifact-get_zip_upload_url. Mutually exclusive with zipUploadId." - changed
Input schema / properties / type / descriptionPrevious value: -"Where the code comes from. Anima GENERATES: p2c = text prompt (requires prompt); l2c = website URL (requires url); f2c = Figma frames (requires fileKey + nodesId + X-Figma-Token header). YOU supply: empty = empty git repo you push to (requires framework); import = your code as the first commit (EXACTLY ONE of files or zipUploadId — both optional when artifactType is knowledge, which seeds from Anima's knowledge-base template instead)."New value: +"Where the code comes from. Anima GENERATES: p2c = text prompt (requires prompt); l2c = website URL (requires url); f2c = Figma frames (requires fileKey + nodesId + X-Figma-Token header). YOU supply: empty = empty git repo you push to (requires framework); import = your code as the first commit (EXACTLY ONE of files or zipUploadId)."
1 tool update
- Added
artifact-create_knowledge
26 tool updates
- Added
artifact-create - Added
artifact-delete - Added
artifact-duplicate - Added
artifact-edit - Added
artifact-explore - Added
artifact-get_asset_upload_url - Added
artifact-get_git_token - Added
artifact-get_zip_upload_url - Added
artifact-publish - Added
artifact-status - Added
artifact-unpublish - Added
artifact-update_metadata - Changed
codegen-figma_to_code1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
design_system-get_files1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
design_system-get_manifest1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Removed
playground-create - Removed
playground-get_zip_upload_url - Removed
playground-metadata-update - Removed
playground-publish - Removed
playground-status - Removed
playground-unpublish - Removed
project-get_git_token - Added
review-list - Added
review-reply - Added
review-resolve - Added
workspace-list_artifacts
1 tool update
- Changed
playground-create1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"empty and import only. Defaults to \"Untitled project\". Rename existing playgrounds via playground-metadata-update."New value: +"Display name; applied by empty and import only (default \"Untitled project\"). p2c, l2c and f2c name the playground from the generated content and IGNORE this. Rename any playground afterwards via playground-metadata-update."
1 tool update
- Added
playground-status
2 tool updates
- Changed
playground-create14 fields changed- changed
Input schema / properties / fileKey / descriptionPrevious value: -"[f2c only] Figma file key. Required when type is f2c."New value: +"REQUIRED for f2c only. Figma file key of the design; f2c also requires the X-Figma-Token header." - added
Input schema / properties / filesAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "import only, inline transport: path-to-UTF-8-text map, becomes the first commit. TEXT only, up to roughly 100 KB of source; binaries or larger use zipUploadId via playground-get_zip_upload_url. Mutually exclusive with zipUploadId.", + "propertyNames": { + "maxLength": 512, + "type": "string" + }, + "type": "object" +} - changed
Input schema / properties / framework / descriptionPrevious value: -"Target framework — ONLY html and react are supported; Anima does not generate or host other frameworks (no vue, svelte, angular, etc.). REQUIRED for blank — declare what you are about to push. Optional for generation types (p2c/l2c/f2c), defaulting to html."New value: +"ONLY html and react exist. REQUIRED for empty (declare react if pushing React code). Optional for import (auto-detected from package.json) and for p2c/l2c/f2c (defaults to html)." - changed
Input schema / properties / guidelines / descriptionPrevious value: -"[p2c only] Additional coding guidelines for the generation."New value: +"Optional, p2c only. Guidelines to steer generation (conventions, structure, libraries)." - changed
Input schema / properties / language / descriptionPrevious value: -"Programming language (react framework only). f2c: typescript or javascript. l2c: always typescript. Not used for p2c or html framework."New value: +"typescript or javascript; generation types with framework react only, ignored otherwise. l2c output is always typescript." - changed
Input schema / properties / name / descriptionPrevious value: -"[blank only] Project name shown in Anima. Defaults to \"Untitled project\"."New value: +"empty and import only. Defaults to \"Untitled project\". Rename existing playgrounds via playground-metadata-update." - changed
Input schema / properties / nodesId / descriptionPrevious value: -"[f2c only] Figma node IDs to convert. Required when type is f2c."New value: +"REQUIRED for f2c only. Figma node IDs of the frames to convert." - changed
Input schema / properties / prompt / descriptionPrevious value: -"[p2c only] Text prompt describing the UI to generate. Required when type is p2c."New value: +"REQUIRED for p2c only. Text prompt describing the UI to generate." - changed
Input schema / properties / styling / descriptionPrevious value: -"CSS styling. Valid values per type — p2c: tailwind, css, inline_styles. l2c: tailwind, inline_styles, vanilla_css. f2c: tailwind, plain_css, css_modules, inline_styles."New value: +"CSS strategy; generation types only, not empty or import. p2c: tailwind, css, inline_styles. l2c: tailwind, inline_styles, vanilla_css. f2c: tailwind, plain_css, css_modules, inline_styles." - changed
Input schema / properties / type / descriptionPrevious value: -"Generation type: p2c (prompt), l2c (website URL), f2c (Figma), blank (an EMPTY playground for code you wrote yourself — pair with project-get_git_token to push it)"New value: +"Where the code comes from. Anima GENERATES: p2c = text prompt (requires prompt); l2c = website URL (requires url); f2c = Figma frames (requires fileKey + nodesId + X-Figma-Token header). YOU supply: empty = empty git repo you push to (requires framework); import = your code as the first commit (EXACTLY ONE of files or zipUploadId)." - changed
Input schema / properties / type / enumPrevious value: -[ - "p2c", - "l2c", - "f2c", - "blank" -]New value: +[ + "p2c", + "l2c", + "f2c", + "empty", + "import" +] - changed
Input schema / properties / uiLibrary / descriptionPrevious value: -"UI component library (optional, react framework only). l2c: only shadcn is supported. f2c: mui, antd, shadcn, or clean_react. Not used for p2c."New value: +"Optional UI library; generation types with framework react only. l2c: shadcn only. f2c: mui, antd, shadcn, clean_react. Not for p2c." - changed
Input schema / properties / url / descriptionPrevious value: -"[l2c only] Website URL to convert to code. Required when type is l2c."New value: +"REQUIRED for l2c only. Website URL to convert to code." - added
Input schema / properties / zipUploadIdAdded value: +{ + "description": "import only: id from playground-get_zip_upload_url, used AFTER HTTP PUTting the zip to its uploadUrl; for binaries or over roughly 100 KB of source. Single-use; valid within 30 minutes of the last upload. Mutually exclusive with files.", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" +}
- Added
playground-get_zip_upload_url
1 tool update
- Added
playground-unpublish
1 tool update
- Added
playground-metadata-update
1 tool update
- Changed
playground-create2 fields changed- removed
Input schema / properties / framework / defaultRemoved value: -"react" - changed
Input schema / properties / framework / descriptionPrevious value: -"Target framework. Supported by all types."New value: +"Target framework — ONLY html and react are supported; Anima does not generate or host other frameworks (no vue, svelte, angular, etc.). REQUIRED for blank — declare what you are about to push. Optional for generation types (p2c/l2c/f2c), defaulting to html."
Related MCP Connectors
Give AI coding agents access to your Vynix visual feedback, bug reports, and AI diagnosis.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Figma designs to AI agents, enabling extraction of production-ready code, assets, and design tokens through natural language descriptions. Supports React, Vue, CSS, and Tailwind with real-time design system analysis.83,997 npm40MIT
- FlicenseNot gradedqualityDmaintenanceConnects an AI agent to Figma and Panda CSS for two-way design system sync, component creation, and variable binding.-
- AlicenseNot gradedqualityDmaintenanceConnects Figma designs to React components using your actual component library, enabling AI tools to generate production-ready code with proper imports.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to extract design systems, analyze components, and maintain design-code consistency from Figma files, providing intelligent component analysis and accessibility compliance.44 npm29MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.