Skip to main content
keenable-cli is a single-binary CLI for Keenable — configure MCP for your AI clients, search the web, and manage API keys from the terminal. Run keenable login once to authenticate; the CLI stores your credentials and reuses them for every command. See authentication for the details, and rate limits for the caps that apply with and without a key.

Installation

Quick start

Authentication

MCP setup

Supported clients: Claude Code, Cursor, Windsurf, Codex, OpenCode.

Date and time filters

--acquired-after, --acquired-before, --published-after, and --published-before each accept one of the following formats:
  • Date in RFC 3339 full-date form (YYYY-MM-DD) — covers that whole day in UTC. On an --*-after flag it resolves to 00:00:00 on that date; on a --*-before flag it resolves to 23:59:59.999 on that date, so pages from the named day are kept at either end. Pass a timestamp instead to cut at an exact instant.
  • Timestamp in ISO 8601 form (YYYY-MM-DDTHH:MM:SS[.sss][±HH:MM]). When a timezone offset is not provided, the timezone is interpreted as UTC.
  • Relative delta (<number><unit>, e.g. 7d, 30min) — resolves to the request time minus the delta, truncated to minute precision, or to --query-time minus the delta when that is set. Supported units: min (minutes), h (hours), d (days), mo (months), y (years).
Relative deltas may be combined with absolute values across the two bounds of a window:
For example, at request time 2026-05-18T14:23:45Z, --acquired-after 2h resolves to 2026-05-18T12:23:00Z — a document acquired at 12:22:59Z is dropped, one acquired at 12:23:00Z is kept. Mind the difference between a date and a timestamp on a --*-before flag: --acquired-before 2026-05-01 keeps a page acquired at 2026-05-01T14:31:13Z, while --acquired-before 2026-05-01T00:00:00Z drops it. Use the date form to mean “up to and including that day”, and the timestamp form to cut at midnight. --query-time moves the whole search back to an instant: a page acquired after it is not a candidate at all, so the answer is the one the index would have given then rather than today’s answer filtered down. It takes the same formats as the filters above.
It also re-bases every relative delta in the same command. A delta resolves against the request time only when --query-time is absent; with it, --published-after 30d means thirty days before --query-time:
returns pages published between 2026-05-14 and 2026-06-13 — not the last thirty days. Absolute bounds are unaffected. A date-only --query-time resolves to 00:00:00 UTC, which is the opposite end of the day from a date-only --*-before flag: --query-time 2026-06-13 cuts at the start of 13 June, while --acquired-before 2026-06-13 keeps all of it.

Fetch

Updating

The CLI checks for updates automatically once per hour. To update manually:
Or re-run the installer script.