# io.github.alexmeckes/gifgif (npm · gifgif)

Fit a video or GIF to its destination's size limit at measured quality, and share a link.

- Trust score: 61/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-26

## Components

- npm · `gifgif`: 61/100 (this document), [markdown](https://verifymcp.io/servers/alexmeckes-gifgif/gifgif.md), [page](https://verifymcp.io/servers/alexmeckes-gifgif/gifgif)

## Channel facts

- Registry: `npm`
- Package: `gifgif`
- Version: `0.3.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-26.

- **Supply Chain Security**: 94/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2405 tokens (~240/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 20/100
  - Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 92% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "gif_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the io.github.alexmeckes/gifgif MCP server?

io.github.alexmeckes/gifgif runs locally as an npm package, launched with npx -y gifgif. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add alexmeckes-gifgif -- npx -y gifgif
```

### Cursor

```json
{
  "mcpServers": {
    "alexmeckes-gifgif": {
      "command": "npx",
      "args": [
        "-y",
        "gifgif"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "alexmeckes-gifgif": {
      "command": "npx",
      "args": [
        "-y",
        "gifgif"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add alexmeckes-gifgif -- npx -y gifgif
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "alexmeckes-gifgif": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "gifgif"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add alexmeckes-gifgif --command npx --arg -y --arg gifgif
```

### Hermes

```yaml
mcp_servers:
  alexmeckes-gifgif:
    command: "npx"
    args: ["-y", "gifgif"]
```

### Netclaw

```json
{
  "McpServers": {
    "alexmeckes-gifgif": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "gifgif"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add alexmeckes-gifgif -t stdio -c npx -a -y gifgif
```

### Other

```json
{
  "mcpServers": {
    "alexmeckes-gifgif": {
      "command": "npx",
      "args": [
        "-y",
        "gifgif"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-25 (score 61, +12)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 49, −10)

- [security regression] Known CVEs: pass → unverified
- [security regression] Tool safety: pass → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Dependency health: pass → unverified
- [functional improvement] Schema quality: 297 → 240
- [functional improvement] Stability: unverified → 0.13
- [functional] First check of Schema quality: unverified
- [functional] Destructive annotations: pass → 0
- [functional] Package version: 0.3.1 → 0.3.2

### 2026-09-20 (score 59)

First indexed and scored.

## MCP tools (10)

### `gif_job` (~36 tokens)

Check a background job and retrieve its completed links, or cancel it.

Input parameters:

- `cancel` (boolean)
- `id` (string, required)

### `gif_targets` (~50 tokens)

List the destination presets (GitHub README, PR, Slack, Discord, Notion, email, X, Linear, Jira, web) with their size budgets, default width, fps, and platform notes.

### `gif_info` (~53 tokens)

Probe a video or GIF: dimensions, duration, fps, frame count, file size, codec.

Input parameters:

- `path` (string, required): Path to the video or GIF.
- `remote` (boolean): Inspect on the configured server.

### `gif_frames` (~169 tokens)

Look at a clip. Returns a contact sheet image of evenly spaced frames with a legend mapping each cell to a timestamp, so you can pick trim points or check what happens when. Pass 'at' to get one full-size frame at a specific time instead.

Input parameters:

- `at` (string): Return a single frame at this time instead of a sheet.
- `cols` (number): Grid columns (default 4).
- `count` (number): Number of frames in the sheet (default 12, max 64).
- `end` (string): Only sample up to this time.
- `path` (string, required): Path to the video or GIF.
- `remote` (boolean): Extract frames on the configured server.
- `start` (string): Only sample from this time onward (seconds or m:ss).

### `gif_optimize` (~1528 tokens)

Fit a video or GIF to a destination's size budget at the best quality that fits, and optionally share it. A native encoder searches width, fps, palette and tolerance and scores every candidate against the source, so the result carries a measured quality (quality.dssim; under 0.01 is hard to notice). Applies every edit in one pass: trim, crop, join several clips, speed, reverse, boomerang, captions with a place and a time, blur, pixelate, zoom, colour, fades, border, rounded corners, a colour key, sound on MP4. Returns size, whether it fit, the steps tried, and with share=true a link to the finished file. Works without local ffmpeg via the hosted service (remote=true, or automatically).

Input parameters:

- `alt` (string): Alt text for the markdown/html embed.
- `async` (boolean): Submit a background job; use gif_job with its ID to retrieve the result.
- `audio` (boolean): Keep the sound on MP4 output (default true when the source has a track; GIF and WebP have none).
- `blur` (array): Regions to blur, in source pixels like crop (e.g. '200x40+30+90', 'top-right', '10%,5%,30%,8%'); an optional :radius.
- `boomerang` (boolean): Forward then backward.
- `border` (string): A border around the picture: '8', '8,white', '12,#202020' (pixels, colour default black).
- `brightness` (number): Brightness -1 to 1; 0 leaves it.
- `caption` (string): Caption drawn over the clip, centred, with a translucent box. Needs an ffmpeg with drawtext; the hosted container has it.
- `captionPosition` (string): Where the caption goes. Default bottom.
- `captions` (array): Several captions: 'text', 'text @top', 'text @bottom-left', 'text @40%,10%'; a time range last: 'text @top 2-5' (seconds or m:ss).
- `colors` (number): Pin palette size 2-256. Usually leave unset; the optimizer picks.
- `contrast` (number): Contrast 0 to 3; 1 leaves it.
- `corners` (number): Rounded corners of this radius in output pixels: transparent on GIF and WebP, black on MP4.
- `crop` (string): left-half, right-half, top-half, bottom-half, top-left, top-right, bottom-left, bottom-right, center, left-third, center-third, right-third, WxH (centered), WxH+X+Y, or x,y,w,h. Numbers or percentage…
- `dither` (string): Dithering. 'none' is smallest and looks fine for flat UI recordings.
- `effort` (string): How many encoder trials the search may spend. fast is about twice as quick, high squeezes a little more.
- `end` (string): Trim end, seconds or m:ss.
- `expires` (string): How long the link lives: 1d, 7d, 30d, 90d, or never (free links last at most 90 days). Use a short one for recordings that show private things.
- `fadeIn` (number): Fade from black over this many seconds at the start.
- `fadeOut` (number): Fade to black over this many seconds at the end of the finished clip.
- `flip` (string): Mirror: h = left-right, v = top-bottom, hv = both.
- `for` (string): Destination preset. Sets format, size budget, default width, and fps.
- `format` (string): Output format. Defaults to gif (the only format that animates in GitHub READMEs and most chat apps).
- `fps` (number): Pin the frame rate.
- `grayscale` (boolean): Black and white.
- `height` (number): Pin the output height in px.
- `loop` (number): 0 = loop forever (default), -1 = play once, n = loop n times.
- `lossy` (number): Pin gifsicle lossy level 0-200. Usually leave unset.
- `max` (string): Size budget like '5mb' or '800kb'. Overrides the preset budget.
- `objective` (string): smallest (default): the smallest file whose measured quality stays within the threshold; quality: the best-scoring candidate that fits the budget, usually a larger file; fastest: the first fit.
- `out` (string): Output path. Default: <name>.<target>.gif next to the source.
- `overlay` (string): Image file laid over the frame: 'logo.png', 'logo.png@bottom-right', 'logo.png@10,10:25%'. Local runs only.
- `pad` (string): Pad to an aspect ratio (16:9, 1:1) or a size (800x600), optionally with a colour: '16:9:white', '1:1:#202020'. Default black. Useful when a destination crops previews.
- `path` (string, required): Source video or GIF. Append :START-END to use only that stretch.
- `paths` (array): Several sources, joined end to end in this order before the recipe applies (each may carry :START-END). Use instead of path.
- `pixelate` (array): Regions to pixelate, like blur; an optional :block size.
- `preview` (boolean): Return a contact sheet of the optimized output (default true).
- `quality` (number): Max perceptual loss (DSSIM) the native encoder may trade for size. Default 0.004; 0.002 is stricter, 0.01 is looser. Under 0.01 is hard to notice.
- `remote` (boolean): Optimize on the configured share server instead of this machine. Use when gif_doctor reports ffmpeg missing; it also happens automatically in that case when a server is configured. The result is stor…
- `reverse` (boolean): Play backwards.
- `rotate` (number): Rotate clockwise by 90, 180, or 270 degrees.
- `saturation` (number): Saturation 0 to 3; 1 leaves it, 0 is grey.
- `share` (boolean): Upload the result to the configured share server and return a link.
- `speed` (number): Playback speed multiplier; 2 = twice as fast, 0.5 = half.
- `start` (string): Trim start, seconds or m:ss (e.g. '2.5' or '0:02.5').
- `title` (string): Title for the share page.
- `transparent` (string): A colour to make transparent (GIF, WebP; black on MP4): '#00ff00' or '#00ff00:24' with a per-channel tolerance.
- `width` (number): Pin the output width in px. Never upscaled.
- `zoom` (string): Push in from the full frame to a region over N seconds (default 1.5), then hold: 'center:1.5', '40%x40%+10%+20%'.

### `gif_share` (~145 tokens)

Upload a finished gif/mp4/webp to the share server (gifgif.dev unless configured otherwise) and get a direct URL, a share page, and ready-to-paste markdown and HTML. A link is handed out only once the file exists.

Input parameters:

- `alt` (string)
- `expires` (string): How long the link lives: 1d, 7d, 30d, 90d, or never (free links last at most 90 days). Use a short one for recordings that show private things.
- `path` (string, required): File to upload.
- `server` (string): Override the share server URL.
- `title` (string)

### `gif_links` (~67 tokens)

List the links this token has made (newest first): page and file URLs, size, title, when each was made and when it expires. Use it to find a link to reuse, update or delete.

Input parameters:

- `cursor` (string): From a previous call, for the next page.

### `gif_update` (~104 tokens)

Change a link's title, alt text, or lifetime. The file behind a link never changes; to change the clip, optimize again and share the new link.

Input parameters:

- `alt` (string)
- `expires` (string): 1d, 7d, 30d, 90d, or never, counted from now.
- `link` (string, required): The share page or file URL, or the 10-character id.
- `title` (string)

### `gif_delete` (~49 tokens)

Remove a link and its file from the share server. Anyone who has the link sees it is gone.

Input parameters:

- `link` (string, required): The share page or file URL, or the 10-character id.

### `gif_doctor` (~62 tokens)

Check the local toolchain (native encoder, ffmpeg, ffprobe, gifsicle, which encoders and filters are present) and the share server and token. Run this first if another tool fails; without ffmpeg, optimize still works through the hosted service.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/alexmeckes-gifgif/gifgif#diagnostics

## Score history

- 2026-09-26: 61
- 2026-09-25: 61
- 2026-09-24: 49
- 2026-09-23: 59
- 2026-09-22: 59
- 2026-09-21: 59
- 2026-09-20: 59

## Common questions

### What is the io.github.alexmeckes/gifgif MCP server?

io.github.alexmeckes/gifgif is an MCP server listed in the public MCP registry as io.github.alexmeckes/gifgif. Fit a video or GIF to its destination's size limit at measured quality, and share a link. This page covers its npm package (gifgif).

### Is the io.github.alexmeckes/gifgif MCP server safe to use?

io.github.alexmeckes/gifgif scores 61 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 26 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.alexmeckes/gifgif MCP server expose?

io.github.alexmeckes/gifgif exposes 10 tools: gif_job, gif_targets, gif_info, gif_frames, gif_optimize, and 5 more. Their descriptions and schemas cost roughly 2,263 tokens of context every time the server is loaded.

### Is the io.github.alexmeckes/gifgif MCP server still maintained?

io.github.alexmeckes/gifgif is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.alexmeckes/gifgif MCP server under?

io.github.alexmeckes/gifgif declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/gifgif
- Socket report: https://socket.dev/npm/package/gifgif
- Changelog RSS feed: https://verifymcp.io/servers/alexmeckes-gifgif/gifgif.xml
- Changelog JSON feed: https://verifymcp.io/servers/alexmeckes-gifgif/gifgif.json
- HTML version of this page: https://verifymcp.io/servers/alexmeckes-gifgif/gifgif
