MCP server providing a capability bridge to Vertex AI / Gemini models via Google Cloud. Supports text generation, image generation/editing, multimodal input, and embeddings.
Server has 13 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (generate_text, generate_image, etc.). Descriptions are detailed (100-400 chars) and explain WHAT, WHEN, and HOW. However, several tools lack parameter descriptions (e.g., call_model's 'contents' param is vague), and output schemas are not formally documented. Error handling is minimal, tools return raw strings or dicts without recovery guidance. Recording/replay tools (list_calls, get_call, replay_call) are operational but lack clear use-case documentation. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels (generate_image is WRITE, others READ_ONLY).
Escape hatch: call any Vertex AI Gemini model with raw SDK parameters.
Return a vector embedding for the given text.
Generate or edit an image. When image_input_path is omitted the model generates an image from the text prompt alone. When image_input_path is provided the model performs image editing — use the prompt to describe the desired change (e.g. "change the background to a snowy mountain scene"). image_input_path must be an absolute path to a local JPEG or PNG. title: optional 2-3 word human-readable label used as the output filename (e.g. "raccoon garbage busted"). Always provide this — it makes saved images easy to identify. Omit only if no suitable title can be derived. Saves the image to the configured output directory (IMAGE_OUTPUT_DIR, default ~/Claude) and returns a dict with a "result" key containing the absolute file path. Use the Filesystem connector read_file tool on result["result"] to display the image inline. Set save_to_file=False to receive raw base64-encoded JPEG in result["result"] instead (only suitable for small images). model_alias selects a named target from the model registry. When omitted, the default_alias is used. The target must have an image_model configured. generation_config: optional dict of generation parameters passed directly to the provider. Only keys present are forwarded — no defaults are injected. Use get_model_options to discover supported keys for the active model.
Generate a response from text and an optional local image file.
call_model tool is an 'escape hatch' with vague parameter descriptions. 'contents' param lacks format guidance (string vs structured?), and 'config' is a bare object with no schema. This violates the constrained-input pattern and invites hallucinated payloads.
Recording/replay tools (recording_status, list_calls, get_call, replay_call) have minimal descriptions (under 50 chars). LLMs cannot determine when to use them or what they return. No output schema documented.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk levels. generate_image is marked WRITE but has no destructiveHint. This prevents agents from reasoning about side effects and retry safety.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Generate text from a prompt using a configured model target. Pass any system_instruction to steer model behaviour (tone, format, persona, output structure, etc.). The server never modifies or restricts the output format — if you want SVG, JSON, markdown, or plain text, say so in the prompt or system_instruction. model_alias selects a named target from the model registry. When omitted, the default_alias from models.yaml (or environment) is used.
Return a single recorded call by request_id.
Return static capability metadata for a model alias. No API call is made. Returns supported generation parameters, valid ranges or enums, and model-specific notes. Useful for discovering what can be passed via generation_config in generate_image. model_alias selects a named target from the model registry. When omitted, the default_alias is used.
Return provider metadata and the full target registry.
Perform minimal provider verification against the given alias.
Return up to 20 most recent recorded tool calls.
Return the current state of the flight recorder.
Replay a recorded call by request_id, re-executing the same tool with the same inputs.
Stage a base64-encoded image into the shared output directory. Decodes the image, detects its actual format from the file header, and writes it to IMAGE_OUTPUT_DIR with the correct extension, returning the absolute path. Use this before calling generate_image with image_input_path when the user provides an image attachment for editing. The returned path is always accessible by the MCP server because the server writes it directly to its own filesystem — no path translation needed.
Output schemas are not formally documented. generate_image returns dict with 'result' key, but structure is inferred from code, not declared in tool schema. LLMs cannot plan downstream calls without explicit return type documentation.
Error handling is minimal. Tools return raw strings or dicts without recovery guidance. No error classification (retryable vs user-fixable vs fatal). Agents cannot self-correct on failures.