Skip to main content
Glama

AIsa Web Search & Research

Sonar

post_perplexity_sonar
Destructive

Ask a question and get a written answer with web citations, rather than a list of links to read yourself. Body is OpenAI chat-completions shaped: model (required, sonar) and messages. Returns choices[0].message.content as prose, plus citations (an array of URL strings) and search_results[] with title, url, snippet, date and source, and a usage block. Measured at about 3 seconds. This is the cheapest and fastest of the four Perplexity endpoints — use it for a single factual question. Step up to post_perplexity_sonar_pro for multi-part questions, or post_perplexity_sonar_reasoning_pro when the answer requires working through steps. If you need results you can iterate over rather than prose, use post_tavily_search;

Usage-based billing; Default request estimate: $0.12783 USD (not a fixed price). Account-specific pricing and final settlement may differ.

Input Schema

NameRequiredDescriptionDefault
bodyYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / body
      Added value: +{
      +  "properties": {
      +    "frequency_penalty": {
      +      "default": 1,
      +      "description": "Penalizes new tokens based on their existing frequency in the text so far. Positive values decrease the likelihood of repeating the same line verbatim.",
      +      "maximum": 2,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "max_tokens": {
      +      "description": "The maximum number of tokens to generate in the response.",
      +      "type": "integer"
      +    },
      +    "messages": {
      +      "description": "A list of messages comprising the conversation so far.",
      +      "items": {
      +        "properties": {
      +          "content": {
      +            "description": "The content of the message.",
      +            "type": "string"
      +          },
      +          "role": {
      +            "description": "The role of the message author.",
      +            "enum": [
      +              "system",
      +              "user",
      +              "assistant"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "role",
      +          "content"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "model": {
      +      "description": "The Sonar model to use.",
      +      "enum": [
      +        "sonar",
      +        "sonar-pro",
      +        "sonar-reasoning-pro",
      +        "sonar-deep-research"
      +      ],
      +      "type": "string"
      +    },
      +    "presence_penalty": {
      +      "default": 0,
      +      "description": "Penalizes new tokens based on whether they appear in the text so far. Positive values increase the likelihood of talking about new topics.",
      +      "maximum": 2,
      +      "minimum": -2,
      +      "type": "number"
      +    },
      +    "return_citations": {
      +      "default": true,
      +      "description": "Whether to return citations and search results in the response.",
      +      "type": "boolean"
      +    },
      +    "search_context": {
      +      "default": "low",
      +      "description": "Controls how much search context to use. Affects per-request cost.",
      +      "enum": [
      +        "low",
      +        "medium",
      +        "high"
      +      ],
      +      "type": "string"
      +    },
      +    "search_domain_filter": {
      +      "description": "Limit search to specific domains.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "search_recency_filter": {
      +      "description": "Filter search results by recency.",
      +      "enum": [
      +        "month",
      +        "week",
      +        "day",
      +        "hour"
      +      ],
      +      "type": "string"
      +    },
      +    "stream": {
      +      "default": false,
      +      "description": "Whether to stream the response using server-sent events.",
      +      "type": "boolean"
      +    },
      +    "temperature": {
      +      "default": 0.2,
      +      "description": "Sampling temperature between 0 and 2. Lower values make output more focused and deterministic.",
      +      "maximum": 2,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "top_k": {
      +      "default": 0,
      +      "description": "The number of tokens to keep for top-k filtering.",
      +      "maximum": 2048,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "top_p": {
      +      "default": 0.9,
      +      "description": "Nucleus sampling parameter. The model considers tokens with top_p probability mass.",
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "model",
      +    "messages"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / frequency_penalty
      Removed value: -{
      -  "default": 1,
      -  "description": "Penalizes new tokens based on their existing frequency in the text so far. Positive values decrease the likelihood of repeating the same line verbatim.",
      -  "maximum": 2,
      -  "minimum": 0,
      -  "type": "number"
      -}
    • removedInput schema / properties / max_tokens
      Removed value: -{
      -  "description": "The maximum number of tokens to generate in the response.",
      -  "type": "integer"
      -}
    • removedInput schema / properties / messages
      Removed value: -{
      -  "description": "A list of messages comprising the conversation so far.",
      -  "items": {
      -    "properties": {
      -      "content": {
      -        "description": "The content of the message.",
      -        "type": "string"
      -      },
      -      "role": {
      -        "description": "The role of the message author.",
      -        "enum": [
      -          "system",
      -          "user",
      -          "assistant"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "role",
      -      "content"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / model
      Removed value: -{
      -  "description": "The Sonar model to use.",
      -  "enum": [
      -    "sonar",
      -    "sonar-pro",
      -    "sonar-reasoning-pro",
      -    "sonar-deep-research"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / presence_penalty
      Removed value: -{
      -  "default": 0,
      -  "description": "Penalizes new tokens based on whether they appear in the text so far. Positive values increase the likelihood of talking about new topics.",
      -  "maximum": 2,
      -  "minimum": -2,
      -  "type": "number"
      -}
    • removedInput schema / properties / return_citations
      Removed value: -{
      -  "default": true,
      -  "description": "Whether to return citations and search results in the response.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / search_context
      Removed value: -{
      -  "default": "low",
      -  "description": "Controls how much search context to use. Affects per-request cost.",
      -  "enum": [
      -    "low",
      -    "medium",
      -    "high"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / search_domain_filter
      Removed value: -{
      -  "description": "Limit search to specific domains.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / search_recency_filter
      Removed value: -{
      -  "description": "Filter search results by recency.",
      -  "enum": [
      -    "month",
      -    "week",
      -    "day",
      -    "hour"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / stream
      Removed value: -{
      -  "default": false,
      -  "description": "Whether to stream the response using server-sent events.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / temperature
      Removed value: -{
      -  "default": 0.2,
      -  "description": "Sampling temperature between 0 and 2. Lower values make output more focused and deterministic.",
      -  "maximum": 2,
      -  "minimum": 0,
      -  "type": "number"
      -}
    • removedInput schema / properties / top_k
      Removed value: -{
      -  "default": 0,
      -  "description": "The number of tokens to keep for top-k filtering.",
      -  "maximum": 2048,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedInput schema / properties / top_p
      Removed value: -{
      -  "default": 0.9,
      -  "description": "Nucleus sampling parameter. The model considers tokens with top_p probability mass.",
      -  "maximum": 1,
      -  "minimum": 0,
      -  "type": "number"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "model",
      -  "messages"
      -]New value: +[
      +  "body"
      +]
  2. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds valuable context beyond the annotations: ~3 second latency, that it is the cheapest/fastest of the four Perplexity endpoints, and the full response shape (choices[0].message.content, citations array, search_results fields, usage block). It does not discuss the odd destructiveHint=true annotation, auth needs, or rate limits, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core capability and output form, then routing guidance, then cost. Dense but nearly every sentence is load-bearing; the response-field enumeration is slightly long given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-body parameter tool with an output schema, annotations, and sibling alternatives, the description covers purpose, output shape, latency, cost, and routing. Nothing an agent needs to choose or invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The top-level 'body' parameter has no schema description (coverage reported as 0%), and the description compensates by explaining the body is OpenAI chat-completions shaped with `model` (required, `sonar`) and `messages`. Nested properties are documented in the schema itself, so this is above baseline without being exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and output form: 'Ask a question and get a written answer with web citations, rather than a list of links to read yourself.' That last clause sharply distinguishes it from link-returning siblings like post_tavily_search, and it names the resource family (Sonar/Perplexity) explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: 'use it for a single factual question,' step up to post_perplexity_sonar_pro for multi-part questions, 'post_perplexity_sonar_reasoning_pro' when steps are needed, and post_tavily_search when you need iterable results. This is a full when/when-not/alternative map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources