Skip to main content
Glama

Foliora Managed AI Search

Server Details

Foliora MCP for public discovery, account reads, and agent execution of human-approved changes.

Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource or lifecycle stage: list/get for reading, approve/reject for decisions, and report_* for different post-decision actions. Even similar tools like get_page_job and get_approved_change are clearly separated by proposed versus approved state.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern, with verbs like list, get, create, approve, reject, and report. Compound nouns such as preview_link, page_job, approved_change, and finding_fix are also used consistently.

Tool Count5/5

Twelve tools is well-scoped for a managed AI search and site-change platform. Each tool covers a distinct step in the workflow without unnecessary overlap or bloat.

Completeness4/5

The tool set covers the main finding and page-change lifecycles end to end: list findings, propose changes, approve/reject, retrieve approved changes, and report publication. Minor gaps exist, such as no API-triggered snapshot crawl and no list of all approved changes, but these are workable within the described flows.

Available Tools

12 tools
approve_changeApprove a drafted change on the customer's instructionA
Idempotent
Inspect

Approve one drafted change set by its exact canonical hash. Call this only after the customer has read the operations from get_page_job and told you to approve that hash. A stale or mismatched hash is refused. Approval is the customer's only decision: on a site with a connected publisher Foliora publishes and verifies from here on its own (fix.publisherReady true); otherwise the agent applies the exact operations and calls report_publication. Requires OAuth or an API key with the approve scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
changeSetIdYes
expectedHashYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
approvedAtNo
approvedViaYes
changeSetIdYes
canonicalHashNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as non-read-only, open-world, idempotent, and non-destructive, but the description adds meaningful context: stale/mismatched hashes are refused, approval must come from the customer, and the follow-up path depends on fix.publisherReady. It also discloses the required OAuth/API scope, which is not present in annotations.

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

Conciseness5/5

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

Every sentence earns its place: purpose, precondition, failure mode, customer-decision boundary, conditional workflow, and auth requirement. The most important usage condition is front-loaded immediately after the action statement.

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?

The description covers preconditions, auth, failure behavior, and the exact conditional post-approval workflow, while the output schema handles return-value details. Nothing needed to invoke this tool correctly appears to be missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does clarify expectedHash's meaning ('exact canonical hash') and the refusal behavior for stale or mismatched values, but it does not explicitly explain changeSetId beyond the schema's name and UUID format. Still, the phrase 'one drafted change set' anchors changeSetId well enough.

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 names a specific action ('Approve one drafted change set'), a precise identifier ('exact canonical hash'), and clearly separates it from siblings like reject_change and reask_change. It is immediately obvious what the tool does and how it differs from nearby operations.

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

Usage Guidelines5/5

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

It states an explicit precondition ('Call this only after the customer has read the operations from get_page_job and told you to approve that hash') and clarifies that approval is the customer's decision, not the agent's. The conditional workflow for connected publishers versus manual application plus report_publication gives concrete when-to-use guidance.

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

get_approved_changeGet one approved Foliora changeB
Read-onlyIdempotent
Inspect

Return an already-approved canonical hash and its ordered typed operations. Apply exactly these values; do not reinterpret or regenerate them.

ParametersJSON Schema
NameRequiredDescriptionDefault
changeSetIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
briefYes
jobIdYes
titleYes
siteIdYes
rationaleYes
approvedAtYes
operationsYes
changeSetIdYes
canonicalHashYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds valuable behavioral detail beyond annotations: it discloses that the returned hash is canonical and that operations are ordered, and it warns against reinterpretation. This is meaningful but lacks depth—it doesn't mention what happens if the change is not approved or any potential errors.

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

Conciseness5/5

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

The description is two sentences with no waste. The core function is stated first, and the critical behavioral instruction is front-loaded. It is efficiently structured for a tool with a single parameter and a self-explanatory name.

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

Completeness4/5

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

Given the tool's low complexity (one UUID parameter, clear name, and annotations covering safety), the description is nearly complete. The output schema exists, so return values are presumably structured elsewhere. The only real gap is the lack of parameter explanation, which is minor for a single self-descriptive parameter like changeSetId.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain the parameter, but it doesn't. The only parameter, changeSetId, is not mentioned at all in the description. An agent must infer from the name and format that it identifies the change set, but there is no explicit explanation of how to obtain it or its format beyond the schema's uuid format. This is a significant gap.

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

