{"server":{"name":"io.github.ModelsLab/modelslab","title":"ModelsLab","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://modelslab.com/mcp/v7","type":"streamable-http","headers":[{"name":"Authorization","value":"Bearer {api_key}","isSecret":true,"variables":{"api_key":{"isSecret":true,"isRequired":true,"description":"ModelsLab API key from https://modelslab.com/dashboard/api-keys"}},"isRequired":true,"description":"ModelsLab API key from https://modelslab.com/dashboard/api-keys"}]}],"version":"1.0.0","repository":{"url":"https://github.com/ModelsLab/modelslab-mcp","source":"github"},"websiteUrl":"https://docs.modelslab.com/mcp-web-api/overview","description":"Generate images, video, speech and music, and run LLM chat, across 10,000+ models on ModelsLab."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-02T09:52:35.726007Z","publishedAt":"2026-10-02T09:52:35.726007Z","statusChangedAt":"2026-10-02T09:52:35.726007Z"},"dev.protogrid/connectability":{"class":"R2","autonomous":false,"human_steps":["oauth_consent_once"],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://modelslab.com/mcp/v7","transport":"streamable-http","templated":false,"headers":[{"name":"Authorization","required":true,"secret":true,"value":"Bearer {api_key}","secret_names":["api_key"]}],"auth":{"type":"oauth2","location":{"header":"Authorization","scheme":"Bearer"},"secret_name":null,"oauth":{"scopes":["mcp:use"],"grant_types":["authorization_code","refresh_token"],"dcr_supported":true,"cimd_supported":false,"authorization_servers":["https://modelslab.com/oauth"],"resource_metadata_url":"https://modelslab.com/.well-known/oauth-protected-resource/mcp/v7","code_challenge_methods":["S256"],"authorization_server_metadata_url":"https://modelslab.com/.well-known/oauth-authorization-server/oauth"}},"protocol":{"supported_versions":[],"stateless":null},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":219,"consecutive_failures":0,"last_probe_at":"2026-10-19T11:29:16.927Z","last_ok_at":"2026-10-19T11:29:16.927Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"chat-completion","title":"Chat Completion","description":"    Chat with AI language models.\n    Send messages to an LLM and receive AI-generated responses.\n    Supports various models and configuration options.\n    A message may carry a PDF as a {\"type\":\"file\",\"file\":{\"filename\":...,\"file_data\":\"data:application/pdf;base64,...\"}} content part.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"dubbing","title":"Dubbing","description":"    Create dubbed audio content.\n    Takes a video and translates/dubs the audio from one language to another.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"fetch-audio","title":"Fetch Audio Result","description":"    Retrieve the status and results of an audio generation request.\n    Use the request ID returned from text-to-speech, speech-to-text, music-generation, and other audio tools.","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"fetch-generation","title":"Fetch Generation Status","description":"    Check the status of a queued or processing generation request on the ModelsLab V7 API.\n\n    Use this tool when a generation tool returns a `status` of `\"processing\"`, and call it again\n    while the status stays `\"processing\"`. Image jobs usually finish in seconds; video and music\n    jobs can take several minutes, so tell the user the job is still running if it has not\n    finished after a few polls.\n\n    Pass the `id` from the original generation response and the `type` matching the category\n    of the original request (e.g. \"images\" for text-to-image, image-to-image, or inpaint-image).\n\n    The response will contain:\n    - `status`: \"success\", \"processing\", or \"error\"\n    - `output`: array of URLs when status is \"success\"","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"fetch-image","title":"Fetch Image Result","description":"    Retrieve the status and results of an image generation request.\n    Use the request ID returned from text-to-image, image-to-image, or inpaint-image tools.","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"fetch-video","title":"Fetch Video Result","description":"    Retrieve the status and results of a video generation request.\n    Use the request ID returned from text-to-video, image-to-video, video-to-video, lip-sync, or motion-control tools.","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"image-to-image","title":"Image to Image","description":"    Transform existing images based on text prompts.\n    Takes an input image and modifies it according to the provided prompt.\n    Returns a request ID that can be used with fetch-image to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"image-to-video","title":"Image to Video","description":"    Animate static images into videos.\n    Takes input image(s) and creates a video based on the prompt.\n    Returns a request ID that can be used with fetch-video to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"inpaint-image","title":"Inpaint Image","description":"    Edit specific areas of images using masks.\n    Provide an image, a mask indicating the area to edit, and a prompt describing the desired changes.\n    Returns a request ID that can be used with fetch-image to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"lip-sync","title":"Lip Sync","description":"    Sync video with audio for lip movements.\n    Takes a video and audio file and syncs the lip movements to match the audio.\n    Returns a request ID that can be used with fetch-video to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"list-models","title":"List Models","description":"    List available AI models on the ModelsLab platform.\n    Filter by category (imagen, video, audio, llm, 3d), provider, tags, and more.\n    Returns model IDs that can be used with generation tools.","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"list-providers","title":"List Providers","description":"    List all available model providers on the ModelsLab platform.\n    Returns provider names with model counts for each.\n    Use provider names to filter models in the list-models tool.","annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"motion-control","title":"Motion Control","description":"    Control motion in video generation.\n    Uses an image and video to create motion-controlled output.\n    Returns a request ID that can be used with fetch-video to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"music-generation","title":"Music Generation","description":"    Create music from text prompts.\n    Generates original music based on your description, optional tags, and lyrics.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"song-extender","title":"Song Extender","description":"    Extend existing music tracks.\n    Takes an existing audio file and extends it from either the beginning or end.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"song-inpaint","title":"Song Inpaint","description":"    Edit specific sections of songs.\n    Takes an audio file and regenerates a specific section defined by start and end times.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"sound-generation","title":"Sound Generation","description":"    Generate sound effects from text descriptions.\n    Creates audio sound effects based on your prompt.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"speech-to-speech","title":"Speech to Speech","description":"    Voice conversion and transformation.\n    Takes an audio file and converts it to a different voice.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"speech-to-text","title":"Speech to Text","description":"    Transcribe audio to text.\n    Takes an audio file and converts it to text transcription.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"text-to-image","title":"Text to Image","description":"    Generate images from text prompts using AI models.\n    Returns a request ID that can be used with fetch-image to retrieve results.\n    Supports various AI image generation models.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"text-to-speech","title":"Text to Speech","description":"    Convert text to natural speech audio.\n    Takes text and generates realistic speech using the specified voice.\n    Returns a request ID that can be used with fetch-audio to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"text-to-video","title":"Text to Video","description":"    Generate videos from text descriptions.\n    Creates AI-generated videos based on your text prompt.\n    Returns a request ID that can be used with fetch-video to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"},{"name":"video-to-video","title":"Video to Video","description":"    Transform existing videos with AI.\n    Takes input video(s) and modifies them based on the prompt.\n    Returns a request ID that can be used with fetch-video to retrieve results.","annotations":{"openWorldHint":true},"source":"probe","observed_at":"2026-10-06T04:23:17.904Z"}],"dev.protogrid/trust":{"score":93,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":90},"drivers":["+repository","+namespace-matches-repo","+website","+reachable","+uptime-100%","+updated-17d-ago","-duplicate-repo(3 names)"],"flags":["duplicate-repo"],"blocked":false,"computed_at":"2026-10-19T12:42:35.393Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":85,"label":"good","components":{"auth":83,"hygiene":79,"protocol":null,"stability":100,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.stateless","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"protocol.list_ttl","detail":"no remote answered a protocol handshake (not probed yet, unreachable, or local-only)","status":"na","category":"protocol"},{"id":"auth.prm","detail":"Protected Resource Metadata (RFC 9728) published","status":"pass","category":"auth"},{"id":"auth.as_metadata","detail":"authorization server metadata reachable","status":"pass","category":"auth"},{"id":"auth.cimd","detail":"only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD","status":"warn","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"only 6 of 23 tools declare readOnlyHint or destructiveHint","status":"warn","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: fetch-image (destructiveHint, idempotentHint, openWorldHint); text-to-video (readOnlyHint, destructiveHint, idempotentHint); motion-control (readOnlyHint, destructiveHint, idempotentHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 5,894 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"2 tool changes in 30 days","status":"pass","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.directory_hints","~auth.cimd","~tools.annotations"],"flags":[],"tool_count":23,"token_estimate":5894,"tools_hash":"e8b035ba099de7bf9a11e3762dae3d91","tools_changed_at":"2026-10-05T10:51:45.857Z","computed_at":"2026-10-19T12:32:38.253Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"io.github.ModelsLab/modelslab","aliases":["io.github.ModelsLab/modelslab-agents","io.github.ModelsLab/modelslab-v8"],"alias_count":2,"repository_key":"github:modelslab/modelslab-mcp","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/io.github.ModelsLab%2Fmodelslab/tools","arguments":{"name":"io.github.ModelsLab/modelslab"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/io.github.ModelsLab%2Fmodelslab/connection?target=mcpServers","arguments":{"name":"io.github.ModelsLab/modelslab","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}