Skip to content

Releases: zai-one/keysso-mcp

Keysso MCP 0.6.0

Choose a tag to compare

@zai-one zai-one released this 14 Oct 15:16
b13808d
  • Upgrade note: KEYSSO_TOOLSETS=all now also enables the new opt-in jobs, monitoring and api toolsets (paid and writing calls, each still behind confirm and operator approval). Unset or default keeps the 0.5.0 surface; list toolsets explicitly if you relied on all meaning the previous set.
  • Optional lazy tool loading (KEYSSO_TOOL_LOADING=eager|lazy, default eager = unchanged): lazy lists a small core plus keysso_enable_toolsets (toolsets with one-line description and token cost); enabling registers the tools at runtime and sends notifications/tools/list_changed. Allowlists, read-only mode and approval gates still apply. Setup wizard asks eager vs lazy. Startup tokens (tools/list + instructions, ≈chars/4): eager ≈1726, lazy ≈1013. Scope: enablement is per MCP session (FastMCP session visibility), so one client's enabled toolsets never appear for another. The HTTP transport here is stateless (every request is its own session), so enabled toolsets do not persist there: for shared HTTP use eager or KEYSSO_TOOLSETS. README lazy section lists verified tools/list_changed client support with sources.
  • Security (approvals): approvals are bound to the preparing principal and to the server's account, API origin and credential fingerprint, so ledgers sharing a state directory cannot spend each other's approvals; an approval is reserved only after authorization, delegation replay checks and validation, and a request that never reached Keys.so (admission denied, cooldown, oversize) releases it instead of burning it.
  • Fix (approvals): an approved paid/writing call gets exactly one upstream attempt; a timeout, transport error or 5xx after dispatch returns provider_outcome_unknown (retryable=false), is audited as unknown, and the next approval for the identical request carries previous_outcome_unknown for the operator.
  • Security (keysso_api): GET serp/<id>/csv (queues a provider export job, per apidoc) needs an operator approval like non-GET calls; requests are bounded before an approval is stored (1 MiB, every nested list ≤ 10,000 items, depth 8), and pending approvals have per-principal and total quotas (approval_quota_exceeded).
  • Fix (keysso_monitoring): engine follows apidoc (0 Yandex desktop, 1 Yandex mobile, 3 Google mobile, 4 Google desktop; previously 1 was described as Google and 3/4 were rejected); tracking_item accepts http(s) URLs as documented, not only bare domains and paths.
  • Operator approvals (keysso-approval CLI): every limit-spending job (confirm=true) and every non-GET keysso_api call needs an operator-accepted, single-use, request-bound approval_id.
  • Approval store hardening: prepare/accept/consume hold an exclusive file lock, so an operator acceptance written from a stale read can no longer re-arm an approval the server just consumed; operator_command pins --path to the server's approval file (works from any directory, without KEYSSO_STATE_PATH); keysso-approval --list shows the exact request the digest covers. keysso_api rejects ./.. path segments (HTTP clients collapse them into unlisted endpoints) and names the allowed paths on error; an invalid confirm=true start returns a validation_failed envelope. Delegated request_hash rules for the opt-in tools are in docs/REPORTS.md.
  • keysso_api (opt-in toolset api): documented tools/*, wordstat/*, serp/*, clustering import/list, update-frequency, node keywords, monitoring PATCH/DELETE/link-words.
  • Report filter parameter (apidoc defaultFilter).
  • Review fixes: concurents_by_keywords result uses documented view=organic|context and sends base; extended_keywords start takes similarity (apidoc config); invalid top/top_number are rejected instead of silently replaced; organic/keywords/bypage and organic/concurent_pages require page_url.
  • keys_so_query allowlist covers the rest of the read API (apidoc.keys.so, 2026-10): competitor pages, keywords by page and competitor pages (page_url), organic keywords URL filter (url, includeSubLevels), lost pages, organic AI answers, outlinks / outlink domains, links by IP and subnet, top-domain visibility, Direct ads by phrase (kid), RSYA, subdomains (id), robots.txt history (date), Zen dashboard/channels/publications, projects and project competitors, saved group reports (/report/group/list, /report/group/<section>/<rid>).
  • New opt-in toolsets (off by default, so the default tool list and token budget stay flat): jobs — keysso_keyword_job (keywords_by_list, extended_keywords, concurents_by_keywords: start -> status -> result) and keysso_clustering (create -> build -> status -> folders -> keywords); monitoring — keysso_monitoring (projects, entity, dates, report, compare, chart, limits; create from a clustering uid or phrases; start a refresh). Without confirm=true every start returns a free preview; with it the call returns an approval_id for the operator (see above); KEYSSO_READ_ONLY=1 removes these tools.
  • Skill keysso-semantic-core (self-contained semantics -> clusters -> positions), guide keysso://guide/jobs, prompt semantic_core.
  • Router: one line per intent (RU/EN words -> first tool; skill; guide) plus keysso://playbook and the generated keysso://guide/tool-map (every tool by toolset) as fallbacks. KEYSSO_TOOLSETS accepts default and all.
  • tests/test_routing_eval.py + tests/evals/routing_cases.json: 22 casual RU/EN requests (incl. paraphrases and negative cases); fails if any tool, skill or guide is unreachable from the router.

Source: b13808d · Changes: v0.5.0...v0.6.0

Keysso MCP 0.5.0

Choose a tag to compare

@zai-one zai-one released this 13 Oct 14:10
647315f
  • License: LicenseRef-ZAI-ONE 2.0 (source-available). Free install and use for yourself and your organisation, including commercial work; issues and pull requests welcome; copying code into other projects, redistribution, embedding and competing hosted services need written permission. Earlier releases keep their LicenseRef-ZAI-ONE 1.0 terms (see NOTICE). README first screen: one-line scope, why this MCP, maintenance and update check.
  • Agent layer: router instructions (≤1200 chars: when Keys.so vs Topvisor/Arsenkin, quota rules), compact template descriptions and titles.
  • Toolsets meta, reports, ai_tracker (KEYSSO_TOOLSETS, KEYSSO_TOOLS, KEYSSO_DISABLED_TOOLS, KEYSSO_READ_ONLY); keysso://toolsets.
  • Resources keysso://playbook, keysso://guide/{metrics-glossary,ai-tracker,errors}; prompts competitor_research, content_gap, phrase_report.
  • Self-contained skills keysso-competitor-research, keysso-content-gap, keysso-phrase-report with references and templates; Claude Code plugin manifest, Cursor rule, .agents/skills.
  • New keysso_limits (GET /limits/all); fields=[...] column projection on keysso_domain_report and keysso_compare_domains (trims rows after fetch, so it saves tokens, not quota; part of the delegation hash only when provided; names absent from every row are listed in missing_fields).
  • scripts/token_budget.py + tests gate instruction, description and SKILL.md sizes.
  • Install snippets and the plugin manifest pin git+https://github.com/zai-one/keysso-mcp@v0.5.0.

Source: 647315f · Changes: v0.4.0...v0.5.0

Keysso MCP 0.4.0

Choose a tag to compare

@zai-one zai-one released this 12 Oct 08:24

— Ad archives, AI tracker and update hints

  • keys_so_query: monthly Yandex ad archives from Keys.so API 1.0.24–1.0.26 (context/ads/archive, context/keywords/archive, context/keywords/byads/archive, context/keyword/ads/archive and their months lists) with month, keyword and full parameters; keyword_dashboard and similarkeys phrase reports.
  • Sorts that Keys.so now rejects with HTTP 400 fail locally; up to three comma-separated sort fields are accepted.
  • keysso_ai_tracker: read-only AI tracker reports (projects, entity, dates, report, mentions, citation, reference, sources, competitors, prompt).
  • keysso_check_update: suggests an update from the latest GitHub release and never installs; 24h cache, offline-safe, cached startup hint, opt out with KEYSSO_DISABLE_UPDATE_CHECK=1.
  • Update check hardening: only plain version tags (v1.2.3) are accepted, the cache is re-validated on read, failures back off for 30 minutes and force_refresh runs at most once a minute.
  • keysso_check_update goes through the same authorization and audit as the other tools without spending Keys.so quota.
  • MCP tool annotations (readOnlyHint, idempotentHint) on every tool.
  • Strict input types: wrongly typed keys_so_query parameters fail with validation_failed before any provider call.

English setup · Описание по-русски

Download the wheel or source archive below and verify SHA256SUMS. The installed setup
command generates local JSON/TOML client configuration; a source checkout is optional.
Your own provider credentials and API permissions remain required.

Verified on Python 3.12, 3.13 and 3.14 on Linux and Windows: existing contracts,
synthetic functional tests, clean wheel installation and real MCP stdio checks.
Live provider accounts and production deployment were outside this release verification.
GitHub verification · Source commit 1a0de8baea16bc5e90e247425b378e6f12a43a1a.

ZAI.ONE is a digital agency for websites, SEO, advertising and analytics.
ZAI.ONE — интернет-агентство: сайты, SEO, реклама и аналитика.
Contact / Написать в Telegram about setup and integration.

LicenseRef-ZAI-ONE permits installation and internal use on your own or authorized
accounts; it is not an open-source license. Third-party rights remain unchanged.
Stars are welcome. Request changes through Issues.

For a source build, install the generated versioned wheel:

uv build
python -m pip install dist/zai_keysso_mcp-0.4.0-py3-none-any.whl

Keysso MCP 0.3.0

Choose a tag to compare

@zai-one zai-one released this 09 Sep 12:40

— Reports you can work with

  • Typed domain reports and domain comparisons with bounded pagination, provenance and CSV export.
  • Preserve per-attempt quotas across report pages and redact provider fields before CSV conversion.
  • Installable setup wizard and JSON/TOML client snippets that work outside the checkout.
  • English and Russian agency information, integration contact and package installation guide.

English setup · Описание по-русски

Download the wheel or source archive below and verify SHA256SUMS. The installed setup
command generates local JSON/TOML client configuration; a source checkout is optional.
Your own provider credentials and API permissions remain required.

Verified on Python 3.12, 3.13 and 3.14 on Linux and Windows: existing contracts,
synthetic functional tests, clean wheel installation and real MCP stdio checks.
Live provider accounts and production deployment were outside this release verification.
GitHub verification · Source commit e4ad75236ff0039732862925e36b340d8a7f8b25.

ZAI.ONE is a digital agency for websites, SEO, advertising and analytics.
ZAI.ONE — интернет-агентство: сайты, SEO, реклама и аналитика.
Contact / Написать в Telegram about setup and integration.

LicenseRef-ZAI-ONE permits installation and internal use on your own or authorized
accounts; it is not an open-source license. Third-party rights remain unchanged.
Stars are welcome. Request changes through Issues.

For a source build, install the generated versioned wheel:

uv build
python -m pip install dist/zai_keysso_mcp-0.3.0-py3-none-any.whl

Keysso MCP 0.2.0

Choose a tag to compare

@zai-one zai-one released this 09 Sep 07:28

Install Keysso MCP on your own computer or server and connect an MCP client.

  • Quick start and installation guide.
  • Changes in 0.2.0.
  • Python 3.12, 3.13 and 3.14 verified on Linux and Windows. Clean wheel installation, real stdio discovery and source-distribution builds passed using synthetic fixtures.
  • Provider credentials and API access remain required. Live provider validation is an operator step.
  • Proprietary LicenseRef-ZAI-ONE: install and use for your own or authorized accounts. Separately identified third-party licenses remain unchanged. Stars welcome; request improvements through Issues.

Download the wheel or source archive below; verify it against SHA256SUMS.
Exact source commit: c67f39f6f4315d7686e3c8e8bbf2197549891a13. Verification run.