Skip to main content
Glama

@glassypic/mcp-server

npm version License: MIT MCP

MCP server for GlassyPic. One tool that turns raw images into production-ready assets: upscaling, resizing and cropping, compression, file format conversion, and SEO filename and alt text generation. Describe the outcome you want in natural language.

Quick Start

Add to your MCP client config:

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}

No signup required. Works out of the box with 20 free daily credits.

Windows users: If the server doesn't appear after editing a JSON config, your client likely can't resolve npx from PATH (a common, silent failure). Wrap the command with cmd /c:

{
  "mcpServers": {
    "glassypic": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "@glassypic/mcp-server@latest"]
    }
  }
}

This applies to the hand-edited JSON configs below (Claude Desktop, Cursor, Windsurf, Cline). The CLI commands (Claude Code, Gemini CLI, Codex CLI) are unaffected.

Client-Specific Setup

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}
claude mcp add glassypic -- npx -y @glassypic/mcp-server@latest

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}

Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}

Open Cline settings → MCP Servers → Add, then paste:

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}
gemini mcp add --transport stdio glassypic npx -y @glassypic/mcp-server@latest

Or edit ~/.gemini/settings.json (global) or .gemini/settings.json in your project root:

{
  "mcpServers": {
    "glassypic": {
      "command": "npx",
      "args": ["-y", "@glassypic/mcp-server@latest"]
    }
  }
}

Verify it's running inside Gemini CLI with /mcp list.

codex mcp add glassypic -- npx -y @glassypic/mcp-server@latest

Or edit ~/.codex/config.toml manually:

[mcp_servers.glassypic]
command = "npx"
args = ["-y", "@glassypic/mcp-server@latest"]

Related MCP server: pruna-mcp-server

Tool: optimize_image

One tool that turns a supplied image into a production-ready asset through a fixed server-side pipeline (typically 60-80% size reduction), with optional resize, upscale, format conversion, and SEO metadata generation. Inputs include JPEG, PNG, WebP, AVIF, GIF, SVG, ICO, HEIC, TIFF, and BMP. Outputs are JPEG, PNG, WebP, AVIF, GIF, SVG, and ICO. Accepts absolute local file paths or remote URLs.

Parameters

Parameter

Type

Required

Default

Description

input

string

Yes

—

Absolute local file path or remote URL

output_path

string

No

auto

File path or directory (ending in /). If omitted: saves next to the original, using the SEO slug when one is generated, otherwise a .polished suffix

output_format

string

No

original

jpg, png, webp, avif, gif, svg, ico, or original

output_width_px

int

No

—

Target width in pixels

output_height_px

int

No

—

Target height in pixels

output_upscale_factor

int

No

—

AI upscale factor: 2 (2×) or 4 (4×)

output_resize_behavior

string

No

pad

pad (white padding) or crop (smart crop). Only used when both width and height are set

output_seo_tag_gen

bool

No

true

Generate SEO metadata and rename file to SEO slug. Costs 1 extra credit

output_file_size_limit

int

No

—

Target maximum output file size in bytes. Server attempts to meet this via additional compression. Not guaranteed

gif_frame_limit

int

No

100

Max frames to process for animated GIFs (1–100). Reduces credit cost by sampling fewer frames

confirm_gif_cost

bool

No

—

Set to true to proceed after reviewing the animated GIF cost warning. Required for animated GIFs

Resize Behavior

Dimensions provided

Behavior

output_resize_behavior

Width only

Proportional scale

N/A

Height only

Proportional scale

N/A

Width + Height

Exact dimensions, white padding

pad (default)

Width + Height

Exact dimensions, smart crop

crop

Examples

Basic compression — just compress, keep format and dimensions:

{ "input": "/Users/me/photos/hero.png" }

Convert to WebP:

{ "input": "/Users/me/hero.png", "output_format": "webp" }

Resize proportionally — set one dimension, the other scales:

{ "input": "/Users/me/hero.png", "output_width_px": 1200 }

Exact dimensions with padding — white bars fill the gap:

{ "input": "/Users/me/hero.png", "output_width_px": 1080, "output_height_px": 1080 }

