Skip to main content

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 (full catalog, via Vivino's Algolia index — finds wines with no marketplace listing too).
search_by_filters(wine_type, country, min_rating, price_min, price_max, limit) Discover/recommend wines by filters, with marketplace prices (via explore).
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.

Metadata

Release files for vivino-mcp 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vivino-mcp 0.1.6
File Size Uploaded Provenance Actions
vivino_mcp-0.1.6.tar.gz 11.6 kB Without provenance Details for vivino_mcp-0.1.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for vivino-mcp 0.1.6
File Interpreter ABI Platform Actions
vivino_mcp-0.1.6-py3-none-any.whl Python 3 none any Details for vivino_mcp-0.1.6-py3-none-any.whl

Total release size: 26.1 kB

Release files / vivino_mcp-0.1.6.tar.gz

Download URL vivino_mcp-0.1.6.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
8fdf04279da2feb23b4cc56c64e97ab8360171d6109843b9dc35c95cc6cf6eab
BLAKE2b-256 checksum
How to use checksums
6f3402b14e8c08ce554be868e2fc88e6944f38e21e41345a30fa17fe76beb0b4
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / vivino_mcp-0.1.6-py3-none-any.whl

Download URL vivino_mcp-0.1.6-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e634256cdc02fccf43571e31cfe2bcd54b9abf1a6032d5035d8a4a5fd5c90a27
BLAKE2b-256 checksum
How to use checksums
604e752df3d4866fe3b1273aa5754f23a33a75013488ab5138c6abc7ac96186d
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for vivino-mcp 0.1.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page