Skip to main content
Glama

Metadata MCP Connector

List Keywords

list_keywords
Read-only

List and search keywords with filtering, sorting, and pagination options.

            PURPOSE:
            Retrieve a paginated list of keywords from the Metadata platform with advanced
            sorting and filtering capabilities. Optionally search by keyword name. Use this tool
            to discover, analyze, and export keyword data for campaign planning and optimization.

            WHEN TO USE:
            - Browse all available keywords in the account
            - Search for specific keywords by name
            - Find keyword variations and similar terms
            - Export keyword data with custom sorting
            - Analyze keyword metrics (search volume, bid prices)
            - Build keyword lists for campaign creation
            - Filter keywords by archived status
            - Compare keyword performance metrics

            KEY FEATURES:
            - NAME SEARCH: Filter by keyword name for targeted searches (optional)
            - PAGINATION: Use page and size parameters to navigate large datasets
            - SORTING: Sort by creation order (the default, newest first), search volume,
              bid prices, name, or modification date
            - FILTERING: Include or exclude archived keywords
            - PERFORMANCE DATA: Get avgMonthlySearches, lowerPageBid, higherPageBid metrics

            NAME SEARCH:
            The optional 'name' parameter supports:
            1. Single name (string): Searches for one keyword name
               - "marketing" → Finds "digital marketing", "email marketing", "marketing automation"
               - "seo" → Finds "SEO services", "SEO tools", "SEO analytics"
               - "ppc" → Finds "PPC advertising", "PPC campaigns"

            2. Multiple names (array of strings): Searches for multiple keywords at once
               - ["marketing", "seo", "ppc"] → Aggregates results from all three searches
               - Makes separate API requests for each name and combines results
               - Automatically deduplicates keywords by ID
               - Returns all unique keywords matching any of the provided names

            - Omit 'name' parameter to list all keywords without filtering
            - Both single and multiple searches support partial matching

            PAGINATION STRATEGY:
            The API returns paginated results. Use these parameters to navigate:
            - page: 0-based page number (default: 0, meaning first page)
            - size: Number of results per page (default: 25, recommended: 25-100)

            To get the next page of results, increment the 'page' parameter.
            Example:
            - page=0, size=25 → Returns items 0-24
            - page=1, size=25 → Returns items 25-49
            - page=2, size=25 → Returns items 50-74

            SORT OPTIONS (use format: field,direction):
            Available fields for sorting:
            - avgMonthlySearches,desc/asc: Sort by average monthly search volume
            - lowerPageBid,desc/asc: Sort by lower page bid (CPC floor price)
            - higherPageBid,desc/asc: Sort by higher page bid (CPC ceiling price)
            - name,desc/asc: Sort by keyword name alphabetically
            - id,desc/asc: Sort by creation order, newest first with desc (default)
            - modifiedDate,desc/asc: Sort by when the keyword was created or last
              re-saved, archived or unarchived

            Direction options:
            - desc: Descending order (highest to lowest)
            - asc: Ascending order (lowest to highest)

            SORT EXAMPLES:
            - sort="avgMonthlySearches,desc": Keywords with highest search volume first
            - sort="avgMonthlySearches,asc": Keywords with lowest search volume first
            - sort="lowerPageBid,desc": Keywords with highest CPC floor first
            - sort="higherPageBid,asc": Keywords with lowest CPC ceiling first
            - sort="name,asc": Keywords in alphabetical order (A-Z)
            - sort="name,desc": Keywords in reverse alphabetical order (Z-A)

            FILTERING:
            - archived: Filter by archived status (true/false, default: false)
              Set to true to include archived keywords
              Set to false to show only active keywords (recommended)

            PAGINATION WORKFLOW:
            1. Start with page=0 to get the first set of keywords
            2. Check the response metadata to see if more results exist
            3. If needed, increment page number and fetch again
            4. Continue until all desired results are retrieved

            PARTIAL PAGES:
            A page is partial when totalElements is larger than the rows it returns,
            and the response then carries a `note` saying so. A multi-name search
            counts only the rows it read, so its `note` names the searches that had
            more matches than one page or that failed. A keyword missing from a
            partial result may still exist: search it by name, or read the other
            pages, before saying it does not exist. To confirm keywords you just
            created, search them by name: a name that already existed keeps its old
            id, so it is not among the newest rows.

            RESPONSE FORMAT:
            Returns a paginated response with:
            {
              "totalElements": 2,
              "totalPages": 1,
              "data": [
                {
                  "name": "product match",
                  "avgMonthlySearches": 260,
                  "competition": "LOW",
                  "lowerPageBid": 0.00,
                  "higherPageBid": 0.00,
                  "id": 18330,
                  "archived": false,
                  "createdDate": "2025-09-15T20:35:50.000Z",
                  "modifiedDate": "2025-09-30T21:14:59.000Z"
                },
                {
                  "name": "keyword match",
                  "avgMonthlySearches": 140,
                  "competition": "LOW",
                  "lowerPageBid": 0.00,
                  "higherPageBid": 0.00,
                  "id": 18339,
                  "archived": false,
                  "createdDate": "2025-09-15T20:35:50.000Z",
                  "modifiedDate": "2025-09-30T21:14:59.000Z"
                }
              ]
            }
            A partial result also carries a top-level `note` string (see PARTIAL PAGES).

            COMMON USE CASES:
            1. List all active keywords:
               list_keywords()

            2. Search for "marketing" keywords:
               list_keywords(name="marketing")

            3. Get top 50 keywords by search volume:
               list_keywords(page=0, size=50, sort="avgMonthlySearches,desc")

            4. Find expensive keywords (highest CPC) with name search:
               list_keywords(name="analytics", sort="higherPageBid,desc")

            5. Find affordable keywords (lowest CPC):
               list_keywords(sort="lowerPageBid,asc")

            6. Get alphabetically sorted active keywords:
               list_keywords(page=0, size=100, sort="name,asc", archived=false)

            7. Export all keywords (paginate through results):
               list_keywords(page=0, size=100)
               list_keywords(page=1, size=100)
               list_keywords(page=2, size=100)
               ... (repeat for all pages shown in totalPages)

            8. Get the newest keywords (the default order):
               list_keywords(page=0, size=25)

               Get recently created or changed keywords:
               list_keywords(page=0, size=25, sort="modifiedDate,desc")

            9. Search with pagination:
               list_keywords(name="marketing", page=0, size=50)
               list_keywords(name="marketing", page=1, size=50)

            10. Search for multiple keyword names at once:
                list_keywords(name=["marketing", "seo", "ppc"])

            11. Search multiple names with sorting:
                list_keywords(name=["analytics", "ads"], sort="avgMonthlySearches,desc")

            12. Search multiple names and exclude archived:
                list_keywords(name=["social", "media"], archived=false)

            PARAMETERS:
            - name: Optional keyword name or partial name to search for. Can be a string or array of strings.
                    Supports partial matching. Omit to list all keywords. (optional)
            - archived: Filter by archived status (default: false)
            - page: Page number for pagination (0-based, default: 0)
            - size: Number of items per page (default: 25, max recommended: 100)
            - sort: Sort criteria in format: field,direction (default: id,desc, newest first)

            PERFORMANCE TIPS:
            - Use size=100 for bulk exports to reduce API calls
            - Use page number to efficiently navigate large datasets
            - Filter by archived=false to exclude inactive keywords
            - Keep the default id,desc to see recently created keywords first
            - Sort by modifiedDate,desc to see recently created or changed keywords
            - Use name parameter for targeted searches to reduce result set
            - When searching multiple names, each name triggers a separate API call
              Use reasonable list sizes to avoid excessive API calls

            EXAMPLES:
            - list_keywords() - Get first 25 active keywords
            - list_keywords(name="marketing") - Search for marketing keywords
            - list_keywords(name=["marketing", "seo"]) - Search multiple keywords
            - list_keywords(page=0, size=50, sort="avgMonthlySearches,desc") - Top 50 by search volume
            - list_keywords(name="seo", sort="avgMonthlySearches,desc") - SEO keywords by search volume
            - list_keywords(name=["ads", "analytics"], sort="higherPageBid,desc") - Multiple names by bid price
            - list_keywords(page=1, size=100, archived=false, sort="name,asc") - Page 2 of keywords A-Z
            - list_keywords(page=0, size=25, sort="lowerPageBid,desc") - Most expensive keywords

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoOptional keyword name(s) to search for. Can be a single string or array of strings. Supports partial matching. Omit to list all keywords.
pageNoPage number for pagination (0-based indexing). Default is 0 for the first page.
sizeNoNumber of items per page (default: 25, recommended: 25-100).
sortNoSort criteria in format: field,direction. Options: id (creation order), avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: id,desc (newest first).id,desc
archivedNoFilter by archived status. Set to false to show active keywords (default), true to include archived keywords.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / sort / description
      Previous value: -"Sort criteria in format: field,direction. Options: id (creation order), avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: id,desc (newest first). modifiedDate,desc lists keywords with no modifiedDate last."New value: +"Sort criteria in format: field,direction. Options: id (creation order), avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: id,desc (newest first)."
  2. Changed3 schema fields changed
    • changedInput schema / properties / sort / default
      Previous value: -"modifiedDate,desc"New value: +"id,desc"
    • changedInput schema / properties / sort / description
      Previous value: -"Sort criteria in format: field,direction. Options: avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: modifiedDate,desc"New value: +"Sort criteria in format: field,direction. Options: id (creation order), avgMonthlySearches, lowerPageBid, higherPageBid, name, modifiedDate. Direction: desc (descending) or asc (ascending). Default: id,desc (newest first). modifiedDate,desc lists keywords with no modifiedDate last."
    • changedInput schema / properties / sort / enum
      Previous value: -[
      -  "avgMonthlySearches,desc",
      -  "avgMonthlySearches,asc",
      -  "lowerPageBid,desc",
      -  "lowerPageBid,asc",
      -  "higherPageBid,desc",
      -  "higherPageBid,asc",
      -  "name,desc",
      -  "name,asc",
      -  "modifiedDate,desc",
      -  "modifiedDate,asc"
      -]New value: +[
      +  "id,desc",
      +  "id,asc",
      +  "avgMonthlySearches,desc",
      +  "avgMonthlySearches,asc",
      +  "lowerPageBid,desc",
      +  "lowerPageBid,asc",
      +  "higherPageBid,desc",
      +  "higherPageBid,asc",
      +  "name,desc",
      +  "name,asc",
      +  "modifiedDate,desc",
      +  "modifiedDate,asc"
      +]
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral depth beyond that: multi-name searches make separate API requests and deduplicate by ID, partial pages carry a special note, a keyword missing from a partial result may still exist, and a created keyword that already existed keeps its old ID. This is exactly the kind of non-obvious behavior an agent needs to interpret results correctly.

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

