|
| 1 | +# MCP Server Discovery: Finding and Evaluating Servers |
| 2 | + |
| 3 | +Complete reference for discovering MCP servers to integrate into Claude Code plugins. |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +When building plugins that need external capabilities, finding the right MCP server saves development time and leverages community-tested implementations. This guide covers discovery sources, search strategies, and evaluation criteria. |
| 8 | + |
| 9 | +### When to Use MCP Servers |
| 10 | + |
| 11 | +**Integrate existing MCP servers when:** |
| 12 | + |
| 13 | +- Standard functionality exists (file system, database, API clients) |
| 14 | +- Multiple tools needed from single service (10+ related operations) |
| 15 | +- OAuth or complex authentication required |
| 16 | +- Community maintenance preferred over custom implementation |
| 17 | + |
| 18 | +**Build custom solutions when:** |
| 19 | + |
| 20 | +- Functionality is unique to your use case |
| 21 | +- Only 1-2 simple tools needed |
| 22 | +- Tight integration with plugin logic required |
| 23 | +- Existing servers don't meet security requirements |
| 24 | + |
| 25 | +## Official MCP Registry |
| 26 | + |
| 27 | +The official registry at `registry.modelcontextprotocol.io` provides a REST API for discovering servers. |
| 28 | + |
| 29 | +### API Endpoint |
| 30 | + |
| 31 | +```text |
| 32 | +https://registry.modelcontextprotocol.io/v0/servers |
| 33 | +``` |
| 34 | + |
| 35 | +### Search Syntax |
| 36 | + |
| 37 | +**Basic search:** |
| 38 | + |
| 39 | +```text |
| 40 | +GET /v0/servers?search=filesystem |
| 41 | +``` |
| 42 | + |
| 43 | +**With limit:** |
| 44 | + |
| 45 | +```text |
| 46 | +GET /v0/servers?search=database&limit=10 |
| 47 | +``` |
| 48 | + |
| 49 | +**Pagination:** |
| 50 | + |
| 51 | +```text |
| 52 | +GET /v0/servers?cursor=<cursor_from_previous_response> |
| 53 | +``` |
| 54 | + |
| 55 | +### Response Structure |
| 56 | + |
| 57 | +```json |
| 58 | +{ |
| 59 | + "servers": [ |
| 60 | + { |
| 61 | + "name": "@modelcontextprotocol/server-filesystem", |
| 62 | + "description": "MCP server for file system operations", |
| 63 | + "repository": "https://github.com/modelcontextprotocol/servers", |
| 64 | + "homepage": "https://modelcontextprotocol.io" |
| 65 | + } |
| 66 | + ], |
| 67 | + "cursor": "next_page_cursor" |
| 68 | +} |
| 69 | +``` |
| 70 | + |
| 71 | +### Key Fields |
| 72 | + |
| 73 | +| Field | Description | |
| 74 | +|-------|-------------| |
| 75 | +| `name` | Package/server name (often npm scope) | |
| 76 | +| `description` | Brief functionality summary | |
| 77 | +| `repository` | Source code location | |
| 78 | +| `homepage` | Documentation URL | |
| 79 | + |
| 80 | +### Limitations |
| 81 | + |
| 82 | +The official registry provides no popularity metrics. Supplement with GitHub stars or npm downloads for quality signals. |
| 83 | + |
| 84 | +## Alternative Discovery Sources |
| 85 | + |
| 86 | +### Smithery.ai |
| 87 | + |
| 88 | +Largest MCP server marketplace with usage metrics. |
| 89 | + |
| 90 | +**URL:** <https://smithery.ai/> |
| 91 | + |
| 92 | +**Advantages:** |
| 93 | + |
| 94 | +- Call volume statistics (popularity indicator) |
| 95 | +- Curated categories |
| 96 | +- Installation instructions |
| 97 | +- User ratings |
| 98 | + |
| 99 | +**Search tips:** |
| 100 | + |
| 101 | +- Browse categories for common use cases |
| 102 | +- Sort by popularity for battle-tested servers |
| 103 | +- Check "Recently Added" for new capabilities |
| 104 | + |
| 105 | +### npm Registry |
| 106 | + |
| 107 | +Official MCP servers and community packages available via npm. |
| 108 | + |
| 109 | +**Official scope search:** |
| 110 | + |
| 111 | +```bash |
| 112 | +npm search @modelcontextprotocol |
| 113 | +``` |
| 114 | + |
| 115 | +**Community search:** |
| 116 | + |
| 117 | +```bash |
| 118 | +npm search mcp-server |
| 119 | +``` |
| 120 | + |
| 121 | +**Key indicators:** |
| 122 | + |
| 123 | +- Weekly downloads (popularity) |
| 124 | +- Last publish date (maintenance) |
| 125 | +- Dependency count (complexity) |
| 126 | + |
| 127 | +### GitHub |
| 128 | + |
| 129 | +Direct source code access and community engagement metrics. |
| 130 | + |
| 131 | +**Topic search:** |
| 132 | + |
| 133 | +```text |
| 134 | +https://github.com/topics/mcp-server |
| 135 | +``` |
| 136 | + |
| 137 | +**Curated lists:** |
| 138 | + |
| 139 | +- `awesome-mcp-servers` repositories |
| 140 | +- `modelcontextprotocol` organization |
| 141 | + |
| 142 | +**Search queries:** |
| 143 | + |
| 144 | +```text |
| 145 | +mcp server in:name,description language:TypeScript |
| 146 | +model context protocol in:readme |
| 147 | +``` |
| 148 | + |
| 149 | +### MCP.SO |
| 150 | + |
| 151 | +Third-party aggregator with rankings and categories. |
| 152 | + |
| 153 | +**URL:** <https://mcp.so/> |
| 154 | + |
| 155 | +**Features:** |
| 156 | + |
| 157 | +- Combined metrics from multiple sources |
| 158 | +- Category browsing |
| 159 | +- Quick comparison view |
| 160 | + |
| 161 | +## Category Mappings |
| 162 | + |
| 163 | +Find servers for common plugin needs: |
| 164 | + |
| 165 | +| Plugin Need | Search Terms | Notable Servers | |
| 166 | +|-------------|--------------|-----------------| |
| 167 | +| Database access | postgres, sqlite, database, sql | @modelcontextprotocol/server-postgres, mcp-server-sqlite | |
| 168 | +| File operations | filesystem, files, directory | @modelcontextprotocol/server-filesystem | |
| 169 | +| GitHub integration | github, git, repository | Official GitHub MCP server | |
| 170 | +| Web search | search, web, exa, tavily | Exa MCP, Tavily MCP | |
| 171 | +| Browser automation | browser, playwright, puppeteer | Browserbase, Playwright MCP | |
| 172 | +| Memory/knowledge | memory, knowledge, notes | @modelcontextprotocol/server-memory | |
| 173 | +| Time/scheduling | time, calendar, scheduling | Google Calendar MCP | |
| 174 | +| HTTP/APIs | fetch, http, rest, api | mcp-server-fetch | |
| 175 | +| Slack integration | slack, messaging | Slack MCP server | |
| 176 | +| Email | email, gmail, smtp | Gmail MCP servers | |
| 177 | + |
| 178 | +## Evaluation Criteria |
| 179 | + |
| 180 | +### Popularity Signals |
| 181 | + |
| 182 | +Strong indicators of production-ready servers: |
| 183 | + |
| 184 | +| Metric | Good | Excellent | |
| 185 | +|--------|------|-----------| |
| 186 | +| GitHub stars | 50+ | 500+ | |
| 187 | +| npm weekly downloads | 100+ | 1,000+ | |
| 188 | +| Smithery call volume | 1K+ | 10K+ | |
| 189 | +| Forks | 10+ | 50+ | |
| 190 | + |
| 191 | +### Maintenance Indicators |
| 192 | + |
| 193 | +Signs of active development: |
| 194 | + |
| 195 | +- **Recent commits:** Last commit within 3 months |
| 196 | +- **Issue response time:** Maintainers respond within 1-2 weeks |
| 197 | +- **Release cadence:** Regular releases (monthly or quarterly) |
| 198 | +- **Open issues ratio:** Less than 50% of total issues open |
| 199 | + |
| 200 | +### Quality Markers |
| 201 | + |
| 202 | +Technical quality signals: |
| 203 | + |
| 204 | +- **TypeScript:** Type safety and better IDE support |
| 205 | +- **Tests:** Test suite with reasonable coverage |
| 206 | +- **Documentation:** README with setup instructions and examples |
| 207 | +- **Semantic versioning:** Proper version management |
| 208 | +- **License:** Permissive license (MIT, Apache 2.0) |
| 209 | +- **CI/CD:** Automated testing and publishing |
| 210 | + |
| 211 | +### Red Flags |
| 212 | + |
| 213 | +Avoid servers with these issues: |
| 214 | + |
| 215 | +| Red Flag | Risk | |
| 216 | +|----------|------| |
| 217 | +| No license | Legal uncertainty | |
| 218 | +| Abandoned (1+ year stale) | Security vulnerabilities, no bug fixes | |
| 219 | +| Hardcoded secrets in examples | Poor security practices | |
| 220 | +| No error handling | Unreliable in production | |
| 221 | +| Excessive permissions | Security risk | |
| 222 | +| No README | Integration difficulty | |
| 223 | +| Only personal use | Not designed for distribution | |
| 224 | + |
| 225 | +## Discovery Workflow |
| 226 | + |
| 227 | +Recommended process for finding MCP servers: |
| 228 | + |
| 229 | +1. **Define requirements** |
| 230 | + - List needed capabilities |
| 231 | + - Identify authentication requirements |
| 232 | + - Consider security constraints |
| 233 | + |
| 234 | +2. **Search official registry first** |
| 235 | + - Query `registry.modelcontextprotocol.io` |
| 236 | + - Check official `@modelcontextprotocol` packages |
| 237 | + |
| 238 | +3. **Expand to alternative sources** |
| 239 | + - Browse Smithery categories |
| 240 | + - Search npm for community packages |
| 241 | + - Check GitHub awesome lists |
| 242 | + |
| 243 | +4. **Evaluate candidates** |
| 244 | + - Apply popularity filters |
| 245 | + - Check maintenance status |
| 246 | + - Review code quality |
| 247 | + |
| 248 | +5. **Test integration** |
| 249 | + - Clone and run locally |
| 250 | + - Verify tools work as expected |
| 251 | + - Check error handling |
| 252 | + |
| 253 | +6. **Document choice** |
| 254 | + - Record why server was selected |
| 255 | + - Note any limitations |
| 256 | + - Plan for future updates |
| 257 | + |
| 258 | +## Discovery Script |
| 259 | + |
| 260 | +For automated discovery, see the companion script implementation in issue [#73](https://github.com/sjnims/plugin-dev/issues/73). Once implemented, usage: |
| 261 | + |
| 262 | +```bash |
| 263 | +./scripts/search-mcp-servers.sh "filesystem" --limit 10 |
| 264 | +``` |
| 265 | + |
| 266 | +## Quick Reference |
| 267 | + |
| 268 | +### Search Priority |
| 269 | + |
| 270 | +1. Official MCP Registry (`registry.modelcontextprotocol.io`) |
| 271 | +2. npm `@modelcontextprotocol` scope |
| 272 | +3. Smithery.ai curated servers |
| 273 | +4. npm community packages (`mcp-server-*`) |
| 274 | +5. GitHub topic search |
| 275 | + |
| 276 | +### Minimum Quality Bar |
| 277 | + |
| 278 | +Before integrating an MCP server, verify: |
| 279 | + |
| 280 | +- [ ] Active maintenance (commits within 6 months) |
| 281 | +- [ ] Proper license (MIT, Apache 2.0, etc.) |
| 282 | +- [ ] Documentation exists |
| 283 | +- [ ] No obvious security issues |
| 284 | +- [ ] Works with current MCP protocol version |
| 285 | + |
| 286 | +### Quick Evaluation |
| 287 | + |
| 288 | +```bash |
| 289 | +# Check npm package health |
| 290 | +npm view <package-name> time.modified |
| 291 | +npm view <package-name> repository.url |
| 292 | + |
| 293 | +# Check GitHub activity |
| 294 | +gh repo view <owner/repo> --json stargazerCount,pushedAt |
| 295 | +``` |
0 commit comments