Systembolaget API MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SYSTEMBOLAGET_SUBSCRIPTION_KEY | Yes | Your Systembolaget API subscription key |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_productsA | Search Systembolaget (Swedish liquor store) products by product launch date range. Fetches all pages automatically and returns the combined result. Returns products that have a launch date between launch_date_min and launch_date_max. By default returns a compact response (metadata + key product fields only). Set full_response=True to get the complete API-style response (all fields, filters, etc.). Args: launch_date_min: Start of launch date range (YYYY-MM-DD). Maps to productLaunch.min. launch_date_max: End of launch date range (YYYY-MM-DD). Maps to productLaunch.max. size: Page size used when fetching (default 100). All pages are fetched automatically. sort_by: Sort field (e.g. "Score"). Default "Score". sort_direction: "Ascending" or "Descending". Default "Ascending". assortment_text: Assortment filter (e.g. "Tillfälligt sortiment"). Default "Tillfälligt sortiment". full_response: If False (default), return only metadata and key product fields for speed. If True, return the full response structure (all fields, filters, etc.). Returns: By default: metadata (docCount, totalPages, nextPage, previousPage) and products with productId, productNameBold, productNameThin, producerName, price, volume, volumeText, alcoholPercentage, country, categoryLevel1, customCategoryTitle, assortmentText, productLaunchDate, taste, usage, vintage. If full_response=True, the complete response with all products and filters is returned. |
| list_products_formattedA | Search products by launch date and return a ready-to-use list of formatted lines. All filtering and formatting is done inside the MCP (no client-side parsing needed). Fetches all pages automatically so the list is complete. Use product_filter="beer" to get only products where CategoryLevel1 is "Öl", or product_filter="all" to get every product in the same format. Each line is "Product Name — volume, alcohol%". Args: launch_date_min: Start of launch date range (YYYY-MM-DD). launch_date_max: End of launch date range (YYYY-MM-DD). product_filter: "beer" (default) returns only products with CategoryLevel1 "Öl"; "all" returns every product. size: Page size when fetching (default 100). All pages are fetched automatically. sort_by: Sort field. Default "Score". sort_direction: "Ascending" or "Descending". Default "Ascending". assortment_text: Assortment filter. Default "Tillfälligt sortiment". Returns: Sorted unique list of strings, e.g. ["Vreta klosters Våröl — 330 ml, 5.6%", ...]. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 2 tools
Both tools perform the same core operation — searching products by launch date range with identical arguments (size, sort_by, sort_direction, assortment_text) and the same auto-pagination behavior. The only real difference is output formatting (raw structured data vs. pre-formatted strings), which makes list_products_formatted a redundant variant of search_products rather than a distinct capability.
Both names are snake_case with a verb_noun shape, which is readable and consistent in style. However, the verbs diverge ('search' vs 'list') despite the tools doing the same underlying search, which weakens predictability about which tool to pick for a lookup.
Two tools is thin for a product catalog API, but the second is a formatting convenience wrapper rather than a genuinely separate function, so the effective surface is closer to one tool with a format flag. This is borderline rather than severely mismatched.
The surface only supports launch-date-range queries and cannot search by name, producer, category, price, or alcohol content, and there is no get-by-ID, store lookup, or stock/availability tool — all core to the Systembolaget domain. Agents would hit dead ends for most real product-lookup tasks.