Conciseness3/5

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

The description is well-structured with clear headings and front-loaded purpose, but it is very long and substantially repetitive. Sort options appear in KEY FEATURES, SORT OPTIONS, PARAMETERS, and PERFORMANCE TIPS; 'COMMON USE CASES' and 'EXAMPLES' largely overlap. Every sentence does not earn its place, and the same guidance is restated multiple times.

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

Completeness5/5

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

Despite lacking an output schema, the description includes a full response format example, explains partial-page semantics and the note field, and documents pagination workflow, sorting, filtering, use cases, and performance tips. For a read-only list tool with five parameters, this is exceptionally complete.

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

Parameters5/5

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

Although the schema already covers 100% of parameters, the description adds significant meaning: partial-matching examples for 'name', behavioral semantics of array input, 0-based pagination with a worked example, sort format and field meanings, archived filtering defaults, and the recommended size range. This goes far beyond the schema's descriptions and materially improves invocation correctness.

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

Purpose5/5

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

The description opens with a specific verb+resource statement: 'List and search keywords with filtering, sorting, and pagination options,' and then elaborates: 'Retrieve a paginated list of keywords from the Metadata platform...' It also clarifies what this tool is for (discover, analyze, export keyword data) and distinguishes it from creation/mutation tools like create_keywords by its read-only nature.

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?

A dedicated 'WHEN TO USE' section lists concrete scenarios: browsing all keywords, searching by name, finding variations, exporting data, analyzing metrics, building campaign lists, and filtering by archived status. It does not explicitly name alternatives or give when-not-to-use conditions, but the context is strong and immediately actionable.

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.

Resources