MCP server · real florists · real delivery

Your agent can send flowers.

Petal is an MCP server that turns a chat message into a real bouquet. Search arrangements, check ZIP + date, dry-run the order, then confirm — all from Claude, Cursor, or any MCP client.

dry-run by default  ·  confirm-gated checkout  ·  Florist One network

Built for agents that already have your trust.

Claude Cursor Windsurf Claude Desktop Any MCP client

Watch it happen.

You say it like a text message. Your agent does the rest. A simulated conversation — nothing is charged, nothing is sent.

Transcript · Claude + petal simulated
calling search_flowers

Found 3 spring arrangements deliverable to 10014 on Friday, all under $75:

Garden Whisper
GW-214 · peonies + ranunculus
$68.40 · Fri
Blush Meadow
BM-088 · roses + lisianthus
$61.00 · Fri
Sunroom Peonies
SP-341 · peony bunch
$74.50 · Fri
Go with the Garden Whisper. Confirm.

Dry-run complete — nothing charged yet.

Garden Whisper · GW-214$54.00
Delivery · Fri Jul 17, 9am–5pm$9.95
Service$4.45
Total$68.40

Reply CONFIRM to place this order.

CONFIRM
Scheduled for Friday delivery

order PTL-9F2K · Garden Whisper · $68.40
Track anytime with get_order_status.

Add Petal to your MCP client.

One JSON block. Restart. Ask for flowers. Local over stdio, or remote over HTTP with OAuth.

claude_desktop_config.json
{
  "mcpServers": {
    "petal": {
      "command": "npx",
      "args": ["-y", "@petal/mcp-server"],
      "env": {
        "PETAL_API_KEY": "your_key_here",
        "PETAL_DEFAULT_ZIP": "10014"
      }
    }
  }
}
01

Get an API key. One key works across every MCP client you run.

02

Paste the config into your client and set PETAL_API_KEY.

03

Restart the client. Petal's six tools appear in your agent's tool list.

Six tools. Real florist inventory.

Each tool is a typed capability your agent can call — live catalog, live pricing, real Florist One fulfillment underneath.

T.01
place_order guarded

Dry-run first. Confirm second. No silent charges — the first call returns a full quote and a one-time token; only an explicit confirm places a real Florist One order.

01 · dry run{ "mode": "dry_run", "sku": "GW-214", "zip": "10014", "date": "2026-07-17" } { "total": 68.40, "requires_confirm": true } 02 · confirm{ "mode": "confirm", "order_token": "tok_8Kd2" } { "order_id": "PTL-9F2K", "status": "placed" }
T.02
search_flowers

Query real arrangements by occasion, budget, and color — live catalog, live pricing.

T.03
check_delivery_availability

ZIP + date before you promise Friday. Returns windows, cutoffs, and same-day flags.

T.04
list_categories

Occasions and collections, straight from the florist catalog.

T.05
get_flower_details

Stems, palette, vase options, and florist notes for one SKU.

T.06
get_order_status

Placed → confirmed → out for delivery → delivered.

The bouquet is real. The florist is real. Only the errand disappears.
The petal promise · est. 2026

Real money. Hard rails.

Petal spends real money on real flowers — so the guardrails are part of the protocol, not a promise in a blog post.

i.

Dry-run by default

place_order never charges on first call. It returns items, delivery window, and total with requires_confirm: true.

ii.

Confirm gate

The agent must surface the total and delivery window, then wait. Only an explicit CONFIRM plus a one-time order token places the order.

iii.

Receipt trail

Every order is queryable with get_order_status — id, status, tracking. No black-box checkout.

Florist One handles fulfillment. Petal handles agent protocol + order safety.

Delivery across the US and Canada. Not for bulk corporate gifting workflows — Petal is for personal, agent-driven sends.

Next time they deserve flowers, just say it.

Install Petal. Keep your agent. Ship the bouquet.

petal · MCP for real flowers