Skip to main content
Glama

SEO opportunities

onelence_list_seo_opportunities
Read-onlyIdempotent

SEO candidates and their disposition, reason, Work action state, evidence readiness, and suggested next step (filterable by lane). The summary includes search metrics and connection state. For one opportunity's brief use onelence_get_seo_opportunity; to plan or close one, onelence_choose_seo_opportunity. For site traffic by page use onelence_get_breakdown. Needs a plan with the SEO workspace.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "onelence_list_seo_opportunities"
  }
}

Input Schema

NameRequiredDescriptionDefault
endNoWindow end, inclusive for a date. Defaults to now.
laneNo
siteNoSite domain (e.g. example.com) or site id. Defaults to the workspace's newest active site.
limitNoItems to return (default 25).
startNoWindow start: a date (YYYY-MM-DD) or ISO 8601 date-time. Defaults to 30 days before end.
cursorNonext_cursor from the previous call, for more.

Output Schema

NameRequiredDescriptionDefault
dataYes
moreNoHow to fetch the next page, when has_more.
objectYes
summaryYes
has_moreYes
next_cursorYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "data": {
      +      "items": {
      +        "properties": {
      +          "action_state": {
      +            "enum": [
      +              "opportunity",
      +              "evaluation",
      +              "work",
      +              "none",
      +              "unavailable"
      +            ],
      +            "type": "string"
      +          },
      +          "candidate_fingerprint": {
      +            "description": "Opaque version token. Choosing the opportunity requires the same value.",
      +            "type": "string"
      +          },
      +          "confidence": {
      +            "enum": [
      +              "high",
      +              "medium",
      +              "low",
      +              "missing"
      +            ],
      +            "type": "string"
      +          },
      +          "conflicts": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "disposition": {
      +            "enum": [
      +              "ready_to_plan",
      +              "check_first",
      +              "explore_only",
      +              "in_work",
      +              "excluded"
      +            ],
      +            "type": "string"
      +          },
      +          "effort": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "focus_queries": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "kind": {
      +            "type": "string"
      +          },
      +          "lane": {
      +            "enum": [
      +              "grow_proven_pages",
      +              "recover_visibility",
      +              "fix_search_leakage",
      +              "create_new_coverage",
      +              "needs_evidence"
      +            ],
      +            "type": "string"
      +          },
      +          "next_step": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "object": {
      +            "const": "seo_opportunity",
      +            "type": "string"
      +          },
      +          "page": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "page_conversions": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "page_value": {
      +            "enum": [
      +              "high",
      +              "medium",
      +              "low",
      +              "missing"
      +            ],
      +            "type": "string"
      +          },
      +          "page_visitors": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "primary_reason": {
      +            "type": "string"
      +          },
      +          "query": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "search_potential": {
      +            "enum": [
      +              "high",
      +              "medium",
      +              "low",
      +              "missing"
      +            ],
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "topic": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "urgency": {
      +            "enum": [
      +              "high",
      +              "medium",
      +              "low",
      +              "missing"
      +            ],
      +            "type": "string"
      +          },
      +          "why": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "object",
      +          "id",
      +          "kind",
      +          "page",
      +          "query",
      +          "topic",
      +          "lane",
      +          "search_potential",
      +          "page_value",
      +          "confidence",
      +          "urgency",
      +          "effort",
      +          "page_visitors",
      +          "page_conversions",
      +          "title",
      +          "why",
      +          "next_step",
      +          "focus_queries",
      +          "conflicts",
      +          "disposition",
      +          "primary_reason",
      +          "candidate_fingerprint",
      +          "action_state"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "has_more": {
      +      "type": "boolean"
      +    },
      +    "more": {
      +      "description": "How to fetch the next page, when has_more.",
      +      "type": "string"
      +    },
      +    "next_cursor": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "object": {
      +      "const": "list",
      +      "type": "string"
      +    },
      +    "summary": {
      +      "properties": {
      +        "average_position": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "bing_connected": {
      +          "type": "boolean"
      +        },
      +        "candidate_empty_state": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "candidate_readiness": {
      +          "type": "string"
      +        },
      +        "clicks": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "ctr": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "data_through": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "google_connected": {
      +          "type": "boolean"
      +        },
      +        "impressions": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "lanes": {
      +          "additionalProperties": {
      +            "type": "number"
      +          },
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "reason": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "state": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "state",
      +        "reason",
      +        "data_through",
      +        "google_connected",
      +        "bing_connected",
      +        "clicks",
      +        "impressions",
      +        "ctr",
      +        "average_position",
      +        "lanes",
      +        "candidate_readiness",
      +        "candidate_empty_state"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "object",
      +    "data",
      +    "has_more",
      +    "next_cursor",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds value beyond that by disclosing the prerequisite ("Needs a plan with the SEO workspace") and what the summary contains (search metrics and connection state). It does not discuss pagination behaviour beyond what the cursor param implies, but with an output schema present that is a minor omission.

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?

Three tight sentences, front-loaded with what the tool returns before moving to routing and prerequisites; there is no filler. The compression is occasionally telegraphic ("Work action state", "evidence readiness") and the parenthetical lane note is buried mid-sentence, but nothing is wasted.

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?

For a six-parameter read tool with an output schema, the description covers the essentials: what comes back, how it is scoped by lane, the workspace/plan prerequisite, and which siblings to use instead. It stops short of explaining default ordering or what a lane's semantics mean in practice, but an agent has enough to call it correctly.

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

Parameters3/5

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

Schema description coverage is 83%, so the schema already explains site, start, end, limit, and cursor. The description contributes only "filterable by lane," which is the one parameter lacking a schema description, and the enum values are largely self-explanatory. This meets the baseline of 3 with a marginal addition rather than meaningful new semantics.

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?

The description names the resource precisely and enumerates the fields returned (disposition, reason, Work action state, evidence readiness, suggested next step) plus a summary of search metrics and connection state. It also explicitly distinguishes itself from onelence_get_seo_opportunity and onelence_choose_seo_opportunity, so the agent can tell the three apart. The only shortfall is that it opens with a noun phrase rather than a verb, leaving the list/read action implicit.

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?

It routes the agent clearly: use onelence_get_seo_opportunity for one opportunity's brief, onelence_choose_seo_opportunity to plan or close, and onelence_get_breakdown for site traffic by page. Those conditional alternatives give real selection guidance. What's missing is any statement of when this list is the wrong choice among the many other list_* siblings (evidence gaps, signals, decisions).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.