[
  {
    "provider": "openai",
    "name": "web_search",
    "type": "web_search",
    "category": "hosted",
    "description": "Hosted web search (Responses API)",
    "compatible_models": ["gpt-5.4-nano", "gpt-5.4"],
    "compatible_endpoints": ["POST /v1/responses"],
    "status": ["DOCUMENTED"],
    "security": "Results are untrusted third-party content; no allowed_domains parameter (use filters.allowed_domains where documented)."
  },
  {
    "provider": "openai",
    "name": "mcp",
    "type": "mcp",
    "category": "mcp",
    "description": "Remote MCP server / connector tool",
    "compatible_models": ["gpt-5.4-nano"],
    "compatible_endpoints": ["POST /v1/responses"],
    "status": ["DOCUMENTED"],
    "security": "require_approval (default: always), allowed_tools, authorization token never stored by OpenAI"
  },
  {
    "provider": "anthropic",
    "name": "web_search",
    "type": "web_search_20250305",
    "category": "server",
    "description": "Server-side web search",
    "compatible_models": ["claude-haiku-4-5-20251001", "claude-opus-4-1-20250805"],
    "compatible_endpoints": ["POST /v1/messages"],
    "status": ["DOCUMENTED"],
    "security": "allowed_domains XOR blocked_domains, max_uses, user_location"
  },
  {
    "provider": "anthropic",
    "name": "web_fetch",
    "type": "web_fetch_20250910",
    "category": "server",
    "description": "Server-side URL fetch (URL must already appear in conversation)",
    "compatible_models": ["claude-haiku-4-5-20251001"],
    "compatible_endpoints": ["POST /v1/messages"],
    "status": ["DOCUMENTED"],
    "security": "allowed_domains / blocked_domains, max_uses, max_content_tokens, url_not_in_prior_context rule"
  },
  {
    "provider": "anthropic",
    "name": "code_execution",
    "type": "code_execution_20250825",
    "category": "server",
    "description": "Sandboxed Python/bash container without internet access",
    "compatible_models": ["claude-haiku-4-5-20251001"],
    "compatible_endpoints": ["POST /v1/messages"],
    "status": ["DOCUMENTED"]
  },
  {
    "provider": "xai",
    "name": "Web Search",
    "type": "web_search",
    "category": "server",
    "description": "xAI-hosted web browsing (Responses API only)",
    "compatible_models": ["grok-4.3"],
    "compatible_endpoints": ["POST /v1/responses"],
    "status": ["DOCUMENTED", "LIVE_VERIFIED"],
    "security": "allowed_domains XOR excluded_domains (≤ 5 each); URLs surfaced in url_citation annotations; $5 per 1k successful calls"
  },
  {
    "provider": "xai",
    "name": "Remote MCP",
    "type": "mcp",
    "category": "mcp",
    "description": "xAI calls a remote MCP server (Streamable HTTP / SSE); no approval round-trip",
    "compatible_models": ["grok-4.3"],
    "compatible_endpoints": ["POST /v1/responses"],
    "status": ["DOCUMENTED", "LIVE_VERIFIED"],
    "security": "HTTPS only; `authorization` and `headers` are forwarded to the server by xAI; restrict with allowed_tools; require_approval is ignored"
  },
  {
    "provider": "gemini",
    "name": "Grounding with Google Search",
    "type": "googleSearch",
    "category": "server",
    "description": "tools[].googleSearch — server-side web grounding",
    "compatible_models": ["gemini-3.8-flash", "gemini-3.5-flash-lite"],
    "compatible_endpoints": ["POST /v1beta/models/{model}:generateContent", "POST /v1beta/models/{model}:streamGenerateContent", "POST /v1beta/interactions"],
    "status": ["DOCUMENTED", "ACCOUNT_RESTRICTED"],
    "security": "Search Suggestions (searchEntryPoint) must be displayed; results are untrusted third-party content; prompts/outputs stored 30 days"
  },
  {
    "provider": "gemini",
    "name": "URL context",
    "type": "urlContext",
    "category": "server",
    "description": "tools[].urlContext — fetches public URLs found in the prompt (≤ 20)",
    "compatible_models": ["gemini-3.8-flash"],
    "compatible_endpoints": ["POST /v1beta/models/{model}:generateContent"],
    "status": ["DOCUMENTED", "LIVE_VERIFIED"],
    "security": "public URLs only (no localhost/private ranges/tunnels); URL_RETRIEVAL_STATUS_UNSAFE on moderation failure; fetched content billed as input tokens"
  }
]
