GifSnap by Rowix
Server Details
Search GIFs and retrieve animated media URLs; show reactions in clients that support MCP Apps.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: react_with_gif is for the assistant's own conversational GIF reactions, while search_gifs is for user-initiated browsing/comparison. Each description explicitly cross-references the other and states when to prefer it, eliminating misselection risk.
Both names are snake_case and verb-led (react_with_gif, search_gifs), so the convention is readable and predictable. The only deviation is structural: one uses a verb_with_noun form and the other a simple verb_noun.
Two tools is thin even for a narrow GIF-reaction scope, though the two operations (react, search) are the essential ones. A small set of adjacent helpers (e.g. trending/categories) would round it out without bloating it.
The core loop of selecting and searching GIFs is covered, including dedupe via excludeIds and a read-back path via reaction.description. Minor gaps exist (no listing categories, trending, or favorites), but agents can work around them.
Available Tools
2 toolsreact_with_gifReact with a GIFARead-onlyIdempotentInspect
Use this when GifSnap is selected for conversational GIF reactions. During that reaction chat, use one matching GIF for each casual social reply, including follow-ups like haha, xd, or laughter emojis, without requiring another @mention. Preserve the topic in query: cheeseburger hungry for a burger conversation, laughing for laughter, friendly wave for hello. On haha, xd, or laughter emojis, use query laughing, without reusing a previous burger/food/object topic. Preserve a subject only when the current message actually mentions it. The component displays one GIF; respond in TEXT ONLY alongside it, without an additional image or picker. Read reaction.description so you know what was displayed. Pass recent returned reaction.id values in excludeIds to avoid repeating GIFs. Respect stop or fewer-GIF requests and omit reactions for serious or purely factual tasks. Do not send transcripts or personal information.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Two to six search keywords for the current topic and action, such as cheeseburger hungry, cat laughing, friendly wave, or laughing. Keep concrete subjects: a burger conversation should not become generic excitement. For a laughter-only or emoji-only follow-up, use its present emotion, e.g. laughing; do not carry forward an old object such as burger unless the user mentions it again. No personal information or transcript. | |
| excludeIds | No | Up to five recent reaction.id values from this conversation to avoid repeating a GIF; omit on the first turn. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| query | Yes | |
| status | Yes | |
| message | Yes | |
| reaction | Yes | |
| reactionShown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, it discloses real behavioral detail: the component displays exactly one GIF, the reply must be TEXT ONLY with no extra image or picker, reaction.description should be read to know what was shown, and excludeIds should carry recent reaction.id values to avoid repeats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The trigger condition is correctly front-loaded, but the laughter guidance is restated twice ("follow-ups like haha, xd, or laughter emojis" and again "On haha, xd, or laughter emojis, use query laughing"), and the topic-preservation rule repeats in both the description and the query schema. It is dense and somewhat redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and the description covers the remaining behavioral contract (single GIF, text-only reply, anti-repetition via excludeIds, privacy constraints, stop handling) thoroughly enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description reinforces parameter meaning with concrete topic-preservation rules ("cheeseburger hungry for a burger conversation") and the excludeIds-as-recent-ids contract. This adds usable semantics, though it largely overlaps the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (send one conversational GIF reaction) and anchors the trigger to "GifSnap is selected for conversational GIF reactions," which is concrete. It does not name the sibling search_gifs or explain how this differs from it, so it falls short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit positive conditions (casual social replies, follow-ups like haha/xd/emoji, no @mention needed) and explicit exclusions (serious or purely factual tasks, stop or fewer-GIF requests). An agent knows precisely when to fire and when to hold back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gifsFind GIF reactionsARead-onlyIdempotentInspect
Use this when the user explicitly wants to search, browse or compare GIF choices. Search by emotion, character or brief phrase and show up to 6 choices with optional copy/share controls. For the assistant's own conversational GIF response, use react_with_gif instead. Send only short keywords; omit personal data and conversation transcripts. This searches existing GIFs; it does not create images or send messages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of GIF choices to browse. | |
| query | Yes | Two to six search keywords for the current topic and action, such as cheeseburger hungry, cat laughing, friendly wave, or laughing. Keep concrete subjects: a burger conversation should not become generic excitement. For a laughter-only or emoji-only follow-up, use its present emotion, e.g. laughing; do not carry forward an old object such as burger unless the user mentions it again. No personal information or transcript. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gifs | Yes | |
| mode | Yes | |
| query | Yes | |
| status | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, but the description adds useful operational detail: results are capped at 6 choices, copy/share controls are optional, and inputs should be short keywords stripped of personal data. It does not discuss latency, rate limits, or result ranking, so it stops short of full behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the routing condition front-loaded, followed by input hygiene and non-capability scoping. Slight redundancy between 'Send only short keywords; omit personal data' and the closing non-capability sentence, but nothing is wasted enough to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary; the description covers selection trigger, alternative tool, input constraints, privacy boundaries, and result count. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema's query description is already more detailed than the prose (it spells out keyword rules, example queries, and object-carryover behavior). The description's 'search by emotion, character or brief phrase' is directionally consistent but adds little beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('search, browse or compare GIF choices') and explicitly bounds it as reading existing GIFs rather than creating images or sending messages. The sibling tool react_with_gif is named directly, so an agent can disambiguate without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with the precise trigger condition ('when the user explicitly wants to search, browse or compare GIF choices') and routes the alternative case to react_with_gif for the assistant's own conversational response. Also gives negative guidance on what not to include (personal data, transcripts).
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.
2 tool updates
- First observed
react_with_gif - First observed
search_gifs
Related MCP Connectors
Giphy MCP — wraps Giphy API (public beta key, free)
Compress GIFs from HTTPS URLs, poll results, and check credits. Hosted MCP with API key auth.
Discover MCP servers and A2A agents; verify, message, post, follow, react, and receive webhooks.
Appreciate teammates, celebrate milestones, and run workspace ops from MCP clients via OAuth.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI chat clients to search, manage, and send custom meme/sticker images through MCP, with images stored in SQLite and served via public URLs; supports MCP Apps displaying images inline in chat.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to search and read Reddit content—posts, comments, communities, wikis, and user activity—without posting or needing API keys. Supports full thread expansion, subreddit discovery, NSFW filtering, and compact outputs with rate-limit handling.1MIT
- AlicenseAqualityDmaintenanceEnables AI to send expressive stickers based on conversation context, with a built-in UI for managing stickers.58MIT
- FlicenseNot gradedqualityAmaintenanceEnables MCP clients to run searches across Google, Bing, Yahoo, DuckDuckGo, YouTube, eBay, and other engines, returning organic results, news, images, shopping, weather, and stock data as JSON or Markdown. It also exposes per-engine parameter schemas as resources and offers optional interactive table and dashboard views.-
Glama MCP Gateway
Add one secure layer between your agents and this server.