Exact dimensions with smart crop:

{ "input": "/Users/me/hero.png", "output_width_px": 1080, "output_height_px": 1080, "output_resize_behavior": "crop" }

AI upscale 4x:

{ "input": "/Users/me/icon.png", "output_upscale_factor": 4 }

From URL, save to directory:

{ "input": "https://example.com/photo.jpg", "output_path": "/Users/me/assets/" }

Skip SEO to save 1 credit:

{ "input": "/Users/me/hero.png", "output_seo_tag_gen": false }

Output

Returns a text summary and structured metadata:

Optimized: /Users/me/photos/modern-office-workspace.webp
Size: 142.3 KB
Compression: 73%
Format: webp
Dimensions: 1920x1080
Alt text: Modern office workspace with laptop and coffee cup on wooden desk

Structured output fields:

{
  "output_path": "/Users/me/photos/modern-office-workspace.webp",
  "output_size_bytes": 145715,
  "output_width_px": 1920,
  "output_height_px": 1080,
  "output_format": "webp",
  "compression_ratio": 0.27,
  "seo_alt_text": "Modern office workspace with laptop and coffee cup on wooden desk",
  "seo_keywords": ["office", "workspace", "laptop", "desk", "modern"],
  "seo_filename": "modern-office-workspace"
}

Supported Formats

Format

Input

Output

Notes

JPG

Yes

Yes

PNG

Yes

Yes

WebP

Yes

Yes

AVIF

Yes

Yes

GIF

Yes

Yes

Animated GIFs preserved when output is GIF

SVG

Yes

Yes

SVG→SVG optimized via SVGO; raster↔SVG conversion supported

ICO

Yes

Yes

Smart rebuild: generates 16, 24, 32, 48, 256px favicon set

HEIC/HEIF

Yes*

No

Auto-converted to JPG at upload

TIFF

Yes*

No

Auto-converted to JPG at upload

BMP

Yes*

No

Auto-converted to JPG at upload

GlassyPic supports high-quality conversion between any input and output format combination. Converting an animated GIF to a non-GIF format (JPG, PNG, WebP, AVIF) preserves only the first frame. Converting an animated GIF to a GIF format supports upscaling/resizing while preserving the animation and quality. You may also reduce animated GIF file size by decreasing the number of output frames.

Max upload file size: 50 MB.

SVG & ICO Examples

# Optimize an SVG file (keeps as vector)
Optimize logo.svg and keep it as SVG

# Convert SVG to raster
Convert icon.svg to a 512x512 PNG

# Trace raster to vector SVG
Convert my logo.png to a vector SVG

# Generate favicon set from any image
Convert logo.png to an ICO favicon

# Generate single-size ICO
Convert logo.png to a 32x32 ICO

# Extract largest icon from ICO
Convert favicon.ico to PNG

How It Works

Local file or URL
  → Upload to GlassyPic API
    → Optional AI upscale (explicit, or automatic when a resize target exceeds the source by more than 1.2×)
    → Optional resize
    → Compression
    → Optional SEO metadata
  → Download optimized file
    → Save with the SEO filename slug, or a `.polished` suffix when SEO is off or returns no slug

All processing happens server-side via the GlassyPic API. The MCP server is a thin client that orchestrates the pipeline.

Credits

Guests can use the tool with no signup. Logging in links your GlassyPic account and shares its credits with the web app. Allowances differ by plan and change over time: run the status tool for your live balance, or see glassypic.com/pricing for plans. A default run (compress + SEO tags) costs 4 credits per image.

Session data is stored locally at ~/.glassypic/session.json and persists across invocations.

Automatic upscaling

When a resize target exceeds the source image by more than 1.2×, GlassyPic automatically runs an AI upscale before resizing, so enlargements ship sharp instead of blurred. This happens without output_upscale_factor being set and adds 2 credits.

A resize-only call therefore costs the same as a full pipeline when the source is smaller than the target:

Call

Credits

Compress only, no SEO tags

3

Compress + SEO tags (defaults)

4

Resize down + SEO tags

5

Resize up past 1.2× + SEO tags

7

