Altessa Wedding Planner
Reception layouts to scale, seating charts, wedding day timelines, and budgets. No login needed.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"altessa": {
"url": "https://mcp.altessa.studio/mcp"
}
}
}Remote endpoints
https://mcp.altessa.studio/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢plan_reception_layout(guest_count, room_length_ft, room_width_ft, table_shape, seats_per_table, ...)
Use this when someone wants to plan a wedding reception floor plan, figure out how many tables fit in a room, or check whether a venue space can hold their guest count with a dance floor, bar, buffet, DJ or band, and head table. Needs guest count; room dimensions in feet are optional (if missing, returns the space required instead of a fit check). Do not use for ceremony seating, seating assignments by name (use generate_seating_chart), or venue search.
Input Schema
{
"type": "object",
"properties": {
"guest_count": {
"type": "integer",
"minimum": 10,
"maximum": 600,
"description": "Total guests, including the couple."
},
"room_length_ft": {
"description": "Room length in feet.",
"type": "number",
"minimum": 10,
"maximum": 300
},
"room_width_ft": {
"description": "Room width in feet.",
"type": "number",
"minimum": 10,
"maximum": 300
},
"table_shape": {
"default": "round_60",
"type": "string",
"enum": [
"round_60",
"round_72",
"rectangle_8ft",
"mixed"
]
},
"seats_per_table": {
"description": "Defaults by shape: round_60 8, round_72 10, rectangle_8ft 10, mixed 8.",
"type": "integer",
"minimum": 6,
"maximum": 12
},
"head_table": {
"default": "sweetheart",
"type": "string",
"enum": [
"none",
"sweetheart",
"head_table_8",
"head_table_12"
]
},
"dance_floor": {
"default": true,
"type": "boolean"
},
"entertainment": {
"default": "dj",
"type": "string",
"enum": [
"none",
"dj",
"band"
]
},
"food_service": {
"default": "plated",
"type": "string",
"enum": [
"plated",
"buffet",
"stations"
]
},
"bars": {
"default": 1,
"type": "integer",
"minimum": 0,
"maximum": 3
},
"cake_table": {
"default": true,
"type": "boolean"
}
},
"required": [
"guest_count"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"tables_needed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"seats_needed": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "One seat per guest."
},
"tables_that_fit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Tables placed in the room; fewer than tables_needed when the room is too small."
},
"seats_available": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"square_feet_needed": {
"type": "number"
},
"fits": {
"type": [
"boolean",
"null"
]
},
"slack_square_feet": {
"type": [
"number",
"null"
]
},
"suggested_room_ft": {
"anyOf": [
{
"type": "object",
"properties": {
"length": {
"type": "number"
},
"width": {
"type": "number"
}
},
"required": [
"length",
"width"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"room_ft": {
"type": "object",
"properties": {
"length": {
"type": "number"
},
"width": {
"type": "number"
}
},
"required": [
"length",
"width"
],
"additionalProperties": false,
"description": "The room the positions are drawn in, in feet."
},
"zones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"width_ft": {
"type": "number"
},
"length_ft": {
"type": "number"
},
"x_ft": {
"type": "number"
},
"y_ft": {
"type": "number"
}
},
"required": [
"name",
"width_ft",
"length_ft",
"x_ft",
"y_ft"
],
"additionalProperties": false
},
"description": "Corner positions in feet from the entrance corner; x along the length, y across the width."
},
"tables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"shape": {
"type": "string"
},
"x_ft": {
"type": "number"
},
"y_ft": {
"type": "number"
},
"seats": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"id",
"shape",
"x_ft",
"y_ft",
"seats"
],
"additionalProperties": false
},
"description": "Table center positions in feet, same axes as zones."
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated": {
"description": "True when table positions were dropped to stay under 50 KB.",
"type": "boolean"
},
"share_url": {
"description": "View-only link to this plan.",
"type": "string"
}
},
"required": [
"tables_needed",
"seats_needed",
"tables_that_fit",
"seats_available",
"square_feet_needed",
"fits",
"slack_square_feet",
"suggested_room_ft",
"room_ft",
"zones",
"tables",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢generate_seating_chart(guests, seats_per_table, table_count, keep_together, keep_apart, ...)
Use this when someone has a list of wedding guests and wants them assigned to tables, keeping families, friend groups, or couples together and keeping specific people apart. Accepts names with optional group labels and keep-apart pairs. Returns table assignments and a shareable chart. Do not use for floor plans without names (use plan_reception_layout) or for RSVP tracking.
Input Schema
{
"type": "object",
"properties": {
"guests": {
"minItems": 2,
"maxItems": 600,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"group": {
"description": "Household or group, seated together where possible.",
"type": "string"
},
"plus_one": {
"default": false,
"type": "boolean"
}
},
"required": [
"name"
]
}
},
"seats_per_table": {
"default": 8,
"type": "integer",
"minimum": 4,
"maximum": 14
},
"table_count": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"keep_together": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
},
"keep_apart": {
"description": "Pairs of names to seat at different tables.",
"type": "array",
"items": {
"minItems": 2,
"maxItems": 2,
"type": "array",
"items": {
"type": "string"
}
}
},
"head_table_names": {
"type": "array",
"items": {
"type": "string"
}
},
"fill_strategy": {
"default": "balanced",
"type": "string",
"enum": [
"balanced",
"fill_tables"
]
}
},
"required": [
"guests"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"tables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"label": {
"type": "string"
},
"seats": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"guests": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"number",
"label",
"seats",
"guests"
],
"additionalProperties": false
}
},
"unseated": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"required": [
"name",
"reason"
],
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated": {
"description": "True when names or tables were cut to stay under 50 KB.",
"type": "boolean"
},
"share_url": {
"description": "View-only link to this chart.",
"type": "string"
}
},
"required": [
"tables",
"unseated",
"warnings"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡build_wedding_timeline(ceremony_time, wedding_date, location, first_look, same_venue, ...)
Use this when someone wants a minute-by-minute wedding day schedule: getting ready, first look, ceremony, cocktail hour, reception, send-off. Needs the ceremony start time; everything else has defaults. Do not use for the months-long planning checklist or vendor payment schedules.
Input Schema
{
"type": "object",
"properties": {
"ceremony_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Ceremony start, 24-hour HH:MM."
},
"wedding_date": {
"description": "YYYY-MM-DD, for sunset.",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"location": {
"description": "City and state, for sunset.",
"type": "string",
"maxLength": 120
},
"first_look": {
"default": true,
"type": "boolean"
},
"same_venue": {
"default": true,
"type": "boolean"
},
"travel_minutes": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 120
},
"ceremony_minutes": {
"default": 30,
"type": "integer",
"minimum": 15,
"maximum": 90
},
"cocktail_hour_minutes": {
"default": 60,
"type": "integer",
"minimum": 45,
"maximum": 90
},
"reception_hours": {
"default": 4.5,
"type": "number",
"minimum": 3,
"maximum": 6
},
"hair_and_makeup_people": {
"default": 4,
"type": "integer",
"minimum": 1,
"maximum": 12
},
"photo_priorities": {
"default": [
"couple",
"family",
"wedding_party",
"sunset",
"detail"
],
"type": "array",
"items": {
"type": "string",
"enum": [
"couple",
"family",
"wedding_party",
"sunset",
"detail"
]
}
},
"send_off": {
"default": "none",
"type": "string",
"enum": [
"none",
"sparklers",
"bubbles",
"car"
]
}
},
"required": [
"ceremony_time"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string"
},
"duration_minutes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"title": {
"type": "string"
},
"who": {
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"time",
"duration_minutes",
"title",
"who",
"notes"
],
"additionalProperties": false
}
},
"sunset_time": {
"type": [
"string",
"null"
]
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"share_url": {
"description": "View-only link to this timeline.",
"type": "string"
}
},
"required": [
"events",
"sunset_time",
"warnings"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}⚪estimate_wedding_budget(total_budget_usd, guest_count, region, priorities, style)
Use this when someone gives a total wedding budget, a guest count, or both and wants a category-by-category split (venue, catering, photo and video, flowers, music, attire, stationery, and so on) with per-guest math and a contingency line. Do not use for tracking actual spending or vendor payments.
Input Schema
{
"type": "object",
"properties": {
"total_budget_usd": {
"type": "integer",
"minimum": 2000,
"maximum": 500000
},
"guest_count": {
"type": "integer",
"minimum": 10,
"maximum": 600
},
"region": {
"default": "national",
"type": "string",
"enum": [
"northeast",
"southeast",
"midwest",
"southwest",
"west",
"mountain",
"national"
]
},
"priorities": {
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"venue",
"food",
"photo_video",
"flowers",
"music",
"attire",
"stationery",
"planner"
]
}
},
"style": {
"default": "classic",
"type": "string",
"enum": [
"classic",
"modern",
"rustic",
"destination"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"total_budget_usd": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"guest_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"per_guest_usd": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"percent": {
"type": "number"
},
"amount_usd": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"note": {
"type": "string"
}
},
"required": [
"name",
"percent",
"amount_usd",
"note"
],
"additionalProperties": false
}
},
"contingency_usd": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"share_url": {
"description": "View-only link to this budget.",
"type": "string"
}
},
"required": [
"total_budget_usd",
"guest_count",
"per_guest_usd",
"categories",
"contingency_usd",
"assumptions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence