Frisco MCP
Frisco MCP
一个 TypeScript 模型上下文协议 (MCP) 服务器,允许 AI 助手(Claude、Gemini 等)与 frisco.pl(波兰的在线杂货店)进行交互。
安全第一 — 该服务器绝不会存储您的电子邮件或密码。您可以在可见的浏览器窗口中手动登录;仅会话 cookie 会在本地持久化。

功能
会话
工具 | 描述 |
| 在登录页面打开一个可见的 Chromium 窗口。您手动登录;服务器会轮询登录成功状态并保存会话 cookie。 |
| 在结账页面打开浏览器,以便您可以选择送货时段并付款。无自动付款功能。 |
| 关闭浏览器并删除保存的会话文件。 |
购物车
工具 | 描述 |
| 将产品添加到购物车。支持两种流程:(1) 通过 |
| 返回当前购物车内容和总价。 |
| 按名称(部分匹配)从购物车中移除特定产品。 |
| 更改购物车中已有产品的数量(部分名称匹配)。 |
| 检测购物车中售罄或不可用的产品,并列出每种产品的可用替代品。 |
| 显示当前购物车中的活动促销、折扣和总节省金额。 |
产品
工具 | 描述 |
| 搜索 frisco.pl,返回前 N 个结果及其价格/可用性,并保存搜索 URL/上下文以供后续添加到购物车。 |
| 返回详细的产品信息:营养价值(每 100 克宏量营养素)、重量/克数、成分、价格(包括原价和促销时的单价)。 |
| 返回产品的客户评论和评分(来自 Trustmate)。 |
日志
工具 | 描述 |
| 返回当前或特定会话的 JSONL 日志事件。 |
| 返回最近的 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 buildMCP 客户端配置
服务器通过 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/ 中:
文件 | 用途 |
| 保存的浏览器 cookie(无凭据) |
| 指向活动日志会话的指针 |
| 每个会话的事件日志 |
开发
# 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:watchCI
测试通过 GitHub Actions (.github/workflows/test.yml) 在每次 push 和 pull request 到 master 时自动运行。矩阵测试针对 Node.js 20 和 22。
技术栈
库 | 角色 |
MCP 服务器框架 | |
浏览器自动化 (Chromium) | |
用于产品信息的 HTML 解析 | |
输入模式验证 | |
语言与构建 | |
单元测试框架 |
许可证
本项目采用 MIT 许可证 授权。
Available Tools
10 toolsadd_items_to_cartA
Searches for and adds a list of products to the cart. By default appends to current cart, optionally clearing it first.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | JSON array of items, e.g. [{"name":"Milk","searchQuery":"mleko 2l","quantity":2}] | |
| clearCartFirst | No | If true, clears cart before adding items |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Optional session ID, defaults to current session | |
| limit | No | Max number of events to return (default 200, max 2000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Product name or search query |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| productName | Yes | Full or partial name of the product to remove |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Product name to search for | |
| topN | No | Number of results to return (default 5) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Optional session ID, defaults to current session | |
| lines | No | How many latest events to return (default 50, max 500) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v1.0.0- First observed
add_items_to_cart - First observed
clear_session - First observed
finish_session - First observed
get_logs - First observed
get_product_info - First observed
login - First observed
remove_item_from_cart - First observed
search_products - First observed
tail_logs - First observed
view_cart
TDQS
Scored across 10 tools
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.
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.
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.
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
Related MCP Connectors
Turn any shopping list into a ready-to-checkout grocery cart across 26 European supermarkets.
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceProvides automated shopping capabilities for the Shufersal website using Puppeteer, enabling LLMs to search products, create shopping lists, and add items to shopping carts.19-
- AlicenseNot gradedqualityDmaintenanceEnables 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 npm3MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search for products, manage shopping carts, and place grocery orders on Instacart using browser automation. It includes comprehensive tools for store discovery, product searching, and secure checkout with explicit user confirmation.1149 npm10MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage HelloFresh meal kit accounts by browsing menus, selecting recipes, and modifying delivery schedules. It supports updating dietary preferences, managing subscriptions, and rating past orders through Playwright-based browser automation.1213 npm2MIT