Skip to main content

MCP server that fetches wine information from Vivino

Project description

vivino-mcp

An MCP server that fetches wine information from Vivino via its unofficial JSON API.

⚠️ Vivino has no official public API. This server calls internal endpoints the website uses. It is intended for personal / educational use. Respect Vivino's Terms of Service and keep request volume low (the server caches and throttles by default). Endpoints may change without notice.

Tools

Tool Description
search_wine(query, limit) Search wines by name; returns summary cards.
search_by_filters(wine_type, country, min_rating, price_min, price_max, limit) Discover wines by structured filters.
get_wine_details(vintage_id) Full details for a vintage incl. taste structure (tannin/acidity/sweetness/intensity) and flavor profile.
get_wine_reviews(wine_id, year, limit) User reviews for a wine.
list_wine_types() Supported wine types and their Vivino ids.

IDs flow naturally: a search result gives you vintage_id (for details) and wine_id (for reviews).

search_wine / search_by_filters return {total_matched, returned, note, results}. total_matched is how many wines Vivino reports for the query; results is a ranked, paginated list capped at limit (not the full catalog).

Install (for users)

Claude Desktop — one-click

Download vivino-mcp.mcpb from the latest release and double-click it (or Settings → Extensions → Install from file). Requires uv on your machine.

Any MCP client — via uvx

No clone needed; uvx fetches the package from PyPI automatically:

{
  "mcpServers": {
    "vivino": {
      "command": "uvx",
      "args": ["vivino-mcp"]
    }
  }
}

Optional env: VIVINO_CURRENCY (default USD), VIVINO_COUNTRY (default us).

Develop (from source)

uv sync
uv run python smoke_test.py   # optional: live end-to-end check
uv run vivino-mcp             # run the server (stdio)

Configuration (env vars)

Var Default Purpose
VIVINO_CURRENCY USD Currency for prices/explore.
VIVINO_COUNTRY us Default country code.
VIVINO_USER_AGENT Firefox UA Override the browser UA sent to Vivino.
VIVINO_CA_BUNDLE Path to a CA bundle (PEM) to verify TLS against.
VIVINO_INSECURE Set to 1 to disable TLS verification (last resort).

TLS behind a corporate proxy

By default the server verifies TLS against your OS trust store (via truststore), so it works behind corporate TLS-interception proxies whose private root CA is in the system keychain. If you still hit CERTIFICATE_VERIFY_FAILED, point VIVINO_CA_BUNDLE at your company's root CA PEM, or set VIVINO_INSECURE=1 as a last resort.

Architecture

server.py   MCP tool layer (FastMCP) — schemas + error wrapping
   │
client.py   VivinoClient — throttle, retry/backoff, TTL cache
   │
models.py   Pydantic models — flatten Vivino's nested JSON
config.py   UA, currency, timeouts, cache TTLs, wine-type map

Verified Vivino endpoints

  • GET /api/explore/explore — search/discovery. Params: country_codes[], wine_type_ids[], grape_ids[], region_ids[], min_rating, price_range_min/max, currency_code, order_by, order, page. Results at explore_vintage.matches[].
  • GET /api/vintages/{vintage_id} — vintage detail (no taste data).
  • GET /api/wines/{wine_id}/tastes — taste structure + flavor profile.
  • GET /api/wines/{wine_id}/reviews?per_page=&page=&year= — user reviews.

A browser User-Agent header is required — Vivino blocks requests without one.

Notes / limitations

  • search_wine ranks explore results client-side by name match (the explore path has no free-text q param). For exact-name lookups this is approximate; extend with the site search host if you need stricter matching.
  • No tests beyond smoke_test.py (which hits the live API). Add HTML/JSON fixtures for offline unit tests before relying on this in CI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vivino_mcp-0.1.5.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vivino_mcp-0.1.5-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file vivino_mcp-0.1.5.tar.gz.

File metadata

  • Download URL: vivino_mcp-0.1.5.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for vivino_mcp-0.1.5.tar.gz
Algorithm Hash digest
SHA256 013210cf3de5240c63d31c198a3ff3d1111778fcba52592858d9c789b4a344aa
MD5 316139a6a8bb54862d5d6369b300eb3c
BLAKE2b-256 8e2c54b491ea72f51f8631afdd09f6b9c95c75c53a21a91eb6def803792a0cae

See more details on using hashes here.

File details

Details for the file vivino_mcp-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: vivino_mcp-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for vivino_mcp-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 a7a09a71e897faef30920e6fef0b7bed81867262beb3ff5553432e9414ef72de
MD5 e78f19135a85af82e8b313ad2ea7fa2c
BLAKE2b-256 bd05f50a6a968490cea6c62ad595323b1d80bc2721a92bbbbb476d3efa4f9e99

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page