Skip to content

Topvisor MCP 0.6.0

Choose a tag to compare

@zai-one zai-one released this 14 Oct 15:17
· 6 commits to main since this release
85b721d
  • Upgrade note: TOPVISOR_TOOLSETS=all now also enables the new opt-in semantics, analytics and competitors_write toolsets (paid launches and writes still behind operator approval and the daily budget). 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 (TOPVISOR_TOOL_LOADING=eager|lazy, default eager = unchanged): lazy lists a small core plus topvisor_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 ≈5561, lazy ≈1196. 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 TOPVISOR_TOOLSETS. README lazy section lists verified tools/list_changed client support with sources.

  • Paid tasks relevants and indexing (projects_2/tasks) in topvisor_semantics_price / _launch; every paid topvisor_semantics_launch now also needs an operator-accepted, request-bound approval (topvisor-approval). Paid semantics launches reserve their estimate against TOPVISOR_CHECK_DAILY_BUDGET (shared with paid rank checks; an unknown dispatch outcome stays counted). Approvals are bound to the preparing actor.

  • topvisor_competitors_write (opt-in toolset competitors_write): add/del/import, edit name/brand/on/move, approval-gated.

  • Security (review fixes): approvals now live in the SQLite state database (durable commit, no shared topvisor-approvals.json) and are bound to account_id, the Topvisor user ID, the caller and the exact request including project_id (relevants/indexing payloads did not carry it), so an approval prepared for one account or project cannot authorise another. operator_command includes the absolute --path of the server's state database; topvisor-approval also accepts --config.

  • Fix: a paid semantics launch uses its approval ID as a stable task ID, consumed in the same transaction as the budget reservation; an unknown dispatch outcome fences further paid tasks for the project until topvisor-check-reconcile --check-id TASK_ID, and a replay returns the stored receipt. topvisor_competitors_write goes through the persistent idempotency ledger with a competitor-list readback (new optional idempotency_key), so a lost reply is never resubmitted by a fresh approval.

  • Snapshots no longer send or require region_index (not in the OpenAPI for snapshots_2); positions summaries still require it.

  • Review fixes (topvisor-openapi): search_updates sends required region_index + date; summary/chart/snapshot reports require date1+date2; keyword collection into a group sends in_one_group=true with to_group_id.

  • API re-check against topvisor-openapi (2026-10): positions summary/chart, snapshots, project competitors, tasks, audit/indexing/watcher summaries, apometr updates, bank history, keyword collection, frequency checks, deduplication and clustering progress were missing.

  • New opt-in toolset analytics (off by default; default tools and token budget unchanged): topvisor_report over a fixed read allowlist.

  • New opt-in toolset semantics: topvisor_semantics_tools (free deduplicate, cluster_progress), topvisor_semantics_price (collect / volumes price) and topvisor_semantics_launch (paid; same operator gate as paid rank checks: write enabled, project allowlisted, cost ≤ TOPVISOR_CHECK_MAX_COST, approved_cost equals a fresh price, confirm_cost=true).

  • Skill topvisor-semantic-core (self-contained semantics -> clusters -> positions), guide topvisor://guide/semantics, prompt semantic_core.

  • Router: one line per intent (RU/EN -> first tool; skill; guide) with topvisor://playbook and the generated topvisor://guide/tool-map as fallbacks; TOPVISOR_TOOLSETS=default|all.

  • tests/test_routing_eval.py + tests/evals/routing_cases.json (20 RU/EN requests incl. paraphrases and negative cases): fails if any tool, skill or guide is unreachable.

Source: 85b721d · Changes: v0.5.0...v0.6.0