{
  "live": {
    "slug": "eden-ai",
    "probe": {
      "target": "https://mcp.edenai.run/mcp",
      "method": "get",
      "lastAt": "2026-11-07T19:22:04.810042763Z",
      "lastOk": true,
      "lastStatus": 405,
      "lastMs": 58,
      "authRequired": false,
      "uptime24h": 100,
      "uptime30d": 100,
      "p50ms24h": 50,
      "p95ms24h": 129,
      "samples24h": 210,
      "samples30d": 210,
      "days": [
        {
          "date": "2026-11-06",
          "probes": 13,
          "ok": 13
        },
        {
          "date": "2026-11-07",
          "probes": 197,
          "ok": 197
        }
      ]
    },
    "securityTxt": {
      "url": "https://edenai.co/.well-known/security.txt",
      "state": "none",
      "checkedAt": "2026-11-07T15:59:41.694549385Z"
    },
    "llmsTxt": {
      "url": "https://www.edenai.co/llms.txt",
      "ok": true,
      "status": 200,
      "checkedAt": "2026-11-07T15:32:20.299431316Z"
    },
    "pages": [
      {
        "url": "https://www.edenai.co/privacy",
        "kind": "privacy",
        "status": 200,
        "checkedAt": "2026-11-07T14:28:13.706474894Z",
        "changedAt": "0001-01-01T00:00:00Z",
        "fingerprint": "21a1da47a2ce"
      },
      {
        "url": "https://www.edenai.co/terms",
        "kind": "terms",
        "status": 200,
        "checkedAt": "2026-11-07T14:28:15.881335606Z",
        "changedAt": "0001-01-01T00:00:00Z",
        "fingerprint": "9cd0db8f0f61"
      }
    ],
    "mcpTools": {
      "url": "https://mcp.edenai.run/mcp",
      "checkedAt": "2026-11-07T01:44:01.27972989Z",
      "status": "ok",
      "protocol": "2025-11-25",
      "tools": [
        {
          "name": "list_models",
          "description": "List available providers/models and their pricing.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "tool": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Optional tool name (as returned by tools/list) to filter on."
              }
            },
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        {
          "name": "list_voices",
          "description": "List the voices a text-to-speech model accepts, for audio_tts's 'voice'.\n\nThe model's default voice comes first.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "gender": {
                "anyOf": [
                  {
                    "enum": [
                      "female",
                      "male",
                      "unknown"
                    ],
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Keep voices of this gender."
              },
              "language": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "Keep voices speaking this language: 'fr' matches every region,\n'fr-CA' only that locale. Multilingual voices are always kept."
              },
              "limit": {
                "default": 50,
                "description": "Most voices to return (default 50, max 200); 'total' counts every match.",
                "type": "integer"
              },
              "model": {
                "description": "The audio_tts model, as 'provider' or 'provider/model' (e.g. 'amazon/neural').",
                "type": "string"
              }
            },
            "required": [
              "model"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        {
          "name": "upload_file",
          "description": "Upload a file to Eden AI and get a file ID to use in other tools.\n\nOnly needed for local file content. If you already have a public URL\nfor the file, pass that URL directly to the tool's file parameter\ninstead — no upload needed.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "content_base64": {
                "description": "The file content, base64-encoded.",
                "type": "string"
              },
              "expires_in_days": {
                "default": 30,
                "description": "How long Eden AI keeps the file (1-30, default 30).",
                "type": "integer"
              },
              "filename": {
                "description": "Name with extension (used to detect the file type).",
                "type": "string"
              }
            },
            "required": [
              "content_base64",
              "filename"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        {
          "name": "check_job",
          "description": "Get the status/result of an async job started by a long-running tool.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "job_id": {
                "description": "The job id returned when the job was submitted.",
                "type": "string"
              }
            },
            "required": [
              "job_id"
            ],
            "type": "object"
          },
          "outputSchema": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        {
          "name": "manage_collections",
          "description": "Create and manage collections: stored sets of items (e.g. faces) that a tool searches against. Tools that take a collection_id: image_face_recognition. Flow: create, then add_item once per file (returns the item ids it indexed), then call the tool with the collection_id; delete when done. Arguments per action: create(model, tool?, name?); list(tool?, model?, page?); get, delete, list_items(collection_id); add_item(collection_id, file); delete_item(collection_id, item_id).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "action": {
                "enum": [
                  "create",
                  "list",
                  "get",
                  "delete",
                  "add_item",
                  "list_items",
                  "delete_item"
                ],
                "type": "string"
              },
              "collection_id": {
                "description": "From create or list.",
                "type": "string"
              },
              "file": {
                "description": "File to add (add_item). Pass a file ID (UUID) from upload_file, or a direct file URL.",
                "type": "string"
              },
              "item_id": {
                "description": "Item to delete (delete_item), from add_item or list_items.",
                "type": "string"
              },
              "model": {
                "description": "Provider the collection binds to (create; list filter). image_face_recognition: amazon.",
                "type": "string"
              },
              "name": {
                "description": "Optional label (create).",
                "type": "string"
              },
              "page": {
                "description": "Result page (list).",
                "minimum": 1,
                "type": "integer"
              },
              "tool": {
                "description": "Tool the collection serves (create; list filter). Defaults to image_face_recognition.",
                "enum": [
                  "image_face_recognition"
                ],
                "type": "string"
              }
            },
            "required": [
              "action"
            ],
            "type": "object"
          }
        },
        {
          "name": "audio_speech_to_text",
          "description": "Speech Recognition (or speech to text or voice to text) can recognize and transcribe spoken words (voice),  that will be converted to text with or without diarization. It is also possible to filter profanity. The type of files allowed are: mp3, wav, m4a. If convert_to_wav option is set to true, then you can transcribe any type of audio or video files. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Audio file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: audio/*.",
                "type": "string"
              },
              "language": {
                "description": "Language code in ISO format (e.g., 'en', 'fr', 'es')",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, assembly, deepgram, deepgram/base, deepgram/enhanced, deepgram/nova-3, gladia, google, gradium, gradium/stt-translate, greenpt, greenpt/green-s, greenpt/green-s-pro, microsoft, mistral, mistral/voxtral-mini-2602, mistral/voxtral-mini-latest, mistral/voxtral-mini-transcribe-3, mistral/voxtral-small-transcribe-3, openai. Call list_models for pricing.",
                "type": "string"
              },
              "profanity_filter": {
                "default": false,
                "description": "Whether to filter profanity and replace inappropriate words with a series of asterisks",
                "type": "boolean"
              },
              "speakers": {
                "default": 2,
                "description": "Number of speakers present in the audio",
                "minimum": 1,
                "type": "integer"
              },
              "vocabulary": {
                "description": "List of words or composed words to be detected by the speech to text engine",
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "audio_tts",
          "description": "Text-to-speech (TTS) is a technology that converts written text into spoken audio, enabling computers and digital devices to \"read\" text aloud.  It is also known as speech synthesis, read aloud technology, or computer-generated speech.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "audio_format": {
                "description": "Desired audio format (e.g., 'mp3', 'wav')",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon/neural, amazon/standard, deepgram/aura, deepgram/aura-2, elevenlabs, elevenlabs/eleven_flash_v2, elevenlabs/eleven_flash_v2_5, elevenlabs/eleven_multilingual_v2, elevenlabs/eleven_turbo_v2, elevenlabs/eleven_turbo_v2_5, elevenlabs/eleven_v3, google/casual, google/chirp-hd, google/chirp3-hd, google/gemini-2.5-flash-tts, google/gemini-2.5-pro-tts, google/gemini-3.1-flash-tts-preview, google/neural2, google/news, google/polyglot, google/standard, google/studio, google/wavenet, gradium, microsoft/neural, microsoft/neural-hd, mistral/voxtral-mini-tts-3, openai/gpt-4o-mini-tts, openai/tts-1, openai/tts-1-hd, ovhcloud/nvr-tts-de-de, ovhcloud/nvr-tts-en-us, ovhcloud/nvr-tts-es-es, ovhcloud/nvr-tts-it-it. Call list_models for pricing.",
                "type": "string"
              },
              "speaking_pitch": {
                "description": "Increase or decrease the speaking pitch by a percentage from -100% to 100%, 0 is normal.",
                "maximum": 100,
                "minimum": -100,
                "type": "integer"
              },
              "speaking_volume": {
                "description": "Increase or decrease the audio volume by a percentage from -100% to 100%, 0 is normal.",
                "maximum": 100,
                "minimum": -100,
                "type": "integer"
              },
              "speed": {
                "description": "Speed multiplier for speech synthesis",
                "maximum": 4,
                "minimum": 0.25,
                "type": "number"
              },
              "text": {
                "description": "Text to convert to speech",
                "minLength": 1,
                "type": "string"
              },
              "voice": {
                "description": "Voice to synthesize with: an id or name from list_voices(model=...), matched case-insensitively. Omit it to use the model's default voice. An id the list doesn't know (e.g. your own cloned voice) is sent to the provider unchanged.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_ai_detection",
          "description": "Determine whether an image was generated by AI or is a real photograph or artwork. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: resemble, winstonai. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_anonymization",
          "description": "Image Anonymization API, also known as image de-identification or image de-personalization, refers to the process of automatically removing personal or sensitive information from images. The main objective is to protect the privacy and security of individuals who may be depicted in images shared online or used for research purposes. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: api4ai. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_background_removal",
          "description": "Background removal is a digital image processing technique designed to seamlessly eliminate the backdrop of a photo, leaving behind only the main subject. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: api4ai, clipdrop, photoroom, picsart, sentisight, stabilityai. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_deepfake_detection",
          "description": "Detect whether a face in a real photo has been swapped or manipulated (face-swap deepfakes). For fully AI-generated images, use AI Image Detection instead. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: resemble, sightengine. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_explicit_content",
          "description": "Explicit Content Detection detects adult only content in images, that is generally inappropriate for people under the age of 18 and includes nudity, sexual activity, pornography, violence, gore content, etc. (type of files allowed: jpg, jpeg, png, tiff) File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, google, microsoft, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_face_compare",
          "description": "Compare two faces and decide whether they are from the same person. The API expects 2 images, reference and query, where the former is the ground truth (e.g. user's official ID) and the latter is the validation image (e.g. a selfie). File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file1": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "file2": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, base64, facepp. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file1",
              "file2"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_face_detection",
          "description": "Face Detection is a computer technology being used in a variety of applications that identifies human faces in digital images with different attributes like landmarks, sentiments and physical attire (type of file allowed: jpg, jpeg, png, tiff) File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, api4ai, google. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_face_recognition",
          "description": "Recognizing a face in an image is a more advanced feature than just detecting the face in the image. It allows the user to search for the detected face from a database of existing images and extract the faces that are most similar to the face displayed in the query image. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "collection_id": {
                "description": "Id of one of your collections. Make one with manage_collections (action='create', then add_item for each file to search against); action='list' shows the ones you have. 'model' must be the collection's provider.",
                "type": "string"
              },
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "collection_id",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_generation",
          "description": "Image Generation is an advanced feature that generates compelling images based on a given text prompt. It can easily produce high-quality and original images in a matter of seconds, without the need for specialized design skills or software File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "mask": {
                "description": "Optional inpainting mask. Must be paired with at least one reference image (otherwise the request returns 422). Support varies by model; models that do not accept a mask surface the error as status=\"fail\" with a provider message in the response body. Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: bytedance, bytedance/seedream-4-0-250828, bytedance/seedream-4-5-251128, bytedance/seedream-5-0-260128, google, google/gemini-2.5-flash-image, google/gemini-3-pro-image-preview, infomaniak/flux, ionos/black-forest-labs/FLUX.1-schnell, ionos/black-forest-labs/FLUX.2-klein-4B, leonardo, leonardo/AlbedoBase XL, leonardo/Leonardo Anime XL, leonardo/Leonardo Diffusion XL, leonardo/Leonardo Kino XL, leonardo/Leonardo Lightning XL, leonardo/Leonardo Phoenix, leonardo/Leonardo Vision XL, leonardo/SDXL 0.9, minimax, minimax/image-01, openai, openai/gpt-image-1, openai/gpt-image-1-mini, openai/gpt-image-1.5, openai/gpt-image-2, ovhcloud/stable-diffusion-xl-base-v10, pruna/p-image, pruna/p-image-edit, pruna/p-image-ideogram, pruna/p-image-ideogram-low, pruna/p-image-ideogram-medium, pruna/p-image-ideogram-very-high, pruna/p-image-ideogram-very-low, replicate, replicate/anime-style, replicate/classic, replicate/vintedois-diffusion, stabilityai, stabilityai/stable-diffusion-xl-1024-v1-0. Call list_models for pricing.",
                "type": "string"
              },
              "num_images": {
                "default": 1,
                "description": "Number of images to generate",
                "maximum": 10,
                "minimum": 1,
                "type": "integer"
              },
              "reference_images": {
                "description": "Optional reference images. Plain file IDs/URLs are treated as ReferenceImage with kind=None. Support and per-model limits vary by model; models that do not accept reference images surface the error as status=\"fail\" with a provider message in the response body.",
                "items": {},
                "maxItems": 64,
                "type": "array"
              },
              "resolution": {
                "description": "Image resolution as a named size (e.g. '1024x1024'). Optional: providers may also accept native sizing knobs (width/height, aspect_ratio, image_size tier, etc.) in the top-level `provider_params` request field, next to `input` rather than inside it, in which case `provider_params` takes precedence.",
                "pattern": "^\\d+x\\d+$",
                "type": "string"
              },
              "text": {
                "description": "Text prompt for image generation",
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_logo_detection",
          "description": "Logo Detection is a powerful technology that enables the automatic identification and recognition of popular logos within an image. It provides accurate and efficient detection of known (and less known) brand logos. It's a valuable tool for a variety of industries, including advertising, retail, and e-commerce. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: api4ai, api4ai/v1, api4ai/v2, google, microsoft, openai, openai/gpt-4-turbo, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "image_object_detection",
          "description": "Object Detection is a computer vision technique that allows users to identify and locate (with bounding boxes) objects in an image. The detected objects can be animals, people, electronics, vehicles etc. (type of file allowed: jpg, jpeg, png, tiff) File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, api4ai, google, microsoft, sentisight. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr",
          "description": "Optical Character Recognition or Reader (OCR) is the electronic or mechanical conversion of images of typed, handwritten or printed text into machine-encoded text. The image can be a scanned document or a photo of a license plate, a road sign or anything else that contains text (type of files allowed: jpg, jpeg, png, tiff) . File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "PDF or image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: application/pdf, image/*.",
                "type": "string"
              },
              "language": {
                "description": "Document language code. Most providers detect the language themselves and ignore this field; providers that cannot detect it reject requests that omit it. Check the provider's supported languages before relying on it.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, api4ai, google, ionos, ionos/lightonai/LightOnOCR-2-1B, microsoft, mistral, mistral/mistral-ocr-2512, mistral/mistral-ocr-3, mistral/mistral-ocr-3-0, mistral/mistral-ocr-4, mistral/mistral-ocr-4-0, mistral/mistral-ocr-4-1, mistral/mistral-ocr-latest, sentisight. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr_async",
          "description": "OCR or Optical Character Recognition is also referred to as text recognition or text extraction. It allows users to extract text data from PDFs with multiple pages. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "PDF or image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: application/pdf, image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, microsoft, mistral, mistral/mistral-ocr-2512, mistral/mistral-ocr-3, mistral/mistral-ocr-3-0, mistral/mistral-ocr-4, mistral/mistral-ocr-4-0, mistral/mistral-ocr-4-1, mistral/mistral-ocr-latest. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr_financial_parser",
          "description": "Financial Parser API is a powerful and versatile tool designed to streamline your financial data extraction process. This cutting-edge API combines Optical Character Recognition (OCR) technology with advanced parsing capabilities to seamlessly extract and organize relevant information from invoices and receipts. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "document_type": {
                "default": "invoice",
                "description": "Specify the type of your document. Can be set to 'auto-detect' for automatic detection if the provider supports it.",
                "enum": [
                  "auto-detect",
                  "invoice",
                  "receipt"
                ],
                "type": "string"
              },
              "file": {
                "description": "File ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*, application/*, text/*.",
                "type": "string"
              },
              "language": {
                "description": "Document language code. Most providers detect the language themselves and ignore this field; providers that cannot detect it reject requests that omit it. Check the provider's supported languages before relying on it.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: affinda, amazon, base64, eagledoc, extracta, google, klippa, microsoft, mindee, openai, openai/gpt-4o, tabscanner, veryfi. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr_identity_parser",
          "description": "ID Document parsing technology allows users to automatically extract information from an ID Document such as passport, ID card, driving license and more. This API is ideal for developers looking to create applications that require identity verification or access control. It extracts information like name, date of birth, nationality, age and more. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "PDF or image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: application/pdf, image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: affinda, amazon, base64, klippa, microsoft, mindee, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr_resume_parser",
          "description": "Resume Parser enables users to extract various information from resumes (curriculum vitae, CV) that could be in a variety of formats and returns structured data (name, job list, education, skills) to automate their processing. (type of files allowed: pdf, jpg, jpeg, png) File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "File ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/*, application/*, text/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: affinda, extracta, klippa, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "ocr_tables",
          "description": "OCR Table (Optical Character Recognition for tabular documents)  allows users to analyze documents containing tables and returns a structured representation of the detected tables in the form of a Json object that can be converted to a CSV. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "PDF or image file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: application/pdf, image/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, google, microsoft. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_ai_detection",
          "description": "The AI Detection API is a tool designed to determine whether a given text was generated by an artificial intelligence chatbot, or a Language Model (LLM).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: sapling, winstonai. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to analyze for AI detection, at least 300 characters long. Shorter texts carry too little signal to be scored reliably.",
                "minLength": 300,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_anonymization",
          "description": "The personally identifiable information (PII) detection feature can identify and redact sensitive information in unstructured text. For example: phone numbers, email addresses, and forms of identification. Removing these personally identifiable information helps with the Anonymization of a text and privacy protection.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "language": {
                "description": "ISO 639-1 language code",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, limina, microsoft. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to detect personal information in",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_moderation",
          "description": "Text moderation scans text for offensive, sexually explicit or suggestive content, it also checks if there is any content of self-harm, violence, racist or hate speech.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "language": {
                "description": "ISO 639-1 language code",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: google, microsoft, openai, openai/text-moderation-007, openai/text-moderation-latest, openai/text-moderation-stable, ovhcloud/Qwen3Guard-Gen-0.6B, ovhcloud/Qwen3Guard-Gen-8B. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to moderate",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_named_entity_recognition",
          "description": "Named Entity Recognition (also called entity identification or extraction) is an information extraction technique that automatically identifies named entities in a text and classifies them into predefined categories such as dates, persons names, company names, dates, products etc.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "language": {
                "description": "ISO 639-1 language code",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, microsoft, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to analyze for named entities",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_plagia_detection",
          "description": "The Plagiarism Detection API is a tool designed to scan a content string for plagiarism using a plagiarism detection module",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: winstonai. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text content on which plagiarism detection will be run",
                "minLength": 1,
                "type": "string"
              },
              "title": {
                "description": "Content title",
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_spell_check",
          "description": "Spell Check analyzes the inputted text by comparing it to a dictionary of correctly spelled words to identify and highlight any spelling errors or grammatical mistakes.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "language": {
                "description": "ISO 639-1 language code",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: prowritingaid, sapling. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to be spell-checked",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "text_topic_extraction",
          "description": "Topic analysis is a Natural Language Processing (NLP) technique that allows us to automatically extract meaning from text by identifying recurrent themes or topics.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "language": {
                "description": "ISO 639-1 language code",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: google, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              },
              "text": {
                "description": "Text to analyze for topics",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "translation_automatic_translation",
          "description": "Automatic translation or machine translation (MT) is the process of automatically translating a text from one language to another language. The aim of it is to enable people to communicate and access information in different languages, without the need for a human translator.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: amazon, deepl, google, microsoft, modernmt, openai, openai/gpt-4o. Call list_models for pricing.",
                "type": "string"
              },
              "source_language": {
                "description": "Source language code",
                "minLength": 1,
                "type": "string"
              },
              "target_language": {
                "description": "Target language code",
                "minLength": 1,
                "type": "string"
              },
              "text": {
                "description": "Text to translate",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "text",
              "target_language"
            ],
            "type": "object"
          }
        },
        {
          "name": "translation_document_translation",
          "description": "Document Translation API translates whole documents in supported languages and various file formats (like pdf or doc) while keeping their structure intact. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Document file ID from /v3/upload or direct file URL (PDF, DOCX, PPTX) Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.presentationml.presentation.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: deepl, google. Call list_models for pricing.",
                "type": "string"
              },
              "source_language": {
                "description": "Source language code",
                "minLength": 1,
                "type": "string"
              },
              "target_language": {
                "description": "Target language code",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "file",
              "target_language"
            ],
            "type": "object"
          }
        },
        {
          "name": "video_deepfake_detection",
          "description": "Detect deepfake and synthetically manipulated video. Returns an overall deepfake score and prediction, along with per-frame scores when the provider supplies them. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "file": {
                "description": "Video file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: video/*.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: resemble. Call list_models for pricing.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "file"
            ],
            "type": "object"
          }
        },
        {
          "name": "video_generation",
          "description": "The Video Generation API enables easy creation of high-quality videos from text,and images, perfect for marketing, education, and more—all through one integration. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'. File parameters accept a file ID from upload_file or a direct file URL — if you already have a URL, pass it as-is (no upload needed).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "dimension": {
                "default": "1280x720",
                "description": "Video resolution in 'widthxheight' format (e.g., '1280x720')",
                "pattern": "^\\d+x\\d+$",
                "type": "string"
              },
              "duration": {
                "description": "Length of the generated video in seconds. Omit to use the model's default duration.",
                "maximum": 120,
                "minimum": 1,
                "type": "integer"
              },
              "file": {
                "description": "Initial keyframe image (JPEG or PNG) file ID from /v3/upload or direct file URL Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: image/jpeg, image/png.",
                "type": "string"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: bytedance, bytedance/dreamina-seedance-2-0-260128, bytedance/dreamina-seedance-2-0-fast-260128, bytedance/dreamina-seedance-2-0-mini-260615, bytedance/dreamina-seedance-2-5-260628, bytedance/seedance-1-0-pro-250528, bytedance/seedance-1-0-pro-fast-251015, bytedance/seedance-1-5-pro-251215, minimax, minimax/MiniMax-Hailuo-02, minimax/MiniMax-Hailuo-2.3, minimax/S2V-01, minimax/T2V/I2V-01-Director, openai, openai/sora-2, openai/sora-2-pro, pixverse, pixverse/c1, pixverse/v5, pixverse/v5.5, pixverse/v6, pruna, pruna/p-video, pruna/p-video-2, pruna/p-video-2-pro, pruna/p-video-2-pro-cost, pruna/p-video-2-pro-quality, pruna/p-video-animate, pruna/p-video-avatar, pruna/p-video-edit, xai/grok-imagine-video-1.5, xai/grok-imagine-video-1.5-lite. Call list_models for pricing.",
                "type": "string"
              },
              "seed": {
                "description": "Random seed for generation reproducibility (0 to 2,147,483,646). Omit for varied output.",
                "maximum": 2147483646,
                "minimum": 0,
                "type": "integer"
              },
              "text": {
                "description": "Text prompt describing the content and style of the video to generate",
                "minLength": 1,
                "type": "string"
              },
              "video": {
                "description": "Source video to edit, for models that edit a video (their `requires_video` is true in /v3/info). The output keeps the source's length, which is what is billed, so `duration` and `dimension` do not apply to them. Other models refuse it. Pass a file ID (UUID) from upload_file, or a direct file URL. Accepted types: video/*.",
                "type": "string"
              }
            },
            "required": [
              "model",
              "text"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_batch_scrape",
          "description": "Scrape many URLs in one request and return each page's content. Runs as an async job. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: firecrawl. Call list_models for pricing.",
                "type": "string"
              },
              "urls": {
                "description": "Explicit list of URLs to scrape (async job)",
                "items": {
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "model",
              "urls"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_crawl",
          "description": "Crawl a site from a starting URL and return the content of its pages. Runs as an async job. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: firecrawl, tavily. Call list_models for pricing.",
                "type": "string"
              },
              "url": {
                "description": "Root URL to crawl (async job)",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "url"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_map",
          "description": "Discover and return the list of URLs on a site (a sitemap-style link map).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: firecrawl, tavily. Call list_models for pricing.",
                "type": "string"
              },
              "url": {
                "description": "Root URL to map (discover its links)",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "url"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_research",
          "description": "Run deep, multi-step web research on a query and return a synthesized answer with sources. Runs as an async job. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: firecrawl, linkup, tavily. Call list_models for pricing.",
                "type": "string"
              },
              "prompt": {
                "description": "Natural-language research task for the agent",
                "minLength": 1,
                "type": "string"
              },
              "reasoning_depth": {
                "default": "L",
                "description": "Research reasoning-effort tier (billed per tier; priced pre-call)",
                "enum": [
                  "S",
                  "M",
                  "L",
                  "XL"
                ],
                "type": "string"
              },
              "schema": {
                "description": "JSON schema describing the structured output",
                "type": "object"
              }
            },
            "required": [
              "model",
              "prompt"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_scraping",
          "description": "Fetch a single URL and return its clean content as markdown, text, or HTML, with optional JavaScript rendering.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: deepseek, firecrawl, linkup, tavily. Call list_models for pricing.",
                "type": "string"
              },
              "url": {
                "description": "URL of the web page to scrape",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "url"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_search",
          "description": "Search the web for a query and return ranked results (title, URL, and a snippet or the page content).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "depth": {
                "default": "standard",
                "description": "Search depth tier. `deep` is refused with a 400 on deepseek, perplexityai and zai, which run one tier only.",
                "enum": [
                  "standard",
                  "deep"
                ],
                "type": "string"
              },
              "max_results": {
                "description": "Max number of search results to return",
                "minimum": 1,
                "type": "integer"
              },
              "model": {
                "description": "Which provider/model to run, exactly one of: deepseek, firecrawl, linkup, perplexityai, tavily, zai. Call list_models for pricing.",
                "type": "string"
              },
              "query": {
                "description": "The web search query",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "model",
              "query"
            ],
            "type": "object"
          }
        },
        {
          "name": "web_structured_extraction",
          "description": "Extract structured data from one or more web pages against a schema or prompt. Runs as an async job. Long-running: returns a job immediately; poll it with check_job(job_id) every few seconds until status is 'success' or 'fail'.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "model": {
                "description": "Which provider/model to run, exactly one of: firecrawl. Call list_models for pricing.",
                "type": "string"
              },
              "prompt": {
                "description": "Natural-language description of what to extract",
                "type": "string"
              },
              "schema": {
                "description": "JSON schema describing the structured output",
                "type": "object"
              },
              "urls": {
                "description": "URLs to extract structured data from (async job)",
                "items": {
                  "type": "string"
                },
                "minItems": 1,
                "type": "array"
              }
            },
            "required": [
              "model",
              "urls"
            ],
            "type": "object"
          }
        }
      ],
      "schemaTokens": 10725,
      "changedAt": "2026-11-07T01:44:01.27972989Z",
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 10725,
        "counts": {
          "error": 0,
          "note": 1,
          "warn": 49
        },
        "findings": [
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "manage_collections",
            "message": "1 parameter without a description: action",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC12",
            "severity": "warn",
            "tool": "image_generation",
            "message": "no type for reference_images[]",
            "fix": "Give every parameter a type (or an enum)."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "web_research",
            "message": "schema (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "web_structured_extraction",
            "message": "schema (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "image_face_recognition",
            "message": "allowed values are in the description, not an enum: collection_id",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC14",
            "severity": "warn",
            "tool": "image_generation",
            "message": "allowed values are in the description, not an enum: resolution",
            "fix": "Move them into enum."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "audio_speech_to_text",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "audio_tts",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "check_job",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"check\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_ai_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_anonymization",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_background_removal",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_deepfake_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_explicit_content",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_face_compare",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_face_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_face_recognition",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_generation",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_logo_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "image_object_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_models",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_voices",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "manage_collections",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr_async",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr_financial_parser",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr_identity_parser",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr_resume_parser",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "ocr_tables",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_ai_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_anonymization",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_moderation",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_named_entity_recognition",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_plagia_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_spell_check",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"check\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "text_topic_extraction",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "translation_automatic_translation",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "translation_document_translation",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "upload_file",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "video_deepfake_detection",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "video_generation",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_batch_scrape",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_crawl",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_map",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_research",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_scraping",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_search",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "web_structured_extraction",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC23",
            "severity": "warn",
            "message": "42 tools",
            "fix": "Offer a smaller default toolset and let clients opt into the rest."
          },
          {
            "rule": "TC24",
            "severity": "note",
            "message": "38 of 42 tools have no outputSchema",
            "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
          }
        ]
      }
    },
    "updatedAt": "2026-11-07T19:22:04.810042763Z"
  },
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "live": true,
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "note": "Live from anchor-server.",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "snapshotAt": "2026-11-07T19:23:29Z",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "slug": "eden-ai"
}
