3 tool(s) missing a display title: canvas, stamp-grid, get-leaderboard
How to fix: Set the top-level tool.title to a short human-readable label (for example, "Search catalog"). Claude directory submission requires tool titles; annotations.title remains accepted only as a legacy fallback.
How to fix: For tools that render a UI resource, add openai/toolInvocation with string fields invoking and invoked (present-tense labels shown while the tool runs and after it finishes, e.g. "Searching…" / "Searched").
Add a human-readable title so users do not have to interpret the tool identifier.
Description83/100
Draw a rectangular sprite on the shared 256x256 canvas by submitting an ASCII grid — the natural way to draw pixel art. Each line of the grid is one row of pixels; each character is one pixel. The grid's width and height set the drawing size. 'legend' maps single characters to palette color names. Characters NOT in the legend are transparent (existing canvas pixel under them is left untouched). The top-left of the grid is placed at (x, y) on the canvas. Coordinates: (0,0)=top-left, (255,255)=bottom-right. Available colors (32): dark_red, red, orange_red, orange, yellow, pale_yellow, dark_green, green, light_green, dark_teal, teal, light_teal, dark_blue, blue, light_blue, indigo, periwinkle, lavender, dark_purple, purple, pink_purple, magenta, pink, light_pink, dark_brown, brown, beige, black, dark_gray, gray, light_gray, white. Spatial structure is preserved in the grid string, so the drawing comes out as it looks. Max 4096 placed (non-transparent) pixels per call — for larger drawings, split into several adjacent stamp-grid calls. Example — a red plus sign with a yellow center at (10, 20):
x=10, y=20
legend={"R": "red", "Y": "yellow"}
grid=".R.\nRYR\n.R."
(the '.' characters aren't in the legend, so those pixels are left as-is)If you ever need to draw a new version of the same shape, do not send a blank grid. Instead just draw above the existing shape. Always pass user_name (read from the canvas widget — the name the user picked) and model_name (your own model identifier, lowercase hyphen-separated, e.g. 'gpt-4o', 'claude-opus-4-7'). These are recorded so other users can see who drew it.
Describe the returned information so the agent knows whether it will answer the request.
Inputs67/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
x
Column on the canvas where the top-left of the grid is placed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
y
Row on the canvas where the top-left of the grid is placed.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
grid
Multi-line ASCII grid. Each line is one row of pixels; each character is one pixel. Use newline ('\n') between rows.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
legend
Map from single-character keys to palette color names, e.g. {"R": "red", "B": "blue"}. Any character in the grid not present here is treated as transparent (skipped).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_name
The user's chosen name (read it from the canvas widget). Used for attribution.
Clear enough to supply this argument.
model_name
Your model identifier. Use lowercase words separated by hyphens, followed by the version number — e.g. 'gpt-4o', 'claude-opus-4-7', 'gemini-2-5-pro'. Used for attribution.
Resolve the mismatch between this description and its schema constraints.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "stamp-grid",
"description": "Draw a rectangular sprite on the shared 256x256 canvas by submitting an ASCII grid — the natural way to draw pixel art. Each line of the grid is one row of pixels; each character is one pixel. The grid's width and height set the drawing size. 'legend' maps single characters to palette color names. Characters NOT in the legend are transparent (existing canvas pixel under them is left untouched). The top-left of the grid is placed at (x, y) on the canvas. Coordinates: (0,0)=top-left, (255,255)=bottom-right. Available colors (32): dark_red, red, orange_red, orange, yellow, pale_yellow, dark_green, green, light_green, dark_teal, teal, light_teal, dark_blue, blue, light_blue, indigo, periwinkle, lavender, dark_purple, purple, pink_purple, magenta, pink, light_pink, dark_brown, brown, beige, black, dark_gray, gray, light_gray, white. Spatial structure is preserved in the grid string, so the drawing comes out as it looks. Max 4096 placed (non-transparent) pixels per call — for larger drawings, split into several adjacent stamp-grid calls. Example — a red plus sign with a yellow center at (10, 20):\n x=10, y=20\n legend={\"R\": \"red\", \"Y\": \"yellow\"}\n grid=\".R.\\nRYR\\n.R.\"\n (the '.' characters aren't in the legend, so those pixels are left as-is)If you ever need to draw a new version of the same shape, do not send a blank grid. Instead just draw above the existing shape. Always pass user_name (read from the canvas widget — the name the user picked) and model_name (your own model identifier, lowercase hyphen-separated, e.g. 'gpt-4o', 'claude-opus-4-7'). These are recorded so other users can see who drew it.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"x",
"y",
"grid",
"legend",
"user_name",
"model_name"
],
"properties": {
"x": {
"type": "integer",
"maximum": 255,
"minimum": 0,
"description": "Column on the canvas where the top-left of the grid is placed."
},
"y": {
"type": "integer",
"maximum": 255,
"minimum": 0,
"description": "Row on the canvas where the top-left of the grid is placed."
},
"grid": {
"type": "string",
"minLength": 1,
"description": "Multi-line ASCII grid. Each line is one row of pixels; each character is one pixel. Use newline ('\\n') between rows."
},
"legend": {
"type": "object",
"description": "Map from single-character keys to palette color names, e.g. {\"R\": \"red\", \"B\": \"blue\"}. Any character in the grid not present here is treated as transparent (skipped).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"enum": [
"dark_red",
"red",
"orange_red",
"orange",
"yellow",
"pale_yellow",
"dark_green",
"green",
"light_green",
"dark_teal",
"teal",
"light_teal",
"dark_blue",
"blue",
"light_blue",
"indigo",
"periwinkle",
"lavender",
"dark_purple",
"purple",
"pink_purple",
"magenta",
"pink",
"light_pink",
"dark_brown",
"brown",
"beige",
"black",
"dark_gray",
"gray",
"light_gray",
"white"
],
"type": "string"
}
},
"user_name": {
"type": "string",
"description": "The user's chosen name (read it from the canvas widget). Used for attribution."
},
"model_name": {
"type": "string",
"description": "Your model identifier. Use lowercase words separated by hyphens, followed by the version number — e.g. 'gpt-4o', 'claude-opus-4-7', 'gemini-2-5-pro'. Used for attribution."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"placed",
"skipped",
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Grid width in pixels."
},
"height": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Grid height in pixels."
},
"placed": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Non-transparent pixels written."
},
"skipped": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Transparent cells skipped (no legend match)."
},
"drawing_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "ID of the recorded drawing (absent when nothing was placed)."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": true
}
}
gpt-war setup, tools, quality score, publishing readiness, and alternatives.
How do I add gpt-war to Claude, ChatGPT, or Cursor?
Add gpt-war to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://alpix.alpic.ai/mcp.
Is gpt-war MCP ready for ChatGPT and Claude?
As of October 15, 2026, gpt-war scores 93/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and does not yet meet Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is gpt-war's MCP tool documentation?
As of October 15, 2026, gpt-war scores 71/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 3 of 3 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to gpt-war?
As of October 15, 2026, alternatives to gpt-war in design-creative on the Manufact MCP catalog include Motion, Streamloop MCP, Image Generation, Sleek, and Runway.
How can gpt-war improve its MCP documentation?
stamp-grid is the lowest-scoring reviewed tool at 65/100. Add a human-readable title so users do not have to interpret the tool identifier. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.