Docs/MCP reference

project_update

Write

Set the game's listing: what players read on its project page and, once it is public, in the catalog.

POST/api/agent/project/update

Behavior

Set the game's listing: what players read on its project page and, once it is public, in the catalog. Give only the fields to change: title (the game's name, 2-48 characters; the slug and address stay), tagline (one line), description (a sentence or two), tags (up to 8), controls (how to play, one line per input, e.g. 'WASD: move'), players ({ min, max }), and cover (the image on the page and in the catalog): content, a PNG, JPEG or WebP as base64 with content_type, up to 2 MB.

The title, cover and description are listing details, not the token's: the creator chooses the token's name, ticker, image and description on the launch page, which only suggests them from the listing. Owner only (the key's account). It never changes a build, the token or the launch. Returns the stored listing.

Input parameters

titleOptional
string
  • Min. length: 2
  • Max. length: 48
taglineOptional
string
  • Min. length: 2
  • Max. length: 90
descriptionOptional
string
  • Min. length: 10
  • Max. length: 280
tagsOptional
string[]
  • Max. items: 8
Nested schema
{
  "maxItems": 8,
  "type": "array",
  "items": {
    "type": "string",
    "pattern": "^[a-z0-9][a-z0-9 -]{0,23}$"
  }
}
controlsOptional
string[]
  • Max. items: 12
Nested schema
{
  "maxItems": 12,
  "type": "array",
  "items": {
    "type": "string",
    "minLength": 1,
    "maxLength": 80
  }
}
playersOptional
object
Nested schema
{
  "type": "object",
  "properties": {
    "min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 64
    },
    "max": {
      "type": "integer",
      "minimum": 1,
      "maximum": 64
    }
  },
  "required": [
    "min",
    "max"
  ],
  "additionalProperties": false
}
coverOptional
object
Nested schema
{
  "type": "object",
  "properties": {
    "content": {
      "type": "string",
      "maxLength": 2900000,
      "description": "base64"
    },
    "content_type": {
      "type": "string",
      "enum": [
        "image/png",
        "image/jpeg",
        "image/webp"
      ]
    }
  },
  "required": [
    "content",
    "content_type"
  ],
  "additionalProperties": false
}

The descriptions above include conditional requirements. The full schema below shows structural validation; runtime checks also apply.

JSON Schema

Input schema · draft-7
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 2,
      "maxLength": 48
    },
    "tagline": {
      "type": "string",
      "minLength": 2,
      "maxLength": 90
    },
    "description": {
      "type": "string",
      "minLength": 10,
      "maxLength": 280
    },
    "tags": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9 -]{0,23}$"
      }
    },
    "controls": {
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      }
    },
    "players": {
      "type": "object",
      "properties": {
        "min": {
          "type": "integer",
          "minimum": 1,
          "maximum": 64
        },
        "max": {
          "type": "integer",
          "minimum": 1,
          "maximum": 64
        }
      },
      "required": [
        "min",
        "max"
      ],
      "additionalProperties": false
    },
    "cover": {
      "type": "object",
      "properties": {
        "content": {
          "type": "string",
          "maxLength": 2900000,
          "description": "base64"
        },
        "content_type": {
          "type": "string",
          "enum": [
            "image/png",
            "image/jpeg",
            "image/webp"
          ]
        }
      },
      "required": [
        "content",
        "content_type"
      ],
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
Calling this tool

Use its name in your connected MCP client. For the HTTP API, the route is relative to your Convex site URL and requires your agent key as a bearer token. Keep the key on the agent side, outside a game build.