{"id":32744673,"url":"https://github.com/apify/mcp-client-capabilities","last_synced_at":"2026-03-05T18:02:46.647Z","repository":{"id":311803041,"uuid":"1044945120","full_name":"apify/mcp-client-capabilities","owner":"apify","description":"Index of all Model Context Protocol (MCP) clients and their capabilities","archived":false,"fork":false,"pushed_at":"2026-02-02T12:06:15.000Z","size":111,"stargazers_count":70,"open_issues_count":5,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-02-03T00:13:16.395Z","etag":null,"topics":["mcp","mcp-clients","model-context-protocol"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/mcp-client-capabilities","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apify.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-26T12:35:30.000Z","updated_at":"2026-02-02T12:05:38.000Z","dependencies_parsed_at":"2026-02-02T13:25:22.174Z","dependency_job_id":null,"html_url":"https://github.com/apify/mcp-client-capabilities","commit_stats":null,"previous_names":["apify/mcp-client-capabilities"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/apify/mcp-client-capabilities","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fmcp-client-capabilities","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fmcp-client-capabilities/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fmcp-client-capabilities/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fmcp-client-capabilities/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apify","download_url":"https://codeload.github.com/apify/mcp-client-capabilities/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apify%2Fmcp-client-capabilities/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30141296,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T16:58:46.102Z","status":"ssl_error","status_checked_at":"2026-03-05T16:58:45.706Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mcp","mcp-clients","model-context-protocol"],"created_at":"2025-11-03T16:29:32.067Z","updated_at":"2026-03-05T18:02:46.630Z","avatar_url":"https://github.com/apify.png","language":"TypeScript","funding_links":[],"categories":["📚 Projects (1974 total)"],"sub_categories":["MCP Servers"],"readme":"# MCP Client Capabilities\n\n![NPM Version](https://img.shields.io/npm/v/mcp-client-capabilities)\n![PyPI - Version](https://img.shields.io/pypi/v/mcp-client-capabilities)\n\nThis package strives to be the most up-to-date database of\nall [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) clients and their capabilities,\nto enable MCP servers understand what features an MCP client supports and how to respond to it\nin order to provide the best user and agent experience. \nUnfortunately, the MCP protocol capability negotiation during the initial handshake\nis not sufficient for that—see [Background](#background) bellow for details. \n\nIn other words, this package is the programmatic version of\nthe [community MCP clients](https://modelcontextprotocol.io/clients#feature-support-matrix) table.\n\n\n## How it works\n\nThis package provides a JSON file called `mcp-clients.json` that lists all known MCP clients, their metadata and capabilities.\nIt's a single JSON file to make it easy for multiple programming languages to access the data while enabling TypeScript type safety\nfor the NPM package.\n\nThe JSON file contains an object where keys are client names and values an object with information about the MCP client:\n\n```typescript\n{\n  // Client name corresponds to `params.clientInfo.name` from the MCP client's `initialize` request, e.g. \"ExampleClient\"\n  \"\u003cclient-name\u003e\": {\n\n    // Display name of the MCP client, e.g. \"Example Client\"\n    title: string,\n    \n    // URL to the homepage of the client\n    url: string,\n    \n    // Corresponds to `params.protocolVersion` from the MCP client's `initialize` request, e.g. \"2024-11-05\"\n    protocolVersion: string,\n\n    // Present if the client supports accessing server resources,\n    // whether it can handle their dynamic changes, and whether it can subscribe to resource updates\n    resources?: { listChanged?: boolean, subscribe?: boolean },\n\n    // Present if the client supports accessing server prompts,\n    // and whether it can handle their dynamic changes\n    prompts?: { listChanged?: boolean },\n\n    // Present if the client supports accessing server tools,\n    // and whether it can handle their dynamic changes.        \n    tools?: { listChanged?: boolean },\n\n    // Present if the client supports elicitation from the server.    \n    elicitation?: object,\n    \n    // Present if the client supports sampling from an LLM.\n    sampling?: object,\n\n    // Present if the client supports listing its roots,\n    // and whether it can notify the server about their dynamic changes        \n    roots?: { listChanged?: boolean },\n\n    // Present if the client can handle server's argument autocompletion suggestions.         \n    completions?: object,\n    \n    // Present if the client supports reading log messages from the server.        \n    logging?: object,\n  },\n  \"\u003cclient-name-2\u003e\": { ... },\n  ...\n}\n```\n\nNote that the client object is inspired by MCP's [`ClientCapabilites`](https://modelcontextprotocol.io/specification/2025-06-18/schema#clientcapabilities)\nand [`ServerCapabilites`](https://modelcontextprotocol.io/specification/2025-06-18/schema#servercapabilities) objects,\nand the respective field types are compatible. Additional fields might be added in the future.\n\n**IMPORTANT**: MCP servers must always prioritize the information received from the MCP client's `initalize` request\nvia the `params.capabilities` field (of type\n[`ClientCapabilites`](https://modelcontextprotocol.io/specification/2025-06-18/schema#clientcapabilities))\nto the capabilities information provided by this package, as it will always be more accurate!\n\n### Client versioning\n\nFor each unique client name, the JSON file contains just one record representing the information about the \nlatest known publicly-available release.\nThis is under the assumption that most users will upgrade to the latest version of MCP clients,\nespecially if something doesn't work right.\n\nThe `protocolVersion` only serves as a crude check: **If the version received from the MCP client\ndoesn't match the version provided in the JSON file,\nthe MCP server should ignore any information provided by the JSON file, as it's clearly out of date.**\n\nAt this time, the package completely ignores the `clientInfo.version` field, because\nthe information about client versions and capabilities is very sparse, and\nmost clients don't use versions anyway. This might change in the future.\n\n### Clients supported\n\n\u003c!-- MCP_CLIENTS_TABLE_START --\u003e\n| Display name | [Resources](#resources) | [Prompts](#prompts) | [Tools](#tools) | [Discovery](#discovery) | [Sampling](#sampling) | [Tasks](#tasks) | [Roots](#roots) | [Elicitation](#elicitation) |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| [Alpic Playground](https://alpic.ai/blog/launch-week-2-introducing-the-alpic-playground) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| [Amazon Q Developer CLI](https://github.com/aws/amazon-q-developer-cli) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [AmpCode](https://ampcode.com) | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |\n| [Apify MCP Client](https://apify.com/jiri.spilka/tester-mcp-client) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |\n| [Arcade](https://arcade.dev) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| [ChatGPT](https://chatgpt.com) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Cherry Studio](https://www.cherry-ai.com) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Claude Code](https://claude.com/product/claude-code) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |\n| [Claude.ai](https://claude.ai) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Cline](https://cline.bot/) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |\n| [Continue CLI Client](https://www.continue.dev/) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Crush](https://github.com/charmbracelet/crush) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |\n| [Cursor](https://cursor.com) | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |\n| [Dust](https://dust.tt) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Factory CLI](https://github.com/factory-ai/factory-cli) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Gemini CLI](https://geminicli.com/) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [GitGuardian](https://www.gitguardian.com) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| [GitHub Copilot CLI](https://github.com/features/copilot/cli) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [GitHub Copilot for Xcode](https://github.com/github/CopilotForXcode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |\n| [Glama](https://glama.ai/chat) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |\n| [Google Antigravity](https://antigravity.google) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |\n| [Goose](https://block.github.io/goose) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Jan AI](https://jan.ai) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [JetBrains AI Assistant](https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |\n| [JetBrains AI Assistant with GitHub Copilot](https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |\n| [Kilo Code](https://github.com/Kilo-Org/kilocode) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |\n| [LibreChat](https://www.librechat.ai) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [LobeHub](https://lobehub.com) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Make MCP Client](https://www.make.com) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Mistral AI: Le Chat](https://chat.mistral.ai) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |\n| [N8N MCP Client](https://n8n.io) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [OpenAI Codex](https://openai.com/codex) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| [Opencode](https://opencode.ai) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |\n| [Postman](https://postman.com/downloads) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |\n| [Raycast](https://www.raycast.com) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |\n| [Roo Code](https://roocode.com) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| [Visual Studio Code](https://code.visualstudio.com) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n| [Windsurf Editor](https://codeium.com/windsurf) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |\n| [Zed Editor](https://zed.dev) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n\u003c!-- MCP_CLIENTS_TABLE_END --\u003e\n\n### Column explanations\n\n- \u003ca name=\"resources\"\u003e\u003c/a\u003e**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.\n- \u003ca name=\"prompts\"\u003e\u003c/a\u003e**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.\n- \u003ca name=\"tools\"\u003e\u003c/a\u003e**Tools**: Whether the client supports accessing server tools. Tools are functions that clients can invoke to perform actions on the server side.\n- \u003ca name=\"discovery\"\u003e\u003c/a\u003e**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.\n- \u003ca name=\"sampling\"\u003e\u003c/a\u003e**Sampling**: Whether the client supports sampling from an LLM. This allows the server to request the client to generate text using its language model.\n- \u003ca name=\"tasks\"\u003e\u003c/a\u003e**Tasks**: Whether the client supports task-augmented tool calls. This enables asynchronous execution where the server can poll task status and retrieve results after completion, useful for expensive or long-running operations.\n- \u003ca name=\"roots\"\u003e\u003c/a\u003e**Roots**: Whether the client supports managing root directories. Roots define the workspace or directories that the client wants the server to have access to.\n- \u003ca name=\"elicitation\"\u003e\u003c/a\u003e**Elicitation**: Whether the client supports elicitation from the server. This allows the server to request additional information or clarification from the client during interactions.\n\n## Usage\n\n### Node.js\n\nInstall the [NPM package](https://www.npmjs.com/package/mcp-client-capabilities) by running:\n\n```bash\nnpm install mcp-client-capabilities\n```\n\n#### TypeScript example\n\n```typescript\nimport { mcpClients } from 'mcp-client-capabilities';\n\nconst claudeClient = mcpClients['claude-ai'];\nconsole.log('Claude AI metadata and capabilities:', claudeClient);\nconsole.log('Display name:', claudeClient.title);\n\n// List all available clients\nconsole.log('Available clients:', Object.keys(mcpClients));\n```\n\n#### JavaScript example\n\n```javascript\nconst { mcpClients } = require('mcp-client-capabilities');\n\nconst claudeClient = mcpClients['claude-ai'];\nconsole.log('Claude AI metadata and capabilities:', claudeClient);\nconsole.log('Display name:', claudeClient.title);\n\n// List all available clients\nconsole.log('Available clients:', Object.keys(mcpClients));\n```\n\n### Python\n\nInstall the [PyPI package](https://pypi.org/project/mcp-client-capabilities/) by running:\n\n```bash\npip install mcp-client-capabilities\n```\n\n#### Python example\n\n```python\nfrom mcp_client_capabilities import mcp_clients\n\nclaude_client = mcp_clients['claude-ai']\nprint('Claude AI metadata and capabilities:', claude_client)\nprint('Display name:', claude_client['title'])\n\n# List all available clients\nprint('Available clients:', mcp_clients.keys())\n```\n\n### Other languages\n\nYou can fetch the raw `mcp-clients.json` file from the following URL:\n\nhttps://raw.githubusercontent.com/apify/mcp-client-capabilities/refs/heads/master/src/mcp_client_capabilities/mcp-clients.json\n\n\n## Background\n\nWhen the MCP client [connects](https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle) to an MCP server,\nit must send it an `initialize` request such as:\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"initialize\",\n  \"params\": {\n    \"protocolVersion\": \"2024-11-05\",\n    \"capabilities\": {\n      \"roots\": { \"listChanged\": true },\n      \"sampling\": {},\n      \"elicitation\": {}\n    },\n    \"clientInfo\": {\n      \"name\": \"ExampleClient\",\n      \"title\": \"Example Client Display Name\",\n      \"version\": \"1.0.0\"\n    }\n  }\n}\n```\n\nThe MCP server must then respond with a message like:\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"result\": {\n    \"protocolVersion\": \"2024-11-05\",\n    \"capabilities\": {\n      \"logging\": {},\n      \"prompts\": { \"listChanged\": true },\n      \"resources\": { \"subscribe\": true, \"listChanged\": true },\n      \"tools\": { \"listChanged\": true }\n    },\n    \"serverInfo\": {\n      \"name\": \"ExampleServer\",\n      \"title\": \"Example Server Display Name\",\n      \"version\": \"1.0.0\"\n    },\n    \"instructions\": \"Optional instructions for the client\"\n  }\n}\n```\n\nUnfortunately, this [capability negotiation](https://modelcontextprotocol.io/specification/2025-06-18/architecture#capability-negotiation)\nis not sufficient for MCP servers to fully understand what features a client supports.\nFor example, the server will not know if the client supports dynamic tool discovery via the `notifications/tools/list_changed` notification,\nor whether it applies the initial server `instructions` to the model context. But this information is crucial for servers to\nunderstand what interface they can provide to clients, e.g. whether they should provide alternative tools for dynamic discovery and calling,\nor stuff the instructions into the tool descriptions instead.\n\nThis limitation of MCP leads to the \"lowest common denominator\" approach, where servers adopt only basic MCP\nfeatures they can be certain most clients support. Ultimately this leads to the stagnation of the MCP protocol,\nwhere neither servers nor clients have motivation to adopt latest protocol features.\n\nWhile there are MCP standard proposals such as [SEP-1381](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1381)\nto address this problem on the protocol level, these will take time to be approved and widely adopted by MCP clients.\nTherefore, we're releasing this package with a hope to accelerate the development of the MCP ecosystem.\n\n\n## Contributors\n\nWe highly appreciate community contributions to make the list of MCP clients and their capabilities\ncomplete and up to date. To add a new client or updated an existing one, simply edit the `src/mcp-clients.json` file\nand submit a pull request:\n\n- The pull request should contain some evidence to back up the existence of the MCP client capabilities, e.g. screenshot\n  from usage, link to its source code, or official docs.\n- Ideally, add or update just one MCP client per pull request, to make this more manageable.\n- Keep the clients in alphabetical order by their name.\n\nThanks to [Alpic](https://alpic.ai) for contributing the list of clients from their logs.\n\n### Development\n\nThe build process includes validation to ensure the JSON matches the TypeScript interfaces.\n\n```bash\n# Validate the JSON file structure\nnpm run test\n\n# Build the project (includes validation)\nnpm run build\n\n# Run example\nnpm run example\n```\n\n### Retrieving client information\n\nTo 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:\n\n1. Spawn a netcat listener: `nc -lvp 3001`\n2. Expose it to the internet via ngrok: `ngrok http 3001`\n3. Run the MCP client and connect to your ngrok URL\n\nIn the netcat terminal, you will see the `initialize` request containing the client's information, such as:\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 0,\n  \"method\": \"initialize\",\n  \"params\": {\n    \"protocolVersion\": \"2025-06-18\",\n    \"capabilities\": {\n      \"sampling\": {},\n      \"elicitation\": {},\n      \"roots\": { \"listChanged\": true }\n    },\n    \"clientInfo\": {\n      \"name\": \"mcp-inspector\",\n      \"version\": \"0.16.5\"\n    }\n  }\n}\n```\n\n### API\n\n#### Types\n\n- `McpClientRecord` - Complete capability set for an MCP client with mandatory `title` and `url` fields\n- `ClientsIndex` - Type for the clients object structure\n\n#### Exports\n\n- `mcpClients` - Object containing all client capabilities indexed by client name\n- All TypeScript interfaces from `types.ts`\n\n### Future work\n\n- Add all clients from https://modelcontextprotocol.io/clients#feature-support-matrix with accurate details\n- Add SDK for Python\n- Create a public testing MCP server to probe the client capabilities\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapify%2Fmcp-client-capabilities","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapify%2Fmcp-client-capabilities","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapify%2Fmcp-client-capabilities/lists"}