Skip to main content
Glama

AltText.ai MCP Server

An MCP server that lets AI assistants generate alt text, manage image libraries, and queue alt text generation for web page images using the AltText.ai API.

Works with Claude Desktop, Claude Code, Cursor, Windsurf, and any MCP-compatible client.

Verify this package

This server runs npx -y @alttext_ai/alttext-mcp, which downloads and executes code with your API key in its environment. That's worth a moment of verification before you install — by you or by an AI agent doing the setup. Everything below should match:

Signal

Value

npm package

@alttext_ai/alttext-mcp

Source repository

github.com/alttextai/alttext-mcp

Publisher

AltText.ai

Provenance

Published from this repo's CI with npm provenance — npm shows a verified build badge linking the package to this exact commit

The npm scope is @alttext_ai (with an underscore), while the GitHub org is alttextai (no underscore). This is intentional, not a typosquat: the @alttextai npm scope was already taken, so we publish under @alttext_ai. The two names refer to the same official AltText.ai package.

To cryptographically verify the published package was built by this repo's CI — not just trust the metadata — run:

npm audit signatures

from a project where the package is installed. This validates the registry signature and the npm provenance attestation, which links the tarball to a specific commit and GitHub Actions build. A counterfeit package can forge repository.url and other metadata, but it cannot forge the provenance attestation — so this is the check that actually matters.

(For a quick, weaker cross-reference of the claimed source you can run npm view @alttext_ai/alttext-mcp repository.url, but note that field is publisher-controlled metadata and proves nothing on its own.)

Pinning a version

The setup snippet uses npx -y @alttext_ai/alttext-mcp, which always resolves to the latest published version and re-runs it on every launch. That keeps you current, but it also means a future release runs automatically without review. If you want a reproducible, audited install, pin a specific version:

"args": ["-y", "@alttext_ai/alttext-mcp@1.0.5"]

Run npm audit signatures against the pinned version, and bump it deliberately when you're ready to take a new release.

Related MCP server: aria51 MCP Server

Setup

Requirements: Node.js 22+ and an AltText.ai API key

Add the server to your MCP client configuration:

{
  "mcpServers": {
    "alttext-ai": {
      "command": "npx",
      "args": ["-y", "@alttext_ai/alttext-mcp"],
      "env": {
        "ALTTEXT_API_KEY": "your-api-key"
      }
    }
  }
}

Where to add this:

Client

Config file

Claude Desktop

claude_desktop_config.json

Claude Code

.mcp.json in your project root

Cursor

MCP settings in the Cursor preferences

Windsurf

MCP settings in the Windsurf preferences

Tools

Account Management

Tool

Description

get_account

Check your credit balance, usage, and account settings.

update_account

Update account name, webhook URL, or notification email.

Generate Alt Text

Tool

Description

generate_alt_text

Generate alt text for an image URL. Supports multilingual output, custom prompts, keywords, and character limits. Uses account credits.

generate_alt_text_from_file

Generate alt text from a local image file. Automatically base64-encodes and uploads. Uses account credits.

translate_image

Add alt text in a new language for an existing image (by asset_id). Uses account credits.

Manage Image Library

Tool

Description

list_images

List images in your library with pagination.

search_images

Search your image library by alt text content.

get_image

Get details for a specific image by asset ID.

update_image

Update alt text, tags, or metadata for an image.

delete_image

Delete an image from your library.

Bulk Operations

Tool

Description

bulk_create

Bulk generate alt text from a CSV file with image URLs and optional metadata.

scrape_page

Scan a web page, find images missing alt text, and queue generation. Results are async -- use list_images to check progress.

Effects and processing

This package uses stdio and runs on the machine launching the MCP client. Image and CSV paths refer to that machine; selected file contents are uploaded to AltText.ai.

Generation and translation use your account credits. Additional languages and image conversion can increase the total. Check get_account before paid work. Generation can overwrite existing alt text when requested; updates replace supplied fields and deletion removes the image from the library.

CSV imports and page scraping queue background processing. An accepted request does not mean generation has finished; inspect the image library and any configured completion notifications. Tool annotations describe effects for clients; they do not enforce confirmation.

Example Prompts

Once configured, just ask your AI assistant:

Account & Credits

Generate Alt Text

  • "Generate alt text for https://example.com/photo.jpg"

  • "Generate alt text for this image" (with local file)

  • "Generate alt text in French and Spanish for this image"

  • "Translate image abc123 to German"

Manage Library

  • "Search my images for 'product photo'"

  • "List my images"

  • "Get details for image abc123"

  • "Update the alt text for asset abc123"

  • "Delete image xyz789"

Bulk Operations

  • "Generate alt text for images missing it on https://example.com"

  • "Process this CSV file of image URLs" (bulk_create)

Environment Variables

Variable

Required

Description

ALTTEXT_API_KEY

Yes

Your AltText.ai API key

ALTTEXT_API_BASE_URL

No

Override the API base URL (default: https://alttext.ai/api/v1)

Development

npm install
npm run build
npm test
npm run lint

Tests use mocked fetch calls -- no API key or network access needed.

Hosted deployments must rate-limit POST /register at a trusted edge using the verified client address. The Node service deliberately ignores forwarded client-address headers because accepting them without an authenticated proxy boundary would let callers spoof the rate-limit identity.

The production container and required settings are documented in docs/deployment.md.

License

MIT

Registry publishing

server.json describes the stdio npm package. Its name matches mcpName in package.json; both versions must match the release being submitted. Publish and verify that exact npm version before running mcp-publisher publish. Registry acceptance and directory approval are separate from an npm release.

Available Tools

12 tools
bulk_createBulk CreateA
Destructive

Upload a local CSV file from the MCP server machine and queue asynchronous alt-text generation using account credits. The response does not confirm generation completion. CSV should have columns: url (required), asset_id, lang, keywords, tags, metadata (optional).

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoEmail for completion notification
csv_fileYesPath to CSV file with image URLs and optional metadata

TDQS

A4.7/5.0
Behavior5/5

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

Adds significant behavioral context beyond annotations: the response does not confirm generation completion, the operation is asynchronous, and it consumes account credits. Also clarifies the CSV file must exist on the MCP server machine. Consistent with destructiveHint=true and readOnlyHint=false.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core operation, the second warns about the async response behavior, and the third specifies the CSV format. No fluff, front-loaded with the main action.

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

Completeness4/5

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

Complete for a bulk async tool with a 2-param schema and annotations covering safety. The only gap is that no output schema exists and the description does not indicate what the response actually contains (e.g., a request ID) beyond stating it does not confirm completion. Minor, given the async nature.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds essential semantics not present in the schema: the exact CSV column structure (url required; asset_id, lang, keywords, tags, metadata optional). This goes beyond the schema's generic 'Path to CSV file with image URLs and optional metadata' and is critical for correct invocation.

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

Purpose5/5

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

States a specific action (upload local CSV, queue async alt-text generation) with a clear resource (CSV file) and scope (bulk, uses account credits). It distinguishes itself from siblings like generate_alt_text and generate_alt_text_from_file by emphasizing the bulk, asynchronous, local-file nature.

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

Usage Guidelines4/5

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

Provides clear context for when to use the tool: when you have a local CSV on the MCP server machine and want asynchronous bulk generation. However, it does not explicitly name alternatives or state exclusions, leaving the agent to infer the distinction from the surrounding text.

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

delete_imageDelete ImageA
DestructiveIdempotent

Delete an image from your AltText.ai library

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idYesThe asset ID of the image to delete

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates state. The description adds the library scope and confirms deletion, but does not go beyond annotations to disclose side effects or irreversibility. Since annotations carry the safety profile, a mid score is appropriate.

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

Conciseness5/5

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

One short sentence that leads with the verb and object and contains no filler. It is appropriately minimal for a simple delete operation.

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

Completeness5/5

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

For a one-parameter destructive tool with rich annotations (destructive, idempotent) and a fully documented schema, the description is sufficient for an agent to invoke the tool correctly. No output schema exists, but the description need not explain return values given the simplicity of the action.

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

Parameters3/5

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

The input schema fully describes asset_id as 'The asset ID of the image to delete' (100% coverage), so the description need not restate it. The description adds no parameter-level meaning beyond the schema, earning the baseline score of 3.

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

Purpose5/5

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

The description uses a specific verb ('delete') and a specific resource ('an image from your AltText.ai library'), making the operation unambiguous. It clearly distinguishes this from sibling operations like update_image or list_images by naming the exact action and scope.

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

Usage Guidelines4/5

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

The description makes the intended use obvious: call this when an image should be removed from the AltText.ai library. It does not explicitly name alternatives or exclusions, but for a single-purpose destructive action against siblings like update_image, the context is clear enough.

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

generate_alt_textGenerate Alt TextA
Destructive

Generate AI-powered alt text for an image URL. Returns the result synchronously (may take a few seconds). Uses account credits; additional languages and image conversion can increase the total. Can overwrite existing alt text when requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic URL of the image
langNoComma-separated language codes (e.g. 'en', 'en,fr,es')
tagsNoTags for organization
asset_idNoCustom asset ID (default: auto-generated hash)
keywordsNoKeywords to incorporate
metadataNoCustom metadata (string key-value pairs)
max_charsNoMaximum character length for the alt text
overwriteNoOverwrite existing alt text if image was previously processed
gpt_promptNoCustom prompt template. Use {{AltText}} as a placeholder for the generated alt text.
negative_keywordsNoKeywords to avoid

TDQS

A3.9/5.0
Behavior4/5

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

It discloses non-obvious behavior beyond the annotations: synchronous result with a few seconds latency, account-credit usage, cost increase for languages/conversion, and conditional overwrite of existing alt text. This complements the destructiveHint/readOnlyHint annotations without contradicting them.

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

Conciseness5/5

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

Three short sentences with no filler; the primary action is front-loaded and each subsequent sentence adds a distinct piece of behavioral or billing context. Very efficient.

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

Completeness3/5

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

For a 10-parameter, no-output-schema tool, the description covers the important high-level behaviors (latency, cost, overwrite), but it does not describe the shape or content of the returned result beyond 'the result.' It also introduces 'image conversion' without tying it to a listed parameter, leaving some ambiguity.

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

Parameters3/5

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

Schema coverage is 100%, so the descriptions of all 10 parameters already carry most meaning. The tool description adds only a couple of value-added links (language selection affects credits; overwrite only happens when requested), which is useful but not a major contribution beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Generate AI-powered alt text for an image URL'), and the URL input distinguishes it from the sibling generate_alt_text_from_file. The purpose is unambiguous and not a restatement of the name.

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

Usage Guidelines3/5

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

The description gives useful context for deciding to call it—synchronous latency, credit consumption, and optional overwrite—but it never explicitly states when to choose this tool over generate_alt_text_from_file or mentions alternatives. The URL qualifier implies the intended input, so usage is inferable but not spelled out.

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

generate_alt_text_from_fileGenerate Alt Text from FileA
Destructive

Generate alt text from a local image file. Reads a file on the MCP server machine and uploads it to AltText.ai. Uses account credits; additional languages and image conversion can increase the total. Can overwrite existing alt text when requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoComma-separated language codes (e.g. 'en', 'en,fr,es')
tagsNoTags for organization
asset_idNoCustom asset ID (default: auto-generated hash)
keywordsNoKeywords to incorporate
metadataNoCustom metadata (string key-value pairs)
file_pathYesAbsolute path to a local image file
max_charsNoMaximum character length for the alt text
overwriteNoOverwrite existing alt text if image was previously processed
gpt_promptNoCustom prompt template. Use {{AltText}} as a placeholder for the generated alt text.
negative_keywordsNoKeywords to avoid

TDQS

A4/5.0
Behavior4/5

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

Annotations already signal destructiveness and non-read-only, and the description adds genuinely useful context: local file system reads, the external AltText.ai upload, account credit consumption, and cost increases from extra languages and image conversion. The overwrite caveat ('when requested') aligns coherently with destructiveHint=true, with no contradiction.

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

Conciseness5/5

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

Four sentences, each carrying distinct operational information, with the core purpose front-loaded in the first sentence. There is no filler, no repetition of schema content, and each clause — local file access, upload target, credit cost, overwrite behavior — earns its place.

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

Completeness4/5

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

For a 10-parameter tool with a nested object and external side effects, the description covers the key operational facts: server-side file access, upload destination, cost implications, and overwrite behavior. It does not describe the return value, which is a moderate gap given no output schema exists, but the fully documented parameters keep it functional.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies — all 10 parameters are already documented in the schema. The description adds a small amount of meaning by tying the lang parameter to increased credit usage, but nothing else beyond what the schema provides.

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

Purpose5/5

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

Opens with a specific verb and resource: 'Generate alt text from a local image file,' then clarifies the mechanism: 'Reads a file on the MCP server machine and uploads it to AltText.ai.' This clearly distinguishes it from the sibling generate_alt_text, which is the main confusion risk, by grounding it in local file input.

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

Usage Guidelines3/5

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

The description implies its niche — local files on the server machine — but never explicitly states when to prefer it over the sibling generate_alt_text or any other alternative. No when-not-to-use guidance or exclusion criteria is given, leaving the agent to infer routing.

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

get_accountGet AccountA
Read-onlyIdempotent

Get your AltText.ai account info including credit balance, usage, and settings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already cover the read-only, idempotent, non-destructive nature, so the description does not need to repeat that. It adds useful context by saying 'your' account and naming the returned categories, but it does not discuss auth expectations, rate limits, or output format. No contradiction with annotations exists.

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

Conciseness5/5

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

A single, compact sentence that front-loads the resource and then lists the included information. Every word contributes meaning, with no repetition, filler, or ambiguity.

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

Completeness5/5

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

For a zero-parameter read-only account tool, this description is complete. Annotations define the operational safety profile, and the description enumerates the relevant returned information since no output schema exists. Nothing critical is missing.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so parameter documentation is a non-issue. The description's 'your account' wording usefully signals that the account is determined by the authenticated caller rather than an explicit parameter.

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

Purpose5/5

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

The description clearly states a specific verb ('Get') and resource ('your AltText.ai account info'), then adds what is included: credit balance, usage, and settings. This is unambiguous and naturally separates it from siblings like update_account, which implies modification, and the image-related tools.

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

Usage Guidelines2/5

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

The description provides no explicit when-to-use guidance, exclusions, or alternatives. It does not mention update_account or explain when retrieving account info is preferable to modifying it; usage context is only implied by the tool's name and purpose.

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

get_imageGet ImageA
Read-onlyIdempotent

Get details for a specific image by its asset ID

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoFilter alt texts by language code
asset_idYesThe asset ID of the image

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds little beyond 'get details,' with no mention of response format, language filtering behavior, or potential edge cases.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. It communicates the operation, the resource, and the required identifier efficiently.

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

Completeness4/5

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

For a simple retrieval tool with strong annotations and complete schema descriptions, the description is sufficient for correct invocation. It could be more explicit about what 'details' includes, especially given the absence of an output schema, but this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well documented. The description repeats the asset_id concept but does not add meaning beyond the schema for either parameter.

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

Purpose5/5

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

The description uses a specific verb ('Get details') with a clear resource ('specific image') and the key identifier ('asset ID'). It is easily distinguishable from sibling tools like list_images, search_images, update_image, and delete_image.

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

Usage Guidelines4/5

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

The phrase 'by its asset ID' clearly indicates the tool is for retrieving a single known image, not for listing or searching. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full routing guidance.

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

list_imagesList ImagesB
Read-onlyIdempotent

List images in your AltText.ai library with pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFilter images by exact URL match
langNoFilter alt texts by language code
pageNoPage number (default: 1)
sortNoSort column (default: id)
limitNoItems per page (default: 20, max: 100)
directionNoSort direction (default: DESC)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the description need not repeat safety. It does add 'with pagination,' but this is already implied by the page and limit schema fields. No additional behavioral context (e.g., return format, ordering defaults) is disclosed 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.

Conciseness5/5

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

The description is a single, front-loaded sentence that states the core purpose without any filler. It is appropriately sized for a simple listing operation, and every word contributes to the meaning.

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

Completeness4/5

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

For a straightforward listing tool with comprehensive annotations and full schema coverage, the description is mostly sufficient. The main gap is the lack of disambiguation between list_images and search_images, and no explicit mention of the return format (though no output schema exists). Overall, the definition is adequate.

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

Parameters3/5

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

Schema coverage is 100% with descriptive entries for all six parameters (url, lang, page, sort, limit, direction). The description itself adds no parameter-level detail, but the schema already provides adequate meaning, 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.

Purpose4/5

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

The description clearly states the tool lists images in the AltText.ai library, providing a specific verb and resource. However, it does not differentiate from sibling tools like search_images, leaving some ambiguity about the exact scope (list all vs. list filtered).

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives such as search_images, get_image, or filter by URL. There are no explicit use-case conditions or exclusions, leaving the agent to infer when a plain list is appropriate.

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

scrape_pageScrape PageA
Destructive

Find images on a web page and queue alt-text generation jobs. Uses account credits. Images are processed asynchronously; inspect the image library for results.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the web page to scrape
htmlNoOptional HTML override (if omitted, server fetches the page)
langNoComma-separated language codes (e.g. 'en', 'en,fr,es')
keywordsNoKeywords to incorporate
max_charsNoMaximum character length for the alt text
gpt_promptNoCustom prompt template. Use {{AltText}} as a placeholder for the generated alt text.
include_existingNoInclude images that already have alt text
negative_keywordsNoKeywords to avoid

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag that this is not read-only and is destructive, but the description adds crucial operational context: it consumes account credits, processes asynchronously, and requires inspecting the image library for results. This goes beyond the schema and annotations without contradicting them.

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

Conciseness5/5

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

Three short sentences, with the core purpose first, then cost, then async behavior. 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.

Completeness4/5

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

For a tool with eight parameters and no output schema, the description gives the essential workflow: result location, async nature, and cost. It does not cover edge cases or detailed return structure, but the schema and annotations cover the rest.

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

Parameters3/5

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

All eight parameters have schema descriptions, so the description carries little parameter burden. It adds no parameter-level details beyond the schema, but none are missing enough to lower the score.

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

Purpose5/5

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

The description names a concrete action and resource: 'Find images on a web page' and 'queue alt-text generation jobs'. This clearly separates it from direct-generation siblings such as generate_alt_text or generate_alt_text_from_file.

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

Usage Guidelines3/5

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

It implies the intended use case (web page as source, asynchronous job queue) and notes results appear in the image library. However, it never explicitly names alternatives or states when not to use this tool, so routing guidance 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.

search_imagesSearch ImagesA
Read-onlyIdempotent

Search images by alt text content

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoFilter by language code
limitNoMax results to return (default: 20)
queryYesSearch query to match against alt text

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the behavioral detail that matching is against alt text, which is useful context. However, it does not disclose any edge behaviors like case sensitivity, wildcard matching, or what happens when alt text is missing—minor given the annotations.

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

Conciseness5/5

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

A single sentence that states the operation and its key constraint with zero filler. The most important qualifier ('by alt text content') is front-loaded, so an agent scanning the description immediately knows the tool's scope.

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

Completeness4/5

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

For a read-only search tool, the description plus fully documented schema and safety annotations cover the essentials: what it searches, the filter parameters, and the safe read-only behavior. It does not describe return format, but no output schema exists and search tools are common enough that this is not a critical gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents query, lang, and limit. The description essentially restates the query field's purpose ('alt text content') without adding extra semantics such as default ordering or how lang filtering interacts with alt text. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('search') with a clear resource ('images') and a defining qualifier ('by alt text content'). This distinguishes it from siblings like list_images (which would list without searching) and get_image (which fetches a single image), so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines3/5

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

The description implies when to use the tool—when the agent needs to find images by alt text—but provides no explicit guidance about when not to use it or which sibling to prefer (e.g., list_images vs search_images). Usage is inferable but not stated.

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

translate_imageTranslate ImageA

Add alt text in a new language for an existing image. Uses the asset_id to find the image and generates a translation. Uses account credits for each newly generated language.

ParametersJSON Schema
NameRequiredDescriptionDefault
langYesTarget language code(s), comma-separated (e.g. 'de', 'fr,es')
asset_idYesThe asset ID of the existing image to translate

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag readOnlyHint=false and idempotentHint=false. The description adds the meaningful side effect of consuming account credits per language, which is beyond what annotations capture. It also implies a generation process that may have latency. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences with zero filler. The primary action is front-loaded, and the credit cost is stated concisely. Efficient and well-structured.

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

Completeness4/5

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

For a simple two-parameter tool with full schema coverage and annotations indicating mutation and non-idempotency, the description covers the essential purpose, cost, and mechanism. It lacks mention of return format or latency, but those are not critical for correct invocation given the context signals.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are well-documented in the schema. The description reinforces the role of asset_id in locating the image but adds no new semantic detail about lang beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Add') and resource ('alt text in a new language for an existing image'), with the asset_id mechanism. It clearly differentiates from generate_alt_text by emphasizing translation of existing alt text, so an agent can infer the right tool without ambiguity.

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

Usage Guidelines3/5

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

It provides clear context (uses asset_id, generates translation, consumes credits) but does not explicitly state when to use this versus generate_alt_text or when not to use it. No exclusions are given, so the agent must infer the boundary from the purpose statement.

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

update_accountUpdate AccountA
DestructiveIdempotent

Update your AltText.ai account settings (name, webhook URL, notification email)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAccount name
webhook_urlNoWebhook URL for processing notifications
notification_emailNoEmail address for notifications

TDQS

A4/5.0
Behavior3/5

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

Annotations already communicate that this is a mutating, destructive, idempotent operation. The description adds scoping by listing the three settings affected, but it does not clarify partial-update behavior, replacement semantics, or consequences beyond the annotation flags. It does not contradict the annotations.

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

Conciseness5/5

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

A single front-loaded sentence immediately states the action, resource, and affected fields. There is no filler or redundant phrasing.

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

Completeness4/5

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

For a simple optional-field account update, the description combined with schema and annotations is sufficient for an agent to understand why and how to invoke it. The only notable omission is explicit confirmation of partial-update semantics and the response shape.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter already well documented. The description merely repeats the field names and adds no format, constraint, or usage nuance beyond what the schema provides.

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

Purpose5/5

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

The verb 'Update' targets a specific resource, 'AltText.ai account settings', and enumerates the exact fields affected (name, webhook URL, notification email). This clearly distinguishes it from sibling tools like get_account and update_image.

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

Usage Guidelines4/5

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

It clearly identifies the tool as the one for modifying account-level settings rather than images or generation tasks. It does not explicitly name alternatives or state when not to use it, but the context is plain and unambiguous.

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

update_imageUpdate ImageA
DestructiveIdempotent

Update alt text and/or metadata for an existing image

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage code for the alt text (default: 'en')
tagsNoReplace tags
alt_textNoNew alt text value
asset_idYesThe asset ID of the image to update
metadataNoReplace metadata (string key-value pairs)
overwriteNoIf false, skip language entries that already exist

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already carry destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety and mutation profile is established outside the description. The description itself adds no behavioral detail such as replacement semantics, overwrite behavior, or side effects, but it does not contradict the annotations either.

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

Conciseness5/5

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

The description is a single sentence with no filler, front-loads the primary action, and conveys the core purpose quickly. It is appropriately sized for a straightforward update operation.

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

Completeness3/5

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

Given the annotations and fully documented schema, an agent has enough structured information to call the tool correctly. However, the description itself is thin: it does not discuss return behavior, destructive replacement semantics, or relationships to sibling tools, so the surrounding context is only partially complete.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains each parameter, including 'Replace tags' and 'Replace metadata'. The description adds no extra parameter meaning beyond naming alt text and metadata, and it omits tags entirely, so it provides no value beyond the structured schema.

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

Purpose4/5

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

The description clearly identifies the action ('update') and resource ('existing image'), and names the main fields ('alt text and/or metadata'). However, the schema also supports updating tags and language/overwrite behavior, so the description undersells the full scope and does not fully distinguish it from sibling tools like generate_alt_text or translate_image.

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

Usage Guidelines3/5

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

The phrase 'for an existing image' implies the tool modifies previously created assets rather than creating new ones, providing some usage context. Still, it gives no explicit guidance about when to choose this tool over siblings such as generate_alt_text, translate_image, or delete_image, and no exclusions are stated.

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. 2 tool updatesv1.0.5
    • Changedbulk_create1 field changed
      • changedInput schema / properties / email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changedupdate_account1 field changed
      • changedInput schema / properties / notification_email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
  2. 12 tool updatesv1.0.4
    • First observedbulk_create
    • First observeddelete_image
    • First observedgenerate_alt_text
    • First observedgenerate_alt_text_from_file
    • First observedget_account
    • First observedget_image
    • First observedlist_images
    • First observedscrape_page
    • First observedsearch_images
    • First observedtranslate_image
    • First observedupdate_account
    • First observedupdate_image

TDQS

A4/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource and action: account management, single-image generation by URL/file, translation, image library CRUD, and batch/scrape enqueueing. The potentially similar generation tools are clearly separated by input type and sync/async behavior.

Naming Consistency5/5

All tool names use lowercase snake_case and generally follow a verb_noun pattern (get_account, list_images, delete_image). Longer names like generate_alt_text_from_file and bulk_create remain predictable and readable.

Tool Count5/5

Twelve tools is well-scoped for an alt-text generation service covering account settings, image library operations, single generation, translation, and batch workflows. Every tool maps to a meaningful operation without redundancy.

Completeness4/5

The surface covers account management, CRUD for images, and multiple generation paths (URL, file, translation, CSV batch, web scraping). The main gap is the lack of an explicit async job status tool; bulk_create and scrape_page require inspecting the image library to confirm completion.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers