Skip to main content
Glama

List project keywords

list_keywords
Read-only

Retrieve tracked keywords and their current and previous rankings for a Bisibility project, with search, filters, sorting, and pagination. Use it to check SERP positions and rank history.

Instructions

List the tracked keywords (search terms) of a project with their current rankings: latest_position, previous_position, ranking_url, target URL, tags, schedule, and market. Supports pagination, search, filters, and sorting. Use it for rank positions, rank tracking, keyword rankings, and SERP position lookups. Each keyword includes location_key, language_code, and language_label for its exact market pair. latest_position can be null after a failed check, with unknown observation coverage, or for absence within the requested depth. Read latest_check.status and observation_completeness. Only complete coverage supports absence within depth; a positive position remains valid with truncated coverage. latest_successful_check is the most recent completed observation and can also have unknown coverage.

Input Schema

NameRequiredDescriptionDefault
tagNo
sortNo
limitNo
topicNo
cursorNo
deviceNoDevice whose search or ranking data is being selected.
intentNo
searchNo
countryNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
position_gtNo
position_ltNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.6.1

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/non-destructive annotations, the description discloses substantive behavioral semantics: why latest_position can be null (failed check, unknown coverage, absence beyond requested depth), that latest_check.status and observation_completeness must be consulted, that only complete coverage supports an absence-within-depth claim while a positive position survives truncated coverage, and that latest_successful_check can also carry unknown coverage. This is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return fields are front-loaded, followed by filter capabilities and then the null/coverage rules, which is a sensible order. It is a single dense paragraph and the coverage caveats come as a compressed run of near-identical sentences, but each sentence carries distinct semantic content rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the heavy lifting on the return side: it names the ranking fields, the market-pair fields, and the nullability/coverage rules, which is unusually complete. The gap is on the input side — twelve parameters at 17% schema coverage are left largely unexplained, so an agent still cannot confidently construct filters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% across 12 parameters, so the description should be compensating. Instead it offers a generic 'Supports pagination, search, filters, and sorting' and never explains tag, topic, intent, country, device, cursor, limit bounds, or the sort enum semantics. The location_key/language_code/language_label mentions are output fields, not inputs, so they do not help parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'List the tracked keywords (search terms) of a project' — and enumerates the returned ranking fields (latest_position, previous_position, ranking_url, target_url, tags, schedule, market). It is clearly distinguishable from suggestion/research tools by the word 'tracked', but it never explicitly names the nearest siblings (get_keyword for one keyword, list_saved_keywords for saved lists), so differentiation is inferential rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it for rank positions, rank tracking, keyword rankings, and SERP position lookups' gives clear query-intent triggers for selecting this tool. However, it gives no exclusions or explicit alternatives (e.g. use get_keyword for a single keyword, list_rank_check_runs for check-level data), so the agent must infer boundaries from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools