Skip to main content

Index of all Model Context Protocol (MCP) clients and their capabilities

Project description

MCP Client Capabilities

This package strives to be the most up-to-date database of all Model Context Protocol (MCP) clients and their capabilities, to enable MCP servers understand what features an MCP client supports and how to respond to it in order to provide the best user and agent experience. Unfortunately, the MCP protocol capability negotiation during the initial handshake is not sufficient for that—see Background bellow for details.

In other words, this package is the programmatic version of the community MCP clients table.

How it works

This package provides a JSON file called mcp-clients.json that lists all known MCP clients, their metadata and capabilities. It's a single JSON file to make it easy for multiple programming languages to access the data while enabling TypeScript type safety for the NPM package.

The JSON file contains an object where keys are client names and values an object with information about the MCP client:

{
  // Client name corresponds to `params.clientInfo.name` from the MCP client's `initialize` request, e.g. "ExampleClient"
  "<client-name>": {

    // Display name of the MCP client, e.g. "Example Client"
    title: string,
    
    // URL to the homepage of the client
    url: string,
    
    // Corresponds to `params.protocolVersion` from the MCP client's `initialize` request, e.g. "2024-11-05"
    protocolVersion: string,

    // Present if the client supports accessing server resources,
    // whether it can handle their dynamic changes, and whether it can subscribe to resource updates
    resources?: { listChanged?: boolean, subscribe?: boolean },

    // Present if the client supports accessing server prompts,
    // and whether it can handle their dynamic changes
    prompts?: { listChanged?: boolean },

    // Present if the client supports accessing server tools,
    // and whether it can handle their dynamic changes.        
    tools?: { listChanged?: boolean },

    // Present if the client supports elicitation from the server.    
    elicitation?: object,
    
    // Present if the client supports sampling from an LLM.
    sampling?: object,

    // Present if the client supports listing its roots,
    // and whether it can notify the server about their dynamic changes        
    roots?: { listChanged?: boolean },

    // Present if the client can handle server's argument autocompletion suggestions.         
    completions?: object,
    
    // Present if the client supports reading log messages from the server.        
    logging?: object,
  },
  "<client-name-2>": { ... },
  ...
}

Note that the client object is inspired by MCP's ClientCapabilites and ServerCapabilites objects, and the respective field types are compatible. Additional fields might be added in the future.

IMPORTANT: MCP servers must always prioritize the information received from the MCP client's initalize request via the params.capabilities field (of type ClientCapabilites) to the capabilities information provided by this package, as it will always be more accurate!

Client versioning

For each unique client name, the JSON file contains just one record representing the information about the latest known publicly-available release. This is under the assumption that most users will use the latest version of MCP clients.

The protocolVersion only serves as a crude check: If the version received from the MCP client doesn't match the version provided in the JSON file, the MCP server should ignore any information provided by the JSON file, as it's clearly out of date.

If a new MCP client release introduces support for new server capabilities compared to the previous release, we strongly recommend the MCP clients to use a new client name to avoid confusing the servers and provide the best user and agent experience.

Clients supported

Display name Client name Resources Prompts Tools Discovery Sampling Roots Elicitation
Amazon Q Developer CLI Q CLI
Claude AI claude-ai
Claude Code claude-code
Cursor Editor cursor-vscode
Visual Studio Code Visual Studio Code
Windsurf Editor windsurf-client

Column explanations

  • Resources: Whether the client supports accessing server resources. Resources allow clients to browse and interact with files, databases, or other data provided by the MCP server.
  • Prompts: Whether the client supports accessing server prompts. Prompts are reusable prompt templates that can be invoked by clients to get structured responses from the server.
  • Tools: Whether the client supports accessing server tools. Tools are functions that clients can invoke to perform actions on the server side.
  • Discovery: Whether the client supports dynamic tool discovery via notifications/tools/list_changed notifications. This allows tools to be added/removed while the connection is active.
  • Sampling: Whether the client supports sampling from an LLM. This allows the server to request the client to generate text using its language model.
  • Roots: Whether the client supports managing root directories. Roots define the workspace or directories that the client wants the server to have access to.
  • Elicitation: Whether the client supports elicitation from the server. This allows the server to request additional information or clarification from the client during interactions.

Usage

Node.js

Install the NPM package by running:

npm install mcp-client-capabilities

TypeScript example

import { mcpClients } from 'mcp-client-capabilities';

// Access Claude Desktop capabilities
const claudeClient = mcpClients['claude-desktop'];
console.log(claudeClient);

// Check if a client supports specific features
if (claudeClient.tools?.listChanged) {
  console.log('Claude Desktop supports tools list changes');
}

// List all available clients
console.log('Available clients:', Object.keys(mcpClients));

// Access client metadata
console.log('Client display name:', claudeClient.title);
console.log('URL:', claudeClient.url);

JavaScript example

const clients = require('./src/mcp-clients.json');