Purpose4/5

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

The description clearly states the tool's purpose: returning an already-approved canonical hash and its ordered typed operations. The verb 'Return' plus the resource 'approved Foliora change' makes the intent clear. However, it doesn't explicitly distinguish this from sibling tools like get_product or get_snapshot beyond the 'approved' qualifier, and the lack of parameter explanation slightly limits full clarity.

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

Usage Guidelines3/5

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

The instruction 'Apply exactly these values; do not reinterpret or regenerate them' implies a use case where exactness is critical, perhaps for deterministic application of an approved change. However, there is no explicit guidance on when to use this tool versus alternatives like get_snapshot or create_preview_link, nor any stated exclusions. The usage context is implied rather than explicit.

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

get_page_jobRead one Foliora proposal in fullA
Read-onlyIdempotent
Inspect

One proposed page change: why Foliora proposes it, the brief, the objectives it addresses, the drafted change set with every operation's exact before and after values and its canonical hash, and fix — its customer-facing state, reason, live finding statuses, older editions and nextAction. A stale edition is readable history with a null hash; it can never be approved. Read this with the customer before approve_change; never paraphrase the operations as approved text.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
briefYes
jobIdYes
titleYes
siteIdYes
statusYes
compileNo
changeSetYes
createdAtNo
rationaleYes
targetUrlYes
citationGapNo
impactScoreYes
competingHostsNo
searchObjectivesNo
findingObjectivesNo
citationObjectivesNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: stale editions have null hashes and an approval prohibition, and the operations should not be paraphrased as approved text. This materially changes how an agent should interpret and use the result.

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?

Two sentences with no wasteful filler, and the most important framing ('One proposed page change') comes first. The first sentence is dense and lists many required fields, but each element earns its place because it tells the agent what to expect in the payload.

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?

The output schema exists, so return-value details are already structured. Annotations cover the read-only and non-destructive safety profile. The description supplies the remaining operational context: when to read this, what cannot be approved, and how the content should be presented to the customer. Nothing essential 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?

The schema has one required parameter, jobId, with a uuid format and 0% description coverage. The description never mentions jobId explicitly, but it does clarify what the job object refers to ('One proposed page change'), which indirectly clarifies what the id identifies. A single obvious uuid parameter makes this adequate, though a mention would have been stronger.

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 states exactly what the tool does: it reads a single proposed page change in full — rationale, brief, objectives, drafted operations with before/after values and canonical hash, and `fix` status. This precise verb+resource pairing distinguishes it from related tools like get_approved_change, which would return an already-approved change.

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

Usage Guidelines5/5

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

The description gives explicit workflow guidance: 'Read this with the customer before approve_change; never paraphrase the operations as approved text.' It also tells the agent when not to treat the result as approvable via the stale-edition clause ('A stale edition is readable history with a null hash; it can never be approved').

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

get_productGet Foliora product factsA
Read-onlyIdempotent
Inspect

Return Foliora product facts: brand, per-site plans, canonical URLs, and product boundaries. Use when the user asks what Foliora is, how much it costs, or which URL to open. Does not crawl a site.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
heroYes
brandYes
linksYes
plansYes
addonsYes
mcpUrlYes
doesNotYes
supportYes
categoryYes
workflowYes
previewUrlYes
pricingUrlYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral context by clarifying that this tool returns product facts rather than crawling a live site, which helps manage expectations about freshness and scope.

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

Conciseness5/5

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

The description is two sentences with no filler. The core purpose is front-loaded, the content list is compact, and the exclusion is stated in one short clause.

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?

This is a simple zero-parameter, read-only tool with rich annotations and an output schema. The description fully covers what the agent needs to know 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.

Parameters4/5

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

The tool accepts zero parameters, so parameter semantics are not applicable. With no required inputs, the description's clarity about what the tool returns is sufficient; the baseline of 4 is appropriate.

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 states a specific verb ('Return'), a clear resource ('Foliora product facts'), and enumerates the exact contents: brand, per-site plans, canonical URLs, and product boundaries. It also distinguishes itself from site-level tools by noting it does not crawl a site.

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?

The description explicitly tells the agent when to use this tool: when the user asks what Foliora is, how much it costs, or which URL to open. It also gives an exclusion ('Does not crawl a site'), though it does not explicitly name sibling alternatives.

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

get_snapshotGet a Foliora preview snapshotA
Read-onlyIdempotent
Inspect

Fetch a Foliora preview snapshot the human already started. Requires the 32-character hex token from /preview/{token}. Returns public findings and pages only. Unknown tokens are not_found. Does not start a crawl.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesPublic snapshot token from a Foliora preview URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
pagesYes
phaseYes
tokenYes
lockedYes
statusYes
findingsYes
errorCodeYes
pageCountYes
aiPresenceYes
processingYes
websiteUrlYes
googlePresenceYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotent, non-destructive), the description adds important behavioral details: it returns only public findings and pages, unknown tokens yield not_found, and it does not trigger a crawl. These are meaningful, non-obvious behaviors that an agent cannot infer from the schema or annotations.

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

Conciseness5/5

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

The description is compact, with four short sentences each carrying distinct information: the action, token source, return scope, error behavior, and lack of side effects. It is front-loaded with the main purpose and contains no filler.

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 single-parameter read-only tool with an output schema and full annotations, the description is complete. It covers prerequisites, return filtering, error semantics, and side-effect negation, so an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The schema already covers the token parameter fully with a pattern and description, so the baseline is 3. The description adds provenance by specifying the token comes from a /preview/{token} URL and that it is 32-hexad?character hex, which is genuinely useful beyond the schema's description.

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 states a specific verb and resource, 'Fetch a Foliora preview snapshot the human already started', which clearly distinguishes it from create_preview_link. It also adds 'Does not start a crawl', further disambiguating from the creation sibling.

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

Usage Guidelines4/5

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

It says the snapshot must already be started by the human, establishing when to use it, and it requires a token from /preview/{token} as a prerequisite. It does not explicitly name an alternative like create_preview_link, but the exclusion 'Does not start a crawl' gives clear contextual guidance.

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

list_findingsList a site's open findingsA
Read-onlyIdempotent
Inspect

List the crawl findings still open on a site: SEO and AI-readiness plumbing such as missing descriptions, blocked AI crawlers, missing llms.txt, stale articles. Each row carries a code, severity, evidence URL, and plain-language fix guidance. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYes
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
findingsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful transparency by specifying the row contents (code, severity, evidence URL, fix guidance) and the 'open findings' filtering behavior. 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.

Conciseness5/5

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

Two tight sentences lead with the core action and scope, then add concrete examples and row-level expectations. Every sentence contributes value with no fluff.

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

Completeness4/5

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

For a simple read-only list tool with an output schema, the description covers the purpose, result contents, and safe behavior. The only real gap is the ambiguous relationship between 'open findings' and the status parameter.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only explains what findings look like, not the semantics of siteId or status. The 'open' phrasing hints at a default filter but does not clarify the status enum or how to request other statuses.

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?

States a specific verb and resource: list crawl findings for a site, with concrete examples (missing descriptions, blocked AI crawlers, missing llms.txt). This clearly distinguishes it from sibling tools like list_sites and list_approved_changes.

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?

Describes the tool as retrieving open crawl findings for a site, which implies when it should be used. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select it over the list-based siblings.

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

list_page_jobsList what Foliora proposes for a siteA
Read-onlyIdempotent
Inspect

The page changes Foliora proposes for one owned site, highest impact first — the same list the customer's dashboard shows. Each row carries fix: the customer-facing state (Foliora is working / Your turn / Published / Verified live / Needs a hand), why there is no draft to act on when there is none, the live status of every finding it set out to fix, and nextAction. Use get_page_job to read a proposal in full before the customer decides.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYes
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobsYes

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavior beyond the readOnly/idempotent annotations: rows are sorted by impact, the list matches the customer dashboard, and each row includes the fix state, the reason a draft may be absent, live finding statuses, and nextAction. It also signals that the full proposal is available elsewhere, which helps the agent set expectations when invoking this list.

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

Conciseness5/5

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

