Vision boards
Boards, items, stickers, groups, connections, reactions, comments, budget, and collaborators.
Boards
list_vision_boards
{ "includeArchived": false }Pass "onlyArchived": true to list only archived boards.
get_vision_board
Returns the full board payload — metadata, items (with their groupId), groups, connections, and your role. Item data shapes vary by type; see add_vision_board_item below.
{ "id": "vb_..." }create_vision_board
{
"name": "Italy summer 2026",
"description": "Amalfi + Sicily scouting",
"destination": "Italy"
}update_vision_board
Metadata only (name, description, destination, currency). Pass null to clear description or destination.
{
"id": "vb_...",
"name": "Italy & Sicily 2026",
"currency": "EUR"
}archive_vision_board
Hides the board from default listings; items preserved, reversible.
{ "id": "vb_..." }unarchive_vision_board
{ "id": "vb_..." }Hard-deleting a board is intentionally not exposed via MCP — use
archive_vision_board instead. Permanent deletion is owner-only and only
available in the web UI.
materialize_vision_board
Converts a board into a real trip. Per-type mapping:
cardwithkind: "activity"→ bucket-list itemcardwithkind: "note"→ trip notelocation→ bucket-list itemhotel→ hotel bookingflight→ flight bookingavailability→ skipped (board-only)
Pass item ids, group ids, or both — groups expand to their members and are unioned with includedItemIds.
{
"boardId": "vb_...",
"tripName": "Italy 2026",
"destination": "Rome",
"partySize": 2,
"startDate": "2026-06-15T00:00:00Z",
"endDate": "2026-06-29T00:00:00Z",
"includedItemIds": ["vbi_..."],
"includedGroupIds": ["vbg_..."]
}Items
type must be one of: card, location, hotel, flight, availability. For image stickers (including Giphy GIFs) use add_vision_board_sticker — it handles fetching and re-hosting.
Canvas coordinates x / y should stay in the 0–2000 range; space items ~250 apart to avoid overlap. Any item can carry an estimatedCost (integer cents in the board's currency) that contributes to get_vision_board_budget.
add_vision_board_item — card
{
"boardId": "vb_...",
"type": "card",
"x": 200,
"y": 100,
"data": {
"title": "Explore Trastevere",
"kind": "activity",
"notes": "Pick a walking route",
"estimatedCost": 0
}
}Use kind: "note" for free-form text; kind: "activity" for things to do (materializes into bucket list).
add_vision_board_item — location
{
"boardId": "vb_...",
"type": "location",
"x": 500,
"y": 100,
"data": {
"name": "Piazza Navona",
"address": "00186 Roma RM, Italy",
"placeId": "ChIJi6C1MxFhLxMRgbP8nQx5-Zo",
"lat": "41.8992",
"lng": "12.4731"
}
}Use resolve_place_from_id first to hydrate placeId, lat, lng, photoUrl, photoAttribution from a Google place id.
add_vision_board_item — hotel
{
"boardId": "vb_...",
"type": "hotel",
"x": 800,
"y": 100,
"data": {
"name": "Hotel de Russie",
"address": "Via del Babuino 9, Rome",
"checkIn": "2026-06-16",
"checkOut": "2026-06-20",
"priceRange": "$$$$",
"bookingUrl": "https://..."
}
}add_vision_board_item — flight
{
"boardId": "vb_...",
"type": "flight",
"x": 1100,
"y": 100,
"data": {
"origin": "SFO",
"destination": "FCO",
"date": "2026-06-15",
"airline": "United"
}
}add_vision_board_item — availability
One per board — a shared coordination card. entries is keyed by userId (from get_vision_board_collaborators); each value is an array of { start, end, notes? } ranges. Start with an empty object and add ranges via update_vision_board_item.
{
"boardId": "vb_...",
"type": "availability",
"x": 1400,
"y": 100,
"data": {
"duration": "1 week",
"timeOfYear": "June",
"entries": {}
}
}update_vision_board_item
data is a full replacement — read current data via get_vision_board first.
{ "itemId": "vbi_...", "x": 240, "y": 120 }delete_vision_board_item
{ "itemId": "vbi_..." }Stickers
search_giphy_stickers
{ "query": "airplane", "limit": 12, "rating": "pg" }add_vision_board_sticker
Accepts any https URL. *.giphy.com URLs are served directly; other hosts are re-hosted to yumo's CDN. Content-Type must be an image format (PNG / JPEG / WebP / GIF / HEIC); max 16 MB.
{
"boardId": "vb_...",
"url": "https://media.giphy.com/media/.../giphy.gif",
"x": 50,
"y": 50
}Groups
create_vision_board_group
Requires at least 2 item ids. Existing group memberships are replaced (single-group invariant).
{
"boardId": "vb_...",
"itemIds": ["vbi_...", "vbi_..."],
"name": "Amalfi",
"color": "#5b50c8",
"icon": "🏖️"
}update_vision_board_group
{ "boardId": "vb_...", "groupId": "vbg_...", "name": "Amalfi coast" }delete_vision_board_group
Items are unparented, not deleted.
{ "boardId": "vb_...", "groupId": "vbg_..." }set_group_membership
Declarative bulk assign. Replaces the full list — pass [] to clear.
{
"boardId": "vb_...",
"groupId": "vbg_...",
"itemIds": ["vbi_...", "vbi_..."]
}auto_layout_group
Tiles the group's items into a grid anchored at the group's current top-left. Defaults: spacing 16, columns ≈ ceil(sqrt(itemCount)).
{ "boardId": "vb_...", "groupId": "vbg_..." }Connections
add_vision_board_connection
{
"boardId": "vb_...",
"fromItemId": "vbi_...",
"toItemId": "vbi_..."
}delete_vision_board_connection
Connection id comes from board.connections in get_vision_board.
{ "boardId": "vb_...", "connectionId": "vbc_..." }Reactions
react_to_vision_board_item
Toggles a single emoji reaction as the authenticated user. Re-calling with the same emoji removes your reaction. Allowed emojis: heart, eyes, ban, thumbs_up, fire, question.
{ "itemId": "vbi_...", "emoji": "heart" }list_vision_board_item_reactions
Full list of reactions on an item with user info. For aggregate counts, read items[].reactions from get_vision_board instead.
{ "itemId": "vbi_..." }Comments
add_vision_board_item_comment
Adds a comment to an item. When posted via MCP it's always tagged authorKind: "agent" so collaborators see an "Assistant" chip. Body up to 4000 chars.
{
"itemId": "vbi_...",
"body": "This one's a short walk from the flight hotel."
}list_vision_board_item_comments
Chronological order; soft-deleted comments are returned with body: null and deletedAt set.
{ "itemId": "vbi_..." }Budget
get_vision_board_budget
Aggregated totals in the board's currency, grouped by group id. ungrouped captures costed items not in any group.
{ "boardId": "vb_..." }Places
resolve_place_from_id
Fetches Google Places details for a place_id and returns normalized fields ready for a location or hotel item: { placeId, name, address, lat, lng, photoUrl, photoAttribution }. The photo is re-hosted to yumo's CDN.
{ "placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4" }Collaborators
get_vision_board_collaborators
{ "boardId": "vb_..." }invite_vision_board_collaborator
{
"boardId": "vb_...",
"email": "[email protected]",
"role": "editor"
}remove_vision_board_collaborator
{ "boardId": "vb_...", "collaboratorId": "usr_..." }Need help or found a bug?
Join the yumo community on Discord. We answer questions, take feature requests, and triage bug reports there.
Join the Discord