CLIP-based visual/vibe image search server for same.energy — reverse-engineered API integration for semantic image search by mood, style, and visual similarity
Four tools with complete schemas and descriptions, but descriptions are verbose (200-300 chars) and lack LLM-optimized structure. Parameter descriptions are present but generic. No error handling guidance, no output schema documentation, no tool annotations. search and search_by_local_image have good semantic detail; image_info and download_images lack context on when to use them. No idempotency or retry guidance documented.
Download full-size images (or thumbnails) for the given comma-separated ids. Default dest: ~/Downloads/same-energy/. Returns saved file paths — Read them to actually view the images.
Full metadata for specific image ids (comma-separated): dimensions, title/caption, source platform, post_url, original_url, tags.
Search same.energy by vibe. text: semantic description (CLIP — describe mood/style/subject, e.g. 'grainy 35mm alpine hikers at golden hour'). image_ids: comma-separated ids to find visually similar images (from earlier results or upload). Text and ids can be combined to steer similarity.
Upload a local image and find same.energy images that look like it. Optional text steers the similarity (e.g. 'but as architecture'). Returns the uploaded image's id (reusable in search) plus the matches.
No output schema documentation. Tools return dicts with fields like 'count', 'images', 'errors', 'saved' but LLMs cannot infer structure. Downstream tool chaining requires explicit field documentation.
Descriptions lack LLM-optimized structure. 'Full metadata for specific image ids (comma-separated): dimensions, title/caption, source platform, post_url, original_url, tags.' is a list, not a clear action statement. Should be: 'Retrieve detailed metadata (dimensions, title, source, URLs, tags) for one or more images by ID. Use after search() to get full details before downloading.'
No error recovery guidance. Tools return {'error': '...'} but do not tell LLM what to do next. E.g., 'File not found: /path/to/file' should be 'File not found: /path/to/file. Check the path and try again, or use search_by_local_image() with a different file.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). search_by_local_image and download_images are WRITE operations but lack destructiveHint. search and image_info are READ-ONLY but lack readOnlyHint. Agents cannot infer safety/retry semantics.
Parameter descriptions are minimal. 'n: number of results to return' lacks bounds (default 30, but what is max?). 'nsfw: include NSFW results' is clear but others like 'text' and 'image_ids' in search() assume LLM knows CLIP semantics. Should explain: 'text: semantic description for CLIP similarity (e.g., "moody brutalist concrete at dusk"), keyword search does not work.'