# 370.ai — AI Gateway: 100+ Chat Models, Image & Speech Generation

> One key, 100+ models: chat with any LLM, generate images and speech. Live model list. Free trial.

- name: ai.router/ai-gateway
- version: 1.0.1
- connection class: R1 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 68/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.router%2Fai-gateway
- tools: https://api.protogrid.dev/v1/servers/ai.router%2Fai-gateway/tools

**An agent can connect on its own if it already holds `AI_GATEWAY_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ai-gateway": {
      "type": "http",
      "url": "https://mcp.router.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${AI_GATEWAY_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${AI_GATEWAY_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-17d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 68/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: chat (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); text_to_speech (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_models (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 690 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 690 tokens to load them all
- tool set hash: d0f32e24852c0628e830238be9179970
- tools last changed: 2026-10-03T11:54:08.526Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.router/ai-gateway.svg)](https://protogrid.dev/servers/ai.router/ai-gateway)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-03 `text_to_speech` changed (description, outputSchema) **meaning changed**
  - before: Convert text to spoken audio. Returns a status with byte size. Args: text: the text to speak. voice: ⚠️ 当前默认模型 (qwen3-tts-flash) **忽略 OpenAI 音色名** —— alloy / echo / fable / onyx / nova / shimmer 六个会被统一改写成同一个音色, 传哪个都得到逐字节相同的音频。要真正换音色请传上游音色名 (如 Cherry / Ethan)。
  - after: Convert text to spoken audio. Billed per input character on your key. Args: text: the text to speak. voice: voice id. The OpenAI voice names (alloy / echo / fable / onyx / nova / shimmer) are accepted, but on the default model they are all mapped to the same default voice, so they sound identical. To pick a different voice, pass a voice id supported by the model (for the default model, e.g. Cherry or Ethan). Returns a short status line plus the generated audio as an audio content block (mimeType as returned by the gateway, e.g. audio/mpeg).
- 2026-10-03 `list_models` changed (description)
  - before: List the AI models available on 370.ai (chat / image / video / audio). Free, no billing.
  - after: List every model id your API key can call on 370.ai (chat / image / video / audio). Free, no billing.

Full history: https://api.protogrid.dev/v1/servers/ai.router%2Fai-gateway/changes

## Remotes

- https://mcp.router.ai/mcp (streamable-http, auth api_key ${AI_GATEWAY_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (4)

- `chat`: Ask any text/chat model on 370.ai (Claude / GPT / Gemini / DeepSeek / Qwen / ...) and get its reply.

    Use this when you want a **specific or different** model than your own — e.g. consult Claude while you run on
    GPT, use a cheaper model for bulk work, or reach a model you don't have direct access to. One key, 100+ models.
    Call list_models to see the full catalog of model ids.

    Args:
        prompt: the user message / question.
        model: model id to call (see list_models). Empty = a fast cheap default.
        system: optional system instruction to steer the model.
        max_tokens: optional cap on output length (omit to let the model decide).
        temperature: optional sampling temperature 0..2 (omit for the model's default).
    Returns the model's text reply.
    
- `generate_image`: Generate an image from a text prompt. Use whenever the user wants a picture/illustration/photo created.

    Args:
        prompt: description of the image (English works best).
        size: 1024x1024 (square) / 1024x1536 (portrait) / 1536x1024 (landscape).
    Returns the generated PNG image.
    
- `list_models`: List every model id your API key can call on 370.ai (chat / image / video / audio). Free, no billing.
- `text_to_speech`: Convert text to spoken audio. Billed per input character on your key.

    Args:
        text:  the text to speak.
        voice: voice id. The OpenAI voice names (alloy / echo / fable / onyx / nova / shimmer) are
               accepted, but on the default model they are all mapped to the same default voice, so
               they sound identical. To pick a different voice, pass a voice id supported by the model
               (for the default model, e.g. Cherry or Ethan).
    Returns a short status line plus the generated audio as an audio content block
    (mimeType as returned by the gateway, e.g. audio/mpeg).
    
