webhallen-mcp
webhallen-mcp
用于与 Webhallen 交互的 MCP 服务器。搜索产品并管理共享愿望清单(önskelistor)——专为共享的办公室购物清单而设计。
它使用纯 HTTP 调用(无浏览器依赖),因此可被后台智能体使用。
工具
工具 | 需要身份验证 | 描述 |
| - | 使用用户名/密码登录 |
| - | 按关键词搜索产品(返回 ID、名称、价格、库存) |
| - | 获取指定 ID 产品的详细信息 |
| ✓ | 列出你的所有愿望清单及其内容 |
| ✓ | 获取特定愿望清单的内容 |
| ✓ | 创建新的愿望清单(例如“Kontoret Inköpslista”) |
| ✓ | 将产品添加到愿望清单 |
| ✓ | 删除愿望清单 |
Related MCP server: Bring! Shopping MCP Server
身份验证
两个选项:
选项 A:环境变量(推荐用于后台智能体)
设置 WEBHALLEN_USERNAME 和 WEBHALLEN_PASSWORD。服务器会在第一次经过身份验证的请求时自动登录。
选项 B:登录工具
使用用户名和密码调用 login 工具。会话在服务器生命周期内保存在内存中。
选项 C:现有会话 Cookie
将 WEBHALLEN_COOKIES 设置为从浏览器会话中提取的 webhallen_session=... cookie 值。如果你已有有效会话并希望避免发送凭据,请使用此选项。
搜索无需身份验证即可使用;愿望清单操作则需要身份验证。
安装
构建
cd webhallen-mcp
npm install
npm run build在 opencode 中配置
添加到你的 opencode.json:
{
"mcp": {
"webhallen": {
"command": "node",
"args": ["/path/to/webhallen-mcp/dist/index.js"],
"env": {
"WEBHALLEN_USERNAME": "your_username",
"WEBHALLEN_PASSWORD": "your_password"
}
}
}
}使用的 API 端点
端点 | 方法 | 身份验证 | 用途 |
| POST | - | 使用用户名/密码进行身份验证 |
| GET | ✓ | 当前用户信息 |
| GET | - | 产品搜索 |
| GET | - | 按类别浏览 |
| GET | ✓ | 列出所有愿望清单 |
| POST | ✓ | 创建愿望清单 |
| PUT | ✓ | 将产品添加到愿望清单 |
| DELETE | ✓ | 删除愿望清单 |
使用示例
向智能体提问:
“在 Webhallen 上搜索 Nintendo Switch 2”
“创建一个名为 Kontoret Inköpslista 的愿望清单”
“将产品 378404 添加到愿望清单”
“查看所有愿望清单”
Available Tools
8 toolsadd_to_wishlistA
Add a product to a Webhallen wishlist. Use search_products first if you need the product ID. Use create_wishlist first if the list doesn't exist yet.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | If wishlist doesn't exist, create one with this name | |
| productId | Yes | Product ID to add | |
| wishlistId | No | Wishlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the basic add action and prerequisite workflow, but it does not mention authentication requirements, duplicate behavior, whether the tool can auto-create a wishlist, or what happens if wishlistId is omitted. The internal contradiction between the description and the schema's name parameter further reduces transparency.
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, no wasted words. The core action is front-loaded, and the prerequisite guidance follows naturally. It is concise without being under-specified in structure.
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 write operation with no annotations and no output schema, the agent needs more information about auth, how to choose between wishlistId and name, and duplicate handling. The description mentions key prerequisite tools but leaves the auto-create ambiguity unresolved, so it is not complete enough for confident invocation.
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%, so the baseline is 3. The description adds useful practical context for productId by pointing to search_products, but it does not clarify the relationship between wishlistId and name, leaving the schema to carry most parameter meaning.
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 states a specific verb and resource: add a product to a Webhallen wishlist. It is clearly distinguished from sibling tools like create_wishlist, delete_wishlist, and list_wishlists because the action is item-level addition rather than list management.
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 explicitly names two sibling tools and their preconditions: use search_products to get the product ID and use create_wishlist if the list does not exist. However, the input schema's name parameter says 'If wishlist doesn't exist, create one with this name,' which slightly conflicts with the instruction to use create_wishlist first, muddying when this tool should create versus only add.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wishlistA
Create a new Webhallen wishlist (önskelista). Use this to create a shared shopping list for the office.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the wishlist |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions creating a wishlist and an office use case, but does not disclose required authentication, ownership, visibility/sharing behavior, or what happens after creation.
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 two concise sentences with no filler. The main action is front-loaded, and the use case is stated immediately afterward.
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?
The tool is simple with one documented parameter, but the absence of annotations and an output schema leaves gaps around whether login is required and what the response will contain. These are relevant for a create operation, so the description is only minimally complete.
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%, and the single parameter 'name' is already described in the schema as 'Name for the wishlist'. The tool description adds no additional parameter semantics, so the baseline score of 3 is 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?
The description clearly states a specific action ('Create a new Webhallen wishlist') and even includes the Swedish term 'önskelista' for clarity. This distinguishes it from sibling tools like list_wishlists, get_wishlist, add_to_wishlist, and delete_wishlist.
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 'Use this to create a shared shopping list for the office' gives a clear use case and context. It does not explicitly mention alternatives or exclusions, such as 'use add_to_wishlist to add items', so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_wishlistA
Delete a Webhallen wishlist and all its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| wishlistId | Yes | Wishlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing destructive behavior. It does so clearly by warning that the wishlist and all its contents will be deleted, which is a meaningful behavioral disclosure beyond the bare word 'delete'.
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, front-loaded sentence with no redundant wording. Every word adds value by specifying the action, the resource, and the destructive scope.
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 one-parameter destructive tool with no output schema, the description sufficiently communicates the core behavior and scope. It does not discuss error cases or permissions, but these are less critical given the tool's simplicity.
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%, and the schema already documents wishlistId as a number. The description adds no new parameter semantics, so the baseline of 3 applies.
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 clearly states the verb 'Delete', the resource 'Webhallen wishlist', and the scope 'all its contents', making it immediately distinguishable from siblings like list_wishlists, create_wishlist, and add_to_wishlist.
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 gives no explicit guidance about when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. It relies entirely on the tool name and an implicit interpretation of 'Delete'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productA
Get details about a specific Webhallen product by ID. Useful for verifying product info before adding to a shared wishlist.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | Webhallen product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' makes the read-only nature evident, and the second sentence clarifies that the result provides product information for verification. It does not discuss error behavior or authentication, but for a simple single-ID lookup the essential behavioral contract is clear.
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 short sentences with no filler. The core action and scope are front-loaded, and the second sentence adds a practical usage context that helps an agent decide when to invoke the tool.
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 one-parameter read tool with a fully described schema, this description provides enough context to call it correctly. It is slightly incomplete because there is no output schema and no note about failure behavior or returned data shape, but the simplicity of the operation limits the impact.
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 schema covers the only parameter, productId, with a description already. The tool description only repeats the 'by ID' concept and adds no new semantic detail such as format, constraints, or source information, so it stays at the baseline for full schema coverage.
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?
States a specific verb and resource: 'Get details about a specific Webhallen product by ID.' It is clearly distinguishable from the sibling search_products, which is about discovering products rather than retrieving one exact product by ID.
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?
Gives a concrete use case: verifying product info before adding to a shared wishlist. It does not explicitly say when not to use it or name alternatives, but the context is clear enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wishlistA
Get the contents of a specific wishlist by ID. Shows all products in the shared shopping list.
| Name | Required | Description | Default |
|---|---|---|---|
| wishlistId | Yes | Wishlist ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It communicates read-only intent and that all products are returned, but it does not cover error behavior, permissions, pagination, or response 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?
Two short sentences with no fluff. The core action and target are front-loaded, and the second sentence adds useful output context. Every word 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?
For a one-parameter read operation, the description is adequate for understanding what the tool does and what it returns. However, with no output schema and no annotations, details like return format, failure behavior, and required auth are missing.
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%, and the description adds no additional parameter meaning beyond what the schema already provides. The schema already documents wishlistId as 'Wishlist ID'.
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?
States a specific verb ('Get'), a clear resource ('specific wishlist'), and the retrieval key ('by ID'), and clarifies output ('contents...all products'). This distinguishes it from siblings like list_wishlists and get_product.
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 'by ID' phrasing implies this is for retrieving one known wishlist rather than enumerating wishlists, but it does not explicitly state when to prefer this over list_wishlists or other siblings. No exclusion or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wishlistsA
List all your Webhallen wishlists (önskelistor) with their IDs and contents. This shows the shared shopping lists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It communicates a read-only listing operation and promises IDs/contents, but it does not disclose login requirements, empty-result behavior, or what 'shared' means for visibility and access. This is not ideal but is adequate for a simple list operation.
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 first sentence is concise and informative. The second sentence, 'This shows the shared shopping lists,' is largely redundant with the first and introduces ambiguity about whether the lists are personal or shared, so not every sentence 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?
For a parameterless listing tool with no output schema, the description is nearly complete: it names the resources, the scope ('all'), and the important returned fields (IDs and contents). The main soft spot is the unresolved 'shared shopping lists' phrasing and the lack of an explicit authentication note, but overall the description is sufficient for correct invocation.
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 and schema coverage is 100%, so there is no parameter burden on the description. With 0 parameters, the baseline is 4; no parameter information is missing or unclear.
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?
States a specific verb ('List'), resource ('all your Webhallen wishlists'), and the returned data ('IDs and contents'). The qualifier 'all' clearly distinguishes it from get_wishlist, which presumably targets a single wishlist.
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 intended usage is implied: use this tool when you need the full set of wishlists rather than one specific list. However, it does not explicitly name get_wishlist as the single-list alternative or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginA
Log in to Webhallen with username and password. Required before using wishlist tools. Alternatively set WEBHALLEN_USERNAME and WEBHALLEN_PASSWORD env vars.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | Webhallen password | |
| username | Yes | Webhallen username or email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only states the action and prerequisite. It does not disclose session/credential behavior, side effects, failure modes, or how the env-var alternative interacts with a login call.
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?
Three short sentences front-load the purpose, then add the prerequisite and the env-var alternative with no wasted words.
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 two-parameter auth tool, the description covers what it does, when it is needed, and an alternative setup. It omits response/error behavior, but no output schema exists and the usage context is otherwise clear enough.
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%, so the parameter descriptions already document both username and password. The tool description adds no additional parameter-level context beyond restating that login uses them, keeping this at baseline.
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?
States a specific verb ('Log in') and resource ('Webhallen'), and clearly frames it as an authentication step distinct from the sibling wishlist/product tools. An agent can immediately tell this is the auth gate, not a data operation.
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?
Explicitly says this is required before using wishlist tools and offers an alternative (setting environment variables) that avoids the call. It does not enumerate when-not-to-use cases beyond the env-var alternative, but the auth context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsA
Search for products on Webhallen by keyword. Returns product list with IDs, names, prices, and stock info. Use the product IDs with add_to_wishlist. Does not require login.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| query | Yes | Search query | |
| categoryId | No | Optional category ID to search within |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does disclose the returned fields and that login is not required, which is useful. However, it doesn't mention pagination behavior, result limits, or that this is a read-only operation, leaving some behavioral gaps.
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?
Three short sentences, each earning its place: what the tool does, what it returns, and what to do with the results. The most important facts are front-loaded and there is no 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 three parameters, no output schema, and no annotations, the description is fairly complete. It explains return values, the workflow with add_to_wishlist, and authentication. Minor omissions like pagination limits or default category behavior prevent a 5.
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%, so the baseline is 3. The description confirms 'query' means keyword and adds the purpose of the returned product IDs, but it doesn't add significant new meaning to 'page' or 'categoryId' beyond what the schema already documents.
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 states a specific verb ('Search'), a resource ('products on Webhallen'), and the result shape ('product list with IDs, names, prices, and stock info'). This clearly differentiates it from the sibling get_product, which implies fetching a single product, and from wishlist operations.
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 gives clear context: search by keyword to get product IDs for use with add_to_wishlist, and notes that no login is required. It doesn't explicitly list when not to use the tool, but the purpose is sufficiently scoped that an agent can infer the intended trigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are clearly separated by resource and action: product search/detail, wishlist lifecycle, and auth. The only real ambiguity is list_wishlists versus get_wishlist, since both return wishlist contents, though one is all lists and the other is a specific list; the descriptions mostly clarify this.
All tool names use lowercase snake_case with a verb-first style. Product and wishlist CRUD tools follow a verb_noun pattern, while login and add_to_wishlist are minor deviations but still clear and predictable.
8 tools is well-scoped for a Webhallen wishlist integration: auth, product lookup, and wishlist CRUD each have a clear place. There is no unnecessary duplication or bloat.
The surface covers login, product search/detail, and create/get/list/delete wishlists, with add_to_wishlist for populating a list. However, there is no remove_from_wishlist or update wishlist metadata, so agents cannot correct mistakes or rename lists—a notable lifecycle gap.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Routes natural-language shopping queries to merchant storefronts, returns normalized results.
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
AI shopping gateway for product search, inventory, carts, and merchant-hosted checkout.
AI-powered product search, affiliate links, and price negotiation for e-commerce platforms
Related MCP Servers
- FlicenseBqualityCmaintenanceEnables AI assistants to interact with Mathem.se, a Swedish online grocery store, allowing users to search for ingredients, add items to their shopping basket, and manage recipes through natural language.42
- AlicenseNot gradedqualityAmaintenanceEnables interaction with Bring! shopping lists through natural language, allowing users to manage shopping items, lists, and collaborate with other users via the unofficial Bring! API.20127MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables agentic grocery shopping on Oda (Norway) and Mathem (Sweden) platforms through an MCP-compatible interface. Users can search for products, manage their shopping cart, and access order history using natural language commands.1
- FlicenseAqualityDmaintenanceEnables natural language shopping through Walmart's backend API, supporting product discovery, cart management, coupon handling, and order history.102
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/irony/webhallen-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server