Blumee — flower delivery comparison (Germany)
Server Details
Compare flower delivery in Germany: find bouquets by text or photo, order at partner florists.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
browse_catalog (structured attribute filtering) and search_flower_offers (free-form text) both return offers, but the descriptions explicitly route each case and even cross-reference each other. match_bouquet_photo and get_flower_offer target clearly distinct inputs (photo, id). Boundaries are well handled despite the browse/search conceptual overlap.
All four tools follow a clean verb_noun snake_case pattern: browse_catalog, get_flower_offer, match_bouquet_photo, search_flower_offers. No mixing of conventions or vague verbs.
Four tools is on the lean side but each covers a distinct discovery or detail function (structured browse, text search, photo match, offer detail) with no redundancy. It fits the scope of a comparison service, though a bit more breadth is conceivable.
Discovery (browse, search, photo) and retrieval (get_flower_offer with same_bouquet_offers for price comparison) cover the core comparison workflow. Minor gaps remain, e.g. no dedicated shop/availability lookup or explicit side-by-side comparison tool, but agents can work around these via existing filters.
Available Tools
4 toolsbrowse_catalogBrowse catalogARead-onlyIdempotentInspect
List offers by exact attributes: flower, colour, occasion, shop, price range, delivery time, with sorting and paging. Use this to answer "what does shop X have", "cheapest tulips", or to page through everything matching a filter. The first call (no cursor) also returns available_values — the valid flower, colour, occasion and shop values. For free-form wishes use search_flower_offers.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Result order. Default mixes shops. | |
| limit | No | How many offers to return (default 8, max 20). | |
| shops | No | Shop names exactly as listed in available_values.shops. | |
| colors | No | Colour values exactly as listed in available_values.colors. | |
| cursor | No | next_cursor from a previous browse_catalog call, for the next page. | |
| flowers | No | German flower names exactly as listed in available_values.flowers (e.g. "Rose", "Tulpe"). | |
| occasions | No | Occasion keywords, e.g. "birthday", "funeral", "Geburtstag". Matched as substrings. | |
| max_price_eur | No | Upper price limit in EUR, inclusive. Hard filter. | |
| min_price_eur | No | Lower price limit in EUR. Hard filter. | |
| max_delivery_days | No | Latest acceptable delivery, in days from today, for an address in Germany (1 = tomorrow). If the user names a date, convert it to days. Hard filter on the shop-stated delivery time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| offers | Yes | |
| next_cursor | Yes | |
| total_matches | Yes | |
| available_values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, lowering the bar. The description adds genuine behavioral context: the first cursorless call returns available_values enumerating valid flower/colour/occasion/shop values. That's a real trait not encoded elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero padding. Filters, the available_values note, and the sibling redirect are each front-loaded in a single clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers filtering, paging via cursor, and the available_values discovery mechanism. An output schema exists, so return-format explanation isn't needed. Minor gap: it doesn't say whether cursor paging preserves filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully documented. The description's mention of price range and delivery time mirrors schema content rather than adding syntax, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List offers') and enumerates the exact filterable attributes. It also names the sibling 'search_flower_offers' for free-form wishes, so an agent can pick it apart from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit example queries ('what does shop X have', 'cheapest tulips') and explicitly routes free-form wishes to search_flower_offers. The when-to-use boundary is concrete, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flower_offerGet flower offerARead-onlyIdempotentInspect
Get full details of one offer by id: description, all images, size, species, delivery terms — and the same bouquet in other sizes or at other shops (same_bouquet_offers), for comparing prices. Use after a search when the user asks about a specific offer.
| Name | Required | Description | Default |
|---|---|---|---|
| offer_id | Yes | Offer id (UUID) as returned by any Blumee search tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| offer | Yes | |
| same_bouquet_offers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds useful behavioral context beyond that: what content is returned (all images, delivery terms) and that it surfaces same_bouquet_offers for price comparison, which is non-obvious. No rate limits or failure modes are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the payoff (cross-shop comparison), then the usage rule. The first sentence is dense with a parenthetical field list, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema and full annotation coverage, the description supplies everything an agent needs: when to call it, what it returns, and the comparison value it unlocks. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single offer_id parameter is fully documented in the schema as a UUID returned by search. The description's 'by id' adds nothing beyond that, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get full details of one offer by id') and enumerates exactly what comes back: description, images, size, species, delivery terms, plus cross-shop price comparisons. An agent can immediately tell this is the single-offer drill-down, distinct from catalog browsing or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after a search when the user asks about a specific offer,' which positions it in a workflow after search_flower_offers. It does not name a sibling tool by name or state when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_bouquet_photoMatch bouquet photoARead-onlyIdempotentInspect
Use this tool when the user provides a photo of a bouquet or flower arrangement and wants to find visually similar products available through Blumee. Identifies the flowers and colours in the photo (Pl@ntNet + vision model) and returns the closest real offers. Send the photo as image_file (attached file), image_url (public https) or image_base64 — exactly one. If you can see the photo but cannot pass it to this tool, call search_flower_offers with your own description instead. Takes ~5-15 s.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many offers to return (default 8, max 20). | |
| image_url | No | Public https URL of the photo (JPEG, PNG, WebP or HEIC, max 8 MB). | |
| image_file | No | The photo the user attached (ChatGPT fills this automatically from the attachment). | |
| image_base64 | No | Base64 of the image file, for programmatic clients only (max 8 MB decoded). | |
| max_price_eur | No | Upper price limit in EUR, inclusive. Hard filter. | |
| max_delivery_days | No | Latest acceptable delivery, in days from today, for an address in Germany (1 = tomorrow). If the user names a date, convert it to days. Hard filter on the shop-stated delivery time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | What to try next when the result is empty. |
| offers | Yes | |
| analysis | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered; the description goes further by disclosing the two-stage pipeline, the mutual-exclusion constraint on image inputs, and a realistic latency budget (~5-15 s). It does not cover failure behaviour (e.g. no-match or unrecognised photo) or whether the uploaded image is retained, which is the only real gap for a read tool that ingests user media.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the trigger condition, then the mechanism, then the input constraint, then the fallback and latency note. Every sentence carries new information; the only slight cost is density, with the fallback instruction and latency note packed into the final sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, nested-object tool with an output schema and full annotation coverage, the description supplies everything the agent needs to decide and invoke correctly: trigger, alternative, input exclusivity, mechanism, and expected duration. Return-value detail is properly left to the output schema and filter semantics to the parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a genuinely non-schema constraint: exactly one of image_file / image_url / image_base64 must be supplied — the schema marks none of them required and cannot express that exclusivity. It does not describe the filtering semantics of max_price_eur or max_delivery_days, which the schema already handles well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('match a photo of a bouquet or flower arrangement') plus the concrete outcome ('find visually similar products available through Blumee'), and names its own mechanism (Pl@ntNet + vision model). An agent can distinguish it from search_flower_offers, which it explicitly names as the text-based fallback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('when the user provides a photo... and wants to find visually similar products') and an explicit when-not/alternative path ('If you can see the photo but cannot pass it to this tool, call search_flower_offers with your own description instead'). That is a complete routing rule with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flower_offersSearch flower offersARead-onlyIdempotentInspect
Find real flower bouquets and potted plants for sale, from a description. Use this whenever the user asks for flowers in words: a flower type, colour, occasion, recipient, budget or delivery deadline (e.g. 'red roses under 40 EUR for tomorrow', 'something cheerful for a colleague'). Pass the request as query in any language; add structured fields when you know them. Also use it when the user shows a photo but match_bouquet_photo cannot receive the file: describe the flowers, colours and style you see and search with those. Returns ranked offers with price, shop, delivery time and links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many offers to return (default 8, max 20). | |
| query | Yes | What the user is looking for, in their own words, any language (e.g. 'pink peonies for my mum's birthday'). Required. | |
| style | No | Style, e.g. rustic, minimalist, romantic, wild meadow. | |
| colors | No | Colours, any language. | |
| flowers | No | Flower or plant types, any language (e.g. ["roses", "eucalyptus"]). | |
| occasion | No | Occasion, e.g. birthday, funeral, thank you, wedding, anniversary. | |
| recipient | No | Who the flowers are for, e.g. mother, colleague, partner. | |
| max_price_eur | No | Upper price limit in EUR, inclusive. Hard filter. | |
| min_price_eur | No | Lower price limit in EUR. Hard filter. | |
| max_delivery_days | No | Latest acceptable delivery, in days from today, for an address in Germany (1 = tomorrow). If the user names a date, convert it to days. Hard filter on the shop-stated delivery time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | What to try next when the result is empty. |
| offers | Yes | |
| total_matches | Yes | |
| query_understood | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds language-agnostic query handling and a return summary (ranked offers with price, shop, delivery time, links), but the return shape is already covered by the output schema, so incremental behavioral disclosure is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and usage triggers, and tightly written. The final sentence restating return contents is largely redundant given an output schema exists, costing a little efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with 100% schema coverage, full annotations and an output schema, the description covers everything an agent needs that structure does not: when to invoke, the photo fallback path, and the query-language convention.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; the description adds a meaningful calling convention beyond the schema by telling the agent to pass free text as `query` in any language and to add structured fields only when known, which clarifies the relationship between query and the structured filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (find real flower bouquets and potted plants for sale) plus an explicit trigger domain (user asks for flowers in words). It also distinguishes itself from the sibling match_bouquet_photo by stating the condition under which it substitutes for it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage triggers (flower type, colour, occasion, recipient, budget, delivery deadline) with worked examples, and explicitly states the alternative path: use this when match_bouquet_photo cannot receive the file, describing what is visible in the photo instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
browse_catalog - First observed
get_flower_offer - First observed
match_bouquet_photo - First observed
search_flower_offers
Related MCP Connectors
Find flower arrangements, check US florist delivery by ZIP and date, get a purchase link + pricing
First German florist with a public MCP server. Search bouquets and order flowers via AI in Munich.
Order bouquets from independent Prague florists: live prices, delivery times, pay on pinflower.cz.
Compare parcel and letter delivery prices across 60+ carriers in 27 European countries.
Related MCP Servers
- AlicenseBqualityDmaintenanceCompare parcel and letter delivery prices across 60+ carriers in 27 European countries.1MIT
- FlicenseNot gradedqualityBmaintenanceCrane rental (Kranvermietung) data for Germany and Austria from KranVergleich.de: find rental companies by city, price ranges for 8 crane types, crane type recommendation and supplier availability per PLZ.-
- AlicenseAqualityDmaintenanceEnables searching geizhals.de for products and retrieving shop prices and offers to assist with price comparison.2MIT
- AlicenseNot gradedqualityBmaintenanceProvides German real-time fuel prices (Benzinpreise) for all.197 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.