Compress + resize + explicit upscale + tags

7

SVG or ICO output

1 (flat, overrides the above)

Animated GIFs are billed per frame — see the confirm_gif_cost parameter.

Account & Credits

Log in to unlock more credits and share them across the web app and MCP server:

Use the login tool to sign in.
Use the status tool to check your current credits.
Use the upgrade tool to open the pricing page.
Use the logout tool to sign out.

login

Opens a browser window to complete login (Google, Facebook, or email/magic link). After approval, your account is linked and credits are shared with the web app.

Login complete: user@example.com (Pro tier, 3,150 of 3,300 credits remaining)

status

Check your current account status and credits before batch processing:

Logged in as user@example.com (Pro tier)
Credits: 3,150 of 3,300 remaining
Resets: 03/01/2026, 12:00 AM PST

logout

Revokes the session and reverts to guest mode.

upgrade

Opens glassypic.com/pricing in your browser.

Tips for AI Agents

Paste this into your CLAUDE.md or system prompt to help agents use the tool effectively:

## GlassyPic MCP

Tools: optimize_image, login, logout, status, upgrade

- Use status to check credits before batch processing
- Credits: 3 to compress (always), +1 if width/height is set, +2 to upscale, +1 for SEO tags (default). A full pipeline is 7 credits. SVG/ICO output is a flat 1 credit.
- Resizing up past 1.2x the source triggers an automatic AI upscale (+2 credits) even without output_upscale_factor set — a resize-only call on a small image can cost 7, not 5.
- Allowances vary by plan; call status for the live balance instead of assuming a number.
- Always use absolute file paths, not relative.
- Set only width OR height for proportional resize. Set both for exact dimensions.
- When both dimensions are set, use output_resize_behavior: "crop" for photos, "pad" for logos/icons.
- output_seo_tag_gen (default true) renames the file to an SEO slug and generates alt text + keywords.
- Set output_seo_tag_gen: false to save 1 credit when SEO metadata is not needed.
- GIF is supported for both input and output; animated GIFs stay animated when output_format is "gif".
- Converting an animated GIF to jpg/png/webp/avif preserves only the first frame.
- HEIC, TIFF, BMP inputs are auto-converted to JPG.
- For batch processing, call optimize_image once per file.
- If credits run out, use login to sign in or upgrade to open pricing.

Troubleshooting

Server not appearing in tool list:

  • Restart your MCP client after editing the config

  • Ensure Node.js >= 18 is installed: node --version

  • Try running directly: npx -y @glassypic/mcp-server@latest (should start without errors)

  • On Windows: if the server silently never loads, wrap the command with cmd /c ("command": "cmd", "args": ["/c", "npx", "-y", "@glassypic/mcp-server@latest"]) — see the Windows note under Quick Start

"Insufficient credits" error:

  • Use the status tool to check remaining credits

  • Use the login tool to sign in for more credits

  • Use the upgrade tool to open the pricing page and compare plans

  • Disable SEO tags (output_seo_tag_gen: false) to save 1 credit; note that resizing up past 1.2× the source still adds an automatic 2-credit upscale regardless

Login browser window doesn't open:

  • Open this URL manually: https://glassypic.com/mcp/authorize and enter the code shown in the terminal

  • Ensure a browser is installed and accessible

Session token issues:

  • Session data is stored at ~/.glassypic/session.json

  • Delete this file to reset and start fresh

  • Use logout then login to re-authenticate

File not found:

  • Use absolute paths for local files

  • For URLs, ensure the image is publicly accessible

Timeout errors:

  • Large images or AI upscaling can take 30-60 seconds

  • The server has a 60-second timeout per job

Privacy Policy

Full policy: https://glassypic.com/privacy/

