# alttext-mcp

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/alttextai/alttext-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/alttext-mcp

## Description
Generate alt text, translate descriptions, and manage your AltText.ai image library.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "alttext-mcp": {
    "command": "npx",
    "args": ["-y","alttext-mcp"]
  }
}
```

## Documentation & README

# AltText.ai MCP Server

An [MCP](https://modelcontextprotocol.io/) server that lets AI assistants generate alt text, manage image libraries, and queue alt text generation for web page images using the [AltText.ai](https://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`](https://www.npmjs.com/package/@alttext_ai/alttext-mcp) |
| Source repository | [`github.com/alttextai/alttext-mcp`](https://github.com/alttextai/alttext-mcp) |
| Publisher | AltText.ai |
| Provenance | Published from this repo's CI with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) — 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:

```sh
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:

```json
"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.

## Setup

**Requirements:** Node.js 22+ and an [AltText.ai API key](https://alttext.ai/account/api)

Add the server to your MCP client configuration:

```json
{
  "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
- "How many credits do I have left?"
- "Update my webhook URL to https://example.com/webhook"

### 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](https://alttext.ai/account/api) |
| `ALTTEXT_API_BASE_URL` | No | Override the API base URL (default: `https://alttext.ai/api/v1`) |

## Development

```sh
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](https://github.com/alttextai/alttext-mcp/blob/HEAD/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.

