Projects and Tags
Tools for organizing gallery images into projects and labelling them with tags.
Overview
An image is in at most one project and carries up to 20 tags. Names match loosely: "Brand Refresh", "brand_refresh" and "BRAND-REFRESH" are the same project, whose key is brand-refresh. A renamed or merged project still answers to its old names. The name none is reserved: it means no project.
Key features:
- File new images in a project as you make them, or let the folder you work in choose it
- Move images between projects and add or remove tags in bulk
- Filter
search_imagesby project and tags
Filing new images
Every tool that makes images takes two optional parameters: generate_image, start_generation, generate_poster, batch_generate, edit_image, continue_editing, edit_uploaded_image, upload_image_for_editing, generate_with_character, generate_with_multiple_characters, generate_with_product and generate_with_subscription.
| Parameter | Type | Required | Description |
|---|---|---|---|
project | string | No | Project to file the new images under (at most 100 characters). Pass it only when the user names a project, then keep passing the same name. "none" keeps the images out of every project |
tags | string[] | No | Tags to add to the new images (up to 10, each at most 50 characters), only when the user asks for them |
A new image's project is, in order:
- the
projectyou pass - for an edit, the project of the image it edits
- the folder you work in, which needs the local connector (the
gobananas-mcpSTDIO proxy, 1.4.0 or later); remote HTTP connections send no folder - none
Tags are only the ones you pass: an edit does not copy its original's tags.
The tools that reply with their images say where the images went: a Project: Brand Refresh line, or a project field in JSON replies. start_generation and get_generation_status do not report a project; call get_image_info on a job's images to see theirs. If the project or tags could not be applied, the images are still saved and the reply (or the job's warnings) carries a warning. A name that cannot be used (empty, ---, over 100 characters, or a tag over 50) is refused as invalid params before anything is generated.
Example
{
"tool": "generate_image",
"params": {
"prompt": "spring hero banner, pastel colors",
"project": "Brand Refresh",
"tags": ["hero"]
}
}list_projects
List the workspace's projects, most recently used first, with image counts; how many images have no project; and the most used tags. Use it to reuse an existing project name instead of creating a near duplicate.
Parameters
None.
Example
{
"tool": "list_projects",
"params": {}
}Response
At most 50 projects and 20 tags:
{
"projects": [
{
"id": 3,
"name": "Brand Refresh",
"key": "brand-refresh",
"imageCount": 24,
"lastImageAt": "2026-10-10 14:32:00"
}
],
"unassignedCount": 118,
"tags": [
{ "id": 7, "name": "hero", "key": "hero", "imageCount": 12 },
{ "id": 9, "name": "draft", "key": "draft", "imageCount": 5 }
]
}lastImageAt is when an image was last filed in the project (UTC).
organize_images
Move images to a project, take them out of their project, and add or remove tags, for up to 100 images at once.
Parameters
Give at least one of project, add_tags or remove_tags.
| Parameter | Type | Required | Description |
|---|---|---|---|
image_ids | number[] | Yes | IDs of the images to organize (1–100) |
project | string | No | Project to move the images to, by name; a new name creates it. "none" takes the images out of their project |
add_tags | string[] | No | Tags to add (up to 10) |
remove_tags | string[] | No | Tags to remove (up to 10) |
Tags are removed before they are added, so an image with 20 tags can swap one. An image that already has 20 tags gets none of the new ones.
Example: move images and tag them
{
"tool": "organize_images",
"params": {
"image_ids": [342, 343, 351],
"project": "Brand Refresh",
"add_tags": ["hero"]
}
}Example: take an image out of its project
{
"tool": "organize_images",
"params": {
"image_ids": [351],
"project": "none",
"remove_tags": ["draft"]
}
}Response
{
"updated": [342, 343],
"notFound": [351],
"project": { "id": 3, "name": "Brand Refresh", "key": "brand-refresh" },
"addedTags": [{ "name": "hero", "key": "hero" }]
}notFound lists the ids that are not in your workspace; they are left alone. project is null when the images were taken out of their project or no project was given.
OAuth
Needs images:edit. A signed-in user also needs an owner or manager role in the workspace; viewers can use list_projects (images:read) but not organize_images.
Finding images by project
search_images filters by project (a name or key, or none for images without a project) and tags (an image must have every one), and each result shows its project and tags:
Found 24 images (showing 3). Use get_image_info on any ID for details.
#351 (Brand Refresh · hero, draft)
#343 (Brand Refresh · hero)
#342 (Brand Refresh)get_image_info returns the image's project and tags too.
The same operations are available over REST: see Projects and Tags.
Next Steps
- Generation Tools - Create and search images
- All MCP Tools - Every tool by category