Skip to main content
Glama

Frisco MCP

Ein TypeScript Model Context Protocol (MCP) Server, der es KI-Assistenten (Claude, Gemini usw.) ermöglicht, mit frisco.pl — Polens Online-Supermarkt — zu interagieren.

Sicherheit zuerst — Der Server speichert niemals Ihre E-Mail-Adresse oder Ihr Passwort. Sie melden sich manuell in einem sichtbaren Browserfenster an; nur Sitzungs-Cookies werden lokal gespeichert.

Beispiel: KI fügt Produkte von einer Einkaufsliste zum Frisco-Warenkorb hinzu


Funktionen

Sitzung

Tool

Beschreibung

login

Öffnet ein sichtbares Chromium-Fenster auf der Anmeldeseite. Sie melden sich manuell an; der Server prüft auf Erfolg und speichert Sitzungs-Cookies.

finish_session

Öffnet den Browser auf der Checkout-Seite, damit Sie ein Lieferzeitfenster wählen und bezahlen können. Keine automatische Zahlung.

clear_session

Schließt den Browser und löscht die gespeicherte Sitzungsdatei.

Warenkorb

Tool

Beschreibung

add_items_to_cart

Fügt Produkte zum Warenkorb hinzu. Unterstützt zwei Abläufe: (1) via productUrl — navigiert direkt zur Produktseite und klickt auf "Do koszyka"; (2) von der letzten search_products Ergebnisseite.

view_cart

Gibt den aktuellen Warenkorbinhalt und den Gesamtpreis zurück.

remove_item_from_cart

Entfernt ein bestimmtes Produkt anhand des Namens (teilweise Übereinstimmung) aus dem Warenkorb.

update_item_quantity

Ändert die Menge eines bereits im Warenkorb befindlichen Produkts (teilweise Namensübereinstimmung).

check_cart_issues

Erkennt ausverkaufte oder nicht verfügbare Produkte im Warenkorb und listet verfügbare Ersatzprodukte für jedes auf.

view_promotions

Zeigt aktive Werbeaktionen, Rabatte und Gesamteinsparungen im aktuellen Warenkorb an.

Produkte

Tool

Beschreibung

search_products

Durchsucht frisco.pl, gibt die Top N Ergebnisse mit Preisen/Verfügbarkeit zurück und speichert die Such-URL/den Kontext für das Hinzufügen zum Warenkorb.

get_product_info

Gibt detaillierte Produktinformationen zurück: Nährwerte (Makros pro 100g), Gewicht/Grammatur, Zutaten, Preis (einschließlich Originalpreis und Stückpreis bei Werbeaktionen).

get_product_reviews

Gibt Kundenbewertungen und Ratings (von Trustmate) für ein Produkt zurück.

Protokolle

Tool

Beschreibung

get_logs

Gibt JSONL-Protokollereignisse für die aktuelle oder eine bestimmte Sitzung zurück.

tail_logs

Gibt die N neuesten Protokollereignisse zurück.


Related MCP server: Rohlik MCP Server

Architektur

flowchart LR
    A[MCP Client / AI Assistant] -->|stdio| B[src/index.ts<br/>McpServer]

    B --> C[Session Tools<br/>src/tools/session.ts]
    B --> D[Cart Tools<br/>src/tools/cart.ts]
    B --> E[Product Tools<br/>src/tools/products.ts]

    C --> G[src/browser.ts<br/>Playwright singleton]
    D --> G
    E --> G

    C --> H[src/auth.ts<br/>session cookies]
    D --> H
    E --> H

    D --> I[src/tools/helpers.ts<br/>navigation, HTML parsing & formatters]
    E --> I

    H --> J[(~/.frisco-mcp/session.json)]
    B --> L[src/logger.ts] --> M[(~/.frisco-mcp/logs/)]
    G --> N[(in-memory lastSearchContext)]
    G --> K[frisco.pl 🌐]
    I --> K

Weitere Diagramme (Anmeldeablauf, Warenkorbablauf): docs/DIAGRAMS.md


Anforderungen

  • Node.js 20 oder neuer

  • Chromium für Playwright (installiert über den unten stehenden Setup-Befehl)


Einrichtung

npm install
npx playwright install chromium
npm run build

MCP-Client-Konfiguration

Der Server kommuniziert über stdio — verweisen Sie Ihren MCP-Client auf node dist/index.js.

Claude Desktop

Hinzufügen zu claude_desktop_config.json:

{
  "mcpServers": {
    "frisco": {
      "command": "node",
      "args": ["/absolute/path/to/frisco-mcp/dist/index.js"]
    }
  }
}

Gemini (Google AI Studio)

Die .gemini/settings.json in diesem Repository enthält bereits die Konfiguration:

{
  "mcpServers": {
    "frisco-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/frisco-mcp/dist/index.js"]
    }
  }
}

Cursor

Hinzufügen zu Ihren Cursor-MCP-Einstellungen (~/.cursor/mcp.json oder Workspace .cursor/mcp.json):

{
  "mcpServers": {
    "frisco": {
      "command": "node",
      "args": ["/absolute/path/to/frisco-mcp/dist/index.js"]
    }
  }
}

Hinweis: Ersetzen Sie den Pfad durch den absoluten Pfad zu dist/index.js auf Ihrem Computer.


Verwendung

1. Anmelden

"Melde mich bei Frisco an"

Das login-Tool öffnet ein Chromium-Fenster auf frisco.pl/login. Melden Sie sich manuell an — der Server wartet bis zu 5 Minuten und speichert Ihre Sitzungs-Cookies, sobald er eine erfolgreiche Anmeldung erkennt.

2. Einkaufen

"Finde mir Naturjoghurt"

Das search_products-Tool gibt eine Liste passender Produkte mit Preisen zurück. Nicht verfügbare Produkte sind mit ⚠️ NIEDOSTĘPNY gekennzeichnet. Es speichert auch die aktuelle Such-URL und den Ergebniskontext für nachfolgende Warenkorb-Operationen.

"Erzähl mir mehr über den PIĄTNICA Skyr"

Das get_product_info-Tool navigiert zur Produktseite und extrahiert detaillierte Informationen: Nährwerte (kcal, Protein, Fett, Kohlenhydrate, Zucker, Salz pro 100g), Gewicht/Grammatur, Zutaten, Preis (einschließlich Originalpreis und Stückpreis bei Werbeaktionen) sowie die Produkt-URL.

"In den Warenkorb legen"

Das add_items_to_cart-Tool unterstützt zwei Abläufe: (1) Wenn eine productUrl angegeben ist (z. B. von get_product_info), navigiert es direkt zu dieser Produktseite und klickt auf "Do koszyka" — dies ist der bevorzugte Ablauf; (2) andernfalls verwendet es die letzte search_products-Ergebnisseite, um das Produkt zu finden und hinzuzufügen.

"Entferne die Butter aus meinem Warenkorb"

Das remove_item_from_cart-Tool findet ein Produkt im Warenkorb anhand des Namens und entfernt es.

"Ändere die Milchmenge auf 3"

Das update_item_quantity-Tool findet das Produkt im Warenkorb und aktualisiert dessen Menge.

"Gibt es Probleme mit meinem Warenkorb?"

Das check_cart_issues-Tool durchsucht den Warenkorb nach ausverkauften Produkten und zeigt für jedes verfügbare Ersatzprodukte an.

"Welche Bewertungen hat Skyr Piątnica?"

Das get_product_reviews-Tool ruft Kundenbewertungen und Rezensionen von Trustmate ab.

"Zeige mir aktive Werbeaktionen in meinem Warenkorb"

Das view_promotions-Tool listet alle aktiven Werbeaktionen, Rabatt-Badges und Gesamteinsparungen auf.

3. Checkout

"Beende meine Frisco-Sitzung"

Das finish_session-Tool öffnet Ihren Warenkorb unter frisco.pl/stn,cart, damit Sie ein Lieferzeitfenster wählen und bezahlen können — der Server führt niemals automatisch eine Zahlung durch.


Projektstruktur

frisco-mcp/
├── src/
│   ├── index.ts          # MCP server setup, tool registration
│   ├── auth.ts           # Session cookie save/restore, login check
│   ├── browser.ts        # Playwright browser singleton, product cache, last search context
│   ├── logger.ts         # JSONL session logging
│   ├── types.ts          # Shared TypeScript types
│   └── tools/
│       ├── session.ts    # login, finish_session, clear_session
│       ├── cart.ts       # add_items_to_cart, view_cart, remove_item_from_cart,
│       │                 #   update_item_quantity, check_cart_issues, view_promotions
│       ├── products.ts   # search_products, get_product_info, get_product_reviews
│       └── helpers.ts    # Navigation, popup dismissal, DOM parsing, formatters
│   └── __tests__/        # Unit tests (Vitest)
├── test_data/            # Sample HTML fixtures for tests
│   └── products/         #   Product page HTMLs (skyr, chicken, bananas, eggs, bag, promotion)
├── docs/
│   └── DIAGRAMS.md       # Mermaid architecture & flow diagrams
├── .github/
│   └── workflows/
│       └── test.yml      # CI — runs tests on push & PR
├── dist/                 # Compiled JS (generated by `npm run build`)
├── vitest.config.ts
├── package.json
├── tsconfig.json
└── .gitignore

Datenspeicherung

Alle Benutzerdaten werden lokal unter ~/.frisco-mcp/ gespeichert:

Datei

Zweck

session.json

Gespeicherte Browser-Cookies (keine Anmeldedaten)

current-session.json

Zeiger auf die aktive Protokollsitzung

logs/<id>.jsonl

Sitzungsbezogene Ereignisprotokolle


Entwicklung

# Run in dev mode (tsx, no separate build step)
npm run dev

# Build
npm run build

# Run built server
npm start

# Run tests
npm test

# Watch mode for tests
npm run test:watch

CI

Tests werden automatisch bei jedem Push und Pull Request auf master über GitHub Actions (.github/workflows/test.yml) ausgeführt. Die Matrix testet gegen Node.js 20 und 22.


Tech-Stack

Bibliothek

Rolle

@modelcontextprotocol/sdk

MCP-Server-Framework

playwright

Browser-Automatisierung (Chromium)

cheerio

HTML-Parsing für Produktinfos

zod

Eingabe-Schema-Validierung

typescript

Sprache & Build

vitest

Unit-Test-Framework


Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.

Available Tools

10 tools
add_items_to_cartA

Searches for and adds a list of products to the cart. By default appends to current cart, optionally clearing it first.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesJSON array of items, e.g. [{"name":"Milk","searchQuery":"mleko 2l","quantity":2}]
clearCartFirstNoIf true, clears cart before adding items

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully documents the mutation semantics (append vs. replace via clearing) and hints at the internal search logic. However, it omits crucial operational details such as failure handling (partial vs. total failure), atomicity guarantees, authentication requirements, or return value structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two efficient, front-loaded sentences where every word earns its place. The first establishes the core operation and the second immediately clarifies default behavior and options, with no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 100% schema coverage, the description adequately covers the input contract. However, with no output schema and no annotations, it falls short of completeness by failing to describe return values, error conditions, or side effects that an agent would need to handle the tool invocation properly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the items parameter's JSON structure and the clearCartFirst boolean both well-documented in the schema. The description references the 'list of products' and 'clearing' behavior which map to parameters, but adds no additional syntax guidance or format details beyond what the schema already provides, warranting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('Searches for and adds') and clearly identifies the resource (cart). It effectively distinguishes this tool from siblings like search_products (which likely only returns results) by stating it performs both search and add operations, and implicitly contrasts with remove_item_from_cart and view_cart through its additive action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implicit usage guidance by explaining the default append behavior and the clearCartFirst option, which helps users decide when to set that flag. However, it lacks explicit comparisons to sibling tools—for example, when to use search_products alone versus this tool, or prerequisites like requiring login.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_sessionB

Clears the saved session and closes the browser.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully adds the 'closes the browser' side effect beyond the tool name, but fails to characterize the destructive nature of clearing session data (e.g., cart loss, logout state) or whether this action is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It is appropriately front-loaded with the most critical actions (clearing session, closing browser) stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter simplicity, the description covers the basic operation but remains incomplete regarding safety warnings. For a destructive operation that likely discards cart contents and authentication state, the lack of warnings about data loss or the relationship to 'login'/'finish_session' leaves gaps that could lead to agent errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, which per evaluation rules establishes a baseline score of 4. No parameter description is needed or expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('clears', 'closes') and resources ('saved session', 'browser') to define the action clearly. However, it does not explicitly differentiate from the sibling tool 'finish_session', leaving some ambiguity about when to prefer this tool over ending a session normally.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'finish_session' or 'login'. The description states what happens but not the conditions that should trigger its use (e.g., 'use when you need to reset state completely' or 'use before switching users').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finish_sessionA

Opens the browser at the checkout page so you can select a delivery time and pay.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It successfully discloses that the tool opens an external browser (significant side effect), but fails to clarify session lifecycle implications suggested by the name 'finish_session'—specifically whether the session terminates, cart clears, or if this action is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficiently structured sentence delivers all necessary information without redundancy. The action ('Opens the browser') is front-loaded, followed by location ('checkout page') and purpose ('select a delivery time and pay').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, no output schema) and the lack of annotations, the description provides adequate context for invocation. It explains the user-facing outcome (browser navigation to checkout) sufficiently for an agent to select this tool appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema contains zero parameters. According to the rubric, 0 parameters warrants a baseline score of 4. The description appropriately does not invent parameter semantics where none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Opens the browser') and resource ('checkout page') to clearly identify this as the payment finalization step. It effectively distinguishes itself from sibling cart management tools (add_items_to_cart, view_cart, clear_session) by specifying the checkout context and payment intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so you can select a delivery time and pay' implies this is for the final purchase phase, providing implicit context for when to use it. However, it lacks explicit prerequisites (e.g., 'use after adding items to cart') or guidance on when not to use it (e.g., empty cart scenarios).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_logsB

Returns persisted JSONL log events for the current or selected session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoOptional session ID, defaults to current session
limitNoMax number of events to return (default 200, max 2000)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. While it reveals the data format (JSONL) and persistence nature, it lacks critical behavioral context: it does not confirm read-only safety, specify event ordering (chronological vs reverse), or explain error cases (e.g., invalid sessionId).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant words. It front-loads the action ('Returns') and immediately specifies the resource and format, making optimal use of limited space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool without an output schema, the description adequately covers the core function but leaves gaps. It should disclose behavioral traits (ordering, read-only nature) and clarify the relationship to 'tail_logs' given the sibling tool context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description adds minimal value beyond the schema, though it does reinforce the 'current session' default behavior mentioned in the sessionId parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and clearly identifies the resource ('persisted JSONL log events') and scope ('current or selected session'). The term 'persisted' implicitly distinguishes this from the sibling 'tail_logs', though it could be more explicit about this distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'tail_logs', nor does it mention prerequisites or when not to use it. The only usage hint is the implicit session selection behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_product_infoA

Gets detailed info for a product: nutritional values (macros per 100g), weight/grammage, ingredients, and price.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesProduct name or search query

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses what data is returned (macros, ingredients, price), which adds value, but omits read-only status, error handling behavior (e.g., what happens if product not found), or rate limiting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, efficient sentence with action front-loaded ('Gets detailed info') followed by colon-separated enumeration of return fields. Every word serves a purpose; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description effectively compensates by listing the specific data fields returned. However, it lacks error handling documentation and explicit differentiation from 'search_products' which would prevent misuse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the 'query' parameter is fully described as 'Product name or search query'), establishing a baseline of 3. The description focuses entirely on output semantics and adds no additional context about the input parameter syntax or format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Gets' with resource 'detailed info for a product' and enumerates exact data fields returned (nutritional values, weight, ingredients, price). The specificity distinguishes it from sibling 'search_products' (detailed single product lookup vs. search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance provided on when to use this versus sibling 'search_products' or prerequisites like authentication. The description implies usage but never states explicit conditions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginA

Opens a visible Chromium browser to log in to Frisco manually. Run this first to establish a session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral disclosure burden. It effectively reveals that the browser is visible (not headless), requires manual user interaction ('manually'), and creates persistent state ('establish a session'). Could clarify blocking behavior or timeouts, but covers the critical UX aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: first defines the action and mechanics, second gives clear temporal guidance. Appropriately front-loaded and sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description adequately covers the tool's essential behavior for an authentication utility. Explains the visible browser mechanism and session outcome sufficiently for tool selection, though success/failure indicators could be added.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters present; per rubric guidelines, this merits baseline score of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly specifies the action (opens visible Chromium browser), target (Frisco), and interaction mode (manual login). It distinguishes from siblings by focusing on session establishment rather than cart operations or product queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit sequencing guidance ('Run this first to establish a session'), clearly indicating this is a prerequisite step. Lacks explicit 'when-not-to-use' guidance (e.g., when already logged in) or alternatives, but the 'first' instruction provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_item_from_cartA

Removes a specific product from the Frisco cart by name (partial match supported).

ParametersJSON Schema
NameRequiredDescriptionDefault
productNameYesFull or partial name of the product to remove

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. While it discloses partial-matching capability, it omits critical behavioral details for a destructive operation: error handling when product not found, behavior when multiple products match the partial string, and whether removal is immediate/reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action verb, zero redundant words. 'Frisco cart' provides necessary domain context without verbosity. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a single-parameter tool with simple intent, but insufficient for a destructive operation lacking annotations. Missing edge-case behavior (multiple matches, non-existent products) that would complete the agent's understanding of outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (productName fully described). The description reinforces the partial-match semantics but adds no additional syntax guidance, format examples, or validation rules beyond the schema. Baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Excellent specificity: 'Removes' (verb) + 'product from the Frisco cart' (resource) + 'by name (partial match supported)' (mechanism). The 'Frisco' qualifier and partial-match detail distinguish it from generic cart operations and potential ID-based alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage context ('specific product') suggesting use when targeting a single item versus bulk operations. However, lacks explicit guidance on when to prefer this over clear_session (which clears everything) or how to handle ambiguous partial matches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsA

Searches frisco.pl for products and returns top matches with prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesProduct name to search for
topNNoNumber of results to return (default 5)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It successfully identifies the external dependency ('frisco.pl') and return data content ('prices'), but omits operational details like rate limits, authentication requirements, or behavior when no matches are found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant words. It front-loads the action (searches), specifies the domain (frisco.pl), and concludes with the return value (matches with prices), demonstrating excellent information density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter search tool without output schema, the description adequately covers the essential behavior. It appropriately mentions price data (critical for shopping context) but could strengthen completeness by hinting that results likely include product identifiers needed for sibling cart operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both 'query' and 'topN' fully documented in the input schema. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline expectation for high-coverage schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description provides a specific verb ('Searches'), resource ('frisco.pl for products'), and output details ('returns top matches with prices'). It clearly distinguishes from sibling 'get_product_info' by emphasizing the search/matching functionality rather than specific product lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (finding products with prices) but provides no explicit when-to-use guidance or comparison to alternatives like 'get_product_info'. The agent must infer that this is for discovery while 'get_product_info' is for specific product details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tail_logsB

Returns the most recent events from persisted session logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoOptional session ID, defaults to current session
linesNoHow many latest events to return (default 50, max 500)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'persisted' (indicating storage durability) and 'events' (hinting at data structure), but fails to disclose read-only safety, authentication requirements, rate limits, or return format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of a single, efficient sentence that front-loads the action verb. There is no redundant or wasted language; every word contributes to understanding the tool's core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (two primitive parameters, no nesting) and absence of an output schema, the description provides minimum viable context. It adequately explains what the tool retrieves but leaves gaps regarding the event data structure and operational constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both parameters ('sessionId' and 'lines'), establishing a baseline score. The description itself adds no explicit parameter semantics, relying entirely on the schema documentation to explain the optional session ID and line count constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and clearly identifies the resource ('most recent events from persisted session logs'). The phrase 'most recent' effectively distinguishes this from the sibling 'get_logs' tool, though it doesn't explicitly name that alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus the sibling 'get_logs' or other alternatives. While 'most recent' implies a use case for recent log inspection, there are no stated prerequisites, exclusions, or selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_cartA

Returns the current contents and total of the Frisco cart.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully indicates what data is returned ('contents and total'), compensating for the lack of output schema. However, it omits explicit confirmation that this is a safe read-only operation or any rate limit considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It is front-loaded with the action verb and immediately specifies the return value scope ('contents and total'), making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (zero parameters, simple read operation) and absence of an output schema, the description adequately compensates by specifying the return payload ('contents and total'). It could be improved by mentioning the data format or whether the cart might be empty, but it meets the minimum requirements for this tool type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, which per guidelines establishes a baseline of 4. The description appropriately requires no additional parameter context since the schema is trivially complete at 100% coverage with no properties to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Returns' and clearly identifies the resource as 'current contents and total of the Frisco cart.' It effectively distinguishes from siblings like search_products (catalog search) and get_product_info (product metadata) by focusing on the cart state specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While there are no explicit when-to-use instructions, the verb 'Returns' combined with sibling tools using distinct action verbs (add_items_to_cart, remove_item_from_cart) provides clear implied usage. However, it lacks explicit guidance on when to prefer this over finish_session or clear_session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.0.0
    • First observedadd_items_to_cart
    • First observedclear_session
    • First observedfinish_session
    • First observedget_logs
    • First observedget_product_info
    • First observedlogin
    • First observedremove_item_from_cart
    • First observedsearch_products
    • First observedtail_logs
    • First observedview_cart

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation4/5

Most tools are clearly distinct: search_products vs get_product_info, add_items_to_cart vs view_cart vs remove_item_from_cart. The only real overlap is get_logs vs tail_logs, both returning persisted log events, though the descriptions (all events vs most recent) provide some separation.

Naming Consistency5/5

Tool names consistently follow a verb_noun snake_case pattern: get_logs, tail_logs, finish_session, clear_session, add_items_to_cart, search_products, get_product_info, remove_item_from_cart, view_cart. Even 'login' fits the simple verb style without breaking the pattern.

Tool Count5/5

10 tools is well-scoped for an online grocery automation server. Each tool maps to a clear workflow stage: session management, product discovery, cart manipulation, and checkout handoff. No redundant or superfluous tools.

Completeness4/5

The core shopping lifecycle is covered: login, search products, inspect product details, add/remove/view cart, and finish session for checkout. Minor gaps exist, such as no explicit quantity adjustment or standalone clear-cart tool, but add_items_to_cart's optional clearing and the manual checkout flow mitigate most dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Rohlik Group's online grocery delivery services across multiple European countries, supporting product search, shopping cart management, order history analysis, and personalized meal suggestions based on purchase patterns.
    59 npm
    3
    MIT