Three sentences, each earning its place: the first establishes purpose, scope, and ordering; the second describes row semantics; the third names the follow-up tool. Important details are front-loaded and there is no filler or repetition.

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

Completeness4/5

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

With an output schema and readOnly annotations present, the rich description covers sorting, row content, and the path to get_page_job. The main remaining gap is the meaning of the status parameter, which an agent would need to filter correctly. Otherwise the definition is complete for a read-only listing tool.

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 0%, so the description must compensate. It does clarify that the list is for 'one owned site', which maps to siteId, but it never explains the optional status enum ('proposed' vs 'all') or the default behavior. The description partially bridges the schema gap but leaves a meaningful parameter unexplained.

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 and resource: 'The page changes Foliora proposes for one owned site.' It adds meaningful scoping ('highest impact first', 'same list the customer's dashboard shows') and distinguishes itself from the deeply related get_page_job sibling. There is no ambiguity about what this tool returns.

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?

The description clearly positions the tool as the list-level view and explicitly routes deeper inspection to get_page_job: 'Use get_page_job to read a proposal in full before the customer decides.' It does not enumerate exclusions for other siblings, but the main alternative is named and the context for choosing one over the other is clear.

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

list_sitesList the customer's Foliora sitesA
Read-onlyIdempotent
Inspect

List sites owned by the authenticated Foliora account with crawl and finding status. Requires OAuth or a Foliora API key with read scope.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
sitesYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the tool as readOnly, idempotent, and non-destructive. The description adds valuable context beyond those annotations by noting the authentication requirement (OAuth or API key with read scope) and clarifying that the listing includes crawl and finding status. This is useful behavioral context 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.

Conciseness5/5

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

Two sentences, no filler, and the core action and scope are front-loaded. Every sentence adds meaningful information. This is an appropriately sized description for a zero-parameter tool.

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 no-parameter list operation, the description is complete: it states the resource, the account ownership, the included status fields, and the authentication requirement. The annotations cover safety and idempotence, and an output schema is present, so return-value details do not need to be repeated in the description.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 100%. The description correctly does not invent parameter-level details. With no parameters to document, a baseline of 4 is appropriate because the description does not need to compensate for any paramter gap.

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 uses a specific verb ('List') with a concrete resource ('sites owned by the authenticated Foliora account') and adds the distinguishing detail that crawl and finding status are included. This clearly separates it from sibling tools like get_snapshot or get_site_brief.

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

Usage Guidelines3/5

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

The description clearly implies when to use it: whenever the agent needs to enumerate the account's sites along with their statuses. However, it does not explicitly name alternatives or state when not to use it, so the usage guidance is implied rather than stated.

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

reject_changeReject a drafted change on the customer's instructionA
Idempotent
Inspect

Close one drafted change set without approving it. Call this only when the customer says so. The job stays proposed and can be drafted again later. Requires OAuth or an API key with the approve scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
changeSetIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
changeSetIdYes
rejectedViaYes

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the idempotentHint annotation, the description adds the prerequisite of OAuth or API key with the approve scope and clarifies the post-condition, enhancing transparency without contradicting annotations.

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

Conciseness5/5

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

The description is brief and to the point, with three succinct sentences covering purpose, usage condition, effect, and requirement. No unnecessary words or repetition.

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

Completeness4/5

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

It includes the prerequisite, effect, and usage condition, which is sufficient for a simple rejection operation. Output details are not covered, but since an output schema exists (as indicated in context signals), this is acceptable.

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

Parameters2/5

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

The only parameter, changeSetId, is not described in either the schema (which provides only type and format, no description) or the tool description. The name is self-explanatory, but the description does not explicitly compensate for the lack of schema description, leaving some ambiguity.

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 clearly states the tool's function: 'Close one drafted change set without approving it.' This is specific and distinguishes it from sibling tools like approve_change.

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

Usage Guidelines4/5

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

It provides a usage condition ('Call this only when the customer says so') and explains the effect ('The job stays proposed and can be drafted again later'), but does not explicitly compare with alternative tools like approve_change.

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

report_finding_fixReport a finding as fixedA
Idempotent
Inspect

After the agent fixes a finding on the site (a meta description, a robots rule, llms.txt), mark it fix_reported with a short note. It shows as done on the customer's Fixes list; Foliora's next scheduled read confirms it as resolved or reopens it. The report is never taken on faith. Requires execute access.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
findingIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
findingIdYes
fixReportedAtNo
fixReportedByNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds valuable context: it discloses that the report is not taken on faith (a subsequent read confirms or reopens), and that it requires execute access. It also mentions the 'fix_reported' status. This goes beyond the annotations by explaining the post-condition and verification workflow, which is critical for the agent to understand the asynchronous nature.

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

Conciseness5/5

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

The description is three sentences: first states the action and purpose, second explains the downstream effect, third clarifies the verification and permission. It's well-structured, front-loads the verb 'mark it fix_reported', and every sentence adds distinct meaning. No fluff, efficient use of words.

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?

Given the tool's moderate complexity (2 params, no enums) and the absence of a detailed output schema (there is one but not shown, the description doesn't need to explain return values). The description explains the workflow, the expected effect, and the verification process experimental. It covers the essential points: when to use, what happens after, and that it requires execute access. The only minor missing piece is explicit parameter names, but that's covered by the schema itself (which has names and types). So it's complete enough for an agent to call correctly.

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

