Lumethic Photo Verification
Server Details
Verify photos are real camera captures, not AI: C2PA and RAW+JPEG forensics. OAuth or API key.
- Status
- Healthy
- Uptime
- 91.6% over 38 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 32 tools
Every tool targets a distinct action-object combination—add/set/remove tags, share/unshare verification, create/update/delete portfolio items—so an agent can reliably tell them apart. The two verification tools are clearly differentiated by input type: RAW+JPEG versus a single image with Content Credentials.
All 32 tools consistently follow a lowercase snake_case verb_noun pattern, with predictable prefixes like create, get, list, update, delete, share, and remove. Even compound names such as get_verification_share and list_my_listings still fit the overall scheme.
With 32 tools, the server is well beyond the 25+ threshold for a heavy tool surface. Although each tool has a clear purpose, the set spans seven distinct subdomains, which forces agents to navigate a large option space and increases selection cost.
The core verification lifecycle is well covered: upload, verify, poll status, retrieve results, list, and check quota. Minor gaps exist, such as the lack of a direct PSD download tool and marketplace management being read-only, but these are workable or intentionally handed off to the web app.
Available Tools
32 toolsadd_portfolio_itemAInspect
Add one of the account's verifications to the portfolio (max 50), with an optional title (max 80). IMPORTANT: this makes the verification publicly viewable: a public share link is created, or an invite-only share is upgraded to public. Tell the user before calling it. The response's share_effect says what happened (none, created, upgraded).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Caption for the image, max 80 characters. Empty string clears it. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the critical side effect that the verification becomes publicly viewable, explains that a public share link may be created or an invite-only share upgraded, and tells the agent to inform the user beforehand. It also mentions the response field 'share_effect' so the agent knows what to expect after calling.
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 and well structured: it states the core action, then the constraints, then the important side effect, then the user-facing instruction, then the response clue. Every sentence contributes necessary information without 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?
The description includes all essential context for a correct call: the maximum portfolio size, the title length limit and clearing behavior, the public visibility consequence, the notification requirement, and the response field to inspect. This is sufficient for the agent to understand the tool's full impact.
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?
Both parameters are described in the schema and the description adds meaningful detail beyond the schema: title is optional, max 80 characters, empty string clears it, and verification_id is a UUID returned by specific tools. This gives the agent enough information to fill the parameters correctly.
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 ('Add'), a resource ('account's verifications'), and a destination ('to the portfolio'), with explicit constraints (max 50, optional title max 80). It clearly distinguishes this from sibling tools like update_portfolio_item or remove_portfolio_item by emphasizing the public visibility side effect.
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 guidance by warning about the public visibility outcome and instructing the agent to 'Tell the user before calling it.' It does not explicitly compare with alternatives like share_verification, but the usage context is strongly implied and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_verification_commentAInspect
Post an internal comment (1-4000 characters) on a verification you own, authored by the connected user. Use it for client feedback, decisions, or context worth keeping with the report.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text, 1-4000 characters. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the main behavior: posting an internal comment, character limit, ownership, and authorship. It does not mention error conditions or response shape, but annotations (readOnlyHint false, idempotentHint false) are consistent and no contradictions exist.
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 action and resource, and contains no redundant or filler content.
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 two-parameter tool with an output schema, the description provides enough context to call it correctly: what it does, constraints, use cases, and ownership. No additional details are needed.
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 descriptions cover 100% of parameters, and the description reinforces them by explaining that body is the comment text, that verification_id is a UUID returned by specific verification tools, and that the comment is internal and authored by the connected user.
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 uses a specific verb ('Post') and identifies the resource ('internal comment on a verification you own'), which clearly distinguishes it from sibling tools such as add_verification_tags, list_verification_comments, or update_verification_comment.
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 use the tool ('Use it for client feedback, decisions, or context worth keeping with the report') and notes the ownership requirement, but does not explicitly contrast it with alternative comment-management tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_verification_tagsAIdempotentInspect
Add tags to a verification, keeping the ones already on it. Unknown names are created. Returns the verification's full tag list after the change.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tag names, 1-40 characters each, no commas. Matching is case-insensitive; unknown names are created. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that existing tags are kept, unknown names are created, and the result (full tag list) is returned. The annotations confirm readOnlyHint=false and destructiveHint=false, aligning with the non-destructive additive behavior described. The idempotentHint=true is consistent with adding tags, though not explicitly mentioned in the description.
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 (three sentences) and front-loaded with the primary action. It avoids unnecessary details and structure is straightforward, making it easy to parse quickly.
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 output schema (not shown but exists), the description adequately covers the input behavior and expected outcome. It lacks a mention of potential errors or edge cases (e.g., invalid verification ID), but for a simple add operation, the provided context is sufficient.
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?
Both parameters are required and fully described in the schema (verification_id as UUID, tags as array of strings with length and character constraints). The description reinforces the parameter semantics by repeating the tag constraints, and the schema coverage is 100%.
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 action (add tags to a verification), the specific behavior (keeping existing tags), and the side effect (creating unknown tags). It also mentions the return value (full tag list after change), leaving no ambiguity about the tool's 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 description implies usage by specifying tag constraints (1-40 characters, no commas, case-insensitive matching) and the creation of unknown tags. It doesn't mention when to use this over the sibling 'set_verification_tags' or 'remove_verification_tag', but the behavior is clear enough for basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_portfolioAInspect
Create the account's portfolio (one per account, starts unpublished; paid plans only). slug is the public URL path: 3-30 lowercase letters, digits and single hyphens. display_name is 1-80 characters; tagline (max 160) and website_url (https) are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Public URL path of the portfolio: 3-30 lowercase letters, digits and single hyphens. | |
| tagline | No | Short line under the name, max 160 characters. Empty string clears it. | |
| website_url | No | Photographer's website, an https URL of max 200 characters. Empty string clears it. | |
| display_name | Yes | Name shown on the portfolio page, 1-80 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the portfolio starts unpublished and implies a paid-plan requirement, adding meaningful behavior beyond the annotations. It does not detail failure modes or post-creation effects, but annotations already indicate a non-readonly, non-destructive, non-idempotent mutation.
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 compact and well-structured: it opens with the core purpose and key constraints, then clearly walks through parameter requirements. No filler or redundant phrasing is present.
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 output schema exists, the description covers essential context: creation behavior, account-level constraint, initial unpublished state, payment requirement, and all parameter constraints. It does not explain error responses or uniqueness handling, but the provided context is sufficient for correct invocation.
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 provides 100% description coverage for all four parameters, including formats and constraints. The description largely restates these details rather than adding new semantic relationships or cross-parameter context, so it stays at the baseline for high schema coverage.
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 action ('Create'), the resource ('portfolio'), and key distinguishing constraints: one per account, starts unpublished, and paid plans only. This differentiates it from update/delete/get portfolio tools and from other create tools among siblings.
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 provides strong contextual guidance by noting one-per-account and paid-plan requirements, which tells the agent when creation is appropriate. It does not explicitly name alternative sibling tools or contrast with update_portfolio, but the constraints effectively convey usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_psd_exportAIdempotentInspect
Request a layered flicker-comparison PSD for a completed RAW+JPEG verification you own: the original photo, the pixel-registered RAW rendition, and the SSIM difference heatmap as layers, for A/B toggling in Photoshop. Professional plan only (monthly allowance included, metered beyond it). Generation is asynchronous — poll get_psd_export_status until status is 'completed', then download the file from the verification page in the web app. Idempotent: re-requesting returns the existing export's state, and a failed export is retried at no extra charge.
| Name | Required | Description | Default |
|---|---|---|---|
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently covers asynchronous generation, idempotent re-request behavior, retry of failed exports, and plan/allowance implications. It does not describe error cases for invalid verification IDs, but the disclosed behavior is otherwise thorough.
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 dense but well-structured, covering purpose, constraints, async flow, and idempotency without unnecessary filler. Each clause adds meaningful 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 provides enough context for an agent to choose and call the tool, including the polling flow and download location. It does not detail the output schema fields, but the reference to get_psd_export_status and the existence of an output schema reduce the need for that detail here.
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 single parameter verification_id is fully described in the schema and enriched by the description, which explains that it must reference a completed RAW+JPEG verification and how it is returned (verify_photo, verify_content_credentials, or list_verifications).
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: requesting a layered flicker-comparison PSD for a completed RAW+JPEG verification the user owns. It also names the specific layers and distinguishes the tool from the related get_psd_export_status tool.
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 explains when to use the tool, including prerequisites (completed RAW+JPEG verification you own), plan restrictions (Professional plan only), and the asynchronous workflow with the polling step via get_psd_export_status. This leaves little ambiguity about usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_verification_uploadAInspect
Get pre-signed S3 PUT URLs to upload a large RAW + JPEG directly (avoids inlining bytes and bypasses request-size limits). PUT each file to its upload_url, then call verify_photo with the returned object_key values as raw_object_key / image_object_key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool does not actually upload the files itself but returns pre-signed URLs, and that the agent must PUT to those URLs and then call verify_photo with the returned object keys. This adds meaningful behavioral context beyond the sparse annotations, though it does not mention URL expiration or upload completion details.
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 compact sentences that front-load the core function and immediately follow with actionable steps. Every sentence contributes essential information with no redundancy or 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 zero-parameter tool with an output schema, the description fully covers the workflow: obtaining URLs, uploading files, and completing verification with the returned keys. Nothing critical is missing for correct invocation and follow-through.
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 input schema has zero parameters and schema description coverage is 100%, so there are no parameter semantics to describe. Per the baseline for zero-parameter tools, this is effectively handled; the description focuses on the workflow and response usage instead.
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: obtaining pre-signed S3 PUT URLs for uploading large RAW and JPEG files. It distinguishes itself from verify_photo by explaining that it handles the upload mechanism rather than inline bytes, making the resource and action 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 explains when to use this tool — for large files where inlining bytes would hit request-size limits — and outlines the next required step of calling verify_photo afterward. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to follow the intended flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_portfolioADestructiveIdempotentInspect
Delete the portfolio and all its items. The verifications and their share links are untouched. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing exact side effects: deleting 'all its items' while leaving 'verifications and their share links untouched.' It also adds an important behavioral safety instruction to 'Confirm with the user first.' This is consistent with the annotations, which mark the operation as destructive.
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 short sentences with action and scope front-loaded. It covers the main behavior, exceptions, and a safety step without any 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 destructive, zero-parameter tool with an output schema, the description provides the essential operational knowledge: what gets deleted, what remains, and the required user confirmation. Nothing critical is missing for invoking 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?
The tool has zero parameters and the input schema correctly reflects that with an empty properties object. With no parameters, the description does not need to explain parameter meaning, and the 100% schema coverage supports 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 names a specific verb and resource: 'Delete the portfolio and all its items.' This clearly distinguishes it from siblings like remove_portfolio_item by stating the full scope of deletion. The additional clause about verifications and share links further clarifies precisely which resources are affected.
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 that this tool should be used to delete an entire portfolio and that the user should be confirmed first. However, it does not explicitly mention alternatives such as remove_portfolio_item for deleting only one item, so the guidance is more implied than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagADestructiveIdempotentInspect
Delete a tag (by name or tag id) from the account's vocabulary and detach it from every verification. The verifications themselves are untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name (case-insensitive) or tag id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explicitly stating that the tag is detached from every verification and that the verifications themselves are untouched, providing clear side-effect information.
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 and well-structured, using two clear sentences to convey the primary action and the important side effect without unnecessary detail.
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 deletion tool with one parameter, the description provides sufficient context about what is deleted, what happens to related entities, and what is not affected, making it complete for an agent to use.
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 only parameter 'tag' is fully described with its type (string), accepted formats (name or id), and case-insensitivity, which adds meaningful semantic detail 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 the action (delete) and the resource (a tag from the account's vocabulary), and distinguishes it from other tag-related operations like update_tag or remove_verification_tag by specifying it also detaches the tag from every verification.
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?
While it doesn't explicitly compare itself to alternatives, the description implies when to use it (to permanently remove a tag from the account vocabulary) and clarifies side effects on verifications, which helps an agent select it over related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_verification_commentADestructiveIdempotentInspect
Delete a comment. Allowed for its author and for admins of the account.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment id as returned by list_verification_comments or add_verification_comment. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing an authorization constraint (author or admin only), which is a behavioral aspect not covered by the readOnlyHint or destructiveHint. It adds useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and to the point, consisting of two short sentences with no unnecessary words or redundant information. It efficiently conveys the core action and a key constraint.
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 presence of an output schema and annotations that cover destructive behavior, the description is adequately complete for a delete operation. It adds the important authorization detail, making it sufficient for an agent to understand the tool's purpose and context.
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?
Both parameters (comment_id and verification_id) are described in the schema with references to related tools. The description itself does not add additional semantic information beyond what the schema already provides, 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 clearly states the tool's function: 'Delete a comment.' It is specific and unambiguous, and distinguishes it from sibling tools like add_verification_comment or update_verification_comment by indicating it is for deletion.
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 implicit usage guidance by specifying that deletion is allowed only for the author or admins, but it does not explicitly contrast with alternatives or state when to choose this tool over others. The context is clear from the sibling tools, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_usageARead-onlyIdempotentInspect
Get the authenticated account's monthly verification quota: plan, used, limit, and remaining. Call this before verify_photo to check the free-tier allowance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context: the quota is monthly, tied to the authenticated account, and includes free-tier allowance semantics. 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 no filler. The first sentence states the operation and its key outputs; the second provides a direct, actionable usage guideline. Every word 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?
For a parameterless read-only tool with an output schema and full annotation coverage, this description is complete. It states what the tool returns, who it applies to (authenticated account), and when to call it. Nothing essential is missing.
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 of 4 applies. The description adds no parameter-specific details because there are none to add, and it appropriately focuses on the returned quota information.
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 ('Get') and resource: the authenticated account's monthly verification quota, explicitly listing the returned fields (plan, used, limit, remaining). It also names the exact use case related to verify_photo, making it clearly distinguishable from sibling tools.
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 tells the agent when to call this tool: 'Call this before verify_photo to check the free-tier allowance.' This is clear context and links to a concrete precondition. It doesn't explicitly mention exclusions or alternatives, but none are necessary given the tool's unique role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingARead-onlyIdempotentInspect
Fetch a marketplace listing by id: title, description, per-license pricing, terms, and sales totals. There is no public directory — you must know the listing UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes | Marketplace listing id (UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations by stating the access constraint ('no public directory') and what data the caller can expect. No contradictions with annotations exist.
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 tight sentences with no filler. The core purpose and returned fields are front-loaded, and the access constraint is stated efficiently in the second sentence.
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 one-parameter read-only tool with a rich output schema and clear annotations, the description is fully adequate. It specifies the input requirement, the data returned, and the key constraint, leaving nothing essential unexplained.
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%, with the parameter already documented as a marketplace listing UUID. The description reinforces that the UUID must be known in advance, but adds little new meaning beyond the schema for the single parameter.
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 operation ('Fetch a marketplace listing by id') and names the key returned fields: title, description, per-license pricing, terms, and sales totals. This makes the tool's purpose specific and distinguishable from sibling tools like list_my_listings or get_portfolio.
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 usage context by explaining that there is no public directory and the caller must know the listing UUID. This tells the agent when it can and cannot use the tool, though it does not explicitly name alternatives for discovering listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolioARead-onlyIdempotentInspect
Get the account's verified portfolio: slug, public URL, published state, and every item with its title, position and whether it is publicly shared. A portfolio is a public page of verified photos (paid plans).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description adds that portfolios are for verified photos on paid plans, implying a potential requirement/failure mode. It also describes the return content. However, it does not mention error conditions or edge cases, but the annotations already cover the core safety traits.
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 and well-structured, with two clear sentences: one stating the action and return fields, and one providing contextual detail about the portfolio's nature. No unnecessary verbosity.
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 fully explains what the tool returns (slug, public URL, published state, and item details) and adds context about paid plans and verified photos. Even without an output schema, an agent would understand the expected data shape and 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 tool has no parameters, so schema coverage is effectively 100%. The baseline is 3, and the description adds no parameter-specific details because none exist. This 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 retrieves the account's verified portfolio and lists the key fields returned (slug, public URL, published state, and portfolio items with title, position, and shared status). This makes the purpose specific and distinct from generic listing tools.
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 does not explicitly differentiate this tool from siblings like get_verification or list_my_listings. It mentions it's for the account's portfolio, but there is no direct guidance on when to prefer this over alternatives. This is a clear gap given the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_psd_export_statusARead-onlyIdempotentInspect
Poll the state of a verification's PSD export: status (pending|queued|in_progress|completed|failed), file size, canvas dimensions, downloads used, and download expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and idempotentHint annotations already indicate no side effects, and the description adds transparency about the returned data (status, file size, canvas dimensions, downloads used, expiry). It does not contradict the annotations and gives a clear picture of the tool's behavior.
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, focused sentence that front-loads the action and resource, then compactly lists the returned fields. There is no redundant or extraneous wording.
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 read-only polling tool with one well-documented parameter and an output schema, the description is complete. It specifies what statuses to expect and what data is returned, and the sibling list provides the related create_psd_export context.
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 verification_id parameter, including its UUID type and origin, so the description does not need to add much. The tool description itself adds no further parameter detail, matching the baseline for high schema coverage.
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 a specific action ('Poll the state') and a specific resource ('a verification's PSD export'), which distinguishes it from sibling tools like create_psd_export and get_verification. It also lists the key output fields, so an agent knows exactly what this tool provides.
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 word 'Poll' implies this should be used after requesting an export, but the description does not explicitly mention create_psd_export or state when to prefer this over get_verification. Usage guidance 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_upgrade_linkARead-onlyIdempotentInspect
Get a link to upgrade the account's plan on the Lumethic website (for example after a QUOTA_EXCEEDED or NOT_ENTITLED error). The link opens the sign-in page with the user's email prefilled and then the plan page; it contains no credentials. Show it to the user. Calling it records that an upgrade link was requested.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contradicts the annotations. Annotations declare readOnlyHint=true, yet the description says 'Calling it records that an upgrade link was requested,' which implies a state-changing side effect. Even though the description usefully discloses that the link contains no credentials, the direct contradiction with readOnlyHint makes the behavioral model unreliable.
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 long and every sentence earns its place: purpose and trigger, link behavior and security property, and user-facing action plus side effect. It is front-loaded with the core purpose 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 zero-parameter tool with an output schema, this description covers the essential context: what the link does, when to use it, what to do with it, and that it has no credentials. The only weakness is the readOnlyHint contradiction, which makes the side-effect information conflict with the 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?
The tool has zero parameters and schema coverage is 100%, so there is no parameter semantics for the description to add. With no parameters, a baseline of 4 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 opens with a specific verb and resource: 'Get a link to upgrade the account's plan on the Lumethic website.' It also gives concrete trigger examples (QUOTA_EXCEEDED or NOT_ENTITLED errors) and tells the agent to show the link to the user. This is clearly differentiated from sibling tools like get_account_usage or get_listing.
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 identifies when to use the tool: after quota or entitlement errors, and states that the link should be shown to the user. It does not mention when not to use it or name alternative tools, but the context is clear enough for an agent to make the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_verificationARead-onlyIdempotentInspect
Retrieve a verification by id: processing status and per-algorithm authenticity results. Completed single-image (image_only) verifications also include a verdict and a structured evidence_report with per-check findings and coverage. While the analysis is still running (status pending, queued or in_progress) the call waits for it, up to wait_seconds (default and maximum 40; pass 0 to return immediately), and answers as soon as it completes. A non-final response includes waited_seconds, expected_wait and next_step: call again and keep calling until status is completed or failed. Analysis takes from about a minute to 10 minutes or more, so expect several calls. Under heavy load the server may skip the wait and answer at once; the status is still correct, just call again. Scoped to the caller's account.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_seconds | No | Seconds to wait for a running analysis before answering (0-40, default 40; values above 40 are capped). The call returns early as soon as the verification completes, and immediately when it is already completed or failed. 0 disables waiting. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing wait behavior, wait_seconds semantics, early-return conditions under heavy load, the non-final response fields (waited_seconds, expected_wait, next_step), and the range of possible statuses. This is exactly the behavioral context an agent needs to poll correctly.
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 dense but every sentence earns its place: result scope, completion extras, wait behavior, polling loop, duration expectations, load behavior, and account scoping. It is front-loaded with the core purpose and then expands into operational details.
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 polling tool with an output schema, the description covers the full invocation lifecycle: what to expect initially, how long to wait, what fields indicate non-completion, when to call again, and how to handle server-side wait skipping. Nothing needed for correct usage is missing.
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 coverage is 100%, so the baseline is 3. The description adds useful context on top: it explains what wait_seconds does in practice, how returning early works, and what a non-final response contains. This supplements the schema without repeating 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 names a specific verb and resource ('Retrieve a verification by id') and explains what the response contains (status, per-algorithm results, verdict for completed image_only verifications). It is clearly distinct from list_verifications by requiring a verification_id, but it does not explicitly name or contrast a sibling tool.
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 polling guidance: call again and keep calling until status is completed or failed, expect several calls because analysis takes 1-10 minutes, and handle early returns under load. It does not explicitly say when to use this tool versus listing or creating verifications, but the polling workflow is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_listingsARead-onlyIdempotentInspect
List the marketplace listings owned by your account (with pricing and sales totals).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. | |
| offset | No | Number of listings to skip, for paging. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately reflects the read-only nature of the operation, consistent with the annotations (readOnlyHint, idempotentHint, destructiveHint). It also adds behavioral detail about the response, mentioning pricing and sales totals, which is not fully covered by the annotations alone.
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, concise sentence with no redundant phrasing. It front-loads the primary purpose and includes relevant output detail without wasting words.
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 paginated listing operation with an output schema and clear annotations, the description provides sufficient context. It explains the scope (owned listings) and output highlights (pricing, sales totals), making it complete without needing extra prose.
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?
Both parameters (limit and offset) have schema descriptions, achieving 100% coverage. The tool description adds no extra meaning beyond the schema; the parameter descriptions are standard pagination text and the bounds are already expressed in 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 the tool lists marketplace listings owned by the account, using the specific verb 'List' and identifying the resource and scope. It distinguishes itself from sibling tools like get_listing by focusing on owned listings and including pricing and sales totals.
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 implies usage for retrieving one's own listings, but it does not explicitly reference alternatives or conditions for choosing this tool over others. No direct guidance is given for when to use list_my_listings versus get_listing or other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsARead-onlyIdempotentInspect
List the account's tag vocabulary: id, name, colour and how many verifications carry each tag. Tags are assigned in the web app or via PUT /v1/verifications/{id}/tags; pass the names to list_verifications' tags filter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful behavioral context by specifying it returns an account-level vocabulary with per-tag verification counts and noting how tags get assigned, 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 with no filler; the core purpose and return fields are front-loaded, and the second sentence efficiently provides provenance and downstream usage.
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 with an output schema and full annotations, the description supplies everything needed to invoke it correctly, including what the result is and how to use it.
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, so the schema leaves nothing to explain; per the rubric the baseline is 4. The description's mention of passing names to list_verifications is related downstream context rather than parameter documentation.
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 ('List') and resource ('the account's tag vocabulary') and enumerates the returned fields (id, name, colour, verification counts). This clearly distinguishes it from sibling tag operations like update_tag and delete_tag.
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 gives clear context for when to use the tool: to fetch the tag vocabulary and feed names into list_verifications' tags filter. It does not explicitly state when not to use it or name alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_verification_commentsARead-onlyIdempotentInspect
List the internal comments on a verification you own, oldest first, with author names. Comments are private notes visible to the owning account only.
| Name | Required | Description | Default |
|---|---|---|---|
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds that results are ordered oldest first, include author names, and are private to the owning account, which are meaningful behavioral details 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 two concise sentences with no redundancy. It efficiently conveys the action, ordering, author visibility, and privacy scope without unnecessary details.
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 provides sufficient context about ordering, author names, and privacy. Since an output schema exists (though not shown), return format is not required in the description. The tool is simple with one parameter, and the description covers the essential aspects for correct invocation.
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 describes verification_id with examples of where it comes from (verify_photo, verify_content_credentials, or list_verifications). The description adds that the verification must be one you own, an additional semantic constraint not present in 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 the action (list), the resource (internal comments on a verification), the ordering (oldest first), and the inclusion of author names. It distinguishes from sibling tools like add_verification_comment, delete_verification_comment, and update_verification_comment by focusing on listing.
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 specifies the condition 'on a verification you own' and notes that comments are private notes, which implies when to use it. However, it does not explicitly compare with alternative retrieval methods like get_verification, leaving some ambiguity about when to choose this over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_verificationsARead-onlyIdempotentInspect
List the account's verifications, most recent first. Optional filters: status (pending|queued|in_progress|completed|failed), result (true=authentic, false=not), tags (list of tag names, case-insensitive) and tag_match ('all' = every listed tag must be on the verification, the default; 'any' = at least one). Use list_tags to discover names.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Page size, 1-100. | |
| tags | No | Only verifications carrying these tag names (case-insensitive). | |
| offset | No | Number of verifications to skip, for paging. | |
| result | No | true: only verifications judged authentic; false: only those that were not. | |
| status | No | Only verifications in this processing status. | |
| tag_match | No | 'all': every listed tag must be present; 'any': at least one. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not repeat those. It adds behavioral context beyond the schema: ordering ('most recent first'), filter semantics (result true/false, tag_match all/any), and case-insensitive tags. No contradictions 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 two sentences, with the primary purpose and ordering front-loaded. Every sentence earns its place: the first states what it does, the second covers filters and a prerequisite pointer. No filler or repetition.
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 output schema exists and annotations cover safety, the description covers all essential aspects: purpose, filters, ordering, and a pointer to a sibling tool for tag discovery. Pagination is handled by schema parameters, and the read-only/idempotent nature is in annotations. Nothing critical is missing.
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 parameters are documented there, but the description adds semantic depth: it clarifies 'result' (true=authentic, false=not), explains 'tag_match' defaults and meanings, and notes case-insensitivity for tags. This goes beyond the schema's basic descriptions.
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 ('List'), resource ('verifications'), and scope ('the account's'), with ordering ('most recent first'). This clearly differentiates it from siblings like get_verification (single) and list_verification_comments (comments), leaving no ambiguity about what the tool does.
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 provides a clear usage context (listing with filters) and a specific pointer: 'Use list_tags to discover names.' While it does not explicitly name alternatives like get_verification, the purpose and filters make the intended use evident, and the tag discovery hint is a concrete usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_portfolio_itemAIdempotentInspect
Remove a verification from the portfolio. Its public share link stays active; call unshare_verification as well if the user wants it private again.
| Name | Required | Description | Default |
|---|---|---|---|
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical side effect: the public share link stays active after removal. This is not covered by the annotations (readOnlyHint=false, destructiveHint=false) and is essential for the agent to set user expectations. It also implies non-destructive behavior consistent with destructiveHint=false.
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 concise sentences. The first states the primary action, the second explains the side effect and the alternative. No redundant or vague language; the description is optimally sized for an agent to quickly parse.
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 tool with one parameter and one key side effect, the description covers everything needed: the action, the result on the share link, and the alternative when privacy is desired. There is no missing context that would cause an agent to misuse 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 single parameter verification_id is fully described with its format (UUID) and provenance: 'as returned by verify_photo, verify_content_credentials or list_verifications.' This gives the agent exact instructions on where to obtain the value, far exceeding basic schema information.
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 action: 'Remove a verification from the portfolio.' This is a specific verb with a specific object, and it distinguishes from sibling tools like add_portfolio_item, delete_portfolio, and share_verification. The clarification that the share link remains active further disambiguates it from unshare_verification.
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 an alternative: 'call unshare_verification as well if the user wants it private again.' This directly instructs the agent on the condition for using a sibling tool, leaving no ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_verification_tagAIdempotentInspect
Remove one tag (by name or tag id) from a verification. The tag stays in the account's vocabulary. Returns the remaining tags.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name (case-insensitive) or tag id. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the side effect that the tag stays in the account's vocabulary, and it mentions the return value (remaining tags). This fully informs the agent about the tool's behavior without needing to inspect 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 concise, using two sentences to convey all essential information. There is no redundant or irrelevant text, and the key points are front-loaded: the action, the object, and the non-destructive side effect.
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 low complexity and full schema/annotation coverage, the description is complete on its own. It explains the operation, parameters, return behavior, and side effect, providing sufficient context for an agent to use it correctly without additional documentation.
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?
Both parameters are clearly described: verification_id as a UUID with reference to how it is obtained, and tag as either a case-insensitive name or a tag id. The schema coverage is 100%, and the descriptions add necessary context beyond the raw schema types.
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 action ('Remove one tag'), the object ('from a verification'), and its scope (by name or tag id). It also clarifies the non-destructive nature by noting the tag remains in the account's vocabulary, leaving no ambiguity about the tool's 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 description does not provide any guidance on when to use this tool versus alternatives such as add_verification_tags or set_verification_tags. No prerequisites or conditions are mentioned, so the agent must infer usage context from the sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_portfolio_itemsAIdempotentInspect
Set the display order. verification_ids must contain every current item exactly once, in the desired order (first = shown first).
| Name | Required | Description | Default |
|---|---|---|---|
| verification_ids | Yes | Every current item's verification id, in the desired display order. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that verification_ids must contain every current item exactly once, which is a key behavioral constraint not fully captured by the readOnly/idempotent annotations. It does not describe error handling or side effects beyond the order specification.
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 no unnecessary words. It clearly states the action and the required input format in two short sentences.
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 reorder operation, the description is sufficient. It explains the requirement and order interpretation. It does not need details like permissions or return formats given the tool's simplicity and existing 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?
The parameter description in the schema already fully explains that it expects every current verification id in desired order. The tool description repeats this information without adding extra insight, so no additional value beyond schema coverage.
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?
Clearly states it sets the display order for portfolio items, which is a specific action distinct from siblings like add or remove. The verb 'Set' and resource 'display order' are explicit.
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?
Does not explicitly mention when to use this tool over alternatives like add_portfolio_item or update_portfolio_item. It provides the requirement that all items must be included, which implies a full reorder, but lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_verification_tagsAIdempotentInspect
Replace the tags on a verification with exactly this list (empty list clears them). Unknown names are created in the account's vocabulary; matching is case-insensitive. Names are 1-40 characters, no commas, at most 20 per verification. Returns the verification's tags after the change.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tag names, 1-40 characters each, no commas. Matching is case-insensitive; unknown names are created. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses the write nature of the operation ('Replace'), the idempotent behavior (setting exactly the given list), and the non-destructive aspect (it modifies tags but does not delete the verification). It also notes that an empty list clears tags, which is an important side effect.
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, consisting of three clear sentences. It front-loads the primary action and then adds constraints and return details without unnecessary verbosity.
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 is complete for an agent to use: it explains the operation, the input constraints, the effect, and the return value ('Returns the verification's tags after the change'). Combined with the output schema, nothing essential is missing.
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 provides 100% coverage with descriptions for both parameters (verification_id and tags, including constraints). The tool description repeats these constraints without adding new meaning about the parameters themselves, so it does not elevate beyond the baseline.
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 action (replace), the resource (tags on a verification), and the exact semantics (with exactly this list). It distinguishes itself from sibling add/remove tag tools by indicating full replacement rather than incremental changes.
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 explains when to use it (to set the full set of tags), the behavior for an empty list (clears them), and constraints (unknown names created, case-insensitive, 1-40 characters, no commas, max 20). This leaves no ambiguity about the operation's effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_portfolioAIdempotentInspect
Change the portfolio's display_name, tagline, website_url or slug, or publish/unpublish it with published=true/false. Pass an empty string to clear tagline or website_url; omit fields to leave them. The slug can change at most 3 times per 30 days. Unpublishing always works; other changes need a paid plan.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | New public URL path; see create_portfolio for the rules. | |
| tagline | No | Short line under the name, max 160 characters. Empty string clears it. | |
| published | No | true publishes the page, false takes it offline. | |
| website_url | No | Photographer's website, an https URL of max 200 characters. Empty string clears it. | |
| display_name | No | New name, 1-80 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavioral nuances: unpublishing always works, but other changes need a paid plan. This goes beyond the annotations to set user expectations about side effects and limitations.
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 compact and well-organized, presenting all key information in three sentences without redundancy or irrelevant details.
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 output schema exists and the tool is an update operation, the description covers the essential behavior, constraints, and edge cases (clearing, omitting, limits, paid plan). An agent has enough context to use it correctly without further lookup.
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 provides detailed descriptions for each parameter (e.g., slug rules, max lengths). The description adds clarifying context about clearing and omitting fields, but most parameter meaning is already captured in 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 the action (change portfolio fields) and enumerates the specific fields and publish/unpublish behavior. It leaves no ambiguity about the tool's 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?
It explicitly explains how to clear fields (empty string), that omitted fields are left unchanged, and constraints on slug changes (max 3 per 30 days) plus the paid plan requirement. These are practical usage rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_portfolio_itemAIdempotentInspect
Set an item's title (max 80 characters) or clear it with an empty string.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Caption for the image, max 80 characters. Empty string clears it. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false and destructiveHint=false, so the description does not need to repeat those. The description adds valuable behavioral details: the maximum length of 80 characters and the special behavior of an empty string clearing the title. This goes beyond the schema and enhances transparency.
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, concise sentence that covers the tool's purpose and key constraints without unnecessary words. It is perfectly sized for quick consumption by an agent.
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 simplicity, an output schema is present, and the description clearly defines the input and behavior. There is no missing contextual information that an agent would need to invoke it correctly. The description is complete and self-contained.
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 documents both parameters fully, and the description reinforces their roles: 'title' is the value to set, and 'verification_id' identifies the item. The description adds extra semantics (max 80 chars, empty string clears) that are not in the schema, providing additional clarity for the 'title' parameter. Coverage is 100%.
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: setting an item's title. The verb 'set' and object 'item's title' make the purpose explicit. It is also distinguishable from sibling tools like update_portfolio, add_portfolio_item, and remove_portfolio_item, which handle different operations.
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 implies when to use this tool—whenever a portfolio item's title needs to be updated or cleared. It does not explicitly mention alternatives, but the scope is clear and self-explanatory. Slightly less explicit than ideal, but sufficient for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tagAIdempotentInspect
Rename and/or recolour a tag in the account's vocabulary (by name or tag id). A rename shows on every verification carrying it. color is '#rrggbb'; pass an empty string to clear it. Omit a field to leave it unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name (case-insensitive) or tag id. | |
| name | No | New tag name, 1-40 characters, no commas. | |
| color | No | '#rrggbb' colour. Empty string clears it. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency, read-only, and destructive hints. The description adds valuable behavioral context by noting that a rename shows on every verification carrying the tag and that an empty colour string clears the colour, while also clarifying partial-update 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?
The description is compact and well-structured, with the main action front-loaded and supporting details in short, clear sentences. No superfluous wording 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?
The description provides enough information to call the tool correctly: how to identify the tag, what fields can be updated, and the effect on existing verifications. With an output schema present, return value details are not needed, though error cases are not mentioned.
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 descriptions cover all three parameters, so the baseline is high. The description adds cross-parameter meaning by explaining that omitting a field leaves it unchanged, which is important update semantics not fully captured in individual parameter descriptions.
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 renames and/or recolours a tag in the account's vocabulary, using a specific verb and resource. It naturally distinguishes this from sibling tools like delete_tag and list_tags by focusing on updating an existing tag.
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 explains how to perform the update (by name/id, omit fields to leave unchanged, empty string to clear colour) but does not explicitly state when to choose this tool over alternatives such as delete_tag or set_verification_tags. Usage context is implied, not directly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_verification_commentADestructiveIdempotentInspect
Replace the text of a comment the connected user wrote. Marks it as edited; the old text is not kept.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text, 1-4000 characters. | |
| comment_id | Yes | Comment id as returned by list_verification_comments or add_verification_comment. | |
| verification_id | Yes | Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the old text is not kept and the comment is marked edited. It also notes the ownership constraint ('connected user wrote'), adding behavioral context.
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 with the main verb and object first, followed by relevant constraints and effects. 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?
The description covers the action, ownership constraint, and outcome. With an output schema present and no nested objects, it is sufficiently complete, though it could mention failure cases if the comment isn't owned.
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 coverage is 100% and each parameter has a clear description, including how to obtain IDs. The description adds no further parameter-specific meaning, so baseline 3 applies.
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 action ('Replace the text of a comment'), the resource ('a comment the connected user wrote'), and the effect ('Marks it as edited; the old text is not kept'), which distinguishes it from add/delete comment siblings.
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 usage is implied by 'the connected user wrote' and 'Replace', but it does not explicitly state when to use this over add_verification_comment or delete_verification_comment, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_content_credentialsAInspect
Verify a single image's authenticity when the user asks whether it is genuine, AI-generated, manipulated, or carries Content Credentials, and only the image is available (no RAW camera file). Not for feedback on a photo (composition, editing, colour) or for anything that is not a still image. Checks its embedded Content Credentials (C2PA) for capture provenance and AI-generation flags, and runs advisory forensic screens (error-level analysis, double-JPEG artifacts, EXIF timestamp consistency, editing-software traces, screen recapture). Free: it does not consume your verification quota. Provide the image as an attachment (image_file), inline as image_base64, or — for large files without attachments — call create_verification_upload and pass the returned image_object_key. Returns a verification id at once; the analysis runs in the background and takes from about a minute to 10 minutes or more, so call get_verification with the id repeatedly until status is completed; the completed result includes a structured evidence_report (verdict, per-check findings, coverage). For the strongest forensic check, use verify_photo with a RAW + JPEG pair instead.
| Name | Required | Description | Default |
|---|---|---|---|
| image_file | No | The image (JPEG or PNG) the user attached. | |
| image_base64 | No | The image as base64, for files up to a few MB. For larger files call create_verification_upload and pass image_object_key instead. | |
| image_filename | No | Original image filename with extension. Defaults to the attachment's own name. | upload.jpg |
| image_object_key | No | Object key returned by create_verification_upload for the image. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (all false hints) carry almost no behavioral information, so the description rightly carries the full burden. It discloses the async nature ('analysis runs in the background and takes from about a minute to 10 minutes or more'), the immediate id return, the required polling pattern via get_verification, the free/quota trait, and the structured evidence_report shape. These are rich behavioral traits beyond what annotations provide.
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 long (roughly 8 sentences) but every sentence earns its place for a tool with async behavior and multiple input modes: purpose, exclusions, checks performed, quota, parameter routing, polling, and alternative. It is front-loaded with purpose and scope. Minor redundancy exists ('carries Content Credentials' and later 'embedded Content Credentials (C2PA)'), but overall density is justified.
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 complexity (4 parameters, 3 input modes, background execution, output schema present), the description is complete: it covers triggering conditions, exclusions, the forensic checks performed, quota impact, polling instructions, and the verified alternative. Since an output schema exists, detailed return-value documentation is not needed. No significant operational gap remains.
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 coverage is 100%, so the baseline is 3. The description adds genuine cross-parameter meaning by consolidating the three input paths ('attachment (image_file), inline as image_base64, or — for large files without attachments — call create_verification_upload and pass the returned image_object_key'), which helps an agent choose among the four parameters correctly. This exceeds the baseline without duplicating 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 states a specific verb and resource: 'Verify a single image's authenticity when the user asks whether it is genuine, AI-generated, manipulated, or carries Content Credentials'. It explicitly scopes to single still images with no RAW file, and names the exclusion ('Not for feedback on a photo... or for anything that is not a still image'), clearly distinguishing it from the sibling verify_photo.
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 when-to-use, when-not-to-use, and alternative routing. It specifies the triggering condition (authenticity question, only image available), the exclusion (photo feedback, non-still images), the stronger alternative ('use verify_photo with a RAW + JPEG pair instead'), and the upload alternative (create_verification_upload for large files). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_photoAInspect
Verify a photo's authenticity from a RAW camera file and its JPEG export, when the user asks for proof or a check that the photo is a genuine camera capture (not for feedback on the photo itself). Provide the files as attachments (raw_file = the camera RAW such as .CR2/.CR3/.NEF/.ARW/.RAF/.ORF/.DNG, image_file = the exported .jpg/.png), inline as raw_base64 + image_base64 (small files), or — for large files without attachments — call create_verification_upload first and pass the returned raw_object_key + image_object_key. Returns a verification id at once; the analysis runs in the background and takes from about a minute to 10 minutes or more, so call get_verification with the id repeatedly until status is completed. Counts against the monthly quota (free tier: 5/month).
| Name | Required | Description | Default |
|---|---|---|---|
| raw_file | No | The camera RAW file the user attached (.CR2/.CR3/.NEF/.ARW/.RAF/.ORF/.DNG ...); its file_name selects the decoder. | |
| image_file | No | The JPEG/PNG export of the same shot the user attached; pairs with raw_file. | |
| raw_base64 | No | The camera RAW file as base64, for files up to a few MB. For larger files call create_verification_upload and pass raw_object_key instead. | |
| image_base64 | No | The JPEG export of the same shot as base64; pairs with raw_base64. | |
| raw_filename | No | Original RAW filename with extension, e.g. IMG_1234.CR3; the extension selects the decoder. Defaults to the attachment's own name. | upload.raw |
| image_filename | No | Original JPEG filename with extension. Defaults to the attachment's own name. | upload.jpg |
| raw_object_key | No | Object key returned by create_verification_upload for the RAW file. | |
| image_object_key | No | Object key returned by create_verification_upload for the JPEG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses key behavioral traits: the tool returns a verification id immediately, runs analysis in the background for about a minute to 10+ minutes, and requires polling get_verification until completion. It also transparently states that calls count against a monthly quota, with free tier at 5/month. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: purpose and exclusions first, then input routing, then async behavior and quota impact. Every sentence carries operational value, with no filler or repetition of schema details.
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 an 8-parameter asynchronous tool, the description covers all essential operational aspects: when to use, what inputs to provide, how to route large files, how to retrieve the result, and cost/quota implications. An output schema exists, so the description does not need to explain return values.
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?
Although schema coverage is 100%, the description adds strategic meaning by grouping parameters into three clear input modes: attachments (raw_file/image_file), inline base64 for small files, and object keys from create_verification_upload for large files. It also clarifies pairing requirements and size thresholds that the raw schema alone does not convey at a decision level.
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 opens with a specific verb and resource: 'Verify a photo's authenticity from a RAW camera file and its JPEG export.' It also scopes the tool to requests for proof or genuineness checks and explicitly excludes feedback on the photo itself, making its role unmistakable.
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 clearly states when to use the tool ('when the user asks for proof or a check that the photo is a genuine camera capture') and when not to use it ('not for feedback on the photo itself'). It also gives concrete input-mode guidance, including when to call create_verification_upload for large files. It does not explicitly contrast sibling verify_content_credentials, though the RAW+JPEG pairing makes the intended use clear.
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 tool update
- Changed
get_verification1 field changed- added
Input schema / properties / wait_secondsAdded value: +{ + "default": 40, + "description": "Seconds to wait for a running analysis before answering (0-40, default 40; values above 40 are capped). The call returns early as soon as the verification completes, and immediately when it is already completed or failed. 0 disables waiting.", + "title": "Wait Seconds", + "type": "integer" +}
2 tool updates
- Changed
verify_content_credentials2 fields changed- added
Input schema / properties / image_fileAdded value: +{ + "default": null, + "description": "The image (JPEG or PNG) the user attached.", + "properties": { + "download_url": { + "description": "URL the file can be downloaded from.", + "type": "string" + }, + "file_id": { + "description": "The client's identifier for the file.", + "type": "string" + }, + "file_name": { + "description": "Original file name, when known.", + "type": "string" + }, + "mime_type": { + "description": "MIME type, when known.", + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - changed
Input schema / properties / image_filename / descriptionPrevious value: -"Original image filename with extension."New value: +"Original image filename with extension. Defaults to the attachment's own name."
- Changed
verify_photo4 fields changed- added
Input schema / properties / image_fileAdded value: +{ + "default": null, + "description": "The JPEG/PNG export of the same shot the user attached; pairs with raw_file.", + "properties": { + "download_url": { + "description": "URL the file can be downloaded from.", + "type": "string" + }, + "file_id": { + "description": "The client's identifier for the file.", + "type": "string" + }, + "file_name": { + "description": "Original file name, when known.", + "type": "string" + }, + "mime_type": { + "description": "MIME type, when known.", + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - changed
Input schema / properties / image_filename / descriptionPrevious value: -"Original JPEG filename with extension."New value: +"Original JPEG filename with extension. Defaults to the attachment's own name." - added
Input schema / properties / raw_fileAdded value: +{ + "default": null, + "description": "The camera RAW file the user attached (.CR2/.CR3/.NEF/.ARW/.RAF/.ORF/.DNG ...); its file_name selects the decoder.", + "properties": { + "download_url": { + "description": "URL the file can be downloaded from.", + "type": "string" + }, + "file_id": { + "description": "The client's identifier for the file.", + "type": "string" + }, + "file_name": { + "description": "Original file name, when known.", + "type": "string" + }, + "mime_type": { + "description": "MIME type, when known.", + "type": "string" + } + }, + "required": [ + "download_url", + "file_id" + ], + "type": "object" +} - changed
Input schema / properties / raw_filename / descriptionPrevious value: -"Original RAW filename with extension, e.g. IMG_1234.CR3; the extension selects the decoder."New value: +"Original RAW filename with extension, e.g. IMG_1234.CR3; the extension selects the decoder. Defaults to the attachment's own name."
27 tool updates
- Changed
add_portfolio_item2 fields changed- added
Input schema / properties / title / descriptionAdded value: +"Caption for the image, max 80 characters. Empty string clears it." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
add_verification_comment2 fields changed- added
Input schema / properties / body / descriptionAdded value: +"Comment text, 1-4000 characters." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
add_verification_tags2 fields changed- added
Input schema / properties / tags / descriptionAdded value: +"Tag names, 1-40 characters each, no commas. Matching is case-insensitive; unknown names are created." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
create_portfolio4 fields changed- added
Input schema / properties / display_name / descriptionAdded value: +"Name shown on the portfolio page, 1-80 characters." - added
Input schema / properties / slug / descriptionAdded value: +"Public URL path of the portfolio: 3-30 lowercase letters, digits and single hyphens." - added
Input schema / properties / tagline / descriptionAdded value: +"Short line under the name, max 160 characters. Empty string clears it." - added
Input schema / properties / website_url / descriptionAdded value: +"Photographer's website, an https URL of max 200 characters. Empty string clears it."
- Added
create_psd_export - Changed
delete_tag1 field changed- added
Input schema / properties / tag / descriptionAdded value: +"Tag name (case-insensitive) or tag id."
- Changed
delete_verification_comment2 fields changed- added
Input schema / properties / comment_id / descriptionAdded value: +"Comment id as returned by list_verification_comments or add_verification_comment." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
get_listing1 field changed- added
Input schema / properties / listing_id / descriptionAdded value: +"Marketplace listing id (UUID)."
- Changed
get_psd_export_status1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
get_verification1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
get_verification_share1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
list_my_listings5 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Page size, 1-100." - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / descriptionAdded value: +"Number of listings to skip, for paging." - added
Input schema / properties / offset / minimumAdded value: +0
- Changed
list_verification_comments1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
list_verifications11 fields changed- added
Input schema / properties / offset / descriptionAdded value: +"Number of verifications to skip, for paging." - added
Input schema / properties / offset / minimumAdded value: +0 - added
Input schema / properties / result / descriptionAdded value: +"true: only verifications judged authentic; false: only those that were not." - added
Input schema / properties / size / descriptionAdded value: +"Page size, 1-100." - added
Input schema / properties / size / maximumAdded value: +100 - added
Input schema / properties / size / minimumAdded value: +1 - changed
Input schema / properties / status / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "pending", + "queued", + "in_progress", + "completed", + "failed" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / status / descriptionAdded value: +"Only verifications in this processing status." - added
Input schema / properties / tag_match / descriptionAdded value: +"'all': every listed tag must be present; 'any': at least one." - added
Input schema / properties / tag_match / enumAdded value: +[ + "all", + "any" +] - added
Input schema / properties / tags / descriptionAdded value: +"Only verifications carrying these tag names (case-insensitive)."
- Changed
remove_portfolio_item1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
remove_verification_tag2 fields changed- added
Input schema / properties / tag / descriptionAdded value: +"Tag name (case-insensitive) or tag id." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
reorder_portfolio_items1 field changed- added
Input schema / properties / verification_ids / descriptionAdded value: +"Every current item's verification id, in the desired display order."
- Removed
request_psd_export - Changed
set_verification_tags2 fields changed- added
Input schema / properties / tags / descriptionAdded value: +"Tag names, 1-40 characters each, no commas. Matching is case-insensitive; unknown names are created." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
share_verification4 fields changed- added
Input schema / properties / access_type / descriptionAdded value: +"'anyone_with_link' for a public link, 'restricted' for invited email addresses only." - added
Input schema / properties / access_type / enumAdded value: +[ + "anyone_with_link", + "restricted" +] - added
Input schema / properties / invite_emails / descriptionAdded value: +"Email addresses to grant access; used with 'restricted'." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
unshare_verification1 field changed- added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
update_portfolio5 fields changed- added
Input schema / properties / display_name / descriptionAdded value: +"New name, 1-80 characters." - added
Input schema / properties / published / descriptionAdded value: +"true publishes the page, false takes it offline." - added
Input schema / properties / slug / descriptionAdded value: +"New public URL path; see create_portfolio for the rules." - added
Input schema / properties / tagline / descriptionAdded value: +"Short line under the name, max 160 characters. Empty string clears it." - added
Input schema / properties / website_url / descriptionAdded value: +"Photographer's website, an https URL of max 200 characters. Empty string clears it."
- Changed
update_portfolio_item2 fields changed- added
Input schema / properties / title / descriptionAdded value: +"Caption for the image, max 80 characters. Empty string clears it." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
update_tag3 fields changed- added
Input schema / properties / color / descriptionAdded value: +"'#rrggbb' colour. Empty string clears it." - added
Input schema / properties / name / descriptionAdded value: +"New tag name, 1-40 characters, no commas." - added
Input schema / properties / tag / descriptionAdded value: +"Tag name (case-insensitive) or tag id."
- Changed
update_verification_comment3 fields changed- added
Input schema / properties / body / descriptionAdded value: +"Comment text, 1-4000 characters." - added
Input schema / properties / comment_id / descriptionAdded value: +"Comment id as returned by list_verification_comments or add_verification_comment." - added
Input schema / properties / verification_id / descriptionAdded value: +"Verification id (UUID) as returned by verify_photo, verify_content_credentials or list_verifications."
- Changed
verify_content_credentials3 fields changed- added
Input schema / properties / image_base64 / descriptionAdded value: +"The image as base64, for files up to a few MB. For larger files call create_verification_upload and pass image_object_key instead." - added
Input schema / properties / image_filename / descriptionAdded value: +"Original image filename with extension." - added
Input schema / properties / image_object_key / descriptionAdded value: +"Object key returned by create_verification_upload for the image."
- Changed
verify_photo6 fields changed- added
Input schema / properties / image_base64 / descriptionAdded value: +"The JPEG export of the same shot as base64; pairs with raw_base64." - added
Input schema / properties / image_filename / descriptionAdded value: +"Original JPEG filename with extension." - added
Input schema / properties / image_object_key / descriptionAdded value: +"Object key returned by create_verification_upload for the JPEG." - added
Input schema / properties / raw_base64 / descriptionAdded value: +"The camera RAW file as base64, for files up to a few MB. For larger files call create_verification_upload and pass raw_object_key instead." - added
Input schema / properties / raw_filename / descriptionAdded value: +"Original RAW filename with extension, e.g. IMG_1234.CR3; the extension selects the decoder." - added
Input schema / properties / raw_object_key / descriptionAdded value: +"Object key returned by create_verification_upload for the RAW file."
20 tool updates
- Added
add_portfolio_item - Added
add_verification_comment - Added
add_verification_tags - Added
create_portfolio - Added
delete_portfolio - Added
delete_tag - Added
delete_verification_comment - Added
get_portfolio - Added
get_upgrade_link - Added
list_verification_comments - Added
remove_portfolio_item - Added
remove_verification_tag - Added
reorder_portfolio_items - Added
set_verification_tags - Added
update_portfolio - Added
update_portfolio_item - Added
update_tag - Added
update_verification_comment - Changed
verify_content_credentials1 field changed- removed
Input schema / properties / anonymous_user_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Anonymous User Id" -}
- Changed
verify_photo1 field changed- removed
Input schema / properties / anonymous_user_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Anonymous User Id" -}
2 tool updates
- Added
list_tags - Changed
list_verifications2 fields changed- added
Input schema / properties / tag_matchAdded value: +{ + "default": "all", + "title": "Tag Match", + "type": "string" +} - added
Input schema / properties / tagsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tags" +}
2 tool updates
- Added
get_psd_export_status - Added
request_psd_export
11 tool updates
- First observed
create_verification_upload - First observed
get_account_usage - First observed
get_listing - First observed
get_verification - First observed
get_verification_share - First observed
list_my_listings - First observed
list_verifications - First observed
share_verification - First observed
unshare_verification - First observed
verify_content_credentials - First observed
verify_photo
Related MCP Connectors
Inspect and remove C2PA content credentials from AI-generated images, video and audio. Free, no key.
Free C2PA 2.4 triage and reproducible official trust snapshot. No media, keys, or payment.
Image risk scoring, EXIF, reverse-image backlinks, and image content detection via PicDefense.io.
Inspection, steganography and forensics API for files and images. Bitcoin pay-per-use.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables reading and verifying C2PA Content Credentials from images and videos through both embedded manifests and invisible watermarks. Supports direct filesystem access, URL checking, and provides structured provenance data including creator identity, AI generation info, and content authenticity.2MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI content watermarking and C2PA compliance for EU AI Act Article 50, enabling detection, verification, and batch processing of authenticated content.1 npm30 PyPIMIT
- AlicenseAqualityAmaintenanceVerifies C2PA Content Credentials for local files or URLs and returns an LLM-ready verdict on trust, AI generation, and provenance.4282 npm1Apache 2.0
- AlicenseAqualityBmaintenanceProvides MCP-compatible AI agents with a verify_image tool to check a photo's capture time and provenance using C2PA, EXIF, XMP metadata, and pixel forensics, returning a verdict and confidence score.132 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.