prompteye-mcp
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@prompteye-mcpHow visible is our brand in AI assistant answers and which competitors appear alongside us?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
prompteye-mcp
An MCP server for PromptEye — how visible a brand is inside the answers AI assistants give.
A client picks a project, then asks about its visibility, the competitors answering alongside it, the prompts being tracked, and the answers and sources behind the numbers.
The server needs an API key and the API URL of the deployment it belongs to. Both are at app.prompteye.com/integrations, and it refuses to start without them.
Where the answers come from
Every tool whose endpoint the PromptEye API already serves calls the API. The rest answer
from the sample data in src/fixtures/, and say so in their text, so the model does not
pass illustrative figures off as measurements.
Tool | Endpoint | Source |
|
| API |
|
| API |
|
| API |
|
| API |
|
| API |
|
| API |
| — | sample data |
| — | sample data |
| — | sample data |
When the API grows an endpoint: add it to the client in src/api/, then move the method
from the fixtures to src/client/live-client.ts.
Related MCP server: ai-visibility-mcp
Running it
npm install
cp .env.example .env # put your key and API URL in it
npm run build
npm start # stdio — Claude Desktop, Cursor
npm run start:http # Streamable HTTP on http://localhost:3000/mcp
npm testDuring development, npm run dev and npm run dev:http watch and reload.
Claude Desktop
npm run bundle packs the server into build/prompteye-mcp.mcpb. Install it by
double-clicking the file, dragging it onto the Claude Desktop window, or through Settings →
Extensions → Advanced settings → Install Extension. The install form asks for both settings:
PromptEye API key —
pe_live_…, with theapi_accessscope. Kept in the operating system's keychain.API base URL — the API URL of the deployment that key belongs to.
Both are at app.prompteye.com/integrations.
After changing either, disable and re-enable the extension so the server restarts with them.
The server logs where its answers come from — never the key — to
~/Library/Logs/Claude/mcp-server-PromptEye.log.
Pushing a v* tag builds the bundle in CI and attaches it to the GitHub release
(.github/workflows/bundle.yml); the workflow also runs on demand.
Configured by hand instead of as a bundle:
{
"mcpServers": {
"prompteye": {
"command": "node",
"args": ["/absolute/path/to/prompteye-mcp/dist/index.js"],
"env": {
"PROMPTEYE_API_KEY": "pe_live_…",
"PROMPTEYE_API_BASE_URL": "https://…"
}
}
}
}The API client
src/api/ is a client for the PromptEye API that knows nothing about MCP and depends on
zod alone, so it can be published as its own package.
import { PromptEyeApi, PromptEyeApiError } from "./api/index.js";
const api = new PromptEyeApi({
token: process.env.PROMPTEYE_API_KEY!,
baseUrl: process.env.PROMPTEYE_API_BASE_URL!,
});
const account = await api.account.get();
const { data: projects } = await api.projects.list();
const project = await api.projects.get(projects[0].id);
const knowledgeBase = await api.knowledgeBase.get(project.id);
const { data: categories } = await api.categories.list(project.id);
const { data: suggestions } = await api.promptSuggestions.list(project.id, { groupId: "…" });Option | Default | |
| required | The API key, sent as |
| required | API root of the deployment the token belongs to |
|
| Request timeout |
| global | Any compatible implementation |
|
| Sent with every request |
Every method also takes { signal } as its last argument.
Responses are validated with zod: unknown fields are dropped and enumeration values added
later are accepted, while a field that changed shape throws a ZodError.
A non-2xx answer throws PromptEyeApiError with the status and the response body;
code and details are read from that body, and message comes from API_ERROR_MESSAGES,
which maps every documented error code to a human message.
How a conversation goes
Every tool but list_projects, select_project and get_account reports on the active
project, and takes no project argument. So a session starts by choosing one:
list_projects → the projects, with their ids
select_project(projectId: …) → that project is now active
list_prompt_suggestions()
get_visibility_summary(by: "day")Calling a project-scoped tool before selecting returns a recoverable error telling the model to list and select first — except when the key reaches exactly one project, which is then selected automatically.
Periods default to the last 30 days and are capped at 366. model narrows any of them to
one assistant: gpt, perplexity, claude, deepSeek, gemini, grok, llama,
aiOverview, copilot, googleAiMode.
The widget
get_visibility_summary is registered as an MCP App tool: hosts that support MCP Apps
render public/visibility-widget.html alongside the text — the three headline figures with
their period-over-period change, a trend line when called with by: "day", and per-assistant
bars when called with by: "model".
It is one self-contained HTML file with no build step, so it speaks the MCP Apps
ui/initialize handshake over postMessage directly rather than importing the ext-apps
client.
Layout
src/
api/ PromptEye API client — no MCP in it, publishable on its own
index.ts stdio entry point
index-http.ts Streamable HTTP entry point, one MCP session per mcp-session-id
server.ts builds one server: session, tools, widget resource
session.ts ProjectSession — which project the tools report on
config.ts environment, and the client factory
client/ PromptEyeClient interface; live (API + fallback) and fixture implementations
schemas/ zod mirrors of the models the API does not serve yet
tools/ one module per group of tools
fixtures/ sample data
public/
visibility-widget.html
manifest.json MCPB manifest — entry point, and the settings users fill in
scripts/bundle.mjs stages dist/, public/ and production deps, then packs the .mcpbEnvironment
Variable | Default | Purpose |
| required | The API key |
| required | API root of the deployment that key belongs to |
|
| Name reported to clients |
|
| Version reported to clients |
|
| HTTP transport port |
Both the key and the API URL are at app.prompteye.com/integrations.
Available Tools
16 toolsget_accountRead the account behind the keyARead-only
Who the configured PromptEye API key belongs to, which plan the workspace is on, which addons and scopes it has, and how many prompts it tracks. Call this to diagnose a key or to check whether a plan covers a feature before promising it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, which cover the safety and dynamic nature of the tool. The description adds context about the type of data returned (plan, addons, scopes, prompt count) but does not disclose any additional behavioral traits such as error conditions, rate limits, or response format specifics. With annotations carrying the safety profile, the description adds limited extra behavioral transparency, warranting a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads the core resource and the specific data points returned, and the second sentence gives practical usage scenarios. Every word earns its place, and it is perfectly scoped for a zero-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and the tool is simple (no params), the description must convey what the agent can expect. It lists the categories of information (owner, plan, addons, scopes, prompt count) and when to use it, which is largely complete. However, it does not specify the exact field names or structure of the response, nor any error behavior for invalid keys. Still, for a tool this simple, it is sufficiently complete, so a 4 is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema description coverage is 100% (vacuously). The description doesn't need to explain parameters, and it does not add any parameter semantics beyond what's relevant (none). Per the rubric, 0 params gives a baseline of 4, and the description effectively compensates by explaining what the tool returns, though that's more about output than parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it returns account details tied to the configured API key, including owner, plan, addons, scopes, and prompt count. It also gives concrete use cases ('diagnose a key', 'check whether a plan covers a feature'), which differentiates it from sibling tools that focus on projects, prompts, or visibility data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool ('Call this to diagnose a key or to check whether a plan covers a feature before promising it'). It does not name specific alternatives or when-not-to-use, but the context makes it clear this is for account-level diagnostics rather than project/prompt operations. It lacks explicit exclusions, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_projectRead the active projectARead-only
The project every other tool is currently reporting on. Call this when unsure which project the numbers in this conversation refer to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds context beyond annotations by defining the active project as the one every other tool reports on, clarifying what the returned value represents without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences each carry distinct value: the first defines the resource, the second gives the exact call condition. No filler, front-loaded with the core meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-parameter tool without an output schema, the description covers the essential context: what the active project is and when to use this call. It does not spell out the response shape, but the name and title imply the project object is returned, and the annotations handle the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there is no parameter burden for the description. Per the rubric, zero parameters warrants a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear that this tool retrieves the project that all other tools are currently reporting on, which is specific and contextually distinct from siblings like list_projects and select_project. The verb is only implicit in the tool name and title, but the resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to call it: 'Call this when unsure which project the numbers in this conversation refer to.' This is a direct, actionable usage guideline that distinguishes it from alternatives by function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citation_qualityRead how the brand is citedARead-only
What the brand is to the answers that mention it — recommended, compared, cited as an expert, or merely mentioned in passing — and with what sentiment. Visibility says how often the brand appears; this says what appearing is worth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds valuable behavioral context by explaining the nature of the output (citation types and sentiment) and its relationship to visibility. It does not disclose implementation details or limitations, but for a zero-parameter read-only tool, the description covers the essential behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences with no filler. The first sentence defines the output and gives concrete examples; the second sentence clarifies the distinction from visibility. Every word earns its place, and the key concept is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no parameters and no output schema, the description sufficiently explains what to expect. It does not mention whether it uses the active project or any context from sibling tools, but given the simplicity and the strong distinction from visibility tools, the description is complete enough for an agent to decide when to call it and understand the result. A minor gap is the lack of explicit mention that it depends on the active project context, but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is trivially covered (100%). Baseline for zero parameters is 4. The description adds no parameter-specific information because there are none, but it explains what the tool returns, which is the key semantic for an agent. No deduction needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it characterizes how the brand is cited in answers (recommended, compared, expert, passing) and the associated sentiment. It explicitly distinguishes itself from visibility tools by contrasting frequency ('how often') with quality ('what appearing is worth'), making its purpose unambiguous and distinct from siblings like get_visibility_summary and get_visibility_timeseries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use this tool versus visibility tools by explaining the difference between frequency and quality. However, it does not explicitly mention alternatives like list_answers or other related tools, nor does it give explicit 'when not to use' guidance. The contrast with visibility is strong, so it earns a 4 rather than 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledge_baseRead what the project knows about the brandARead-only
The description of the brand the project measures against — what the company sells and to whom. Useful for judging whether a prompt or a competitor genuinely belongs to this brand.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the content serves as a measurement baseline, but doesn't disclose potential absence of a brand description or dynamic behavior. Given the annotations, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with a clarifying dash, efficiently front-loading the core purpose. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description explains what is returned and why it's useful. It could mention whether the brand description can be empty or how to interpret it, but it's sufficient for most agent use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema fully covers them (100% coverage). With no parameters to explain, the description has nothing to add beyond the baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the brand description the project measures against, specifying its content (what the company sells and to whom). This distinguishes it from sibling tools like get_account or list_prompts, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a use case (judging whether a prompt or competitor belongs to the brand) but does not explicitly mention when not to use it or name alternative tools. The usage context is implied rather than fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_promptRead one promptARead-only
One prompt of the active project, with its visibility broken down per assistant. Call this to see which assistant is carrying a prompt and which is dropping the brand from it.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| promptId | Yes | Id of the prompt, as list_prompts reports it. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, so the description needs to add value beyond safety. It does so by explaining the output shape ('visibility broken down per assistant') and the analytical purpose (identifying which assistant drops the brand). This is useful behavioral context with no contradiction to readOnlyHint or openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The first sentence states what the tool returns, and the second gives a concrete reason to call it. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, full parameter schema, and read-only annotations, the description is complete. It explains the return value concept (per-assistant visibility) beyond just naming the resource, which covers the absence of an output schema. An agent has enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents promptId, startDate, and endDate. The description adds no additional parameter-level meaning; it describes the tool's purpose rather than clarifying parameter usage. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Read' in title, 'Call this to see' in body) with a clear resource: one prompt of the active project. It distinguishes itself from list_prompts by focusing on a single prompt, and from visibility summaries by specifying the per-assistant breakdown and the brand-carrying/dropping insight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear context for use: 'Call this to see which assistant is carrying a prompt and which is dropping the brand from it.' This tells an agent when this tool is appropriate, though it doesn't explicitly name alternatives or state when not to use it, so it falls short of a full when/when-not spec.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visibility_summarySummarise visibility for a periodARead-only
The headline visibility figures for the active project over a period, and how they moved against the period before it. This is the tool to call for 'how visible are we' — use get_visibility_timeseries only when the individual measurements behind the number are needed.
Pass by to split the same figures along an axis: day for a trend line, model to compare assistants, prompt to rank the prompts carrying the brand.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Split the period along this axis as well as reporting its totals. | |
| limit | No | How many breakdown entries to return, at most 200. Ignored without `by`. | |
| model | No | Report on this assistant alone instead of all of them. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| promptId | No | Report on this prompt alone instead of every prompt in the project. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and openWorldHint=true, so the description doesn't need to state that it's a read operation. The description adds context about the comparison with the previous period, which is useful behavioral information. However, it doesn't clarify that the period must be within 366 days (though the schema describes that for endDate), or mention any other restrictions such as the need for an active project. Since the annotations carry the safety profile, the description adds moderate value without contradicting, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two focused sentences. The purpose is front-loaded at the start, and the guidance for when to use alternatives and how to use the 'by' parameter is efficiently packed. No fluff is present; every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, all optional, with enums) and the fact that there is no output schema, the description is complete enough for an agent to know when and how to call it. It covers the main use case ('how visible are we'), the alternative route, and the key parameter behavior. It doesn't explicitly mention the comparison with the previous period in the parameter section, but it is mentioned in the description. It might benefit from noting that 'limit' is ignored without 'by', but the schema already says that, so the description doesn't need to repeat it. Overall, it's well-rounded for the purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning the schema already documents all parameter semantics. The description, however, adds explanatory value for the 'by' parameter (e.g., 'day for a trend line, model to compare assistants, prompt to rank the prompts') that goes beyond the schema's brief description. It doesn't add much for other parameters, as the schema covers them well. With high schema coverage, a baseline of 3 is correct, but the description earns its place by illustrating parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb ('Summarise'), the resource ('visibility for a period'), and the key behavior ('headline visibility figures' and 'how they moved against the period before it'). It also distinguishes itself from the sibling tool get_visibility_timeseries, explicitly stating which to call for what. This is a clear, specific definition that sets it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'This is the tool to call for "how visible are we"' and tells when to use the alternative: 'use get_visibility_timeseries only when the individual measurements behind the number are needed.' It also explains how to use the 'by' parameter for different analysis scenarios. This is explicit and actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visibility_timeseriesRead visibility over timeARead-only
The individual measurements behind the summary: one row per day, prompt and assistant, saying whether the brand was named and in which position. Call this to inspect the raw record; call get_visibility_summary for a headline number.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return, at most 200. Defaults to 50. | |
| model | No | Report on this assistant alone instead of all of them. | |
| cursor | No | The nextCursor of the previous page. Omit it to start from the first one. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| promptId | No | Report on this prompt alone. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnlyHint=true, so the read-only nature is covered. The description adds meaningful behavioral context by explaining the grain of the data and what each row reports, going beyond the annotations. It does not mention pagination or exact output fields, but those are partly covered by the schema's cursor parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, no filler. The first sentence explains what the tool returns, and the second gives routing guidance to the alternative tool. All information is front-loaded and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully optional-parameter tool with a complete input schema, the description gives enough conceptual context about the return value: row-level daily measurements with brand-named and position indicators. It is slightly short on exact output shape and pagination behavior, but the schema's cursor parameter and the description's row-level explanation cover most of what an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented with defaults, ranges, and formats. The description adds a little context by tying rows to day, prompt, and assistant, which maps to startDate, endDate, promptId, and model, but it does not need to compensate much because the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: it exposes the individual daily measurements behind the summary, with one row per day, prompt, and assistant, indicating whether the brand was named and its position. It also distinguishes itself from get_visibility_summary by calling this the raw record versus the headline number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool ('call this to inspect the raw record') and when to use the sibling ('call get_visibility_summary for a headline number'). This gives an agent a clear decision rule without needing to inspect either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_answersRead the answers behind the numbersARead-only
The answers the assistants actually gave on the active project's prompts, each with whether the brand was named, in which position, and which sources the answer cited. Call this when a visibility figure needs explaining rather than restating.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Only answers that named the brand, or only those that did not. | |
| limit | No | How many entries to return, at most 200. Defaults to 50. | |
| model | No | Report on this assistant alone instead of all of them. | |
| cursor | No | The nextCursor of the previous page. Omit it to start from the first one. | |
| search | No | Only answers whose text contains this phrase. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| promptId | No | Only answers to this prompt. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, and the description adds context about scoping to the active project and the answer attributes returned: brand named, position, and cited sources. It does not discuss pagination or response details, but the schema covers cursor and limit, and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core meaning, and includes a practical call-condition without filler. Every phrase contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys the purpose, scope, and key response fields for a tool with no output schema, and the input schema covers all parameters. It still leaves response shape and pagination to be inferred from the cursor/limit parameters rather than describing them explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All eight parameters have schema descriptions, so the schema carries the semantic load. The description adds no parameter-level guidance beyond that, giving the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the answers assistants gave on prompts) and a concrete verb context (listing them with brand-named status, position, and cited sources). It distinguishes itself from siblings like get_visibility_summary by stating it is for explaining a visibility figure rather than restating it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call the tool: 'when a visibility figure needs explaining rather than restating.' However, it does not name the alternative tools or give when-not-to-use conditions, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList the categories the project files prompts underARead-only
Every category of the active project, two levels deep: top-level categories with their subcategories beneath, and whether PromptEye proposed each one or it was written by hand.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims to list 'every category', which implies exhaustiveness. However, the annotation openWorldHint=true indicates that the result set may be incomplete and should not be assumed exhaustive. This is a direct contradiction between the description and the annotation, warranting a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the scope ('Every category of the active project') and then adds the key details of depth and origin. No fluff or repetition; every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with no output schema, the description provides a high-level understanding of the return structure (two levels, subcategories, origin). It does not specify output format, but that is not required given the lack of an output schema. The description is sufficient for an agent to know what to expect when calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100% (vacuously). Since there are no parameters to explain, the description does not need to compensate. The baseline for zero parameters is 4, and the description adds no extra parameter-related information, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'categories of the active project', and specifies the depth (two levels) and the inclusion of origin (proposed vs hand-written). This distinguishes it from sibling tools like list_projects or list_prompt_groups, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by scoping to the active project, implying the tool is used when category structure is needed. It does not explicitly mention alternatives or exclusions, but the resource name makes the use case obvious against the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_competitorsRank the brands answering alongside yoursARead-only
Every brand the assistants named on the active project's prompts, measured the same way the project's own brand is and ranked by share of voice. The project's own brand is in the list and marked, so it can be charted against the rest.
Share of voice answers a different question from visibility: visibility is how often the brand was named at all, share of voice is how much of the naming it took from everyone else. This ranks rather than pages — it answers with the strongest brands, not a list you walk to the end of.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many brands to return, at most 200. | |
| model | No | Report on this assistant alone instead of all of them. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and open-world, so the description does not need to restate safety. It adds useful behavioral details beyond the schema: the measurement matches the project's own brand methodology, the own brand is included and marked, and results are ranked by share of voice. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is focused and front-loaded with the core behavior, then adds only the necessary distinction from visibility and ranking. It is slightly discursive in explaining share-of-voice versus visibility, but that contrast earns its place because it prevents misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only ranking tool with no output schema, the description adequately conveys what the result contains: ranked brands by share of voice, with the project's own brand included and marked. It does not detail exact output fields or sort direction, but 'ranked' and 'strongest brands' make the intent clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter descriptions already document limit, model, startDate, and endDate fully. The tool description adds no parameter-specific meaning beyond that, which meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—list/rank brands named by assistants—and a specific metric (share of voice), while explicitly marking that the project's own brand is included and flagged. It also distinguishes itself from visibility-focused tools by defining what share of voice measures versus visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: when the user wants share-of-voice ranking rather than visibility counts, and when ranked strongest brands are desired rather than a paginated list. It implicitly contrasts with sibling visibility tools but does not name a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-only
Every project the API key reaches, newest first, with the access the key has to each. A project is one brand tracked in one market, and it is the root of everything else PromptEye measures. Call this first, then select_project, before asking about visibility, competitors, prompts or sources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and open-world behavior. The description adds valuable behavioral context beyond those annotations: it returns every project the API key reaches, sorted newest first, and includes the key's access level. It stops short of mentioning pagination or exact return shape, but the additional context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states core behavior, the second gives essential domain context, and the third provides invocation ordering. The primary function is front-loaded, and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema, the description is complete: it states scope, ordering, access information, domain meaning, and the correct call sequence relative to siblings. An agent has enough information to invoke the tool and understand what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the baseline is 4. The description adds no parameter-specific semantics because there are none to describe, and the schema fully covers the empty input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: list projects scoped to the API key, with ordering and access level. It further distinguishes itself from siblings by explaining that a project is the root entity and instructing to call this before select_project, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: call this first, then select_project, before querying visibility, competitors, prompts, or sources. It does not name excluded alternatives or say when not to use it, but the sequencing guidance is clear enough for an agent to invoke it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_prompt_groupsList the prompt groups of the projectARead-only
How the active project's prompts are grouped, with the visibility and business priority of each group. Use a group id to narrow list_prompts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return, at most 200. Defaults to 50. | |
| cursor | No | The nextCursor of the previous page. Omit it to start from the first one. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the bar for behavioral disclosure is lowered. The description adds that the output includes visibility and business priority, but does not disclose pagination or date-filtering behavior—though these are covered by the schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The first sentence states the purpose and the returned content; the second gives a usage hint. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a high-level view of the response content (grouping, visibility, priority) but does not explain how the date parameters affect the result or the exact response structure. Since there is no output schema, these gaps are noticeable, though the schema covers the parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully documented in the schema with 100% coverage, so the description does not need to add parameter meaning. The description does not mention the parameters at all, but the schema already provides adequate semantics, justifying the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'list' and resource 'prompt groups' with additional detail on what is returned (visibility and business priority). Clearly distinguishes from sibling list_prompts, which lists actual prompts rather than groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to use a group id to narrow list_prompts, indicating the relationship and a clear alternative. Does not explicitly state when not to use this tool, but the context implies it is for overviews while list_prompts is for individual prompts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_promptsList the prompts of the projectARead-only
The questions the active project puts to the assistants, with the visibility each one earns. Every measurement PromptEye reports is taken on the answers to these prompts, so this is where to look for which questions carry the brand and which do not.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries to return, at most 200. Defaults to 50. | |
| cursor | No | The nextCursor of the previous page. Omit it to start from the first one. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| groupId | No | Only prompts in this prompt group. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. | |
| categoryId | No | Only prompts filed under this category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only and open-world behavior, and the description adds that each returned prompt carries a visibility value and that PromptEye measurements are based on answers to these prompts. This gives useful domain context beyond the annotations, though it does not describe pagination or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core object: prompts of the active project with visibility. The second sentence adds relevant context about PromptEye measurements and brand relevance, but it is slightly conceptual rather than strictly operational, so it is concise but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with all parameters documented in the schema, the description gives sufficient conceptual info about what is returned (prompts plus visibility). Without an output schema, it could describe the response wrapper or pagination more explicitly, but the tool remains callable based on this description and the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (limit, cursor, date range, groupId, categoryId) are already documented in the schema. The description adds no additional parameter guidance, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('the prompts') and scope ('active project') and adds that each prompt is listed with the visibility it earns, which distinguishes it from a generic prompt listing. It lacks an explicit verb like 'list' or 'returns', relying on the title and the phrase 'this is where to look', so it is clear but not maximally specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'this is where to look for which questions carry the brand and which do not' provides a clear use case: inspecting per-prompt visibility context. It does not name sibling tools like get_prompt, list_prompt_groups, or get_visibility_summary, nor does it state when not to use them, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_prompt_suggestionsList the prompts worth adding nextARead-only
Prompts PromptEye suggests the active project start tracking, still awaiting a decision. Each carries why it was suggested — a gap in the funnel, or a theme close to prompts that already perform — with the search demand behind it, how close to a purchase it is asked and how well it fits the brand. Grouped by the prompt group each would join, strongest demand first. Call this when asked what to monitor next.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | No | Only suggestions for this prompt group, by the group id the suggestions carry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint and openWorldHint annotations by explaining that results are grouped by prompt group and sorted by strongest demand first. It also describes the informational payload (search demand, purchase proximity, brand fit). It does not mention error conditions or pagination, but for a read-only listing this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences and each sentence carries distinct information: purpose, rationale content, grouping/sorting, and usage trigger. It is somewhat wordy ('Prompts PromptEye suggests the active project start tracking') but avoids redundancy and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional filter, the description explains what the returned suggestions contain (reasons, demand data, grouping, sorting) and when to call it. It assumes an active project exists but that is consistent with sibling tools like get_active_project. No output schema exists, so the description's explanation of returned fields is helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single optional groupId parameter with 100% coverage and a clear description. The tool description mentions grouping by prompt group, which aligns with the filter, but adds no additional parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool lists prompt suggestions for the active project that are still awaiting a decision, with reasons for each suggestion. It distinguishes itself from list_prompts (existing prompts) by emphasizing 'suggested' and 'worth adding next'. The title reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence 'Call this when asked what to monitor next' provides an explicit trigger. It implies the active project context, so an agent knows it applies to the currently selected project. It does not explicitly name sibling alternatives or exclusions, but the trigger is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList the domains assistants citeARead-only
The domains the assistants leaned on when answering the active project's prompts, ranked by how often they were cited. The project's own domain is marked. Call this to see which pages shape what the assistants say about the brand.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many domains to return, at most 200. | |
| model | No | Report on this assistant alone instead of all of them. | |
| endDate | No | Last day to report on, inclusive. Defaults to today, and must be within 366 days of startDate. | |
| startDate | No | First day to report on, inclusive. Defaults to 30 days before today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds behavioral context by specifying that results are ranked by citation frequency and that the project's own domain is marked, which helps the agent set expectations about output semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each adding a distinct piece of information: what the tool returns, how it is ordered, and when to call it. The description is well front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with fully described parameters and no output schema, the description provides enough context to select and invoke the tool correctly. It could be slightly more complete by clarifying how the 'active project' is determined or what fields appear in each result, but these are minor gaps given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters (limit, model, startDate, endDate) with enough detail. The description adds no parameter-specific meaning, which is acceptable at the baseline 3 per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the specific verb ('list'), the resource ('domains cited by assistants'), and the scope ('active project's prompts'), with ranking and project-domain marking noted. This distinguishes it from related siblings like get_citation_quality or list_answers because it is specifically about the domains behind citations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: 'Call this to see which pages shape what the assistants say about the brand.' It implies use for understanding the active project's citation sources, but it does not explicitly state when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_projectSelect the project to work onARead-only
Makes one project the active one. Every other tool reports on the active project and takes no project argument, so call this once before asking about visibility, competitors, prompts, answers or sources. Call it again to switch projects mid-conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Id of the project to make active, as list_projects reports it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool changes which project is active and can switch projects mid-conversation, which is a state mutation. The annotation readOnlyHint=true claims the tool does not modify state, directly contradicting the described behavior. This is an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. The core action is front-loaded, followed by necessary context about why this tool matters and when to call it again.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter selection tool, the description covers the main action, the effect on other tools, and usage timing. It omits return value or error behavior, but those are not critical given the tool's simplicity and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single projectId parameter, including its source from list_projects. The description does not add additional parameter-level meaning, but with 100% schema description coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it makes one project the active project. It also differentiates this tool from its siblings by explaining that all other tools operate on the active project and take no project argument, making its role as the state-setter unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage timing: call it once before working with visibility, competitors, prompts, answers, or sources, and call it again to switch projects. It does not explicitly mention when not to use it or alternatives like get_active_project, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
v1.0.5- First observed
get_account - First observed
get_active_project - First observed
get_citation_quality - First observed
get_knowledge_base - First observed
get_prompt - First observed
get_visibility_summary - First observed
get_visibility_timeseries - First observed
list_answers - First observed
list_categories - First observed
list_competitors - First observed
list_projects - First observed
list_prompt_groups - First observed
list_prompt_suggestions - First observed
list_prompts - First observed
list_sources - First observed
select_project
TDQS
Scored across 16 tools
Most tools are clearly distinct (projects, prompts, visibility, competitors, answers, sources), but get_visibility_summary and get_visibility_timeseries overlap in purpose and require careful reading to distinguish. list_prompts and get_prompt are also similar but the singular/plural pattern helps.
The set consistently uses get_/list_ prefixes with clear noun objects (get_prompt, list_projects, list_competitors). Minor inconsistency: get_knowledge_base and get_account are not project-scoped like the rest, and get_visibility_summary vs get_visibility_timeseries breaks the simple noun pattern slightly.
16 tools is at the upper edge of reasonable for a domain with projects, prompts, visibility, competitors, answers, and sources. Each tool covers a distinct resource, though a few could be consolidated (e.g., visibility summary/timeseries).
The surface covers the core workflow well: project selection, prompt management, visibility measurement, competitor analysis, answer inspection, and source tracking. Minor gaps: no tool to create/update prompts or prompt groups, and no way to drill into a specific competitor's details beyond the ranked list.
Maintenance
Related MCP Connectors
Track how your brand appears in AI answers: rank, mentions, sentiment, share of voice.
Query your brand's AI visibility across ChatGPT, Claude, Perplexity, and Gemini.
AI visibility analytics for brands across citations, prompts, competitors, research, and reports.
Brand visibility auditing across LLMs, AI search, and answer engines with GEO reports and scores.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT
- AlicenseAqualityCmaintenanceTrack brand visibility across ChatGPT, Perplexity, Claude, and Gemini.695 npm9MIT
- AlicenseAqualityCmaintenanceTrack how your brand appears in AI-generated answers across ChatGPT, Perplexity, and other AI models. Analyze visibility, sentiment, citations, and domain rankings with 31 tools — including analytics reports, chat inspection, query analysis, and full CRUD for brands, prompts, tags, and topics.1764 npm2MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to monitor and analyze a brand's visibility across ChatGPT, Claude, Perplexity, and Google AI Overviews, providing insights, recommendations, and competitive analysis without switching tabs.2517 npm1MIT