Skip to main content
Glama
PROMPTEYE-SP-Z-O-O

prompteye-mcp

Official

Read one prompt

get_prompt
Read-only

Retrieve a tracked prompt's AI visibility breakdown per assistant to see which assistants name your brand and which omit it.

Instructions

One prompt of the active project, with its visibility broken down per assistant — only the assistants that actually answered are listed. Call this to see which assistant is carrying a prompt and which is dropping the brand from it. When the brand is weak here, create_content_brief starts an article aimed at this prompt.

Changes are signed so that positive always means improvement. For average position that means the brand was named earlier in the answer, so a positive change goes with a lower position number.

visibility is the share of answers that named the brand, 0 to 100; reachIndex is that figure weighted by how much of the market each assistant carries; averagePosition is where in the answer the brand was named, counting from 1. Each is null until it is measured.

aiTraffic is the demand behind a prompt: PromptEye expands the question into the phrasings people actually use for it, weighs each one by how much of the question it carries, and adds up how much demand they attract per month. It is a property of the prompt, not a measurement of a period. 0 means it was measured and the demand is below the reporting floor of 50 searches a month. null means there is no figure: with aiTrafficMeasuredAt null it has not been measured yet, with a date it was measured and none of the phrasings came back with a volume, so it is unknown rather than zero. aiTrafficMeasuredAt is when the figure was last measured; a failed refresh keeps the earlier figure and its date. It is not what get_ai_traffic reports: that tool counts sessions that actually reached the site from an assistant, while this counts the demand behind the question.

businessPriority is how much the project should bet on a prompt: the average of how close to a purchase the question is asked and where the prompt ranks on demand among the project's own prompts. It is banded very_high above 0.8, high above 0.6, medium above 0.4, low above 0.2 and very_low below that. A priority set by hand in the app wins over the computed one, and the two are not reported apart, so a surprising value may be someone's deliberate call. It is null before the prompt has been ranked.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
endDateNoLast day to report on, inclusive. Defaults to today, and must be within 366 days of startDate.
promptIdYesId of the prompt, as list_prompts reports it.
startDateNoFirst day to report on, inclusive. Defaults to 30 days before today.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
changeYesMovement against the period of the same length directly before this one. null = no figure could be compared.
promptYes
statusYesactive = asked on every run, paused = not asked, pending = added but not measured yet.
byModelYesOne entry per assistant that actually answered.
groupIdYesnull = the prompt is ungrouped.
keywordYesKeyword the prompt was built around. Empty when it was written by hand.
metricsYes
aiTrafficYesEstimated monthly searches behind the prompt; a property of the prompt, not of the period. 0 = measured, below the reporting floor of 50 searches a month. null = no figure: not measured yet when aiTrafficMeasuredAt is null, otherwise measured with no volume found (unknown, not zero).
createdAtYesWhen the prompt was added, ISO 8601 in UTC.
categoriesYes
subcategoriesYes
businessPriorityYesvery_high, high, medium, low or very_low. null = not ranked yet. A priority set by hand wins over the computed one.
aiTrafficMeasuredAtNoWhen aiTraffic was last measured, ISO 8601 in UTC. null = never measured. A failed refresh keeps the previous figure and date.
businessPriorityReasonYesWhy the priority was set by hand. null = the computed priority, or no reason given.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.0.22
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "aiTraffic": {
      +      "description": "Estimated monthly searches behind the prompt; a property of the prompt, not of the period. 0 = measured, below the reporting floor of 50 searches a month. null = no figure: not measured yet when aiTrafficMeasuredAt is null, otherwise measured with no volume found (unknown, not zero).",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "aiTrafficMeasuredAt": {
      +      "description": "When aiTraffic was last measured, ISO 8601 in UTC. null = never measured. A failed refresh keeps the previous figure and date.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "businessPriority": {
      +      "description": "very_high, high, medium, low or very_low. null = not ranked yet. A priority set by hand wins over the computed one.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "businessPriorityReason": {
      +      "description": "Why the priority was set by hand. null = the computed priority, or no reason given.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "byModel": {
      +      "description": "One entry per assistant that actually answered.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "metrics": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "averagePosition": {
      +                "description": "Mean place the brand was named at in the answers that named it, counting from 1; lower is earlier. null = not measured.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "visibility": {
      +                "description": "Share of answers that named the brand in the period, in percent 0-100. null = not measured.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "visibility",
      +              "averagePosition"
      +            ],
      +            "type": "object"
      +          },
      +          "model": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "model",
      +          "metrics"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "categories": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "change": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "averagePosition": {
      +              "description": "Places moved, signed so positive = named earlier (an improvement). null = either period could not measure it.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "reachIndex": {
      +              "description": "Points reachIndex moved by; negative = fell. null = either period could not measure it.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "visibility": {
      +              "description": "Percentage points visibility moved by; negative = fell. null = either period could not measure it.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "visibility",
      +            "reachIndex",
      +            "averagePosition"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Movement against the period of the same length directly before this one. null = no figure could be compared."
      +    },
      +    "createdAt": {
      +      "description": "When the prompt was added, ISO 8601 in UTC.",
      +      "type": "string"
      +    },
      +    "groupId": {
      +      "description": "null = the prompt is ungrouped.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "keyword": {
      +      "description": "Keyword the prompt was built around. Empty when it was written by hand.",
      +      "type": "string"
      +    },
      +    "metrics": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "averagePosition": {
      +          "description": "Mean place the brand was named at in the answers that named it, counting from 1; lower is earlier. null = not measured.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "reachIndex": {
      +          "description": "Visibility weighted by how much of the market each assistant carries, 0-100, whole number. null = not measured.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "visibility": {
      +          "description": "Share of answers that named the brand in the period, in percent 0-100. null = not measured.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "visibility",
      +        "reachIndex",
      +        "averagePosition"
      +      ],
      +      "type": "object"
      +    },
      +    "prompt": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "active = asked on every run, paused = not asked, pending = added but not measured yet.",
      +      "type": "string"
      +    },
      +    "subcategories": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "prompt",
      +    "keyword",
      +    "status",
      +    "categories",
      +    "subcategories",
      +    "groupId",
      +    "createdAt",
      +    "aiTraffic",
      +    "businessPriority",
      +    "businessPriorityReason",
      +    "metrics",
      +    "change",
      +    "byModel"
      +  ],
      +  "type": "object"
      +}
  2. First observedv1.0.5

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover readOnlyHint/openWorldHint, so the description carries the behavioral load — and it does: null vs 0 semantics for aiTraffic, the 50-search reporting floor, the fact a failed refresh keeps the prior figure and date, the sign convention for changes, and the warning that a hand-set businessPriority is indistinguishable from the computed one. This is well beyond what the annotations or schema disclose.

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?

Front-loaded with usage before the metric reference, and each metric paragraph states a concrete rule rather than padding. It is nonetheless long, and with an output schema present some field-by-field prose is arguably redundant, keeping it off a 5.

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?

For a measurement-heavy read tool with three nuanced metrics, the description supplies the interval semantics, the null/zero distinction, the measurement timestamp behavior and the banding thresholds — everything an agent needs to interpret a call. Nothing material is missing.

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 100%, including the promptId lookup hint and the startDate/endDate defaults and 366-day constraint, so the schema does all the work. The description adds no input-parameter meaning of its own, making the baseline 3 correct.

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?

Opens with a specific verb and resource ('One prompt of the active project') and immediately narrows scope ('with its visibility broken down per assistant — only the assistants that actually answered are listed'). An agent can distinguish this from list_prompts and from get_ai_traffic without opening any schema.

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?

Explicitly states the situation that selects it ('Call this to see which assistant is carrying a prompt and which is dropping the brand from it') and routes to a sibling when the brand is weak ('create_content_brief starts an article aimed at this prompt'). It also fences off the closest-sounding sibling by contrasting with get_ai_traffic. No explicit when-not, but context is clear.

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