const claudeClient = clients['claude-desktop'];
console.log('Claude Desktop capabilities:', claudeClient);
console.log('Display name:', claudeClient.title);

Python

Install the PyPI package by running:

pip install mcp-client-capabilities

Python example

from mcp_client_capabilities import mcp_clients

claude_client = mcp_clients['claude-desktop']
print('Claude Desktop capabilities:', claude_client)
print('Display name:', claude_client['title'])

Other languages

You can fetch the raw mcp-clients.json file from the following URL:

https://raw.githubusercontent.com/apify/mcp-client-capabilities/refs/heads/master/src/mcp_client_capabilities/mcp-clients.json

Background

When the MCP client connects to an MCP server, it must send it an initialize request such as:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "roots": { "listChanged": true },
      "sampling": {},
      "elicitation": {}
    },
    "clientInfo": {
      "name": "ExampleClient",
      "title": "Example Client Display Name",
      "version": "1.0.0"
    }
  }
}

The MCP server must then respond with a message like:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "logging": {},
      "prompts": { "listChanged": true },
      "resources": { "subscribe": true, "listChanged": true },
      "tools": { "listChanged": true }
    },
    "serverInfo": {
      "name": "ExampleServer",
      "title": "Example Server Display Name",
      "version": "1.0.0"
    },
    "instructions": "Optional instructions for the client"
  }
}

Unfortunately, this capability negotiation is not sufficient for MCP servers to fully understand what features a client supports. For example, the server will not know if the client supports dynamic tool discovery via the notifications/tools/list_changed notification, or whether it applies the initial server instructions to the model context. But this information is crucial for servers to understand what interface they can provide to clients, e.g. whether they should provide alternative tools for dynamic discovery and calling, or stuff the instructions into the tool descriptions instead.

This limitation of MCP leads to the "lowest common denominator" approach, where servers adopt only basic MCP features they can be certain most clients support. Ultimately this leads to the stagnation of the MCP protocol, where neither servers nor clients have motivation to adopt latest protocol features.

While there are MCP standard proposals such as SEP-1381 to address this problem on the protocol level, these will take time to be approved and widely adopted by MCP clients. Therefore, we're releasing this package with a hope to accelerate the development of the MCP ecosystem.

Contributors

We highly appreciate community contributions to make the list of MCP clients and their capabilities complete and up to date. To add a new client or updated an existing one, simply edit the src/mcp-clients.json file and submit a pull request:

  • The pull request should contain some evidence to back up the existence of the MCP client capabilities, e.g. screenshot from usage, link to its source code, or official docs.
  • Ideally, add or update just one MCP client per pull request, to make this more manageable.
  • Keep the clients in alphabetical order by their name.

Development

The build process includes validation to ensure the JSON matches the TypeScript interfaces.

# Validate the JSON file structure
npm run test

# Build the project (includes validation)
npm run build

# Run example
npm run example

Retrieving client information

To easily retrieve the client name and version from an MCP initialize request for adding or updating client capabilities, you can use a simple setup with netcat and ngrok:

  1. Spawn a netcat listener: nc -lvp 3001
  2. Expose it to the internet via ngrok: ngrok http 3001
  3. Run the MCP client and connect to your ngrok URL

In the netcat terminal, you will see the initialize request containing the client's information, such as:

{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "sampling": {},
      "elicitation": {},
      "roots": { "listChanged": true }
    },
    "clientInfo": {
      "name": "mcp-inspector",
      "version": "0.16.5"
    }
  }
}

API

Types

  • McpClientRecord - Complete capability set for an MCP client with mandatory title and url fields
  • ClientsIndex - Type for the clients object structure

Exports

  • mcpClients - Object containing all client capabilities indexed by client name
  • All TypeScript interfaces from types.ts

Future work

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_client_capabilities-0.0.3.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_client_capabilities-0.0.3-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file mcp_client_capabilities-0.0.3.tar.gz.

File metadata

  • Download URL: mcp_client_capabilities-0.0.3.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for mcp_client_capabilities-0.0.3.tar.gz
Algorithm Hash digest
SHA256 489a309e59541612a89e41c9a2fa43dfce9e78279a988cbfa0dfa71dda13b2c3
MD5 a6e725622a9021b84f57103805d92de7
BLAKE2b-256 6cd37e49c6b3525309ae3a7c10c7ad82d53162510737d94b4ebec10922c40be7

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_client_capabilities-0.0.3.tar.gz:

Publisher: release.yml on apify/mcp-client-capabilities

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_client_capabilities-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_client_capabilities-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8987658905d033a0d6c91dc74e3c2b94204422a27613bfe949af00da78878b2e
MD5 a4b082d27562f93834f74f0150895192
BLAKE2b-256 10f49ba151a546ecb3bbd2df6b2f52870bfeb0194992bfba36346960bd091b82

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_client_capabilities-0.0.3-py3-none-any.whl:

Publisher: release.yml on apify/mcp-client-capabilities

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page