{
  "site": "https://mcp.axelpaul.is",
  "generated": "2026-10-26T20:35:49.054Z",
  "tools": [
    {
      "id": "abler",
      "repo": "axelpaul/abler-cli",
      "name": "Abler",
      "service": "Abler",
      "serviceUrl": "https://www.abler.io",
      "tagline": "Training schedules, event sign-ups and messages in Abler",
      "description": "Check your family’s training sessions and events in Abler, see who’s signed up and read messages from coaches. You can also respond to events and send messages if you enable changes.",
      "examples": [
        "When is the next football practice?",
        "Who's signed up for Saturday's match?",
        "Show me the latest messages from the coach."
      ],
      "category": "Kids & family",
      "auth": "phone or email + SMS code (browser-assisted login; needs Node.js and Chrome/Chromium)",
      "binaries": false,
      "requires": "Bun 1.1+, plus Node.js and Chrome/Chromium for the one-time login",
      "tools": [
        {
          "name": "abler_doctor",
          "write": false,
          "description": "Check the saved session and API access"
        },
        {
          "name": "abler_me",
          "write": false,
          "description": "Account identity"
        },
        {
          "name": "abler_family",
          "write": false,
          "description": "Children and family links"
        },
        {
          "name": "abler_groups",
          "write": false,
          "description": "Memberships, groups and roles"
        },
        {
          "name": "abler_events",
          "write": false,
          "description": "Calendar events by month, week or cursor"
        },
        {
          "name": "abler_event",
          "write": false,
          "description": "Event details by ID"
        },
        {
          "name": "abler_attendance",
          "write": false,
          "description": "Attendance list for an event"
        },
        {
          "name": "abler_messages",
          "write": false,
          "description": "Conversations and messages (read only)"
        },
        {
          "name": "abler_operations",
          "write": false,
          "description": "Paginated catalog of recovered API operations"
        },
        {
          "name": "abler_operation",
          "write": false,
          "description": "One operation's variables and GraphQL document"
        },
        {
          "name": "abler_query",
          "write": false,
          "description": "Execute a catalog query operation"
        },
        {
          "name": "abler_watch",
          "write": false,
          "description": "Observe a real-time subscription for a bounded interval"
        },
        {
          "name": "abler_mutate",
          "write": true,
          "description": "Execute a catalog mutation; dry-run unless confirm is true"
        }
      ],
      "commands": [
        "abler login start --phone <number-or-email>",
        "abler login verify --stdin",
        "abler doctor",
        "abler me",
        "abler family",
        "abler groups",
        "abler events --month 10 --year 2026",
        "abler event <event-id>",
        "abler attendance <event-id>",
        "abler messages --first 20",
        "abler operations list --search <text>",
        "abler operations show <name>",
        "abler run <operation> --vars '{...}' [--dry-run | --yes]",
        "abler watch <subscription> --seconds 10",
        "abler serve"
      ],
      "envVars": [
        {
          "name": "ABLER_CONFIG_DIR",
          "description": "Config/session directory (default ~/.config/abler)"
        },
        {
          "name": "ABLER_CHROME",
          "description": "Chrome/Chromium executable used for login"
        },
        {
          "name": "ABLER_NODE",
          "description": "Node.js executable for the login helper (default node)"
        },
        {
          "name": "ABLER_SOURCE_DIR",
          "description": "Package/checkout directory if the CLI cannot locate it"
        },
        {
          "name": "ABLER_MCP_ENABLE_WRITES",
          "description": "Set to 1 to register the MCP write tool"
        }
      ],
      "writesEnvVar": "ABLER_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Æfingar, viðburðir og skilaboð í Abler",
        "description": "Skoðaðu æfingatíma og viðburði fjölskyldunnar í Abler, hverjir eru skráðir og skilaboð frá þjálfurum. Einnig er hægt að skrá mætingu og senda skilaboð ef þú leyfir breytingar.",
        "examples": [
          "Hvenær er næsta fótboltaæfing?",
          "Hverjir eru skráðir á leikinn á laugardaginn?",
          "Sýndu mér nýjustu skilaboðin frá þjálfaranum."
        ],
        "requires": "Bun 1.1 eða nýrra, auk Node.js og Chrome eða Chromium fyrir fyrstu innskráningu"
      }
    },
    {
      "id": "barnaloppan",
      "repo": "axelpaul/barnaloppan-cli",
      "name": "Barnaloppan",
      "service": "Barnaloppan",
      "serviceUrl": "https://www.barnaloppan.is",
      "tagline": "Listings, prices and sales for your Barnaloppan booth",
      "description": "Manage your booth at Barnaloppan, the second-hand children’s market. Add listings, update prices and photos, and track sales and payouts. You can also hide sold items from the list.",
      "examples": [
        "What were my booth’s total sales this week?",
        "Lower the price of the winter overalls to 3,000 kr.",
        "Hide the listings that have sold."
      ],
      "category": "Kids & family",
      "auth": "email+password",
      "binaries": true,
      "tools": [
        {
          "name": "list_products",
          "write": false,
          "description": "List booth listings with price, tag status, hidden and sold flags"
        },
        {
          "name": "get_sales",
          "write": false,
          "description": "Sales rows and payout totals (sold, commission, balance)"
        },
        {
          "name": "auth_status",
          "write": false,
          "description": "Show the stored session and optionally check it is live"
        },
        {
          "name": "add_products",
          "write": true,
          "description": "Create listings with optional local photos"
        },
        {
          "name": "set_product_images",
          "write": true,
          "description": "Replace photos on existing listings by ID"
        },
        {
          "name": "unprint_products",
          "write": true,
          "description": "Mark price tags unprinted so name/price can be edited"
        },
        {
          "name": "edit_products",
          "write": true,
          "description": "Change name and/or price of listings by ID"
        },
        {
          "name": "hide_products",
          "write": true,
          "description": "Hide listings from search (reversible)"
        },
        {
          "name": "show_products",
          "write": true,
          "description": "Put hidden listings back in search"
        },
        {
          "name": "delete_products",
          "write": true,
          "description": "Permanently delete listings by ID"
        }
      ],
      "commands": [
        "barnaloppan auth login",
        "barnaloppan auth status --check",
        "barnaloppan list",
        "barnaloppan sales",
        "barnaloppan add products.csv --yes",
        "barnaloppan set-image updates.csv --yes",
        "barnaloppan unprint <id|name|photo> --yes",
        "barnaloppan edit updates.csv --yes",
        "barnaloppan hide <id|name|photo> --yes",
        "barnaloppan show <id|name|photo> --yes",
        "barnaloppan delete <id> --yes",
        "barnaloppan serve"
      ],
      "envVars": [
        {
          "name": "BARNALOPPAN_EMAIL",
          "description": "Login email for auth login"
        },
        {
          "name": "BARNALOPPAN_PASSWORD",
          "description": "Login password for auth login (never stored)"
        },
        {
          "name": "BARNALOPPAN_1PASSWORD_ITEM",
          "description": "1Password item for optional --from-1password"
        },
        {
          "name": "BARNALOPPAN_1PASSWORD_VAULT",
          "description": "Optional 1Password vault for that item"
        },
        {
          "name": "BARNALOPPAN_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose MCP write tools"
        },
        {
          "name": "BARNALOPPAN_CONFIG_DIR",
          "description": "Override the config directory (default $XDG_CONFIG_HOME/barnaloppan-cli)"
        }
      ],
      "writesEnvVar": "BARNALOPPAN_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Vörur, verð og sala í básnum þínum í Barnaloppunni",
        "description": "Haltu utan um básinn þinn í Barnaloppunni. Skráðu vörur, breyttu verði og myndum og fylgstu með sölu og útborgunum. Þú getur líka falið seldar vörur af listanum.",
        "examples": [
          "Hvað hef ég selt fyrir mikið í básnum í vikunni?",
          "Lækkaðu verðið á vetrargallanum í 3.000 kr.",
          "Feldu vörurnar sem hafa selst."
        ]
      }
    },
    {
      "id": "dyngja",
      "repo": "axelpaul/dyngja-cli",
      "name": "Dyngja",
      "service": "Dyngja",
      "serviceUrl": "https://dyngja.app/",
      "tagline": "Your portfolio and simulated share trades in Dyngja",
      "description": "Dyngja lets you practise trading Icelandic shares with virtual money. Check share prices, your portfolio and past trades, and follow contests and other users. You can also buy and sell virtual shares if you enable changes.",
      "examples": [
        "How has my Dyngja portfolio performed today?",
        "Buy 10 shares of Marel with virtual money.",
        "Which users have the most followers?"
      ],
      "category": "Finance",
      "keywords": [
        "hlutabréf",
        "stocks",
        "kauphöll",
        "investing"
      ],
      "auth": "email+password",
      "binaries": true,
      "tools": [
        {
          "name": "market_info",
          "write": false,
          "description": "App settings: delayed market data and sale commission (no login)."
        },
        {
          "name": "ads",
          "write": false,
          "description": "Current in-app advertisements (no login)."
        },
        {
          "name": "whoami",
          "write": false,
          "description": "Signed-in user and main business account with balance."
        },
        {
          "name": "business_account",
          "write": false,
          "description": "Raw details of the signed-in business account."
        },
        {
          "name": "stocks",
          "write": false,
          "description": "Tradable stocks with ticker, name and price."
        },
        {
          "name": "portfolio",
          "write": false,
          "description": "Virtual holdings, optionally for another account, user or contest."
        },
        {
          "name": "transactions",
          "write": false,
          "description": "Recent virtual buy/sell transactions."
        },
        {
          "name": "history",
          "write": false,
          "description": "Activity and performance feeds (recent, sales, purchases, historic, totals)."
        },
        {
          "name": "contests",
          "write": false,
          "description": "List, search and inspect contests, participants and invites."
        },
        {
          "name": "users",
          "write": false,
          "description": "Search users, most followed/profited, news feed, team statistics."
        },
        {
          "name": "education",
          "write": false,
          "description": "Chapters, progress, achievements and videos."
        },
        {
          "name": "contest_ownership_totals",
          "write": false,
          "description": "Aggregated holdings across business accounts in a contest."
        },
        {
          "name": "contest_position",
          "write": false,
          "description": "A user's position in a contest."
        },
        {
          "name": "trade",
          "write": true,
          "description": "Buy or sell at market on the simulated market."
        },
        {
          "name": "follow_user",
          "write": true,
          "description": "Follow or unfollow a user."
        },
        {
          "name": "join_contest",
          "write": true,
          "description": "Join a contest by PIN or join a contest team."
        },
        {
          "name": "update_education_progress",
          "write": true,
          "description": "Record education progress for a chapter."
        },
        {
          "name": "update_profile",
          "write": true,
          "description": "Change display name and notification/search settings."
        },
        {
          "name": "send_feedback",
          "write": true,
          "description": "Send feedback or a message to the Dyngja team."
        },
        {
          "name": "patch_business_account",
          "write": true,
          "description": "Change fields on your business account."
        },
        {
          "name": "reset_account",
          "write": true,
          "description": "Reset your virtual account (cannot be undone)."
        }
      ],
      "commands": [
        "dyngja login",
        "dyngja whoami",
        "dyngja market stocks",
        "dyngja portfolio",
        "dyngja transactions --count 20",
        "dyngja buy --ticker MAREL --units 10 --yes",
        "dyngja sell --ticker MAREL --units 3 --yes",
        "dyngja history recent",
        "dyngja contests list",
        "dyngja users search --query jon",
        "dyngja education chapters",
        "dyngja serve"
      ],
      "envVars": [
        {
          "name": "DYNGJA_USER",
          "description": "Email for non-interactive login (alias DYNGJA_EMAIL)."
        },
        {
          "name": "DYNGJA_PW",
          "description": "Password for non-interactive login (alias DYNGJA_PASSWORD)."
        },
        {
          "name": "DYNGJA_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose write tools in the MCP server."
        },
        {
          "name": "DYNGJA_CONFIG_DIR",
          "description": "Override the config directory (default $XDG_CONFIG_HOME/dyngja-cli)."
        },
        {
          "name": "DYNGJA_API_URL",
          "description": "Override the API base URL."
        }
      ],
      "writesEnvVar": "DYNGJA_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Eignasafn og hlutabréfaviðskipti með sýndarpeninga í Dyngju",
        "description": "Í Dyngju geturðu æft þig í hlutabréfaviðskiptum með sýndarpeninga. Skoðaðu gengi bréfa, eignasafnið þitt og fyrri viðskipti, fylgstu með keppnum og öðrum notendum. Þú getur líka keypt og selt sýndarhlutabréf ef þú leyfir breytingar.",
        "examples": [
          "Hvernig hefur eignasafnið mitt í Dyngju þróast í dag?",
          "Keyptu 10 hluti í Marel fyrir sýndarpeninga.",
          "Hvaða notendur eru með flesta fylgjendur?"
        ]
      }
    },
    {
      "id": "gaeludyr",
      "repo": "axelpaul/gaeludyr-cli",
      "name": "Gæludýr",
      "service": "Gæludýr.is",
      "serviceUrl": "https://www.gaeludyr.is",
      "tagline": "Product search, shopping carts and orders at Gæludýr.is",
      "description": "Find products at Gæludýr.is, check prices and stock, and calculate cart totals with shipping costs. Sign in with Auðkenni to view your orders. Payment takes place on the shop’s website, not through the tool.",
      "examples": [
        "Do they have grain-free cat food in stock?",
        "Put two bags of it in my cart.",
        "Where are the nearest Dropp pickup points?"
      ],
      "category": "Shopping",
      "keywords": [
        "pet",
        "dýr",
        "hundur",
        "köttur",
        "dog",
        "cat"
      ],
      "auth": "none for catalogue; phone (Auðkenni) for account",
      "binaries": true,
      "tools": [
        {
          "name": "search",
          "write": false,
          "description": "Search the public catalogue by query, category and/or brand"
        },
        {
          "name": "product",
          "write": false,
          "description": "Stock and price for a product slug"
        },
        {
          "name": "postcode",
          "write": false,
          "description": "Icelandic postcode lookup"
        },
        {
          "name": "dropp_locations",
          "write": false,
          "description": "Dropp parcel pickup locations"
        },
        {
          "name": "me",
          "write": false,
          "description": "Your profile, addresses and preferred shipping (login)"
        },
        {
          "name": "orders",
          "write": false,
          "description": "List your orders (login)"
        },
        {
          "name": "order",
          "write": false,
          "description": "Detail for one order (login)"
        },
        {
          "name": "cart_view",
          "write": false,
          "description": "Current cart with server-computed totals"
        },
        {
          "name": "checkout_shipping",
          "write": false,
          "description": "Shipping methods and costs for the cart to a destination"
        },
        {
          "name": "payment_methods",
          "write": false,
          "description": "Payment methods offered at checkout"
        },
        {
          "name": "cart_add",
          "write": true,
          "description": "Add a product by ID, slug or name"
        },
        {
          "name": "cart_remove",
          "write": true,
          "description": "Remove a product from the cart"
        },
        {
          "name": "cart_set",
          "write": true,
          "description": "Replace the whole cart"
        },
        {
          "name": "cart_clear",
          "write": true,
          "description": "Empty the cart"
        },
        {
          "name": "cart_coupon",
          "write": true,
          "description": "Apply or remove a coupon"
        }
      ],
      "commands": [
        "gaeludyr login --phone <mobile>",
        "gaeludyr me",
        "gaeludyr search \"happy cat\" --in-stock",
        "gaeludyr product <slug>",
        "gaeludyr cart add 46685 --qty 2",
        "gaeludyr cart",
        "gaeludyr orders",
        "gaeludyr order <id>",
        "gaeludyr checkout shipping --postcode 101 --street \"Dæmigata 1\" --city Reykjavík",
        "gaeludyr dropp --near kringlan",
        "gaeludyr serve"
      ],
      "envVars": [
        {
          "name": "GAELUDYR_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose the cart mutation tools in the MCP server"
        },
        {
          "name": "GAELUDYR_KK_FE",
          "description": "Session cookie value to use instead of the saved login"
        },
        {
          "name": "GAELUDYR_CONFIG_DIR",
          "description": "Override the config directory (default ~/.config/gaeludyr-cli)"
        }
      ],
      "writesEnvVar": "GAELUDYR_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Vöruleit, vörukörfur og pantanir hjá Gæludýr.is",
        "description": "Finndu vörur hjá Gæludýr.is, skoðaðu verð og birgðastöðu og reiknaðu heildarverð körfu með sendingarkostnaði. Með innskráningu í gegnum Auðkenni geturðu líka skoðað pantanirnar þínar. Greiðsla fer fram á vef verslunarinnar, ekki í tólinu.",
        "examples": [
          "Er til kornlaust kattafóður á lager?",
          "Settu tvo poka af því í körfuna.",
          "Hvaða afhendingarstaðir Dropp eru næst mér?"
        ]
      }
    },
    {
      "id": "leitir",
      "repo": "axelpaul/leitir-cli",
      "name": "Leitir",
      "service": "leitir.is",
      "serviceUrl": "https://leitir.is",
      "tagline": "Library searches, loans and renewals on leitir.is",
      "description": "Search for books and other library materials on leitir.is without signing in. Sign in to see your loans, due dates and fines, renew loans and cancel holds.",
      "examples": [
        "Is Ronja ræningjadóttir available at my library?",
        "When are my library books due?",
        "Renew the loans for all books due this week."
      ],
      "category": "Libraries & culture",
      "keywords": [
        "bókasafn",
        "library",
        "books",
        "bækur"
      ],
      "auth": "none for search; kennitala/library card + PIN for account features",
      "binaries": true,
      "tools": [
        {
          "name": "search",
          "write": false,
          "description": "Search the catalogue (local Icelandic holdings or worldwide), with limit/offset/sort"
        },
        {
          "name": "suggest",
          "write": false,
          "description": "Autocomplete suggestions for a partial query"
        },
        {
          "name": "loans",
          "write": false,
          "description": "Active loans with due dates, days left and renewability"
        },
        {
          "name": "requests",
          "write": false,
          "description": "Hold requests with status, pickup location and cancellability"
        },
        {
          "name": "fines",
          "write": false,
          "description": "Fines and fees"
        },
        {
          "name": "account",
          "write": false,
          "description": "Account overview counters (loans, requests, fines)"
        },
        {
          "name": "profile",
          "write": false,
          "description": "Patron contact details on file"
        },
        {
          "name": "renew_loan",
          "write": true,
          "description": "Renew one loan by ID or fuzzy title match"
        },
        {
          "name": "renew_all_loans",
          "write": true,
          "description": "Renew all renewable loans"
        },
        {
          "name": "cancel_request",
          "write": true,
          "description": "Cancel one hold request by ID or fuzzy title match"
        }
      ],
      "commands": [
        "leitir search \"Ronja\"",
        "leitir search \"Ronja\" --global --limit 5",
        "leitir suggest \"Ronj\"",
        "leitir login",
        "leitir loans",
        "leitir renew \"Ronja\"",
        "leitir renew --all",
        "leitir requests",
        "leitir cancel \"Ronja\"",
        "leitir fines",
        "leitir account",
        "leitir profile",
        "leitir serve"
      ],
      "envVars": [
        {
          "name": "LEITIR_TOKEN",
          "description": "JWT to use instead of the cached login token"
        },
        {
          "name": "LEITIR_USERNAME",
          "description": "Kennitala / library card for leitir login"
        },
        {
          "name": "LEITIR_PASSWORD",
          "description": "PIN / password for leitir login"
        },
        {
          "name": "LEITIR_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose renew/cancel MCP tools"
        },
        {
          "name": "XDG_CONFIG_HOME",
          "description": "Base config dir; token cached in $XDG_CONFIG_HOME/leitir-cli/token.json"
        }
      ],
      "writesEnvVar": "LEITIR_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Bókaleit, útlán og endurnýjun á leitir.is",
        "description": "Leitaðu að bókum og öðru safnefni á leitir.is án þess að skrá þig inn. Með innskráningu geturðu séð hvað þú ert með að láni, skoðað skiladaga og sektir, endurnýjað lán og hætt við frátektir.",
        "examples": [
          "Er Ronja ræningjadóttir til á bókasafninu mínu?",
          "Hvenær á ég að skila bókunum?",
          "Endurnýjaðu lán á öllum bókum sem á að skila í þessari viku."
        ]
      }
    },
    {
      "id": "maul",
      "repo": "axelpaul/maul-cli",
      "name": "Maul",
      "service": "Maul (máltíðir)",
      "serviceUrl": "https://app.maul.is",
      "tagline": "Workplace lunch menus and orders in Maul",
      "description": "Check your workplace’s lunch menus and orders in Maul. You can also place or cancel lunch orders if you enable changes.",
      "examples": [
        "What's for lunch at work on Wednesday?",
        "Order the vegetarian dish for Thursday.",
        "Cancel my lunch on Friday."
      ],
      "category": "Food",
      "keywords": [
        "hádegismatur",
        "lunch",
        "mötuneyti"
      ],
      "auth": "email+password (Maul account)",
      "binaries": true,
      "tools": [
        {
          "name": "auth_status",
          "write": false,
          "description": "Show whether a Maul login is cached, for which email/location, and token expiry"
        },
        {
          "name": "me",
          "write": false,
          "description": "Read the signed-in user's Maul profile"
        },
        {
          "name": "menu",
          "write": false,
          "description": "Menu items for an ISO week (optionally one weekday), with item IDs"
        },
        {
          "name": "orders",
          "write": false,
          "description": "The signed-in user's orders for an ISO week"
        },
        {
          "name": "admin_orders",
          "write": false,
          "description": "All orders at the user's location for a date (Maul admin accounts only)"
        },
        {
          "name": "order_submit",
          "write": true,
          "description": "Order one weekday by exact menu item ID with confirmation; refuses if that day already has an order"
        },
        {
          "name": "order_cancel",
          "write": true,
          "description": "Cancel one weekday's order; confirmItemId must match the existing order"
        }
      ],
      "commands": [
        "maul login [email]",
        "maul status",
        "maul logout",
        "maul me",
        "maul menu [-w YYYY-WNN]",
        "maul orders [-w YYYY-WNN]",
        "maul order-submit -w YYYY-WNN -m '{\"1\":\"pad thai\"}'",
        "maul order-cancel -w YYYY-WNN -d 1-5",
        "maul admin-orders --date YYYY-MM-DD",
        "maul serve"
      ],
      "envVars": [
        {
          "name": "MAUL_USERNAME",
          "description": "Email for non-interactive login"
        },
        {
          "name": "MAUL_PASSWORD",
          "description": "Password for non-interactive login"
        },
        {
          "name": "MAUL_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose order_submit and order_cancel"
        },
        {
          "name": "MAUL_API_URL",
          "description": "API base URL (default https://dev-api.maul.is)"
        },
        {
          "name": "MAUL_COGNITO_USER_POOL_ID",
          "description": "Override the Maul web app's public Cognito user pool ID"
        },
        {
          "name": "MAUL_COGNITO_CLIENT_ID",
          "description": "Override the Maul web app's public Cognito client ID"
        },
        {
          "name": "MAUL_CONFIG_DIR",
          "description": "Session cache directory (default ~/.config/maul-cli)"
        }
      ],
      "writesEnvVar": "MAUL_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Matseðlar og hádegismatarpantanir í Maul",
        "description": "Skoðaðu matseðla og hádegismatarpantanir vinnustaðarins í Maul. Þú getur líka pantað eða afpantað mat ef þú leyfir breytingar.",
        "examples": [
          "Hvað er í hádegismat í vinnunni á miðvikudaginn?",
          "Pantaðu grænmetisréttinn á fimmtudaginn.",
          "Afpantaðu hádegismatinn minn á föstudaginn."
        ]
      }
    },
    {
      "id": "noona",
      "repo": "axelpaul/noona-cli",
      "name": "Noona",
      "service": "Noona",
      "serviceUrl": "https://noona.is",
      "tagline": "Available appointments and bookings on Noona",
      "description": "Find businesses on Noona, check services and prices, and search for available appointments without signing in. Sign in with an SMS code to book, view your appointments or cancel them.",
      "examples": [
        "Find a barber in Hafnarfjörður with an available appointment on Friday.",
        "Are there any haircut appointments on Saturday morning?",
        "Cancel my appointment next Tuesday."
      ],
      "category": "Health & booking",
      "keywords": [
        "klipping",
        "hárgreiðsla",
        "haircut",
        "tímabókun",
        "appointment"
      ],
      "auth": "none for search/services/slots; phone (SMS code) for bookings",
      "binaries": true,
      "tools": [
        {
          "name": "search_businesses",
          "write": false,
          "description": "Search businesses by text, location, type; public"
        },
        {
          "name": "list_services",
          "write": false,
          "description": "Services at a business with duration and starting price; public"
        },
        {
          "name": "list_slots",
          "write": false,
          "description": "Open time slots for a business by service/employee, up to 31 days; public"
        },
        {
          "name": "list_bookings",
          "write": false,
          "description": "The logged-in user's bookings"
        },
        {
          "name": "get_booking",
          "write": false,
          "description": "One booking in full by event id"
        },
        {
          "name": "whoami",
          "write": false,
          "description": "The logged-in user's profile"
        },
        {
          "name": "doctor",
          "write": false,
          "description": "API reachability, login and token checks"
        },
        {
          "name": "create_booking",
          "write": true,
          "description": "Book an appointment; preview unless confirm=true"
        },
        {
          "name": "cancel_booking",
          "write": true,
          "description": "Cancel a booking; confirmEventId must repeat eventId"
        }
      ],
      "commands": [
        "noona search <query>",
        "noona services <company>",
        "noona slots <company> --service <id>",
        "noona login",
        "noona book <company> --service <id> --at <YYYY-MM-DDTHH:MM>",
        "noona bookings",
        "noona cancel <event_id>",
        "noona whoami",
        "noona doctor",
        "noona serve"
      ],
      "envVars": [
        {
          "name": "NOONA_TOKEN",
          "description": "Account token (overrides the stored login)"
        },
        {
          "name": "NOONA_PHONE",
          "description": "Default phone number for login"
        },
        {
          "name": "NOONA_CC",
          "description": "Default phone country code for login (default 354)"
        },
        {
          "name": "NOONA_BASE_URL",
          "description": "Override the API base URL"
        },
        {
          "name": "NOONA_CONFIG_DIR",
          "description": "Override the config directory"
        },
        {
          "name": "NOONA_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose create_booking and cancel_booking over MCP"
        }
      ],
      "writesEnvVar": "NOONA_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Lausir tímar og bókanir á Noona",
        "description": "Finndu fyrirtæki á Noona, skoðaðu þjónustu og verð og leitaðu að lausum tímum án innskráningar. Skráðu þig inn með SMS-kóða til að bóka tíma, skoða bókanirnar þínar eða afbóka.",
        "examples": [
          "Finndu rakara í Hafnarfirði með lausan tíma á föstudaginn.",
          "Eru lausir tímar í klippingu á laugardagsmorgun?",
          "Afbókaðu tímann minn næsta þriðjudag."
        ]
      }
    },
    {
      "id": "on",
      "repo": "axelpaul/on-cli",
      "name": "ON",
      "service": "ON (Orka náttúrunnar)",
      "serviceUrl": "https://www.on.is",
      "tagline": "Charging stations, charging history and invoices from ON",
      "description": "Check your charging history, registered cars and invoices with ON (Orka náttúrunnar), and find available charging stations. You can also start and stop charging through ON’s older system. That system is being phased out, so those functions may stop working.",
      "examples": [
        "How many kilowatt-hours did I use for charging last month?",
        "Is there an available charger near Selfoss right now?",
        "Stop my current charging session."
      ],
      "category": "Transport & energy",
      "keywords": [
        "hleðsla",
        "rafbíll",
        "EV",
        "charging",
        "Monta"
      ],
      "auth": "email+password",
      "binaries": true,
      "tools": [
        {
          "name": "monta_account",
          "write": false,
          "description": "Signed-in ON/Monta account (id, name, email)"
        },
        {
          "name": "monta_vehicles",
          "write": false,
          "description": "Vehicles from the Monta backend"
        },
        {
          "name": "monta_charges",
          "write": false,
          "description": "Charge history from the Monta backend"
        },
        {
          "name": "monta_charge_points",
          "write": false,
          "description": "Charge points from the Monta backend"
        },
        {
          "name": "whoami",
          "write": false,
          "description": "Logged-in user (legacy backend)"
        },
        {
          "name": "vehicles",
          "write": false,
          "description": "Vehicles on the account (legacy backend)"
        },
        {
          "name": "sessions",
          "write": false,
          "description": "Charging session history (legacy backend)"
        },
        {
          "name": "session",
          "write": false,
          "description": "One charging session by id (legacy backend)"
        },
        {
          "name": "live",
          "write": false,
          "description": "Active sessions, reservations and counters (legacy backend)"
        },
        {
          "name": "keys",
          "write": false,
          "description": "RFID charging keys/cards (legacy backend)"
        },
        {
          "name": "invoices",
          "write": false,
          "description": "Invoices, most recent first (legacy backend)"
        },
        {
          "name": "locations",
          "write": false,
          "description": "Charging locations near a point, no login needed"
        },
        {
          "name": "stop_charging",
          "write": true,
          "description": "Stop the active charging session"
        },
        {
          "name": "start_charging",
          "write": true,
          "description": "Start charging at a given EVSE/connector"
        }
      ],
      "commands": [
        "on monta-login",
        "on monta-charges",
        "on monta-vehicles",
        "on sessions --limit 5",
        "on live",
        "on locations --available",
        "on invoices",
        "on stop --yes",
        "on start --evse <code> --connector <id>",
        "on serve"
      ],
      "envVars": [
        {
          "name": "ON_MONTA_USER",
          "description": "Email for non-interactive monta-login"
        },
        {
          "name": "ON_MONTA_PW",
          "description": "Password for non-interactive monta-login"
        },
        {
          "name": "ON_USER",
          "description": "Email for non-interactive legacy login"
        },
        {
          "name": "ON_PW",
          "description": "Password for non-interactive legacy login"
        },
        {
          "name": "ON_BASE_URL",
          "description": "Override the legacy Dusky API base URL"
        },
        {
          "name": "ON_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose start/stop charging MCP tools"
        },
        {
          "name": "XDG_CONFIG_HOME",
          "description": "Base config directory (default ~/.config)"
        }
      ],
      "writesEnvVar": "ON_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Hleðslustöðvar, hleðslusaga og reikningar hjá ON",
        "description": "Skoðaðu hleðslusöguna þína, skráða bíla og reikninga hjá Orku náttúrunnar og finndu lausar hleðslustöðvar. Einnig er hægt að hefja og stöðva hleðslu í gegnum eldra kerfi ON. Verið er að leggja það kerfi niður, svo sá hluti tólsins gæti hætt að virka.",
        "examples": [
          "Hversu margar kílóvattstundir notaði ég við hleðslu í síðasta mánuði?",
          "Er laus hleðslustöð nálægt Selfossi núna?",
          "Stöðvaðu hleðsluna sem er í gangi."
        ]
      }
    },
    {
      "id": "paprika",
      "repo": "axelpaul/paprika-recipe-cli",
      "name": "Paprika",
      "service": "Paprika Recipe Manager",
      "serviceUrl": "https://www.paprikaapp.com",
      "tagline": "Recipes, meal plans and grocery lists in Paprika",
      "description": "Search your recipes in Paprika Recipe Manager and check your meal plan and grocery list. You can also save new recipes with photos after a preview. The tool connects through Paprika’s cloud sync and builds on Matt Russell’s Paprika CLI.",
      "examples": [
        "Find my pancake recipe.",
        "What's on the meal plan this week?",
        "Save this recipe to Paprika."
      ],
      "category": "Food",
      "keywords": [
        "uppskriftir",
        "recipes",
        "matur",
        "cooking",
        "grocery"
      ],
      "auth": "email+password",
      "binaries": true,
      "sourceInstall": "npm install -g github:axelpaul/paprika-recipe-cli",
      "sourceRemove": "npm uninstall -g paprika-recipe-cli",
      "requires": "Node.js 18 or newer",
      "tools": [
        {
          "name": "whoami",
          "write": false,
          "description": "Show whether credentials are configured and for which account"
        },
        {
          "name": "list_recipes",
          "write": false,
          "description": "List recipes not in the trash, optionally filtered by category name"
        },
        {
          "name": "search_recipes",
          "write": false,
          "description": "Search recipes by name or description"
        },
        {
          "name": "get_recipe",
          "write": false,
          "description": "Get one recipe by UID or name, optionally ingredients only"
        },
        {
          "name": "list_categories",
          "write": false,
          "description": "List recipe categories with UIDs"
        },
        {
          "name": "list_meals",
          "write": false,
          "description": "Show the meal plan, optionally for one date"
        },
        {
          "name": "list_groceries",
          "write": false,
          "description": "Show the grocery list, optionally including purchased items"
        },
        {
          "name": "create_recipe",
          "write": true,
          "description": "Create a recipe (preview unless confirm=true), optionally with a photo"
        },
        {
          "name": "update_recipe",
          "write": true,
          "description": "Replace an existing recipe's fields (preview unless confirm=true)"
        }
      ],
      "commands": [
        "paprika auth",
        "paprika recipes [--category <name>]",
        "paprika search <query>",
        "paprika recipe <name|uid> [--ingredients-only]",
        "paprika meals [--date YYYY-MM-DD]",
        "paprika groceries [--all]",
        "paprika categories",
        "paprika recipe-create <file.json> [--yes]",
        "paprika recipe-update <name|uid> <file.json> [--yes]",
        "paprika serve"
      ],
      "envVars": [
        {
          "name": "PAPRIKA_EMAIL",
          "description": "Paprika account email (with PAPRIKA_PASSWORD, overrides the config file)"
        },
        {
          "name": "PAPRIKA_PASSWORD",
          "description": "Paprika account password"
        },
        {
          "name": "PAPRIKA_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose create_recipe and update_recipe in the MCP server"
        },
        {
          "name": "XDG_CONFIG_HOME",
          "description": "Base directory for the config file (default ~/.config)"
        }
      ],
      "writesEnvVar": "PAPRIKA_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Uppskriftir, mataráætlanir og innkaupalistar í Paprika",
        "description": "Leitaðu í uppskriftunum þínum í Paprika Recipe Manager og skoðaðu mataráætlunina og innkaupalistann. Þú getur líka vistað nýjar uppskriftir með mynd eftir forskoðun. Tólið tengist Paprika í gegnum skýjasamstillingu og byggir á Paprika CLI eftir Matt Russell.",
        "examples": [
          "Finndu pönnukökuuppskriftina mína.",
          "Hvað er á mataráætluninni í vikunni?",
          "Vistaðu þessa uppskrift í Paprika."
        ],
        "requires": "Node.js 18 eða nýrra"
      }
    },
    {
      "id": "vala",
      "repo": "axelpaul/vala-cli",
      "name": "Vala Leikskóli",
      "service": "Vala Leikskóli",
      "serviceUrl": "https://leikskoli.vala.is/",
      "tagline": "Daily updates, menus and preschool messages in Vala",
      "description": "Keep up with your child’s preschool day in Vala: meals, sleep, attendance, menus, events and messages from staff. You can also report illness or planned absence if you enable changes.",
      "examples": [
        "How well did my child eat lunch this week?",
        "What's on the preschool calendar this month?",
        "Let the preschool know my child is sick today."
      ],
      "category": "Kids & family",
      "keywords": [
        "leikskóli",
        "preschool",
        "kindergarten",
        "matur"
      ],
      "auth": "phone or kennitala (Auðkenni)",
      "binaries": true,
      "tools": [
        {
          "name": "whoami",
          "write": false,
          "description": "Signed-in parent: name, email, language (kennitala and phone omitted)."
        },
        {
          "name": "kids",
          "write": false,
          "description": "Children on the account with school and opening hours."
        },
        {
          "name": "lunch",
          "write": false,
          "description": "Lunch menu and eat rating per child for a date or the 7 days ending on it."
        },
        {
          "name": "attendance",
          "write": false,
          "description": "Arrival/departure, sleep, eat rating and staff comments for a day."
        },
        {
          "name": "today",
          "write": false,
          "description": "Today's attendance plus each school's menu."
        },
        {
          "name": "events",
          "write": false,
          "description": "School calendar events for a date range (default next 30 days)."
        },
        {
          "name": "chat",
          "write": false,
          "description": "Latest chat messages between parent and school per child."
        },
        {
          "name": "doctor",
          "write": false,
          "description": "Login state, token expiry, API reachability and visible children."
        },
        {
          "name": "register_absence",
          "write": true,
          "description": "Register a sick or vacation absence for a child (requires confirm: true)."
        }
      ],
      "commands": [
        "vala login",
        "vala kids",
        "vala today",
        "vala lunch --week",
        "vala attendance --date 2026-05-15",
        "vala events --days 60",
        "vala chat --limit 5",
        "vala absent --type sick",
        "vala doctor",
        "vala serve"
      ],
      "envVars": [
        {
          "name": "VALA_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose register_absence in the MCP server."
        },
        {
          "name": "VALA_ENV",
          "description": "Set to test to use the Vala test backend."
        },
        {
          "name": "VALA_CONFIG_DIR",
          "description": "Override the config directory (default ~/.config/vala or $XDG_CONFIG_HOME/vala)."
        }
      ],
      "writesEnvVar": "VALA_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Daglegar upplýsingar, matseðlar og skilaboð úr Völu",
        "description": "Fylgstu með leikskóladeginum í Völu: hvernig barnið borðaði og svaf, mætingu, matseðli, viðburðum og skilaboðum frá starfsfólki. Þú getur líka tilkynnt veikindi eða frí ef þú leyfir breytingar.",
        "examples": [
          "Hvernig borðaði barnið mitt í hádeginu í vikunni?",
          "Hvaða viðburðir eru fram undan í leikskólanum í þessum mánuði?",
          "Láttu leikskólann vita að barnið mitt sé veikt í dag."
        ]
      }
    },
    {
      "id": "vedur",
      "repo": "axelpaul/vedur-cli",
      "name": "Veður",
      "service": "Icelandic Met Office (Veðurstofa Íslands)",
      "serviceUrl": "https://www.vedur.is",
      "tagline": "Weather forecasts, observations, warnings and earthquakes",
      "description": "Get forecasts and the latest observations from the Icelandic Met Office for a place or address. You can also check weather warnings and recent earthquakes. No sign-in needed.",
      "examples": [
        "Will it rain in Akureyri this afternoon?",
        "Are there any weather warnings for the south coast today?",
        "Have there been any earthquakes above magnitude 2 in the past 24 hours?"
      ],
      "category": "Weather",
      "auth": "none",
      "binaries": true,
      "tools": [
        {
          "name": "now",
          "write": false,
          "description": "Latest 10-minute observation near a place, address, saved location or coordinates, or for a station/region ID"
        },
        {
          "name": "forecast",
          "write": false,
          "description": "Hourly spot forecast (1–240 h) for a place, address, saved location, coordinates or forecast-point ID"
        },
        {
          "name": "observations_latest",
          "write": false,
          "description": "Latest observations for a station or region at 10min/hour/day/month/year aggregation"
        },
        {
          "name": "stations_find",
          "write": false,
          "description": "Search weather stations by name"
        },
        {
          "name": "stations_nearest",
          "write": false,
          "description": "Select the nearest active automatic weather station to a place or coordinates"
        },
        {
          "name": "warnings",
          "write": false,
          "description": "Active CAP weather warnings (summaries)"
        },
        {
          "name": "quakes",
          "write": false,
          "description": "Recent earthquakes with time, magnitude, area and review-mode filters"
        },
        {
          "name": "locations_list",
          "write": false,
          "description": "List locally saved locations"
        },
        {
          "name": "location_add",
          "write": true,
          "description": "Save a named location locally (requires confirmName)"
        },
        {
          "name": "location_remove",
          "write": true,
          "description": "Remove a saved location (requires confirmName)"
        }
      ],
      "commands": [
        "vedur now <place>",
        "vedur forecast <place> [--hours N]",
        "vedur stations find <query>",
        "vedur stations nearest <place>",
        "vedur observations latest --station <id>",
        "vedur warnings",
        "vedur quakes [--since 24h] [--min-magnitude N]",
        "vedur locations add|list|remove",
        "vedur serve"
      ],
      "envVars": [
        {
          "name": "VEDUR_MCP_ENABLE_WRITES",
          "description": "Set to 1 to expose the location_add/location_remove MCP tools"
        },
        {
          "name": "VEDUR_GEOCODER_URL",
          "description": "Alternative GeoJSON/ArcGIS address geocoder (default: Nominatim, Iceland only)"
        },
        {
          "name": "VEDUR_API_VERSION_WEATHER / _CAP / _QUAKES",
          "description": "Override pinned api.vedur.is API versions"
        }
      ],
      "writesEnvVar": "VEDUR_MCP_ENABLE_WRITES",
      "is": {
        "tagline": "Veðurspár, veðurathuganir, viðvaranir og jarðskjálftar",
        "description": "Sæktu veðurspá og nýjustu veðurathuganir frá Veðurstofu Íslands fyrir tiltekinn stað eða heimilisfang. Þú getur líka skoðað veðurviðvaranir og nýlega jarðskjálfta. Engin innskráning þarf til.",
        "examples": [
          "Verður rigning á Akureyri síðdegis?",
          "Eru veðurviðvaranir á Suðurlandi í dag?",
          "Hafa orðið jarðskjálftar yfir 2 að stærð síðasta sólarhringinn?"
        ]
      }
    }
  ]
}
