BestPrice
Search BestPrice.gr products, compare current merchant offers and shipping, and inspect observed price history through a public read-only MCP server.
Install
Install and configure the MCP from https://github.com/TheBestCo/bestprice-mcp now. Follow the repository's installation instructions, ask me for anything you can't complete yourself, and verify its tools load.BestPrice MCP
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.
Start shopping
- Open BestPrice in ChatGPT and add the published plugin.
- Connect BestPrice to Claude using the prefilled connector form.
- See the shopping guide for examples and other assistants.
For developer integrations, the public endpoint is:
https://mcp.bestprice.gr/mcp
- Transport: Streamable HTTP over HTTPS; anonymous shopping, optional OAuth for Events
- Official Registry ID:
gr.bestprice/mcp - Server version:
1.8.4 - Public guide: https://www.bestprice.gr/mcp
- Support: https://www.bestprice.gr/contact
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, plugin review and separate ACP qualification.
Tools
| Tool | What it does | Key arguments |
|---|---|---|
get_shopping_decision | Runs 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_products | Finds canonical products in the catalog. Returns product IDs and the catalog minimum price before shipping. | query (2–200 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_offers | Compares 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_history | Summarises how a product's price moved over time, against its 180-day median. | product_id, optional period_days (30, 90 or 180) |
All four 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.
Protocol details
Measured against the live endpoint on 24 September 2026.
- Versions.
initializenegotiates2025-11-25,2025-06-18,2025-03-26,2024-11-05and2024-10-07; a client that asks for any other version is answered with2025-11-25. The2026-07-28per-request revision is also served: send theMCP-Protocol-Version,Mcp-Method(and, fortools/call,Mcp-Name) headers, and putio.modelcontextprotocol/protocolVersionandio.modelcontextprotocol/clientCapabilitiesin every request's_meta. A request that names the revision without that envelope is refused with-32602. - Stateless. No
MCP-Session-Idis issued and none is required;DELETEanswers405. AGETwithAccept: text/event-streamopens a keep-alive stream, but the server never sends requests or notifications on it, so a client loses nothing by not opening it. - Capabilities.
toolsandresourcesare available to compatible clients. The resource surface contains the optional MCP Apps UI atui://bestprice/shopping-results-v1.html, the server card atmcp://server-card.json, and the canonicalskill://bestprice-shopping/SKILL.md. On MCP2026-07-28the server also declares the finalio.modelcontextprotocol/skillsextension:skills/listandskills/getreturn the one BestPrice Shopping Skill with its SHA-256 digest and byte size, andresources/readreturns 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/jsonandtext/event-streamgets a one-event SSE response.Accept: application/json,*/*or noAcceptheader gets a single JSON body. Every tool returnsstructuredContentthat validates against itsoutputSchema, 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 withisError: true, so the model can read and correct them. - Limits. JSON request bodies up to 256 KiB (
413above that), a 12-second request deadline, and per-client rate limits answered with HTTP429, JSON-RPC error-32029and aRetry-Afterheader. JSON-RPC batch arrays are refused with400. - Browsers. Desktop, CLI and server-side clients send no
Originheader and are not affected. A browser page may call the endpoint from an allowlisted AI-host origin, from bestprice.gr, or fromlocalhost(so MCP Inspector works in direct mode); any other origin gets403. - Authentication. The four shopping tools work without an account. Optional account
linking is scoped to
events:subscribe; protected-resource metadata is available at/.well-known/oauth-protected-resourceand/mcp/oauth-protected-resource. Events remains disabled during end-to-end qualification.
Developer quick start
Every client below connects to the same endpoint. Detailed, provider-specific
instructions including OpenAI, Grok, GitHub Copilot, 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:
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
Gemini CLI and Qwen Code
gemini extensions install https://github.com/TheBestCo/bestprice-mcp
qwen 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.
Self-hosted plugin marketplaces
The same repository can be added directly as a plugin marketplace, with no copied tool or Skill logic:
copilot plugin marketplace add TheBestCo/bestprice-mcp
copilot plugin install bestprice-shopping@bestprice
claude plugin marketplace add TheBestCo/bestprice-mcp
claude 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 a Streamable HTTP server at https://mcp.bestprice.gr/mcp. If the host only supports
stdio servers, use the bridge in this repository:
git clone https://github.com/TheBestCo/bestprice-mcp.git && cd bestprice-mcp
npm ci
node stdio.mjs
The bridge forwards everything to the public endpoint and accepts two environment
variables: BESTPRICE_MCP_URL (default: the public endpoint) and
BESTPRICE_MCP_TIMEOUT_MS (default: 60000). A Dockerfile builds the same bridge for
Glama and similar hosts.
A safe first conversation
- Ask for a decision:
Θέλω κινητό έως 500 ευρώ με NFC και 5G υποχρεωτικά.(I want a phone up to 500 euros, NFC and 5G required.) - Or search:
Find Sony WH-1000XM5 under 300 euros. - Pass a returned
product_idtocompare_offerswith postal code10558. - Pass the same
product_idtoget_price_historyfor 180 days.
Queries work in Greek or English. Result summaries, catalog data and merchant names come back in Greek.
| Search | Compare offers | Price history |
|---|---|---|
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.jsondescribes 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
npm ci
npm run check # Biome lint and format
npm 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.jsonand every plugin or extension manifest. It changes when this repository's manifests, bridge, or WebMCP layer change, and is taggedvX.Y.Z. - Server version in
server.jsonand 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