What is transmitted. Images you optimize are uploaded to the GlassyPic API (https://api.glassypic.com) for processing, along with your authentication token. Images are retained according to your account tier and then deleted — both the original upload and the processed version. See the policy for the retention schedule.

When you pass a remote URL to the tool, the GlassyPic API fetches it server-side; the URL itself is sent to GlassyPic, and the request to the image host originates from GlassyPic's servers rather than from your machine.

What is stored locally. When you use the login tool, your access token and account email are written to ~/.glassypic/session.json with file mode 0600 (owner read/write only). If you optimize an image without logging in, the first upload mints a guest session token, which is written to that same file so subsequent calls stay attached to the same guest session's credits — no account, email, or personal information is attached to it. Running the logout tool removes the file's token. See also Account & Credits and Troubleshooting.

What is not collected. When run as a local connector, this server sends no telemetry and makes no network call other than to the GlassyPic API. (The remote HTTP transport additionally calls Supabase for authentication.)

Configuration

Variable

Default

Purpose

GLASSYPIC_API_URL

https://api.glassypic.com

API endpoint. Development and self-hosting only — most users never set it.

The value must be an https URL. Plain http is accepted only for localhost and 127.0.0.1, because your images and Bearer token are sent to this host. An invalid value produces a clear error naming the variable rather than a silent request to the wrong endpoint.

Requirements

  • Node.js >= 18

  • An MCP-compatible client (Claude Desktop, Claude Code, Cursor, Windsurf, Cline, OpenAI Codex CLI, Gemini CLI, etc.)

Security

Report vulnerabilities privately. See SECURITY.md. Do not file a public issue for an unfixed security report.

License

MIT - see LICENSE.

Available Tools

5 tools
loginLog InAInspect

Log in to your GlassyPic account via browser to unlock more credits. Opens a browser window where you complete login (Google, Facebook, or email). After login, MCP automatically picks up your account with shared credits across web and MCP. Registered accounts receive a larger credit allowance than guest sessions; use the status tool to read the account's actual tier and remaining credits. Your access token and email are stored locally at ~/.glassypic/session.json (file mode 0600) until you run logout.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description richly discloses behaviors beyond annotations: it opens a browser window, supports Google/Facebook/email, automatically picks up the account, and stores the access token and email locally at ~/.glassypic/session.json with file mode 0600 until logout. This is far more transparent than the minimal annotations (openWorldHint=true) and covers side effects, storage, and security posture.

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 four sentences, each contributing essential information: the action, the browser flow, the credit benefit and related status tool, and the local session storage. It is front-loaded with the core purpose and avoids redundancy. Every sentence earns its place.

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

Completeness5/5

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

Given no parameters, no output schema, and minimal annotations, the description is remarkably complete. It covers the login flow, credit implications, related tool usage, and security details about the stored session. It also clarifies that login is a prerequisite for shared credits, making the tool's role in the system fully comprehensible.

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, so the baseline is 4. The description adds no parameter-level semantics because there are none, but it does explain the authentication flow and what happens after login. This is sufficient given the empty 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?

The description clearly states the tool's purpose: 'Log in to your GlassyPic account via browser to unlock more credits.' The verb 'log in' is specific and the resource (GlassyPic account) is explicit. It distinguishes itself from sibling tools like logout, status, and upgrade by focusing solely on authentication.

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 provides clear context on when to use login (to unlock credits) and references the status tool for reading account tier and credits, offering an alternative for account info. It does not explicitly state when not to use login, but the use case is well implied. The mention of logout as the counterpart also helps.

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

logoutLog OutA
DestructiveIdempotent
Inspect

Log out of your GlassyPic account. Reverts to guest session. Your web app account is not affected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the post-condition is a reverted guest session and the blast radius excludes the web app account, which tells the agent exactly what is and isn't destroyed.

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 zero filler. The core action is front-loaded and each following sentence adds a distinct constraint (resulting state, blast radius).

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 tool with no output schema and annotations already covering safety and idempotency, the description supplies everything an agent needs: what the call does, the resulting session state, and the scope boundary. Nothing material 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?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter behavior is described, but none exists to describe.

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 (log out) plus the resource/scope (your GlassyPic account), and immediately clarifies the resulting state (guest session) and the account boundary (web app account unaffected). That boundary is what separates this from a generic global logout and from the inverse sibling 'login'.

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?

Usage is implied by the session semantics rather than stated: an agent can infer it ends the current GlassyPic session. There is no explicit when-to-use/when-not framing and no mention of the obvious alternative sibling (login to re-establish a session).

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

optimize_imageOptimize ImageAInspect

Optimize an image: smart lossy compression (typically 60-80% size reduction), optional resize/upscale/format conversion, and AI-generated SEO metadata. Accepts absolute local file paths or remote URLs. In remote/API mode, only remote URLs are supported. Supported input formats: JPG, PNG, WebP, AVIF, GIF, SVG, ICO, HEIC, TIFF, BMP (max 50 MB). Supported output formats: JPG, PNG, WebP, AVIF, GIF, SVG, ICO. Credits: 3 to compress (always), +1 if width or height is set, +2 to upscale, +1 for SEO tags (on by default). A full pipeline is 7 credits. Upscale is charged whether you request it or the server adds it automatically — it does so whenever a resize target exceeds the source by more than 1.2x, so a resize-only call on a small image also costs 7. SVG or ICO output is a flat 1 credit, overriding everything above. Animated GIFs are billed per frame: (per-frame operations x frames) + 1 if tags, up to 601 credits at the 100-frame limit — confirm_gif_cost gates that path. GIFs are excluded from automatic upscaling. Works as a guest with no signup. Log in with the login tool for more credits. Use status tool to check remaining credits before batch processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesAbsolute local file path or remote URL of the image to optimize. Note: in remote/API mode, only remote URLs are supported (no local file paths). Supported inputs: JPG, PNG, WebP, AVIF, GIF (animated supported), HEIC, TIFF, BMP (max 50 MB). GlassyPic supports high-quality conversion between any input and output format.
output_pathNoWhere to save. Accepts a file path (/tmp/out.webp) or directory ending in / (/tmp/images/). If omitted: saves next to original, named with SEO slug when SEO is enabled or .polished suffix otherwise. URLs save to current working directory.
output_formatNoOutput format. Defaults to 'original' (keep input format). Animated GIFs stay animated when output is 'gif'; converting to other formats preserves only the first frame. SVG output from raster input uses vector tracing. ICO output generates a favicon set (16, 24, 32, 48, 256px) unless a specific size is given.
gif_frame_limitNoMaximum frames to process for animated GIFs (1-100, default 100). Reduces cost by sampling fewer frames while preserving animation.
output_width_pxNoTarget width in pixels. Set only width for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior). Costs 1 credit. If the target exceeds the source by more than 1.2x, the server also adds an AI upscale for a further 2 credits.
confirm_gif_costNoSet to true to proceed with animated GIF processing after seeing cost warning. Required for animated GIFs to prevent unexpected credit consumption.
output_height_pxNoTarget height in pixels. Set only height for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior). Costs 1 credit. If the target exceeds the source by more than 1.2x, the server also adds an AI upscale for a further 2 credits.
_gif_temp_file_idNoInternal: temp file ID from a previous GIF cost warning. Skips re-upload.
output_seo_tag_genNoGenerate SEO metadata (alt text, keywords, filename) and rename output file to SEO slug. Costs 1 extra credit. Default: true.
output_upscale_factorNoAI upscale factor: 2 (2×) or 4 (4×). Uses Real-ESRGAN for high-quality upscaling. Costs 2 credits. Note that upscaling also triggers automatically, without this parameter, whenever a resize target exceeds the source by more than 1.2x — the same 2 credits are charged either way.
output_file_size_limitNoTarget maximum output file size in bytes. The server will attempt to meet this limit through additional compression. Not guaranteed.
output_resize_behaviorNoWhen both width and height are set and aspect ratio differs: 'pad' adds white padding (default), 'crop' smart-crops to fill exact dimensions

Output Schema

ParametersJSON Schema
NameRequiredDescription
output_pathYesLocal server: absolute path where the optimized file was saved. Remote server: an https download URL that works without credentials until it expires (see download_expires_in_seconds); download it promptly.
seo_alt_textYesAI-generated image alt text for accessibility and SEO
seo_filenameYesAI-generated SEO filename slug without extension
seo_keywordsYesAI-generated keywords describing the image
output_formatYesOutput format: jpg, png, webp, avif, gif, svg, or ico
output_width_pxYesWidth of the output image in pixels
output_height_pxYesHeight of the output image in pixels
compression_ratioYesOutput-to-input size ratio, e.g. 0.35 means 65% smaller
output_size_bytesYesFile size of the optimized image in bytes
download_expires_in_secondsNoRemote server only: seconds until the output_path download URL expires

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare write/non-idempotent/open-world; the description adds substantial behavior: the automatic upscale trigger (target >1.2x source, charged even if unrequested), per-frame animated-GIF billing up to 601 credits, GIF exclusion from auto-upscaling, flat SVG/ICO credit override, the remote-mode URL-only restriction, and the 50 MB cap. This is exactly the beyond-annotation context the dimension rewards.

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

Conciseness3/5

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

Purpose is front-loaded and the format/limit facts are efficient, but the middle billing paragraph is a dense run-on ('A full pipeline is 7 credits... up to 601 credits at the 100-frame limit') that is hard to parse and partially duplicates cost notes already in the schema's parameter descriptions.

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 12-parameter mutation tool, the description covers modes, formats, size limits, cost model, GIF edge cases, and guest/auth behavior. An output schema exists, so return values need no explanation, and nothing an agent needs to invoke it correctly 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?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining cross-parameter cost interactions (width/height +1, upscale +2, SEO +1) and the resize-triggers-upscale rule that ties output_width_px/output_height_px to output_upscale_factor. It clarifies parameter economics rather than merely restating field names.

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+resource ('Optimize an image') and enumerates the concrete operations (smart lossy compression, resize/upscale/format conversion, AI SEO metadata). It is trivially distinguishable from the sibling tools (login/status/logout/upgrade), which handle account/credits rather than image work.

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?

Routes the agent to siblings: 'Log in with the login tool for more credits' and 'Use status tool to check remaining credits before batch processing,' plus the guest-mode note and the confirm_gif_cost gate. It gives clear usage context but no explicit when-not-to-use guidance (there is no competing image tool, so that omission is minor).

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

statusAccount StatusA
Read-onlyIdempotent
Inspect

Check your GlassyPic account status: login state, tier, credits remaining, and credit reset time. Use this before batch processing to verify sufficient credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety profile. The description adds the specific status fields and a use-case tip, but does not disclose additional behavioral traits such as authentication requirements or rate limits. With annotations present, this is adequate but not rich.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the purpose and followed by actionable usage advice. No unnecessary words or repetition.

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 simple status-check tool with no parameters, the description is complete. It explicitly lists the return fields, compensating for the lack of an output schema, and provides a clear usage scenario.

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, so the input schema covers everything trivially. The description adds no parameter details, which is appropriate. Per the rubric, a 0-parameter tool gets a baseline of 4.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb ('Check') and resource ('GlassyPic account status'), and enumerates the exact data returned (login state, tier, credits remaining, credit reset time). It distinguishes itself from sibling tools like login/logout/upgrade by being the read-only status checker.

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 provides a concrete usage context: 'Use this before batch processing to verify sufficient credits.' It does not explicitly mention when not to use or name alternatives, but the guidance is clear and practical for the intended workflow.

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

upgradeOpen Pricing PageA
Idempotent
Inspect

Open the GlassyPic pricing page in the user's browser, where the account's plan can be reviewed and changed. Call this only when the user asks to change or review their plan.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate the tool is open-world, idempotent, and non-destructive. The description adds valuable context that it opens a page (not directly modifying the plan) and that the plan can be changed from that page. This goes beyond the 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?

The description is a single, well-structured sentence that front-loads the core action and then provides the usage condition. Every word earns its place with no redundancy.

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 tool with no parameters and no output schema, the description is completely sufficient: it explains what the tool does, what page it opens, and when to call it. There are no gaps in understanding.

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 the schema covers everything (100% coverage). The description still contributes by clarifying the action's intent, though no parameter details are needed. This aligns with the baseline for parameterless tools.

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 ('Open') and specifies the resource ('GlassyPic pricing page'), clearly distinguishing this from sibling tools like login, logout, status, and optimize_image. It states exactly what the tool does and why it exists.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Call this only when the user asks to change or review their plan.' This is a clear directive that also implies when not to use it, making it easy for an agent to decide.

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. 1 tool updatev2.1.3
    • Changedoptimize_image2 fields changed
      • addedOutput schema / properties / download_expires_in_seconds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Remote server only: seconds until the output_path download URL expires"
        +}
      • changedOutput schema / properties / output_path / description
        Previous value: -"Absolute path where the optimized file was saved"New value: +"Local server: absolute path where the optimized file was saved. Remote server: an https download URL that works without credentials until it expires (see download_expires_in_seconds); download it promptly."
  2. 1 tool updatev2.1.1
    • Changedoptimize_image14 fields changed
      • changedInput schema / properties / output_path / description
        Previous value: -"Where to save. Accepts a file path (/tmp/out.webp) or directory ending in / (/tmp/images/). If omitted: saves next to original, named with SEO slug when SEO is enabled or .tinified suffix otherwise. URLs save to current working directory."New value: +"Where to save. Accepts a file path (/tmp/out.webp) or directory ending in / (/tmp/images/). If omitted: saves next to original, named with SEO slug when SEO is enabled or .polished suffix otherwise. URLs save to current working directory."
      • addedOutput schema / properties / compression_ratio / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / compression_ratio / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / output_format / anyOf
        Added value: +[
        +  {
        +    "minLength": 0,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / output_format / description
        Previous value: -"Output format: jpg, png, webp, avif, or gif"New value: +"Output format: jpg, png, webp, avif, gif, svg, or ico"
      • removedOutput schema / properties / output_format / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / output_height_px / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / output_height_px / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / output_width_px / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / output_width_px / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / seo_alt_text / anyOf
        Added value: +[
        +  {
        +    "minLength": 0,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / seo_alt_text / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / seo_filename / anyOf
        Added value: +[
        +  {
        +    "minLength": 0,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / seo_filename / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
  3. 1 tool updatev2.1.0
    • Changedoptimize_image3 fields changed
      • changedInput schema / properties / output_height_px / description
        Previous value: -"Target height in pixels. Set only height for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior)."New value: +"Target height in pixels. Set only height for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior). Costs 1 credit. If the target exceeds the source by more than 1.2x, the server also adds an AI upscale for a further 2 credits."
      • changedInput schema / properties / output_upscale_factor / description
        Previous value: -"AI upscale factor: 2 (2×) or 4 (4×). Uses Real-ESRGAN for high-quality upscaling."New value: +"AI upscale factor: 2 (2×) or 4 (4×). Uses Real-ESRGAN for high-quality upscaling. Costs 2 credits. Note that upscaling also triggers automatically, without this parameter, whenever a resize target exceeds the source by more than 1.2x — the same 2 credits are charged either way."
      • changedInput schema / properties / output_width_px / description
        Previous value: -"Target width in pixels. Set only width for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior)."New value: +"Target width in pixels. Set only width for proportional resize. Set both width and height for exact output dimensions (see output_resize_behavior). Costs 1 credit. If the target exceeds the source by more than 1.2x, the server also adds an AI upscale for a further 2 credits."
  4. 5 tool updatesv2.0.1
    • First observedlogin
    • First observedlogout
    • First observedoptimize_image
    • First observedstatus
    • First observedupgrade

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a clearly distinct purpose: account session (login/logout), account status (status), plan management (upgrade), and the core image operation (optimize_image). There is no overlap in intent, so an agent can easily select the right tool.

Naming Consistency4/5

Most names are simple lowercase verbs (logout, login, upgrade), with one verb_noun (optimize_image) and one noun (status). The pattern is mostly consistent but has minor deviations in structure and part of speech, though still very readable.

Tool Count5/5

Five tools are well-scoped for an image optimization service: one primary action plus four account management helpers. Each tool earns its place and the set is neither bloated nor thin.

Completeness3/5

Core image optimization and account management are covered, but the optimize_image description references a 'confirm_gif_cost' tool that is not present, creating a dead end for animated GIF workflows. Batch processing is also mentioned but no dedicated tool exists.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers