{"schema_version":"verify.report.v1","generated_at":"2026-08-28T13:34:09.973785+00:00","snapshot_id":"trustsnap_356e6d5ae8c560b7","server":{"namespace":"github-bananabanana-pro-mcp","name":"bananabanana-mcp","title":"bananabanana-pro-mcp/bananabanana-mcp","description":"Remote MCP server for BananaBanana — generate images and video (Nano Banana, Veo, Omni) from Claude Code, Claude Desktop and Cursor. Pay-as-you-go, no subscription, crypto payments. Docs, tool reference and client configs.","homepage_url":"https://bananabanana.pro/mcp","docs_url":"https://bananabanana.pro/mcp","icon_url":"https://avatars.githubusercontent.com/u/302775501?v=4","support_url":"https://github.com/bananabanana-pro-mcp/bananabanana-mcp","remote_url":"https://bananabanana.pro/mcp","server_card_url":null,"latest_version":null,"current_status":"degraded","current_score":52.42,"transport_type":"streamable-http","has_oauth":false,"has_dcr":false,"has_prompts":false,"tool_count":10,"current_validation_schema_version":"8058defc70ca932c","last_validated_at":"2026-08-28T10:41:13.400838+00:00","registry_source":"github_topic_registry","registry_identifier":"github_topic_registry:bananabanana-pro-mcp/bananabanana-mcp","canonical_identifier":null,"current_score_components":{"auth_operability_score":1.0,"error_contract_score":0.0,"rate_limit_semantics_score":2.0,"schema_completeness_score":2.0,"backward_compatibility_score":4.0,"slo_health_score":3.0,"security_hygiene_score":3.0,"task_success_score":3.0,"trust_confidence_score":4.0,"abuse_noise_ratio_score":3.0,"prompt_contract_score":2.0,"resource_contract_score":2.0,"discovery_metadata_score":2.0,"registry_consistency_score":3.0,"installability_score":3.0,"session_semantics_score":3.0,"tool_surface_design_score":3.0,"result_shape_stability_score":3.0,"oauth_interop_score":0.0,"recovery_semantics_score":0.0,"maintenance_signal_score":2.0,"adoption_signal_score":2.0,"freshness_confidence_score":4.0,"transport_fidelity_score":4.0,"spec_recency_score":2.0,"session_resume_score":3.0,"step_up_auth_score":2.0,"transport_compliance_score":0.0,"utility_coverage_score":1.0,"advanced_capability_coverage_score":1.0,"connector_publishability_score":2.0,"tool_snapshot_churn_score":4.0,"connector_replay_score":4.0,"request_association_score":0.0,"interactive_flow_safety_score":4.0,"action_safety_score":3.0,"official_registry_presence_score":2.0,"safety_transparency_score":2.0,"tool_capability_clarity_score":4.0,"destructive_operation_safety_score":3.0,"egress_ssrf_resilience_score":3.0,"execution_sandbox_safety_score":4.0,"data_exfiltration_resilience_score":3.0,"least_privilege_scope_score":0.0,"secret_handling_hygiene_score":3.0,"dependency_supply_chain_signal_score":1.0,"input_sanitization_safety_score":3.0,"tool_namespace_clarity_score":4.0},"capability_taxonomy":[],"machine_summary":{},"taxonomy_tags":[],"score_decomposition":[],"validation_diff":null,"tool_snapshot_diff":null,"connector_replay":{},"request_association":{},"production_readiness":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first.","badge":"score-low","critical_alerts":0,"high_or_critical_alerts":0,"degraded_by_active_alerts":false},"recommended_for":[],"history_summary":{},"validation_timeline":[],"evidence_confidence":{"score":95.0,"label":"high","reason":"Based on 20 recent validations, 15 captured checks, and validation age of 2.9 hours.","live_check_count":15,"validation_age_hours":2.88,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"incident_feed":[],"disputes":[],"remediations":[],"client_remediation_modes":[],"client_profiles":[],"client_readiness_verdicts":[],"publishability_policy_profiles":[],"compatibility_fixtures":[],"install_snippets":{},"aliases":[],"raw_evidence":{"checks":{"probe_noise_resilience":{"status":"ok","latency_ms":560.57,"details":{"url":"https://bananabanana.pro/robots.txt","http_status":200,"headers":{"content-type":"text/plain; charset=UTF-8","strict-transport-security":"max-age=31536000; includeSubDomains"},"validation_disallowed":false,"consent_error":null}},"server_card":{"status":"ok","latency_ms":378.56,"details":{"url":"https://bananabanana.pro/.well-known/mcp/server-card.json","payload":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"pro.bananabanana/image-video","title":"BananaBanana Image & Video Generation","description":"Generate images & video (Nano Banana, Veo, Omni) pay-as-you-go. No subscription, crypto payments.","version":"1.0.5","websiteUrl":"https://bananabanana.pro/mcp","repository":{"url":"https://github.com/bananabanana-pro-mcp/bananabanana-mcp","source":"github"},"icons":[{"src":"https://bananabanana.pro/mcp-icon-512.png","mimeType":"image/png","sizes":["512x512"]}],"remotes":[{"type":"streamable-http","url":"https://bananabanana.pro/api/mcp","headers":[{"name":"Authorization","description":"Bearer credential. Leave empty if your client signs in with OAuth 2.1 (claude.ai, Claude Desktop/Code, MCP Inspector) — it obtains the token itself. Otherwise put an API key here as 'Bearer bb_live_…'; create one at https://bananabanana.pro/profile.","isRequired":false,"isSecret":true}]}]},"http_status":200,"headers":{"content-type":"application/json; charset=UTF-8","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"oauth_protected_resource":{"status":"error","latency_ms":153.92,"details":{"url":"https://bananabanana.pro/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://bananabanana.pro/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"}},"oauth_authorization_server":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"openid_configuration":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"initialize":{"status":"auth_required","latency_ms":347.55,"details":{"url":"https://bananabanana.pro/mcp","error":"Client error '401 Unauthorized' for url 'https://bananabanana.pro/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401","http_status":401,"payload":{},"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains","www-authenticate":"Bearer realm=\"bananabanana\", error_description=\"Authentication required. Connect this server with OAuth, or create an API key at https://bananabanana.pro/profile\", resource_metadata=\"https://bananabanana.pro/.well-known/oauth-protected-resource/mcp\", scope=\"mcp\""}}},"protocol_version_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_protocol_version","validator_protocol_version":"2025-03-26","latest_known_version":"2025-11-25"}},"tools_list":{"status":"ok","latency_ms":443.17,"details":{"url":"https://bananabanana.pro/mcp","payload":{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"list_models","description":"List all available image, video and speech generation models with current per-unit USD prices, supported resolutions, durations and constraints. Prices come from the same source as the website — call this before quoting costs to a user or choosing a model. Free, no charge.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_account","description":"Get the current account balance (USD), this API key's name, optional daily spend cap and how much of it is used today. Free, no charge. Use it to check affordability before starting expensive generations. When the balance no longer covers even the cheapest image, the response also carries a ready-to-open top_up_url.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"top_up","description":"Get a balance top-up link. OAuth connections receive a one-time deposit-only link valid for 30 minutes; opening it cannot expose API keys, profile data or generation history. Bearer API-key users receive the normal profile link. Free, no charge.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"generate_image","description":"Start an AI image generation (Google Nano Banana family). Charges the account balance immediately and returns a job_id — poll get_result for the finished image URLs. Typical completion: 10–60 seconds. The default nano-banana-2-lite model is the cheapest option and produces 1024px images; choose nano-banana-2 explicitly for 512px, 2048px or 4096px output. Optional reference_images provide the model with the actual subject, product, character or style pixels; Nano Banana Pro supports up to 14 references. Costs $0.03–$0.20 per image depending on model and resolution (see list_models). Failed generations are automatically refunded. If a legitimate prompt is rejected by Google's content filter, retry with relaxed_filter: true. Generating several images at once (number_of_images > 1) is a batch: the first call returns a price quote and charges nothing — repeat the call with confirm_cost set to the quoted amount to start. Example: {\"prompt\": \"studio photo of a ceramic mug on linen, soft daylight\", \"model\": \"nano-banana-2-lite\", \"aspect_ratio\": \"4:5\", \"resolution\": \"1024\"}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000,"description":"What to generate. English works best."},"model":{"type":"string","enum":["nano-banana-2-lite","nano-banana-2","nano-banana-pro"],"default":"nano-banana-2-lite","description":"nano-banana-2-lite: cheapest default, 1024 only. nano-banana-2: choose for 512, 2048 or 4096 output. nano-banana-pro: top quality, up to 4K."},"aspect_ratio":{"type":"string","enum":["1:1","3:2","2:3","4:3","3:4","4:5","5:4","9:16","16:9","21:9"],"default":"1:1"},"resolution":{"type":"string","enum":["512","1024","2048","4096"],"default":"1024","description":"Lite requires 1024. Choose nano-banana-2 for 512, 2048 or 4096; 4096 costs the most."},"number_of_images":{"type":"integer","minimum":1,"maximum":4,"default":1,"description":"Variants per call. >1 requires confirm_cost."},"negative_prompt":{"type":"string","maxLength":1000},"output_format":{"type":"string","enum":["jpeg","png","webp"],"default":"jpeg"},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"description":"For reproducible results."},"reference_images":{"type":"array","items":{"type":"string"},"maxItems":14,"description":"Actual visual references for the generated image. Each item is a job_id of a completed image generation on this account, a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL (max 10 MB each). For a local file, read and base64-encode its bytes into a data URL; a bare local path such as C:\\\\photo.jpg cannot be read by this remote server."},"relaxed_filter":{"type":"boolean","default":false,"description":"Switch this call to Google's own permissive presets: safety thresholds OFF and person generation allowed for adults (safetySettings and personGeneration=ALLOW_ADULT — documented Vertex AI parameters, not a way around Google's rules). Google filters in two independent stages and this flag only affects the first: (1) a check on the request before anything is rendered — this is what refuses legitimate prompts about real-looking people, swimwear or sportswear, medical and anatomical subjects, mild fictional violence and edgy artwork (upstream_reason SAFETY_BLOCK), and it is the stage relaxed_filter relaxes; (2) a classifier that scores the finished image, which no parameter can switch off (upstream_reason IMAGE_SAFETY). Stage 2 judges the actual pixels and every run renders a different image, so a borderline but legitimate subject rejected there often passes on a plain retry or with slightly less ambiguous wording — retrying is reasonable (failures are fully refunded, so an attempt costs only time), just don't expect the flag itself to bypass that stage. What Google refuses outright — sexual content, minors, real public figures — stays blocked in every attempt. Both stages surface as error_code SAFETY_FILTERED; upstream_reason in get_result tells them apart."},"confirm_cost":{"type":"number","description":"Required for batches (number_of_images > 1): the quoted total USD cost you accept."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"edit_image","description":"Edit / refine a previously generated image with a text instruction on Nano Banana 2 Lite / 2 / Pro (multi-turn editing: change colors, remove objects, restyle, etc.). This tool modifies an image that already exists — use generate_image to create a new image from a prompt. Pass the job_id of a COMPLETED image generation as source_generation_id. Charged like a single image of the chosen model/resolution; auto-refund on failure. Example: {\"source_generation_id\": \"cmxyz...\", \"prompt\": \"make the background pure white and add soft shadow\"}","inputSchema":{"type":"object","properties":{"source_generation_id":{"type":"string","description":"job_id of a completed image generation owned by this account."},"prompt":{"type":"string","maxLength":2000,"description":"The edit instruction."},"model":{"type":"string","enum":["nano-banana-2-lite","nano-banana-2","nano-banana-pro"],"default":"nano-banana-2"},"aspect_ratio":{"type":"string","enum":["1:1","3:2","2:3","4:3","3:4","4:5","5:4","9:16","16:9","21:9"],"default":"1:1"},"resolution":{"type":"string","enum":["512","1024","2048","4096"],"default":"1024"},"output_format":{"type":"string","enum":["jpeg","png","webp"],"default":"jpeg"},"seed":{"type":"integer","minimum":0,"maximum":2147483647},"relaxed_filter":{"type":"boolean","default":false,"description":"Switch this call to Google's own permissive presets: safety thresholds OFF and person generation allowed for adults (safetySettings and personGeneration=ALLOW_ADULT — documented Vertex AI parameters, not a way around Google's rules). Google filters in two independent stages and this flag only affects the first: (1) a check on the request before anything is rendered — this is what refuses legitimate prompts about real-looking people, swimwear or sportswear, medical and anatomical subjects, mild fictional violence and edgy artwork (upstream_reason SAFETY_BLOCK), and it is the stage relaxed_filter relaxes; (2) a classifier that scores the finished image, which no parameter can switch off (upstream_reason IMAGE_SAFETY). Stage 2 judges the actual pixels and every run renders a different image, so a borderline but legitimate subject rejected there often passes on a plain retry or with slightly less ambiguous wording — retrying is reasonable (failures are fully refunded, so an attempt costs only time), just don't expect the flag itself to bypass that stage. What Google refuses outright — sexual content, minors, real public figures — stays blocked in every attempt. Both stages surface as error_code SAFETY_FILTERED; upstream_reason in get_result tells them apart."},"idempotency_key":{"type":"string","maxLength":64}},"required":["source_generation_id","prompt"],"additionalProperties":false}},{"name":"generate_video","description":"Start an AI video generation (Google Veo 3.1 family or Gemini Omni Flash). EXPENSIVE: $0.10–$4.40 per clip. Cost confirmation is mandatory: the first call always returns a USD quote and charges nothing — repeat the call with confirm_cost set to the quoted amount to actually start. Returns a job_id; poll get_result (videos take 1–10+ minutes). Failed generations are auto-refunded. Models: veo-3.1-fast (default, good quality/price), veo-3.1 (best Veo quality), veo-3.1-lite (cheapest, 720p/1080p), omni-flash (always has sound, any duration from 3 to 10 s at $0.10/s, supports conversational editing via edit_from_generation_id). Content filtering differs by model: omni-flash is by far the strictest, so a clip rejected as SAFETY_FILTERED on omni-flash is often produced by veo-3.1-fast without changing a word. Video has no configurable safety settings on Google's side (relaxed_filter is accepted for Veo but only pins its default personGeneration=allow_adult), and refused clips are refunded, so a retry is cheap in money and expensive only in time. Image inputs: first_frame animates a still picture, reference_images keep a subject/style consistent — both accept a job_id of a completed image generation on this account, a public image URL, or inline base64 image data, and on omni-flash they can be combined (up to 10 images total). Example: {\"prompt\": \"drone shot over a misty pine forest at sunrise\", \"model\": \"veo-3.1-fast\", \"duration\": 8, \"resolution\": \"720p\", \"confirm_cost\": 0.70}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000},"model":{"type":"string","enum":["veo-3.1","veo-3.1-fast","veo-3.1-lite","omni-flash"],"default":"veo-3.1-fast"},"duration":{"type":"integer","enum":[3,4,5,6,7,8,9,10],"default":8,"description":"Clip length in seconds. Veo accepts only 4, 6 or 8; omni-flash accepts any value from 3 to 10."},"resolution":{"type":"string","enum":["720p","1080p","4k"],"default":"720p","description":"4k only on veo-3.1 / veo-3.1-fast; omni-flash is 720p only."},"aspect_ratio":{"type":"string","enum":["16:9","9:16"],"default":"16:9"},"with_audio":{"type":"boolean","default":false,"description":"Native audio for Veo models (costs more). omni-flash always has audio."},"audio_prompt":{"type":"string","maxLength":500,"description":"Describe the desired sound (used when audio is on)."},"negative_prompt":{"type":"string","maxLength":1000,"description":"What to avoid. On omni-flash it is appended to the prompt as plain text (the model has no separate negative field)."},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"description":"Veo only."},"first_frame":{"type":"string","description":"Start the clip from a still image, which is then animated. Either a job_id of a completed image generation on this account (see list_generations), a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL for a local file (max 10 MB; a bare local filesystem path cannot be read by this remote server). This includes a signed URL returned by get_result, which is how you pick one variant of a multi-image generation. On omni-flash it can be combined with reference_images; on Veo it cannot."},"reference_images":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Reference images that keep a subject, character or style consistent (they are NOT used as literal frames). Each item is a job_id of a completed image generation on this account, a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL. For a local file, pass a base64 data URL rather than its filesystem path. omni-flash: up to 10 images in total together with first_frame. Veo: at most 3, only with duration 8 and without first_frame."},"edit_from_generation_id":{"type":"string","description":"omni-flash only: job_id of a completed omni video to refine conversationally; prompt describes the changes. Duration, aspect ratio and the scene are inherited from that clip — duration is ignored here (use edit_video to shorten a clip)."},"relaxed_filter":{"type":"boolean","default":false,"description":"Veo only (omni-flash ignores it), and much weaker than its image counterpart: Google's video API exposes no configurable safety settings at all, so this flag can do only one thing — pin personGeneration=allow_adult, which is already the default for Veo 3.1 here. Expect it to change little. Video is filtered both before generation and again on the finished clip (rai_media_filtered_reasons), and neither check can be turned off. When a clip is refused, the levers that actually work are: retry (each run renders different footage, and failures are fully refunded), reword the people-related part of the prompt, or move an omni-flash idea to veo-3.1-fast, whose filter is noticeably looser."},"confirm_cost":{"type":"number","description":"The quoted USD cost you accept. Omit on the first call to get the quote."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"edit_video","description":"Edit an EXISTING video with Gemini Omni Flash (video-to-video): restyle it, replace or add objects, relight the scene, change the mood — motion and composition of the source clip are preserved. Billed by output length at $0.10/s; cost confirmation is mandatory (first call returns the quote and charges nothing). Source: either source_generation_id (a completed video from this account — see list_generations) or video_url (public http(s) link, max 200 MB). The source is normalised to MP4 720p and the FIRST 10 SECONDS (model limit); output is 720p with sound, aspect ratio follows the source. OUTPUT LENGTH ALWAYS EQUALS SOURCE LENGTH (the model cannot stretch or shorten a clip), so duration only works downwards: it trims the source to the first N seconds. Omit duration to edit the whole clip — the quote tells you the resolved length. Returns a job_id; poll get_result. Failed edits are auto-refunded. Example: {\"prompt\": \"make the whole scene look like a pencil sketch, keep the motion identical\", \"source_generation_id\": \"clx…\", \"confirm_cost\": 1}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000,"description":"What to change in the video."},"source_generation_id":{"type":"string","description":"job_id of a completed video generation on this account."},"video_url":{"type":"string","description":"Public http(s) URL of the source video (mp4/mov/webm/mkv/avi/wmv/flv/3gpp, max 200 MB). Use instead of source_generation_id."},"source_ref":{"type":"string","description":"Returned by the quote when video_url is used: pass it back with confirm_cost to reuse the already downloaded clip instead of downloading it again."},"duration":{"type":"integer","enum":[3,4,5,6,7,8,9,10],"description":"Optional: trim the source to the first N seconds and edit only that part ($0.10/s). Values above the source length are ignored — the clip cannot be made longer."},"audio_prompt":{"type":"string","maxLength":500,"description":"Describe the desired sound — Omni Flash always generates audio."},"confirm_cost":{"type":"number","description":"The quoted USD cost you accept. Omit on the first call to get the quote."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"generate_speech","description":"Generate natural speech with Gemini 3.1 Flash TTS Preview. This synchronous tool returns a hosted WAV URL directly (no get_result polling). Supports one voice or an exactly two-speaker dialogue, automatic language detection or a BCP-47 language_code, natural-language direction for accent/tone/pace, and inline performance tags such as [whispers], [laughs], [very slow] and [excited]. Price is $0.01 per started 200 transcript characters; the account is charged only after Google has returned valid audio. Example: {\"text\":\"[cheerfully] Welcome to BananaBanana!\",\"voice\":\"Kore\",\"style\":\"Warm product announcement, medium pace.\"}","inputSchema":{"type":"object","properties":{"text":{"type":"string","maxLength":6000,"description":"Exact transcript to speak. For dialogue, prefix every turn with the matching speaker name, e.g. Sam: Hello."},"style":{"type":"string","maxLength":1500,"description":"Optional overall direction: persona, scene, emotion, accent, pace, pronunciation and delivery notes."},"voice":{"type":"string","enum":["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Pulcherrima","Puck","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"],"default":"Kore","description":"Single-speaker voice. Ignored when speakers is provided."},"language_code":{"type":"string","description":"Optional language/locale such as en-US, ru-RU, ja-JP or es-MX. Omit for automatic detection."},"speakers":{"type":"array","minItems":2,"maxItems":2,"description":"Exactly two dialogue speakers. Their names must prefix the turns in text.","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40},"voice":{"type":"string","enum":["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Pulcherrima","Puck","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"]}},"required":["name","voice"],"additionalProperties":false}},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["text"],"additionalProperties":false}},{"name":"get_result","description":"Get the status and result of a generation job started with generate_image / edit_image / generate_video / edit_video. Waits up to wait_seconds for completion before returning (long-poll). On success returns hosted media URLs (valid 24 h — call again for fresh links), cost_charged_usd and balance_remaining_usd, plus a small inline preview for images. Free, no charge. Poll roughly every 10–15 s for videos.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string"},"wait_seconds":{"type":"integer","minimum":0,"maximum":30,"default":15,"description":"How long to wait server-side before answering."}},"required":["job_id"],"additionalProperties":false}},{"name":"list_generations","description":"List this account's recent generations (both MCP and website) — id, type, model, status, cost and prompt preview. Use it to find a job_id to re-download results or to pick a source for edit_image / edit_video / generate_video edit_from_generation_id. Free, no charge.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"type":{"type":"string","enum":["image","video"],"description":"Filter by media type."},"status":{"type":"string","enum":["processing","completed","failed"],"description":"Filter by status."}},"additionalProperties":false}}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"prompts_list":{"status":"ok","latency_ms":311.13,"details":{"url":"https://bananabanana.pro/mcp","payload":{"jsonrpc":"2.0","id":3,"result":{"prompts":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"prompt_get":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"resources_list":{"status":"ok","latency_ms":112.57,"details":{"url":"https://bananabanana.pro/mcp","payload":{"jsonrpc":"2.0","id":5,"result":{"resources":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"resource_read":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"determinism_probe":{"status":"ok","latency_ms":211.72,"details":{"attempts":2,"successful":2,"matches":2,"stable_ratio":1.0,"baseline_signature":"9035fbb5c6191034db948cfb0165b8b143c0fb6bbc79f2f3a1104473cd14133a","errors":[]}},"instruction_tool_reference_probe":{"status":"ok","latency_ms":null,"details":{"referenced_tools":[],"missing_tools":[],"observed_tool_count":10}},"session_resume_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_session_id","transport":"streamable-http","resume_expected":false,"protocol_version":null}},"step_up_auth_probe":{"status":"warning","latency_ms":null,"details":{"oauth_present":false,"auth_required_checks":["initialize"],"supported_scopes":[],"scope_specificity_ratio":0.0,"broad_scopes":[],"challenge_headers":["Bearer realm=\"bananabanana\", error_description=\"Authentication required. Connect this server with OAuth, or create an API key at https://bananabanana.pro/profile\", resource_metadata=\"https://bananabanana.pro/.well-known/oauth-protected-resource/mcp\", scope=\"mcp\""],"step_up_signals":["Bearer realm=\"bananabanana\", error_description=\"Authentication required. Connect this server with OAuth, or create an API key at https://bananabanana.pro/profile\", resource_metadata=\"https://bananabanana.pro/.well-known/oauth-protected-resource/mcp\", scope=\"mcp\""],"minimal_scope_documented":false}},"transport_compliance_probe":{"status":"error","latency_ms":208.96,"details":{"transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"requested_protocol_version":"2025-03-26","bad_protocol_status_code":200,"bad_protocol_payload":{"jsonrpc":"2.0","id":410,"result":{"tools":[{"name":"list_models","description":"List all available image, video and speech generation models with current per-unit USD prices, supported resolutions, durations and constraints. Prices come from the same source as the website — call this before quoting costs to a user or choosing a model. Free, no charge.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_account","description":"Get the current account balance (USD), this API key's name, optional daily spend cap and how much of it is used today. Free, no charge. Use it to check affordability before starting expensive generations. When the balance no longer covers even the cheapest image, the response also carries a ready-to-open top_up_url.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"top_up","description":"Get a balance top-up link. OAuth connections receive a one-time deposit-only link valid for 30 minutes; opening it cannot expose API keys, profile data or generation history. Bearer API-key users receive the normal profile link. Free, no charge.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"generate_image","description":"Start an AI image generation (Google Nano Banana family). Charges the account balance immediately and returns a job_id — poll get_result for the finished image URLs. Typical completion: 10–60 seconds. The default nano-banana-2-lite model is the cheapest option and produces 1024px images; choose nano-banana-2 explicitly for 512px, 2048px or 4096px output. Optional reference_images provide the model with the actual subject, product, character or style pixels; Nano Banana Pro supports up to 14 references. Costs $0.03–$0.20 per image depending on model and resolution (see list_models). Failed generations are automatically refunded. If a legitimate prompt is rejected by Google's content filter, retry with relaxed_filter: true. Generating several images at once (number_of_images > 1) is a batch: the first call returns a price quote and charges nothing — repeat the call with confirm_cost set to the quoted amount to start. Example: {\"prompt\": \"studio photo of a ceramic mug on linen, soft daylight\", \"model\": \"nano-banana-2-lite\", \"aspect_ratio\": \"4:5\", \"resolution\": \"1024\"}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000,"description":"What to generate. English works best."},"model":{"type":"string","enum":["nano-banana-2-lite","nano-banana-2","nano-banana-pro"],"default":"nano-banana-2-lite","description":"nano-banana-2-lite: cheapest default, 1024 only. nano-banana-2: choose for 512, 2048 or 4096 output. nano-banana-pro: top quality, up to 4K."},"aspect_ratio":{"type":"string","enum":["1:1","3:2","2:3","4:3","3:4","4:5","5:4","9:16","16:9","21:9"],"default":"1:1"},"resolution":{"type":"string","enum":["512","1024","2048","4096"],"default":"1024","description":"Lite requires 1024. Choose nano-banana-2 for 512, 2048 or 4096; 4096 costs the most."},"number_of_images":{"type":"integer","minimum":1,"maximum":4,"default":1,"description":"Variants per call. >1 requires confirm_cost."},"negative_prompt":{"type":"string","maxLength":1000},"output_format":{"type":"string","enum":["jpeg","png","webp"],"default":"jpeg"},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"description":"For reproducible results."},"reference_images":{"type":"array","items":{"type":"string"},"maxItems":14,"description":"Actual visual references for the generated image. Each item is a job_id of a completed image generation on this account, a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL (max 10 MB each). For a local file, read and base64-encode its bytes into a data URL; a bare local path such as C:\\\\photo.jpg cannot be read by this remote server."},"relaxed_filter":{"type":"boolean","default":false,"description":"Switch this call to Google's own permissive presets: safety thresholds OFF and person generation allowed for adults (safetySettings and personGeneration=ALLOW_ADULT — documented Vertex AI parameters, not a way around Google's rules). Google filters in two independent stages and this flag only affects the first: (1) a check on the request before anything is rendered — this is what refuses legitimate prompts about real-looking people, swimwear or sportswear, medical and anatomical subjects, mild fictional violence and edgy artwork (upstream_reason SAFETY_BLOCK), and it is the stage relaxed_filter relaxes; (2) a classifier that scores the finished image, which no parameter can switch off (upstream_reason IMAGE_SAFETY). Stage 2 judges the actual pixels and every run renders a different image, so a borderline but legitimate subject rejected there often passes on a plain retry or with slightly less ambiguous wording — retrying is reasonable (failures are fully refunded, so an attempt costs only time), just don't expect the flag itself to bypass that stage. What Google refuses outright — sexual content, minors, real public figures — stays blocked in every attempt. Both stages surface as error_code SAFETY_FILTERED; upstream_reason in get_result tells them apart."},"confirm_cost":{"type":"number","description":"Required for batches (number_of_images > 1): the quoted total USD cost you accept."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"edit_image","description":"Edit / refine a previously generated image with a text instruction on Nano Banana 2 Lite / 2 / Pro (multi-turn editing: change colors, remove objects, restyle, etc.). This tool modifies an image that already exists — use generate_image to create a new image from a prompt. Pass the job_id of a COMPLETED image generation as source_generation_id. Charged like a single image of the chosen model/resolution; auto-refund on failure. Example: {\"source_generation_id\": \"cmxyz...\", \"prompt\": \"make the background pure white and add soft shadow\"}","inputSchema":{"type":"object","properties":{"source_generation_id":{"type":"string","description":"job_id of a completed image generation owned by this account."},"prompt":{"type":"string","maxLength":2000,"description":"The edit instruction."},"model":{"type":"string","enum":["nano-banana-2-lite","nano-banana-2","nano-banana-pro"],"default":"nano-banana-2"},"aspect_ratio":{"type":"string","enum":["1:1","3:2","2:3","4:3","3:4","4:5","5:4","9:16","16:9","21:9"],"default":"1:1"},"resolution":{"type":"string","enum":["512","1024","2048","4096"],"default":"1024"},"output_format":{"type":"string","enum":["jpeg","png","webp"],"default":"jpeg"},"seed":{"type":"integer","minimum":0,"maximum":2147483647},"relaxed_filter":{"type":"boolean","default":false,"description":"Switch this call to Google's own permissive presets: safety thresholds OFF and person generation allowed for adults (safetySettings and personGeneration=ALLOW_ADULT — documented Vertex AI parameters, not a way around Google's rules). Google filters in two independent stages and this flag only affects the first: (1) a check on the request before anything is rendered — this is what refuses legitimate prompts about real-looking people, swimwear or sportswear, medical and anatomical subjects, mild fictional violence and edgy artwork (upstream_reason SAFETY_BLOCK), and it is the stage relaxed_filter relaxes; (2) a classifier that scores the finished image, which no parameter can switch off (upstream_reason IMAGE_SAFETY). Stage 2 judges the actual pixels and every run renders a different image, so a borderline but legitimate subject rejected there often passes on a plain retry or with slightly less ambiguous wording — retrying is reasonable (failures are fully refunded, so an attempt costs only time), just don't expect the flag itself to bypass that stage. What Google refuses outright — sexual content, minors, real public figures — stays blocked in every attempt. Both stages surface as error_code SAFETY_FILTERED; upstream_reason in get_result tells them apart."},"idempotency_key":{"type":"string","maxLength":64}},"required":["source_generation_id","prompt"],"additionalProperties":false}},{"name":"generate_video","description":"Start an AI video generation (Google Veo 3.1 family or Gemini Omni Flash). EXPENSIVE: $0.10–$4.40 per clip. Cost confirmation is mandatory: the first call always returns a USD quote and charges nothing — repeat the call with confirm_cost set to the quoted amount to actually start. Returns a job_id; poll get_result (videos take 1–10+ minutes). Failed generations are auto-refunded. Models: veo-3.1-fast (default, good quality/price), veo-3.1 (best Veo quality), veo-3.1-lite (cheapest, 720p/1080p), omni-flash (always has sound, any duration from 3 to 10 s at $0.10/s, supports conversational editing via edit_from_generation_id). Content filtering differs by model: omni-flash is by far the strictest, so a clip rejected as SAFETY_FILTERED on omni-flash is often produced by veo-3.1-fast without changing a word. Video has no configurable safety settings on Google's side (relaxed_filter is accepted for Veo but only pins its default personGeneration=allow_adult), and refused clips are refunded, so a retry is cheap in money and expensive only in time. Image inputs: first_frame animates a still picture, reference_images keep a subject/style consistent — both accept a job_id of a completed image generation on this account, a public image URL, or inline base64 image data, and on omni-flash they can be combined (up to 10 images total). Example: {\"prompt\": \"drone shot over a misty pine forest at sunrise\", \"model\": \"veo-3.1-fast\", \"duration\": 8, \"resolution\": \"720p\", \"confirm_cost\": 0.70}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000},"model":{"type":"string","enum":["veo-3.1","veo-3.1-fast","veo-3.1-lite","omni-flash"],"default":"veo-3.1-fast"},"duration":{"type":"integer","enum":[3,4,5,6,7,8,9,10],"default":8,"description":"Clip length in seconds. Veo accepts only 4, 6 or 8; omni-flash accepts any value from 3 to 10."},"resolution":{"type":"string","enum":["720p","1080p","4k"],"default":"720p","description":"4k only on veo-3.1 / veo-3.1-fast; omni-flash is 720p only."},"aspect_ratio":{"type":"string","enum":["16:9","9:16"],"default":"16:9"},"with_audio":{"type":"boolean","default":false,"description":"Native audio for Veo models (costs more). omni-flash always has audio."},"audio_prompt":{"type":"string","maxLength":500,"description":"Describe the desired sound (used when audio is on)."},"negative_prompt":{"type":"string","maxLength":1000,"description":"What to avoid. On omni-flash it is appended to the prompt as plain text (the model has no separate negative field)."},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"description":"Veo only."},"first_frame":{"type":"string","description":"Start the clip from a still image, which is then animated. Either a job_id of a completed image generation on this account (see list_generations), a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL for a local file (max 10 MB; a bare local filesystem path cannot be read by this remote server). This includes a signed URL returned by get_result, which is how you pick one variant of a multi-image generation. On omni-flash it can be combined with reference_images; on Veo it cannot."},"reference_images":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Reference images that keep a subject, character or style consistent (they are NOT used as literal frames). Each item is a job_id of a completed image generation on this account, a public http(s) image URL, or an inline data:image/png|jpeg|webp;base64,... URL. For a local file, pass a base64 data URL rather than its filesystem path. omni-flash: up to 10 images in total together with first_frame. Veo: at most 3, only with duration 8 and without first_frame."},"edit_from_generation_id":{"type":"string","description":"omni-flash only: job_id of a completed omni video to refine conversationally; prompt describes the changes. Duration, aspect ratio and the scene are inherited from that clip — duration is ignored here (use edit_video to shorten a clip)."},"relaxed_filter":{"type":"boolean","default":false,"description":"Veo only (omni-flash ignores it), and much weaker than its image counterpart: Google's video API exposes no configurable safety settings at all, so this flag can do only one thing — pin personGeneration=allow_adult, which is already the default for Veo 3.1 here. Expect it to change little. Video is filtered both before generation and again on the finished clip (rai_media_filtered_reasons), and neither check can be turned off. When a clip is refused, the levers that actually work are: retry (each run renders different footage, and failures are fully refunded), reword the people-related part of the prompt, or move an omni-flash idea to veo-3.1-fast, whose filter is noticeably looser."},"confirm_cost":{"type":"number","description":"The quoted USD cost you accept. Omit on the first call to get the quote."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"edit_video","description":"Edit an EXISTING video with Gemini Omni Flash (video-to-video): restyle it, replace or add objects, relight the scene, change the mood — motion and composition of the source clip are preserved. Billed by output length at $0.10/s; cost confirmation is mandatory (first call returns the quote and charges nothing). Source: either source_generation_id (a completed video from this account — see list_generations) or video_url (public http(s) link, max 200 MB). The source is normalised to MP4 720p and the FIRST 10 SECONDS (model limit); output is 720p with sound, aspect ratio follows the source. OUTPUT LENGTH ALWAYS EQUALS SOURCE LENGTH (the model cannot stretch or shorten a clip), so duration only works downwards: it trims the source to the first N seconds. Omit duration to edit the whole clip — the quote tells you the resolved length. Returns a job_id; poll get_result. Failed edits are auto-refunded. Example: {\"prompt\": \"make the whole scene look like a pencil sketch, keep the motion identical\", \"source_generation_id\": \"clx…\", \"confirm_cost\": 1}","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":2000,"description":"What to change in the video."},"source_generation_id":{"type":"string","description":"job_id of a completed video generation on this account."},"video_url":{"type":"string","description":"Public http(s) URL of the source video (mp4/mov/webm/mkv/avi/wmv/flv/3gpp, max 200 MB). Use instead of source_generation_id."},"source_ref":{"type":"string","description":"Returned by the quote when video_url is used: pass it back with confirm_cost to reuse the already downloaded clip instead of downloading it again."},"duration":{"type":"integer","enum":[3,4,5,6,7,8,9,10],"description":"Optional: trim the source to the first N seconds and edit only that part ($0.10/s). Values above the source length are ignored — the clip cannot be made longer."},"audio_prompt":{"type":"string","maxLength":500,"description":"Describe the desired sound — Omni Flash always generates audio."},"confirm_cost":{"type":"number","description":"The quoted USD cost you accept. Omit on the first call to get the quote."},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["prompt"],"additionalProperties":false}},{"name":"generate_speech","description":"Generate natural speech with Gemini 3.1 Flash TTS Preview. This synchronous tool returns a hosted WAV URL directly (no get_result polling). Supports one voice or an exactly two-speaker dialogue, automatic language detection or a BCP-47 language_code, natural-language direction for accent/tone/pace, and inline performance tags such as [whispers], [laughs], [very slow] and [excited]. Price is $0.01 per started 200 transcript characters; the account is charged only after Google has returned valid audio. Example: {\"text\":\"[cheerfully] Welcome to BananaBanana!\",\"voice\":\"Kore\",\"style\":\"Warm product announcement, medium pace.\"}","inputSchema":{"type":"object","properties":{"text":{"type":"string","maxLength":6000,"description":"Exact transcript to speak. For dialogue, prefix every turn with the matching speaker name, e.g. Sam: Hello."},"style":{"type":"string","maxLength":1500,"description":"Optional overall direction: persona, scene, emotion, accent, pace, pronunciation and delivery notes."},"voice":{"type":"string","enum":["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Pulcherrima","Puck","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"],"default":"Kore","description":"Single-speaker voice. Ignored when speakers is provided."},"language_code":{"type":"string","description":"Optional language/locale such as en-US, ru-RU, ja-JP or es-MX. Omit for automatic detection."},"speakers":{"type":"array","minItems":2,"maxItems":2,"description":"Exactly two dialogue speakers. Their names must prefix the turns in text.","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40},"voice":{"type":"string","enum":["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Pulcherrima","Puck","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"]}},"required":["name","voice"],"additionalProperties":false}},"idempotency_key":{"type":"string","maxLength":64,"description":"Optional unique key; retries with the same key never double-charge."}},"required":["text"],"additionalProperties":false}},{"name":"get_result","description":"Get the status and result of a generation job started with generate_image / edit_image / generate_video / edit_video. Waits up to wait_seconds for completion before returning (long-poll). On success returns hosted media URLs (valid 24 h — call again for fresh links), cost_charged_usd and balance_remaining_usd, plus a small inline preview for images. Free, no charge. Poll roughly every 10–15 s for videos.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string"},"wait_seconds":{"type":"integer","minimum":0,"maximum":30,"default":15,"description":"How long to wait server-side before answering."}},"required":["job_id"],"additionalProperties":false}},{"name":"list_generations","description":"List this account's recent generations (both MCP and website) — id, type, model, status, cost and prompt preview. Use it to find a job_id to re-download results or to pick a source for edit_image / edit_video / generate_video edit_from_generation_id. Free, no charge.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"type":{"type":"string","enum":["image","video"],"description":"Filter by media type."},"status":{"type":"string","enum":["processing","completed","failed"],"description":"Filter by status."}},"additionalProperties":false}}]}},"bad_protocol_headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"},"bad_protocol_error":null,"delete_status_code":null,"delete_error":null,"expired_session_status_code":null,"expired_session_error":null,"issues":["missing_protocol_header","bad_protocol_not_rejected"]}},"utility_coverage_probe":{"status":"ok","latency_ms":114.18,"details":{"completions":{"advertised":false,"sample_target":null,"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"auth_required","http_status":401},"initialize_capability_keys":[]}},"advanced_capabilities_probe":{"status":"warning","latency_ms":null,"details":{"capabilities":{"prompts":true,"resources":true,"completions":false,"roots":false,"sampling":false,"elicitation":false,"structured_outputs":false,"resource_links":false},"enabled_count":2,"enabled":["prompts","resources"],"initialize_capability_keys":[]}},"tool_snapshot_probe":{"status":"ok","latency_ms":null,"details":{"current_tool_count":10,"previous_tool_count":10,"similarity":1.0,"added":[],"removed":[],"changed_outputs":[]}},"connector_replay_probe":{"status":"ok","latency_ms":null,"details":{"backward_compatible":true,"would_break_after_refresh":false,"added_tools":[],"removed_tools":[],"required_arg_breaks":[],"output_breaks":[],"additive_output_changes":[]}},"request_association_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_request_association_capabilities_advertised"}},"interactive_flow_probe":{"status":"ok","latency_ms":null,"details":{"risk_hits":[],"safe_hits":["oauth"],"oauth_supported":false,"prompt_available":false}},"action_safety_probe":{"status":"ok","latency_ms":null,"details":{"summary":{"tool_count":10,"high_risk_tools":0,"destructive_tools":0,"exec_tools":0,"egress_tools":1,"secret_tools":0,"bulk_access_tools":0,"declared_non_read_only_tools":0,"annotation_conflict_tools":0,"risk_distribution":{"low":8,"medium":2,"high":0,"critical":0},"capability_distribution":{"read":8,"write":2,"financial":2,"network":1,"undetermined":1},"has_mutating_capability":true,"has_non_read_capability":true},"auth_present":true,"safeguard_count":3,"confirmation_signals":["generate_image","generate_video","edit_video","generate_speech","get_result","list_generations"],"reason":null}},"official_registry_probe":{"status":"missing","latency_ms":null,"details":{"registry_source":"github_topic_registry","direct_match":false,"official_peer_count":0}},"provenance_divergence_probe":{"status":"not_assessed","latency_ms":null,"details":{"direct_official_match":false,"registry_title":null,"server_card_title":"BananaBanana Image & Video Generation","registry_version":null,"server_card_version":"1.0.5","registry_homepage":null,"server_card_homepage":null,"registry_repository":null,"server_card_repository":"https://github.com/bananabanana-pro-mcp/bananabanana-mcp","drift_fields":[],"metadata_document_count":2,"compared_fields":["title","version","homepage","repository"],"readable_sources":["server_card"],"comparable_field_count":0}},"schema_divergence_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_server_card_tools","compared_tool_count":0,"compared_dimensions":["server_name","server_version","declared_vs_observed_auth","tool_membership","parameter_names","required_parameters","parameter_types","output_schema_presence"],"server_name_mismatch":false,"card_server_name":null,"live_server_name":null,"server_version_mismatch":false,"card_server_version":null,"live_server_version":null,"auth_scheme_mismatch":false}},"connector_publishability_probe":{"status":"warning","latency_ms":null,"details":{"transport":"streamable-http","tool_count":10,"high_risk_tools":0,"blockers":["protocol_version","session_resume","step_up_auth","transport_compliance","request_association","auth_flow"],"criteria":{"remote_transport":true,"initialize":true,"tools_list":true,"protocol_version":false,"session_resume":false,"step_up_auth":false,"transport_compliance":false,"connector_replay":true,"request_association":false,"action_safety":true,"server_card":true,"tool_surface":true,"auth_flow":false}}}}},"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded","message":"The server is reachable but at least one important behavior regressed.","addressee":"publisher"}],"maintainer_analytics":{},"public_server_reputation":{},"maintainer_response_quality":{},"maintainer_annotations":[],"maintainer_rebuttals":[],"security_posture_summary":{},"tool_security_inventory":[],"transport_compliance":{},"utility_coverage":{},"write_action_governance":{},"provenance_divergence":{},"alias_consolidation":{},"alert_routing":{},"authenticated_validation":{},"hosted_runtime":{},"action_controls_diff":null,"benchmark_tasks":[],"latest_capability_counts":{},"point_loss_breakdown":[],"verdict_traces":{},"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_356e6d5ae8c560b7","generated_at":"2026-08-28T13:34:09.983854+00:00","trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","source":"current_snapshot","server":"github-bananabanana-pro-mcp/bananabanana-mcp","last_validated_at":"2026-08-28T10:41:13.400838+00:00","validation_age_hours":2.88,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-28T10:41:13.400838+00:00","age_hours":2.88,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":52.42,"raw_score":52.42,"confidence_score":95.0,"confidence_weighted_score":49.8,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"degraded","current_score":52.42,"display_score":52.42,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"degraded live status + score below evaluation threshold","next_action":"revalidate, add safeguards, export policy","reason_count":2},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first."},"evidence_confidence":{"score":95.0,"label":"high","validation_age_hours":2.88,"live_check_count":15,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded"}],"active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"}},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_356e6d5ae8c560b7","generated_at":"2026-08-28T13:34:09.983854+00:00","trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","source":"current_snapshot","server":"github-bananabanana-pro-mcp/bananabanana-mcp","last_validated_at":"2026-08-28T10:41:13.400838+00:00","validation_age_hours":2.88,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-28T10:41:13.400838+00:00","age_hours":2.88,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":52.42,"raw_score":52.42,"confidence_score":95.0,"confidence_weighted_score":49.8,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"degraded","current_score":52.42,"display_score":52.42,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"degraded live status + score below evaluation threshold","next_action":"revalidate, add safeguards, export policy","reason_count":2},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first."},"evidence_confidence":{"score":95.0,"label":"high","validation_age_hours":2.88,"live_check_count":15,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded"}],"active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"}},"agent_commerce":{},"latest_claim":null,"maintainer_profile_slug":null,"watch_summary":{},"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"},"owner_opted_out":false},"latest_validation":null,"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_356e6d5ae8c560b7","generated_at":"2026-08-28T13:34:09.983854+00:00","trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","source":"current_snapshot","server":"github-bananabanana-pro-mcp/bananabanana-mcp","last_validated_at":"2026-08-28T10:41:13.400838+00:00","validation_age_hours":2.88,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-28T10:41:13.400838+00:00","age_hours":2.88,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":52.42,"raw_score":52.42,"confidence_score":95.0,"confidence_weighted_score":49.8,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"degraded","current_score":52.42,"display_score":52.42,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"degraded live status + score below evaluation threshold","next_action":"revalidate, add safeguards, export policy","reason_count":2},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first."},"evidence_confidence":{"score":95.0,"label":"high","validation_age_hours":2.88,"live_check_count":15,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded"}],"active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"}},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_356e6d5ae8c560b7","generated_at":"2026-08-28T13:34:09.983854+00:00","trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","source":"current_snapshot","server":"github-bananabanana-pro-mcp/bananabanana-mcp","last_validated_at":"2026-08-28T10:41:13.400838+00:00","validation_age_hours":2.88,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-28T10:41:13.400838+00:00","age_hours":2.88,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":52.42,"raw_score":52.42,"confidence_score":95.0,"confidence_weighted_score":49.8,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"degraded","current_score":52.42,"display_score":52.42,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"degraded live status + score below evaluation threshold","next_action":"revalidate, add safeguards, export policy","reason_count":2},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first."},"evidence_confidence":{"score":95.0,"label":"high","validation_age_hours":2.88,"live_check_count":15,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded"}],"active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"}},"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"snapshot_invariant":{"schema_version":"verify.snapshot_invariant.v1","server":"github-bananabanana-pro-mcp/bananabanana-mcp","ok":true,"surface_snapshot_ids":{"page":"trustsnap_356e6d5ae8c560b7","badge":null,"report":"trustsnap_356e6d5ae8c560b7","policy":null},"checked_surfaces":["page","report"],"unchecked_surfaces":["badge","policy"],"checked_count_surfaces":[],"count_mismatches":{},"checked_at":"2026-08-28T13:34:09.974383+00:00"},"history":{},"production_readiness":{"code":"needs_remediation","label":"Needs remediation","reason":"Current validation evidence shows operational or discovery gaps that should be fixed first.","badge":"score-low","critical_alerts":0,"high_or_critical_alerts":0,"degraded_by_active_alerts":false},"agent_commerce_readiness":{},"evidence_confidence":{"score":95.0,"label":"high","reason":"Based on 20 recent validations, 15 captured checks, and validation age of 2.9 hours.","live_check_count":15,"validation_age_hours":2.88,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":15,"validation_age_hours":2.88,"freshness_threshold_hours":24}},"recommended_for":[],"active_alerts":[{"code":"server_degraded","severity":"medium","title":"Latest validation is degraded","message":"The server is reachable but at least one important behavior regressed.","addressee":"publisher"}],"remediations":[],"cache_note":"Fast fallback response; full report evidence is deferred to protect web capacity. Fields listed in fields_unavailable (including tool_security_inventory, and write_action_governance) are not yet computed on this response -- an empty value means unchecked, not confirmed clean. Treat partial responses as indeterminate.","publisher_claim":{"verified":false,"status":"unclaimed","claim_url":"https://verify.sentinelsignal.io/claim?server=github-bananabanana-pro-mcp%2Fbananabanana-mcp&source=report_json","reason_code":"claim_to_publish_metadata","reason":"Claim this profile to verify publisher identity, add evidence, and manage trust metadata.","score_neutral":true},"observed_attention":{"schema":"verify.observed_attention.v1","window_days":30,"level":"none","label":"No observed attention","summary":"No recent machine-readable trust or discovery activity observed for this server.","segments":{"useful_ai_user":{"level":"none","observed":false,"description":"AI-assisted user sessions such as ChatGPT/User or Claude/User."},"machine_trust_evaluator":{"level":"none","observed":false,"description":"Synthetic sessions inspecting multiple trust surfaces such as report, policy, ledger, badge, trust-summary, or compare."},"possible_agent_or_script":{"level":"none","observed":false,"description":"Structured direct sessions with rapid profile, compare, report, policy, badge, or trust-surface fan-out."},"isolated_machine_surface":{"level":"none","observed":false,"description":"Aged-out direct synthetic singleton sessions that touched a machine-readable trust surface without becoming a broader evaluator."},"ai_crawler":{"level":"none","observed":false,"description":"Known AI crawler activity such as ClaudeBot, GPTBot, or similar crawlers."},"search_crawler":{"level":"none","observed":false,"description":"Search and SEO crawler activity."},"browser_like_automation":{"level":"none","observed":false,"description":"Browser-like synthetic sessions with rapid structured endpoint activity."},"confirmed_human":{"level":"none","observed":false,"description":"Confirmed browser-session human activity."}},"surfaces_observed":{"server_profile":false,"compare":false,"compare_json":false,"compare_api":false,"report_json":false,"policy":false,"ledger":false,"badge_metadata":false,"badge_svg":false,"trust_summary":false,"mcp_tool":false},"claim_prompt":{"recommended":false,"reason":"No claim prompt is recommended from observed attention in the current window."},"notes":["Observed attention is based on segmented first-party telemetry.","Crawler and evaluator activity is not treated as confirmed human demand.","Public levels are bucketed to avoid exposing raw traffic counts."]},"owner_activation":{"claim_recommended":false,"reason":"no_observed_attention"},"related_machine_surfaces":{"compare_index":"/compare.json","compare_api":"/v1/compare?server=github-bananabanana-pro-mcp%2Fbananabanana-mcp","trust_summary":"/v1/servers/github-bananabanana-pro-mcp/bananabanana-mcp/trust-summary","ledger":"/v1/servers/github-bananabanana-pro-mcp/bananabanana-mcp/ledger","policy":"/v1/servers/github-bananabanana-pro-mcp/bananabanana-mcp/policy","report":"/v1/servers/github-bananabanana-pro-mcp/bananabanana-mcp/report"},"intelligence_api":{"available":true,"signup_url":"https://verify.sentinelsignal.io/verify-intelligence-api","use_case":"Programmatic MCP server trust, comparison, policy, and evidence enrichment."},"trust_evaluated_at":"2026-08-28T13:34:09.983854+00:00","evidence_revision":"b27673c06f5c1e8f0b733fc2","active_alert_summary":{"critical":0,"high":0,"medium":1,"low":0,"high_or_critical":0,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-28T13:34:09.983854+00:00"}}