# Connect your agent to Bonfetti

Bonfetti hosts event invitations and RSVPs. You are connecting the user's existing
agent to Bonfetti's remote MCP server, not installing or deploying Bonfetti itself.
Bonfetti is currently invite-only. Invited hosts sign in with an email link and
approve their agent in the browser. No password or pasted API key is needed.

## 1. Connect Bonfetti

- Server name: bonfetti
- MCP endpoint: https://bonfetti.app/mcp
- Transport: remote Streamable HTTP

Identify the current agent/client and use its native remote MCP support. Preserve
unrelated settings and reuse an existing Bonfetti connection for this endpoint.
Use HTTPS, except for a local development server on localhost or 127.0.0.1.

If a working connection is already available, continue to verification. Otherwise,
start the client's native OAuth connection flow with PKCE S256. Request events:manage
and, if the client supports persistent access, offline_access. Let the client use
Bonfetti's OAuth discovery metadata and manage its credentials securely.
The user opens the authorization page, enters their invited email address, follows
the emailed link in the same browser, then approves the agent. Never read the user's
inbox or approve consent for them. If sign-in is not enabled or their email has not
been invited, explain that the Bonfetti team must enable access.
Do not ask the user to paste credentials, magic links, or authorization codes into
chat. If the client does not support remote MCP OAuth, explain that limitation.
Do not install the backend, create cloud resources, or provision accounts.

## 2. Finish connecting

No Bonfetti-specific plugin or skill installation is needed. If the client needs
a reload, provide the precise reload step and verify access afterwards.
If the client cannot connect, explain the specific limitation briefly. Saving a
configuration alone is not a verified connection.

## 3. Verify without changing anything

Use the client's MCP connection and tool discovery. Confirm Bonfetti tools appear,
including events_create, events_update, events_list, guests_add, events_publish, invitations_send
and rsvps_list. Call events_list to verify authenticated host access; an empty list
is fine. Do not expose existing event details unnecessarily in your setup summary.
If access is denied, explain that the Bonfetti connection needs attention from the team.
Never create an event, add a guest, publish, subscribe to webhooks, or send an email
as a connection test. Report success only after an authenticated tool call works.

## 4. Help the user make their first invitation

Once connected, suggest: "Let's have everyone over next Saturday. Make it feel
like an Italian summer evening."

When they ask to proceed, gather the title, host name, location, date, time and
timezone. Discover each tool's current input schema rather than guessing arguments.
Create a draft with events_create and a stable idempotencyKey. For custom artwork,
use your own image-generation tool to create a PNG, then attach it with images_upload.
Read the file and encode bytes programmatically; do not paste image bytes into chat.
Discover the upload tool's size and dimension limits before generating the image.
Bonfetti stores the artwork; image generation happens in the user's agent.
Use images_upload target cover for the main artwork, or target background for a
full-page backdrop. PNG uploads are currently limited to 4 MiB, 2048 pixels per side,
and non-interlaced 8-bit RGB/RGBA. Convert other image formats in your client first.

The default invitation style is quiet, classic stationery: Libre Caslon serif titles,
warm ivory, charcoal type, generous spacing and fine outlined buttons. Preserve this
restraint unless the host asks for another mood. Use one expressive title face and
one supporting body face, a small cohesive palette and artwork with breathing room.
For formal or traditional occasions, favor elegant type and balanced composition;
avoid clutter, cartoon flourishes, oversized badges and unnecessary decorations.

Make the invite feel like the host's own site: use the design object on events_create
or changes.design on events_update. You can choose page, text, accent, button and
surface colors (six-digit hex), solid/gradient/dots/grid backgrounds, backdrop opacity,
heading/body fonts, split/stacked/hero/minimal layout, alignment, width, heading size,
corners, artwork frame/aspect/fit, buttons, eyebrow and footer text. Branding is a
small footer credit by default; branding hidden removes it. Discover current enums
and bounds from the tool schema. Do not send raw CSS, HTML, remote fonts or image URLs.
Changes.design merges supplied fields; design null resets overrides. events_get
returns saved design and resolvedDesign defaults. Drafts and their artwork/styles
can be previewed at the returned URL in the host's signed-in browser.

Add the guests with
guests_add, then let the host review before publishing with events_publish.
Only call invitations_send when the user asks to send. Delivery depends on the
operator enabling email; do not claim delivery if a job is only queued or disabled.
Personal invitation links allow RSVP access: keep them private to each guest.
Use rsvps_list for responses and invitations_status for delivery status.

To edit an invitation, first call events_get and use its current version as
expectedVersion in events_update or images_upload. Published changes appear at the
same link and preserve guests and RSVPs; they do not send email. On a version
conflict, fetch again and reconcile the user's requested change before retrying.
The user can disconnect an agent at https://bonfetti.app/account.

Bonfetti also has experimental MCP Events callbacks. They are optional and are not
required for onboarding; only configure them when requested and supported by the
client. Do not describe this draft implementation as stable protocol compliance.

End with a brief summary: connection verified (or the exact remaining blocker),
client reload status, and one suggested invitation prompt. Never include credentials.
