{
  "name": "MCP Shelf",
  "description": "A short shelf of MCP servers that are worth installing",
  "url": "https://mcpshelf.co",
  "author": "Sophie Filer",
  "updated": "2026-10-27",
  "docs": "https://mcpshelf.co/developers",
  "api": "https://mcpshelf.co/api/v1",
  "mcp": "https://mcpshelf.co/mcp",
  "counts": {
    "servers": 60,
    "categories": 7,
    "guides": 8,
    "skills": 6
  },
  "categories": [
    {
      "slug": "developer-tools",
      "name": "Developer tools",
      "url": "https://mcpshelf.co/categories/developer-tools",
      "description": "Servers that let an assistant read, run and change real code: a terminal, a language-server view of your project, fresh library docs, your GitHub account and your build tools.",
      "servers": [
        "desktop-commander",
        "serena",
        "context7",
        "github",
        "mcp-inspector",
        "xcodebuildmcp",
        "peekaboo",
        "kubernetes",
        "ida-pro",
        "gitmcp",
        "ghidra",
        "shadcn-ui",
        "jcodemunch",
        "ios-simulator"
      ]
    },
    {
      "slug": "browser-and-web",
      "name": "Browser and web data",
      "url": "https://mcpshelf.co/categories/browser-and-web",
      "description": "Pick one of these when the assistant needs the live web: drive a real browser, search, or turn pages into clean text it can read.",
      "servers": [
        "playwright",
        "firecrawl",
        "exa",
        "bright-data",
        "searxng",
        "apify",
        "browser-tools",
        "executeautomation-playwright",
        "wigolo",
        "perplexity",
        "tavily"
      ]
    },
    {
      "slug": "databases",
      "name": "Databases and data",
      "url": "https://mcpshelf.co/categories/databases",
      "description": "Database servers are the ones most worth setting up carefully. Each page says what the server can change and how to start it in a safer mode.",
      "servers": [
        "postgres-mcp-pro",
        "supabase",
        "mcp-toolbox-for-databases",
        "qdrant",
        "excel",
        "dbhub"
      ]
    },
    {
      "slug": "design-and-3d",
      "name": "Design, 3D and games",
      "url": "https://mcpshelf.co/categories/design-and-3d",
      "description": "These servers talk to a desktop app you already use. Most need a plugin or add-on inside that app as well as the MCP config, and each page says which.",
      "servers": [
        "blender",
        "framelink-figma",
        "talk-to-figma",
        "godot",
        "kicad",
        "minimax",
        "unity-mcp",
        "drawio",
        "antv-chart",
        "davinci-resolve",
        "freecad",
        "excalidraw"
      ]
    },
    {
      "slug": "knowledge-and-work",
      "name": "Knowledge and work apps",
      "url": "https://mcpshelf.co/categories/knowledge-and-work",
      "description": "Servers that bring your notes, tickets and reading into the conversation, so you stop pasting them in by hand.",
      "servers": [
        "notion",
        "atlassian",
        "basic-memory",
        "linkedin",
        "arxiv",
        "tradingview",
        "obsidian",
        "google-workspace",
        "12306"
      ]
    },
    {
      "slug": "cloud-and-ops",
      "name": "Cloud and operations",
      "url": "https://mcpshelf.co/categories/cloud-and-ops",
      "description": "Servers that reach accounts where a mistake costs money or uptime. Each page says what the server can change and which credentials to give it, so you can start with the narrowest access that works.",
      "servers": [
        "aws-knowledge",
        "cloudflare",
        "grafana",
        "azure-devops"
      ]
    },
    {
      "slug": "agents-and-automation",
      "name": "Agent helpers and desktop control",
      "url": "https://mcpshelf.co/categories/agents-and-automation",
      "description": "Two kinds of helper live here: servers that give the model a better way to work through a problem, and servers that let it see and operate a desktop or a phone the way a person would.",
      "servers": [
        "sequential-thinking",
        "windows-mcp",
        "mobile-mcp",
        "container-use"
      ]
    }
  ],
  "servers": [
    {
      "slug": "desktop-commander",
      "name": "Desktop Commander",
      "url": "https://mcpshelf.co/servers/desktop-commander",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "A terminal, file search and surgical file edits for your assistant.",
      "description": "Desktop Commander turns a chat assistant into something closer to a coding agent: it can run shell commands, keep long-running processes going, search across folders and edit files by replacing exact blocks of text instead of rewriting whole files.\n\nIt runs with your user account, so it can do anything you can do in a terminal. That is the point, and also the reason to add it to a client you watch rather than one that runs unattended.",
      "good_for": [
        "Using Claude Desktop as a coding agent without a separate IDE",
        "Running builds, tests and scripts and reading the output",
        "Large refactors where small targeted edits beat full-file rewrites"
      ],
      "needs": [
        "Node.js 18 or newer",
        "Nothing else: no account or key"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@wonderwhy-er/desktop-commander@latest"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 25 tools."
      },
      "package_note": null,
      "github": "https://github.com/wonderwhy-er/DesktopCommanderMCP",
      "stars": 10129,
      "weekly_downloads": 394686,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/desktop-commander.webp",
      "maker": "Eduard Ruzga (wonderwhy-er) and contributors",
      "package": {
        "registry": "npm",
        "name": "@wonderwhy-er/desktop-commander",
        "version": "0.3.1",
        "released": "2026-10-22",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@wonderwhy-er/desktop-commander"
      },
      "tools": [
        {
          "name": "get_config",
          "kind": "reads",
          "purpose": "Shows the current settings: allowed folders, blocked commands, shell and line limits."
        },
        {
          "name": "set_config_value",
          "kind": "changes",
          "purpose": "Changes one setting, such as the allowed folders or the default shell."
        },
        {
          "name": "read_file",
          "kind": "reads",
          "purpose": "Reads a text file, Excel workbook, PDF or web address, a chunk of lines or pages at a time."
        },
        {
          "name": "read_multiple_files",
          "kind": "reads",
          "purpose": "Reads several files in one go."
        },
        {
          "name": "write_file",
          "kind": "changes",
          "purpose": "Writes or appends to a file, in chunks of 50 lines by default, including Excel data."
        },
        {
          "name": "write_pdf",
          "kind": "changes",
          "purpose": "Builds a PDF from Markdown, or adds and removes pages in an existing one."
        },
        {
          "name": "create_directory",
          "kind": "changes",
          "purpose": "Makes a folder, including any missing parent folders."
        },
        {
          "name": "list_directory",
          "kind": "reads",
          "purpose": "Lists the files and folders under a path, two levels deep by default."
        },
        {
          "name": "move_file",
          "kind": "changes",
          "purpose": "Moves or renames a file or folder."
        },
        {
          "name": "start_search",
          "kind": "reads",
          "purpose": "Searches file names or file contents across a folder and streams back matches."
        },
        {
          "name": "get_more_search_results",
          "kind": "reads",
          "purpose": "Pages through the results of a search that is still running."
        },
        {
          "name": "stop_search",
          "kind": "changes",
          "purpose": "Cancels a running search."
        },
        {
          "name": "list_searches",
          "kind": "reads",
          "purpose": "Shows which searches are still running."
        },
        {
          "name": "get_file_info",
          "kind": "reads",
          "purpose": "Reports a file's size, dates and permissions, plus sheet names for Excel files."
        },
        {
          "name": "edit_block",
          "kind": "changes",
          "purpose": "Swaps an exact piece of text in a file for new text, or updates a range of cells in an Excel sheet."
        },
        {
          "name": "start_process",
          "kind": "runs",
          "purpose": "Starts a terminal command and notices when it is waiting for input."
        },
        {
          "name": "read_process_output",
          "kind": "reads",
          "purpose": "Collects the latest output from a command that is still running."
        },
        {
          "name": "interact_with_process",
          "kind": "runs",
          "purpose": "Types input into a running program, such as a Python or database prompt, and returns its reply."
        },
        {
          "name": "force_terminate",
          "kind": "changes",
          "purpose": "Stops a terminal session that has hung or is no longer needed."
        },
        {
          "name": "list_sessions",
          "kind": "reads",
          "purpose": "Lists the terminal sessions it has open."
        },
        {
          "name": "list_processes",
          "kind": "reads",
          "purpose": "Lists what is running on the computer, with memory and CPU use."
        },
        {
          "name": "kill_process",
          "kind": "runs",
          "purpose": "Ends a process on your computer by its process id."
        },
        {
          "name": "get_usage_stats",
          "kind": "reads",
          "purpose": "Shows how often you have used each tool."
        },
        {
          "name": "get_recent_tool_calls",
          "kind": "reads",
          "purpose": "Lists the last tool calls with their inputs and outputs, useful after a chat is cut off."
        },
        {
          "name": "give_feedback_to_desktop_commander",
          "kind": "changes",
          "purpose": "Opens the project's feedback form in your browser."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/desktop-commander.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "serena",
      "name": "Serena",
      "url": "https://mcpshelf.co/servers/serena",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "IDE-style \"find symbol\" and \"edit symbol\" for an agent, backed by language servers.",
      "description": "Serena starts language servers for your project and exposes what they know: where a function is defined, who calls it, and the exact range of a class or method. The assistant can then read and edit by symbol instead of grepping and reading whole files.\n\nOn big repositories that saves a lot of context, and it makes edits land in the right place more often.",
      "good_for": [
        "Large codebases where reading whole files wastes context",
        "Refactors that need every caller of a function",
        "Pairing with a client that already has file access but no code intelligence"
      ],
      "needs": [
        "uv (for uvx)",
        "Language support for your project language (Serena downloads most servers itself)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "--from",
            "git+https://github.com/oraios/serena",
            "serena",
            "start-mcp-server"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 3 tools."
      },
      "package_note": "The npm package called \"serena\" has no link to this project. Serena publishes to PyPI as serena-agent and documents running it from the GitHub source with uvx, which is what the config here does.",
      "github": "https://github.com/oraios/serena",
      "stars": 30730,
      "weekly_downloads": 47463,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/serena.webp",
      "maker": "Oraios AI",
      "package": null,
      "tools": [
        {
          "name": "activate_project",
          "kind": "reads",
          "purpose": "Points Serena at a codebase by name or folder so its language servers start indexing it."
        },
        {
          "name": "initial_instructions",
          "kind": "reads",
          "purpose": "Hands the agent Serena's how-to guide and a session id at the start of a chat."
        },
        {
          "name": "serena_repl",
          "kind": "changes",
          "purpose": "Runs Python with Serena's full toolkit loaded: find symbols and references, outline files, edit by symbol and refactor."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/serena.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "context7",
      "name": "Context7",
      "url": "https://mcpshelf.co/servers/context7",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Pulls current, version-specific library docs into the conversation.",
      "description": "Models learn a library at one moment in time and then keep using that version. Context7 looks up the library you are working with and returns current documentation and examples, so the code you get matches the version you have installed.\n\nIt has two tools: one turns a library name into a Context7 ID, the other fetches docs for that ID, optionally narrowed to a topic.",
      "good_for": [
        "Fast-moving frameworks (Next.js, Tailwind, the AI SDKs) where training data is stale",
        "Asking for code against a specific version",
        "Cutting down on invented function names"
      ],
      "needs": [
        "Node.js 18 or newer for the local server",
        "A free Context7 API key for higher rate limits (optional)"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@upstash/context7-mcp"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": "https://mcp.context7.com/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 2 tools."
      },
      "package_note": null,
      "github": "https://github.com/upstash/context7-mcp",
      "stars": 63713,
      "weekly_downloads": 440853,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/context7.webp",
      "maker": "Upstash",
      "package": {
        "registry": "npm",
        "name": "@upstash/context7-mcp",
        "version": "4.4.4",
        "released": "2026-10-19",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@upstash/context7-mcp"
      },
      "tools": [
        {
          "name": "resolve-library-id",
          "kind": "reads",
          "purpose": "Turns a plain library name like \"next.js\" into the Context7 id that query-docs needs."
        },
        {
          "name": "query-docs",
          "kind": "reads",
          "purpose": "Pulls the current docs and code samples for one library, ranked against your question and, if you say, your language."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/context7.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "github",
      "name": "GitHub",
      "url": "https://mcpshelf.co/servers/github",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "GitHub's own server for repos, issues, pull requests and Actions.",
      "description": "This is the server GitHub maintains. Through it an assistant can browse code, open and comment on issues and pull requests, check Actions runs and search across repositories you can see.\n\nGitHub hosts it, so most people never install anything: point the client at the URL and authenticate. A Docker image exists for anyone who needs to run it themselves.",
      "good_for": [
        "Triage: summarise new issues and failing runs",
        "Reviewing or drafting pull requests from the chat",
        "Searching code across an organisation"
      ],
      "needs": [
        "A GitHub account",
        "A fine-grained personal access token, or OAuth in clients that support it"
      ],
      "install": {
        "config": {
          "url": "https://api.githubcopilot.com/mcp/",
          "headers": {
            "Authorization": "Bearer YOUR_API_KEY"
          }
        },
        "setup_steps": null,
        "note": "Swap YOUR_API_KEY for a fine-grained token limited to the repositories and permissions you actually want the assistant to use.",
        "remote_url": "https://api.githubcopilot.com/mcp/"
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 26 Oct 2026 we listed its tools from its package instead of running this config."
      },
      "package_note": null,
      "github": "https://github.com/github/github-mcp-server",
      "stars": 33976,
      "weekly_downloads": null,
      "last_commit": "2026-10-23",
      "logo": "https://github.com/github.png?size=96",
      "maker": "GitHub",
      "package": null,
      "tools": [
        {
          "name": "add_comment_to_pending_review",
          "kind": "changes",
          "purpose": "Adds a line comment to a review you have started but not sent."
        },
        {
          "name": "add_issue_comment",
          "kind": "changes",
          "purpose": "Posts a comment on an issue or pull request."
        },
        {
          "name": "add_reply_to_pull_request_comment",
          "kind": "changes",
          "purpose": "Replies inside an existing review comment thread."
        },
        {
          "name": "assign_copilot_to_issue",
          "kind": "changes",
          "purpose": "Hands an issue to GitHub's Copilot coding agent to work on."
        },
        {
          "name": "create_branch",
          "kind": "changes",
          "purpose": "Makes a new branch from an existing one."
        },
        {
          "name": "create_or_update_file",
          "kind": "changes",
          "purpose": "Writes one file to a branch as a new commit."
        },
        {
          "name": "create_pull_request",
          "kind": "changes",
          "purpose": "Opens a pull request between two branches."
        },
        {
          "name": "create_repository",
          "kind": "changes",
          "purpose": "Creates a new repository under your account or an organisation."
        },
        {
          "name": "delete_file",
          "kind": "changes",
          "purpose": "Removes a file from a branch with a commit."
        },
        {
          "name": "fork_repository",
          "kind": "changes",
          "purpose": "Forks a repository to your account or an organisation."
        },
        {
          "name": "get_commit",
          "kind": "reads",
          "purpose": "Shows one commit with its message and changed files."
        },
        {
          "name": "get_file_contents",
          "kind": "reads",
          "purpose": "Reads a file, or lists a folder, at any branch or commit."
        },
        {
          "name": "get_label",
          "kind": "reads",
          "purpose": "Looks up one label in a repository."
        },
        {
          "name": "get_latest_release",
          "kind": "reads",
          "purpose": "Finds the newest published release."
        },
        {
          "name": "get_me",
          "kind": "reads",
          "purpose": "Shows which GitHub account the token belongs to."
        },
        {
          "name": "get_release_by_tag",
          "kind": "reads",
          "purpose": "Finds a release by its tag."
        },
        {
          "name": "get_tag",
          "kind": "reads",
          "purpose": "Shows the details of one git tag."
        },
        {
          "name": "get_team_members",
          "kind": "reads",
          "purpose": "Lists the people in an organisation team."
        },
        {
          "name": "get_teams",
          "kind": "reads",
          "purpose": "Lists the teams you belong to."
        },
        {
          "name": "issue_read",
          "kind": "reads",
          "purpose": "Reads an issue, its comments, labels or sub-issues."
        },
        {
          "name": "issue_write",
          "kind": "changes",
          "purpose": "Opens a new issue or edits, labels, assigns or closes an existing one."
        },
        {
          "name": "list_branches",
          "kind": "reads",
          "purpose": "Lists a repository's branches."
        },
        {
          "name": "list_commits",
          "kind": "reads",
          "purpose": "Lists recent commits on a branch, optionally by author."
        },
        {
          "name": "list_issue_fields",
          "kind": "reads",
          "purpose": "Lists the custom issue fields an organisation has set up."
        },
        {
          "name": "list_issue_types",
          "kind": "reads",
          "purpose": "Lists the issue types an organisation uses, such as bug or task."
        },
        {
          "name": "list_issues",
          "kind": "reads",
          "purpose": "Lists issues with filters for state, labels and dates."
        },
        {
          "name": "list_pull_requests",
          "kind": "reads",
          "purpose": "Lists pull requests with filters for state and branch."
        },
        {
          "name": "list_releases",
          "kind": "reads",
          "purpose": "Lists a repository's releases."
        },
        {
          "name": "list_repository_collaborators",
          "kind": "reads",
          "purpose": "Lists people with access to a repository."
        },
        {
          "name": "list_tags",
          "kind": "reads",
          "purpose": "Lists a repository's git tags."
        },
        {
          "name": "merge_pull_request",
          "kind": "changes",
          "purpose": "Merges a pull request by merge, squash or rebase."
        },
        {
          "name": "pull_request_read",
          "kind": "reads",
          "purpose": "Reads a pull request: its diff, files, reviews, comments or check status."
        },
        {
          "name": "pull_request_review_write",
          "kind": "changes",
          "purpose": "Starts, submits or deletes a review on a pull request."
        },
        {
          "name": "push_files",
          "kind": "changes",
          "purpose": "Commits several files to a branch in one go."
        },
        {
          "name": "request_copilot_review",
          "kind": "changes",
          "purpose": "Asks Copilot to review a pull request."
        },
        {
          "name": "search_code",
          "kind": "reads",
          "purpose": "Searches code across GitHub with GitHub's search syntax."
        },
        {
          "name": "search_commits",
          "kind": "reads",
          "purpose": "Searches commit messages and authors."
        },
        {
          "name": "search_issues",
          "kind": "reads",
          "purpose": "Searches issues across repositories."
        },
        {
          "name": "search_pull_requests",
          "kind": "reads",
          "purpose": "Searches pull requests across repositories."
        },
        {
          "name": "search_repositories",
          "kind": "reads",
          "purpose": "Finds repositories by name, topic, language and more."
        },
        {
          "name": "search_users",
          "kind": "reads",
          "purpose": "Finds GitHub users and organisations."
        },
        {
          "name": "sub_issue_write",
          "kind": "changes",
          "purpose": "Adds, removes or reorders sub-issues under a parent issue."
        },
        {
          "name": "ui_get",
          "kind": "reads",
          "purpose": "Fetches data the server's interactive views need, in clients that show them."
        },
        {
          "name": "update_issue_comment",
          "kind": "changes",
          "purpose": "Edits a comment you posted."
        },
        {
          "name": "update_pull_request",
          "kind": "changes",
          "purpose": "Changes a pull request's title, body, base branch, state or reviewers."
        },
        {
          "name": "update_pull_request_branch",
          "kind": "changes",
          "purpose": "Brings a pull request branch up to date with its base."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/github.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "mcp-inspector",
      "name": "MCP Inspector",
      "url": "https://mcpshelf.co/servers/mcp-inspector",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "The official debugging UI for MCP servers. Not a server you add to a client.",
      "description": "Inspector is maintained by the Model Context Protocol project. It starts a small web app that connects to one server, lists its tools, prompts and resources, and lets you call each tool with your own arguments while showing the JSON going back and forth.\n\nUse it before blaming your client: if a server misbehaves in Inspector, the problem is the server or its config.",
      "good_for": [
        "Checking a server starts and lists the tools you expect",
        "Debugging environment variables and arguments",
        "Building your own server"
      ],
      "needs": [
        "Node.js 22 or newer"
      ],
      "install": {
        "config": null,
        "setup_steps": [
          "Run it with the server command after it: npx @modelcontextprotocol/inspector npx -y @playwright/mcp@latest",
          "Open the local address it prints in your browser.",
          "Click Connect, then List Tools, and try a tool with your own input."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "not-run",
        "label": "Not yet tested by us",
        "detail": "Written from the project's own documentation. We have not run this config ourselves yet."
      },
      "package_note": null,
      "github": "https://github.com/modelcontextprotocol/inspector",
      "stars": 11154,
      "weekly_downloads": 295116,
      "last_commit": "2026-10-25",
      "logo": "https://avatars.githubusercontent.com/u/182288589?v=4",
      "maker": "The Model Context Protocol project (modelcontextprotocol)",
      "package": {
        "registry": "npm",
        "name": "@modelcontextprotocol/inspector",
        "version": "2.12.0",
        "released": "2026-10-21",
        "licence": null,
        "url": "https://www.npmjs.com/package/@modelcontextprotocol/inspector"
      },
      "tools": [],
      "markdown": "https://mcpshelf.co/servers/mcp-inspector.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "xcodebuildmcp",
      "name": "XcodeBuildMCP",
      "url": "https://mcpshelf.co/servers/xcodebuildmcp",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Build, run and test iOS and macOS apps, and drive simulators, from an agent.",
      "description": "Agents are good at writing Swift and bad at knowing whether it compiles. XcodeBuildMCP closes that loop: it wraps xcodebuild and the simulator tools so the agent can build a scheme, read the errors, boot a simulator, install the app and capture logs.\n\nThe project now lives under Sentry on GitHub; the npm package is the same.",
      "good_for": [
        "Letting Claude Code or Cursor fix its own build errors",
        "Running a test target after each change",
        "Launching an app in a simulator and reading its logs"
      ],
      "needs": [
        "A Mac with Xcode installed",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "xcodebuildmcp@latest",
            "mcp"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 24 tools."
      },
      "package_note": null,
      "github": "https://github.com/cameroncooke/XcodeBuildMCP",
      "stars": 6509,
      "weekly_downloads": 51875,
      "last_commit": "2026-10-22",
      "logo": "https://mcpshelf.co/logos/xcodebuildmcp.webp",
      "maker": "Sentry (started by Cameron Cooke)",
      "package": {
        "registry": "npm",
        "name": "xcodebuildmcp",
        "version": "2.7.0",
        "released": "2026-07-23",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/xcodebuildmcp"
      },
      "tools": [
        {
          "name": "session_show_defaults",
          "kind": "reads",
          "purpose": "Shows the remembered project, scheme and simulator."
        },
        {
          "name": "session_use_defaults_profile",
          "kind": "changes",
          "purpose": "Switches to a saved set of defaults, for repos with several apps."
        },
        {
          "name": "session_set_defaults",
          "kind": "changes",
          "purpose": "Remembers the project, scheme and simulator so later calls need fewer details."
        },
        {
          "name": "session_clear_defaults",
          "kind": "changes",
          "purpose": "Forgets the saved project, scheme and simulator choices."
        },
        {
          "name": "list_sims",
          "kind": "reads",
          "purpose": "Lists available simulators and whether they are running."
        },
        {
          "name": "boot_sim",
          "kind": "changes",
          "purpose": "Starts an iOS simulator."
        },
        {
          "name": "open_sim",
          "kind": "reads",
          "purpose": "Brings the Simulator app to the front."
        },
        {
          "name": "build_sim",
          "kind": "changes",
          "purpose": "Builds an iOS app for the simulator and reports any compiler errors."
        },
        {
          "name": "build_run_sim",
          "kind": "runs",
          "purpose": "Builds the app, installs it on a simulator and launches it in one step."
        },
        {
          "name": "test_sim",
          "kind": "changes",
          "purpose": "Runs the test suite on a simulator and returns the results."
        },
        {
          "name": "get_sim_app_path",
          "kind": "reads",
          "purpose": "Finds where the built .app sits for the simulator."
        },
        {
          "name": "install_app_sim",
          "kind": "changes",
          "purpose": "Installs a built app on a simulator."
        },
        {
          "name": "launch_app_sim",
          "kind": "changes",
          "purpose": "Opens an installed app on the simulator."
        },
        {
          "name": "stop_app_sim",
          "kind": "changes",
          "purpose": "Closes the running app on the simulator."
        },
        {
          "name": "record_sim_video",
          "kind": "changes",
          "purpose": "Records a video of the simulator screen."
        },
        {
          "name": "clean",
          "kind": "changes",
          "purpose": "Clears out old build products so the next build starts fresh."
        },
        {
          "name": "discover_projs",
          "kind": "reads",
          "purpose": "Finds the Xcode projects and workspaces in a folder."
        },
        {
          "name": "list_schemes",
          "kind": "reads",
          "purpose": "Lists the schemes a project or workspace can build."
        },
        {
          "name": "show_build_settings",
          "kind": "reads",
          "purpose": "Prints the Xcode build settings for a scheme."
        },
        {
          "name": "get_app_bundle_id",
          "kind": "reads",
          "purpose": "Reads an app's bundle identifier."
        },
        {
          "name": "screenshot",
          "kind": "reads",
          "purpose": "Captures the simulator screen so the agent can see the app."
        },
        {
          "name": "snapshot_ui",
          "kind": "reads",
          "purpose": "Describes what is on screen, element by element, with positions the agent can tap."
        },
        {
          "name": "get_coverage_report",
          "kind": "reads",
          "purpose": "Summarises code coverage after a test run."
        },
        {
          "name": "get_file_coverage",
          "kind": "reads",
          "purpose": "Shows which lines of one file the tests covered."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/xcodebuildmcp.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "peekaboo",
      "name": "Peekaboo",
      "url": "https://mcpshelf.co/servers/peekaboo",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Screenshots of any Mac app or screen, with optional questions about what is on it.",
      "description": "Peekaboo gives an agent eyes on macOS. It can capture a single window, an app or the full screen, and it can pass the image to a vision model to answer a question such as \"is the error dialog still showing?\"\n\nIt is a CLI as well as an MCP server, written by Peter Steinberger, and it needs the usual macOS Screen Recording permission the first time.",
      "good_for": [
        "Checking UI changes an agent just made",
        "Debugging desktop apps where the bug is visual",
        "Giving an agent context from apps without an API"
      ],
      "needs": [
        "macOS",
        "Screen Recording permission for the app running it",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@steipete/peekaboo-mcp"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 26 Oct 2026 we listed its tools from its package instead of running this config."
      },
      "package_note": null,
      "github": "https://github.com/steipete/Peekaboo",
      "stars": 5395,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://steipete.me/assets/img/2025/peekaboo-mcp-lightning-fast-macos-screenshots-for-ai-agents/banner.png",
      "maker": "Peter Steinberger and the OpenClaw contributors",
      "package": {
        "registry": "npm",
        "name": "@steipete/peekaboo-mcp",
        "version": "2.0.3",
        "released": "2025-07-03",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@steipete/peekaboo-mcp"
      },
      "tools": [
        {
          "name": "image",
          "kind": "changes",
          "purpose": "Captures the whole screen, one app or one window, and can describe what it sees."
        },
        {
          "name": "analyze",
          "kind": "changes",
          "purpose": "Asks an AI vision model a question about an image file you already have."
        },
        {
          "name": "list",
          "kind": "reads",
          "purpose": "Lists running apps, their windows, or Peekaboo's own status."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/peekaboo.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "kubernetes",
      "name": "Kubernetes MCP Server",
      "url": "https://mcpshelf.co/servers/kubernetes",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Pods, logs, events and resources from your current kubeconfig context.",
      "description": "This server talks to the Kubernetes API directly (it is a native Go binary, not a wrapper around kubectl) using whatever context your kubeconfig points at. The assistant can list and describe resources, pull logs, check events and, unless you stop it, create or delete things.\n\nKeep it read-only on any cluster you care about. Since version 0.0.68 (October 2026) that setting lives in a small TOML file instead of a --read-only flag, and the old flag stops it from starting. The project lives under the containers organisation on GitHub now.",
      "good_for": [
        "Asking \"why is this pod restarting?\" and getting logs plus events",
        "Exploring an unfamiliar cluster",
        "Routine checks on dev and staging clusters"
      ],
      "needs": [
        "A working kubeconfig",
        "Node.js 18 or newer (the npm package downloads the binary)"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "kubernetes-mcp-server@latest",
            "--config",
            "/path/to/read-only.toml"
          ]
        },
        "setup_steps": [
          "Make a text file, for example ~/.config/kubernetes-mcp/read-only.toml, containing one line: read_only = true",
          "Put that file's full path in the config below in place of /path/to/read-only.toml."
        ],
        "note": "Change the file to read_only = false only for clusters where you are happy for the assistant to change resources. The --read-only flag from older guides no longer works.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 14 tools."
      },
      "package_note": null,
      "github": "https://github.com/manusa/kubernetes-mcp-server",
      "stars": 2183,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/kubernetes.webp",
      "maker": "Marc Nuri and the containers community (Red Hat)",
      "package": {
        "registry": "npm",
        "name": "kubernetes-mcp-server",
        "version": "0.0.69",
        "released": "2026-10-23",
        "licence": "Apache-2.0",
        "url": "https://www.npmjs.com/package/kubernetes-mcp-server"
      },
      "tools": [
        {
          "name": "configuration_view",
          "kind": "reads",
          "purpose": "Shows the current kubeconfig, optionally trimmed to the active context."
        },
        {
          "name": "events_list",
          "kind": "reads",
          "purpose": "Lists recent warnings, errors and state changes, the first stop when something breaks."
        },
        {
          "name": "namespaces_list",
          "kind": "reads",
          "purpose": "Lists the namespaces in the cluster."
        },
        {
          "name": "nodes_log",
          "kind": "reads",
          "purpose": "Reads system logs from a node, such as the kubelet's."
        },
        {
          "name": "nodes_stats_summary",
          "kind": "reads",
          "purpose": "Shows detailed resource use on one node."
        },
        {
          "name": "nodes_top",
          "kind": "reads",
          "purpose": "Shows CPU and memory use per node from the metrics server."
        },
        {
          "name": "pods_get",
          "kind": "reads",
          "purpose": "Fetches one pod's full details."
        },
        {
          "name": "pods_list",
          "kind": "reads",
          "purpose": "Lists pods across all namespaces, with label and field filters."
        },
        {
          "name": "pods_list_in_namespace",
          "kind": "reads",
          "purpose": "Lists pods in one namespace."
        },
        {
          "name": "pods_log",
          "kind": "reads",
          "purpose": "Reads a pod's logs, including from a crashed previous run."
        },
        {
          "name": "pods_top",
          "kind": "reads",
          "purpose": "Shows CPU and memory use per pod."
        },
        {
          "name": "projects_list",
          "kind": "reads",
          "purpose": "Lists OpenShift projects."
        },
        {
          "name": "resources_get",
          "kind": "reads",
          "purpose": "Fetches any resource, including custom ones."
        },
        {
          "name": "resources_list",
          "kind": "reads",
          "purpose": "Lists resources of any kind, including custom resources."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/kubernetes.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "ida-pro",
      "name": "IDA Pro MCP",
      "url": "https://mcpshelf.co/servers/ida-pro",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Lets an assistant read and annotate the binary you have open in IDA Pro.",
      "description": "IDA Pro MCP has two halves: a plugin inside IDA that exposes the open database, and an MCP server your client talks to. Together they let the assistant decompile functions, follow cross-references, read strings and write back renames and comments.\n\nIt needs a licensed copy of IDA Pro with Python, so it is for people already doing reverse engineering, not a way to start.",
      "good_for": [
        "First passes over large binaries: naming obvious functions",
        "Explaining decompiled code",
        "Keeping notes inside the IDA database as you go"
      ],
      "needs": [
        "IDA Pro (not the free version) with IDAPython",
        "Python 3.11 or newer"
      ],
      "install": {
        "config": null,
        "setup_steps": [
          "Install the package with the MCP library it was built for: pip install ida-pro-mcp \"mcp<2\". Without the pin, pip pulls MCP 2 and the server will not start.",
          "Run ida-pro-mcp --install. It installs the IDA plugin and adds the server to the MCP clients it finds.",
          "Restart IDA and your MCP client, open a binary, and start the plugin from the Edit → Plugins menu."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We installed it with the steps on this page on 26 Oct 2026: it started and answered with 48 tools."
      },
      "package_note": "ida-pro-mcp on PyPI links back to mrexodia/ida-pro-mcp. Version 1.4.0 needs the MCP Python library below version 2.",
      "github": "https://github.com/mrexodia/ida-pro-mcp",
      "stars": 13164,
      "weekly_downloads": 3113,
      "last_commit": "2026-09-26",
      "logo": "https://mcpshelf.co/logos/ida-pro.webp",
      "maker": "Duncan Ogilvie (mrexodia)",
      "package": {
        "registry": "pypi",
        "name": "ida_pro_mcp",
        "version": "1.4.0",
        "released": "2025-10-06",
        "licence": null,
        "url": "https://pypi.org/project/ida_pro_mcp/"
      },
      "tools": [
        {
          "name": "check_connection",
          "kind": "reads",
          "purpose": "Confirms the IDA plugin is running and reachable."
        },
        {
          "name": "get_metadata",
          "kind": "reads",
          "purpose": "Describes the open database: file, architecture and base address."
        },
        {
          "name": "get_function_by_name",
          "kind": "reads",
          "purpose": "Looks up a function by its name."
        },
        {
          "name": "get_function_by_address",
          "kind": "reads",
          "purpose": "Looks up the function containing an address."
        },
        {
          "name": "get_current_address",
          "kind": "reads",
          "purpose": "Reads where your cursor is in IDA."
        },
        {
          "name": "get_current_function",
          "kind": "reads",
          "purpose": "Reads which function your cursor is in."
        },
        {
          "name": "convert_number",
          "kind": "changes",
          "purpose": "Turns a number into hex, decimal, bytes and text so the model never converts in its head."
        },
        {
          "name": "list_functions",
          "kind": "reads",
          "purpose": "Lists all functions, page by page."
        },
        {
          "name": "list_globals_filter",
          "kind": "reads",
          "purpose": "Lists global variables whose names match a filter."
        },
        {
          "name": "list_globals",
          "kind": "reads",
          "purpose": "Lists all global variables, page by page."
        },
        {
          "name": "list_imports",
          "kind": "reads",
          "purpose": "Lists imported functions and the libraries they come from."
        },
        {
          "name": "list_strings_filter",
          "kind": "reads",
          "purpose": "Lists strings that match a filter."
        },
        {
          "name": "list_strings",
          "kind": "reads",
          "purpose": "Lists the strings found in the binary, page by page."
        },
        {
          "name": "list_local_types",
          "kind": "reads",
          "purpose": "Lists the types defined in the database."
        },
        {
          "name": "decompile_function",
          "kind": "changes",
          "purpose": "Returns Hex-Rays pseudocode for a function."
        },
        {
          "name": "disassemble_function",
          "kind": "changes",
          "purpose": "Returns the assembly listing for a function."
        },
        {
          "name": "get_xrefs_to",
          "kind": "reads",
          "purpose": "Lists every reference to an address."
        },
        {
          "name": "get_xrefs_to_field",
          "kind": "reads",
          "purpose": "Lists every reference to one field of a structure."
        },
        {
          "name": "get_callees",
          "kind": "reads",
          "purpose": "Lists the functions a function calls."
        },
        {
          "name": "get_callers",
          "kind": "reads",
          "purpose": "Lists every place that calls an address."
        },
        {
          "name": "get_entry_points",
          "kind": "reads",
          "purpose": "Lists the program's entry points."
        },
        {
          "name": "set_comment",
          "kind": "changes",
          "purpose": "Adds a comment at an address, shown in both the assembly and the pseudocode."
        },
        {
          "name": "rename_local_variable",
          "kind": "changes",
          "purpose": "Renames a local variable inside a function."
        },
        {
          "name": "rename_global_variable",
          "kind": "changes",
          "purpose": "Renames a global variable."
        },
        {
          "name": "set_global_variable_type",
          "kind": "changes",
          "purpose": "Sets the type of a global variable."
        },
        {
          "name": "patch_address_assembles",
          "kind": "changes",
          "purpose": "Assembles new instructions over the code at an address."
        },
        {
          "name": "get_global_variable_value_by_name",
          "kind": "reads",
          "purpose": "Reads a global's value by name, when it is fixed at build time."
        },
        {
          "name": "get_global_variable_value_at_address",
          "kind": "reads",
          "purpose": "Reads a global's value by address, when it is fixed at build time."
        },
        {
          "name": "rename_function",
          "kind": "changes",
          "purpose": "Gives a function a meaningful name."
        },
        {
          "name": "set_function_prototype",
          "kind": "changes",
          "purpose": "Sets a function's signature: return type and arguments."
        },
        {
          "name": "declare_c_type",
          "kind": "changes",
          "purpose": "Adds or updates a type from a C declaration."
        },
        {
          "name": "set_local_variable_type",
          "kind": "changes",
          "purpose": "Sets the type of a local variable."
        },
        {
          "name": "get_stack_frame_variables",
          "kind": "reads",
          "purpose": "Lists the local variables on a function's stack."
        },
        {
          "name": "get_defined_structures",
          "kind": "reads",
          "purpose": "Lists every structure defined in the database."
        },
        {
          "name": "analyze_struct_detailed",
          "kind": "changes",
          "purpose": "Lays out every field of a structure with offsets and types."
        },
        {
          "name": "get_struct_at_address",
          "kind": "reads",
          "purpose": "Reads a structure's field values at an address."
        },
        {
          "name": "get_struct_info_simple",
          "kind": "reads",
          "purpose": "Gives a short summary of one structure."
        },
        {
          "name": "search_structures",
          "kind": "reads",
          "purpose": "Finds structures whose names match a pattern."
        },
        {
          "name": "rename_stack_frame_variable",
          "kind": "changes",
          "purpose": "Renames a variable on a function's stack."
        },
        {
          "name": "create_stack_frame_variable",
          "kind": "changes",
          "purpose": "Adds a typed variable to a function's stack frame."
        },
        {
          "name": "set_stack_frame_variable_type",
          "kind": "changes",
          "purpose": "Sets the type of a stack variable."
        },
        {
          "name": "delete_stack_frame_variable",
          "kind": "changes",
          "purpose": "Removes a variable from a function's stack frame."
        },
        {
          "name": "read_memory_bytes",
          "kind": "reads",
          "purpose": "Reads raw bytes at an address."
        },
        {
          "name": "data_read_byte",
          "kind": "changes",
          "purpose": "Reads one byte at an address."
        },
        {
          "name": "data_read_word",
          "kind": "changes",
          "purpose": "Reads a 2-byte value at an address."
        },
        {
          "name": "data_read_dword",
          "kind": "changes",
          "purpose": "Reads a 4-byte value at an address."
        },
        {
          "name": "data_read_qword",
          "kind": "changes",
          "purpose": "Reads an 8-byte value at an address."
        },
        {
          "name": "data_read_string",
          "kind": "changes",
          "purpose": "Reads the text string stored at an address."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/ida-pro.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "playwright",
      "name": "Playwright MCP",
      "url": "https://mcpshelf.co/servers/playwright",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Microsoft's browser automation server: navigate, click, type, read.",
      "description": "Playwright MCP gives the assistant a real Chromium, Firefox or WebKit browser. Instead of screenshots it reads pages through the accessibility tree, which is cheaper on context and more reliable for clicking the right button.\n\nIt is the default choice for \"go to this site and do X\" and for checking your own web app after a change.",
      "good_for": [
        "Testing your web app the way a user would",
        "Filling in forms and following multi-step flows",
        "Reading pages that need JavaScript to render"
      ],
      "needs": [
        "Node.js 18 or newer",
        "A browser download on first run (Playwright handles it)"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@playwright/mcp@latest"
          ]
        },
        "setup_steps": null,
        "note": "Add \"--headless\" to args if you do not want a browser window to open.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 25 tools."
      },
      "package_note": null,
      "github": "https://github.com/microsoft/playwright-mcp",
      "stars": 38652,
      "weekly_downloads": 3804915,
      "last_commit": "2026-10-22",
      "logo": "https://avatars.githubusercontent.com/u/6154722?v=4",
      "maker": "Microsoft (the Playwright team)",
      "package": {
        "registry": "npm",
        "name": "@playwright/mcp",
        "version": "0.0.83",
        "released": "2026-09-28",
        "licence": "Apache-2.0",
        "url": "https://www.npmjs.com/package/@playwright/mcp"
      },
      "tools": [
        {
          "name": "browser_close",
          "kind": "changes",
          "purpose": "Shuts the current page."
        },
        {
          "name": "browser_resize",
          "kind": "changes",
          "purpose": "Changes the window size, for checking layouts at other widths."
        },
        {
          "name": "browser_console_messages",
          "kind": "reads",
          "purpose": "Returns what the page logged to the browser console, filtered by level."
        },
        {
          "name": "browser_handle_dialog",
          "kind": "changes",
          "purpose": "Accepts or dismisses an alert, confirm or prompt box."
        },
        {
          "name": "browser_emulate_media",
          "kind": "changes",
          "purpose": "Switches the page to dark mode, reduced motion, print styles and similar media settings."
        },
        {
          "name": "browser_evaluate",
          "kind": "changes",
          "purpose": "Runs a JavaScript function on the page or on one element and returns the result."
        },
        {
          "name": "browser_file_upload",
          "kind": "changes",
          "purpose": "Picks local files for an open file chooser."
        },
        {
          "name": "browser_drop",
          "kind": "changes",
          "purpose": "Drops files or raw data onto an element, as if dragged in from your desktop."
        },
        {
          "name": "browser_find",
          "kind": "reads",
          "purpose": "Searches the page's accessibility tree for text or a pattern."
        },
        {
          "name": "browser_fill_form",
          "kind": "changes",
          "purpose": "Fills several form fields in one go."
        },
        {
          "name": "browser_press_key",
          "kind": "changes",
          "purpose": "Presses a single key, such as Enter or an arrow."
        },
        {
          "name": "browser_type",
          "kind": "changes",
          "purpose": "Types text into a field, optionally pressing Enter afterwards."
        },
        {
          "name": "browser_navigate",
          "kind": "changes",
          "purpose": "Opens a URL."
        },
        {
          "name": "browser_navigate_back",
          "kind": "changes",
          "purpose": "Goes back one page in history."
        },
        {
          "name": "browser_network_requests",
          "kind": "reads",
          "purpose": "Lists the requests the page has made since it loaded."
        },
        {
          "name": "browser_network_request",
          "kind": "reads",
          "purpose": "Shows the headers and body of one recorded request."
        },
        {
          "name": "browser_run_code_unsafe",
          "kind": "runs",
          "purpose": "Runs a snippet of Playwright code inside the server process. Treat it like a shell."
        },
        {
          "name": "browser_take_screenshot",
          "kind": "reads",
          "purpose": "Saves an image of the page or of one element."
        },
        {
          "name": "browser_snapshot",
          "kind": "reads",
          "purpose": "Reads the page as a structured outline of its elements, which the assistant uses to decide what to click."
        },
        {
          "name": "browser_click",
          "kind": "changes",
          "purpose": "Clicks a button, link or other element, with an optional double click, mouse button or modifier keys."
        },
        {
          "name": "browser_drag",
          "kind": "changes",
          "purpose": "Drags one element and drops it on another."
        },
        {
          "name": "browser_hover",
          "kind": "changes",
          "purpose": "Moves the mouse over an element to reveal menus or tooltips."
        },
        {
          "name": "browser_select_option",
          "kind": "changes",
          "purpose": "Chooses one or more values in a drop-down list."
        },
        {
          "name": "browser_tabs",
          "kind": "changes",
          "purpose": "Lists, opens, switches or closes tabs."
        },
        {
          "name": "browser_wait_for",
          "kind": "reads",
          "purpose": "Waits for some text to appear or vanish, or for a set time."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/playwright.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "firecrawl",
      "name": "Firecrawl",
      "url": "https://mcpshelf.co/servers/firecrawl",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Scrape pages, crawl sites and search, returned as clean Markdown.",
      "description": "Firecrawl's server sends requests to the Firecrawl API, which renders pages, strips navigation and ads, and returns Markdown or structured JSON. It can also map a site's URLs, crawl them, and run a web search and scrape the results in one go.\n\nBecause the work happens on Firecrawl’s side, it copes with JavaScript-heavy pages without a browser on your machine.",
      "good_for": [
        "Research across many pages",
        "Pulling structured data (prices, specs, listings) out of sites",
        "Reading documentation sites into context"
      ],
      "needs": [
        "A Firecrawl account and API key (there is a free tier)",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "firecrawl-mcp"
          ],
          "env": {
            "FIRECRAWL_API_KEY": "fc-your-key"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 28 tools."
      },
      "package_note": "firecrawl-mcp on npm is published from firecrawl/firecrawl-mcp-server.",
      "github": "https://github.com/mendableai/firecrawl-mcp-server",
      "stars": 7691,
      "weekly_downloads": 128628,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/firecrawl.webp",
      "maker": "Firecrawl (Mendable)",
      "package": {
        "registry": "npm",
        "name": "firecrawl-mcp",
        "version": "3.35.0",
        "released": "2026-10-26",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/firecrawl-mcp"
      },
      "tools": [
        {
          "name": "firecrawl_scrape",
          "kind": "changes",
          "purpose": "Fetches one URL and returns it as Markdown, HTML, a screenshot or JSON that fits a schema you give."
        },
        {
          "name": "firecrawl_map",
          "kind": "reads",
          "purpose": "Lists the URLs on a site without downloading their content."
        },
        {
          "name": "firecrawl_search",
          "kind": "reads",
          "purpose": "Searches the web and returns ranked results with excerpts, optionally scraping each result too."
        },
        {
          "name": "firecrawl_find_tools",
          "kind": "reads",
          "purpose": "Browses Firecrawl's catalogue of ready-made data providers."
        },
        {
          "name": "firecrawl_search_feedback",
          "kind": "changes",
          "purpose": "Rates a past search so Firecrawl can improve it, sometimes refunding a credit."
        },
        {
          "name": "firecrawl_feedback",
          "kind": "changes",
          "purpose": "Sends a rating on any Firecrawl result back to the service."
        },
        {
          "name": "firecrawl_crawl",
          "kind": "changes",
          "purpose": "Walks a whole site or section and fetches every page it finds, within limits you set."
        },
        {
          "name": "firecrawl_check_crawl_status",
          "kind": "reads",
          "purpose": "Reports progress on a crawl and returns the pages gathered so far."
        },
        {
          "name": "firecrawl_agent",
          "kind": "changes",
          "purpose": "Hands a research goal to Firecrawl's own agent, which browses on its own and returns structured findings."
        },
        {
          "name": "firecrawl_agent_status",
          "kind": "reads",
          "purpose": "Checks whether an agent job has finished and collects its results."
        },
        {
          "name": "firecrawl_interact",
          "kind": "changes",
          "purpose": "Clicks, types or navigates on a live page, for content that only appears after an action."
        },
        {
          "name": "firecrawl_interact_stop",
          "kind": "changes",
          "purpose": "Closes a browser session opened by firecrawl_interact."
        },
        {
          "name": "firecrawl_parse",
          "kind": "reads",
          "purpose": "Turns an uploaded document, such as a PDF, into clean text."
        },
        {
          "name": "firecrawl_monitor_create",
          "kind": "changes",
          "purpose": "Sets up a page to be re-checked on a schedule with change alerts."
        },
        {
          "name": "firecrawl_monitor_list",
          "kind": "reads",
          "purpose": "Lists your monitors."
        },
        {
          "name": "firecrawl_monitor_get",
          "kind": "reads",
          "purpose": "Shows one monitor's settings."
        },
        {
          "name": "firecrawl_monitor_update",
          "kind": "changes",
          "purpose": "Changes a monitor's schedule or target."
        },
        {
          "name": "firecrawl_monitor_delete",
          "kind": "changes",
          "purpose": "Removes a monitor."
        },
        {
          "name": "firecrawl_monitor_run",
          "kind": "runs",
          "purpose": "Runs a monitor's check right away."
        },
        {
          "name": "firecrawl_monitor_checks",
          "kind": "reads",
          "purpose": "Lists past checks for a monitor."
        },
        {
          "name": "firecrawl_monitor_check",
          "kind": "reads",
          "purpose": "Shows the result of one scheduled check, including what changed."
        },
        {
          "name": "firecrawl_research_search_papers",
          "kind": "reads",
          "purpose": "Searches biomedical and arXiv research papers."
        },
        {
          "name": "firecrawl_research_inspect_paper",
          "kind": "reads",
          "purpose": "Gives a quick look at one paper's details and sections."
        },
        {
          "name": "firecrawl_research_related_papers",
          "kind": "reads",
          "purpose": "Follows citations to papers linked to one you already have."
        },
        {
          "name": "firecrawl_research_read_paper",
          "kind": "reads",
          "purpose": "Reads passages from a paper's full text."
        },
        {
          "name": "firecrawl_developer_search",
          "kind": "reads",
          "purpose": "Searches public code, GitHub issues, pull requests and library docs for programming answers."
        },
        {
          "name": "firecrawl_gov_search",
          "kind": "reads",
          "purpose": "Searches US federal, state and local laws, regulations and court opinions."
        },
        {
          "name": "firecrawl_credit_usage",
          "kind": "reads",
          "purpose": "Shows how many credits you have left and what used them, by day or month."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/firecrawl.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "exa",
      "name": "Exa",
      "url": "https://mcpshelf.co/servers/exa",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Search built for AI: web results, page contents and code examples.",
      "description": "Exa is a search engine designed to be called by models. Its server returns results with the page text already attached, so the assistant can answer from sources without a second fetch step. A code-search tool finds working examples from GitHub and documentation.\n\nThe hosted version needs no install, which makes it one of the easiest search tools to add to ChatGPT.",
      "good_for": [
        "Giving an assistant up-to-date search with sources",
        "Finding code examples for an unfamiliar API",
        "Research questions that need several pages read"
      ],
      "needs": [
        "An Exa API key for the local server"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "exa-mcp-server"
          ],
          "env": {
            "EXA_API_KEY": "your-exa-key"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": "https://mcp.exa.ai/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 2 tools."
      },
      "package_note": null,
      "github": "https://github.com/exa-labs/exa-mcp-server",
      "stars": 5170,
      "weekly_downloads": 11469,
      "last_commit": "2026-10-19",
      "logo": "https://avatars.githubusercontent.com/u/77906174?v=4",
      "maker": "Exa Labs",
      "package": {
        "registry": "npm",
        "name": "exa-mcp-server",
        "version": "3.4.2",
        "released": "2026-10-06",
        "licence": null,
        "url": "https://www.npmjs.com/package/exa-mcp-server"
      },
      "tools": [
        {
          "name": "web_search_exa",
          "kind": "reads",
          "purpose": "Searches the web with Exa's neural index and returns cleaned content from the best matches, not just links."
        },
        {
          "name": "web_fetch_exa",
          "kind": "reads",
          "purpose": "Reads one or more web pages and hands back their main text as tidy Markdown."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/exa.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "bright-data",
      "name": "Bright Data",
      "url": "https://mcpshelf.co/servers/bright-data",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Search and scraping through Bright Data, for sites that block ordinary requests.",
      "description": "Bright Data sells proxy and unblocking infrastructure, and this server puts it behind MCP tools: search engine results, page scraping as Markdown, and a hosted browser for sites that need interaction.\n\nReach for it when simpler scrapers come back with captchas or empty pages.",
      "good_for": [
        "Sites that block datacenter traffic",
        "Collecting search results at volume",
        "Structured data from large marketplaces"
      ],
      "needs": [
        "A Bright Data account and API token"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@brightdata/mcp"
          ],
          "env": {
            "API_TOKEN": "your-bright-data-token"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 32 tools."
      },
      "package_note": "@brightdata/mcp on npm is published from brightdata/brightdata-mcp.",
      "github": "https://github.com/brightdata/brightdata-mcp",
      "stars": 2687,
      "weekly_downloads": 11829,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/bright-data.webp",
      "maker": "Bright Data",
      "package": {
        "registry": "npm",
        "name": "@brightdata/mcp",
        "version": "4.1.0",
        "released": "2026-10-20",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@brightdata/mcp"
      },
      "tools": [
        {
          "name": "ask_brightdata_assistant",
          "kind": "reads",
          "purpose": "Asks Bright Data's helper which of its tools or scrapers suits a job."
        },
        {
          "name": "search_engine",
          "kind": "reads",
          "purpose": "Runs a Google, Bing or Yandex search and returns the results page."
        },
        {
          "name": "scrape_as_markdown",
          "kind": "reads",
          "purpose": "Fetches a page as clean Markdown, getting past blocks and captchas."
        },
        {
          "name": "search_engine_batch",
          "kind": "reads",
          "purpose": "Runs several searches in one call."
        },
        {
          "name": "scrape_batch",
          "kind": "reads",
          "purpose": "Fetches several pages at once."
        },
        {
          "name": "scrape_as_html",
          "kind": "reads",
          "purpose": "Fetches a page's raw HTML, getting past blocks and captchas."
        },
        {
          "name": "extract",
          "kind": "reads",
          "purpose": "Scrapes a page and pulls out the fields you ask for as structured JSON."
        },
        {
          "name": "list_dataset_fields",
          "kind": "reads",
          "purpose": "Lists the fields available in one of Bright Data's prepared datasets."
        },
        {
          "name": "search_dataset",
          "kind": "reads",
          "purpose": "Searches one of Bright Data's prepared datasets."
        },
        {
          "name": "search_scrapers",
          "kind": "reads",
          "purpose": "Finds a ready-made scraper for a site."
        },
        {
          "name": "get_scraper_details",
          "kind": "reads",
          "purpose": "Shows what inputs a ready-made scraper expects, with a sample."
        },
        {
          "name": "run_scraper",
          "kind": "runs",
          "purpose": "Starts a ready-made scraper for sites like Amazon, LinkedIn or TikTok."
        },
        {
          "name": "get_scraper_progress",
          "kind": "reads",
          "purpose": "Checks how far a running scraper job has got."
        },
        {
          "name": "get_scraper_results",
          "kind": "reads",
          "purpose": "Collects the records from a finished scraper job."
        },
        {
          "name": "refresh_scrapers",
          "kind": "reads",
          "purpose": "Reloads the list of ready-made scrapers."
        },
        {
          "name": "session_stats",
          "kind": "reads",
          "purpose": "Shows how many requests each tool has used this session."
        },
        {
          "name": "chatgpt_ai_insights",
          "kind": "changes",
          "purpose": "Sends a prompt to ChatGPT and captures the answer it gives, for tracking how AI mentions a brand."
        },
        {
          "name": "perplexity_ai_insights",
          "kind": "changes",
          "purpose": "Captures Perplexity's answer to a prompt, sources included."
        },
        {
          "name": "scraping_browser_navigate",
          "kind": "reads",
          "purpose": "Opens a URL in a remote browser that runs on Bright Data's network."
        },
        {
          "name": "scraping_browser_go_back",
          "kind": "reads",
          "purpose": "Goes back one page in the remote browser."
        },
        {
          "name": "scraping_browser_go_forward",
          "kind": "reads",
          "purpose": "Goes forward one page."
        },
        {
          "name": "scraping_browser_snapshot",
          "kind": "reads",
          "purpose": "Lists the page's buttons, links and fields so the agent can pick one."
        },
        {
          "name": "scraping_browser_click_ref",
          "kind": "changes",
          "purpose": "Clicks an element on the remote browser page."
        },
        {
          "name": "scraping_browser_type_ref",
          "kind": "changes",
          "purpose": "Types text into a field."
        },
        {
          "name": "scraping_browser_screenshot",
          "kind": "reads",
          "purpose": "Takes a screenshot of the remote page."
        },
        {
          "name": "scraping_browser_network_requests",
          "kind": "reads",
          "purpose": "Lists the network calls the page made."
        },
        {
          "name": "scraping_browser_wait_for_ref",
          "kind": "reads",
          "purpose": "Waits for an element to appear before carrying on."
        },
        {
          "name": "scraping_browser_fill_form",
          "kind": "changes",
          "purpose": "Fills in several form fields in one step."
        },
        {
          "name": "scraping_browser_get_text",
          "kind": "reads",
          "purpose": "Reads the current page's visible text."
        },
        {
          "name": "scraping_browser_get_html",
          "kind": "reads",
          "purpose": "Reads the current page's HTML."
        },
        {
          "name": "scraping_browser_scroll",
          "kind": "reads",
          "purpose": "Scrolls the page down."
        },
        {
          "name": "scraping_browser_scroll_to_ref",
          "kind": "reads",
          "purpose": "Scrolls until a chosen element is in view."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/bright-data.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "searxng",
      "name": "SearXNG",
      "url": "https://mcpshelf.co/servers/searxng",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Web search through your own SearXNG instance: no vendor, no API key.",
      "description": "SearXNG is an open-source metasearch engine you host yourself. This server points your assistant at it, so searches go through your instance rather than a commercial search API, and it can fetch a result page as Markdown.\n\nIf you do not already run SearXNG, a commercial option like Exa is less work.",
      "good_for": [
        "Search without sending queries to a search vendor",
        "Local or air-gapped setups",
        "Avoiding per-query costs"
      ],
      "needs": [
        "A running SearXNG instance with JSON output enabled",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "mcp-searxng"
          ],
          "env": {
            "SEARXNG_URL": "http://localhost:8080"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 4 tools."
      },
      "package_note": null,
      "github": "https://github.com/ihor-sokoliuk/mcp-searxng",
      "stars": 1329,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/searxng.webp",
      "maker": "Ihor Sokoliuk and contributors",
      "package": {
        "registry": "npm",
        "name": "mcp-searxng",
        "version": "2.8.1",
        "released": "2026-10-25",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/mcp-searxng"
      },
      "tools": [
        {
          "name": "searxng_web_search",
          "kind": "reads",
          "purpose": "Runs a search through your SearXNG instance and returns titles, links and snippets, with paging and filters."
        },
        {
          "name": "searxng_search_suggestions",
          "kind": "reads",
          "purpose": "Fetches autocomplete ideas to sharpen a vague query before searching."
        },
        {
          "name": "searxng_instance_info",
          "kind": "reads",
          "purpose": "Asks your SearXNG instance which engines, categories and defaults it offers."
        },
        {
          "name": "web_url_read",
          "kind": "reads",
          "purpose": "Opens a web page or PDF and returns readable text, or just the headings or section you ask for."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/searxng.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "postgres-mcp-pro",
      "name": "Postgres MCP Pro",
      "url": "https://mcpshelf.co/servers/postgres-mcp-pro",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "SQL, query plans, health checks and index advice for Postgres.",
      "description": "Most database servers stop at running SQL. Postgres MCP Pro adds the things a DBA would check: explain plans, slow queries from pg_stat_statements, index recommendations, and health checks for vacuum, bloat and connections.\n\nIt has an access-mode switch. Restricted mode keeps it to read-only transactions with time limits, which is where to start on any database that matters.",
      "good_for": [
        "Finding why a query is slow",
        "Index suggestions backed by real workload stats",
        "Safe, read-only exploration of production data"
      ],
      "needs": [
        "Docker",
        "A Postgres connection string"
      ],
      "install": {
        "config": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-e",
            "DATABASE_URI",
            "crystaldba/postgres-mcp",
            "--access-mode=restricted"
          ],
          "env": {
            "DATABASE_URI": "postgresql://user:password@localhost:5432/dbname"
          }
        },
        "setup_steps": null,
        "note": "The image rewrites localhost in the connection string so it reaches a database on your own machine. Swap restricted for unrestricted only on a database you can afford to change.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 9 tools."
      },
      "package_note": "The npm package called \"postgres-mcp\" is a different project (llm-graph/postgres-mcp). Crystal DBA publishes this server to PyPI and Docker Hub. In October 2026 \"uvx postgres-mcp\" falls back to an old 0.1.0 release that crashes, because 0.3.0 pins a pglast version PyPI no longer has, so we publish the Docker image instead.",
      "github": "https://github.com/crystaldba/postgres-mcp",
      "stars": 3427,
      "weekly_downloads": 147019,
      "last_commit": "2026-08-17",
      "logo": "https://mcpshelf.co/logos/postgres-mcp-pro.webp",
      "maker": "Crystal DBA",
      "package": null,
      "tools": [
        {
          "name": "list_schemas",
          "kind": "reads",
          "purpose": "Lists the schemas in the database."
        },
        {
          "name": "list_objects",
          "kind": "reads",
          "purpose": "Lists the tables, views, sequences and extensions in a schema."
        },
        {
          "name": "get_object_details",
          "kind": "reads",
          "purpose": "Describes a table or view: columns, constraints and indexes."
        },
        {
          "name": "explain_query",
          "kind": "changes",
          "purpose": "Shows how Postgres plans to run a query, and can test the plan with pretend indexes that do not exist yet."
        },
        {
          "name": "analyze_workload_indexes",
          "kind": "changes",
          "purpose": "Finds the heaviest queries in your workload and works out which indexes would speed them up most."
        },
        {
          "name": "analyze_query_indexes",
          "kind": "changes",
          "purpose": "Suggests the best indexes for up to ten queries you hand it."
        },
        {
          "name": "analyze_db_health",
          "kind": "changes",
          "purpose": "Runs a set of fixed checks: cache hit rate, connections, bloated or unused indexes, vacuum and sequence limits."
        },
        {
          "name": "get_top_queries",
          "kind": "reads",
          "purpose": "Lists the slowest queries by total time, from pg_stat_statements."
        },
        {
          "name": "execute_sql",
          "kind": "runs",
          "purpose": "Runs SQL, limited to read-only transactions in restricted mode."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/postgres-mcp-pro.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "supabase",
      "name": "Supabase",
      "url": "https://mcpshelf.co/servers/supabase",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "Manage Supabase projects, tables, migrations, logs and Edge Functions.",
      "description": "Supabase maintains this server. It covers the whole project, not just the database: list and create projects, run SQL, apply migrations, read logs, generate TypeScript types and deploy Edge Functions.\n\nThe easiest setup is the hosted server, which signs you in with your Supabase account in the browser. You can scope it to one project and to read-only from the URL.",
      "good_for": [
        "Building a Supabase app with Cursor or Claude Code",
        "Checking logs and advisories when something breaks",
        "Writing and applying migrations"
      ],
      "needs": [
        "A Supabase account"
      ],
      "install": {
        "config": {
          "url": "https://mcp.supabase.com/mcp"
        },
        "setup_steps": null,
        "note": "Add ?project_ref=your-project-ref&read_only=true to the URL to lock it to one project and to read-only queries.",
        "remote_url": "https://mcp.supabase.com/mcp"
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 26 Oct 2026 we listed its tools from its package instead of running this config."
      },
      "package_note": "The npm package called \"supabase-mcp\" comes from a different repository (Cappahccino/SB-MCP). Supabase's own server is the hosted URL above; their local package is @supabase/mcp-server-supabase.",
      "github": "https://github.com/supabase-community/supabase-mcp",
      "stars": 2971,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/supabase.webp",
      "maker": "Supabase",
      "package": null,
      "tools": [
        {
          "name": "list_organizations",
          "kind": "reads",
          "purpose": "Lists the organisations your account belongs to."
        },
        {
          "name": "get_organization",
          "kind": "reads",
          "purpose": "Shows one organisation's details and plan."
        },
        {
          "name": "list_projects",
          "kind": "reads",
          "purpose": "Lists every project you can reach."
        },
        {
          "name": "get_project",
          "kind": "reads",
          "purpose": "Shows one project's details, region and status."
        },
        {
          "name": "get_cost",
          "kind": "reads",
          "purpose": "Tells you what a new project or branch would cost before you make it."
        },
        {
          "name": "confirm_cost",
          "kind": "reads",
          "purpose": "Asks you to accept the price before a new project or branch is created."
        },
        {
          "name": "create_project",
          "kind": "changes",
          "purpose": "Starts a new Supabase project in the organisation and region you choose."
        },
        {
          "name": "pause_project",
          "kind": "changes",
          "purpose": "Pauses a project so it stops running."
        },
        {
          "name": "restore_project",
          "kind": "changes",
          "purpose": "Wakes a paused project up again."
        },
        {
          "name": "list_tables",
          "kind": "reads",
          "purpose": "Lists tables in the chosen schemas, with their columns."
        },
        {
          "name": "list_extensions",
          "kind": "reads",
          "purpose": "Shows which Postgres extensions are installed."
        },
        {
          "name": "list_migrations",
          "kind": "reads",
          "purpose": "Lists the migrations already applied to the database."
        },
        {
          "name": "apply_migration",
          "kind": "changes",
          "purpose": "Runs a schema change as a named migration so it is tracked like any other."
        },
        {
          "name": "execute_sql",
          "kind": "runs",
          "purpose": "Runs a SQL query against the project's Postgres database and returns the rows."
        },
        {
          "name": "query_logs",
          "kind": "reads",
          "purpose": "Pulls recent logs for the API, Postgres, auth, storage or functions to help debug."
        },
        {
          "name": "get_advisors",
          "kind": "reads",
          "purpose": "Lists security and performance warnings, such as tables missing row level security."
        },
        {
          "name": "get_project_url",
          "kind": "reads",
          "purpose": "Returns the API URL your app uses to reach the project."
        },
        {
          "name": "get_publishable_keys",
          "kind": "reads",
          "purpose": "Returns the public keys a front end needs to talk to the project."
        },
        {
          "name": "generate_typescript_types",
          "kind": "reads",
          "purpose": "Builds TypeScript types from the current database schema."
        },
        {
          "name": "list_edge_functions",
          "kind": "reads",
          "purpose": "Lists the Edge Functions deployed in a project."
        },
        {
          "name": "get_edge_function",
          "kind": "reads",
          "purpose": "Fetches the source of one deployed Edge Function."
        },
        {
          "name": "deploy_edge_function",
          "kind": "changes",
          "purpose": "Uploads and deploys an Edge Function from code the agent wrote."
        },
        {
          "name": "create_branch",
          "kind": "changes",
          "purpose": "Spins up a development branch of a project to try changes safely."
        },
        {
          "name": "list_branches",
          "kind": "reads",
          "purpose": "Lists a project's development branches and their state."
        },
        {
          "name": "delete_branch",
          "kind": "changes",
          "purpose": "Removes a development branch you no longer need."
        },
        {
          "name": "merge_branch",
          "kind": "changes",
          "purpose": "Merges a branch's migrations and functions back into production."
        },
        {
          "name": "reset_branch",
          "kind": "changes",
          "purpose": "Rolls a branch's migrations back to an earlier version."
        },
        {
          "name": "rebase_branch",
          "kind": "changes",
          "purpose": "Brings a branch up to date with migrations added to production since it was made."
        },
        {
          "name": "search_docs",
          "kind": "reads",
          "purpose": "Searches Supabase's documentation for an up-to-date answer."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/supabase.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "mcp-toolbox-for-databases",
      "name": "MCP Toolbox for Databases",
      "url": "https://mcpshelf.co/servers/mcp-toolbox-for-databases",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "Google's toolbox for Postgres, MySQL, BigQuery, Spanner and other databases.",
      "description": "Toolbox is a server from Google that ships ready-made tool sets for a long list of databases. Pick one with --prebuilt and pass connection details as environment variables, or write your own tools file to expose only the queries you approve.\n\nThat second option is the reason to choose it: you can give an assistant five named queries instead of raw SQL.",
      "good_for": [
        "Teams on Google Cloud databases",
        "Exposing a fixed set of approved queries",
        "One server for several database types"
      ],
      "needs": [
        "Node.js 18 or newer",
        "Connection details for your database"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@toolbox-sdk/server",
            "--prebuilt=postgres",
            "--stdio"
          ],
          "env": {
            "POSTGRES_HOST": "localhost",
            "POSTGRES_PORT": "5432",
            "POSTGRES_DATABASE": "dbname",
            "POSTGRES_USER": "user",
            "POSTGRES_PASSWORD": "password"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 29 tools."
      },
      "package_note": "@toolbox-sdk/server on npm is published from googleapis/mcp-toolbox.",
      "github": "https://github.com/googleapis/genai-toolbox",
      "stars": 16728,
      "weekly_downloads": 31178,
      "last_commit": "2026-10-25",
      "logo": "https://avatars.githubusercontent.com/u/16785467?v=4",
      "maker": "Google (googleapis)",
      "package": {
        "registry": "npm",
        "name": "@toolbox-sdk/server",
        "version": "1.15.0",
        "released": "2026-10-23",
        "licence": "Apache-2.0",
        "url": "https://www.npmjs.com/package/@toolbox-sdk/server"
      },
      "tools": [
        {
          "name": "database_overview",
          "kind": "reads",
          "purpose": "Gives a quick snapshot of the server: version, uptime, whether it is a replica and connection counts."
        },
        {
          "name": "execute_sql",
          "kind": "runs",
          "purpose": "Runs a SQL statement the agent writes against the connected database."
        },
        {
          "name": "get_column_cardinality",
          "kind": "reads",
          "purpose": "Estimates how many distinct values each column of a table holds."
        },
        {
          "name": "get_query_plan",
          "kind": "changes",
          "purpose": "Shows how Postgres would run a query, as JSON, without running it."
        },
        {
          "name": "list_active_queries",
          "kind": "reads",
          "purpose": "Shows the queries running right now, longest first."
        },
        {
          "name": "list_autovacuum_configurations",
          "kind": "changes",
          "purpose": "Shows the server's autovacuum settings."
        },
        {
          "name": "list_available_extensions",
          "kind": "reads",
          "purpose": "Lists extensions that could be installed on this server."
        },
        {
          "name": "list_database_stats",
          "kind": "reads",
          "purpose": "Shows activity and size figures for each database on the server."
        },
        {
          "name": "list_indexes",
          "kind": "reads",
          "purpose": "Lists your indexes with their size and how often they are used."
        },
        {
          "name": "list_installed_extensions",
          "kind": "reads",
          "purpose": "Lists the extensions already installed."
        },
        {
          "name": "list_invalid_indexes",
          "kind": "changes",
          "purpose": "Finds broken indexes that take space but the planner cannot use."
        },
        {
          "name": "list_locks",
          "kind": "reads",
          "purpose": "Shows which sessions hold locks and on what."
        },
        {
          "name": "list_memory_configurations",
          "kind": "changes",
          "purpose": "Shows the server's memory settings."
        },
        {
          "name": "list_pg_settings",
          "kind": "reads",
          "purpose": "Lists server configuration values."
        },
        {
          "name": "list_publication_tables",
          "kind": "reads",
          "purpose": "Lists tables included in logical replication publications."
        },
        {
          "name": "list_query_stats",
          "kind": "reads",
          "purpose": "Ranks past queries by total time, from pg_stat_statements."
        },
        {
          "name": "list_replication_slots",
          "kind": "changes",
          "purpose": "Lists replication slots and how far behind each one is."
        },
        {
          "name": "list_roles",
          "kind": "reads",
          "purpose": "Lists the user roles and their rights."
        },
        {
          "name": "list_schemas",
          "kind": "reads",
          "purpose": "Lists the schemas in the database."
        },
        {
          "name": "list_sequences",
          "kind": "reads",
          "purpose": "Lists sequences and their current values."
        },
        {
          "name": "list_stored_procedure",
          "kind": "reads",
          "purpose": "Lists stored procedures with their language and definition."
        },
        {
          "name": "list_table_stats",
          "kind": "reads",
          "purpose": "Shows table activity, such as sequential scans and row counts."
        },
        {
          "name": "list_tables",
          "kind": "reads",
          "purpose": "Lists the tables in the database with their columns, so the agent learns the schema."
        },
        {
          "name": "list_tablespaces",
          "kind": "reads",
          "purpose": "Lists tablespaces and their size."
        },
        {
          "name": "list_top_bloated_tables",
          "kind": "changes",
          "purpose": "Finds the tables with the most dead rows waiting to be cleaned up."
        },
        {
          "name": "list_triggers",
          "kind": "reads",
          "purpose": "Lists triggers and which tables they fire on."
        },
        {
          "name": "list_views",
          "kind": "reads",
          "purpose": "Lists views and their definitions."
        },
        {
          "name": "long_running_transactions",
          "kind": "reads",
          "purpose": "Finds transactions that have been open longer than a limit you set."
        },
        {
          "name": "replication_stats",
          "kind": "reads",
          "purpose": "Shows each replica's lag and connection details."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/mcp-toolbox-for-databases.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "qdrant",
      "name": "Qdrant",
      "url": "https://mcpshelf.co/servers/qdrant",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "Store notes and find them by meaning in a Qdrant vector collection.",
      "description": "Two tools: store and find. Text goes in with optional metadata, gets embedded locally, and comes back when a later question is close in meaning. It works as long-term memory for an assistant or as a searchable snippet library.\n\nIt runs against a local Qdrant, Qdrant Cloud, or an on-disk path with no server at all.",
      "good_for": [
        "Long-term memory across conversations",
        "A searchable library of code snippets",
        "Small retrieval setups without writing code"
      ],
      "needs": [
        "uv (for uvx)",
        "A Qdrant instance, or a local path for embedded storage"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "mcp-server-qdrant"
          ],
          "env": {
            "QDRANT_URL": "http://localhost:6333",
            "COLLECTION_NAME": "assistant-memory"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 26 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": "The npm package called \"mcp-server-qdrant\" comes from a different repository (hlos-ai/mcp-servers). Qdrant publishes this server to PyPI under that name, so it runs with uvx.",
      "github": "https://github.com/qdrant/mcp-server-qdrant",
      "stars": 1554,
      "weekly_downloads": 11365,
      "last_commit": "2026-09-04",
      "logo": "https://avatars.githubusercontent.com/u/73504361?v=4",
      "maker": "Qdrant",
      "package": {
        "registry": "pypi",
        "name": "mcp-server-qdrant",
        "version": "0.8.1",
        "released": "2025-12-10",
        "licence": "Apache-2.0",
        "url": "https://pypi.org/project/mcp-server-qdrant/"
      },
      "tools": [
        {
          "name": "qdrant-find",
          "kind": "reads",
          "purpose": "Searches the stored notes by meaning and returns the closest matches."
        },
        {
          "name": "qdrant-store",
          "kind": "changes",
          "purpose": "Saves a piece of text, with optional metadata, as a searchable memory in a Qdrant collection."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/qdrant.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "excel",
      "name": "Excel MCP Server",
      "url": "https://mcpshelf.co/servers/excel",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "Create, edit, format and chart .xlsx files, no Excel needed.",
      "description": "This server works on Excel files directly, so it runs on any machine, including servers without Office. The assistant can read ranges, write values and formulas, format cells, add charts and pivot tables, and manage sheets.\n\nIt can run over stdio for desktop clients or over HTTP if you want to host it.",
      "good_for": [
        "Turning data from a conversation into a real spreadsheet",
        "Cleaning or reshaping existing workbooks",
        "Reports generated on a schedule"
      ],
      "needs": [
        "uv (for uvx)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "excel-mcp-server",
            "stdio"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 46 tools."
      },
      "package_note": "The npm package called \"excel-mcp-server\" has no link to this project. The project publishes to PyPI under that name, so it runs with uvx.",
      "github": "https://github.com/haris-musa/excel-mcp-server",
      "stars": 4268,
      "weekly_downloads": 50635,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/excel.webp",
      "maker": "Haris Musa",
      "package": {
        "registry": "pypi",
        "name": "excel-mcp-server",
        "version": "2.2.2",
        "released": "2026-10-21",
        "licence": "MIT",
        "url": "https://pypi.org/project/excel-mcp-server/"
      },
      "tools": [
        {
          "name": "create_workbook",
          "kind": "changes",
          "purpose": "Makes a new, empty Excel file."
        },
        {
          "name": "describe_workbook",
          "kind": "reads",
          "purpose": "Lists a workbook's sheets, tables, names and sizes, as a first look."
        },
        {
          "name": "set_workbook_settings",
          "kind": "changes",
          "purpose": "Changes workbook-wide options such as calculation mode."
        },
        {
          "name": "list_workbooks",
          "kind": "reads",
          "purpose": "Lists the Excel files in the allowed folders."
        },
        {
          "name": "export_workbook",
          "kind": "reads",
          "purpose": "Sends a workbook from the server back to you when it runs remotely."
        },
        {
          "name": "import_workbook",
          "kind": "changes",
          "purpose": "Uploads a workbook to a remote server so it can be edited."
        },
        {
          "name": "import_csv",
          "kind": "changes",
          "purpose": "Pulls a CSV or TSV into a sheet and turns numbers and dates into real values the way Excel's own import does."
        },
        {
          "name": "export_csv",
          "kind": "changes",
          "purpose": "Saves a range out as a CSV file."
        },
        {
          "name": "describe_sheet",
          "kind": "reads",
          "purpose": "Summarises one sheet: used range, headers, tables, charts and frozen panes."
        },
        {
          "name": "create_sheet",
          "kind": "changes",
          "purpose": "Adds a new worksheet."
        },
        {
          "name": "rename_sheet",
          "kind": "changes",
          "purpose": "Renames a worksheet."
        },
        {
          "name": "copy_sheet",
          "kind": "changes",
          "purpose": "Duplicates a worksheet."
        },
        {
          "name": "delete_sheet",
          "kind": "changes",
          "purpose": "Deletes a worksheet."
        },
        {
          "name": "insert_rows_or_columns",
          "kind": "changes",
          "purpose": "Inserts rows or columns and keeps every formula reference right."
        },
        {
          "name": "delete_rows_or_columns",
          "kind": "changes",
          "purpose": "Deletes rows or columns and fixes every formula that pointed at them."
        },
        {
          "name": "read_range",
          "kind": "reads",
          "purpose": "Reads cell values and formulas, working out formula results even if the file was never opened in Excel."
        },
        {
          "name": "write_range",
          "kind": "changes",
          "purpose": "Writes values, formulas, dates or links into cells."
        },
        {
          "name": "clear_range",
          "kind": "changes",
          "purpose": "Empties a block of cells, keeping or removing formatting."
        },
        {
          "name": "copy_range",
          "kind": "changes",
          "purpose": "Copies cells to another place, with paste-special options."
        },
        {
          "name": "sort_range",
          "kind": "changes",
          "purpose": "Sorts rows by one or more columns."
        },
        {
          "name": "transform_range",
          "kind": "changes",
          "purpose": "Cleans data: removes duplicates, splits text to columns or fills a series."
        },
        {
          "name": "find_cells",
          "kind": "reads",
          "purpose": "Searches for values or formulas across a sheet."
        },
        {
          "name": "replace_cells",
          "kind": "changes",
          "purpose": "Finds and replaces text or values."
        },
        {
          "name": "trace_formula",
          "kind": "reads",
          "purpose": "Shows what a formula depends on and what depends on it, step by step, to find a wrong number."
        },
        {
          "name": "goal_seek",
          "kind": "changes",
          "purpose": "Changes one input until a formula hits the target you set."
        },
        {
          "name": "format_range",
          "kind": "changes",
          "purpose": "Sets fonts, fills, borders and number formats."
        },
        {
          "name": "merge_cells",
          "kind": "changes",
          "purpose": "Merges or unmerges cells."
        },
        {
          "name": "set_sheet_layout",
          "kind": "changes",
          "purpose": "Sets column widths, frozen panes, grouping, print setup and protection."
        },
        {
          "name": "add_conditional_format",
          "kind": "changes",
          "purpose": "Adds colour scales, data bars, icon sets or highlight rules to a range."
        },
        {
          "name": "add_data_validation",
          "kind": "changes",
          "purpose": "Adds dropdown lists or value limits to cells."
        },
        {
          "name": "set_table",
          "kind": "changes",
          "purpose": "Turns a range into an Excel table, with totals row and calculated columns."
        },
        {
          "name": "create_chart",
          "kind": "changes",
          "purpose": "Builds a native Excel chart, from bar and line to waterfall, treemap and funnel."
        },
        {
          "name": "delete_chart",
          "kind": "changes",
          "purpose": "Removes a chart."
        },
        {
          "name": "add_sparklines",
          "kind": "changes",
          "purpose": "Draws tiny in-cell line, column or win/loss charts."
        },
        {
          "name": "delete_sparklines",
          "kind": "changes",
          "purpose": "Removes sparklines."
        },
        {
          "name": "create_pivot_table",
          "kind": "changes",
          "purpose": "Builds a real PivotTable that Excel can refresh, with grouping and calculated fields."
        },
        {
          "name": "delete_pivot_table",
          "kind": "changes",
          "purpose": "Removes a PivotTable."
        },
        {
          "name": "add_slicer",
          "kind": "changes",
          "purpose": "Adds a slicer button panel to filter a PivotTable or table."
        },
        {
          "name": "delete_slicer",
          "kind": "changes",
          "purpose": "Removes a slicer."
        },
        {
          "name": "set_defined_name",
          "kind": "changes",
          "purpose": "Creates or updates a named range."
        },
        {
          "name": "delete_defined_name",
          "kind": "changes",
          "purpose": "Removes a named range."
        },
        {
          "name": "set_note",
          "kind": "changes",
          "purpose": "Adds or edits a note on a cell."
        },
        {
          "name": "delete_note",
          "kind": "changes",
          "purpose": "Removes a cell note."
        },
        {
          "name": "insert_image",
          "kind": "changes",
          "purpose": "Places a picture on a sheet."
        },
        {
          "name": "delete_image",
          "kind": "changes",
          "purpose": "Removes a picture from a sheet."
        },
        {
          "name": "read_vba",
          "kind": "reads",
          "purpose": "Shows the macro code inside an .xlsm file without running it."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/excel.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "blender",
      "name": "Blender MCP",
      "url": "https://mcpshelf.co/servers/blender",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Prompt-driven modelling in a running copy of Blender.",
      "description": "Blender MCP connects an assistant to Blender through a small add-on that listens on a local socket. From there the assistant can add and transform objects, set materials, inspect the scene and run Blender Python, while you watch the viewport.\n\nIt can also pull assets from Poly Haven and generate models through services like Hyper3D when you enable them.",
      "good_for": [
        "Blocking out scenes from a description",
        "Learning Blender by asking for changes",
        "Batch edits that would take many clicks"
      ],
      "needs": [
        "Blender 3.0 or newer",
        "uv (for uvx)",
        "The addon.py add-on from the project installed in Blender"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "blender-mcp"
          ]
        },
        "setup_steps": [
          "Download addon.py from the project on GitHub.",
          "In Blender: Edit → Preferences → Add-ons → Install, pick addon.py and enable it.",
          "In the 3D view sidebar, open the BlenderMCP tab and click Connect.",
          "Add the config below to your client and restart it."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 9 tools."
      },
      "package_note": "The npm package called \"blender-mcp\" has no link to this project. The real server is blender-mcp on PyPI, published from the same author, so it runs with uvx.",
      "github": "https://github.com/ahujasid/blender-mcp",
      "stars": 32401,
      "weekly_downloads": 63707,
      "last_commit": "2026-10-24",
      "logo": "https://mcpshelf.co/logos/blender.webp",
      "maker": "Siddharth Ahuja and contributors (an independent project, not made by the Blender Foundation)",
      "package": {
        "registry": "pypi",
        "name": "blender-mcp",
        "version": "2.0.0",
        "released": "2026-09-16",
        "licence": "MIT",
        "url": "https://pypi.org/project/blender-mcp/"
      },
      "tools": [
        {
          "name": "get_addon_status",
          "kind": "reads",
          "purpose": "Checks the Blender version, whether the addon matches the server and which asset sources are switched on."
        },
        {
          "name": "disable_telemetry",
          "kind": "changes",
          "purpose": "Switches off the optional sharing of prompts, code and screenshots when you ask it to."
        },
        {
          "name": "get_scene_info",
          "kind": "reads",
          "purpose": "Describes the scene in text: objects, positions, sizes and whether meshes and rigs look healthy."
        },
        {
          "name": "execute_blender_code",
          "kind": "runs",
          "purpose": "Runs Python inside your open Blender session to model, light, rig or animate, and returns whatever the script prints."
        },
        {
          "name": "record_trajectory_feedback",
          "kind": "changes",
          "purpose": "Logs whether you kept or rejected a result, for people who opted in to sharing data."
        },
        {
          "name": "look",
          "kind": "changes",
          "purpose": "Takes a picture of the scene from the viewport, a camera or several angles so the agent can check its own work."
        },
        {
          "name": "generate_3d",
          "kind": "changes",
          "purpose": "Creates one new textured model from a text prompt or a picture, using Meshy, Tripo, Hyper3D Rodin or Hunyuan3D, and drops it into the scene."
        },
        {
          "name": "search_assets",
          "kind": "reads",
          "purpose": "Searches Poly Haven, Sketchfab or Poly Pizza for models, textures and HDRIs that match what you describe."
        },
        {
          "name": "import_asset",
          "kind": "changes",
          "purpose": "Downloads an asset found by search_assets and places it in the scene, optionally scaled or applied to an object."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/blender.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "framelink-figma",
      "name": "Framelink Figma MCP",
      "url": "https://mcpshelf.co/servers/framelink-figma",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Feeds Figma layout and styling to coding agents so the UI matches the design.",
      "description": "Paste a link to a Figma frame and Framelink fetches it through the Figma API, then trims the response down to the layout, spacing, colours and text a coding agent needs. Less noise than the raw API means better first attempts at the component.\n\nIt reads designs only; it does not change your Figma files.",
      "good_for": [
        "Building components from a Figma frame in Cursor",
        "Matching spacing and type without measuring by hand",
        "Design handoff for small teams"
      ],
      "needs": [
        "A Figma personal access token",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "figma-developer-mcp",
            "--figma-api-key=YOUR-KEY",
            "--stdio"
          ]
        },
        "setup_steps": null,
        "note": "Replace YOUR-KEY with a Figma personal access token (Figma → Settings → Security).",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 2 tools."
      },
      "package_note": null,
      "github": "https://github.com/GLips/Figma-Context-MCP",
      "stars": 16071,
      "weekly_downloads": 61327,
      "last_commit": "2026-10-25",
      "logo": "https://mcpshelf.co/logos/framelink-figma.webp",
      "maker": "Framelink (Graham Lipsman and contributors)",
      "package": {
        "registry": "npm",
        "name": "figma-developer-mcp",
        "version": "0.13.2",
        "released": "2026-06-18",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/figma-developer-mcp"
      },
      "tools": [
        {
          "name": "get_figma_data",
          "kind": "reads",
          "purpose": "Fetches a Figma file or one frame and trims it to the layout, text, styles and components a coding agent needs."
        },
        {
          "name": "download_figma_images",
          "kind": "reads",
          "purpose": "Saves the icons and images used in a design as SVG or PNG files into your project."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/framelink-figma.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "talk-to-figma",
      "name": "Talk to Figma",
      "url": "https://mcpshelf.co/servers/talk-to-figma",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Read and edit Figma documents from an agent, through a Figma plugin.",
      "description": "Where Framelink only reads designs, Talk to Figma can change them: create frames and text, set fills and auto-layout, rename layers and read selections. It works through a Figma plugin that connects to a small WebSocket relay on your machine.\n\nThat means three parts to run, so expect a few minutes of setup the first time.",
      "good_for": [
        "Bulk edits like renaming layers or swapping text",
        "Generating rough layouts to refine by hand",
        "Pulling design data into code"
      ],
      "needs": [
        "The Figma desktop app",
        "Bun (for the relay)",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "cursor-talk-to-figma-mcp@latest"
          ]
        },
        "setup_steps": [
          "Start the relay: bunx cursor-talk-to-figma-socket",
          "Install the Cursor Talk to Figma plugin in Figma and run it; note the channel it shows.",
          "Add the config below to your client, then ask the assistant to join that channel."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 40 tools."
      },
      "package_note": null,
      "github": "https://github.com/sonnylazuardi/cursor-talk-to-figma-mcp",
      "stars": 7071,
      "weekly_downloads": 692,
      "last_commit": "2026-07-26",
      "logo": "https://mcpshelf.co/logos/talk-to-figma.webp",
      "maker": "Sonny Lazuardi and contributors",
      "package": {
        "registry": "npm",
        "name": "cursor-talk-to-figma-mcp",
        "version": "0.3.5",
        "released": "2026-03-07",
        "licence": null,
        "url": "https://www.npmjs.com/package/cursor-talk-to-figma-mcp"
      },
      "tools": [
        {
          "name": "get_document_info",
          "kind": "reads",
          "purpose": "Describes the open document and its pages."
        },
        {
          "name": "get_selection",
          "kind": "reads",
          "purpose": "Describes what you have selected right now."
        },
        {
          "name": "read_my_design",
          "kind": "reads",
          "purpose": "Reads your current selection in full detail."
        },
        {
          "name": "get_node_info",
          "kind": "reads",
          "purpose": "Reads everything about one layer."
        },
        {
          "name": "get_nodes_info",
          "kind": "reads",
          "purpose": "Reads several layers at once."
        },
        {
          "name": "create_rectangle",
          "kind": "changes",
          "purpose": "Adds a rectangle."
        },
        {
          "name": "create_frame",
          "kind": "changes",
          "purpose": "Adds a frame, with auto layout, padding and colours if you want them."
        },
        {
          "name": "create_text",
          "kind": "changes",
          "purpose": "Adds a text layer with font size, weight and colour."
        },
        {
          "name": "set_fill_color",
          "kind": "changes",
          "purpose": "Changes a layer's fill colour."
        },
        {
          "name": "set_stroke_color",
          "kind": "changes",
          "purpose": "Changes a layer's border colour and weight."
        },
        {
          "name": "move_node",
          "kind": "changes",
          "purpose": "Moves a layer to new coordinates."
        },
        {
          "name": "clone_node",
          "kind": "changes",
          "purpose": "Duplicates a layer to a new position."
        },
        {
          "name": "resize_node",
          "kind": "changes",
          "purpose": "Changes a layer's width and height."
        },
        {
          "name": "delete_node",
          "kind": "changes",
          "purpose": "Removes one layer."
        },
        {
          "name": "delete_multiple_nodes",
          "kind": "changes",
          "purpose": "Removes several layers at once."
        },
        {
          "name": "export_node_as_image",
          "kind": "changes",
          "purpose": "Exports a layer as PNG, JPG, SVG or PDF."
        },
        {
          "name": "set_text_content",
          "kind": "changes",
          "purpose": "Rewrites the text of one text layer."
        },
        {
          "name": "get_styles",
          "kind": "reads",
          "purpose": "Lists the colour, text and effect styles in the file."
        },
        {
          "name": "get_local_components",
          "kind": "reads",
          "purpose": "Lists the components defined in this file."
        },
        {
          "name": "get_annotations",
          "kind": "reads",
          "purpose": "Reads the annotations in the file or on one layer."
        },
        {
          "name": "set_annotation",
          "kind": "changes",
          "purpose": "Adds or edits one annotation, with Markdown."
        },
        {
          "name": "set_multiple_annotations",
          "kind": "changes",
          "purpose": "Adds many annotations in one call."
        },
        {
          "name": "create_component_instance",
          "kind": "changes",
          "purpose": "Places an instance of a local or library component."
        },
        {
          "name": "get_instance_overrides",
          "kind": "reads",
          "purpose": "Copies the overrides from one component instance."
        },
        {
          "name": "set_instance_overrides",
          "kind": "changes",
          "purpose": "Pastes copied overrides onto other instances."
        },
        {
          "name": "set_corner_radius",
          "kind": "changes",
          "purpose": "Rounds a layer's corners, all or some."
        },
        {
          "name": "scan_text_nodes",
          "kind": "changes",
          "purpose": "Finds every text layer inside a layer."
        },
        {
          "name": "scan_nodes_by_types",
          "kind": "changes",
          "purpose": "Finds child layers of given types inside a layer."
        },
        {
          "name": "set_multiple_text_contents",
          "kind": "changes",
          "purpose": "Rewrites many text layers in one call, for bulk copy changes."
        },
        {
          "name": "set_layout_mode",
          "kind": "changes",
          "purpose": "Turns auto layout on or off and sets direction and wrapping."
        },
        {
          "name": "set_padding",
          "kind": "changes",
          "purpose": "Sets padding on an auto layout frame."
        },
        {
          "name": "set_axis_align",
          "kind": "changes",
          "purpose": "Sets alignment on both axes of an auto layout frame."
        },
        {
          "name": "set_layout_sizing",
          "kind": "changes",
          "purpose": "Sets hug, fill or fixed sizing in auto layout."
        },
        {
          "name": "set_item_spacing",
          "kind": "changes",
          "purpose": "Sets the gap between items in an auto layout frame."
        },
        {
          "name": "get_reactions",
          "kind": "reads",
          "purpose": "Reads prototype interactions so they can be turned into connector lines."
        },
        {
          "name": "set_default_connector",
          "kind": "changes",
          "purpose": "Chooses which connector style new connections use."
        },
        {
          "name": "create_connections",
          "kind": "changes",
          "purpose": "Draws connector lines between layers in the default connector style."
        },
        {
          "name": "set_focus",
          "kind": "changes",
          "purpose": "Selects a layer and scrolls the canvas to it."
        },
        {
          "name": "set_selections",
          "kind": "changes",
          "purpose": "Selects several layers and scrolls to show them."
        },
        {
          "name": "join_channel",
          "kind": "changes",
          "purpose": "Connects to the plugin's channel. The assistant must do this first."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/talk-to-figma.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "godot",
      "name": "Godot MCP",
      "url": "https://mcpshelf.co/servers/godot",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Launch, run and debug Godot projects, and read the output.",
      "description": "Godot MCP gives an assistant the parts of the Godot workflow that need the engine: open the editor, run the project, capture the debug output, and create or change scenes and nodes. The agent can then fix a script and run again without you switching windows.\n\nIt finds Godot on the usual install paths; set GODOT_PATH if yours is elsewhere.",
      "good_for": [
        "Fixing runtime errors with the actual stack trace",
        "Scaffolding scenes from a description",
        "Learning Godot with an assistant that can run your code"
      ],
      "needs": [
        "Godot 4 installed",
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@coding-solo/godot-mcp"
          ]
        },
        "setup_steps": null,
        "note": "Add \"env\": { \"GODOT_PATH\": \"/path/to/godot\" } if Godot is not in a standard location.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 14 tools."
      },
      "package_note": null,
      "github": "https://github.com/Coding-Solo/godot-mcp",
      "stars": 6366,
      "weekly_downloads": 4759,
      "last_commit": "2026-04-16",
      "logo": "https://mcpshelf.co/logos/godot.webp",
      "maker": "Solomon Elias (Coding-Solo)",
      "package": {
        "registry": "npm",
        "name": "@coding-solo/godot-mcp",
        "version": "0.1.1",
        "released": "2026-02-03",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@coding-solo/godot-mcp"
      },
      "tools": [
        {
          "name": "launch_editor",
          "kind": "changes",
          "purpose": "Opens the Godot editor on a project."
        },
        {
          "name": "run_project",
          "kind": "runs",
          "purpose": "Starts the game in debug mode, or a single scene, and starts capturing its output."
        },
        {
          "name": "get_debug_output",
          "kind": "reads",
          "purpose": "Collects the console output and errors from the game that is running."
        },
        {
          "name": "stop_project",
          "kind": "changes",
          "purpose": "Stops the running game."
        },
        {
          "name": "get_godot_version",
          "kind": "reads",
          "purpose": "Reports which Godot version is installed."
        },
        {
          "name": "list_projects",
          "kind": "reads",
          "purpose": "Finds Godot projects inside a folder."
        },
        {
          "name": "get_project_info",
          "kind": "reads",
          "purpose": "Summarises a project: its name, scenes, scripts and resources."
        },
        {
          "name": "create_scene",
          "kind": "changes",
          "purpose": "Makes a new .tscn scene with the root node type you choose."
        },
        {
          "name": "add_node",
          "kind": "changes",
          "purpose": "Adds a node of any type to a scene and sets its properties."
        },
        {
          "name": "load_sprite",
          "kind": "changes",
          "purpose": "Puts a texture onto a Sprite2D node."
        },
        {
          "name": "export_mesh_library",
          "kind": "changes",
          "purpose": "Turns a scene of 3D meshes into a MeshLibrary for GridMap level building."
        },
        {
          "name": "save_scene",
          "kind": "changes",
          "purpose": "Saves a scene, or saves it under a new name."
        },
        {
          "name": "get_uid",
          "kind": "reads",
          "purpose": "Looks up the unique id Godot 4.4 and later gives a file."
        },
        {
          "name": "update_project_uids",
          "kind": "changes",
          "purpose": "Re-saves resources so their id references are current after upgrading to Godot 4.4."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/godot.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "kicad",
      "name": "KiCad MCP",
      "url": "https://mcpshelf.co/servers/kicad",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Create boards, place footprints and route traces in KiCad from an assistant.",
      "description": "This server drives KiCad's Python API so an assistant can work on a PCB: create a project, set the board outline, place and move footprints, add tracks and vias, and run design-rule checks.\n\nIt runs from a clone of the GitHub repository rather than a published package, and it needs the Python that ships with KiCad.",
      "good_for": [
        "Quick board outlines and part placement",
        "Repetitive layout edits",
        "Learning PCB design with a guide that can make changes"
      ],
      "needs": [
        "KiCad 9 with its bundled Python",
        "Node.js 18 or newer",
        "git"
      ],
      "install": {
        "config": {
          "command": "node",
          "args": [
            "/path/to/KiCAD-MCP-Server/dist/index.js"
          ]
        },
        "setup_steps": [
          "git clone https://github.com/mixelpixx/KiCAD-MCP-Server and cd into it.",
          "npm install, then npm run build.",
          "Point your client at the built entry point, as in the config below, with your own path."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 244 tools."
      },
      "package_note": "The npm package called \"kicad-mcp\" comes from a different repository (iengphogit/kicad-mcp). This project runs from its own source.",
      "github": "https://github.com/mixelpixx/KiCAD-MCP-Server",
      "stars": 2959,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/kicad.webp",
      "maker": "mixelpixx and community contributors",
      "package": null,
      "tools": [
        {
          "name": "list_tool_categories",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_category_tools",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "search_tools",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "create_project",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "open_project",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "open_board",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "reload_board",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "close_project",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "save_project",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "save_board",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "save_as",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "is_dirty",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "discard_or_reload",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_project_info",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "snapshot_project",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "set_board_size",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_board_origin",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_board_origin",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_layer",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_active_layer",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_board_info",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_layer_list",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_board_outline",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "clear_board_outline",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "replace_board_outline",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_graphics",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "delete_graphic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "update_graphic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_mounting_hole",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_board_text",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_zone",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_board_extents",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_board_2d_view",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "import_svg_logo",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "place_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "move_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_move_components",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "rotate_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "edit_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_footprint_type",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "find_component",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_component_properties",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_component_annotation",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "group_components",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "replace_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_component_pads",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_pads",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_net_pads",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_component_geometry",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_component_list",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_pad_position",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_ratsnest",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "estimate_airwire_lengths",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "check_placement_clearance",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "move_footprint_text",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "place_component_array",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "align_components",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "check_courtyard_overlaps",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "suggest_placement",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "duplicate_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "hierarchical_place",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_net",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "route_trace",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "route_arc_trace",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_via",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_copper_pour",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_trace",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "query_traces",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "query_zones",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_gnd_stitching_vias",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_nets_list",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "modify_trace",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "create_netclass",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_net_color",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "route_differential_pair",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "refill_zones",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "route_pad_to_pad",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "copy_routing_pattern",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_design_rules",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_design_rules",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "run_drc",
          "kind": "runs",
          "purpose": null
        },
        {
          "name": "assign_net_to_class",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_layer_constraints",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "check_clearance",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_drc_violations",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "export_gerber",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_pdf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_svg",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_3d",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_bom",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_netlist",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_position_file",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_vrml",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_gerbers",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_drill",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_ipc2581",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_odb",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_ipcd356",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_gencad",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_pos",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_pcb_pdf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_pcb_svg",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_pcb_dxf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_gerber_single",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_3d_cli",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_bom",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_pdf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_svg",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_dxf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_hpgl",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_ps",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_sch_python_bom",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "create_schematic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "edit_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_schematic_component_property",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "remove_schematic_component_property",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_schematic_component",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_schematic_wire",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_schematic_net_label",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_no_connect",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "connect_to_net",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_net_connections",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_wire_connections",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_schematic_pin_locations",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "connect_passthrough",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_schematic_components",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_schematic_nets",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_schematic_wires",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_schematic_labels",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "move_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "rotate_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "annotate_schematic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_schematic_wire",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_schematic_net_label",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "move_schematic_net_label",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_schematic_svg",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_schematic_pdf",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_schematic_view",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "run_erc",
          "kind": "runs",
          "purpose": null
        },
        {
          "name": "generate_netlist",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "sync_schematic_to_board",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "backannotate_footprints",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "create_board_from_schematic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_schematic_view_region",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "find_overlapping_elements",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_elements_in_region",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "find_wires_crossing_symbols",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_floating_labels",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "find_orphaned_wires",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "snap_to_grid",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "lint_offgrid",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_net_at_point",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_schematic_hierarchical_label",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_schematic_texts",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_schematic_text",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_sheet_pin",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_libraries",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "search_footprints",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_library_footprints",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_footprint_info",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_library_table",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "remove_library_table_entry",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_library_table_uri",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_symbol_libraries",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "repair_flat_symbols",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "search_symbols",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_library_symbols",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_symbol_info",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "list_symbol_pins",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "batch_list_symbol_pins",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_symbol_pin_type",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "find_duplicate_symbols",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "add_hierarchical_sheet",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "remove_hierarchical_sheet",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_sheet_property",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_sheet_properties",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "create_hierarchical_subsheet",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "set_schematic_property_position",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_set_schematic_property_positions",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "autoplace_schematic_fields",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "lint_schematic_cosmetic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "suggest_schematic_declutter",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_add_components",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_edit_schematic_components",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "update_symbol_from_library",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_library_symbol_property",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "replace_instance_lib_ids",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "replace_schematic_component",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_add_no_connects",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_connect",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "batch_add_and_connect",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "download_jlcpcb_database",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "search_jlcpcb_parts",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_jlcpcb_part",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_jlcpcb_database_stats",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "suggest_jlcpcb_alternatives",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "digikey_test_connection",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "digikey_search_parts",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "digikey_check_library_availability",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "search_parts_registry",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "get_registry_part",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "download_registry_part",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "enrich_datasheets",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_datasheet_url",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "create_footprint",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_footprint_3d_model",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "import_3d_model",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_component_3d_model",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "edit_footprint_pad",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "register_footprint_library",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_footprint_libraries",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "create_symbol",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "delete_symbol",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "list_symbols_in_library",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "register_symbol_library",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "add_symbol_property",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "import_symbol",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_symbol",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "rename_symbol",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "get_backend_state",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "check_kicad_ui",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "launch_kicad_ui",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_gui_tree",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_gui_click",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_run_action_plugin",
          "kind": "runs",
          "purpose": null
        },
        {
          "name": "kicad_gui_wait_for",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_gui_screenshot",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_pcb_snapshot",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_reload_and_open_plugin",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_run_drc",
          "kind": "runs",
          "purpose": null
        },
        {
          "name": "kicad_gui_tree_atspi",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "kicad_gui_click_atspi",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "install_gui_driver",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "autoroute",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "export_dsn",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "import_ses",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "check_freerouting",
          "kind": "reads",
          "purpose": null
        },
        {
          "name": "import_eagle_project",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "import_pcb",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "validate_schematic",
          "kind": "changes",
          "purpose": null
        },
        {
          "name": "validate_symbol_library",
          "kind": "changes",
          "purpose": null
        }
      ],
      "markdown": "https://mcpshelf.co/servers/kicad.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "minimax",
      "name": "MiniMax",
      "url": "https://mcpshelf.co/servers/minimax",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Text-to-speech, voice cloning, images and video from MiniMax.",
      "description": "MiniMax's own server wraps its media models: speech in many voices and languages, voice cloning from a sample, image generation and short video clips. Files are saved to a folder you choose.\n\nNote the API host: accounts from the global site and from mainland China use different hosts, and a mismatch is the usual reason it fails to authenticate.",
      "good_for": [
        "Voice-overs for videos or demos",
        "Generating images or short clips inside a chat",
        "Trying voice cloning"
      ],
      "needs": [
        "A MiniMax API key",
        "uv (for uvx)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "minimax-mcp"
          ],
          "env": {
            "MINIMAX_API_KEY": "your-key",
            "MINIMAX_API_HOST": "https://api.minimax.io"
          }
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 8 tools."
      },
      "package_note": "The npm package called \"minimax-mcp-server\" comes from a different repository (mgolec/minimax-integration). MiniMax publishes this server to PyPI as minimax-mcp.",
      "github": "https://github.com/MiniMax-AI/MiniMax-MCP",
      "stars": 1592,
      "weekly_downloads": 2003,
      "last_commit": "2026-08-20",
      "logo": "https://avatars.githubusercontent.com/u/194880281?v=4",
      "maker": "MiniMax",
      "package": {
        "registry": "pypi",
        "name": "minimax-mcp",
        "version": "0.0.19",
        "released": "2026-08-21",
        "licence": "MIT",
        "url": "https://pypi.org/project/minimax-mcp/"
      },
      "tools": [
        {
          "name": "text_to_audio",
          "kind": "changes",
          "purpose": "Reads text aloud in a chosen voice, speed and emotion and saves the audio."
        },
        {
          "name": "list_voices",
          "kind": "reads",
          "purpose": "Lists the voices you can use for speech, including any you have cloned."
        },
        {
          "name": "voice_clone",
          "kind": "changes",
          "purpose": "Builds a reusable voice from a sample recording."
        },
        {
          "name": "play_audio",
          "kind": "changes",
          "purpose": "Plays an audio file through your speakers."
        },
        {
          "name": "generate_video",
          "kind": "changes",
          "purpose": "Makes a short video clip from a text prompt, optionally starting from an image, with the Hailuo models."
        },
        {
          "name": "query_video_generation",
          "kind": "reads",
          "purpose": "Checks whether a video job has finished and fetches the result."
        },
        {
          "name": "text_to_image",
          "kind": "changes",
          "purpose": "Creates images from a prompt in the aspect ratio you ask for."
        },
        {
          "name": "voice_design",
          "kind": "changes",
          "purpose": "Invents a new voice from a written description and gives you a preview."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/minimax.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "notion",
      "name": "Notion",
      "url": "https://mcpshelf.co/servers/notion",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Notion's own server: search, read and update pages and databases.",
      "description": "Notion maintains this server. The assistant can search your workspace, read pages, query databases and create or update content, limited to the pages your integration can see.\n\nNotion also runs a hosted version that signs in with OAuth, which is simpler than creating an integration token.",
      "good_for": [
        "Drafting docs straight into Notion",
        "Answering questions from your wiki",
        "Updating task databases from a chat"
      ],
      "needs": [
        "A Notion integration token, shared with the pages you want it to reach",
        "Node.js 18 or newer for the local server"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@notionhq/notion-mcp-server"
          ],
          "env": {
            "NOTION_TOKEN": "ntn_****"
          }
        },
        "setup_steps": null,
        "note": "Replace ntn_**** with your integration token and share the relevant pages with that integration.",
        "remote_url": "https://mcp.notion.com/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 24 tools."
      },
      "package_note": null,
      "github": "https://github.com/makenotion/notion-mcp-server",
      "stars": 4680,
      "weekly_downloads": 106705,
      "last_commit": "2026-09-20",
      "logo": "https://avatars.githubusercontent.com/u/4792552?v=4",
      "maker": "Notion (makenotion)",
      "package": {
        "registry": "npm",
        "name": "@notionhq/notion-mcp-server",
        "version": "2.5.2",
        "released": "2026-09-20",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@notionhq/notion-mcp-server"
      },
      "tools": [
        {
          "name": "API-get-user",
          "kind": "reads",
          "purpose": "Looks up one person or bot in the workspace by id."
        },
        {
          "name": "API-get-users",
          "kind": "reads",
          "purpose": "Lists the people and bots in the workspace."
        },
        {
          "name": "API-get-self",
          "kind": "reads",
          "purpose": "Shows which bot user the token belongs to, handy for checking the connection works."
        },
        {
          "name": "API-post-search",
          "kind": "changes",
          "purpose": "Finds pages and databases the integration can see by matching their titles."
        },
        {
          "name": "API-get-block-children",
          "kind": "reads",
          "purpose": "Lists the blocks nested inside a page or another block, one page of results at a time."
        },
        {
          "name": "API-patch-block-children",
          "kind": "changes",
          "purpose": "Adds new blocks to the end of a page, or after a block you pick."
        },
        {
          "name": "API-retrieve-a-block",
          "kind": "reads",
          "purpose": "Fetches a single block and its content."
        },
        {
          "name": "API-update-a-block",
          "kind": "changes",
          "purpose": "Edits the text or settings of an existing block."
        },
        {
          "name": "API-delete-a-block",
          "kind": "changes",
          "purpose": "Moves one block, such as a paragraph or to-do, to the trash."
        },
        {
          "name": "API-retrieve-a-page",
          "kind": "reads",
          "purpose": "Fetches a page's properties, such as its title, status and dates."
        },
        {
          "name": "API-patch-page",
          "kind": "changes",
          "purpose": "Changes a page's properties, icon or cover, or sends it to the trash."
        },
        {
          "name": "API-post-page",
          "kind": "changes",
          "purpose": "Creates a page, either under another page or as a new row in a database."
        },
        {
          "name": "API-retrieve-a-page-property",
          "kind": "reads",
          "purpose": "Reads one property in full, useful when a relation or rollup has many entries."
        },
        {
          "name": "API-retrieve-a-comment",
          "kind": "reads",
          "purpose": "Reads the comments left on a page or block."
        },
        {
          "name": "API-create-a-comment",
          "kind": "changes",
          "purpose": "Leaves a new comment on a page or adds a reply to an existing discussion."
        },
        {
          "name": "API-query-data-source",
          "kind": "changes",
          "purpose": "Pulls rows from a database using filters and sort order."
        },
        {
          "name": "API-retrieve-a-data-source",
          "kind": "reads",
          "purpose": "Returns a database's columns and settings so the agent knows its shape."
        },
        {
          "name": "API-update-a-data-source",
          "kind": "changes",
          "purpose": "Renames a database or changes its columns."
        },
        {
          "name": "API-create-a-data-source",
          "kind": "changes",
          "purpose": "Makes a new database table under a page, with the columns you describe."
        },
        {
          "name": "API-list-data-source-templates",
          "kind": "reads",
          "purpose": "Lists the page templates set up on a database."
        },
        {
          "name": "API-retrieve-a-database",
          "kind": "reads",
          "purpose": "Gets a database's details, including the ids of the data sources inside it."
        },
        {
          "name": "API-move-page",
          "kind": "changes",
          "purpose": "Moves a page under a different parent page or database."
        },
        {
          "name": "API-retrieve-page-markdown",
          "kind": "reads",
          "purpose": "Reads a whole page as Markdown, which costs far fewer tokens than block JSON."
        },
        {
          "name": "API-update-page-markdown",
          "kind": "changes",
          "purpose": "Rewrites a page, or swaps out parts of it, using Markdown."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/notion.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "atlassian",
      "name": "MCP Atlassian (Jira and Confluence)",
      "url": "https://mcpshelf.co/servers/atlassian",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Jira issues and Confluence pages, Cloud or self-hosted.",
      "description": "mcp-atlassian is the most used community server for Atlassian tools. It searches and updates Jira issues with JQL, manages sprints and transitions, and reads and writes Confluence pages, for both Cloud and Server/Data Center.\n\nYou can set it to read-only, and you can limit which Confluence spaces and Jira projects it sees.",
      "good_for": [
        "Turning a conversation into well-formed Jira tickets",
        "Summarising a sprint or an epic",
        "Finding the Confluence page that answers a question"
      ],
      "needs": [
        "uv (for uvx)",
        "An Atlassian API token (Cloud) or personal access token (Server/Data Center)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "mcp-atlassian"
          ],
          "env": {
            "JIRA_URL": "https://your-company.atlassian.net",
            "JIRA_USERNAME": "you@company.com",
            "JIRA_API_TOKEN": "your-token",
            "CONFLUENCE_URL": "https://your-company.atlassian.net/wiki",
            "CONFLUENCE_USERNAME": "you@company.com",
            "CONFLUENCE_API_TOKEN": "your-token"
          }
        },
        "setup_steps": null,
        "note": "Add \"READ_ONLY_MODE\": \"true\" to env while you try it out.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 98 tools."
      },
      "package_note": "The npm package called \"mcp-atlassian\" comes from a different repository (Vijay-Duke/mcp-atlassian). This project is a Python package of the same name, so it runs with uvx.",
      "github": "https://github.com/sooperset/mcp-atlassian",
      "stars": 6049,
      "weekly_downloads": 215911,
      "last_commit": "2026-09-19",
      "logo": "https://mcpshelf.co/logos/atlassian.webp",
      "maker": "sooperset and community contributors (not Atlassian)",
      "package": {
        "registry": "pypi",
        "name": "mcp-atlassian",
        "version": "0.23.1",
        "released": "2026-08-19",
        "licence": null,
        "url": "https://pypi.org/project/mcp-atlassian/"
      },
      "tools": [
        {
          "name": "jira_get_user_profile",
          "kind": "reads",
          "purpose": "Looks up one Jira user."
        },
        {
          "name": "jira_search_assignable_users",
          "kind": "reads",
          "purpose": "Finds people who can be assigned in a project or issue."
        },
        {
          "name": "jira_get_issue_watchers",
          "kind": "reads",
          "purpose": "Lists who watches an issue."
        },
        {
          "name": "jira_add_watcher",
          "kind": "changes",
          "purpose": "Adds someone as a watcher."
        },
        {
          "name": "jira_remove_watcher",
          "kind": "changes",
          "purpose": "Removes a watcher."
        },
        {
          "name": "jira_get_issue",
          "kind": "reads",
          "purpose": "Reads one issue with its fields, epic and links."
        },
        {
          "name": "jira_search",
          "kind": "reads",
          "purpose": "Finds issues with a JQL query."
        },
        {
          "name": "jira_search_fields",
          "kind": "reads",
          "purpose": "Finds field names and ids by keyword, handy for custom fields."
        },
        {
          "name": "jira_get_field_options",
          "kind": "reads",
          "purpose": "Lists the allowed values of a custom field."
        },
        {
          "name": "jira_get_project_issues",
          "kind": "reads",
          "purpose": "Lists the issues in a project."
        },
        {
          "name": "jira_get_transitions",
          "kind": "reads",
          "purpose": "Shows which statuses an issue can move to next."
        },
        {
          "name": "jira_get_worklog",
          "kind": "reads",
          "purpose": "Reads time logged on an issue."
        },
        {
          "name": "jira_download_attachments",
          "kind": "reads",
          "purpose": "Fetches an issue's attachments."
        },
        {
          "name": "jira_get_issue_images",
          "kind": "reads",
          "purpose": "Fetches an issue's image attachments so the assistant can look at them."
        },
        {
          "name": "jira_get_agile_boards",
          "kind": "reads",
          "purpose": "Finds Scrum and Kanban boards."
        },
        {
          "name": "jira_get_board_issues",
          "kind": "reads",
          "purpose": "Lists the issues on a board, with an optional JQL filter."
        },
        {
          "name": "jira_get_sprints_from_board",
          "kind": "reads",
          "purpose": "Lists a board's sprints by state."
        },
        {
          "name": "jira_get_sprint_issues",
          "kind": "reads",
          "purpose": "Lists the issues in a sprint."
        },
        {
          "name": "jira_get_link_types",
          "kind": "reads",
          "purpose": "Lists link types such as blocks or duplicates."
        },
        {
          "name": "jira_create_issue",
          "kind": "changes",
          "purpose": "Opens a new issue, sub-task or epic child."
        },
        {
          "name": "jira_batch_create_issues",
          "kind": "changes",
          "purpose": "Opens many issues in one call, with a dry-run option."
        },
        {
          "name": "jira_batch_get_changelogs",
          "kind": "reads",
          "purpose": "Reads the change history of many issues (Cloud only)."
        },
        {
          "name": "jira_update_issue",
          "kind": "changes",
          "purpose": "Edits an issue's fields."
        },
        {
          "name": "jira_assign_issue",
          "kind": "changes",
          "purpose": "Assigns an issue to someone."
        },
        {
          "name": "jira_delete_issue",
          "kind": "changes",
          "purpose": "Deletes an issue."
        },
        {
          "name": "jira_move_issue",
          "kind": "changes",
          "purpose": "Moves an issue to another project (Cloud only)."
        },
        {
          "name": "jira_add_comment",
          "kind": "changes",
          "purpose": "Comments on an issue."
        },
        {
          "name": "jira_edit_comment",
          "kind": "changes",
          "purpose": "Edits an existing comment."
        },
        {
          "name": "jira_add_worklog",
          "kind": "changes",
          "purpose": "Logs time against an issue."
        },
        {
          "name": "jira_link_to_epic",
          "kind": "changes",
          "purpose": "Puts an issue under an epic."
        },
        {
          "name": "jira_create_issue_link",
          "kind": "changes",
          "purpose": "Links two issues, for example \"blocks\"."
        },
        {
          "name": "jira_create_remote_issue_link",
          "kind": "changes",
          "purpose": "Adds a web or Confluence link to an issue."
        },
        {
          "name": "jira_remove_issue_link",
          "kind": "changes",
          "purpose": "Removes a link between issues."
        },
        {
          "name": "jira_transition_issue",
          "kind": "changes",
          "purpose": "Moves an issue to a new status."
        },
        {
          "name": "jira_create_sprint",
          "kind": "changes",
          "purpose": "Creates a sprint on a board."
        },
        {
          "name": "jira_update_sprint",
          "kind": "changes",
          "purpose": "Renames, starts, closes or re-dates a sprint."
        },
        {
          "name": "jira_add_issues_to_sprint",
          "kind": "changes",
          "purpose": "Pulls issues into a sprint."
        },
        {
          "name": "jira_move_issues_to_backlog",
          "kind": "changes",
          "purpose": "Sends issues back to the backlog."
        },
        {
          "name": "jira_get_project_issue_types",
          "kind": "reads",
          "purpose": "Lists the issue types a project allows."
        },
        {
          "name": "jira_get_create_fields",
          "kind": "reads",
          "purpose": "Lists the fields needed to create a given issue type."
        },
        {
          "name": "jira_get_project_versions",
          "kind": "reads",
          "purpose": "Lists a project's fix versions."
        },
        {
          "name": "jira_get_project_components",
          "kind": "reads",
          "purpose": "Lists a project's components."
        },
        {
          "name": "jira_get_all_projects",
          "kind": "reads",
          "purpose": "Lists every project you can see."
        },
        {
          "name": "jira_search_projects",
          "kind": "reads",
          "purpose": "Finds projects by name or key."
        },
        {
          "name": "jira_get_project_fields",
          "kind": "reads",
          "purpose": "Lists the fields used across a project's issue types."
        },
        {
          "name": "jira_get_service_desk_for_project",
          "kind": "reads",
          "purpose": "Finds the service desk behind a project (Server and Data Center)."
        },
        {
          "name": "jira_get_service_desk_queues",
          "kind": "reads",
          "purpose": "Lists a service desk's queues (Server and Data Center)."
        },
        {
          "name": "jira_get_queue_issues",
          "kind": "reads",
          "purpose": "Lists the requests in a queue (Server and Data Center)."
        },
        {
          "name": "jira_get_request_types",
          "kind": "reads",
          "purpose": "Lists the request types of a service desk."
        },
        {
          "name": "jira_get_request_type_fields",
          "kind": "reads",
          "purpose": "Lists the fields a request type asks for."
        },
        {
          "name": "jira_create_customer_request",
          "kind": "changes",
          "purpose": "Raises a Jira Service Management request."
        },
        {
          "name": "jira_create_version",
          "kind": "changes",
          "purpose": "Creates a fix version."
        },
        {
          "name": "jira_batch_create_versions",
          "kind": "changes",
          "purpose": "Creates several fix versions at once."
        },
        {
          "name": "jira_update_version",
          "kind": "changes",
          "purpose": "Edits or releases a fix version."
        },
        {
          "name": "jira_get_issue_proforma_forms",
          "kind": "reads",
          "purpose": "Lists the forms attached to an issue."
        },
        {
          "name": "jira_get_proforma_form_details",
          "kind": "reads",
          "purpose": "Reads one form's questions and answers."
        },
        {
          "name": "jira_update_proforma_form_answers",
          "kind": "changes",
          "purpose": "Fills in answers on an issue's form."
        },
        {
          "name": "jira_get_issue_dates",
          "kind": "reads",
          "purpose": "Reads an issue's key dates and status history."
        },
        {
          "name": "jira_get_issue_sla",
          "kind": "reads",
          "purpose": "Works out cycle time and other SLA figures for an issue."
        },
        {
          "name": "jira_get_issue_development_info",
          "kind": "reads",
          "purpose": "Shows branches, commits and pull requests linked to an issue."
        },
        {
          "name": "jira_get_issues_development_info",
          "kind": "reads",
          "purpose": "The same for many issues at once."
        },
        {
          "name": "jira_get_project_epic_hierarchy",
          "kind": "reads",
          "purpose": "Groups a project's epics under their parents across projects."
        },
        {
          "name": "jira_get_cross_project_dependencies",
          "kind": "reads",
          "purpose": "Finds links from a project's issues into other projects."
        },
        {
          "name": "confluence_search",
          "kind": "reads",
          "purpose": "Finds pages by words or a CQL query."
        },
        {
          "name": "confluence_get_page",
          "kind": "reads",
          "purpose": "Reads a page by id, or by title and space."
        },
        {
          "name": "confluence_get_page_children",
          "kind": "reads",
          "purpose": "Lists the pages under a page."
        },
        {
          "name": "confluence_get_space_page_tree",
          "kind": "reads",
          "purpose": "Lists a whole space's page tree."
        },
        {
          "name": "confluence_get_comments",
          "kind": "reads",
          "purpose": "Reads a page's comments."
        },
        {
          "name": "confluence_get_labels",
          "kind": "reads",
          "purpose": "Reads a page's labels."
        },
        {
          "name": "confluence_add_label",
          "kind": "changes",
          "purpose": "Adds a label."
        },
        {
          "name": "confluence_create_page",
          "kind": "changes",
          "purpose": "Creates a page, from Markdown or storage format."
        },
        {
          "name": "confluence_update_page",
          "kind": "changes",
          "purpose": "Replaces a page's content."
        },
        {
          "name": "confluence_update_page_section",
          "kind": "changes",
          "purpose": "Rewrites one section of a page and leaves the rest alone."
        },
        {
          "name": "confluence_delete_page",
          "kind": "changes",
          "purpose": "Deletes a page."
        },
        {
          "name": "confluence_move_page",
          "kind": "changes",
          "purpose": "Moves a page to a new parent or space."
        },
        {
          "name": "confluence_add_comment",
          "kind": "changes",
          "purpose": "Comments on a page."
        },
        {
          "name": "confluence_reply_to_comment",
          "kind": "changes",
          "purpose": "Replies in a comment thread."
        },
        {
          "name": "confluence_get_inline_comments",
          "kind": "reads",
          "purpose": "Reads comments pinned to text on a page."
        },
        {
          "name": "confluence_add_inline_comment",
          "kind": "changes",
          "purpose": "Pins a comment to a piece of text."
        },
        {
          "name": "confluence_search_user",
          "kind": "reads",
          "purpose": "Finds Confluence users."
        },
        {
          "name": "confluence_get_page_history",
          "kind": "reads",
          "purpose": "Reads an older version of a page."
        },
        {
          "name": "confluence_get_page_diff",
          "kind": "reads",
          "purpose": "Shows what changed between two versions."
        },
        {
          "name": "confluence_get_page_views",
          "kind": "reads",
          "purpose": "Reads view counts for a page (Cloud only)."
        },
        {
          "name": "confluence_upload_attachment",
          "kind": "changes",
          "purpose": "Attaches a file to a page."
        },
        {
          "name": "confluence_upload_attachments",
          "kind": "changes",
          "purpose": "Attaches several files at once."
        },
        {
          "name": "confluence_get_attachments",
          "kind": "reads",
          "purpose": "Lists a page's attachments."
        },
        {
          "name": "confluence_download_attachment",
          "kind": "reads",
          "purpose": "Fetches one attachment."
        },
        {
          "name": "confluence_download_content_attachments",
          "kind": "reads",
          "purpose": "Fetches every attachment on a page."
        },
        {
          "name": "confluence_delete_attachment",
          "kind": "changes",
          "purpose": "Deletes an attachment for good."
        },
        {
          "name": "confluence_get_page_images",
          "kind": "reads",
          "purpose": "Fetches a page's images so the assistant can look at them."
        },
        {
          "name": "confluence_list_page_templates",
          "kind": "reads",
          "purpose": "Lists page templates (Cloud)."
        },
        {
          "name": "confluence_get_page_template",
          "kind": "reads",
          "purpose": "Reads one template's body (Cloud)."
        },
        {
          "name": "confluence_create_page_from_template",
          "kind": "changes",
          "purpose": "Creates a page from a template (Cloud)."
        },
        {
          "name": "confluence_get_page_restrictions",
          "kind": "reads",
          "purpose": "Shows who can view or edit a page."
        },
        {
          "name": "confluence_set_page_restrictions",
          "kind": "changes",
          "purpose": "Changes who can view or edit a page."
        },
        {
          "name": "confluence_copy_page",
          "kind": "changes",
          "purpose": "Copies a page to a new place."
        },
        {
          "name": "confluence_check_content_permissions",
          "kind": "reads",
          "purpose": "Checks whether a person or group may do something with a page."
        },
        {
          "name": "confluence_get_space_permissions",
          "kind": "reads",
          "purpose": "Lists who has which rights in a space."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/atlassian.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "basic-memory",
      "name": "Basic Memory",
      "url": "https://mcpshelf.co/servers/basic-memory",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Long-term memory as plain Markdown files you own.",
      "description": "Basic Memory writes notes as ordinary Markdown in a folder on your machine (by default ~/basic-memory) and indexes the links between them. The assistant can write notes, search them and follow connections in later conversations.\n\nBecause the notes are just files, you can open them in Obsidian or any editor and edit them yourself.",
      "good_for": [
        "Carrying project context between chats",
        "A personal knowledge base the assistant can add to",
        "Keeping memory local instead of in a vendor account"
      ],
      "needs": [
        "uv (for uvx)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "basic-memory",
            "mcp"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 27 tools."
      },
      "package_note": null,
      "github": "https://github.com/basicmachines-co/basic-memory",
      "stars": 4359,
      "weekly_downloads": 15652,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/basic-memory.webp",
      "maker": "Basic Machines",
      "package": {
        "registry": "pypi",
        "name": "basic-memory",
        "version": "0.24.1",
        "released": "2026-10-23",
        "licence": "AGPL-3.0-or-later",
        "url": "https://pypi.org/project/basic-memory/"
      },
      "tools": [
        {
          "name": "basic_memory_diagnostics",
          "kind": "reads",
          "purpose": "Reports the installed version, Python and settings, for bug reports."
        },
        {
          "name": "delete_note",
          "kind": "changes",
          "purpose": "Deletes a note."
        },
        {
          "name": "read_content",
          "kind": "reads",
          "purpose": "Reads a file exactly as stored, including images, without note processing."
        },
        {
          "name": "build_context",
          "kind": "reads",
          "purpose": "Follows links out from a note to gather everything related, so a new chat can pick up the thread."
        },
        {
          "name": "recent_activity",
          "kind": "reads",
          "purpose": "Shows what changed lately across your notes."
        },
        {
          "name": "search_notes",
          "kind": "reads",
          "purpose": "Searches notes, facts and links by keyword, meaning or both, in one project or all of them."
        },
        {
          "name": "read_note",
          "kind": "reads",
          "purpose": "Reads a note by title, permalink or memory:// link."
        },
        {
          "name": "view_note",
          "kind": "reads",
          "purpose": "Reads a note and asks the client to show it as a formatted document."
        },
        {
          "name": "write_note",
          "kind": "changes",
          "purpose": "Creates or overwrites a Markdown note with facts, tags and links to other notes."
        },
        {
          "name": "list_directory",
          "kind": "reads",
          "purpose": "Lists the folders and notes inside a project."
        },
        {
          "name": "edit_note",
          "kind": "changes",
          "purpose": "Changes part of a note: append, prepend, swap a section or find and replace."
        },
        {
          "name": "move_note",
          "kind": "changes",
          "purpose": "Moves or renames a note and keeps its links working."
        },
        {
          "name": "list_workspaces",
          "kind": "reads",
          "purpose": "Lists cloud workspaces you can reach, for team accounts."
        },
        {
          "name": "list_memory_projects",
          "kind": "reads",
          "purpose": "Lists your notes projects and which one is the default."
        },
        {
          "name": "create_memory_project",
          "kind": "changes",
          "purpose": "Starts a new notes project in a folder you choose."
        },
        {
          "name": "delete_project",
          "kind": "changes",
          "purpose": "Removes a project from Basic Memory without deleting your files."
        },
        {
          "name": "search",
          "kind": "reads",
          "purpose": "Returns top matches in the format ChatGPT's connector expects."
        },
        {
          "name": "fetch",
          "kind": "reads",
          "purpose": "Returns one note in the format ChatGPT's connector expects."
        },
        {
          "name": "cat",
          "kind": "reads",
          "purpose": "Prints a note, or just a section or a range of lines from it."
        },
        {
          "name": "grep",
          "kind": "reads",
          "purpose": "Finds notes that contain given words, or that match by meaning."
        },
        {
          "name": "ls",
          "kind": "reads",
          "purpose": "Lists one level of a folder, or all projects at the top."
        },
        {
          "name": "find",
          "kind": "reads",
          "purpose": "Lists notes by file name pattern or by frontmatter values such as status."
        },
        {
          "name": "tail",
          "kind": "reads",
          "purpose": "Lists the most recently changed notes."
        },
        {
          "name": "man",
          "kind": "reads",
          "purpose": "Looks up Basic Memory's built-in manual."
        },
        {
          "name": "schema_validate",
          "kind": "reads",
          "purpose": "Checks notes against the schema written for their type."
        },
        {
          "name": "schema_infer",
          "kind": "reads",
          "purpose": "Suggests a schema by studying existing notes of one type."
        },
        {
          "name": "schema_diff",
          "kind": "reads",
          "purpose": "Spots where notes of one type have drifted from their schema."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/basic-memory.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "linkedin",
      "name": "LinkedIn MCP Server",
      "url": "https://mcpshelf.co/servers/linkedin",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Read LinkedIn profiles, companies and job posts with your own login.",
      "description": "This server uses a browser session signed in to your LinkedIn account to read profiles, company pages and job listings, and to search jobs. It is a scraper, not an official LinkedIn API.\n\nThat has two consequences: it can break when LinkedIn changes its pages, and heavy use can get an account restricted. Use it for occasional lookups.",
      "good_for": [
        "Researching a company or person before a call",
        "Job searches with a summary of each posting",
        "Prospect research at small volume"
      ],
      "needs": [
        "A LinkedIn account",
        "uv (for uvx)",
        "A one-time sign-in (the project README shows the current login step)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "linkedin-scraper-mcp"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 20 tools."
      },
      "package_note": "The npm package \"linkedin-mcp-server\" has no link to this project, and the PyPI package of that name belongs to someone else. This project publishes to PyPI as linkedin-scraper-mcp.",
      "github": "https://github.com/stickerdaniel/linkedin-mcp-server",
      "stars": 4016,
      "weekly_downloads": 49,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/linkedin.webp",
      "maker": "Daniel Sticker (an independent project, not made by LinkedIn)",
      "package": {
        "registry": "pypi",
        "name": "linkedin-scraper-mcp",
        "version": "4.14.0",
        "released": "2026-06-10",
        "licence": "Apache-2.0",
        "url": "https://pypi.org/project/linkedin-scraper-mcp/"
      },
      "tools": [
        {
          "name": "get_person_profile",
          "kind": "reads",
          "purpose": "Reads someone's profile: experience, education, skills and more."
        },
        {
          "name": "search_people",
          "kind": "reads",
          "purpose": "Searches LinkedIn for people by keywords and filters."
        },
        {
          "name": "connect_with_person",
          "kind": "changes",
          "purpose": "Sends a connection request, with a note if you want one."
        },
        {
          "name": "get_sidebar_profiles",
          "kind": "reads",
          "purpose": "Reads the people LinkedIn suggests alongside a profile."
        },
        {
          "name": "get_my_profile",
          "kind": "reads",
          "purpose": "Reads your own profile."
        },
        {
          "name": "get_company_profile",
          "kind": "reads",
          "purpose": "Reads a company page: what it does, size, location and more."
        },
        {
          "name": "get_company_posts",
          "kind": "reads",
          "purpose": "Reads a company page's recent posts."
        },
        {
          "name": "search_companies",
          "kind": "reads",
          "purpose": "Searches LinkedIn for companies."
        },
        {
          "name": "get_company_employees",
          "kind": "reads",
          "purpose": "Lists people who work at a company."
        },
        {
          "name": "get_job_details",
          "kind": "reads",
          "purpose": "Reads a job post in full."
        },
        {
          "name": "get_job_apply_url",
          "kind": "reads",
          "purpose": "Finds the link to apply for a job."
        },
        {
          "name": "search_jobs",
          "kind": "reads",
          "purpose": "Searches job listings with filters such as location and date."
        },
        {
          "name": "get_saved_jobs",
          "kind": "reads",
          "purpose": "Lists jobs you have saved."
        },
        {
          "name": "get_inbox",
          "kind": "reads",
          "purpose": "Lists your recent message threads."
        },
        {
          "name": "get_conversation",
          "kind": "reads",
          "purpose": "Opens one message thread and reads it."
        },
        {
          "name": "search_conversations",
          "kind": "reads",
          "purpose": "Searches your messages by keyword."
        },
        {
          "name": "send_message",
          "kind": "changes",
          "purpose": "Sends a LinkedIn message to someone."
        },
        {
          "name": "get_feed",
          "kind": "reads",
          "purpose": "Reads posts from your LinkedIn home feed."
        },
        {
          "name": "search_posts",
          "kind": "reads",
          "purpose": "Searches posts by keyword, optionally from the last day, week or month."
        },
        {
          "name": "close_session",
          "kind": "changes",
          "purpose": "Shuts the browser it uses for LinkedIn and frees the profile."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/linkedin.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "arxiv",
      "name": "arXiv MCP Server",
      "url": "https://mcpshelf.co/servers/arxiv",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Search arXiv, download papers and read them in full.",
      "description": "The server searches arXiv by query, date and category, downloads papers, converts them to text and keeps them in a local folder. The assistant can then read whole papers instead of abstracts, and list what you have already saved.\n\nIt also ships prompts for structured paper analysis.",
      "good_for": [
        "Literature reviews",
        "Reading a paper with an assistant that has the full text",
        "Keeping a local library of papers you have looked at"
      ],
      "needs": [
        "uv (for uvx)",
        "A folder for downloaded papers"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "arxiv-mcp-server",
            "--storage-path",
            "/path/to/papers"
          ]
        },
        "setup_steps": null,
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 26 Oct 2026: it started and answered with 19 tools."
      },
      "package_note": "The npm package called \"arxiv-mcp-server\" comes from a different repository (r-uben/arxiv-mcp-server). This project publishes to PyPI under that name, so it runs with uvx.",
      "github": "https://github.com/blazickjp/arxiv-mcp-server",
      "stars": 3235,
      "weekly_downloads": 19048,
      "last_commit": "2026-10-08",
      "logo": "https://mcpshelf.co/logos/arxiv.webp",
      "maker": "Joe Blazick and contributors",
      "package": {
        "registry": "pypi",
        "name": "arxiv-mcp-server",
        "version": "0.8.2",
        "released": "2026-10-08",
        "licence": "Apache-2.0",
        "url": "https://pypi.org/project/arxiv-mcp-server/"
      },
      "tools": [
        {
          "name": "search_papers",
          "kind": "reads",
          "purpose": "Searches arXiv by keywords, author, title or category, with date ranges and sorting."
        },
        {
          "name": "download_paper",
          "kind": "changes",
          "purpose": "Saves a paper locally and returns its text, using arXiv's HTML version where it exists and the PDF otherwise."
        },
        {
          "name": "list_papers",
          "kind": "reads",
          "purpose": "Lists the papers you have downloaded."
        },
        {
          "name": "read_paper",
          "kind": "reads",
          "purpose": "Reads a downloaded paper as Markdown, in pieces of about 12,000 characters."
        },
        {
          "name": "get_abstract",
          "kind": "reads",
          "purpose": "Fetches a paper's title, authors and abstract without downloading it, to judge relevance first."
        },
        {
          "name": "semantic_search",
          "kind": "reads",
          "purpose": "Finds papers in your local library that are close in meaning to a question."
        },
        {
          "name": "reindex",
          "kind": "changes",
          "purpose": "Rebuilds the local search index over your downloaded papers."
        },
        {
          "name": "citation_graph",
          "kind": "reads",
          "purpose": "Lists papers that cite a paper and papers it cites, using Semantic Scholar."
        },
        {
          "name": "export_citations",
          "kind": "reads",
          "purpose": "Writes BibTeX entries straight from arXiv's own metadata, so nothing is made up."
        },
        {
          "name": "watch_topic",
          "kind": "changes",
          "purpose": "Saves a research topic so check_alerts can tell you about new papers on it."
        },
        {
          "name": "check_alerts",
          "kind": "changes",
          "purpose": "Goes through every saved watch and reports just the new papers that appeared since you last looked."
        },
        {
          "name": "list_watches",
          "kind": "reads",
          "purpose": "Lists your saved topic watches."
        },
        {
          "name": "unwatch_topic",
          "kind": "changes",
          "purpose": "Deletes a saved topic watch."
        },
        {
          "name": "get_paper_latex",
          "kind": "changes",
          "purpose": "Fetches the paper's original LaTeX source, in bounded chunks."
        },
        {
          "name": "list_paper_latex_sections",
          "kind": "changes",
          "purpose": "Lists the headings in a paper's LaTeX source."
        },
        {
          "name": "get_paper_latex_section",
          "kind": "changes",
          "purpose": "Returns one section of the LaTeX source, with macros expanded."
        },
        {
          "name": "get_paper_outline",
          "kind": "reads",
          "purpose": "Lists the headings of a downloaded paper with ids you can read section by section."
        },
        {
          "name": "read_paper_section",
          "kind": "reads",
          "purpose": "Reads just one section of a downloaded paper."
        },
        {
          "name": "search_paper_text",
          "kind": "reads",
          "purpose": "Finds passages inside one downloaded paper that match a phrase."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/arxiv.md",
      "added": "2026-10-26",
      "updated": "2026-10-26"
    },
    {
      "slug": "sequential-thinking",
      "name": "Sequential Thinking",
      "url": "https://mcpshelf.co/servers/sequential-thinking",
      "category": "Agent helpers and desktop control",
      "category_slug": "agents-and-automation",
      "summary": "A numbered scratchpad the model fills in, revises and branches while it works.",
      "description": "Sequential Thinking is one of the reference servers kept by the Model Context Protocol project. It has a single tool, and that tool does no outside work at all: the model writes one thought per call, says how many it expects to need, and can go back to revise an earlier thought or fork off a branch to try another idea.\n\nWhat you get is structure. The model commits to a plan in visible steps, which tends to help on long debugging sessions, migrations and design choices where the first idea is often wrong. On short questions it only adds calls, so leave it to the model to decide when to use it.",
      "good_for": [
        "Planning work with many steps, such as a migration or a refactor",
        "Debugging where the cause is not obvious and the plan will change",
        "Seeing how a model reached an answer, one thought at a time"
      ],
      "needs": [
        "Node.js 24 or newer (the package asks for it)",
        "Nothing else: no account, key or network access"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@modelcontextprotocol/server-sequential-thinking"
          ]
        },
        "setup_steps": null,
        "note": "Set \"DISABLE_THOUGHT_LOGGING\": \"true\" in env if you do not want each thought printed to the server log.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 1 tools."
      },
      "package_note": "The shared database pointed at @modelcontextprotocol/server-everything, a test server from the same repository. The Sequential Thinking package is @modelcontextprotocol/server-sequential-thinking, and its npm entry links back to modelcontextprotocol/servers.",
      "github": "https://github.com/modelcontextprotocol/servers",
      "stars": 91580,
      "weekly_downloads": 169257,
      "last_commit": "2026-10-25",
      "logo": "https://mcpshelf.co/logos/sequential-thinking.webp",
      "maker": "The Model Context Protocol project (reference server)",
      "package": {
        "registry": "npm",
        "name": "@modelcontextprotocol/server-sequential-thinking",
        "version": "2.0.0",
        "released": "2026-10-19",
        "licence": null,
        "url": "https://www.npmjs.com/package/@modelcontextprotocol/server-sequential-thinking"
      },
      "tools": [
        {
          "name": "sequentialthinking",
          "kind": "changes",
          "purpose": "Records one numbered thought, with the expected total, and lets the model revise an earlier thought or branch off to try another line of reasoning."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/sequential-thinking.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "windows-mcp",
      "name": "Windows-MCP",
      "url": "https://mcpshelf.co/servers/windows-mcp",
      "category": "Agent helpers and desktop control",
      "category_slug": "agents-and-automation",
      "summary": "Mouse, keyboard, apps, files and PowerShell on a Windows PC, driven by your assistant.",
      "description": "Windows-MCP reads the Windows accessibility tree to find buttons, fields and menus, then clicks, types, scrolls and switches windows like a person at the keyboard. It also reaches past the screen: PowerShell, the file system, the clipboard, running processes and the registry.\n\nThat reach is the reason to set it up with care. It runs as your user with no sandbox, so turn off the tools you do not need (PowerShell and Registry are the obvious ones) and keep it on a machine where a wrong click is cheap.",
      "good_for": [
        "Automating desktop apps that have no API",
        "Repetitive form filling and file shuffling on a Windows PC",
        "Letting an agent check what is actually on screen before it acts"
      ],
      "needs": [
        "Windows 10 or 11",
        "Python 3.14 or newer and uv (for uvx)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "windows-mcp",
            "serve"
          ]
        },
        "setup_steps": null,
        "note": "Add \"--exclude-tools\", \"PowerShell,Registry\" after serve to start without its two most powerful tools. Set \"ANONYMIZED_TELEMETRY\": \"false\" in env to switch off its usage reporting.",
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": "windows-mcp on PyPI links back to CursorTouch/Windows-MCP. Version 0.8 needs the serve subcommand, which the shared database config left out.",
      "github": "https://github.com/CursorTouch/Windows-MCP",
      "stars": 10412,
      "weekly_downloads": 23074,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/windows-mcp.webp",
      "maker": "CursorTouch",
      "package": {
        "registry": "pypi",
        "name": "windows-mcp",
        "version": "0.8.8",
        "released": "2026-10-10",
        "licence": "MIT",
        "url": "https://pypi.org/project/windows-mcp/"
      },
      "tools": [
        {
          "name": "App",
          "kind": "changes",
          "purpose": "Launches an app by its Start menu name or executable path, and moves, resizes or switches between windows."
        },
        {
          "name": "Clipboard",
          "kind": "changes",
          "purpose": "Reads or replaces what is on the Windows clipboard."
        },
        {
          "name": "ControlStatus",
          "kind": "reads",
          "purpose": "Says whether the assistant or the person currently has control of the desktop, and how long until the assistant may act again."
        },
        {
          "name": "DisplayInventory",
          "kind": "reads",
          "purpose": "Reports the monitors, their layout, work areas and scaling."
        },
        {
          "name": "FileSystem",
          "kind": "changes",
          "purpose": "Reads, writes, copies, moves, deletes, lists and searches files and folders."
        },
        {
          "name": "Click",
          "kind": "changes",
          "purpose": "Clicks at screen coordinates or on an element from the last snapshot, with the left, right or middle button."
        },
        {
          "name": "Type",
          "kind": "changes",
          "purpose": "Types text at a spot or into a labelled field, optionally clearing it first and pressing Enter after."
        },
        {
          "name": "Scroll",
          "kind": "changes",
          "purpose": "Scrolls a window or a region up, down, left or right."
        },
        {
          "name": "Move",
          "kind": "changes",
          "purpose": "Moves the pointer, or drags from one point to another."
        },
        {
          "name": "Shortcut",
          "kind": "changes",
          "purpose": "Presses a key combination such as Ctrl+C or Alt+Tab."
        },
        {
          "name": "Wait",
          "kind": "reads",
          "purpose": "Pauses for a set number of seconds."
        },
        {
          "name": "WaitFor",
          "kind": "reads",
          "purpose": "Waits until some text, a window or an element appears on screen."
        },
        {
          "name": "MultiSelect",
          "kind": "changes",
          "purpose": "Selects several items (files, checkboxes, list rows) in one call, holding Ctrl if asked."
        },
        {
          "name": "MultiEdit",
          "kind": "changes",
          "purpose": "Fills several input fields in one call."
        },
        {
          "name": "Notification",
          "kind": "changes",
          "purpose": "Shows a Windows toast notification under a registered app ID."
        },
        {
          "name": "Process",
          "kind": "runs",
          "purpose": "Lists running processes or ends one by PID or name."
        },
        {
          "name": "Registry",
          "kind": "changes",
          "purpose": "Reads, writes, deletes and lists Windows Registry keys and values."
        },
        {
          "name": "Scrape",
          "kind": "reads",
          "purpose": "Fetches a web page and returns a summary of it, or reads the page open in the active browser tab."
        },
        {
          "name": "PowerShell",
          "kind": "changes",
          "purpose": "Runs a PowerShell command and returns the output."
        },
        {
          "name": "Snapshot",
          "kind": "reads",
          "purpose": "Captures the desktop state: open and focused windows, every clickable element with coordinates, and scrollable areas. Optionally adds a screenshot."
        },
        {
          "name": "Screenshot",
          "kind": "reads",
          "purpose": "A faster capture that returns an image plus the cursor position and window list, without walking the accessibility tree."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/windows-mcp.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "mobile-mcp",
      "name": "Mobile MCP",
      "url": "https://mcpshelf.co/servers/mobile-mcp",
      "category": "Agent helpers and desktop control",
      "category_slug": "agents-and-automation",
      "summary": "Tap, swipe, type and read the screen on iOS and Android, real or simulated.",
      "description": "Mobile MCP, from Mobile Next, gives one set of tools for every phone target: iOS simulators, Android emulators and real devices over USB. It reads the native accessibility tree to find elements, so most steps cost text rather than screenshots, and it falls back to a screenshot and coordinates when an app hides its structure.\n\nBeyond taps and typing it installs and launches apps, pulls device logs and crash reports, records the screen and can run several actions in one call. It is a good fit for exploring an app or checking a flow before you turn it into a proper test.",
      "good_for": [
        "Walking through a mobile app flow and reporting what breaks",
        "Reading crash reports and device logs after a failed run",
        "Driving both platforms with the same prompts"
      ],
      "needs": [
        "Node.js 20 or newer",
        "For iOS: Xcode command line tools and a booted simulator (or a trusted device)",
        "For Android: Android platform tools (adb) and a running emulator or a device with USB debugging on"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@mobilenext/mobile-mcp@latest"
          ]
        },
        "setup_steps": null,
        "note": "Set \"MOBILEMCP_DISABLE_TELEMETRY\": \"1\" in env to switch off its anonymous usage reporting.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 34 tools."
      },
      "package_note": null,
      "github": "https://github.com/mobile-next/mobile-mcp",
      "stars": 10009,
      "weekly_downloads": 20113,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/mobile-mcp.webp",
      "maker": "Mobile Next",
      "package": {
        "registry": "npm",
        "name": "@mobilenext/mobile-mcp",
        "version": "1.0.14",
        "released": "2026-10-26",
        "licence": "Apache-2.0",
        "url": "https://www.npmjs.com/package/@mobilenext/mobile-mcp"
      },
      "tools": [
        {
          "name": "get_more_tools",
          "kind": "reads",
          "purpose": "Asks the server for extra tools when none of the listed ones fits the task."
        },
        {
          "name": "mobile_list_available_devices",
          "kind": "reads",
          "purpose": "Lists the phones, simulators and emulators it can reach, iOS and Android together."
        },
        {
          "name": "mobile_login_to_cloud_provider",
          "kind": "changes",
          "purpose": "Signs this machine in to Mobile Next Cloud, the paid service that rents real devices."
        },
        {
          "name": "mobile_list_remote_devices",
          "kind": "reads",
          "purpose": "Lists the device models you can reserve in Mobile Next Cloud."
        },
        {
          "name": "mobile_allocate_remote_device",
          "kind": "changes",
          "purpose": "Reserves a cloud device for your use."
        },
        {
          "name": "mobile_release_remote_device",
          "kind": "changes",
          "purpose": "Hands a reserved cloud device back."
        },
        {
          "name": "mobile_list_apps",
          "kind": "reads",
          "purpose": "Lists the installed apps."
        },
        {
          "name": "mobile_get_foreground_app",
          "kind": "reads",
          "purpose": "Says which app (and which screen of it) is in front."
        },
        {
          "name": "mobile_launch_app",
          "kind": "changes",
          "purpose": "Opens an app by package name or bundle ID."
        },
        {
          "name": "mobile_terminate_app",
          "kind": "changes",
          "purpose": "Stops a running app."
        },
        {
          "name": "mobile_install_app",
          "kind": "changes",
          "purpose": "Installs an app from an .apk, .ipa, .app or .zip file."
        },
        {
          "name": "mobile_uninstall_app",
          "kind": "changes",
          "purpose": "Removes an app."
        },
        {
          "name": "mobile_get_screen_size",
          "kind": "reads",
          "purpose": "Returns the screen size in pixels."
        },
        {
          "name": "mobile_click_on_screen_at_coordinates",
          "kind": "changes",
          "purpose": "Taps a point, or an element by its ref from the last element list."
        },
        {
          "name": "mobile_double_tap_on_screen",
          "kind": "changes",
          "purpose": "Double-taps a point or an element."
        },
        {
          "name": "mobile_long_press_on_screen_at_coordinates",
          "kind": "changes",
          "purpose": "Presses and holds a point or an element."
        },
        {
          "name": "mobile_list_elements_on_screen",
          "kind": "reads",
          "purpose": "Reads the on-screen elements with their labels, coordinates and a short ref the tap tools accept."
        },
        {
          "name": "mobile_press_button",
          "kind": "changes",
          "purpose": "Presses a device button such as Home, Back, volume or Enter."
        },
        {
          "name": "mobile_open_url",
          "kind": "changes",
          "purpose": "Opens a web address in the device browser. Other link types are blocked unless you allow them."
        },
        {
          "name": "mobile_swipe_on_screen",
          "kind": "changes",
          "purpose": "Swipes up, down, left or right."
        },
        {
          "name": "mobile_type_keys",
          "kind": "changes",
          "purpose": "Types text into the focused field, optionally submitting it."
        },
        {
          "name": "mobile_save_screenshot",
          "kind": "changes",
          "purpose": "Saves a screenshot to a file on your computer."
        },
        {
          "name": "mobile_take_screenshot",
          "kind": "reads",
          "purpose": "Returns a screenshot of the device so the model can see the screen."
        },
        {
          "name": "mobile_set_orientation",
          "kind": "changes",
          "purpose": "Rotates the device to portrait or landscape."
        },
        {
          "name": "mobile_fold_device",
          "kind": "changes",
          "purpose": "Folds or unfolds a foldable simulator or emulator."
        },
        {
          "name": "mobile_set_location",
          "kind": "changes",
          "purpose": "Fakes the GPS position, or clears the fake one."
        },
        {
          "name": "mobile_clipboard",
          "kind": "changes",
          "purpose": "Reads or replaces the device clipboard."
        },
        {
          "name": "mobile_get_device_logs",
          "kind": "reads",
          "purpose": "Collects live logs (logcat on Android, the unified log on iOS)."
        },
        {
          "name": "mobile_get_orientation",
          "kind": "reads",
          "purpose": "Says whether the device is in portrait or landscape."
        },
        {
          "name": "mobile_start_screen_recording",
          "kind": "changes",
          "purpose": "Starts recording the screen to a video file."
        },
        {
          "name": "mobile_stop_screen_recording",
          "kind": "changes",
          "purpose": "Stops the recording and returns where the video was saved."
        },
        {
          "name": "mobile_list_crashes",
          "kind": "reads",
          "purpose": "Lists the crash reports on the device."
        },
        {
          "name": "mobile_get_crash",
          "kind": "reads",
          "purpose": "Returns one crash report in full."
        },
        {
          "name": "mobile_batch_commands",
          "kind": "changes",
          "purpose": "Runs several actions in one call, such as tap, type, tap, and can list the screen at the end."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/mobile-mcp.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "unity-mcp",
      "name": "MCP for Unity",
      "url": "https://mcpshelf.co/servers/unity-mcp",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Build scenes, edit C# scripts and run tests in the Unity Editor from a chat.",
      "description": "MCP for Unity comes in two parts: a Unity package that opens a bridge inside the Editor, and a Python server that your MCP client starts. With both running, the assistant can create and change GameObjects and scenes, write and fix C# scripts, manage assets and prefabs, read the console, run tests and start builds.\n\nIt started as justinpbarnett/unity-mcp and is now maintained by Coplay under CoplayDev/unity-mcp. The Editor package has a window that writes the client config for you, which is the easiest way to set it up.",
      "good_for": [
        "Blocking out a scene or a prototype by describing it",
        "Fixing compile errors with the console output in front of the model",
        "Repetitive Editor work: renaming, wiring components, setting up prefabs"
      ],
      "needs": [
        "Unity 2021.3 LTS or newer, with the MCP for Unity package added",
        "Python 3.10 or newer and uv (for uvx)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "--from",
            "mcpforunityserver",
            "mcp-for-unity",
            "--transport",
            "stdio"
          ]
        },
        "setup_steps": [
          "In Unity, open Package Manager, choose Add package from git URL and paste https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main",
          "Open Window → MCP for Unity and click Configure All Detected Clients, or paste the config below into your client yourself.",
          "Keep the Unity Editor open while you work: the server talks to the bridge inside it."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 48 tools."
      },
      "package_note": "The npm package called \"unity-mcp\" has no link to this project. The server is published to PyPI as mcpforunityserver, whose project links point back to CoplayDev/unity-mcp.",
      "github": "https://github.com/CoplayDev/unity-mcp",
      "stars": 15436,
      "weekly_downloads": 29,
      "last_commit": "2026-10-19",
      "logo": "https://mcpshelf.co/logos/unity-mcp.webp",
      "maker": "Coplay (CoplayDev), started by Justin P. Barnett",
      "package": {
        "registry": "pypi",
        "name": "mcpforunityserver",
        "version": "10.3.0",
        "released": "2026-10-04",
        "licence": "MIT",
        "url": "https://pypi.org/project/mcpforunityserver/"
      },
      "tools": [
        {
          "name": "batch_execute",
          "kind": "runs",
          "purpose": "Runs many commands in one call, which is much faster for big changes."
        },
        {
          "name": "blender_bridge",
          "kind": "changes",
          "purpose": "Talks to a Blender instance running the BlenderMCP add-on: read its scene, take a viewport screenshot, run Python there and bring models across."
        },
        {
          "name": "debug_request_context",
          "kind": "reads",
          "purpose": "Prints details of the current MCP session, for debugging the connection."
        },
        {
          "name": "execute_code",
          "kind": "runs",
          "purpose": "Runs C# code inside the Editor with full access to the Unity APIs."
        },
        {
          "name": "execute_menu_item",
          "kind": "runs",
          "purpose": "Runs any Unity menu command by its path."
        },
        {
          "name": "find_gameobjects",
          "kind": "changes",
          "purpose": "Finds GameObjects by name, tag, layer, component or path and returns their IDs."
        },
        {
          "name": "find_in_file",
          "kind": "reads",
          "purpose": "Searches a file with a regular expression and returns matching lines."
        },
        {
          "name": "generate_audio",
          "kind": "changes",
          "purpose": "Generates sound effects or music with your own fal.ai key and imports them as audio clips."
        },
        {
          "name": "generate_image",
          "kind": "changes",
          "purpose": "Generates 2D images with your own fal.ai or OpenRouter key and imports them as textures or sprites."
        },
        {
          "name": "generate_model",
          "kind": "changes",
          "purpose": "Generates 3D models with your own Tripo, Meshy or fal key and imports them."
        },
        {
          "name": "import_model",
          "kind": "changes",
          "purpose": "Imports a model from Sketchfab, using your own Sketchfab token."
        },
        {
          "name": "import_model_file",
          "kind": "changes",
          "purpose": "Imports a model file that is already on disk, such as an FBX or glTF."
        },
        {
          "name": "manage_animation",
          "kind": "changes",
          "purpose": "Controls Animators and creates animation clips."
        },
        {
          "name": "manage_asset",
          "kind": "changes",
          "purpose": "Imports, creates, searches, moves and deletes assets."
        },
        {
          "name": "manage_build",
          "kind": "changes",
          "purpose": "Starts player builds, switches platform and manages build settings and profiles."
        },
        {
          "name": "manage_camera",
          "kind": "changes",
          "purpose": "Sets up cameras, including Cinemachine if it is installed."
        },
        {
          "name": "manage_components",
          "kind": "changes",
          "purpose": "Adds or removes components and sets their properties."
        },
        {
          "name": "manage_editor",
          "kind": "changes",
          "purpose": "Enters and leaves play mode, adds tags and layers, switches the active tool and runs undo and redo."
        },
        {
          "name": "manage_gameobject",
          "kind": "changes",
          "purpose": "Creates, changes, duplicates, moves and deletes GameObjects."
        },
        {
          "name": "manage_graphics",
          "kind": "changes",
          "purpose": "Changes volumes, post-processing, light baking and render pipeline settings."
        },
        {
          "name": "manage_material",
          "kind": "changes",
          "purpose": "Creates materials and sets colours, shaders and properties."
        },
        {
          "name": "manage_packages",
          "kind": "changes",
          "purpose": "Lists, installs and removes Unity packages and registries."
        },
        {
          "name": "manage_physics",
          "kind": "changes",
          "purpose": "Changes physics settings, collision layers, materials and joints, and runs physics queries."
        },
        {
          "name": "manage_prefabs",
          "kind": "changes",
          "purpose": "Creates prefabs from objects, edits their contents and saves them."
        },
        {
          "name": "manage_probuilder",
          "kind": "changes",
          "purpose": "Builds and edits ProBuilder meshes for quick level geometry."
        },
        {
          "name": "manage_profiler",
          "kind": "changes",
          "purpose": "Starts the profiler, reads counters, takes memory snapshots and opens the Frame Debugger."
        },
        {
          "name": "manage_scene",
          "kind": "changes",
          "purpose": "Opens, creates, saves and inspects scenes, including the hierarchy and build settings."
        },
        {
          "name": "refresh_unity",
          "kind": "changes",
          "purpose": "Refreshes the asset database and can wait for scripts to compile."
        },
        {
          "name": "apply_text_edits",
          "kind": "changes",
          "purpose": "Changes exact character ranges in a script."
        },
        {
          "name": "create_script",
          "kind": "runs",
          "purpose": "Creates a new C# script at a path in the project."
        },
        {
          "name": "delete_script",
          "kind": "runs",
          "purpose": "Deletes a C# script."
        },
        {
          "name": "validate_script",
          "kind": "runs",
          "purpose": "Checks a C# script and returns compiler diagnostics."
        },
        {
          "name": "manage_script",
          "kind": "runs",
          "purpose": "An older all-in-one script tool, kept for compatibility."
        },
        {
          "name": "manage_script_capabilities",
          "kind": "runs",
          "purpose": "Reports which script operations and limits the server supports."
        },
        {
          "name": "get_sha",
          "kind": "reads",
          "purpose": "Returns a script's hash and size without its contents, to detect changes."
        },
        {
          "name": "manage_scriptable_object",
          "kind": "changes",
          "purpose": "Creates and edits ScriptableObject assets field by field."
        },
        {
          "name": "manage_shader",
          "kind": "changes",
          "purpose": "Creates, reads, updates and deletes shader files."
        },
        {
          "name": "manage_texture",
          "kind": "changes",
          "purpose": "Generates simple textures such as fills, gradients and patterns."
        },
        {
          "name": "manage_tools",
          "kind": "changes",
          "purpose": "Shows and switches the optional tool groups for the session."
        },
        {
          "name": "manage_ui",
          "kind": "changes",
          "purpose": "Creates and edits UI Toolkit documents, styles and components."
        },
        {
          "name": "manage_vfx",
          "kind": "changes",
          "purpose": "Sets up particle systems, VFX Graph, line and trail renderers."
        },
        {
          "name": "read_console",
          "kind": "changes",
          "purpose": "Reads or clears messages in the Unity console."
        },
        {
          "name": "run_tests",
          "kind": "runs",
          "purpose": "Starts a Unity test run and returns a job ID."
        },
        {
          "name": "get_test_job",
          "kind": "reads",
          "purpose": "Checks on a test run started with run_tests."
        },
        {
          "name": "script_apply_edits",
          "kind": "runs",
          "purpose": "Edits a script by method or class rather than by line, which is safer for bigger changes."
        },
        {
          "name": "set_active_instance",
          "kind": "changes",
          "purpose": "Picks which Unity Editor to talk to when several are open."
        },
        {
          "name": "unity_docs",
          "kind": "reads",
          "purpose": "Looks up the official Unity documentation for a class or method."
        },
        {
          "name": "unity_reflect",
          "kind": "reads",
          "purpose": "Checks the live Unity C# API by reflection, so the model does not invent methods."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/unity-mcp.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "drawio",
      "name": "draw.io MCP",
      "url": "https://mcpshelf.co/servers/drawio",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "draw.io's own server: describe a diagram and get one you can keep editing.",
      "description": "JGraph, the company behind draw.io, publishes this server. The npm package we list runs on your computer and opens each diagram in the draw.io editor in your browser. If your client takes a URL, the hosted version at mcp.draw.io can draw the diagram right in the chat instead, in clients that support MCP Apps such as Claude.ai, ChatGPT and VS Code with Copilot. Either way the model writes draw.io XML, Mermaid or CSV, and it can search more than 10,000 shapes, including the AWS, Azure, GCP and Kubernetes icon sets.\n\nEvery result stays an ordinary draw.io file, so you can open it, move boxes around and save it like any diagram you drew yourself.",
      "good_for": [
        "Architecture diagrams with the right cloud icons",
        "Turning a process described in words into a flowchart",
        "Quick sequence, ER and UML diagrams during a design discussion"
      ],
      "needs": [
        "Node.js 18 or newer for the local package",
        "Nothing at all for the hosted server: no account or key"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@drawio/mcp"
          ]
        },
        "setup_steps": null,
        "note": "The local package opens each diagram in the draw.io editor in your browser, and the diagram travels in the link itself rather than through a server.",
        "remote_url": "https://mcp.draw.io/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 8 tools."
      },
      "package_note": null,
      "github": "https://github.com/jgraph/drawio-mcp",
      "stars": 5713,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/drawio.webp",
      "maker": "JGraph, the company behind draw.io",
      "package": {
        "registry": "npm",
        "name": "@drawio/mcp",
        "version": "1.10.0",
        "released": "2026-10-18",
        "licence": "Apache-2.0",
        "url": "https://www.npmjs.com/package/@drawio/mcp"
      },
      "tools": [
        {
          "name": "open_drawio_xml",
          "kind": "changes",
          "purpose": "Opens a diagram written in draw.io's own XML, for exact layouts, custom styles and cloud or network icons."
        },
        {
          "name": "open_drawio_csv",
          "kind": "changes",
          "purpose": "Builds a diagram, such as an org chart, from rows of CSV data and opens it."
        },
        {
          "name": "open_drawio_mermaid",
          "kind": "changes",
          "purpose": "Turns Mermaid text into an editable draw.io diagram and opens it in the editor. The best fit for flowcharts, sequence, class, ER and state diagrams."
        },
        {
          "name": "get_drawio_reference",
          "kind": "reads",
          "purpose": "Hands the model the full Mermaid or XML writing guide, which it reads once before its first diagram of that kind."
        },
        {
          "name": "list_pages",
          "kind": "reads",
          "purpose": "Lists the pages in a .drawio file on your computer without loading them all."
        },
        {
          "name": "get_page",
          "kind": "reads",
          "purpose": "Reads one page of a local .drawio file as XML."
        },
        {
          "name": "set_page",
          "kind": "changes",
          "purpose": "Replaces one page of a local .drawio file and leaves the other pages alone."
        },
        {
          "name": "search_shapes",
          "kind": "reads",
          "purpose": "Searches about 10,000 built-in shapes (AWS, Azure, GCP, Kubernetes, Cisco, BPMN and more) plus brand icons, and returns their exact styles."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/drawio.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "gitmcp",
      "name": "GitMCP",
      "url": "https://mcpshelf.co/servers/gitmcp",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "A hosted server that reads any public GitHub repo's docs and code on request.",
      "description": "GitMCP runs in the cloud, so there is nothing to install: you add a URL. Point it at one repository (gitmcp.io/owner/repo) and the assistant gets tools to fetch that project's documentation, search it and search its code. Use the generic address, gitmcp.io/docs, and the model picks the repository itself for each question.\n\nIt reads llms.txt first when a project has one, then the README. That makes it a light, free way to stop a model guessing at a library it knows badly, without any account.",
      "good_for": [
        "Asking how to use a new or niche library from its own docs",
        "Finding how something is implemented in an open source project",
        "Giving a chat-only client grounded answers about a repo"
      ],
      "needs": [
        "Nothing: no account, key or install",
        "A client that can connect to a remote URL (or mcp-remote as a bridge)"
      ],
      "install": {
        "config": {
          "url": "https://gitmcp.io/docs"
        },
        "setup_steps": null,
        "note": "Swap /docs for /owner/repo (for example https://gitmcp.io/microsoft/playwright-mcp) to lock it to one project and get tools named after it.",
        "remote_url": "https://gitmcp.io/docs"
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": "The npm package called \"git-mcp\" has no link to this project. GitMCP is a hosted service; the repository is its source, for anyone who wants to run their own copy.",
      "github": "https://github.com/idosal/git-mcp",
      "stars": 8492,
      "weekly_downloads": 33,
      "last_commit": "2026-05-08",
      "logo": "https://mcpshelf.co/logos/gitmcp.webp",
      "maker": "The GitMCP project (idosal/git-mcp), free and open source",
      "package": null,
      "tools": [
        {
          "name": "match_common_libs_owner_repo_mapping",
          "kind": "reads",
          "purpose": "Turns a library name, such as \"three.js\", into its GitHub owner and repository, when you have not named one."
        },
        {
          "name": "fetch_generic_documentation",
          "kind": "reads",
          "purpose": "Fetches a repository's main documentation: llms.txt if the project has one, otherwise its README."
        },
        {
          "name": "search_generic_documentation",
          "kind": "reads",
          "purpose": "Searches a repository's documentation for a question and returns the relevant passages instead of the whole thing."
        },
        {
          "name": "search_generic_code",
          "kind": "reads",
          "purpose": "Searches a repository's code through GitHub code search, 30 results a page."
        },
        {
          "name": "fetch_generic_url_content",
          "kind": "reads",
          "purpose": "Fetches a page that the documentation links to, respecting robots.txt."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/gitmcp.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "ghidra",
      "name": "GhidraMCP",
      "url": "https://mcpshelf.co/servers/ghidra",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Decompile, cross-reference and rename inside Ghidra from a chat.",
      "description": "GhidraMCP pairs a Ghidra extension, which serves the open program over a small local HTTP server, with an MCP server that turns those endpoints into tools. The assistant can list functions, classes, imports and strings, decompile or disassemble a function, follow cross-references and write back better names, types and comments.\n\nUnlike IDA Pro MCP it needs no paid licence: Ghidra is free. There is also a headless mode that imports and analyses a binary on its own through PyGhidra, with no Ghidra window open.",
      "good_for": [
        "A first pass over an unknown binary: naming the obvious functions",
        "Explaining what a decompiled function does",
        "Malware triage and CTF work with notes kept in the Ghidra project"
      ],
      "needs": [
        "Ghidra 12.1.4 with the GhidraMCP extension installed",
        "uv (for uvx), or Python 3.10 or newer"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "--from",
            "git+https://github.com/LaurieWired/GhidraMCP",
            "ghidra-mcp",
            "--ghidra-server",
            "http://127.0.0.1:8080/"
          ]
        },
        "setup_steps": [
          "Download the latest release zip from the GhidraMCP repository.",
          "In Ghidra choose File → Install Extensions, click +, pick the zip and restart Ghidra.",
          "Make sure GhidraMCPPlugin is ticked under File → Configure → Developer, then open a program in the CodeBrowser."
        ],
        "note": "Change the --ghidra-server address if you moved the plugin to another port under Edit → Tool Options.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 30 tools."
      },
      "package_note": "The shared database ran \"uvx ghidramcp\". That PyPI name only holds a 0.0.dev0 placeholder, so we publish the install the project documents: straight from its GitHub source.",
      "github": "https://github.com/LaurieWired/GhidraMCP",
      "stars": 11575,
      "weekly_downloads": 62,
      "last_commit": "2026-10-10",
      "logo": "https://mcpshelf.co/logos/ghidra.webp",
      "maker": "LaurieWired",
      "package": null,
      "tools": [
        {
          "name": "get_program_info",
          "kind": "reads",
          "purpose": "Identifies the loaded program: format, architecture, compiler, image base, size and entry points."
        },
        {
          "name": "list_functions",
          "kind": "reads",
          "purpose": "Lists functions with their entry addresses, optionally filtered by name."
        },
        {
          "name": "list_methods",
          "kind": "reads",
          "purpose": "An older name-only function list, kept for compatibility."
        },
        {
          "name": "search_functions_by_name",
          "kind": "reads",
          "purpose": "Finds functions whose name contains a piece of text."
        },
        {
          "name": "list_classes",
          "kind": "reads",
          "purpose": "Lists class namespaces."
        },
        {
          "name": "list_namespaces",
          "kind": "reads",
          "purpose": "Lists every non-global namespace."
        },
        {
          "name": "list_segments",
          "kind": "reads",
          "purpose": "Lists memory blocks with their address ranges and permissions."
        },
        {
          "name": "list_imports",
          "kind": "reads",
          "purpose": "Lists imported symbols and the libraries they come from."
        },
        {
          "name": "list_exports",
          "kind": "reads",
          "purpose": "Lists exported symbols and entry points."
        },
        {
          "name": "list_data_items",
          "kind": "reads",
          "purpose": "Lists defined data with address, label, type and value."
        },
        {
          "name": "list_strings",
          "kind": "reads",
          "purpose": "Lists strings found in the program, optionally filtered by their text."
        },
        {
          "name": "get_function_by_address",
          "kind": "reads",
          "purpose": "Returns the function at an address: name, signature, range and calling convention."
        },
        {
          "name": "get_current_address",
          "kind": "reads",
          "purpose": "Returns the address you have selected in Ghidra's listing."
        },
        {
          "name": "get_current_function",
          "kind": "reads",
          "purpose": "Returns the function you have selected in Ghidra."
        },
        {
          "name": "decompile_function",
          "kind": "changes",
          "purpose": "Decompiles a function by name into C-like pseudocode."
        },
        {
          "name": "decompile_function_by_address",
          "kind": "changes",
          "purpose": "Decompiles the function at an address, which avoids clashes between duplicate names."
        },
        {
          "name": "disassemble_function",
          "kind": "changes",
          "purpose": "Returns a function's instructions with addresses, bytes and comments."
        },
        {
          "name": "get_xrefs_to",
          "kind": "reads",
          "purpose": "Lists every reference to an address and the function each comes from."
        },
        {
          "name": "get_xrefs_from",
          "kind": "reads",
          "purpose": "Lists the references made from one instruction or data address."
        },
        {
          "name": "get_function_xrefs",
          "kind": "reads",
          "purpose": "Lists the references to a function's entry point."
        },
        {
          "name": "get_function_calls",
          "kind": "reads",
          "purpose": "Shows one level of the call graph: who calls a function and what it calls."
        },
        {
          "name": "read_memory",
          "kind": "reads",
          "purpose": "Reads up to 4 KB of program memory as hex and ASCII."
        },
        {
          "name": "rename_function_by_address",
          "kind": "changes",
          "purpose": "Renames the function at an address."
        },
        {
          "name": "rename_function",
          "kind": "changes",
          "purpose": "Renames a function by its current name."
        },
        {
          "name": "rename_data",
          "kind": "changes",
          "purpose": "Renames the label on a piece of data."
        },
        {
          "name": "rename_variable",
          "kind": "changes",
          "purpose": "Renames a local variable or parameter in the decompiler view."
        },
        {
          "name": "set_function_prototype",
          "kind": "changes",
          "purpose": "Sets a function's signature from a C prototype."
        },
        {
          "name": "set_local_variable_type",
          "kind": "changes",
          "purpose": "Sets the data type of a decompiler variable."
        },
        {
          "name": "set_decompiler_comment",
          "kind": "changes",
          "purpose": "Adds or clears a comment shown in the decompiler."
        },
        {
          "name": "set_disassembly_comment",
          "kind": "changes",
          "purpose": "Adds or clears an end-of-line comment in the disassembly."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/ghidra.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "apify",
      "name": "Apify",
      "url": "https://mcpshelf.co/servers/apify",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Find and run ready-made Apify scrapers for maps, social media, shops and search.",
      "description": "Apify's server turns Apify Store into a tool box. The assistant searches the Store for an Actor (Apify's name for a packaged scraper or automation), reads its input schema and runs it, then pages through the results. Out of the box it also has a web search and a page fetcher.\n\nRuns are billed to your Apify account like any other run, and some Actors charge per result, so set a spending limit before you let an agent loose. The hosted server at mcp.apify.com signs in with OAuth and gets new features first.",
      "good_for": [
        "Pulling structured data from Google Maps, social networks or shops",
        "Web research that needs more than a single page fetch",
        "Running the scrapers you already use on Apify from a chat"
      ],
      "needs": [
        "An Apify account and API token (free plan available)",
        "Node.js 22 or newer for the local server"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@apify/actors-mcp-server"
          ],
          "env": {
            "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
          }
        },
        "setup_steps": null,
        "note": "Add \"--tools\", \"actors,docs\" to pin the tool set, since Apify says the defaults can change. Set \"TELEMETRY_ENABLED\": \"false\" in env to switch off its telemetry.",
        "remote_url": "https://mcp.apify.com"
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we listed its tools from its package instead of running this config."
      },
      "package_note": null,
      "github": "https://github.com/apify/apify-mcp-server",
      "stars": 13259,
      "weekly_downloads": null,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/apify.webp",
      "maker": "Apify",
      "package": {
        "registry": "npm",
        "name": "@apify/actors-mcp-server",
        "version": "0.19.3",
        "released": "2026-10-21",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@apify/actors-mcp-server"
      },
      "tools": [
        {
          "name": "search-actors",
          "kind": "reads",
          "purpose": "Searches Apify Store for scrapers and automations that fit a site or a job."
        },
        {
          "name": "fetch-actor-details",
          "kind": "reads",
          "purpose": "Returns an Actor's description, input schema, pricing and output schema, so the model can fill in the input correctly."
        },
        {
          "name": "call-actor",
          "kind": "changes",
          "purpose": "Runs an Actor with the given input and returns run details plus a short summary."
        },
        {
          "name": "get-actor-run",
          "kind": "reads",
          "purpose": "Checks the status and storage IDs of a run."
        },
        {
          "name": "get-dataset-items",
          "kind": "reads",
          "purpose": "Pages through the rows an Actor run produced."
        },
        {
          "name": "get-key-value-store-record",
          "kind": "reads",
          "purpose": "Reads one stored record, such as a screenshot or an output file, by key."
        },
        {
          "name": "abort-actor-run",
          "kind": "changes",
          "purpose": "Stops a run that is still going."
        },
        {
          "name": "search-apify-docs",
          "kind": "reads",
          "purpose": "Searches the Apify and Crawlee documentation."
        },
        {
          "name": "fetch-apify-docs",
          "kind": "reads",
          "purpose": "Fetches one documentation page in full."
        },
        {
          "name": "report-problem",
          "kind": "changes",
          "purpose": "Sends a problem report about a tool or Actor to Apify."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/apify.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "browser-tools",
      "name": "BrowserTools MCP",
      "url": "https://mcpshelf.co/servers/browser-tools",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Console logs, network calls, screenshots and Lighthouse audits from your own Chrome tab.",
      "description": "BrowserTools works with the Chrome session you already have open, through a DevTools extension, instead of starting a fresh automated browser. That means you stay signed in to the app you are debugging, and the agent sees the same console errors, failed requests and selected element that you do. It can also run Lighthouse audits for performance, accessibility, SEO and best practices.\n\nVersion 2 is a rewrite that fixed serious security problems in 1.x (open local ports and a network scan), so make sure you are on 2.0 or newer. Clicking, typing and navigation are off unless you start it with --allow-input.",
      "good_for": [
        "Asking an agent why a page throws errors, with the real console in front of it",
        "Debugging failed API calls in an app you are signed in to",
        "Quick Lighthouse checks on the page you are looking at"
      ],
      "needs": [
        "Node.js 22.19 or newer",
        "Chrome (or another Chromium browser) with the BrowserTools extension loaded unpacked"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@agentdeskai/browser-tools-mcp@latest"
          ]
        },
        "setup_steps": [
          "Download or clone the BrowserTools repository, open chrome://extensions, turn on Developer mode, choose Load unpacked and pick its chrome-extension folder.",
          "Add the config below to your client.",
          "Open DevTools (F12) on the page you want the agent to see: capture starts once DevTools is open."
        ],
        "note": "If nothing comes through, run npx @agentdeskai/browser-tools-mcp --doctor, which names the missing piece.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 16 tools."
      },
      "package_note": null,
      "github": "https://github.com/AgentDeskAI/browser-tools-mcp",
      "stars": 7334,
      "weekly_downloads": 1715,
      "last_commit": "2026-10-16",
      "logo": "https://mcpshelf.co/logos/browser-tools.webp",
      "maker": "AgentDesk AI",
      "package": {
        "registry": "npm",
        "name": "@agentdeskai/browser-tools-mcp",
        "version": "2.0.4",
        "released": "2026-10-27",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@agentdeskai/browser-tools-mcp"
      },
      "tools": [
        {
          "name": "listBrowserTabs",
          "kind": "reads",
          "purpose": "Lists the tabs that have DevTools open and marks the one the other tools read by default."
        },
        {
          "name": "getConsoleLogs",
          "kind": "reads",
          "purpose": "Reads console output from a tab, with keyword filters and paging to keep replies short."
        },
        {
          "name": "getConsoleErrors",
          "kind": "reads",
          "purpose": "Reads only errors and uncaught exceptions, which is the usual first stop when a page breaks."
        },
        {
          "name": "getNetworkLogs",
          "kind": "reads",
          "purpose": "Reads fetch and XHR requests with status codes, timing and bodies. Credential headers are hidden."
        },
        {
          "name": "getNetworkErrors",
          "kind": "reads",
          "purpose": "Reads only requests that failed or came back 4xx or 5xx."
        },
        {
          "name": "getSelectedElement",
          "kind": "reads",
          "purpose": "Returns the element you picked in the DevTools Elements panel, with its attributes and markup."
        },
        {
          "name": "getPageInfo",
          "kind": "reads",
          "purpose": "Says which page the inspected tab is on."
        },
        {
          "name": "getConnectionStatus",
          "kind": "reads",
          "purpose": "Checks that the Chrome extension is connected and how much it has captured."
        },
        {
          "name": "takeScreenshot",
          "kind": "changes",
          "purpose": "Captures the inspected tab and hands the picture straight to the model, plus a saved file path."
        },
        {
          "name": "refreshBrowser",
          "kind": "changes",
          "purpose": "Reloads the inspected tab."
        },
        {
          "name": "getBrowserStorage",
          "kind": "reads",
          "purpose": "Reads localStorage, sessionStorage and cookies. Values stay hidden unless you allow them."
        },
        {
          "name": "wipeLogs",
          "kind": "changes",
          "purpose": "Clears what has been captured so the next reproduction starts clean."
        },
        {
          "name": "runAccessibilityAudit",
          "kind": "reads",
          "purpose": "Runs a Lighthouse accessibility audit on the page."
        },
        {
          "name": "runPerformanceAudit",
          "kind": "reads",
          "purpose": "Runs a Lighthouse performance audit, including Core Web Vitals."
        },
        {
          "name": "runSEOAudit",
          "kind": "reads",
          "purpose": "Runs a Lighthouse SEO audit."
        },
        {
          "name": "runBestPracticesAudit",
          "kind": "reads",
          "purpose": "Runs Lighthouse's best-practices checks."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/browser-tools.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "aws-knowledge",
      "name": "AWS Knowledge MCP Server",
      "url": "https://mcpshelf.co/servers/aws-knowledge",
      "category": "Cloud and operations",
      "category_slug": "cloud-and-ops",
      "summary": "AWS's free hosted server for current AWS docs, API references and region checks.",
      "description": "The AWS Knowledge server is one of the open source MCP servers in AWS Labs' awslabs/mcp repository, and the easiest one to start with: AWS hosts it, it needs no AWS account and it only reads. It searches the AWS documentation, API references, What's New posts, blogs and Well-Architected guidance, and returns whole pages as Markdown.\n\nIt can also say whether a service, API or CloudFormation resource is available in a given region, and it serves AWS agent skills: step-by-step guides for tasks such as deployment and troubleshooting. To act on your account rather than read about it, the same repository has servers that call AWS APIs with your credentials.",
      "good_for": [
        "Getting current answers on AWS services the model learned years ago",
        "Checking whether a feature exists in your region before you design around it",
        "CDK and CloudFormation questions with the official examples"
      ],
      "needs": [
        "Nothing: no AWS account or key",
        "A client that connects to a remote URL (or a stdio bridge such as fastmcp)"
      ],
      "install": {
        "config": {
          "url": "https://knowledge-mcp.global.api.aws"
        },
        "setup_steps": null,
        "note": "It is rate limited but free. For clients that only start local commands, use uvx fastmcp run https://knowledge-mcp.global.api.aws as the command.",
        "remote_url": "https://knowledge-mcp.global.api.aws"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 5 tools."
      },
      "package_note": "The shared database pointed this repository at \"npx mcp\", an unrelated npm package. AWS Labs publishes dozens of servers from awslabs/mcp; this page covers the hosted Knowledge server.",
      "github": "https://github.com/awslabs/mcp",
      "stars": 9835,
      "weekly_downloads": 15229,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/aws-knowledge.webp",
      "maker": "Amazon Web Services (awslabs/mcp)",
      "package": null,
      "tools": [
        {
          "name": "aws___read_documentation",
          "kind": "reads",
          "purpose": "Reads a full AWS documentation page as markdown, in chunks, when the search passages leave something out."
        },
        {
          "name": "aws___search_documentation",
          "kind": "reads",
          "purpose": "Searches AWS documentation, API references, What's New posts, blogs and architecture guidance, and returns real page passages. You can narrow it to a topic such as troubleshooting or CDK."
        },
        {
          "name": "aws___list_regions",
          "kind": "reads",
          "purpose": "Lists every AWS Region with its code and name."
        },
        {
          "name": "aws___get_regional_availability",
          "kind": "reads",
          "purpose": "Checks whether a service, API or CloudFormation resource is available, planned or missing in up to ten Regions."
        },
        {
          "name": "aws___retrieve_skill",
          "kind": "reads",
          "purpose": "Fetches an AWS-written skill, a step-by-step guide for a task, that a search pointed to."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/aws-knowledge.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "executeautomation-playwright",
      "name": "ExecuteAutomation Playwright MCP",
      "url": "https://mcpshelf.co/servers/executeautomation-playwright",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "A community Playwright server that also writes test code and emulates phones and tablets.",
      "description": "This is the Playwright server from ExecuteAutomation, a test-automation training site, and it predates Microsoft's own Playwright MCP. The model drives a real Chromium, Firefox or WebKit browser by CSS selector: open pages, click, fill forms, run JavaScript, save PDFs and take screenshots. It can also record what it did as Playwright test code and make plain HTTP requests for API checks.\n\nIts party trick is device emulation: one call switches the page to any of 143 Playwright device profiles, such as an iPhone 13 or an iPad in landscape. The last release was in December 2025, so for day-to-day browsing Microsoft's server is the safer default; this one suits people who want test code and device checks out of the session.",
      "good_for": [
        "Turning a manual click-through into a Playwright test file",
        "Checking a page on phone and tablet sizes from a chat",
        "Quick API checks alongside the browser"
      ],
      "needs": [
        "Node.js 18 or newer",
        "Disk space for the Playwright browser it downloads on first use"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@executeautomation/playwright-mcp-server"
          ]
        },
        "setup_steps": null,
        "note": "For a client that connects by URL, start it with npx @executeautomation/playwright-mcp-server --port 8931 and point the client at http://localhost:8931/mcp.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 33 tools."
      },
      "package_note": "The shared database listed \"@michaellatman/mcp-get\", an installer, as the package. The server itself is @executeautomation/playwright-mcp-server, version 1.0.12.",
      "github": "https://github.com/executeautomation/mcp-playwright",
      "stars": 5674,
      "weekly_downloads": 6989,
      "last_commit": "2025-12-13",
      "logo": "https://mcpshelf.co/logos/executeautomation-playwright.webp",
      "maker": "ExecuteAutomation (Karthik KK)",
      "package": {
        "registry": "npm",
        "name": "@executeautomation/playwright-mcp-server",
        "version": "1.0.12",
        "released": "2025-12-12",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@executeautomation/playwright-mcp-server"
      },
      "tools": [
        {
          "name": "start_codegen_session",
          "kind": "changes",
          "purpose": "Starts recording the browser actions that follow, for turning into a test."
        },
        {
          "name": "end_codegen_session",
          "kind": "changes",
          "purpose": "Stops recording and writes a Playwright test file."
        },
        {
          "name": "get_codegen_session",
          "kind": "reads",
          "purpose": "Shows what a recording session has captured so far."
        },
        {
          "name": "clear_codegen_session",
          "kind": "changes",
          "purpose": "Throws a recording away without writing a test."
        },
        {
          "name": "playwright_navigate",
          "kind": "changes",
          "purpose": "Opens a URL, starting the browser if needed. You can pick Chromium, Firefox or WebKit, the window size and headless mode."
        },
        {
          "name": "playwright_screenshot",
          "kind": "changes",
          "purpose": "Captures the page or one element, full page if you like, and can save it as a PNG."
        },
        {
          "name": "playwright_click",
          "kind": "changes",
          "purpose": "Clicks an element found by CSS selector."
        },
        {
          "name": "playwright_iframe_click",
          "kind": "changes",
          "purpose": "Clicks an element inside an iframe."
        },
        {
          "name": "playwright_iframe_fill",
          "kind": "changes",
          "purpose": "Types into a field inside an iframe."
        },
        {
          "name": "playwright_fill",
          "kind": "changes",
          "purpose": "Types a value into an input."
        },
        {
          "name": "playwright_select",
          "kind": "changes",
          "purpose": "Picks an option in a select box."
        },
        {
          "name": "playwright_hover",
          "kind": "changes",
          "purpose": "Moves the mouse over an element, for menus and tooltips."
        },
        {
          "name": "playwright_upload_file",
          "kind": "changes",
          "purpose": "Attaches a local file to a file input."
        },
        {
          "name": "playwright_evaluate",
          "kind": "changes",
          "purpose": "Runs JavaScript in the page and returns the result."
        },
        {
          "name": "playwright_console_logs",
          "kind": "changes",
          "purpose": "Reads the browser console, filtered by type or text."
        },
        {
          "name": "playwright_resize",
          "kind": "changes",
          "purpose": "Changes the viewport by size or by one of 143 device presets, with orientation."
        },
        {
          "name": "playwright_close",
          "kind": "changes",
          "purpose": "Closes the browser and frees its resources."
        },
        {
          "name": "playwright_get",
          "kind": "changes",
          "purpose": "Sends an HTTP GET request outside the page."
        },
        {
          "name": "playwright_post",
          "kind": "changes",
          "purpose": "Sends an HTTP POST request."
        },
        {
          "name": "playwright_put",
          "kind": "changes",
          "purpose": "Sends an HTTP PUT request."
        },
        {
          "name": "playwright_patch",
          "kind": "changes",
          "purpose": "Sends an HTTP PATCH request."
        },
        {
          "name": "playwright_delete",
          "kind": "changes",
          "purpose": "Sends an HTTP DELETE request."
        },
        {
          "name": "playwright_expect_response",
          "kind": "changes",
          "purpose": "Starts waiting for a network response that matches a URL pattern."
        },
        {
          "name": "playwright_assert_response",
          "kind": "changes",
          "purpose": "Finishes that wait and checks the response that came back."
        },
        {
          "name": "playwright_custom_user_agent",
          "kind": "changes",
          "purpose": "Sets the browser's user agent string."
        },
        {
          "name": "playwright_get_visible_text",
          "kind": "changes",
          "purpose": "Returns the readable text of the page."
        },
        {
          "name": "playwright_get_visible_html",
          "kind": "changes",
          "purpose": "Returns the page HTML, with scripts removed unless you ask for them."
        },
        {
          "name": "playwright_go_back",
          "kind": "changes",
          "purpose": "Goes back one page in history."
        },
        {
          "name": "playwright_go_forward",
          "kind": "changes",
          "purpose": "Goes forward one page in history."
        },
        {
          "name": "playwright_drag",
          "kind": "changes",
          "purpose": "Drags one element onto another."
        },
        {
          "name": "playwright_press_key",
          "kind": "changes",
          "purpose": "Presses a keyboard key, optionally on a focused element."
        },
        {
          "name": "playwright_save_as_pdf",
          "kind": "changes",
          "purpose": "Saves the page as a PDF file."
        },
        {
          "name": "playwright_click_and_switch_tab",
          "kind": "changes",
          "purpose": "Clicks a link that opens a new tab and carries on in that tab."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/executeautomation-playwright.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "wigolo",
      "name": "Wigolo",
      "url": "https://mcpshelf.co/servers/wigolo",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Search, fetch, crawl and extract the web locally, with no keys or metered bill.",
      "description": "Wigolo bundles the web jobs an agent keeps needing into one local server: search across many engines with its own reranking, page fetching that falls back to a headless browser when a site needs one, crawling, structured extraction, a searchable cache of everything it has read, and change tracking for pages you watch. Search, fetch, crawl and extract need no account or key.\n\nThe research and agent tools write a finished, cited answer only when you give them a model to use, such as a free Gemini key or a local Ollama model. Without one they hand the evidence back for your own assistant to write up. The first setup downloads a browser engine and small on-device models, about 1.5 GB in all.",
      "good_for": [
        "Web research in a coding agent without paying for a search API",
        "Crawling a docs site and pulling out tables or JSON-LD",
        "Watching a page for changes"
      ],
      "needs": [
        "Node.js 22 or newer",
        "About 1.5 GB of free disk for the browser engine and models"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "wigolo"
          ]
        },
        "setup_steps": [
          "Run npx wigolo init once. It downloads the browser engine and models and checks each part. Add --agents=claude-code,cursor to write those clients' configs at the same time.",
          "Add the config below to any other client.",
          "Optional: set WIGOLO_LLM_PROVIDER and a matching key in env so the research and agent tools can write their own answers."
        ],
        "note": "Run npx wigolo doctor if a tool reports a missing component. It names the part and the fix.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 10 tools."
      },
      "package_note": null,
      "github": "https://github.com/KnockOutEZ/wigolo",
      "stars": 5503,
      "weekly_downloads": 1093,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/wigolo.webp",
      "maker": "KnockOutEZ (Towhid), open source with commercial licences available",
      "package": {
        "registry": "npm",
        "name": "wigolo",
        "version": "0.3.1",
        "released": "2026-10-26",
        "licence": "AGPL-3.0-only",
        "url": "https://www.npmjs.com/package/wigolo"
      },
      "tools": [
        {
          "name": "fetch",
          "kind": "changes",
          "purpose": "Turns one URL into clean markdown, switching to a headless browser when a page needs JavaScript or blocks plain requests. Handles PDFs, single sections and simple page actions."
        },
        {
          "name": "search",
          "kind": "reads",
          "purpose": "Searches the web across many engines at once, reranks the results and returns scored excerpts with citations. Takes several queries in parallel, domain filters and date ranges."
        },
        {
          "name": "crawl",
          "kind": "reads",
          "purpose": "Follows links from a starting page, or reads a sitemap, and returns many pages at once while respecting robots.txt and rate limits."
        },
        {
          "name": "cache",
          "kind": "changes",
          "purpose": "Searches everything already fetched, with no network call, and can clear the cache or check whether a page changed."
        },
        {
          "name": "extract",
          "kind": "reads",
          "purpose": "Pulls structured data out of a page: tables, metadata, JSON-LD, common schemas or a JSON Schema of your own."
        },
        {
          "name": "find_similar",
          "kind": "reads",
          "purpose": "Finds pages related to a URL or an idea, using the local cache plus a live search."
        },
        {
          "name": "research",
          "kind": "reads",
          "purpose": "Splits a question into smaller searches, reads the sources and returns a cited report, or the evidence alone if no model is set up."
        },
        {
          "name": "agent",
          "kind": "reads",
          "purpose": "Plans and runs a whole gathering job from a plain-language request, with a step log and a time budget."
        },
        {
          "name": "diff",
          "kind": "reads",
          "purpose": "Shows what changed between two versions of a page or two pieces of markdown."
        },
        {
          "name": "watch",
          "kind": "changes",
          "purpose": "Keeps an eye on a URL and reports changes, optionally to a webhook. Watches survive restarts."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/wigolo.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "tradingview",
      "name": "TradingView MCP",
      "url": "https://mcpshelf.co/servers/tradingview",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Prices, indicators, screeners and backtests for stocks, crypto and forex, no account needed.",
      "description": "This open source Python server answers market questions with public data: TradingView's screener and technical ratings, Yahoo Finance prices, and optional news sentiment. The model can scan an exchange for top movers or volume breakouts, run a multi-timeframe read on a symbol, and backtest one of nine simple strategies, including a walk-forward test that warns when a strategy only fits the past.\n\nIt is an independent project, not made by TradingView, and it never signs in to a TradingView account. The author also sells a hosted copy called TradingMCP; the self-hosted server here is free under the MIT licence. Nothing it says is financial advice.",
      "good_for": [
        "A quick technical read on a stock or coin from a chat",
        "Screening an exchange for gainers, losers or unusual volume",
        "Trying a simple trading rule on past data before taking it seriously"
      ],
      "needs": [
        "uv, with Python 3.10 to 3.13 (3.14 is not supported yet)",
        "Optional: a free Marketaux key for the news and sentiment tools"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "--from",
            "tradingview-mcp-server",
            "tradingview-mcp"
          ]
        },
        "setup_steps": null,
        "note": "Add \"MARKETAUX_API_TOKEN\" in env to switch on financial_news and market_sentiment. Claude Desktop on a Mac often needs the full path to uvx.",
        "remote_url": "https://mcp.tradingmcp.ai/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 37 tools."
      },
      "package_note": "The project is Python only: the real package is tradingview-mcp-server on PyPI. The author warns that copies under other accounts add an npm package that installs malware, so avoid any npm version.",
      "github": "https://github.com/atilaahmettaner/tradingview-mcp",
      "stars": 5142,
      "weekly_downloads": null,
      "last_commit": "2026-10-25",
      "logo": "https://mcpshelf.co/logos/tradingview.webp",
      "maker": "Atilla Ahmet Taner, an independent developer (not TradingView Inc.)",
      "package": {
        "registry": "pypi",
        "name": "tradingview-mcp-server",
        "version": "0.8.1",
        "released": "2026-08-24",
        "licence": "MIT",
        "url": "https://pypi.org/project/tradingview-mcp-server/"
      },
      "tools": [
        {
          "name": "top_gainers",
          "kind": "reads",
          "purpose": "Lists the biggest risers on an exchange over a timeframe, with Bollinger Band context."
        },
        {
          "name": "top_losers",
          "kind": "reads",
          "purpose": "Lists the biggest fallers on an exchange."
        },
        {
          "name": "bollinger_scan",
          "kind": "reads",
          "purpose": "Scans an exchange for tight Bollinger Bands, a common sign that a big move may follow."
        },
        {
          "name": "rating_filter",
          "kind": "reads",
          "purpose": "Filters symbols by their Bollinger Band rating."
        },
        {
          "name": "coin_analysis",
          "kind": "reads",
          "purpose": "Full technical read on one coin or stock: indicators, ratings and levels."
        },
        {
          "name": "consecutive_candles_scan",
          "kind": "reads",
          "purpose": "Finds symbols with several rising or falling candles in a row."
        },
        {
          "name": "advanced_candle_pattern",
          "kind": "reads",
          "purpose": "Looks for candle patterns across several timeframes."
        },
        {
          "name": "volume_breakout_scanner",
          "kind": "reads",
          "purpose": "Finds symbols breaking out on both price and volume."
        },
        {
          "name": "volume_confirmation_analysis",
          "kind": "reads",
          "purpose": "Checks whether volume backs up the recent move on one symbol."
        },
        {
          "name": "smart_volume_scanner",
          "kind": "reads",
          "purpose": "Combines volume spikes with technical filters to shortlist symbols."
        },
        {
          "name": "multi_agent_analysis",
          "kind": "reads",
          "purpose": "Has a technical, a sentiment and a risk view argue over one symbol and reports their verdict."
        },
        {
          "name": "egx_market_overview",
          "kind": "reads",
          "purpose": "An overview of the Egyptian Exchange."
        },
        {
          "name": "egx_sector_scan",
          "kind": "reads",
          "purpose": "Egyptian stocks grouped by sector."
        },
        {
          "name": "egx_sector_scanner",
          "kind": "reads",
          "purpose": "Which Egyptian sectors are strong or weak, with top picks."
        },
        {
          "name": "egx_index_analysis",
          "kind": "reads",
          "purpose": "How the members of an Egyptian index are doing."
        },
        {
          "name": "egx_stock_screener",
          "kind": "reads",
          "purpose": "Ranks Egyptian stocks by setup strength."
        },
        {
          "name": "egx_trade_plan",
          "kind": "reads",
          "purpose": "A full trade plan with entries, stops and targets for one Egyptian stock."
        },
        {
          "name": "egx_fibonacci_retracement",
          "kind": "reads",
          "purpose": "Fibonacci levels for an Egyptian stock."
        },
        {
          "name": "multi_timeframe_analysis",
          "kind": "reads",
          "purpose": "Checks whether weekly, daily, 4-hour, hourly and 15-minute signals agree."
        },
        {
          "name": "market_sentiment",
          "kind": "reads",
          "purpose": "News sentiment for a stock or coin, from Marketaux. Needs a key."
        },
        {
          "name": "financial_news",
          "kind": "reads",
          "purpose": "Recent market headlines, filtered by symbol if you like. Needs a Marketaux key."
        },
        {
          "name": "combined_analysis",
          "kind": "reads",
          "purpose": "Technical analysis, news sentiment and headlines for one symbol in a single call."
        },
        {
          "name": "backtest_strategy",
          "kind": "reads",
          "purpose": "Tests one of nine rule-based strategies on past prices and reports return, drawdown, Sharpe ratio and win rate."
        },
        {
          "name": "compare_strategies",
          "kind": "reads",
          "purpose": "Runs all nine strategies on one symbol and ranks them."
        },
        {
          "name": "walk_forward_backtest_strategy",
          "kind": "reads",
          "purpose": "Tests a strategy on data it was not tuned on and flags overfitting."
        },
        {
          "name": "yahoo_price",
          "kind": "reads",
          "purpose": "A live quote from Yahoo Finance for a stock, coin, ETF or index."
        },
        {
          "name": "market_snapshot",
          "kind": "reads",
          "purpose": "A quick view of major indices, top coins, currencies and key ETFs."
        },
        {
          "name": "bitcoin_market_pulse",
          "kind": "reads",
          "purpose": "Bitcoin price, dominance and total crypto market cap with a risk note."
        },
        {
          "name": "stock_extended_hours",
          "kind": "reads",
          "purpose": "Pre-market and after-hours prices for a US stock."
        },
        {
          "name": "stock_options_chain",
          "kind": "reads",
          "purpose": "The calls and puts for one US stock and expiry."
        },
        {
          "name": "stock_options_unusual_activity",
          "kind": "reads",
          "purpose": "Option strikes with unusually high volume against open interest."
        },
        {
          "name": "futures_market_overview",
          "kind": "reads",
          "purpose": "The most traded futures contracts, by category."
        },
        {
          "name": "futures_top_movers",
          "kind": "reads",
          "purpose": "Futures with the biggest moves today."
        },
        {
          "name": "futures_category_snapshot",
          "kind": "reads",
          "purpose": "Quotes for the main contracts in one category, such as energy or metals."
        },
        {
          "name": "futures_watchlist",
          "kind": "reads",
          "purpose": "The list of well-known futures symbols it understands, by category."
        },
        {
          "name": "stock_screener",
          "kind": "reads",
          "purpose": "Screens stocks by share type, such as common or preferred."
        },
        {
          "name": "stock_prices",
          "kind": "reads",
          "purpose": "Price and daily change for a list of exchange-prefixed tickers."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/tradingview.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "obsidian",
      "name": "Obsidian MCP",
      "url": "https://mcpshelf.co/servers/obsidian",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Search, read and edit the notes in your Obsidian vault.",
      "description": "This server reaches your vault through the Local REST API community plugin, so Obsidian has to be open while you use it. The model can list folders, search across every note, read files, append text, and insert text under a particular heading, block or frontmatter field without rewriting the whole note.\n\nIt can also delete files and folders. Keep the vault synced or backed up, and tell the assistant to use Obsidian at the start of a chat, because the author notes it then reaches for the tools reliably.",
      "good_for": [
        "Summarising meeting notes and saving the summary as a new note",
        "Finding every note that mentions a project or a person",
        "Appending tasks or log entries to a running note"
      ],
      "needs": [
        "Obsidian with the Local REST API community plugin enabled",
        "The API key from that plugin",
        "uv (Python 3.11 or newer)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "mcp-obsidian"
          ],
          "env": {
            "OBSIDIAN_API_KEY": "YOUR_LOCAL_REST_API_KEY",
            "OBSIDIAN_HOST": "127.0.0.1",
            "OBSIDIAN_PORT": "27124"
          }
        },
        "setup_steps": [
          "In Obsidian, open Settings → Community plugins, install Local REST API and enable it.",
          "Copy the API key from the plugin's settings into OBSIDIAN_API_KEY.",
          "Keep Obsidian open while you use the server."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 15 tools."
      },
      "package_note": "The shared database gave \"npx mcp-obsidian\", an npm package by someone else. This project publishes mcp-obsidian on PyPI and runs with uvx.",
      "github": "https://github.com/MarkusPfundstein/mcp-obsidian",
      "stars": 4497,
      "weekly_downloads": 4965,
      "last_commit": "2026-08-31",
      "logo": "https://mcpshelf.co/logos/obsidian.webp",
      "maker": "Markus Pfundstein, an independent developer",
      "package": {
        "registry": "pypi",
        "name": "mcp-obsidian",
        "version": "0.2.3",
        "released": "2026-08-20",
        "licence": null,
        "url": "https://pypi.org/project/mcp-obsidian/"
      },
      "tools": [
        {
          "name": "obsidian_list_files_in_dir",
          "kind": "changes",
          "purpose": "Lists the files and folders inside one folder."
        },
        {
          "name": "obsidian_list_files_in_vault",
          "kind": "changes",
          "purpose": "Lists the files and folders at the top of the vault."
        },
        {
          "name": "obsidian_get_file_contents",
          "kind": "changes",
          "purpose": "Reads one note in full."
        },
        {
          "name": "obsidian_simple_search",
          "kind": "changes",
          "purpose": "Finds notes that contain a piece of text, with the surrounding context."
        },
        {
          "name": "obsidian_patch_content",
          "kind": "changes",
          "purpose": "Inserts or replaces text under a heading, at a block reference or in a frontmatter field."
        },
        {
          "name": "obsidian_append_content",
          "kind": "changes",
          "purpose": "Adds text to the end of a note, creating it if it does not exist."
        },
        {
          "name": "obsidian_put_content",
          "kind": "changes",
          "purpose": "Creates a note or replaces a whole note's text. The old text is gone."
        },
        {
          "name": "obsidian_delete_file",
          "kind": "changes",
          "purpose": "Deletes a note or a folder."
        },
        {
          "name": "obsidian_complex_search",
          "kind": "changes",
          "purpose": "Searches with a JsonLogic query, including glob and regular-expression matches on paths and content."
        },
        {
          "name": "obsidian_search_by_tag",
          "kind": "changes",
          "purpose": "Finds every note with a tag, from frontmatter or inline #tags."
        },
        {
          "name": "obsidian_get_frontmatter",
          "kind": "changes",
          "purpose": "Returns only a note's YAML frontmatter, which is lighter when you just need tags or dates."
        },
        {
          "name": "obsidian_batch_get_file_contents",
          "kind": "changes",
          "purpose": "Reads several notes in one call, each under its own header."
        },
        {
          "name": "obsidian_get_periodic_note",
          "kind": "changes",
          "purpose": "Opens the current daily, weekly, monthly, quarterly or yearly note."
        },
        {
          "name": "obsidian_get_recent_periodic_notes",
          "kind": "changes",
          "purpose": "Lists the most recent periodic notes of one type."
        },
        {
          "name": "obsidian_get_recent_changes",
          "kind": "changes",
          "purpose": "Lists the notes changed most recently."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/obsidian.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "cloudflare",
      "name": "Cloudflare MCP Servers",
      "url": "https://mcpshelf.co/servers/cloudflare",
      "category": "Cloud and operations",
      "category_slug": "cloud-and-ops",
      "summary": "Cloudflare's own hosted servers, starting with a docs search that needs no sign-in.",
      "description": "Cloudflare runs a family of remote MCP servers, each at its own address and each signing in to your account with OAuth where it needs to. The documentation server we list below is the simplest: it searches the current Cloudflare docs and needs no account. Others fetch and screenshot pages through Browser Run, start a sandboxed container for running code, read the Cloudflare blog, and check Zero Trust and SaaS settings.\n\nFor broad control of an account, Cloudflare now recommends a separate server at mcp.cloudflare.com, which covers its whole API through code execution. Several older single-product servers, such as Workers Bindings and DNS Analytics, are deprecated in its favour.",
      "good_for": [
        "Correct, current answers about Workers, R2, D1 and other Cloudflare products",
        "Fetching or screenshotting a page through Cloudflare instead of your own browser",
        "A throwaway container where the model can run code"
      ],
      "needs": [
        "A client that connects to remote servers by URL, or npx mcp-remote",
        "A Cloudflare account for every server except docs and blog"
      ],
      "install": {
        "config": {
          "url": "https://docs.mcp.cloudflare.com/mcp"
        },
        "setup_steps": null,
        "note": "Swap the address for another server in the family, such as https://browser.mcp.cloudflare.com/mcp or https://containers.mcp.cloudflare.com/mcp. The old /sse addresses no longer work.",
        "remote_url": "https://mcp.cloudflare.com/mcp"
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": "Nothing to install: Cloudflare hosts every server in this repository. The shared database also listed \"npx mcp-remote\", which is only a bridge for clients that cannot use a URL.",
      "github": "https://github.com/cloudflare/mcp-server-cloudflare",
      "stars": 4418,
      "weekly_downloads": null,
      "last_commit": "2026-10-22",
      "logo": "https://mcpshelf.co/logos/cloudflare.webp",
      "maker": "Cloudflare",
      "package": null,
      "tools": [
        {
          "name": "search_cloudflare_documentation",
          "kind": "reads",
          "purpose": "Searches the current Cloudflare developer docs and returns the closest matching passages with their links."
        },
        {
          "name": "migrate_pages_to_workers_guide",
          "kind": "reads",
          "purpose": "Hands the model Cloudflare's guide for moving a Pages project to Workers, to read before it starts."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/cloudflare.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "antv-chart",
      "name": "AntV Chart MCP",
      "url": "https://mcpshelf.co/servers/antv-chart",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Turns numbers into line, bar, sankey, mind-map and 20-odd other charts.",
      "description": "AntV is Ant Group's open source visualisation library, and this server gives an assistant one tool per chart type: line, area, bar, pie, scatter, histogram, boxplot, sankey, funnel, radar, treemap, word cloud, Venn, fishbone, flowchart, mind map, org chart, network graph, pivot table and more. Each call returns a link to the rendered chart.\n\nBy default the chart is drawn by an AntV service run by Alipay, so the data you chart leaves your machine. For anything sensitive, deploy the rendering service yourself and point VIS_REQUEST_SERVER at it. The three map tools use AMap and only cover China.",
      "good_for": [
        "Quick charts from a table during data analysis in chat",
        "Diagrams such as mind maps, flowcharts and fishbone charts",
        "Adding visuals to reports built by an agent"
      ],
      "needs": [
        "Node.js 18 or newer",
        "Nothing else: no account or key"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@antv/mcp-server-chart"
          ]
        },
        "setup_steps": null,
        "note": "Add \"DISABLED_TOOLS\": \"generate_district_map,generate_path_map,generate_pin_map\" in env to drop the China-only map tools and save context.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 27 tools."
      },
      "package_note": null,
      "github": "https://github.com/antvis/mcp-server-chart",
      "stars": 4404,
      "weekly_downloads": 2193,
      "last_commit": "2026-08-27",
      "logo": "https://mcpshelf.co/logos/antv-chart.webp",
      "maker": "AntV, the visualisation team at Ant Group",
      "package": {
        "registry": "npm",
        "name": "@antv/mcp-server-chart",
        "version": "0.9.10",
        "released": "2026-02-25",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@antv/mcp-server-chart"
      },
      "tools": [
        {
          "name": "generate_area_chart",
          "kind": "reads",
          "purpose": "An area chart for trends where the size of the total matters."
        },
        {
          "name": "generate_bar_chart",
          "kind": "reads",
          "purpose": "Horizontal bars for comparing categories with long names."
        },
        {
          "name": "generate_boxplot_chart",
          "kind": "reads",
          "purpose": "Box plots comparing distributions across groups."
        },
        {
          "name": "generate_column_chart",
          "kind": "reads",
          "purpose": "Vertical bars for comparing categories."
        },
        {
          "name": "generate_district_map",
          "kind": "reads",
          "purpose": "Shades administrative regions by value. China only."
        },
        {
          "name": "generate_dual_axes_chart",
          "kind": "reads",
          "purpose": "Two series with different units on one chart, such as bars and a line."
        },
        {
          "name": "generate_fishbone_diagram",
          "kind": "reads",
          "purpose": "A fishbone (Ishikawa) diagram of causes behind a problem."
        },
        {
          "name": "generate_flow_diagram",
          "kind": "reads",
          "purpose": "A flowchart of steps and decisions."
        },
        {
          "name": "generate_funnel_chart",
          "kind": "reads",
          "purpose": "A funnel showing drop-off between stages."
        },
        {
          "name": "generate_histogram_chart",
          "kind": "reads",
          "purpose": "A histogram showing how values are spread across ranges."
        },
        {
          "name": "generate_line_chart",
          "kind": "reads",
          "purpose": "A line chart for trends over time."
        },
        {
          "name": "generate_liquid_chart",
          "kind": "reads",
          "purpose": "A single percentage drawn as a filling bubble."
        },
        {
          "name": "generate_mind_map",
          "kind": "reads",
          "purpose": "A mind map branching out from one central idea."
        },
        {
          "name": "generate_network_graph",
          "kind": "reads",
          "purpose": "Nodes and links showing how things are connected."
        },
        {
          "name": "generate_organization_chart",
          "kind": "reads",
          "purpose": "An org chart of teams and reporting lines."
        },
        {
          "name": "generate_path_map",
          "kind": "reads",
          "purpose": "Draws a route between places. China only."
        },
        {
          "name": "generate_pie_chart",
          "kind": "reads",
          "purpose": "A pie or donut for shares of a whole."
        },
        {
          "name": "generate_pin_map",
          "kind": "reads",
          "purpose": "Puts points of interest on a map. China only."
        },
        {
          "name": "generate_radar_chart",
          "kind": "reads",
          "purpose": "A radar chart comparing items across four or more measures."
        },
        {
          "name": "generate_sankey_chart",
          "kind": "reads",
          "purpose": "A Sankey diagram of flows between stages or categories."
        },
        {
          "name": "generate_scatter_chart",
          "kind": "reads",
          "purpose": "A scatter plot for the relationship between two numbers."
        },
        {
          "name": "generate_treemap_chart",
          "kind": "reads",
          "purpose": "Nested rectangles sized by value, for hierarchies."
        },
        {
          "name": "generate_venn_chart",
          "kind": "reads",
          "purpose": "A Venn diagram of overlapping sets."
        },
        {
          "name": "generate_violin_chart",
          "kind": "reads",
          "purpose": "Violin plots, a fuller view of distributions than box plots."
        },
        {
          "name": "generate_waterfall_chart",
          "kind": "reads",
          "purpose": "A waterfall showing how gains and losses add up to a total."
        },
        {
          "name": "generate_word_cloud_chart",
          "kind": "reads",
          "purpose": "A word cloud sized by frequency or weight."
        },
        {
          "name": "generate_spreadsheet",
          "kind": "reads",
          "purpose": "A table, or a pivot table when rows and values are given."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/antv-chart.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "container-use",
      "name": "Container Use",
      "url": "https://mcpshelf.co/servers/container-use",
      "category": "Agent helpers and desktop control",
      "category_slug": "agents-and-automation",
      "summary": "Each coding agent gets its own container and git branch, so several can work at once.",
      "description": "Container Use comes from Dagger, the team behind the CI engine. Instead of letting an agent edit your working copy directly, each task runs in a fresh container on its own git branch. You can run several agents side by side, read the full log of commands each one ran, open a terminal inside an agent's environment when it gets stuck, and review the result with an ordinary git checkout.\n\nIt is a command line tool that also speaks MCP, and Dagger still marks it experimental. It needs Docker or another container runtime that Dagger supports.",
      "good_for": [
        "Running two or three coding agents in parallel without them colliding",
        "Letting an agent try risky changes you can throw away",
        "Seeing exactly what an agent ran, not just what it reports"
      ],
      "needs": [
        "macOS or Linux (Windows is not supported)",
        "Docker (or another runtime Dagger supports)",
        "git"
      ],
      "install": {
        "config": {
          "command": "container-use",
          "args": [
            "stdio"
          ]
        },
        "setup_steps": [
          "Install the CLI: brew install dagger/tap/container-use on macOS, or the install script from the repository on Linux.",
          "In Claude Code, from your repository: claude mcp add container-use -- container-use stdio. Other clients use the config below.",
          "Optional: append the project's agent rules file to your CLAUDE.md or AGENTS.md so the agent always works inside an environment."
        ],
        "note": "The shorter cu command works too: cu stdio.",
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": null,
      "github": "https://github.com/dagger/container-use",
      "stars": 4078,
      "weekly_downloads": null,
      "last_commit": "2026-09-21",
      "logo": "https://mcpshelf.co/logos/container-use.webp",
      "maker": "Dagger (dagger/container-use)",
      "package": null,
      "tools": [
        {
          "name": "environment_open",
          "kind": "changes",
          "purpose": "Reopens an environment created earlier."
        },
        {
          "name": "environment_create",
          "kind": "changes",
          "purpose": "Starts a new environment from your repository: a container plus its own git branch, built from a base image and your setup commands."
        },
        {
          "name": "environment_update_metadata",
          "kind": "changes",
          "purpose": "Changes an environment's title, the note that says what work it holds."
        },
        {
          "name": "environment_config",
          "kind": "changes",
          "purpose": "Changes the base image and setup commands for an environment."
        },
        {
          "name": "environment_list",
          "kind": "changes",
          "purpose": "Lists the environments that exist for the repository."
        },
        {
          "name": "environment_run_cmd",
          "kind": "runs",
          "purpose": "Runs a shell command in a fresh container inside the environment, in the background if needed, and can expose ports."
        },
        {
          "name": "environment_file_read",
          "kind": "changes",
          "purpose": "Reads a file in the environment, whole or by line range."
        },
        {
          "name": "environment_file_list",
          "kind": "changes",
          "purpose": "Lists a folder in the environment."
        },
        {
          "name": "environment_file_edit",
          "kind": "changes",
          "purpose": "Replaces a piece of text in a file in the environment."
        },
        {
          "name": "environment_file_write",
          "kind": "changes",
          "purpose": "Writes a whole file in the environment."
        },
        {
          "name": "environment_file_delete",
          "kind": "changes",
          "purpose": "Deletes a file in the environment."
        },
        {
          "name": "environment_checkpoint",
          "kind": "changes",
          "purpose": "Saves the environment's current state as a container image."
        },
        {
          "name": "environment_add_service",
          "kind": "changes",
          "purpose": "Adds a side container, such as a database or a cache, that the environment can reach."
        },
        {
          "name": "environment_log",
          "kind": "changes",
          "purpose": "Shows the commits the agent made and the commands it ran."
        },
        {
          "name": "environment_diff",
          "kind": "changes",
          "purpose": "Shows everything the agent changed since the environment was created, as one diff."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/container-use.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "davinci-resolve",
      "name": "DaVinci Resolve MCP",
      "url": "https://mcpshelf.co/servers/davinci-resolve",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Drives DaVinci Resolve through its scripting API: timelines, media, markers and renders.",
      "description": "This community server connects an assistant to a running copy of DaVinci Resolve through Blackmagic's official scripting API. It can organise the media pool, build and edit timelines, add markers, work with colour and Fusion, manage projects and queue renders. The default mode groups related actions behind about 37 tools to keep context small; a full mode exposes one tool per API method, nearly 400 of them.\n\nExternal scripting is a Studio feature. On the free edition it works only through a small bridge script started inside Resolve, and only up to Resolve 21.0. An installer writes the client configs for you, and a separate Node server can edit .drp project files with Resolve closed.",
      "good_for": [
        "Organising and tagging large amounts of footage",
        "Repetitive timeline jobs such as markers, renames and render queues",
        "Checking project settings and media without clicking through menus"
      ],
      "needs": [
        "DaVinci Resolve Studio 18.5 or newer (the free edition only through the in-app bridge)",
        "Python 3.10 or newer, 64-bit",
        "Node.js 20.9 or newer for the npx installer"
      ],
      "install": {
        "config": null,
        "setup_steps": [
          "Open Resolve and set Preferences → General → External scripting using to Local.",
          "Run npx davinci-resolve-mcp setup. It installs a managed copy, creates its Python environment and writes the config for the clients it finds, including Claude Desktop, Claude Code and Cursor.",
          "Restart your client with Resolve open. If it cannot connect, run python3 scripts/doctor.py from the installed copy for a list of fixes."
        ],
        "note": null,
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we read its tools from the source code instead of running this config."
      },
      "package_note": "davinci-resolve-mcp on npm is a launcher by the same author. It installs the Python server; the MCP config then points at that environment, not at npx.",
      "github": "https://github.com/samuelgursky/davinci-resolve-mcp",
      "stars": 3779,
      "weekly_downloads": 3979,
      "last_commit": "2026-10-23",
      "logo": "https://mcpshelf.co/logos/davinci-resolve.webp",
      "maker": "Samuel Gursky and contributors, independent of Blackmagic Design",
      "package": {
        "registry": "npm",
        "name": "davinci-resolve-mcp",
        "version": "4.15.3",
        "released": "2026-10-23",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/davinci-resolve-mcp"
      },
      "tools": [
        {
          "name": "setup",
          "kind": "changes",
          "purpose": "Reads and sets the server's own defaults, such as dry runs and how careful to be with destructive actions."
        },
        {
          "name": "resolve_control",
          "kind": "reads",
          "purpose": "App-level jobs: check for Studio, launch Resolve, switch pages, follow long background jobs."
        },
        {
          "name": "layout_presets",
          "kind": "changes",
          "purpose": "Saves, loads, imports and exports Resolve's UI layout presets."
        },
        {
          "name": "render_presets",
          "kind": "changes",
          "purpose": "Imports and exports render and burn-in presets."
        },
        {
          "name": "project_manager",
          "kind": "changes",
          "purpose": "Lists, creates, opens, saves and archives projects."
        },
        {
          "name": "project_manager_folders",
          "kind": "changes",
          "purpose": "Moves around and manages folders in the Project Manager."
        },
        {
          "name": "project_manager_cloud",
          "kind": "changes",
          "purpose": "Creates, loads and restores Blackmagic Cloud projects."
        },
        {
          "name": "project_manager_database",
          "kind": "changes",
          "purpose": "Shows and switches the project database."
        },
        {
          "name": "project_settings",
          "kind": "changes",
          "purpose": "Reads and changes project settings, the project name and colour groups."
        },
        {
          "name": "render",
          "kind": "changes",
          "purpose": "Builds render jobs from presets, formats and codecs, starts rendering and checks progress."
        },
        {
          "name": "media_storage",
          "kind": "changes",
          "purpose": "Browses drives and folders and imports files into the Media Pool."
        },
        {
          "name": "media_pool",
          "kind": "changes",
          "purpose": "Creates bins and timelines, moves and imports clips, and exports metadata."
        },
        {
          "name": "folder",
          "kind": "changes",
          "purpose": "Works on one Media Pool bin, addressed by its path."
        },
        {
          "name": "media_pool_item",
          "kind": "changes",
          "purpose": "Reads and sets a clip's name, metadata, properties and proxy links."
        },
        {
          "name": "media_pool_item_markers",
          "kind": "changes",
          "purpose": "Adds, reads and removes markers and flags on Media Pool clips."
        },
        {
          "name": "media_analysis",
          "kind": "changes",
          "purpose": "Analyses footage (shots, faces, speech, audio levels) and writes the results back as clip metadata after you approve them."
        },
        {
          "name": "timeline_versioning",
          "kind": "changes",
          "purpose": "Keeps automatic backups of a timeline before risky edits and rolls back to them."
        },
        {
          "name": "edit_engine",
          "kind": "changes",
          "purpose": "Plans assemblies, tightening passes and clip swaps from the analysis, shows the plan, then carries it out once confirmed."
        },
        {
          "name": "timeline",
          "kind": "changes",
          "purpose": "Adds and removes tracks and clips, imports and exports timelines, and inserts generators and titles."
        },
        {
          "name": "timeline_markers",
          "kind": "changes",
          "purpose": "Adds and reads markers on the timeline and moves the playhead."
        },
        {
          "name": "timeline_frame",
          "kind": "changes",
          "purpose": "Grabs the current frame as an image so the model can check framing, titles or a grade."
        },
        {
          "name": "timeline_ai",
          "kind": "changes",
          "purpose": "Starts Resolve's AI jobs on the timeline, such as auto subtitles and scene cut detection."
        },
        {
          "name": "timeline_item",
          "kind": "changes",
          "purpose": "Changes a clip's transform, speed, keyframes and properties on the timeline."
        },
        {
          "name": "timeline_item_markers",
          "kind": "changes",
          "purpose": "Markers, flags and clip colour on timeline clips."
        },
        {
          "name": "timeline_item_fusion",
          "kind": "changes",
          "purpose": "Adds, loads, exports and removes Fusion compositions on a clip."
        },
        {
          "name": "timeline_item_color",
          "kind": "changes",
          "purpose": "Grades a clip: versions, LUTs, CDL values, node caches and matching tools."
        },
        {
          "name": "timeline_item_takes",
          "kind": "changes",
          "purpose": "Adds and switches takes on a timeline clip."
        },
        {
          "name": "gallery",
          "kind": "changes",
          "purpose": "Manages Gallery albums and PowerGrade albums."
        },
        {
          "name": "gallery_stills",
          "kind": "changes",
          "purpose": "Grabs, labels, imports and exports stills."
        },
        {
          "name": "graph",
          "kind": "changes",
          "purpose": "Reads and changes colour node graphs: node LUTs, labels and enabled state."
        },
        {
          "name": "color_group",
          "kind": "changes",
          "purpose": "Creates colour groups and works on their pre- and post-clip node graphs."
        },
        {
          "name": "fusion_comp",
          "kind": "changes",
          "purpose": "Builds and edits the node graph inside a Fusion composition."
        },
        {
          "name": "fuse_plugin",
          "kind": "changes",
          "purpose": "Writes and installs Fusion Fuse plugins."
        },
        {
          "name": "lut",
          "kind": "changes",
          "purpose": "Lists, installs and removes LUT files."
        },
        {
          "name": "dctl",
          "kind": "changes",
          "purpose": "Writes and installs DCTL colour shaders."
        },
        {
          "name": "script_plugin",
          "kind": "runs",
          "purpose": "Writes and installs scripts for Resolve's Workspace → Scripts menu."
        },
        {
          "name": "knowledge",
          "kind": "changes",
          "purpose": "Editing, colour and audio guidance the model should read before a creative or destructive step."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/davinci-resolve.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "dbhub",
      "name": "DBHub",
      "url": "https://mcpshelf.co/servers/dbhub",
      "category": "Databases and data",
      "category_slug": "databases",
      "summary": "One small server for Postgres, MySQL, MariaDB, SQL Server, Oracle and SQLite.",
      "description": "DBHub is Bytebase's deliberately small database server. By default it shows the model just two tools, one to run SQL and one to search the schema, so it costs far less context than servers with dozens of tools. A single process can hold connections to several databases at once through a TOML file, and you can add your own named, parameterised queries as extra tools.\n\nFor safety its config file can make a tool read-only, cap the rows returned and time out slow queries, and it can reach databases through an SSH tunnel. It also has a small web workbench for trying queries by hand.",
      "good_for": [
        "Schema questions and query writing in a coding agent",
        "One server for a project that uses more than one kind of database",
        "Read-only access for people who should look but not change"
      ],
      "needs": [
        "Node.js 22.5 or newer",
        "A connection string (DSN) for your database"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@bytebase/dbhub@latest",
            "--transport",
            "stdio",
            "--dsn",
            "postgres://user:password@localhost:5432/dbname"
          ]
        },
        "setup_steps": null,
        "note": "Use \"--demo\" in place of --dsn to try it on a bundled sample database. Read-only mode, row limits and several databases are set in a dbhub.toml file passed with --config instead of --dsn.",
        "remote_url": null
      },
      "check": {
        "result": "needs-setup",
        "label": "Needs your setup first",
        "detail": "It needs something our Linux test machine does not have (an account, a desktop app, a Mac or a running service), so on 27 Oct 2026 we listed its tools from its package instead of running this config."
      },
      "package_note": null,
      "github": "https://github.com/bytebase/dbhub",
      "stars": 3725,
      "weekly_downloads": 17149,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/dbhub.webp",
      "maker": "Bytebase",
      "package": {
        "registry": "npm",
        "name": "@bytebase/dbhub",
        "version": "1.5.0",
        "released": "2026-10-09",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@bytebase/dbhub"
      },
      "tools": [
        {
          "name": "execute_sql",
          "kind": "runs",
          "purpose": "Runs SQL against a connected database, with transactions, row limits and read-only checks applied."
        },
        {
          "name": "search_objects",
          "kind": "reads",
          "purpose": "Searches schemas, tables, columns, indexes and procedures, starting with names and going into detail only when asked."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/dbhub.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "grafana",
      "name": "Grafana MCP",
      "url": "https://mcpshelf.co/servers/grafana",
      "category": "Cloud and operations",
      "category_slug": "cloud-and-ops",
      "summary": "Dashboards, metrics, logs, alerts and incidents from your Grafana, in one server.",
      "description": "Grafana Labs' own server works with a self-hosted Grafana or Grafana Cloud. The model can search and summarise dashboards, read panel queries, run PromQL against Prometheus and LogQL against Loki, search traces in Tempo, and read alert rules, incidents, OnCall schedules and annotations. Tools for ClickHouse, CloudWatch, Elasticsearch and other datasources are there too, switched off until you ask for them.\n\nIt can also change things: edit dashboards, create folders and alert rules, open incidents. Start it with --disable-write and a service account that only has viewer rights unless you want that. It sends anonymous usage counts to Grafana Labs unless you turn them off.",
      "good_for": [
        "Asking why a service is slow and letting the model check metrics and logs",
        "Finding the right dashboard in a large Grafana",
        "Summarising firing alerts and recent incidents"
      ],
      "needs": [
        "Grafana 9.0 or newer, self-hosted or Grafana Cloud",
        "A service account token",
        "uv (or the Docker image or Go binary)"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "mcp-grafana",
            "--disable-write"
          ],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",
            "GRAFANA_SERVICE_ACCOUNT_TOKEN": "YOUR_SERVICE_ACCOUNT_TOKEN"
          }
        },
        "setup_steps": null,
        "note": "We publish it in read-only mode; drop \"--disable-write\" to allow edits. Add \"GRAFANA_USAGE_STATS\": \"disabled\" in env to stop usage reporting. For Grafana Cloud, set GRAFANA_URL to your stack, such as https://you.grafana.net.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 62 tools."
      },
      "package_note": null,
      "github": "https://github.com/grafana/mcp-grafana",
      "stars": 3604,
      "weekly_downloads": 125115,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/grafana.webp",
      "maker": "Grafana Labs",
      "package": {
        "registry": "pypi",
        "name": "mcp-grafana",
        "version": "2.1.1",
        "released": "2026-10-20",
        "licence": "Apache-2.0",
        "url": "https://pypi.org/project/mcp-grafana/"
      },
      "tools": [
        {
          "name": "alerting_manage_routing",
          "kind": "reads",
          "purpose": "Reads notification policies, contact points and timings."
        },
        {
          "name": "alerting_rules_read",
          "kind": "reads",
          "purpose": "Lists and inspects alert rules, with filters."
        },
        {
          "name": "alerting_silences_read",
          "kind": "reads",
          "purpose": "Lists active and expired silences."
        },
        {
          "name": "analyze_loki_labels",
          "kind": "reads",
          "purpose": "Audits a Loki label setup and points out labels that hurt query speed."
        },
        {
          "name": "check_datasources_health",
          "kind": "reads",
          "purpose": "Checks whether datasources are answering."
        },
        {
          "name": "diff_tempo_traces",
          "kind": "reads",
          "purpose": "Compares two traces span by span."
        },
        {
          "name": "generate_deeplink",
          "kind": "reads",
          "purpose": "Builds a link to a dashboard, panel or Explore view for you to open."
        },
        {
          "name": "get_alert_group",
          "kind": "reads",
          "purpose": "Details of one OnCall alert group."
        },
        {
          "name": "get_annotation_tags",
          "kind": "reads",
          "purpose": "Lists annotation tags."
        },
        {
          "name": "get_annotations",
          "kind": "reads",
          "purpose": "Annotations by dashboard, time range or tag."
        },
        {
          "name": "get_assertions",
          "kind": "reads",
          "purpose": "Assertion summaries for an entity from Grafana's knowledge graph."
        },
        {
          "name": "get_current_oncall_users",
          "kind": "reads",
          "purpose": "Who is on call now for a schedule."
        },
        {
          "name": "get_dashboard_by_uid",
          "kind": "reads",
          "purpose": "The complete dashboard JSON. Large dashboards can fill the context window."
        },
        {
          "name": "get_dashboard_panel_queries",
          "kind": "reads",
          "purpose": "Every panel's title, query and datasource on a dashboard."
        },
        {
          "name": "get_dashboard_property",
          "kind": "reads",
          "purpose": "Pulls out just part of a dashboard with a JSONPath expression."
        },
        {
          "name": "get_dashboard_summary",
          "kind": "reads",
          "purpose": "A compact overview of a dashboard: panels, variables and metadata, without the full JSON."
        },
        {
          "name": "get_datasource",
          "kind": "reads",
          "purpose": "Details of one datasource."
        },
        {
          "name": "get_doc",
          "kind": "reads",
          "purpose": "Reads one Grafana documentation page."
        },
        {
          "name": "get_incident",
          "kind": "reads",
          "purpose": "Full details of one incident."
        },
        {
          "name": "get_oncall_shift",
          "kind": "reads",
          "purpose": "Details of one OnCall shift."
        },
        {
          "name": "get_panel_image",
          "kind": "reads",
          "purpose": "Renders a panel, a dashboard or an Explore view as a PNG."
        },
        {
          "name": "get_plugin",
          "kind": "reads",
          "purpose": "Whether a plugin is installed, and its version."
        },
        {
          "name": "get_snapshot",
          "kind": "reads",
          "purpose": "Reads one snapshot and its dashboard."
        },
        {
          "name": "get_tempo_trace",
          "kind": "reads",
          "purpose": "Fetches one trace by ID."
        },
        {
          "name": "get_tempo_traceql_docs",
          "kind": "reads",
          "purpose": "Returns TraceQL reference notes with examples."
        },
        {
          "name": "grafana_api_request",
          "kind": "reads",
          "purpose": "Calls any Grafana API path with the server's credentials, for anything the other tools miss."
        },
        {
          "name": "list_alert_groups",
          "kind": "reads",
          "purpose": "Lists OnCall alert groups with filters."
        },
        {
          "name": "list_dashboard_versions",
          "kind": "reads",
          "purpose": "Saved versions of a dashboard with author, time and message."
        },
        {
          "name": "list_datasources",
          "kind": "reads",
          "purpose": "Lists the datasources Grafana is connected to."
        },
        {
          "name": "list_incident_custom_fields",
          "kind": "reads",
          "purpose": "The custom fields set up for incidents."
        },
        {
          "name": "list_incidents",
          "kind": "reads",
          "purpose": "Lists Grafana Incident incidents, active or resolved."
        },
        {
          "name": "list_loki_label_names",
          "kind": "reads",
          "purpose": "Lists log label names."
        },
        {
          "name": "list_loki_label_values",
          "kind": "reads",
          "purpose": "Lists the values of one log label."
        },
        {
          "name": "list_oncall_schedules",
          "kind": "reads",
          "purpose": "Lists OnCall schedules."
        },
        {
          "name": "list_oncall_teams",
          "kind": "reads",
          "purpose": "Lists OnCall teams."
        },
        {
          "name": "list_oncall_users",
          "kind": "reads",
          "purpose": "Lists OnCall users."
        },
        {
          "name": "list_prometheus_label_names",
          "kind": "reads",
          "purpose": "Lists label names for matching series."
        },
        {
          "name": "list_prometheus_label_values",
          "kind": "reads",
          "purpose": "Lists the values one label takes."
        },
        {
          "name": "list_prometheus_metric_metadata",
          "kind": "reads",
          "purpose": "Type, help text and unit for metrics."
        },
        {
          "name": "list_prometheus_metric_names",
          "kind": "reads",
          "purpose": "Lists metric names, filtered by a pattern."
        },
        {
          "name": "list_provisioning_repositories",
          "kind": "reads",
          "purpose": "Lists Git Sync and other provisioning sources."
        },
        {
          "name": "list_pyroscope_label_names",
          "kind": "reads",
          "purpose": "Lists profile label names."
        },
        {
          "name": "list_pyroscope_label_values",
          "kind": "reads",
          "purpose": "Lists the values of one profile label."
        },
        {
          "name": "list_pyroscope_profile_types",
          "kind": "reads",
          "purpose": "Lists the profile types a Pyroscope datasource holds."
        },
        {
          "name": "list_snapshots",
          "kind": "reads",
          "purpose": "Lists dashboard snapshots."
        },
        {
          "name": "list_tempo_attribute_names",
          "kind": "reads",
          "purpose": "Lists attribute names you can use in TraceQL."
        },
        {
          "name": "list_tempo_attribute_values",
          "kind": "reads",
          "purpose": "Lists the values of one trace attribute."
        },
        {
          "name": "query_loki_logs",
          "kind": "reads",
          "purpose": "Runs a LogQL query against Loki or VictoriaLogs and returns log lines or metrics."
        },
        {
          "name": "query_loki_patterns",
          "kind": "reads",
          "purpose": "Common log line patterns Loki has detected for a stream."
        },
        {
          "name": "query_loki_stats",
          "kind": "reads",
          "purpose": "Counts of streams, chunks and bytes for a selector, to size a query before running it."
        },
        {
          "name": "query_prometheus",
          "kind": "reads",
          "purpose": "Runs a PromQL query, instant or over a range, against Prometheus, Mimir, Thanos and similar."
        },
        {
          "name": "query_prometheus_histogram",
          "kind": "reads",
          "purpose": "Works out p50, p90, p95 or p99 from a histogram metric."
        },
        {
          "name": "query_pyroscope",
          "kind": "reads",
          "purpose": "Fetches profiles or profile metrics from Pyroscope."
        },
        {
          "name": "query_tempo_metrics",
          "kind": "reads",
          "purpose": "Computes metrics from traces with a TraceQL metrics query."
        },
        {
          "name": "search_dashboards",
          "kind": "reads",
          "purpose": "Finds dashboards by title, folder, tag or starred status."
        },
        {
          "name": "search_docs",
          "kind": "reads",
          "purpose": "Searches the Grafana documentation."
        },
        {
          "name": "search_folders",
          "kind": "reads",
          "purpose": "Finds folders by name."
        },
        {
          "name": "search_plugin_information",
          "kind": "reads",
          "purpose": "Searches the Grafana plugin catalogue."
        },
        {
          "name": "search_tempo_traces",
          "kind": "reads",
          "purpose": "Searches traces with TraceQL."
        },
        {
          "name": "suggest_loki_alloy_label_config",
          "kind": "reads",
          "purpose": "Writes an Alloy snippet that keeps only an approved set of labels."
        },
        {
          "name": "user_info",
          "kind": "reads",
          "purpose": "Who the server is signed in as."
        },
        {
          "name": "validate_provisioning_file",
          "kind": "reads",
          "purpose": "Dry-runs a provisioning file from a repository to catch errors."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/grafana.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "google-workspace",
      "name": "Google Workspace MCP",
      "url": "https://mcpshelf.co/servers/google-workspace",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Gmail, Drive, Calendar, Docs, Sheets and six more Google apps behind one server.",
      "description": "Taylor Wilsdon's server is the most complete community option for Google's apps. It covers Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script and Programmable Search, with well over a hundred tools in total. You sign in with an OAuth client from your own Google Cloud project, so tokens and scopes stay under your control and nothing is sent anywhere except Google's APIs.\n\nBecause loading every tool would swamp the context window, it ships in three tiers: core for everyday reading and writing, extended for management jobs, and complete for everything. You can also name the services you want, switch on a read-only mode, or run it as a shared HTTP server with per-user OAuth 2.1 for a whole team.",
      "good_for": [
        "Searching mail, drafting replies and filing messages with labels",
        "Finding, reading and editing Docs, Sheets and Slides",
        "Checking calendars and booking meetings"
      ],
      "needs": [
        "A Google Cloud project with the APIs you plan to use switched on",
        "An OAuth client ID and secret from that project",
        "uv, for uvx"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "workspace-mcp",
            "--tool-tier",
            "core"
          ],
          "env": {
            "GOOGLE_OAUTH_CLIENT_ID": "YOUR_CLIENT_ID",
            "GOOGLE_OAUTH_CLIENT_SECRET": "YOUR_CLIENT_SECRET"
          }
        },
        "setup_steps": null,
        "note": "Add \"--read-only\" to keep it from sending or changing anything, or \"--tools gmail drive calendar\" to load only some services. To add it to Claude as a custom connector, run it with \"--transport streamable-http\" and MCP_ENABLE_OAUTH21=true and connect to http://localhost:8000/mcp.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 43 tools."
      },
      "package_note": "The server is workspace-mcp on PyPI. Its author warns that \"workspace-cli\" on PyPI is an abandoned package by someone else; the real CLI comes with this repository.",
      "github": "https://github.com/taylorwilsdon/google_workspace_mcp",
      "stars": 3416,
      "weekly_downloads": 81666,
      "last_commit": "2026-10-25",
      "logo": "https://mcpshelf.co/logos/google-workspace.webp",
      "maker": "Taylor Wilsdon and contributors (taylorwilsdon/google_workspace_mcp)",
      "package": {
        "registry": "pypi",
        "name": "workspace-mcp",
        "version": "2.2.1",
        "released": "2026-10-26",
        "licence": "MIT",
        "url": "https://pypi.org/project/workspace-mcp/"
      },
      "tools": [
        {
          "name": "get_script_project",
          "kind": "reads",
          "purpose": "Reads an Apps Script project and its source files."
        },
        {
          "name": "manage_script_content",
          "kind": "runs",
          "purpose": "Replaces or merges the source files of an Apps Script project."
        },
        {
          "name": "run_script_function",
          "kind": "runs",
          "purpose": "Runs a function in a deployed Apps Script project."
        },
        {
          "name": "manage_script_project",
          "kind": "runs",
          "purpose": "Creates or deletes an Apps Script project."
        },
        {
          "name": "generate_trigger_code",
          "kind": "reads",
          "purpose": "Writes the Apps Script code you need to set up a time or event trigger, since the API cannot create one itself."
        },
        {
          "name": "list_calendars",
          "kind": "reads",
          "purpose": "Lists the calendars you can see."
        },
        {
          "name": "get_events",
          "kind": "reads",
          "purpose": "Fetches one event or the events in a time range, optionally matching a keyword."
        },
        {
          "name": "manage_event",
          "kind": "changes",
          "purpose": "Creates, updates or deletes an event, or answers an invitation."
        },
        {
          "name": "get_messages",
          "kind": "reads",
          "purpose": "Reads recent messages in a Google Chat space."
        },
        {
          "name": "send_message",
          "kind": "changes",
          "purpose": "Posts to a Google Chat space, or edits a message you sent."
        },
        {
          "name": "search_messages",
          "kind": "reads",
          "purpose": "Searches Google Chat messages by text or time."
        },
        {
          "name": "create_reaction",
          "kind": "changes",
          "purpose": "Adds an emoji reaction to a Chat message."
        },
        {
          "name": "list_contacts",
          "kind": "reads",
          "purpose": "Lists your Google contacts."
        },
        {
          "name": "get_contact",
          "kind": "reads",
          "purpose": "Returns the details of one contact."
        },
        {
          "name": "search_contacts",
          "kind": "reads",
          "purpose": "Finds contacts by name, email, phone number or other fields."
        },
        {
          "name": "manage_contact",
          "kind": "changes",
          "purpose": "Creates, updates or deletes a contact."
        },
        {
          "name": "get_doc_content",
          "kind": "reads",
          "purpose": "Reads a Google Doc, or the text of a Word file stored in Drive."
        },
        {
          "name": "create_doc",
          "kind": "changes",
          "purpose": "Creates a Google Doc with optional plain-text content."
        },
        {
          "name": "modify_doc_text",
          "kind": "changes",
          "purpose": "Inserts, replaces or formats text in a Doc."
        },
        {
          "name": "search_drive_files",
          "kind": "reads",
          "purpose": "Searches Drive, including shared drives, for files and folders."
        },
        {
          "name": "get_drive_file_content",
          "kind": "reads",
          "purpose": "Reads a Drive file as text: Docs, Sheets and Slides are exported, Office files are unpacked."
        },
        {
          "name": "get_drive_file_download_url",
          "kind": "reads",
          "purpose": "Downloads a Drive file, returning a local path or a temporary link."
        },
        {
          "name": "create_drive_folder",
          "kind": "changes",
          "purpose": "Creates a folder in Drive."
        },
        {
          "name": "create_drive_file",
          "kind": "changes",
          "purpose": "Creates a file in Drive from text, base64 data or a URL."
        },
        {
          "name": "import_to_google_doc",
          "kind": "changes",
          "purpose": "Turns a Markdown, Word, HTML or text file into a native Google Doc."
        },
        {
          "name": "import_to_google_slides",
          "kind": "changes",
          "purpose": "Turns a PowerPoint or ODP file into Google Slides."
        },
        {
          "name": "import_to_google_sheets",
          "kind": "changes",
          "purpose": "Turns an Excel, ODS or CSV file into Google Sheets."
        },
        {
          "name": "get_drive_shareable_link",
          "kind": "reads",
          "purpose": "Returns the sharing link of a file or folder."
        },
        {
          "name": "create_form",
          "kind": "changes",
          "purpose": "Creates a Google Form."
        },
        {
          "name": "get_form",
          "kind": "reads",
          "purpose": "Reads a form's questions and settings."
        },
        {
          "name": "search_gmail_messages",
          "kind": "reads",
          "purpose": "Searches Gmail with the usual search operators and returns message and thread IDs."
        },
        {
          "name": "get_gmail_message_content",
          "kind": "reads",
          "purpose": "Reads one email: sender, recipients, subject and body."
        },
        {
          "name": "get_gmail_messages_content_batch",
          "kind": "reads",
          "purpose": "Reads up to 25 emails in one call."
        },
        {
          "name": "send_gmail_message",
          "kind": "changes",
          "purpose": "Sends, replies to or forwards an email, with attachments if needed."
        },
        {
          "name": "search_custom",
          "kind": "reads",
          "purpose": "Runs a Google Programmable Search (Custom Search) query."
        },
        {
          "name": "read_sheet_values",
          "kind": "reads",
          "purpose": "Reads the values in a range of a spreadsheet."
        },
        {
          "name": "modify_sheet_values",
          "kind": "changes",
          "purpose": "Writes, updates or clears the values in a range."
        },
        {
          "name": "create_spreadsheet",
          "kind": "changes",
          "purpose": "Creates a spreadsheet."
        },
        {
          "name": "create_presentation",
          "kind": "changes",
          "purpose": "Creates a Slides presentation."
        },
        {
          "name": "get_presentation",
          "kind": "reads",
          "purpose": "Reads a presentation's slides, and speaker notes if asked."
        },
        {
          "name": "list_tasks",
          "kind": "reads",
          "purpose": "Lists the tasks in a Google Tasks list."
        },
        {
          "name": "get_task",
          "kind": "reads",
          "purpose": "Returns one task."
        },
        {
          "name": "manage_task",
          "kind": "changes",
          "purpose": "Creates, updates, deletes or moves a task."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/google-workspace.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "shadcn-ui",
      "name": "shadcn/ui MCP",
      "url": "https://mcpshelf.co/servers/shadcn-ui",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Real shadcn/ui component source, demos and blocks, so the model stops guessing.",
      "description": "Models often write shadcn/ui components from memory and get the props or imports slightly wrong. This server, by the GitHub user Jpisnice, fetches the real thing from GitHub: a component's current source, its demo, its metadata and dependencies, and whole blocks such as dashboards, login pages and calendars. It can also list and apply TweakCN colour themes. It is a community project, not one run by shadcn.\n\nIt reads from the React registry by default and can switch to the Svelte, Vue or React Native ports, or to the Base UI flavour of the React components. Everything comes from GitHub's API, which allows 60 requests an hour without a token, so add a free token if you use it a lot.",
      "good_for": [
        "Building screens from shadcn/ui components without made-up props",
        "Pulling a ready-made block, such as a dashboard or sign-in page, into a project",
        "Working with the Svelte, Vue or React Native versions of shadcn/ui"
      ],
      "needs": [
        "Node.js 20 or newer",
        "Optional: a GitHub token, for 5,000 requests an hour instead of 60"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@jpisnice/shadcn-ui-mcp-server"
          ]
        },
        "setup_steps": null,
        "note": "Add \"--github-api-key\", \"ghp_...\" to the args (or GITHUB_PERSONAL_ACCESS_TOKEN in env) to raise the rate limit. Use \"--framework\", \"svelte\", \"vue\" or \"react-native\" for the other ports, and \"--ui-library\", \"base\" for Base UI.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 10 tools."
      },
      "package_note": null,
      "github": "https://github.com/Jpisnice/shadcn-ui-mcp-unofficial",
      "stars": 3070,
      "weekly_downloads": 2022,
      "last_commit": "2026-10-03",
      "logo": "https://mcpshelf.co/logos/shadcn-ui.webp",
      "maker": "Jpisnice (community project, not affiliated with shadcn)",
      "package": {
        "registry": "npm",
        "name": "@jpisnice/shadcn-ui-mcp-server",
        "version": "3.0.0",
        "released": "2026-10-03",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@jpisnice/shadcn-ui-mcp-server"
      },
      "tools": [
        {
          "name": "get_component",
          "kind": "reads",
          "purpose": "Returns the current source of one shadcn/ui component."
        },
        {
          "name": "get_component_demo",
          "kind": "reads",
          "purpose": "Returns the official example of a component in use."
        },
        {
          "name": "list_components",
          "kind": "reads",
          "purpose": "Lists every component in the chosen registry."
        },
        {
          "name": "get_component_metadata",
          "kind": "reads",
          "purpose": "Returns a component's description and dependencies."
        },
        {
          "name": "get_directory_structure",
          "kind": "reads",
          "purpose": "Browses the folder tree of the shadcn/ui repository."
        },
        {
          "name": "get_block",
          "kind": "reads",
          "purpose": "Returns the source of a block such as dashboard-01 or login-02, with its components if asked."
        },
        {
          "name": "list_blocks",
          "kind": "reads",
          "purpose": "Lists the available blocks by category."
        },
        {
          "name": "apply_theme",
          "kind": "changes",
          "purpose": "Applies a TweakCN theme preset to your project's CSS, with a dry-run option."
        },
        {
          "name": "list_themes",
          "kind": "reads",
          "purpose": "Lists the TweakCN theme presets."
        },
        {
          "name": "get_theme",
          "kind": "reads",
          "purpose": "Returns the colours and settings of one theme."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/shadcn-ui.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "freecad",
      "name": "FreeCAD MCP",
      "url": "https://mcpshelf.co/servers/freecad",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "Lets an assistant build and edit parts in FreeCAD, and run stress analyses on them.",
      "description": "FreeCAD is the free, open source parametric CAD program. This project by neka-nat has two halves: an addon that runs a small RPC server inside FreeCAD, and an MCP server your client starts. With both running, the model can create documents and objects, change their properties, insert parts from the FreeCAD library, take a screenshot of the view to check its work, and run a CalculiX FEM analysis on a part.\n\nIt can also run any Python code inside FreeCAD, which is what makes it powerful and what makes it worth care: that code runs with your user account. By default the addon only listens on your own machine. If you open it to the network, set an auth token and allow only trusted addresses.",
      "good_for": [
        "Sketching brackets, flanges and enclosures from a description",
        "Making repetitive model changes by asking in plain language",
        "Quick stress checks on a part with FreeCAD FEM"
      ],
      "needs": [
        "FreeCAD with the FreeCAD MCP addon installed",
        "uv, for uvx",
        "Python 3.12 or newer, which uvx can fetch for you"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "freecad-mcp"
          ]
        },
        "setup_steps": [
          "Download the repository and copy its addon/FreeCADMCP folder into the Mod folder of your FreeCAD user data (for example ~/.local/share/FreeCAD/Mod on Debian), then restart FreeCAD.",
          "Switch to the MCP Addon workbench and click Start RPC Server. Tick Auto-Start Server in the FreeCAD MCP menu to skip this next time.",
          "Add the config below to your client and keep FreeCAD open while you work."
        ],
        "note": "Add \"--only-text-feedback\" to leave out screenshots and save tokens. To reach FreeCAD on another machine, pass \"--host\" with its address and set FREECAD_MCP_TOKEN to the token set in the addon.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 17 tools."
      },
      "package_note": "The shared database gave \"npx freecad-mcp\", an npm package by someone else. This project publishes freecad-mcp on PyPI and runs with uvx.",
      "github": "https://github.com/neka-nat/freecad-mcp",
      "stars": 3066,
      "weekly_downloads": 286,
      "last_commit": "2026-10-25",
      "logo": "https://mcpshelf.co/logos/freecad.webp",
      "maker": "neka-nat and contributors",
      "package": {
        "registry": "pypi",
        "name": "freecad-mcp",
        "version": "0.1.28",
        "released": "2026-10-25",
        "licence": "MIT",
        "url": "https://pypi.org/project/freecad-mcp/"
      },
      "tools": [
        {
          "name": "create_document",
          "kind": "changes",
          "purpose": "Creates a new FreeCAD document."
        },
        {
          "name": "create_object",
          "kind": "changes",
          "purpose": "Adds an object, such as a box, cylinder or sketch-based feature, to a document."
        },
        {
          "name": "edit_object",
          "kind": "changes",
          "purpose": "Changes an object's properties."
        },
        {
          "name": "delete_object",
          "kind": "changes",
          "purpose": "Removes an object."
        },
        {
          "name": "execute_code_async",
          "kind": "runs",
          "purpose": "Starts a longer Python job in the background and returns a job ID."
        },
        {
          "name": "execute_code_headless",
          "kind": "runs",
          "purpose": "Runs a script in a separate freecadcmd process, with no GUI."
        },
        {
          "name": "get_async_status",
          "kind": "reads",
          "purpose": "Checks on a background job and returns any error."
        },
        {
          "name": "execute_code",
          "kind": "runs",
          "purpose": "Runs Python inside FreeCAD on its main thread."
        },
        {
          "name": "get_view",
          "kind": "reads",
          "purpose": "Takes a screenshot of the 3D view from a chosen angle."
        },
        {
          "name": "insert_part_from_library",
          "kind": "changes",
          "purpose": "Inserts a part from the FreeCAD parts library."
        },
        {
          "name": "get_objects",
          "kind": "reads",
          "purpose": "Lists every object in a document."
        },
        {
          "name": "get_object",
          "kind": "reads",
          "purpose": "Returns one object's properties."
        },
        {
          "name": "get_parts_list",
          "kind": "reads",
          "purpose": "Lists the parts in that library."
        },
        {
          "name": "reload_document",
          "kind": "changes",
          "purpose": "Closes and reopens a saved document to pick up changes made outside FreeCAD."
        },
        {
          "name": "list_documents",
          "kind": "reads",
          "purpose": "Lists the open documents."
        },
        {
          "name": "get_rpc_status",
          "kind": "reads",
          "purpose": "Reports whether the addon is reachable and which version it runs."
        },
        {
          "name": "run_fem_analysis",
          "kind": "runs",
          "purpose": "Runs the CalculiX solver on an existing FEM analysis and returns peak stress and displacement."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/freecad.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "jcodemunch",
      "name": "jCodeMunch",
      "url": "https://mcpshelf.co/servers/jcodemunch",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Indexes your code so an agent can fetch one function instead of reading whole files.",
      "description": "Coding agents burn much of their context opening whole files to find one function. jCodeMunch, by J. Gravelle, parses a repository once with tree-sitter (70-odd languages) and stores every function, class and method with its exact location. The agent can then search for a symbol and pull back just its source, an outline of a file, or a bundle of related code sized to a token budget.\n\nOn top of plain lookup it answers structural questions: who imports a module, what calls a function, what might break if you change it, and which code looks dead. To keep its own context cost down it starts with six small tools, a menu, an order call and a router, that reach its 90-plus actions on demand. Indexes stay on your machine under ~/.code-index. It is free for personal use, but commercial use needs a paid licence.",
      "good_for": [
        "Cutting the tokens a coding agent spends reading large repositories",
        "Finding where something is defined and everything that uses it",
        "Checking the blast radius of a change before making it"
      ],
      "needs": [
        "uv, for uvx",
        "A commercial licence if you use it for paid work"
      ],
      "install": {
        "config": {
          "command": "uvx",
          "args": [
            "jcodemunch-mcp"
          ]
        },
        "setup_steps": null,
        "note": "Running \"jcodemunch-mcp init\" after \"uv tool install jcodemunch-mcp\" detects your clients and writes their configs, and can add hooks that re-index after edits. Agents use it more reliably when your instructions file tells them to.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 6 tools."
      },
      "package_note": null,
      "github": "https://github.com/jgravelle/jcodemunch-mcp",
      "stars": 2808,
      "weekly_downloads": 20453,
      "last_commit": "2026-10-26",
      "logo": "https://mcpshelf.co/logos/jcodemunch.webp",
      "maker": "jgravelle (jMunch LLC)",
      "package": {
        "registry": "pypi",
        "name": "jcodemunch-mcp",
        "version": "1.108.399",
        "released": "2026-10-26",
        "licence": "LicenseRef-jCodeMunch-Dual-Use-1",
        "url": "https://pypi.org/project/jcodemunch-mcp/"
      },
      "tools": [
        {
          "name": "set_tool_tier",
          "kind": "changes",
          "purpose": "Widens or narrows the tools shown for the session: core, standard or full."
        },
        {
          "name": "announce_model",
          "kind": "changes",
          "purpose": "Lets the agent say which model it is, so the server picks a matching tool tier."
        },
        {
          "name": "jcodemunch_guide",
          "kind": "reads",
          "purpose": "Returns the current instructions an agent should follow to use jCodeMunch well."
        },
        {
          "name": "order",
          "kind": "changes",
          "purpose": "Runs any jCodeMunch action by name, such as search_symbols or get_symbol_source. Read-only unless state changes are allowed."
        },
        {
          "name": "menu",
          "kind": "reads",
          "purpose": "Lists the actions behind the front door, or those matching a search, with their arguments."
        },
        {
          "name": "route",
          "kind": "changes",
          "purpose": "Suggests the best action for a task in plain language, and can run it straight away."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/jcodemunch.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "perplexity",
      "name": "Perplexity MCP",
      "url": "https://mcpshelf.co/servers/perplexity",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Perplexity's search, answers and deep research, from Perplexity itself.",
      "description": "This is the official server from Perplexity. It has four tools: a plain web search that returns ranked results with dates, a quick answer tool, a reasoning tool for harder questions, and a research tool that can work for several minutes and write a detailed, cited report. The three answer tools run on Perplexity presets that the company tunes over time.\n\nEvery call goes through the Perplexity API, which has its own pay-as-you-go billing, so you need an API key with credit on it. You can run it locally with npx or point your client at the hosted copy Perplexity runs at api.perplexity.ai/mcp.",
      "good_for": [
        "Current facts and news the model was not trained on",
        "Cited research reports on a topic",
        "Search with recency or domain filters"
      ],
      "needs": [
        "A Perplexity API key with credit",
        "Node.js, for the local version"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@perplexity-ai/mcp-server"
          ],
          "env": {
            "PERPLEXITY_API_KEY": "YOUR_API_KEY"
          }
        },
        "setup_steps": null,
        "note": "If your client fails to start it with an initialize or EOF error, use \"-yq\" instead of \"-y\" so npx stays quiet. Long research calls may need PERPLEXITY_TIMEOUT_MS raised above the 5-minute default.",
        "remote_url": "https://api.perplexity.ai/mcp"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 4 tools."
      },
      "package_note": "The shared database gave \"@chatmcp/server-perplexity-ask\", a package by someone else. Perplexity publishes @perplexity-ai/mcp-server, and the repository has moved to perplexityai/modelcontextprotocol.",
      "github": "https://github.com/perplexityai/modelcontextprotocol",
      "stars": 2589,
      "weekly_downloads": null,
      "last_commit": "2026-10-21",
      "logo": "https://mcpshelf.co/logos/perplexity.webp",
      "maker": "Perplexity AI",
      "package": {
        "registry": "npm",
        "name": "@perplexity-ai/mcp-server",
        "version": "1.3.0",
        "released": "2026-09-25",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@perplexity-ai/mcp-server"
      },
      "tools": [
        {
          "name": "perplexity_ask",
          "kind": "reads",
          "purpose": "Answers a question with live web search, using Perplexity's fast preset."
        },
        {
          "name": "perplexity_research",
          "kind": "reads",
          "purpose": "Researches a topic in depth and writes a cited report. Can take several minutes."
        },
        {
          "name": "perplexity_reason",
          "kind": "reads",
          "purpose": "Works through a harder question step by step, using the medium preset."
        },
        {
          "name": "perplexity_search",
          "kind": "reads",
          "purpose": "Runs a web search and returns ranked results with titles, links, snippets and dates."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/perplexity.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "excalidraw",
      "name": "Excalidraw MCP",
      "url": "https://mcpshelf.co/servers/excalidraw",
      "category": "Design, 3D and games",
      "category_slug": "design-and-3d",
      "summary": "A live Excalidraw canvas that an agent draws on, looks at and tidies up.",
      "description": "This community project by yctimlin runs a local Excalidraw canvas and gives the model fine control over it: create, change, group, align and delete individual shapes, then describe the scene or take a screenshot to see what it drew. That loop lets an agent fix overlapping boxes and clipped labels instead of handing you its first attempt.\n\nFinished diagrams can be saved as .excalidraw files (or Obsidian Excalidraw notes) to commit with your code, exported as PNG or SVG, or shared as an encrypted excalidraw.com link. It needs no account or key. It is separate from the official Excalidraw MCP, which draws one diagram inside the chat.",
      "good_for": [
        "Architecture and flow diagrams that live in the repository",
        "Turning Mermaid text into an editable Excalidraw diagram",
        "Diagrams the agent checks and corrects before showing you"
      ],
      "needs": [
        "Node.js 20 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "mcp-excalidraw-server"
          ]
        },
        "setup_steps": null,
        "note": "The canvas starts on its own at http://127.0.0.1:3000; open it to watch. Set EXCALIDRAW_DATA_DIR in env to keep the canvas between restarts, and EXCALIDRAW_EXPORT_DIR to choose where files are written.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 26 tools."
      },
      "package_note": "The shared database added \"start\" to the command, which only starts the canvas server. The MCP server runs with no extra argument.",
      "github": "https://github.com/yctimlin/mcp_excalidraw",
      "stars": 2571,
      "weekly_downloads": null,
      "last_commit": "2026-10-22",
      "logo": "https://mcpshelf.co/logos/excalidraw.webp",
      "maker": "yctimlin and contributors (community project)",
      "package": {
        "registry": "npm",
        "name": "mcp-excalidraw-server",
        "version": "2.1.2",
        "released": "2026-10-04",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/mcp-excalidraw-server"
      },
      "tools": [
        {
          "name": "create_element",
          "kind": "changes",
          "purpose": "Adds one shape, text or arrow. Arrows can be bound to two shapes."
        },
        {
          "name": "update_element",
          "kind": "changes",
          "purpose": "Changes an element's position, size, colours or text."
        },
        {
          "name": "delete_element",
          "kind": "changes",
          "purpose": "Removes an element."
        },
        {
          "name": "query_elements",
          "kind": "reads",
          "purpose": "Finds elements by type, property or area of the canvas."
        },
        {
          "name": "get_resource",
          "kind": "reads",
          "purpose": "Reads a canvas resource, such as the scene or the library."
        },
        {
          "name": "group_elements",
          "kind": "changes",
          "purpose": "Groups elements together."
        },
        {
          "name": "ungroup_elements",
          "kind": "changes",
          "purpose": "Breaks a group apart."
        },
        {
          "name": "align_elements",
          "kind": "changes",
          "purpose": "Lines elements up on one edge or centre."
        },
        {
          "name": "distribute_elements",
          "kind": "changes",
          "purpose": "Spaces elements evenly."
        },
        {
          "name": "lock_elements",
          "kind": "changes",
          "purpose": "Locks elements so they cannot be moved."
        },
        {
          "name": "unlock_elements",
          "kind": "changes",
          "purpose": "Unlocks them again."
        },
        {
          "name": "create_from_mermaid",
          "kind": "changes",
          "purpose": "Converts Mermaid text into Excalidraw elements. Needs the canvas open in a browser."
        },
        {
          "name": "batch_create_elements",
          "kind": "changes",
          "purpose": "Adds many elements in one call, with custom IDs so arrows can refer to them."
        },
        {
          "name": "get_element",
          "kind": "reads",
          "purpose": "Returns one element by ID."
        },
        {
          "name": "clear_canvas",
          "kind": "changes",
          "purpose": "Deletes everything on the canvas."
        },
        {
          "name": "export_scene",
          "kind": "changes",
          "purpose": "Saves the canvas as .excalidraw JSON, or as an Obsidian Excalidraw note."
        },
        {
          "name": "import_scene",
          "kind": "changes",
          "purpose": "Loads a .excalidraw or .excalidraw.md file, or raw JSON."
        },
        {
          "name": "export_to_image",
          "kind": "changes",
          "purpose": "Exports the canvas as PNG or SVG."
        },
        {
          "name": "duplicate_elements",
          "kind": "changes",
          "purpose": "Copies elements with an offset."
        },
        {
          "name": "snapshot_scene",
          "kind": "reads",
          "purpose": "Saves a named snapshot of the canvas."
        },
        {
          "name": "restore_snapshot",
          "kind": "changes",
          "purpose": "Restores a named snapshot."
        },
        {
          "name": "describe_scene",
          "kind": "reads",
          "purpose": "Describes everything on the canvas in text: shapes, positions, labels and connections."
        },
        {
          "name": "get_canvas_screenshot",
          "kind": "reads",
          "purpose": "Renders the canvas to an image so the model can see its work."
        },
        {
          "name": "read_diagram_guide",
          "kind": "reads",
          "purpose": "Hands the model a guide to colours, sizes and layouts for clean diagrams."
        },
        {
          "name": "export_to_excalidraw_url",
          "kind": "changes",
          "purpose": "Uploads an encrypted copy and returns a shareable excalidraw.com link."
        },
        {
          "name": "set_viewport",
          "kind": "changes",
          "purpose": "Zooms and scrolls the canvas view. Needs the canvas open in a browser."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/excalidraw.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "tavily",
      "name": "Tavily MCP",
      "url": "https://mcpshelf.co/servers/tavily",
      "category": "Browser and web data",
      "category_slug": "browser-and-web",
      "summary": "Tavily's search, page extraction, site mapping and crawling for agents.",
      "description": "Tavily is a search API built for AI agents, and this is the company's own server. Its search tool returns cleaned-up results with optional images and answer text, the extract tool pulls the readable content out of given pages, map lists the pages on a site, crawl walks a site and returns what it finds, and research gathers several sources into one written answer.\n\nYou need a Tavily API key, which you can get by signing up for a free account. Tavily also hosts the server at mcp.tavily.com, which you can sign into with OAuth instead of pasting a key.",
      "good_for": [
        "Giving a chat or coding assistant up-to-date web search",
        "Reading the text of a list of pages without a browser",
        "Mapping or crawling a documentation site"
      ],
      "needs": [
        "A Tavily API key",
        "Node.js 20 or newer, for the local version"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "tavily-mcp@latest"
          ],
          "env": {
            "TAVILY_API_KEY": "YOUR_API_KEY"
          }
        },
        "setup_steps": null,
        "note": "Set DEFAULT_PARAMETERS in env to a JSON object, such as {\"search_depth\": \"advanced\", \"max_results\": 10}, to change what every search asks for.",
        "remote_url": "https://mcp.tavily.com/mcp/"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 5 tools."
      },
      "package_note": null,
      "github": "https://github.com/tavily-ai/tavily-mcp",
      "stars": 2460,
      "weekly_downloads": null,
      "last_commit": "2026-10-22",
      "logo": "https://mcpshelf.co/logos/tavily.webp",
      "maker": "Tavily",
      "package": {
        "registry": "npm",
        "name": "tavily-mcp",
        "version": "0.2.22",
        "released": "2026-08-05",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/tavily-mcp"
      },
      "tools": [
        {
          "name": "tavily_search",
          "kind": "changes",
          "purpose": "Searches the web and returns snippets and links, with options for depth, topic, dates and images."
        },
        {
          "name": "tavily_extract",
          "kind": "changes",
          "purpose": "Pulls the readable content out of one or more URLs as Markdown or text."
        },
        {
          "name": "tavily_crawl",
          "kind": "changes",
          "purpose": "Crawls a site from a URL and returns the content of the pages it reaches."
        },
        {
          "name": "tavily_map",
          "kind": "changes",
          "purpose": "Lists the pages on a site, starting from a URL."
        },
        {
          "name": "tavily_research",
          "kind": "changes",
          "purpose": "Researches a question across many sources and writes up the answer."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/tavily.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "12306",
      "name": "12306 MCP",
      "url": "https://mcpshelf.co/servers/12306",
      "category": "Knowledge and work apps",
      "category_slug": "knowledge-and-work",
      "summary": "Searches China Railway 12306 for trains, seats, stops and transfers.",
      "description": "12306 is the official booking site for China Railway. This server by Joooook lets an assistant look up trains between two stations on a date, filter them by train type or departure time, see which seats are left, list every stop a train makes, and find journeys with a change of train. It reads the same public data the 12306 website shows, so no account or key is needed.\n\nIt only searches. It cannot book or pay for tickets, so you still buy them on 12306 or its app. The author describes it as a learning project, and the tool descriptions and station names are in Chinese.",
      "good_for": [
        "Planning rail trips in China in plain language",
        "Comparing high-speed trains by time and seats left",
        "Finding routes that need a change of train"
      ],
      "needs": [
        "Node.js 18 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "12306-mcp"
          ]
        },
        "setup_steps": null,
        "note": "Add \"--port\", \"8080\" to the args to serve it over HTTP instead of stdio.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 22 Oct 2026: it started and answered with 8 tools."
      },
      "package_note": null,
      "github": "https://github.com/Joooook/12306-mcp",
      "stars": 2406,
      "weekly_downloads": 4310,
      "last_commit": "2026-07-31",
      "logo": "https://mcpshelf.co/logos/12306.webp",
      "maker": "Joooook (community project)",
      "package": {
        "registry": "npm",
        "name": "12306-mcp",
        "version": "0.3.10",
        "released": "2026-07-30",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/12306-mcp"
      },
      "tools": [
        {
          "name": "get-current-date",
          "kind": "reads",
          "purpose": "Returns today's date in China time, so the model can work out dates such as tomorrow or next Wednesday."
        },
        {
          "name": "get-stations-code-in-city",
          "kind": "reads",
          "purpose": "Lists every station in a city, by its Chinese name, with their station codes."
        },
        {
          "name": "get-station-code-of-citys",
          "kind": "reads",
          "purpose": "Returns the main station code for one or more cities."
        },
        {
          "name": "get-station-code-by-names",
          "kind": "reads",
          "purpose": "Looks up station codes from exact Chinese station names, such as 北京南."
        },
        {
          "name": "get-station-by-telecode",
          "kind": "reads",
          "purpose": "Returns the details of a station from its three-letter code."
        },
        {
          "name": "get-tickets",
          "kind": "reads",
          "purpose": "Searches trains between two stations on a date, with seats left, filters by train type and departure time, and sorting."
        },
        {
          "name": "get-interline-tickets",
          "kind": "reads",
          "purpose": "Finds journeys with one change of train, returning the first ten."
        },
        {
          "name": "get-train-route-stations",
          "kind": "reads",
          "purpose": "Lists every stop on a train's route with arrival, departure and stop times."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/12306.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "ios-simulator",
      "name": "iOS Simulator MCP",
      "url": "https://mcpshelf.co/servers/ios-simulator",
      "category": "Developer tools",
      "category_slug": "developer-tools",
      "summary": "Lets an agent tap, type, swipe and screenshot its way through the iOS Simulator.",
      "description": "Joshua Yoes's server lets a coding agent check its own iOS work. It reads the accessibility tree of the screen in a booted simulator, finds elements by label, taps, swipes and types, and takes a screenshot or records a video. It can also install, launch and stop apps and open URLs, which is handy for jumping straight to a deep link.\n\nIt works through Apple's simctl and Meta's IDB tool, so it only runs on a Mac with Xcode. Update to version 1.3.3 or later, which fixed command injection bugs in older releases.",
      "good_for": [
        "A quick QA pass after an agent changes an iOS or React Native screen",
        "Checking accessibility labels on every element",
        "Capturing screenshots and screen recordings for a pull request"
      ],
      "needs": [
        "macOS with Xcode and an iOS simulator",
        "Meta's IDB tool (idb-companion and the idb client)",
        "Node.js 20 or newer"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "ios-simulator-mcp"
          ]
        },
        "setup_steps": [
          "Install IDB: brew tap facebook/fb, brew install idb-companion, then pip install fb-idb for the idb command.",
          "Boot a simulator from Xcode or with xcrun simctl boot.",
          "Add the config below to your client."
        ],
        "note": "Set IOS_SIMULATOR_MCP_FILTERED_TOOLS in env to hide tools you do not want, IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR to choose where screenshots go, and IOS_SIMULATOR_MCP_IDB_PATH if idb is not on your PATH.",
        "remote_url": null
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 17 tools."
      },
      "package_note": null,
      "github": "https://github.com/joshuayoes/ios-simulator-mcp",
      "stars": 2195,
      "weekly_downloads": 4826,
      "last_commit": "2026-10-23",
      "logo": "https://mcpshelf.co/logos/ios-simulator.webp",
      "maker": "Joshua Yoes and contributors",
      "package": {
        "registry": "npm",
        "name": "ios-simulator-mcp",
        "version": "2.1.0",
        "released": "2026-08-13",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/ios-simulator-mcp"
      },
      "tools": [
        {
          "name": "get_booted_sim_id",
          "kind": "reads",
          "purpose": "Returns the ID of the simulator that is running."
        },
        {
          "name": "open_simulator",
          "kind": "changes",
          "purpose": "Opens the Simulator app."
        },
        {
          "name": "ui_describe_all",
          "kind": "reads",
          "purpose": "Returns the accessibility tree of the whole screen."
        },
        {
          "name": "ui_tap",
          "kind": "changes",
          "purpose": "Taps a point on the screen, with an optional press duration."
        },
        {
          "name": "ui_type",
          "kind": "changes",
          "purpose": "Types text into the focused field."
        },
        {
          "name": "ui_swipe",
          "kind": "changes",
          "purpose": "Swipes from one point to another."
        },
        {
          "name": "ui_describe_point",
          "kind": "reads",
          "purpose": "Returns the element at given screen coordinates."
        },
        {
          "name": "ui_find_element",
          "kind": "reads",
          "purpose": "Finds elements by label or ID, optionally by type."
        },
        {
          "name": "ui_view",
          "kind": "reads",
          "purpose": "Returns a compressed screenshot for the model to look at."
        },
        {
          "name": "screenshot",
          "kind": "changes",
          "purpose": "Saves a full screenshot to a file."
        },
        {
          "name": "record_video",
          "kind": "changes",
          "purpose": "Starts recording the screen to a video file."
        },
        {
          "name": "stop_recording",
          "kind": "changes",
          "purpose": "Stops the recording."
        },
        {
          "name": "install_app",
          "kind": "changes",
          "purpose": "Installs a .app or .ipa on the simulator."
        },
        {
          "name": "launch_app",
          "kind": "changes",
          "purpose": "Launches an app by bundle ID, with optional environment variables."
        },
        {
          "name": "terminate_app",
          "kind": "changes",
          "purpose": "Stops a running app."
        },
        {
          "name": "open_url",
          "kind": "changes",
          "purpose": "Opens a URL or deep link in the simulator."
        },
        {
          "name": "list_apps",
          "kind": "reads",
          "purpose": "Lists the apps installed on the simulator."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/ios-simulator.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    },
    {
      "slug": "azure-devops",
      "name": "Azure DevOps MCP",
      "url": "https://mcpshelf.co/servers/azure-devops",
      "category": "Cloud and operations",
      "category_slug": "cloud-and-ops",
      "summary": "Microsoft's server for Azure DevOps boards, repos, pipelines, wikis and test plans.",
      "description": "Microsoft maintains this server for Azure DevOps. The model can list projects and teams, read and update work items, look at iterations and team capacity, browse repositories and pull requests, check and start pipeline runs, read and write wiki pages, search code and work items, and work with test plans and Advanced Security alerts.\n\nThere are two versions. Microsoft now recommends its hosted server at mcp.dev.azure.com, which needs no install and gets new tools first; this local npx package remains supported for clients that need stdio. Both need a work or school account backed by Microsoft Entra ID, since personal Microsoft accounts are not supported.",
      "good_for": [
        "Asking what is in the current sprint and updating work items",
        "Reviewing pull requests and build failures from your editor",
        "Keeping project wikis up to date"
      ],
      "needs": [
        "An Azure DevOps organization",
        "A Microsoft Entra ID work or school account",
        "Node.js 20 or newer, for the local version"
      ],
      "install": {
        "config": {
          "command": "npx",
          "args": [
            "-y",
            "@azure-devops/mcp",
            "YOUR_ORGANIZATION"
          ]
        },
        "setup_steps": null,
        "note": "Replace YOUR_ORGANIZATION with the name in your dev.azure.com address. Add \"-d\", \"core\", \"work\", \"work-items\" to load only some tool groups. It signs in through a browser by default; use \"--authentication\", \"azcli\" or \"pat\" on machines without one.",
        "remote_url": "https://mcp.dev.azure.com/YOUR_ORGANIZATION"
      },
      "check": {
        "result": "passed",
        "label": "Started in our test",
        "detail": "We ran this exact config on 27 Oct 2026: it started and answered with 44 tools."
      },
      "package_note": "The shared database gave only the hosted address with a placeholder bearer token. The hosted server signs in with your Microsoft account, and the local package is @azure-devops/mcp on npm.",
      "github": "https://github.com/microsoft/azure-devops-mcp",
      "stars": 2069,
      "weekly_downloads": null,
      "last_commit": "2026-10-23",
      "logo": "https://mcpshelf.co/logos/azure-devops.webp",
      "maker": "Microsoft",
      "package": {
        "registry": "npm",
        "name": "@azure-devops/mcp",
        "version": "2.11.0",
        "released": "2026-10-22",
        "licence": "MIT",
        "url": "https://www.npmjs.com/package/@azure-devops/mcp"
      },
      "tools": [
        {
          "name": "core_list_project_teams",
          "kind": "reads",
          "purpose": "Lists the teams in a project."
        },
        {
          "name": "core_list_projects",
          "kind": "reads",
          "purpose": "Lists the projects in your organization."
        },
        {
          "name": "core_get_identity_ids",
          "kind": "reads",
          "purpose": "Looks up people's identity IDs from a name or email."
        },
        {
          "name": "work",
          "kind": "reads",
          "purpose": "Reads iterations, team settings and team capacity."
        },
        {
          "name": "work_iteration_write",
          "kind": "changes",
          "purpose": "Creates iterations or assigns them to a team."
        },
        {
          "name": "work_capacity_write",
          "kind": "changes",
          "purpose": "Updates a team member's capacity for an iteration."
        },
        {
          "name": "pipelines_build",
          "kind": "reads",
          "purpose": "Lists builds and reads their status and changes."
        },
        {
          "name": "pipelines_build_log",
          "kind": "reads",
          "purpose": "Reads build logs, whole or by line range."
        },
        {
          "name": "pipelines_definition",
          "kind": "reads",
          "purpose": "Lists and reads pipeline definitions."
        },
        {
          "name": "pipelines_run",
          "kind": "runs",
          "purpose": "Lists and reads pipeline runs."
        },
        {
          "name": "pipelines_artifact",
          "kind": "changes",
          "purpose": "Lists and downloads build artifacts."
        },
        {
          "name": "pipelines_write",
          "kind": "changes",
          "purpose": "Queues runs, creates and renames YAML pipelines, and cancels, retries or runs a stage of a running build."
        },
        {
          "name": "repo_repository",
          "kind": "reads",
          "purpose": "Lists repositories or reads one."
        },
        {
          "name": "repo_pull_request",
          "kind": "reads",
          "purpose": "Lists pull requests in a repository or reads one, with changed files if asked."
        },
        {
          "name": "repo_pull_request_org",
          "kind": "reads",
          "purpose": "Lists your active pull requests, or those waiting on your review, across the organization."
        },
        {
          "name": "repo_pull_request_thread",
          "kind": "reads",
          "purpose": "Reads pull request comment threads."
        },
        {
          "name": "repo_branch",
          "kind": "reads",
          "purpose": "Lists and reads branches."
        },
        {
          "name": "repo_file",
          "kind": "reads",
          "purpose": "Reads files and folders from a repository."
        },
        {
          "name": "repo_file_write",
          "kind": "changes",
          "purpose": "Creates or updates a text file on a branch and commits it."
        },
        {
          "name": "repo_search_commits",
          "kind": "reads",
          "purpose": "Searches commits by text, author, date or branch."
        },
        {
          "name": "repo_pull_request_write",
          "kind": "changes",
          "purpose": "Creates and updates pull requests: reviewers, votes, status and auto-complete."
        },
        {
          "name": "repo_pull_request_thread_write",
          "kind": "changes",
          "purpose": "Replies to, opens and resolves pull request comment threads."
        },
        {
          "name": "repo_create_branch",
          "kind": "changes",
          "purpose": "Creates a branch."
        },
        {
          "name": "wit_work_item",
          "kind": "reads",
          "purpose": "Reads work items: one or many by ID, yours, their comments, history or those in an iteration."
        },
        {
          "name": "wit_query",
          "kind": "reads",
          "purpose": "Runs saved work item queries or WIQL."
        },
        {
          "name": "wit_backlog",
          "kind": "changes",
          "purpose": "Reads backlogs and reorders the items on them."
        },
        {
          "name": "wit_work_item_attachment",
          "kind": "reads",
          "purpose": "Downloads a work item attachment."
        },
        {
          "name": "wit_work_item_attachment_upload",
          "kind": "changes",
          "purpose": "Uploads a file to attach to a work item."
        },
        {
          "name": "wit_work_item_attachment_link",
          "kind": "changes",
          "purpose": "Links an uploaded attachment to a work item."
        },
        {
          "name": "wit_work_item_write",
          "kind": "changes",
          "purpose": "Creates and updates work items, singly or in batches, including child items."
        },
        {
          "name": "wit_work_item_comment_write",
          "kind": "changes",
          "purpose": "Adds or edits comments on a work item."
        },
        {
          "name": "wit_work_item_link_write",
          "kind": "changes",
          "purpose": "Links work items to each other, to pull requests or to commits."
        },
        {
          "name": "wiki",
          "kind": "reads",
          "purpose": "Lists wikis and pages and reads page content."
        },
        {
          "name": "wiki_upsert_page",
          "kind": "changes",
          "purpose": "Creates or updates a wiki page."
        },
        {
          "name": "testplan",
          "kind": "reads",
          "purpose": "Reads test plans, suites and cases."
        },
        {
          "name": "testplan_show_test_results_from_build_id",
          "kind": "reads",
          "purpose": "Reads the test results of a build, filtered by outcome."
        },
        {
          "name": "testplan_test_plan_write",
          "kind": "changes",
          "purpose": "Creates test plans."
        },
        {
          "name": "testplan_test_suite_write",
          "kind": "changes",
          "purpose": "Creates test suites and adds test cases to them."
        },
        {
          "name": "testplan_test_case_write",
          "kind": "changes",
          "purpose": "Creates and updates test cases."
        },
        {
          "name": "search_code",
          "kind": "reads",
          "purpose": "Searches code across repositories."
        },
        {
          "name": "search_wiki",
          "kind": "reads",
          "purpose": "Searches wiki pages."
        },
        {
          "name": "search_workitem",
          "kind": "reads",
          "purpose": "Searches work items by text and filters."
        },
        {
          "name": "advsec_get_alerts",
          "kind": "reads",
          "purpose": "Lists Advanced Security alerts for a repository."
        },
        {
          "name": "advsec_get_alert_details",
          "kind": "reads",
          "purpose": "Reads one Advanced Security alert in detail."
        }
      ],
      "markdown": "https://mcpshelf.co/servers/azure-devops.md",
      "added": "2026-10-27",
      "updated": "2026-10-27"
    }
  ],
  "guides": [
    {
      "slug": "what-is-an-mcp-server",
      "title": "What is an MCP server?",
      "url": "https://mcpshelf.co/guides/what-is-an-mcp-server",
      "summary": "An MCP server is a small program that gives an AI assistant something it cannot do on its own: read your files, query a database, drive a browser, file a Jira ticket. MCP (Model Context Protocol) is the shared plug that lets any assistant use any of these servers.",
      "updated": "2026-10-26"
    },
    {
      "slug": "claude-code",
      "title": "Adding MCP servers to Claude Code",
      "url": "https://mcpshelf.co/guides/claude-code",
      "summary": "Claude Code manages MCP servers with one command, claude mcp add. You never have to open a JSON file unless you want to share servers with your team. Here is the short version, then the details that catch people out.",
      "updated": "2026-10-26"
    },
    {
      "slug": "cursor",
      "title": "Adding MCP servers to Cursor",
      "url": "https://mcpshelf.co/guides/cursor",
      "summary": "Cursor reads MCP servers from a file called mcp.json. You can edit it from Cursor Settings or open it directly. Both end up in the same place.",
      "updated": "2026-10-26"
    },
    {
      "slug": "cursor-mcp-json-location",
      "title": "Where Cursor keeps mcp.json",
      "url": "https://mcpshelf.co/guides/cursor-mcp-json-location",
      "summary": "There are two mcp.json files. One lives in your home folder and applies everywhere; the other lives inside a project.",
      "updated": "2026-10-26"
    },
    {
      "slug": "claude-desktop",
      "title": "Adding MCP servers to Claude Desktop",
      "url": "https://mcpshelf.co/guides/claude-desktop",
      "summary": "Claude Desktop reads local MCP servers from claude_desktop_config.json. Remote servers can also be added as connectors in Settings without touching the file.",
      "updated": "2026-10-26"
    },
    {
      "slug": "chatgpt",
      "title": "Using MCP servers in ChatGPT",
      "url": "https://mcpshelf.co/guides/chatgpt",
      "summary": "ChatGPT does not run programs on your computer, so it can only use MCP servers that someone hosts at a URL. If a server only gives you an npx or uvx command, use Claude, Cursor or another desktop client for it instead.",
      "updated": "2026-10-26"
    },
    {
      "slug": "check-an-mcp-server",
      "title": "Checking an MCP server before you install it",
      "url": "https://mcpshelf.co/guides/check-an-mcp-server",
      "summary": "A local MCP server is a program running as you, with your files, your network and whatever tokens you give it. An assistant decides when to call it. That is worth a few minutes of checking.",
      "updated": "2026-10-26"
    },
    {
      "slug": "remote-vs-local-mcp-servers",
      "title": "Remote or local: two ways to run an MCP server",
      "url": "https://mcpshelf.co/guides/remote-vs-local-mcp-servers",
      "summary": "Every server on MCP Shelf runs one of two ways, and some run both. The choice decides who holds your data and what you have to install.",
      "updated": "2026-10-26"
    }
  ],
  "skills": [
    {
      "slug": "mcp-builder",
      "name": "MCP Builder",
      "folder": "mcp-builder",
      "url": "https://mcpshelf.co/skills/mcp-builder",
      "summary": "Turns Claude into a careful MCP server author, from API research to a tested release.",
      "maker": "Anthropic",
      "license": "Apache 2.0 (open source)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/mcp-builder",
      "plugin": "example-skills",
      "pairs_with": [
        "mcp-inspector",
        "context7",
        "github"
      ],
      "updated": "2026-10-27"
    },
    {
      "slug": "webapp-testing",
      "name": "Web App Testing",
      "folder": "webapp-testing",
      "url": "https://mcpshelf.co/skills/webapp-testing",
      "summary": "Has Claude write throwaway Playwright scripts to poke, screenshot and check your local web app.",
      "maker": "Anthropic",
      "license": "Apache 2.0 (open source)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/webapp-testing",
      "plugin": "example-skills",
      "pairs_with": [
        "playwright",
        "desktop-commander"
      ],
      "updated": "2026-10-27"
    },
    {
      "slug": "skill-creator",
      "name": "Skill Creator",
      "folder": "skill-creator",
      "url": "https://mcpshelf.co/skills/skill-creator",
      "summary": "A skill for making skills: drafts one with you, tests it, and tunes when it switches on.",
      "maker": "Anthropic",
      "license": "Apache 2.0 (open source)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/skill-creator",
      "plugin": "example-skills",
      "pairs_with": [
        "basic-memory",
        "github"
      ],
      "updated": "2026-10-27"
    },
    {
      "slug": "frontend-design",
      "name": "Frontend Design",
      "folder": "frontend-design",
      "url": "https://mcpshelf.co/skills/frontend-design",
      "summary": "Steers Claude away from the same-again AI look toward pages with a point of view.",
      "maker": "Anthropic",
      "license": "Apache 2.0 (open source)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/frontend-design",
      "plugin": "example-skills",
      "pairs_with": [
        "framelink-figma",
        "playwright"
      ],
      "updated": "2026-10-27"
    },
    {
      "slug": "pdf",
      "name": "PDF",
      "folder": "pdf",
      "url": "https://mcpshelf.co/skills/pdf",
      "summary": "Reads, splits, merges, fills and builds PDF files with proven Python and command line tools.",
      "maker": "Anthropic",
      "license": "Source-available (free to use in Claude, not to redistribute)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/pdf",
      "plugin": "document-skills",
      "pairs_with": [
        "desktop-commander",
        "arxiv"
      ],
      "updated": "2026-10-27"
    },
    {
      "slug": "xlsx",
      "name": "Excel (xlsx)",
      "folder": "xlsx",
      "url": "https://mcpshelf.co/skills/xlsx",
      "summary": "Builds and edits Excel workbooks that keep their formulas, then checks them for errors.",
      "maker": "Anthropic",
      "license": "Source-available (free to use in Claude, not to redistribute)",
      "repository": "https://github.com/anthropics/skills/tree/main/skills/xlsx",
      "plugin": "document-skills",
      "pairs_with": [
        "excel",
        "postgres-mcp-pro"
      ],
      "updated": "2026-10-27"
    }
  ]
}