Koskamo

Altessa Wedding Planner MCP

An MCP server that enables AI assistants to generate wedding reception layouts, seating charts, day-of timelines, and budget splits based on user inputs like guest count and room dimensions.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Altessa Wedding Planner MCP logo, by AltessaVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Altessa
MCP endpoint (Streamable HTTP)
https://mcp.altessa.studio/mcp
Vendor documentation

What you can do with it

  • Generate reception floor plans with specific table shapes and amenities
  • Create seating charts that keep groups together and separate others
  • Build wedding day timelines from ceremony start times
  • Split wedding budgets across vendors and categories

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
altessa 1.0.1
MCP protocol
2025-06-18
Tools
4 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Altessa plans wedding receptions. Four tools: plan_reception_layout (room fit, tables, dance floor, bar), generate_seating_chart (assign named guests to tables with keep-together and keep-apart rules), build_wedding_timeline (minute-by-minute wedding day schedule from a ceremony time), estimate_wedding_budget (category split from a total or guest count). Ask at most one clarifying question before calling a tool; use defaults otherwise. Each result includes a view-only link the user can open to keep editing. Do not describe plans, pricing, or purchases. Units are feet and US dollars.

Tools

4 advertised

plan_reception_layout — Reception layout planner
Advertised by the server during the last successful anonymous check.

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.

plan_reception_layout input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "guest_count"
  ],
  "properties": {
    "bars": {
      "type": "integer",
      "default": 1,
      "maximum": 3,
      "minimum": 0
    },
    "cake_table": {
      "type": "boolean",
      "default": true
    },
    "head_table": {
      "enum": [
        "none",
        "sweetheart",
        "head_table_8",
        "head_table_12"
      ],
      "type": "string",
      "default": "sweetheart"
    },
    "dance_floor": {
      "type": "boolean",
      "default": true
    },
    "guest_count": {
      "type": "integer",
      "maximum": 600,
      "minimum": 10,
      "description": "Total guests, including the couple."
    },
    "table_shape": {
      "enum": [
        "round_60",
        "round_72",
        "rectangle_8ft",
        "mixed"
      ],
      "type": "string",
      "default": "round_60"
    },
    "food_service": {
      "enum": [
        "plated",
        "buffet",
        "stations"
      ],
      "type": "string",
      "default": "plated"
    },
    "entertainment": {
      "enum": [
        "none",
        "dj",
        "band"
      ],
      "type": "string",
      "default": "dj"
    },
    "room_width_ft": {
      "type": "number",
      "maximum": 300,
      "minimum": 10,
      "description": "Room width in feet."
    },
    "room_length_ft": {
      "type": "number",
      "maximum": 300,
      "minimum": 10,
      "description": "Room length in feet."
    },
    "seats_per_table": {
      "type": "integer",
      "maximum": 12,
      "minimum": 6,
      "description": "Defaults by shape: round_60 8, round_72 10, rectangle_8ft 10, mixed 8."
    }
  }
}
plan_reception_layout output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "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"
  ],
  "properties": {
    "fits": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "zones": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "width_ft",
          "length_ft",
          "x_ft",
          "y_ft"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "x_ft": {
            "type": "number"
          },
          "y_ft": {
            "type": "number"
          },
          "width_ft": {
            "type": "number"
          },
          "length_ft": {
            "type": "number"
          }
        },
        "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",
        "required": [
          "id",
          "shape",
          "x_ft",
          "y_ft",
          "seats"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "x_ft": {
            "type": "number"
          },
          "y_ft": {
            "type": "number"
          },
          "seats": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "shape": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "description": "Table center positions in feet, same axes as zones."
    },
    "room_ft": {
      "type": "object",
      "required": [
        "length",
        "width"
      ],
      "properties": {
        "width": {
          "type": "number"
        },
        "length": {
          "type": "number"
        }
      },
      "description": "The room the positions are drawn in, in feet.",
      "additionalProperties": false
    },
    "share_url": {
      "type": "string",
      "description": "View-only link to this plan."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when table positions were dropped to stay under 50 KB."
    },
    "seats_needed": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "One seat per guest."
    },
    "tables_needed": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "seats_available": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "tables_that_fit": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Tables placed in the room; fewer than tables_needed when the room is too small."
    },
    "slack_square_feet": {
      "type": [
        "number",
        "null"
      ]
    },
    "suggested_room_ft": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "length",
            "width"
          ],
          "properties": {
            "width": {
              "type": "number"
            },
            "length": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "square_feet_needed": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
plan_reception_layout annotations
{
  "title": "Reception layout planner",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_seating_chart — Seating chart generator
Advertised by the server during the last successful anonymous check.

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.

generate_seating_chart input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "guests"
  ],
  "properties": {
    "guests": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1
          },
          "group": {
            "type": "string",
            "description": "Household or group, seated together where possible."
          },
          "plus_one": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "maxItems": 600,
      "minItems": 2
    },
    "keep_apart": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "maxItems": 2,
        "minItems": 2
      },
      "description": "Pairs of names to seat at different tables."
    },
    "table_count": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1
    },
    "fill_strategy": {
      "enum": [
        "balanced",
        "fill_tables"
      ],
      "type": "string",
      "default": "balanced"
    },
    "keep_together": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "seats_per_table": {
      "type": "integer",
      "default": 8,
      "maximum": 14,
      "minimum": 4
    },
    "head_table_names": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
generate_seating_chart output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "tables",
    "unseated",
    "warnings"
  ],
  "properties": {
    "tables": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "number",
          "label",
          "seats",
          "guests"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "seats": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "guests": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "number": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "unseated": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "reason"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "share_url": {
      "type": "string",
      "description": "View-only link to this chart."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when names or tables were cut to stay under 50 KB."
    }
  },
  "additionalProperties": false
}
generate_seating_chart annotations
{
  "title": "Seating chart generator",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
build_wedding_timeline — Wedding day timeline builder
Advertised by the server during the last successful anonymous check.

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.

build_wedding_timeline input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "ceremony_time"
  ],
  "properties": {
    "location": {
      "type": "string",
      "maxLength": 120,
      "description": "City and state, for sunset."
    },
    "send_off": {
      "enum": [
        "none",
        "sparklers",
        "bubbles",
        "car"
      ],
      "type": "string",
      "default": "none"
    },
    "first_look": {
      "type": "boolean",
      "default": true
    },
    "same_venue": {
      "type": "boolean",
      "default": true
    },
    "wedding_date": {
      "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])))$",
      "description": "YYYY-MM-DD, for sunset."
    },
    "ceremony_time": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Ceremony start, 24-hour HH:MM."
    },
    "travel_minutes": {
      "type": "integer",
      "default": 0,
      "maximum": 120,
      "minimum": 0
    },
    "reception_hours": {
      "type": "number",
      "default": 4.5,
      "maximum": 6,
      "minimum": 3
    },
    "ceremony_minutes": {
      "type": "integer",
      "default": 30,
      "maximum": 90,
      "minimum": 15
    },
    "photo_priorities": {
      "type": "array",
      "items": {
        "enum": [
          "couple",
          "family",
          "wedding_party",
          "sunset",
          "detail"
        ],
        "type": "string"
      },
      "default": [
        "couple",
        "family",
        "wedding_party",
        "sunset",
        "detail"
      ]
    },
    "cocktail_hour_minutes": {
      "type": "integer",
      "default": 60,
      "maximum": 90,
      "minimum": 45
    },
    "hair_and_makeup_people": {
      "type": "integer",
      "default": 4,
      "maximum": 12,
      "minimum": 1
    }
  }
}
build_wedding_timeline output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "events",
    "sunset_time",
    "warnings"
  ],
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "time",
          "duration_minutes",
          "title",
          "who",
          "notes"
        ],
        "properties": {
          "who": {
            "type": "string"
          },
          "time": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "duration_minutes": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "share_url": {
      "type": "string",
      "description": "View-only link to this timeline."
    },
    "sunset_time": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
build_wedding_timeline annotations
{
  "title": "Wedding day timeline builder",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
estimate_wedding_budget — Wedding budget breakdown
Advertised by the server during the last successful anonymous check.

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.

estimate_wedding_budget input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "style": {
      "enum": [
        "classic",
        "modern",
        "rustic",
        "destination"
      ],
      "type": "string",
      "default": "classic"
    },
    "region": {
      "enum": [
        "northeast",
        "southeast",
        "midwest",
        "southwest",
        "west",
        "mountain",
        "national"
      ],
      "type": "string",
      "default": "national"
    },
    "priorities": {
      "type": "array",
      "items": {
        "enum": [
          "venue",
          "food",
          "photo_video",
          "flowers",
          "music",
          "attire",
          "stationery",
          "planner"
        ],
        "type": "string"
      },
      "maxItems": 3
    },
    "guest_count": {
      "type": "integer",
      "maximum": 600,
      "minimum": 10
    },
    "total_budget_usd": {
      "type": "integer",
      "maximum": 500000,
      "minimum": 2000
    }
  }
}
estimate_wedding_budget output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "total_budget_usd",
    "guest_count",
    "per_guest_usd",
    "categories",
    "contingency_usd",
    "assumptions"
  ],
  "properties": {
    "share_url": {
      "type": "string",
      "description": "View-only link to this budget."
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "percent",
          "amount_usd",
          "note"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "percent": {
            "type": "number"
          },
          "amount_usd": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "assumptions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "guest_count": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "per_guest_usd": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "contingency_usd": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "total_budget_usd": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  },
  "additionalProperties": false
}
estimate_wedding_budget annotations
{
  "title": "Wedding budget breakdown",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

Reception layout

Advertised by the server during the last successful anonymous check.

A drawing of the reception floor plan from plan_reception_layout.

Reception layout URI
ui://altessa/layout-v1.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2032 ms
95th percentile latency
2032 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2032 ms · metadata changed · 4 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http altessa-wedding-planner-mcp https://mcp.altessa.studio/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add altessa-wedding-planner-mcp --url https://mcp.altessa.studio/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable altessa-wedding-planner-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "altessa-wedding-planner-mcp": {
      "url": "https://mcp.altessa.studio/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "altessa-wedding-planner-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.altessa.studio/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start altessa-wedding-planner-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "altessa-wedding-planner-mcp": {
      "type": "http",
      "url": "https://mcp.altessa.studio/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http altessa-wedding-planner-mcp https://mcp.altessa.studio/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "altessa-wedding-planner-mcp": {
      "url": "https://mcp.altessa.studio/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "altessa-wedding-planner-mcp": {
      "serverUrl": "https://mcp.altessa.studio/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Altessa Wedding Planner MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Altessa Wedding Planner MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing