BestPrice

gr.bestpricePublished by bestprice.grOfficial publisherv1.9.0Updated Nov 4, 2026

Read-only shopping decisions, product search, offers, and price history for Greece.

VerifiedStreamable HTTPWeb executableData & AnalyticsBusiness & Commerce

Overview

BestPrice's hosted MCP server (mcp.bestprice.gr), published by bestprice.gr; no sign-in required; Streamable HTTP; 6 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Publisher
bestprice.gr
Endpoint
mcp.bestprice.gr
Last checked

Installation

In SourceWeft

  1. Open BestPrice in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/gr.bestprice%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "bestprice": {
      "type": "http",
      "url": "https://mcp.bestprice.gr/mcp"
    }
  }
}

README

BestPrice MCP

[CI] [Glama score] [License: Apache-2.0]

The official Model Context Protocol server for BestPrice.gr, Greece's price-comparison service. It gives AI assistants read-only access to shopping decisions, live product search, offer comparison, and price history. No account or API key is needed.

[BestPrice MCP: products, offers and price history for AI assistants]

Start shopping

For developer integrations, the public endpoint is:

text
https://mcp.bestprice.gr/mcp

This repository holds everything that lives outside the hosted service: the install manifests for each AI client, a local stdio bridge for hosts that cannot speak HTTP, and the browser-native WebMCP layer. The server itself is not in this repository.

The current release matrix records the live gateway, UI, OAuth/Events, the ChatGPT directory listing and separate ACP qualification.

Tools

The hosted 1.9.0 service now also advertises check_deal and optimize_basket. Both passed a live check on 3 November 2026. check_deal accepts exactly one product URL, visible model/barcode text or selected product ID; image bytes are not ingested. optimize_basket calculates read-only plans for exact products, quantities and a supplied postcode. Neither places an order. The client manifests now advertise the six research tools. OpenAI's acceptance of the new server definitions and the 1.3.0 package are tracked in the release matrix.

ToolWhat it doesKey arguments
get_shopping_decisionRuns the BestPrice Shopping Brain: an evidence-backed recommendation, need-based comparison, or read-only basket plan with reasons, tradeoffs, and unknowns.message (the need in Greek or English, including any budget), optional postal_code (required for a completed basket plan), optional evidence_detail (summary, the default: only the evidence the answer cites; full: every claim and source)
search_productsFinds canonical products in the catalog. Returns product IDs and the catalog minimum price before shipping.query (2–400 characters: a name, model, category, or a bare GTIN/EAN barcode), optional price_min, price_max, required_features, sort (relevance, price_asc, price_desc), limit (1–8)
compare_offersCompares current merchant offers for one exact product, separating item price, shipping, and delivered total.product_id from a previous result, optional postal_code (a Greek postcode, 10000–85999, for delivered totals), objective, in_stock_only, minimum_merchant_rating, limit (1–10)
get_price_historySummarises how a product's price moved over time, against its 180-day median.product_id, optional period_days (30, 90 or 180)
check_dealChecks exact identity, current offers and price context for an offer.Exactly one url, visible model/barcode query, or selected product_id; optional supplied observed_price and postal_code
optimize_basketCalculates read-only plans for exact selected products and quantities.items with product_id and quantity, Greek postal_code; optional objective and maximum_merchants

Public research tools are read-only. They never place orders, create alerts, or read account data. Results link to a BestPrice product page, never directly to a merchant. Unknown shipping is reported as unknown, not as free. Search covers safe physical products; digital goods, services, and age-restricted categories are excluded.

One optional clarification

A broad request can return outcome: "clarification" with clarifications[].choices. Each choice contains a display label and a self-contained message. Ask the shopper to choose, then call get_shopping_decision with that message. When they choose Skip, also send skip_clarification: true as returned by that choice. Never choose on the shopper’s behalf. Exact models and requests that already state the missing type bypass this step. Mandatory budget, age-group, product-type and accessory checks still apply after Skip.

For example, “ANC headphones up to €150 for commuting” can ask whether the shopper wants over-ear or in-ear headphones. The recommendation excludes children’s models and replacement accessories unless the shopper asks for them. This is the same Shopping Brain used by BestPrice Ask.

Ask’s product cards can open BestPrice’s existing alert and saved-list flows. Public research remains read-only. On an MCP Events-capable host, optional account linking can separately create and cancel the exact price alerts the shopper requests. No alert is active until subscription succeeds. Saved comparisons in the 1.3.0 candidate remain separately gated; account conversations and image bytes are not accessed.

Protocol details

Measured against the live endpoint on 24 September 2026.

  • Versions. initialize negotiates 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 and 2024-10-07; a client that asks for any other version is answered with 2025-11-25. The 2026-07-28 per-request revision is also served: send the MCP-Protocol-Version, Mcp-Method (and, for tools/call, Mcp-Name) headers, and put io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities in every request's _meta. A request that names the revision without that envelope is refused with -32602.
  • Stateless. No MCP-Session-Id is issued and none is required; DELETE answers 405. A GET with Accept: text/event-stream answers immediately with the SSE comment : connected and retry: 300000, then holds the connection open. It does not send JSON-RPC requests or notifications on that stream. Rechecked 29 October 2026. A client loses nothing by not opening it, and must not wait for the stream to end.
  • Capabilities. tools and resources are available to compatible clients. The resource surface contains the optional MCP Apps UI at ui://bestprice/shopping-results-v1.html, the server card at mcp://server-card.json, and the canonical skill://bestprice-shopping/SKILL.md. On MCP 2026-07-28 the server also declares the final io.modelcontextprotocol/skills extension: skills/list and skills/get return the one BestPrice Shopping Skill with its SHA-256 digest and byte size, and resources/read returns the exact markdown bytes. Older clients simply see the Skill as an ordinary resource. There are no prompts, completions or logging; those methods answer -32601.
  • Responses. A client that accepts both application/json and text/event-stream gets a one-event SSE response. Accept: application/json, */* or no Accept header gets a single JSON body. Every tool returns structuredContent that validates against its outputSchema, plus the same result as text for clients that do not pass structured content to the model.
  • Errors. An unknown tool is a JSON-RPC error (-32602). Invalid arguments and service failures such as an unknown product are tool results with isError: true, so the model can read and correct them.
  • Limits. JSON request bodies up to 256 KiB (413 above that), a 12-second request deadline, and per-client rate limits answered with HTTP 429, JSON-RPC error -32029 and a Retry-After header. JSON-RPC batch arrays are refused with 400.
  • Browsers. Desktop, CLI and server-side clients send no Origin header and are not affected. A browser page may call the endpoint from an allowlisted AI-host origin, from bestprice.gr, or from localhost (so MCP Inspector works in direct mode); any other origin gets 403.
  • Authentication. The six research tools work without an account. Optional account linking is scoped to events:subscribe; protected-resource metadata is available at /.well-known/oauth-protected-resource and /mcp/oauth-protected-resource. Actual host subscription and delivery qualification is recorded separately in the release matrix.

Developer quick start

Every client below connects to the same endpoint. Copy-paste connector setup for Perplexity, Claude, ChatGPT developer mode, Gemini CLI, Copilot, Grok Bot, and Cursor is in docs/connect.md. Longer provider notes, including OpenAI and Microsoft Copilot Studio, are in docs/provider-setup.md.

Claude

Connect BestPrice to Claude opens the custom-connector flow with the endpoint prefilled. For Claude Code:

sh
claude mcp add --transport http bestprice-shopping https://mcp.bestprice.gr/mcp

The bundled .mcp.json is the equivalent project-scoped configuration.

Cursor

Add BestPrice to Cursor shows the decoded configuration before adding it. The .cursor-plugin/ directory holds the marketplace plugin and an agent skill.

VS Code and VS Code Insiders

Add BestPrice to VS Code

Add BestPrice to VS Code Insiders

Kiro

Add BestPrice to Kiro opens Kiro's confirmation dialog with the remote URL. Kiro shows the configuration before writing it.

Gemini CLI and Qwen Code

sh
gemini extensions install https://github.com/TheBestCo/bestprice-mcpqwen extensions install https://github.com/TheBestCo/bestprice-mcp --consent

Both extensions restrict the imported tools to the four listed above.

Codex, Claude plugins, and Agent Skill hosts

The root plugin.json, mcp.json, and skills/bestprice-shopping/SKILL.md form a portable Agent Plugins package: the MCP supplies live shopping data and the Skill teaches the host when and how to route unbranded Greek shopping intent. Agent-compatible hosts that discover repository-local skills under .agents/skills/ get the same canonical workflow at .agents/skills/bestprice-shopping/SKILL.md. .codex-plugin/ remains the Codex compatibility manifest. .claude-plugin/plugin.json plus the same root Skill and .mcp.json also make this repository a Claude plugin package. claude-plugin/ is a slim copy of that Claude plugin, with no build files, for the Claude plugin directory.

Self-hosted plugin marketplaces

The same repository can be added directly as a plugin marketplace, with no copied tool or Skill logic:

sh
copilot plugin marketplace add TheBestCo/bestprice-mcpcopilot plugin install bestprice-shopping@bestprice
claude plugin marketplace add TheBestCo/bestprice-mcpclaude plugin install bestprice-shopping@bestprice

Copilot reads .github/plugin/marketplace.json and, under Agent Plugins 1.0, loads the canonical root plugin.json, mcp.json, and skills/bestprice-shopping/SKILL.md. Claude reads .claude-plugin/marketplace.json and uses .claude-plugin/plugin.json, .mcp.json, and the same root Skill.

Gemini API, DeepSeek, Z.ai

Runnable examples live in examples/: the Gemini Interactions API and Genkit, a DeepSeek Harness plugin entry, and a Z.ai GLM call. Each needs the provider's own API key. BestPrice needs none.

Any other MCP client

Add the hosted Streamable HTTP endpoint. That is the install path:

text
https://mcp.bestprice.gr/mcp

Hosts that read an mcpServers JSON configuration accept:

json
{  "mcpServers": {    "bestprice-shopping": {      "url": "https://mcp.bestprice.gr/mcp"    }  }}

A checkout of this repository includes stdio.mjs, a local forwarder to that same endpoint for a host that cannot speak HTTP. From a checkout you already have for development, run node stdio.mjs. It accepts two environment variables: BESTPRICE_MCP_URL (default: the public endpoint) and BESTPRICE_MCP_TIMEOUT_MS (default: 60000). A Dockerfile builds the same forwarder for Glama and similar hosts. It is not an install command and it does not download or execute a remote package.

This package is private. It is not published to npm under bestprice-mcp or any scoped name. There is no registry package to install or to run with npx. A directory that shows an npm install for version 1.2.7 is repeating a stale crawler inference; that version is not in the npm registry.

A safe first conversation

  1. Ask for a decision: Θέλω κινητό έως 500 ευρώ με NFC και 5G υποχρεωτικά. (I want a phone up to 500 euros, NFC and 5G required.)
  2. Or search: Find Sony WH-1000XM5 under 300 euros.
  3. Pass a returned product_id to compare_offers with postal code 10558.
  4. Pass the same product_id to get_price_history for 180 days.

Queries work in Greek or English. Result summaries, catalog data and merchant names come back in Greek.

Browser-native WebMCP

BestPrice pages register 22 contextual WebMCP tools (contract 2.8) in compatible browsers — each one reads or acts, never both — covering search with structured results (narrowed by price, stock, deals and order) and opening the results page a search returned in the tab, the shopper's shopping list and comparisons (read everywhere, added to and removed from on a product page), a price-drop alert dialog, the visible products and loading more, filters and sorting, opening any product by id (read before the tab moves), product facts, offers, specifications and price history (with its chart), one visible-offer action, and the BestPrice Shopping Brain — on every public page, articles and stores included — while leaving the merchant choice to the shopper. Every tool publishes an input and an output schema. The contracts, fail-closed runtime, deterministic evaluator, and the 47-case natural-language dataset are in webmcp/.

Discovery

  • Official MCP Registry
  • Open agent discovery: ard.json, ai-catalog.json, server card, and the provider-neutral BestPrice Shopping skill. The ARD examples are deliberately unbranded shopper intents so discovery can match “what should I buy?”, delivered-price, and price-timing requests before a user knows BestPrice.
  • webmcp.json describes the contextual browser tools exposed by BestPrice pages.
  • The repository is listed in the Gemini CLI extension gallery as bestprice-shopping (Google crawls tagged public extension repositories), while GitHub Agent Finder can ingest the public MCP catalog and ARD resources.
  • Copy-ready, CI-pinned external catalog contributions live under distribution/: a GitHub Agent Finder Skill entry and a Docker MCP Registry remote-server entry. Those catalogs require review in their own repositories; the checked-in files are submission payloads, not claims that the external listings are already live.
  • Community indexes: Glama, WebMCP Registry, webmcp.com, cursor.directory

Development

sh
npm cinpm run check   # Biome lint and formatnpm test        # node --test: bridge, WebMCP, manifests, dataset

Tests need no network: the bridge is exercised against an in-process fake remote. Node 20 or newer is required; .nvmrc pins 22.

Versioning

Two versions appear in this repository on purpose:

  • Package version in package.json and every plugin or extension manifest. It changes when this repository's manifests, bridge, or WebMCP layer change, and is tagged vX.Y.Z.
  • Server version in server.json and the line near the top of this README. It is the version the hosted service reports and is published to the official MCP Registry.

CHANGELOG.md tracks the package version.

Timestamped hosted-service checks are recorded separately. The 7 September Shopping Brain v12 verification includes its exact gateway revision, sanitized canary results, and scope limits.

Security

Report vulnerabilities privately as described in SECURITY.md.

Contributing

See CONTRIBUTING.md. Issues and pull requests are welcome.

License

Apache License 2.0. Copyright The Best Company S.A. See LICENSE.

Privacy: https://www.bestprice.gr/policies/privacy · Terms: https://www.bestprice.gr/policies/terms

Source: README.md at commit da1665e

Tools

6

get_shopping_decision

Get a BestPrice shopping decision

Provides read-only shopping recommendations, product comparisons, purchase-timing context, and basket plans for physical products sold in Greece. Accepts only a concise current shopping request with a budget, required specifications, and relevant corrections, excluding chat transcripts and unrelated personal data. Uses the same Shopping Brain as BestPrice Ask and returns selected products, reasons, tradeoffs, typed catalog attributes, checked offer and historical-price context, evidence references, and unknowns. Each product-family decision starts with one bounded catalog page and returns at most four candidates per slot. A failed recommendation may check a small set of externally discovered models against BestPrice. Basket plans accept two to five supported product-family slots under one aggregate budget, or at least two exact grouped bp_<id> products, and require a five-digit Greek delivery postcode. Product prices exclude shipping; unknown delivery costs remain unknown. Unsupported or unidentified basket categories require clarification. Does not place orders, create alerts, access account history, or predict future prices.

Parametersmessagerequiredpostal_codeevidence_detailskip_clarification

search_products

Search BestPrice products

Searches physical products sold in Greece by product name, model, category, or barcode and returns up to eight grouped products with canonical product IDs, catalog prices, relevance warnings, and BestPrice links. Price bounds apply before shipping; feature hints are not independently verified. A valid GTIN with one unambiguous catalog match is supported. Broadened-category results are related products rather than exact matches. Categories containing only ungrouped listings return an empty product list and a category handoff. Catalog minimum prices are indicative, may include filtered offers, and are not buyable quotes. Prohibited, age-restricted, digital, service, and unverified catalog branches are excluded. No checkout or direct merchant links are provided.

Parameterssortlimitqueryrequiredlocalecountryprice_maxprice_minrequired_features

compare_offers

Compare BestPrice offers

Compares current Greek merchant offers for one exact grouped BestPrice product ID. Returns public store names, item prices, shipping information, calculable delivered totals, ranking reasons, and BestPrice links. Without objective it ranks by lowest_total_cost when postal_code is given and by lowest_item_price otherwise, keeping shipping and total cost unknown; an explicit lowest_total_cost requires a Greek postcode (five digits, 10000 to 85999). Other ranking options include merchant rating. Catalog minimum prices and the lowest returned quoted prices have separate fields, with a reason when the catalog minimum is absent from the returned offers. Results exclude sponsored offers and merchant destination URLs. The operation is read-only and creates no CPC click.

Parameterslimitobjectiveproduct_idrequiredpostal_codein_stock_onlyminimum_merchant_rating

get_price_history

Inspect BestPrice price history

Returns historical prices and a deterministic deal classification for one exact grouped BestPrice product ID. Includes minimum and median statistics, a compact daily price series, coverage gaps, and methodology. period_days selects the daily series and coverage gaps only: deal_classification and price_delta_vs_180d_median_pct always compare the current price with the 180-day median, and window_stats always carries the 30-, 90- and 180-day statistics. Historical observations do not guarantee future prices.

Parametersproduct_idrequiredperiod_days

optimize_basket

Optimize a BestPrice basket

Calculates read-only basket plans for exact grouped BestPrice product IDs delivered to a Greek postcode. Compares cheapest, fewer-merchant, and balanced reliability-and-cost plans within the requested merchant ceiling and rating floor. Returns public store names and cost breakdowns; unknown shipping leaves affected delivered totals null. Does not discover products, place orders, process payments, or expose merchant destination URLs.

Parametersitemsrequiredobjectivepostal_coderequiredmaximum_merchantsminimum_merchant_rating

check_deal

Check a BestPrice deal

Checks an offer using a BestPrice product URL, a reviewed merchant URL, a barcode, or visible product text from a screenshot. Screenshot inputs consist of visible identity text and an optional observed price. Unique barcodes and reviewed variant-identifying URLs can establish an exact identity. Text queries return candidates for explicit user selection; similarity does not establish an exact retailer match. Compares current eligible offers and known delivered totals separately from market item-price history. Observed prices remain user-supplied, missing variants and former prices remain unverified, and unknown shipping remains unknown. Read-only; no checkout or alerts.

Parametersurlqueryproduct_idpostal_codeobserved_price

Version history

6
  1. v1.9.0LatestNov 4, 2026
  2. v1.8.5Oct 29, 2026
  3. v1.8.4Oct 1, 2026
  4. v1.8.3Sep 30, 2026
  5. v1.8.1Sep 24, 2026
  6. v1.8.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts