Skip to main content
Glama

Create saved keywords

create_saved_keywords

Save keyword ideas without starting paid rank tracking, skipping keywords already tracked or saved.

Instructions

Save keyword ideas without starting paid rank tracking. Keywords already tracked or saved are skipped.

Input Schema

NameRequiredDescriptionDefault
keywordsYesKeyword ideas to save without starting rank tracking.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.17.1
    • changedInput schema / properties / keywords / items / anyOf
      Previous value: -[
      -  {
      -    "description": "Keyword phrase to save without starting rank tracking.",
      -    "maxLength": 180,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "cpc_cents": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "difficulty": {
      -        "anyOf": [
      -          {
      -            "maximum": 100,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "intent": {
      -        "anyOf": [
      -          {
      -            "maxLength": 80,
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "keyword": {
      -        "description": "Keyword phrase represented by this research snapshot.",
      -        "maxLength": 180,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "location": {
      -        "pattern": "^[A-Z]{2}(\\/[^/]{1,80}){0,2}$",
      -        "type": "string"
      -      },
      -      "search_volume": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "source_seed": {
      -        "anyOf": [
      -          {
      -            "description": "Keyword phrase to save without starting rank tracking.",
      -            "maxLength": 180,
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "variant_count": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "keyword"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "Keyword phrase to save without starting rank tracking.",
      +    "maxLength": 180,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "cpc_cents": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "difficulty": {
      +        "anyOf": [
      +          {
      +            "maximum": 100,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "intent": {
      +        "anyOf": [
      +          {
      +            "maxLength": 80,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "keyword": {
      +        "description": "Keyword phrase represented by this research snapshot.",
      +        "maxLength": 180,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "location": {
      +        "description": "Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.",
      +        "pattern": "^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$",
      +        "type": "string"
      +      },
      +      "search_volume": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "source_seed": {
      +        "anyOf": [
      +          {
      +            "description": "Keyword phrase to save without starting rank tracking.",
      +            "maxLength": 180,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "variant_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "keyword"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observedv0.6.1

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait: duplicates that are already tracked or saved are silently skipped rather than erroring. It does not mention auth needs, rate limits, or the 500-item cap.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core purpose front-loaded and the dedup rule immediately following. Every sentence earns its place.

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

Completeness3/5

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

For a create tool with annotations covering safety and a schema covering params, the description covers purpose and idempotency, which is adequate. It omits what a successful call returns and the 500-item batch limit, which an agent would want before a bulk save, and there is no output schema to fill that gap.

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 67%, and the schema itself documents keywords and project_id (including the prj_ pattern and a pointer to list_projects). The description adds no parameter-level detail beyond restating 'keyword ideas', so the baseline 3 for a mostly self-documenting schema is appropriate.

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 (save) and resource (keyword ideas) and adds a scope qualifier ('without starting paid rank tracking') that implicitly separates it from add_keywords. However, it never names the sibling it differs from, so the differentiation relies on the reader inferring the contrast with rank-tracking tools.

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

Usage Guidelines3/5

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

The 'without starting paid rank tracking' phrasing implies the use case (research-only keyword storage), and the skip rule implies re-running is safe. But there is no explicit when-to-use vs add_keywords/research_keywords guidance and no prerequisites stated.

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