Parameters4/5

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

The schema has 0% description coverage, so the description must compensate. The description mentions 'findingId' implicitly but does not explain the 'note' parameter at all. It says 'with a short note' which maps to the 'note' parameter, but doesn't specify max length or optionality. It could have explained that 'findingId' is the UUID of the finding to mark, and 'note' is optional text. Given that there are only 2 params usable via description, the coverage is slightly better than low, but it's still not explicit enough for an agent to know exactly what to pass. However, because the note is described, it gets a 4.

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 clearly states the action ('mark it fix_reported'), the resource ('a finding'), and the context (after fixing meta description, robots rule, or llms.txt). It distinguishes itself from siblings like 'report_publication' which is about publication, not findings. The phrase 'Report a finding as fixed' is not a pure tautology because it clarifies which domain (finding) and action (fixing).

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?

The description tells when to use it: 'After the agent fixes a finding on the site'. It explains the post-condition (shows as done on the customer's Fixes list) and that the system will later confirm or reopen. It doesn't explicitly name alternative tools or when not to use it, but the context implies it's the right tool for marking a fix; 'Requires execute access' hints that not all agents will have this tool, but doesn't list alternatives. Could have explicitly said 'Use this only after fixing a finding, not for reporting publications (use report_publication) '.

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

report_publicationReport an approved change was publishedA
Idempotent
Inspect

Record proof that the customer's agent applied every operation from an already-approved canonical hash. Foliora verifies the live page from here on its own and the change shows as done on the customer's dashboard. This does not approve a change. Every receipt value must exactly match Foliora's stored operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
receiptYes
changeSetIdYes
expectedHashYes
idempotencyKeyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
createdYes
receiptIdYes
nextActionYes
executionIdYes
verificationReadyYes
verificationRunIdNo
verificationQueuedYes
verificationReasonNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark this as a non-read, idempotent, non-destructive mutation. The description adds beyond that: Foliora independently verifies the live page, the change shows as 'done' on the dashboard, and receipt values must exactly match stored operations. No contradiction with 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.

Conciseness5/5

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

Three sentences, each adding value: purpose, post-effect, and the critical rule about receipt matching. It is front-loaded and free of padding.

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

Completeness4/5

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

For a complex mutation with 4 required parameters, a nested receipt object, and an output schema, the description covers the key behavioral caveats (no approval, Foliora-side verification, exact match requirement). It does not explain the surrounding verification flow in more depth, but combined with the schema and annotations it is adequate.

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 0%, so the description must compensate. It gives meaning to expectedHash ('already-approved canonical hash') and receipt (must exactly match stored operation), but it does not explain idempotencyKey or the changeSetId in any depth, and its coverage of the nested receipt fields is partial.

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?

States a specific action: 'Record proof that the customer's agent applied every operation from an already-approved canonical hash.' Distinguishes itself from the approval flow by explicitly noting 'This does not approve a change,' which disambiguates it from sibling tools like approve_change.

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?

The description gives a clear condition of use: when the agent has applied every operation from an already-approved hash. It also provides an exclusion ('This does not approve a change') that separates it from approve/reject siblings, though it does not explicitly name alternative tools.

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.

  1. 7 tool updates
    • Removedget_change_status
    • Removedget_site_brief
    • Removedlist_approved_changes
    • Removedreask_change
    • Changedreport_publication1 field changed
      • addedOutput schema / properties / nextAction / enum
        Added value: +[
        +  "none"
        +]
    • Removedrequest_recrawl
    • Removedverify_publication
  2. 2 tool updates
    • Addedreask_change
    • Changedreport_publication5 fields changed
      • addedOutput schema / properties / nextAction
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / verificationQueued
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / verificationReason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / verificationRunId
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "receiptId",
        -  "executionId",
        -  "created",
        -  "verificationReady"
        -]New value: +[
        +  "receiptId",
        +  "executionId",
        +  "created",
        +  "verificationReady",
        +  "verificationQueued",
        +  "nextAction"
        +]
  3. 4 tool updates
    • Addedapprove_change
    • Addedget_page_job
    • Addedlist_page_jobs
    • Addedreject_change
  4. 4 tool updates
    • Addedget_change_status
    • Addedlist_findings
    • Addedreport_finding_fix
    • Addedrequest_recrawl
  5. 9 tool updates
    • Changedcreate_preview_link2 fields changed
      • addedInput schema / properties / websiteUrl / minLength
        Added value: +1
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "host": {
        +      "type": "string"
        +    },
        +    "previewUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "websiteUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "previewUrl",
        +    "websiteUrl",
        +    "host"
        +  ],
        +  "type": "object"
        +}
    • Addedget_approved_change
    • Changedget_product1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "addons": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "brand": {
        +      "type": "string"
        +    },
        +    "category": {
        +      "type": "string"
        +    },
        +    "doesNot": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hero": {
        +      "type": "string"
        +    },
        +    "links": {
        +      "additionalProperties": {
        +        "format": "uri",
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "mcpUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "plans": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "previewUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "pricingUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "support": {
        +      "type": "string"
        +    },
        +    "workflow": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "brand",
        +    "category",
        +    "hero",
        +    "workflow",
        +    "previewUrl",
        +    "mcpUrl",
        +    "pricingUrl",
        +    "support",
        +    "plans",
        +    "addons",
        +    "links",
        +    "doesNot"
        +  ],
        +  "type": "object"
        +}
    • Addedget_site_brief
    • Changedget_snapshot2 fields changed
      • addedInput schema / properties / token / pattern
        Added value: +"^[0-9a-fA-F]{32}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "aiPresence": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "findings": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "code": {
        +            "type": "string"
        +          },
        +          "evidenceUrl": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "severity": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "severity",
        +          "summary",
        +          "evidenceUrl"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "googlePresence": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "host": {
        +      "type": "string"
        +    },
        +    "locked": {
        +      "type": "boolean"
        +    },
        +    "pageCount": {
        +      "type": "number"
        +    },
        +    "pages": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canonical": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "description": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "h1": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "url": {
        +            "type": "string"
        +          },
        +          "wordCount": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "url",
        +          "title",
        +          "h1",
        +          "canonical",
        +          "description",
        +          "wordCount"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "phase": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "processing": {
        +      "type": "boolean"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "token": {
        +      "type": "string"
        +    },
        +    "websiteUrl": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "token",
        +    "host",
        +    "websiteUrl",
        +    "pageCount",
        +    "status",
        +    "phase",
        +    "googlePresence",
        +    "aiPresence",
        +    "findings",
        +    "pages",
        +    "errorCode",
        +    "locked",
        +    "processing"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_approved_changes
    • Addedlist_sites
    • Addedreport_publication
    • Addedverify_publication
  6. 3 tool updates
    • First observedcreate_preview_link
    • First observedget_product
    • First observedget_snapshot

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides evidence-oriented MCP service for cryptographically identified agents, bounded public contracts, privacy-preserving records, and append-only audit.
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Default-deny action registry, append-only spend ledger, and human sign-off audit trail (MCP tools).
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to discover and create agents, durably submit messages with verifiable replies, and search source-linked local memory. Exposes eight authenticated tools with owner-approved OAuth, transcript-backed verification, and explicit control over history import and embedding.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources