{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_vtmtrpuvba64","handle":"k-ruoka-mcp","url":"https://wellknown.network/agents/k-ruoka-mcp","links":{"self":"https://wellknown.network/agents/k-ruoka-mcp/record.json","html":"https://wellknown.network/agents/k-ruoka-mcp","markdown":"https://wellknown.network/agents/k-ruoka-mcp/record.md","api":"https://wellknown.network/api/v1/agents/k-ruoka-mcp","status":"https://wellknown.network/api/v1/agents/k-ruoka-mcp/status","claim":"https://wellknown.network/agents/k-ruoka-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/k-ruoka-mcp/claim.json","badge":"https://wellknown.network/agents/k-ruoka-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/k-ruoka-mcp/history","tools":"https://wellknown.network/api/v1/agents/k-ruoka-mcp/tools"},"ard":{"identifier":"urn:air::server:k-ruoka-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"k-ruoka-mcp","summary":"MCP server for managing a K-Ruoka shopping cart for one K-Plussa account","description":"# k-ruoka-mcp\n\n[![en](https://img.shields.io/badge/lang-en-red.svg)](./README.md)\n[![fi](https://img.shields.io/badge/lang-fi-blue.svg)](./README.fi.md)\n[![sv](https://img.shields.io/badge/lang-sv-yellow.svg)](./README.sv.md)\n\nAn MCP server that manages the shopping cart of one [K-Ruoka](https://www.k-ruoka.fi)\n(Finnish grocery) account: read the cart, add items, change quantities, remove items,\nclear it.\n\nCheckout is deliberately out of scope. Nothing here can place an order or spend money.\n\n> [!IMPORTANT]\n> Use with caution, and only against your own account. K-Ruoka's terms limit the service\n> to a customer's *own personal private use*, and Kesko may restrict or close an account\n> at its discretion; the risk you take on is your own. Read the\n> [terms of service notes](#terms-of-service--use-with-caution) first.\n\n## How it works\n\nK-Ruoka has no public API. The cart lives behind `/kr-api/basket/...`, which is\nprivate, undocumented, and authenticated purely by browser cookies. There is no\nbearer token or API key to hold. So this server drives a real, installed Chrome via\nthe DevTools Protocol ([chromiumoxide](https://github.com/mattsse/chromiumoxide)),\nkeeps a persistent profile on disk, and makes each API call as a same-origin\n`fetch()` from inside the loaded page. The browser attaches the cookies itself.\n\nThe site sits behind Cloudflare. Getting through needs exactly one thing: a\nUser-Agent that doesn't contain the token `HeadlessChrome`. No stealth plugin, no\nchallenge-solving, no interstitial to wait out. That single fact is why this is pure Rust\nwith no browser-automation sidecar.\n\n## Requirements\n\n- **Google Chrome** at `/usr/bin/google-chrome` (override with `K_RUOKA_CHROME`).\n  Not optional and not bundled: the whole design is \"drive a real browser\", because\n  the cookies are the only credential the private API accepts.\n- `xvfb-run`, only for `login` on a machine with no display\n- Rust (built with 1.94), only to build from source\n\n## Install\n\nPublished to P…","publisher":{"name":"Niko Savola","url":null},"homepage":null,"repository":"https://github.com/nikosavola/k-ruoka-mcp/releases","version":"0.1.3","license":null,"protocols":["mcp"],"tags":["cart","groceries","k-plussa","k-ruoka","kesko","mcp","model-context-protocol","shopping"],"pricing":null,"endpoints":[{"url":"pypi:k-ruoka-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[{"slug":"infra.browser-automation","name":"Browser Automation","confidence":1,"provenance":"derived"}],"categories":["infra"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"k-ruoka-mcp","registry":"pypi","observedAt":"2026-11-09T12:23:55.516Z","publishedAt":"2026-08-02T10:51:53.096337Z","latestVersion":"0.1.3"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"k-ruoka-mcp","url":"https://pypi.org/project/k-ruoka-mcp/","firstSeenAt":"2026-09-09T23:24:39.412Z","fetchedAt":"2026-11-09T12:22:51.335Z","normalizedAt":"2026-11-09T12:22:51.335Z"}]},"firstSeenAt":"2026-09-09T23:24:39.412Z","updatedAt":"2026-11-09T12:23:55.516Z"}