Yavio

Platform Detection

How Yavio identifies which AI platform is calling your MCP server

Yavio automatically detects which AI platform is connecting to your MCP server. This powers per-platform analytics, allowing you to compare tool usage and conversion rates across ChatGPT, Claude, Cursor, and other MCP clients.

How it works

Platform detection runs a layered heuristic against signals from the MCP transport connection. The first match wins:

PrioritySignalDescription
1clientNameClient name from the MCP initialize handshake
2userAgentHTTP User-Agent header (HTTP transports, via the request's requestInfo)
3originHTTP Origin header (HTTP transports, via the request's requestInfo)
4—Falls back to "unknown"

All matching is case-insensitive substring matching (except zed, which requires an exact name to avoid false positives). Specific product names are matched before the generic vendor patterns they contain — claude-code before claude, gemini-cli before gemini, and cursor before vscode (Cursor identifies as cursor-vscode).

Supported platforms

PlatformMatched patternReal-world identity
chatgptchatgpt, openaiChatGPT apps and connectors; also via openai.com / chatgpt.com origin
codexcodexOpenAI Codex sends codex-mcp-client
claudeclaude, anthropicclaude.ai and Claude Desktop both send claude-ai; also via claude.ai / anthropic.com origin
claude-codeclaude-codeClaude Code sends claude-code
cursorcursorCursor sends cursor-vscode
geminigeminiGoogle Gemini app and Enterprise connector; also via gemini.google.com origin
gemini-cligemini-cliGemini CLI sends gemini-cli-mcp-client
opencodeopencodeopencode sends opencode
vscodevscode, visual studio codeVS Code MCP clients (e.g. Copilot agent mode)
windsurfwindsurf, codeiumWindsurf (formerly Codeium)
clineclineCline sends @cline/core
continuecontinueContinue sends continue-client
zedzed (exact), zed/ prefixZed sends Zed
unknown—No recognised signal, including clients that send no usable identity (e.g. the Python SDK default mcp)

When detection runs

  • On connection: platform is detected when a client connects and stored for the session
  • On tool call: if not yet detected (e.g., clientName wasn't available at connect time), the SDK retries detection lazily using the latest available signals

The detected platform is attached to every event as the platform field.

Using platform data

Platform detection is fully automatic. The platform field appears on all events and can be used in the dashboard for:

  • Filtering — view events from a specific platform
  • Segmentation — compare metrics across platforms
  • Funnel analysis — see where users drop off on each platform

Unrecognised clients

If an MCP client isn't in the supported list, it appears as "unknown". The raw client identity from the MCP handshake is persisted on every connection event as client_name and client_version, so unrecognised clients can still be inspected in your data — and promoted to a first-class platform once their identity is known.

On this page