# MCP Servers Search

An MCP (Model Context Protocol) server that provides tools for querying and discovering available MCP servers from the official [modelcontextprotocol/servers](https://github.com/modelcontextprotocol/servers) repository.

**547 MCP servers as of June 2025.**

## Features

- **List Servers**: Browse all available MCP servers with filtering by category
- **Search**: Find servers by name, description, or author
- **Feature Search**: Discover servers that provide specific capabilities
- **Random Discovery**: Get random server suggestions for exploration
- **Caching**: Efficient caching to minimize GitHub API calls

## Installation

### Using npm
```bash
npm install -g @atonomus/mcp-servers-search
```

### From source
```bash
git clone https://github.com/atonomus/mcp-servers-search.git
cd mcp-servers-search
npm install
```

## Usage

### Standalone
```bash
# Run directly with npx
npx @atonomus/mcp-servers-search

# Or if installed globally
mcp-servers-search
```

### With Claude Desktop

Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "servers-search": {
      "command": "npx",
      "args": ["-y", "@atonomus/mcp-servers-search"]
    }
  }
}
```

## Available Tools

### 1. list_servers
List all available MCP servers with optional filtering.

**Parameters:**
- `category` (optional): Filter by category - "reference", "official", "community", or "all" (default)
- `search` (optional): Search servers by name or description
- `limit` (optional): Maximum number of results (default: 20)

**Example:**
```json
{
  "name": "list_servers",
  "arguments": {
    "category": "official",
    "search": "database",
    "limit": 10
  }
}
```

### 2. get_server_details
Get detailed information about a specific MCP server.

**Parameters:**
- `name` (required): The name of the MCP server

**Example:**
```json
{
  "name": "get_server_details",
  "arguments": {
    "name": "GitHub"
  }
}
```

### 3. search_servers_by_feature
Search for servers that provide specific features or capabilities.

**Parameters:**
- `feature` (required): The feature to search for (e.g., "database", "api", "blockchain")
- `limit` (optional): Maximum number of results (default: 10)

**Example:**
```json
{
  "name": "search_servers_by_feature",
  "arguments": {
    "feature": "blockchain",
    "limit": 5
  }
}
```

### 4. get_random_servers
Get a random selection of MCP servers for discovery.

**Parameters:**
- `count` (optional): Number of random servers (default: 5)
- `category` (optional): Filter by category (default: "all")

**Example:**
```json
{
  "name": "get_random_servers",
  "arguments": {
    "count": 3,
    "category": "community"
  }
}
```

### 5. refresh_server_list
Force refresh the cached list of MCP servers from GitHub.

**Example:**
```json
{
  "name": "refresh_server_list",
  "arguments": {}
}
```

## Development

### Setup
```bash
# Install dependencies
npm install

# Run normally
npm start

# Run tests
npm test
```

### Testing

The project includes a comprehensive Mocha test suite that tests the README parsing functionality. The tests cover:

- Standard format entries: `[Name](link) - description`
- Bold format entries: `**[Name](link)** - description`
- List format entries: `- [Name](link) - description`
- Author extraction: `(by AuthorName)`
- Category detection (reference, official, community)
- Description cleaning (removing embedded links)
- Special character handling (preserving backticks)

Run tests with:
```bash
npm test
```

## Examples

### Using with Claude Desktop

Once configured, you can ask Claude:

- "What MCP servers are available for database operations?"
- "Show me all official MCP servers"
- "Find MCP servers related to AI or machine learning"
- "Give me 5 random community servers to explore"
- "Tell me more about the GitHub MCP server"

### Programmatic Usage

```javascript
// Example of using the server programmatically
import { MCPToolsQueryServer } from '@atonomus/mcp-servers-search';

const server = new MCPToolsQueryServer();
await server.run();
```

## Caching

The server caches the list of available MCP servers for 1 hour to minimize API calls to GitHub. You can force a refresh using the `refresh_server_list` tool.

## Contributing

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## License

MIT - see LICENSE file for details

## Acknowledgments

- Built on the [Model Context Protocol SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- Data sourced from the official [MCP Servers Repository](https://github.com/modelcontextprotocol/servers)
