Skip to main content
Glama

Frisco MCP

一个 TypeScript 模型上下文协议 (MCP) 服务器,允许 AI 助手(Claude、Gemini 等)与 frisco.pl(波兰的在线杂货店)进行交互。

安全第一 — 该服务器绝不会存储您的电子邮件或密码。您可以在可见的浏览器窗口中手动登录;仅会话 cookie 会在本地持久化。

示例:AI 将购物清单中的产品添加到 Frisco 购物车


功能

会话

工具

描述

login

在登录页面打开一个可见的 Chromium 窗口。您手动登录;服务器会轮询登录成功状态并保存会话 cookie。

finish_session

在结账页面打开浏览器,以便您可以选择送货时段并付款。无自动付款功能。

clear_session

关闭浏览器并删除保存的会话文件。

购物车

工具

描述

add_items_to_cart

将产品添加到购物车。支持两种流程:(1) 通过 productUrl — 直接导航到产品页面并点击“Do koszyka”;(2) 从最新的 search_products 结果页面添加。

view_cart

返回当前购物车内容和总价。

remove_item_from_cart

按名称(部分匹配)从购物车中移除特定产品。

update_item_quantity

更改购物车中已有产品的数量(部分名称匹配)。

check_cart_issues

检测购物车中售罄或不可用的产品,并列出每种产品的可用替代品。

view_promotions

显示当前购物车中的活动促销、折扣和总节省金额。

产品

工具

描述

search_products

搜索 frisco.pl,返回前 N 个结果及其价格/可用性,并保存搜索 URL/上下文以供后续添加到购物车。

get_product_info

返回详细的产品信息:营养价值(每 100 克宏量营养素)、重量/克数、成分、价格(包括原价和促销时的单价)。

get_product_reviews

返回产品的客户评论和评分(来自 Trustmate)。

日志

工具

描述

get_logs

返回当前或特定会话的 JSONL 日志事件。

tail_logs

返回最近的 N 个日志事件。


Related MCP server: Rohlik MCP Server

架构

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

更多图表(登录流程、购物车流程):docs/DIAGRAMS.md


要求

  • Node.js 20 或更高版本

  • Chromium(用于 Playwright,通过下方的安装命令安装)


设置

npm install
npx playwright install chromium
npm run build

MCP 客户端配置

服务器通过 stdio 进行通信 — 将您的 MCP 客户端指向 node dist/index.js。

Claude Desktop

添加到 claude_desktop_config.json:

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

Gemini (Google AI Studio)

此仓库中的 .gemini/settings.json 已经包含了配置:

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

Cursor

添加到您的 Cursor MCP 设置中(~/.cursor/mcp.json 或工作区 .cursor/mcp.json):

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

注意: 将路径替换为您机器上 dist/index.js 的绝对路径。


使用方法

1. 登录

“帮我登录 Frisco”

login 工具会在 frisco.pl/login 打开一个 Chromium 窗口。手动登录 — 服务器最多等待 5 分钟,并在检测到成功登录后保存您的会话 cookie。

2. 购物

“帮我找天然酸奶”

search_products 工具返回匹配的产品列表及其价格。不可用的产品会标记为 ⚠️ NIEDOSTĘPNY。它还会保存当前的搜索 URL 和结果上下文,以供后续购物车操作使用。

“告诉我更多关于 PIĄTNICA Skyr 的信息”

get_product_info 工具导航到产品页面并提取详细信息:营养价值(每 100 克的千卡、蛋白质、脂肪、碳水化合物、糖、盐)、重量/克数、成分、价格(包括原价和促销产品的单价)以及产品 URL。

“把它加到购物车”

add_items_to_cart 工具支持两种流程:(1) 如果提供了 productUrl(例如来自 get_product_info),它会直接导航到该产品页面并点击“Do koszyka” — 这是首选流程;(2) 否则,它会使用最新的 search_products 结果页面来查找并添加产品。

“把黄油从我的购物车里移除”

remove_item_from_cart 工具通过名称在购物车中查找产品并将其移除。

“把牛奶数量改为 3”

update_item_quantity 工具在购物车中查找产品并更新其数量。

“我的购物车有什么问题吗?”

check_cart_issues 工具扫描购物车中的售罄产品,并为每种产品显示可用的替代品。

“Skyr Piątnica 有什么评价?”

get_product_reviews 工具从 Trustmate 获取客户评分和评论。

“显示我购物车里的活动促销”

view_promotions 工具列出所有活动促销、折扣徽章和总节省金额。

3. 结账

“结束我的 Frisco 会话”

finish_session 工具在 frisco.pl/stn,cart 打开您的购物车,以便您可以选择送货时段并付款 — 服务器绝不会自动执行付款。


项目结构

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

数据存储

所有用户数据都存储在本地的 ~/.frisco-mcp/ 中:

文件

用途

session.json

保存的浏览器 cookie(无凭据)

current-session.json

指向活动日志会话的指针

logs/<id>.jsonl

每个会话的事件日志


开发

# 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

测试通过 GitHub Actions (.github/workflows/test.yml) 在每次 push 和 pull request 到 master 时自动运行。矩阵测试针对 Node.js 20 和 22。


技术栈

库

角色

@modelcontextprotocol/sdk

MCP 服务器框架

playwright

浏览器自动化 (Chromium)

cheerio

用于产品信息的 HTML 解析

zod

输入模式验证

typescript

语言与构建

vitest

单元测试框架


许可证

本项目采用 MIT 许可证 授权。

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