agent-bev

The world's largest agentic B2B hub for beer, wine and spirits. Powered by CUVEE. Trade only.

Should I use this

Quality & Safety

A
Description quality
92%
Schema completeness
77%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'compare_drinks' description lacks action verbin compare_drinks

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,142Tokens (tool definitions)
~541 BTypical response size
Moderate attention impact (0.89% of 128k context)

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": {
    "bev-door": {
      "command": "npx",
      "args": [
        "@agent-bev/mcp-server"
      ]
    }
  }
}

Runnable packages

npm@agent-bev/mcp-server0.2.2stdio

Remote endpoints

https://mcp.bev-buyer.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_drinks(query, node, category, limit)

Find beers, wines, spirits, ciders and ready-to-drink drinks by name, style, origin or category across every open country node. Returns record ids with each record's CUVEE.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "name, style, origin or category"
    },
    "node": {
      "type": "string",
      "description": "optional node id, e.g. es-bev"
    },
    "category": {
      "type": "string",
      "enum": [
        "beer",
        "wine",
        "spirits",
        "cider_perry",
        "rtd"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "query"
  ]
}
🟢get_record(record_id)

Read one product in full by record_id: every field with its source page, reader and state; its CUVEE; its claim status; the signed record (JWS).

Input Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string"
    }
  },
  "required": [
    "record_id"
  ]
}
🟢find_producer(producer, node)

Find a maker and its products across every open node, with the maker's name as each source wrote it.

Input Schema

{
  "type": "object",
  "properties": {
    "producer": {
      "type": "string"
    },
    "node": {
      "type": "string"
    }
  },
  "required": [
    "producer"
  ]
}
🟢list_nodes

List the countries on the record: each node's door, languages, state and, for an open node, its counts.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢compare_drinks(record_ids)

Compare two to ten products side by side, field by field, each value with its source page.

Input Schema

{
  "type": "object",
  "properties": {
    "record_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 10
    }
  },
  "required": [
    "record_ids"
  ]
}
🟢get_order_route(record_id)

Get the maker's or distributor's trade channel to order a product, as the record states it. Never a consumer channel.

Input Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string"
    }
  },
  "required": [
    "record_id"
  ]
}
🟡create_order_intent(record_ids, quantity, market, needed_by, note, ...)

Place an order intent for one to ten records (quantity, delivery market, optional date and note, the buyer's organisation and email). The Bourse routes it to each maker; verified makers answer with offers, and a maker's own Brand Agent address comes back with the routing. The email stays private: it is the buyer's key to read offers and accept one.

Input Schema

{
  "type": "object",
  "properties": {
    "record_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "maxItems": 10
    },
    "quantity": {
      "type": "string",
      "description": "quantity with its unit, e.g. 600 bottles (75 cl)"
    },
    "market": {
      "type": "string",
      "description": "delivery market (country)"
    },
    "needed_by": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "note": {
      "type": "string"
    },
    "buyer": {
      "type": "object",
      "properties": {
        "organisation": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      },
      "required": [
        "organisation",
        "email"
      ]
    }
  },
  "required": [
    "record_ids",
    "quantity",
    "market",
    "buyer"
  ]
}
🟢get_offers(intent_id, email)

Read the makers' offers on an order intent, and the order once placed. By the buyer's email given on create_order_intent.

Input Schema

{
  "type": "object",
  "properties": {
    "intent_id": {
      "type": "string"
    },
    "email": {
      "type": "string"
    }
  },
  "required": [
    "intent_id",
    "email"
  ]
}
⚪accept_offer(intent_id, offer_id, email)

Accept one offer and place the order through the Bourse. Accepting is one x402 paid call (HTTP 402 with the payment offer until paid): it settles and signs the order. The goods are paid between the two companies on the offer's own terms.

Input Schema

{
  "type": "object",
  "properties": {
    "intent_id": {
      "type": "string"
    },
    "offer_id": {
      "type": "string"
    },
    "email": {
      "type": "string"
    }
  },
  "required": [
    "intent_id",
    "offer_id",
    "email"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools