icon-search-mcp

icon-search-mcp

A Model Context Protocol server that enables unified fuzzy searching across multiple icon libraries (Bootstrap, Feather, Octicons, Tabler) with intelligent caching and comprehensive filtering options.

Category
访问服务器

README

Icon Search MCP Server

A powerful Model Context Protocol (MCP) server that provides unified search capabilities across multiple icon libraries with fuzzy search, intelligent caching, and comprehensive filtering options.

🚀 Features

  • Multi-Library Support: Search across multiple icon libraries simultaneously
  • Fuzzy Search: Advanced search with typo tolerance using Fuse.js
  • Intelligent Caching: Fast response times with smart caching strategies
  • Comprehensive Filtering: Filter by library, style, category, tags, and more
  • NPM Package Integration: Automatic icon library management via NPM packages
  • TypeScript: Full type safety and excellent developer experience
  • MCP Protocol: Standard Model Context Protocol for seamless integration

📦 Supported Icon Libraries

  • Bootstrap Icons - Official open source SVG icon library for Bootstrap
  • Feather - Beautiful open source icons
  • Octicons - GitHub's icon library
  • Tabler Icons - Free and open source icons

🛠️ Installation

NPM Package

npm install -g icon-search-mcp

From Source

git clone https://github.com/your-org/icon-search-mcp.git
cd icon-search-mcp
npm install
npm run build

Build Icon Index

# Build icon indices from NPM packages
npm run build-icons

🚀 Quick Start

As MCP Server

# Start the MCP server
npm start

Configuration

The server can be configured via environment variables:

# Cache configuration
CACHE_TTL=300000          # Cache TTL in milliseconds (default: 5 minutes)
CACHE_MAX_SIZE=1000       # Maximum cache entries (default: 1000)

# Search configuration
DEFAULT_SEARCH_LIMIT=50   # Default search result limit
FUZZY_THRESHOLD=0.3       # Default fuzzy search threshold

# Logging
LOG_LEVEL=info           # Logging level (error, warn, info, debug)

🔌 Configuration for MCP Clients

Claude Desktop

Add the icon search MCP server to your Claude Desktop configuration:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "icon-search": {
      "command": "npx",
      "args": ["icon-search-mcp"],
      "env": {
        "CACHE_TTL": "300000",
        "DEFAULT_SEARCH_LIMIT": "50",
        "LOG_LEVEL": "info"
      }
    }
  }
}

VS Code MCP Extension

Configure the MCP extension in VS Code settings:

{
  "mcp.servers": [
    {
      "name": "icon-search",
      "command": "npx",
      "args": ["icon-search-mcp"],
      "cwd": "${workspaceFolder}",
      "env": {
        "CACHE_TTL": "300000",
        "DEFAULT_SEARCH_LIMIT": "50"
      }
    }
  ]
}

Local Development Setup

For development with a local build:

{
  "mcpServers": {
    "icon-search-dev": {
      "command": "node",
      "args": ["dist/index.js"],
      "cwd": "/path/to/icon-search-mcp",
      "env": {
        "NODE_ENV": "development",
        "LOG_LEVEL": "debug",
        "CACHE_TTL": "60000"
      }
    }
  }
}

Docker Configuration

Using the Docker image:

{
  "mcpServers": {
    "icon-search-docker": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--env",
        "CACHE_TTL=300000",
        "--env",
        "LOG_LEVEL=info",
        "icon-search-mcp:latest"
      ]
    }
  }
}

Environment Variables for Client Configuration

Configure the server behavior through environment variables:

Variable Description Default Example
CACHE_TTL Cache time-to-live in milliseconds 300000 600000
CACHE_MAX_SIZE Maximum number of cached entries 1000 2000
DEFAULT_SEARCH_LIMIT Default number of search results 50 100
FUZZY_THRESHOLD Default fuzzy search threshold (0.0-1.0) 0.3 0.5
LOG_LEVEL Logging verbosity info debug
NODE_ENV Environment mode production development

Connection Verification

After configuring your MCP client, verify the connection:

  1. Check Server Status: The server should appear in your MCP client's server list
  2. Test Basic Tool: Try the list_libraries tool to verify connectivity
  3. Check Logs: Look for connection messages in the client logs

Troubleshooting

Common Issues

Server Not Starting

# Check if the package is installed
npm list -g icon-search-mcp

# Reinstall if needed
npm install -g icon-search-mcp

Permission Errors

# On Unix systems, ensure proper permissions
chmod +x $(which icon-search-mcp)

Icon Index Missing

# Build the icon index
cd /path/to/icon-search-mcp
npm run build-icons

Debug Mode

Enable debug logging for troubleshooting:

{
  "mcpServers": {
    "icon-search": {
      "command": "npx",
      "args": ["icon-search-mcp"],
      "env": {
        "LOG_LEVEL": "debug",
        "NODE_ENV": "development"
      }
    }
  }
}

Connection Testing

Test the server manually:

# Start the server directly
npx icon-search-mcp

# Or with debug output
LOG_LEVEL=debug npx icon-search-mcp

Advanced Configuration

Custom Icon Libraries

Configure additional icon libraries by setting up the icon index:

# Add custom libraries to package.json dependencies
npm install custom-icon-library

# Rebuild the icon index
npm run build-icons

Performance Tuning

For high-performance scenarios:

{
  "env": {
    "CACHE_TTL": "1800000",
    "CACHE_MAX_SIZE": "5000",
    "DEFAULT_SEARCH_LIMIT": "100",
    "FUZZY_THRESHOLD": "0.2"
  }
}

Memory Optimization

For memory-constrained environments:

{
  "env": {
    "CACHE_MAX_SIZE": "500",
    "DEFAULT_SEARCH_LIMIT": "25",
    "NODE_OPTIONS": "--max-old-space-size=512"
  }
}

📖 API Reference

Available Tools

search_icons

Search for icons by name across all or specific libraries with fuzzy matching.

Parameters:

  • query (string, required): Search term for icon names
  • libraries (string[], optional): Specific libraries to search in
  • fuzzy (boolean, optional): Enable fuzzy search (default: true)
  • limit (number, optional): Maximum results to return (default: 10)
  • threshold (number, optional): Fuzzy search threshold 0.0-1.0 (default: 0.3)
  • includeScore (boolean, optional): Include match scores (default: true)

Example:

{
  "query": "home",
  "libraries": ["bootstrap-icons", "feather"],
  "fuzzy": true,
  "limit": 20,
  "threshold": 0.3
}

Response:

{
  "query": "home",
  "results": [
    {
      "item": {
        "name": "house",
        "library": "bootstrap-icons",
        "tags": ["house", "home", "building"],
        "style": "regular",
        "path": "node_modules/bootstrap-icons/icons/house.svg",
        "categories": ["navigation"],
        "size": "16x16"
      },
      "score": 0.0
    }
  ],
  "totalResults": 15,
  "searchType": "fuzzy",
  "executionTime": 45,
  "libraries": ["bootstrap-icons", "feather"]
}

get_icon

Get detailed information about a specific icon.

Parameters:

  • id (string, required): Unique identifier of the icon
  • library (string, required): Library name where the icon is located

Example:

{
  "id": "house",
  "library": "bootstrap-icons"
}

list_libraries

Get a list of all available icon libraries.

Parameters: None

Response:

{
  "libraries": ["bootstrap-icons", "feather", "octicons", "lucide", "tabler-icons"],
  "count": 5
}

get_library_info

Get detailed information about a specific library.

Parameters:

  • library (string, required): Name of the library

Response:

{
  "name": "bootstrap-icons",
  "displayName": "Bootstrap Icons",
  "description": "Official open source SVG icon library for Bootstrap",
  "version": "1.11.3",
  "iconCount": 1800,
  "categories": ["navigation", "communication", "media", "ui"],
  "styles": ["regular"],
  "isAvailable": true
}

search_by_category

Find icons by category or tag with fuzzy matching.

Parameters:

  • category (string, required): Category name to search for
  • libraries (string[], optional): Specific libraries to search in
  • fuzzy (boolean, optional): Enable fuzzy search (default: true)
  • limit (number, optional): Maximum results to return (default: 10)

🏗️ Architecture

Core Components

src/
├── index.ts                 # Main MCP server entry point
├── providers/               # Icon provider implementations
│   ├── icon-provider.interface.ts
│   ├── base-npm-provider.ts
│   ├── heroicons.provider.ts
│   ├── bootstrap-icons.provider.ts
│   ├── feather.provider.ts
│   ├── octicons.provider.ts
│   ├── lucide.provider.ts
│   ├── simple-icons.provider.ts
│   └── tabler-icons.provider.ts
├── services/               # Core services
│   ├── search.service.ts   # Unified search service
│   └── cache.service.ts    # Caching service
├── tools/                  # MCP tools
│   └── index.ts           # Icon search tools
├── types/                  # TypeScript type definitions
│   └── index.ts
└── utils/                  # Utility functions
    └── errors.ts

Provider System

The provider system allows easy addition of new icon libraries:

export abstract class IconProvider {
  abstract initialize(): Promise<void>;
  abstract searchIcons(query: string, options?: FuseSearchOptions): Promise<FuseResult<Icon>[]>;
  abstract getIcon(id: string): Promise<Icon | null>;
  abstract getAllIcons(): Promise<Icon[]>;
  abstract getInfo(): Promise<IconLibrary>;
}

Search Service

The search service provides unified search across all providers:

  • Fuzzy Search: Powered by Fuse.js with configurable thresholds
  • Caching: Intelligent caching with TTL and LRU eviction
  • Filtering: Advanced filtering by library, style, category, and tags
  • Performance: Optimized for fast response times

🧪 Testing

# Run all tests
npm test

# Run tests with coverage
npm run test:coverage

# Run integration tests
npm run test:integration

# Run performance tests
npm run test:performance

🔧 Development

Setup Development Environment

git clone https://github.com/your-org/icon-search-mcp.git
cd icon-search-mcp
npm install

# Install icon library dependencies
npm install

# Build the project
npm run build

# Start in development mode
npm run dev

Adding New Icon Libraries

  1. Add the library as an NPM dependency:
npm install new-icon-library
  1. Create a provider class extending BaseNpmProvider:
export class NewLibraryProvider extends BaseNpmProvider {
  constructor() {
    super('new-library', 'New Library', '1.0.0', 'new-icon-library', ['icons/*.svg']);
  }

  protected getDescription(): string {
    return 'Description of the new library';
  }

  protected getSourceUrl(): string {
    return 'https://github.com/library/icons';
  }

  protected getLicense(): string {
    return 'MIT';
  }
}
  1. Register the provider in src/providers/index.ts:
registry.register(new NewLibraryProvider());
  1. Add the library configuration to scripts/build-index.js:
'new-icon-library': {
  name: 'new-library',
  displayName: 'New Library',
  description: 'Description of the new library',
  sourceUrl: 'https://github.com/library/icons',
  license: 'MIT',
  iconPaths: ['icons/*.svg'],
  styles: ['regular'],
}

Code Style

  • TypeScript: Strict mode enabled
  • ESLint: Configured with TypeScript rules
  • Prettier: Consistent code formatting
  • Husky: Pre-commit hooks for quality checks

📊 Performance

  • Search Speed: < 100ms for most queries with caching
  • Memory Usage: Efficient memory management with LRU caching
  • Scalability: Supports thousands of icons across multiple libraries
  • Fuzzy Search: Optimized Fuse.js configuration for best performance

🔒 Security

  • Input Validation: All inputs validated with Zod schemas
  • Output Sanitization: Safe handling of SVG content
  • Error Handling: Comprehensive error handling without information leakage
  • Dependencies: Regular security audits and updates

🤝 Contributing

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

Development Guidelines

  • Write tests for new features
  • Follow TypeScript best practices
  • Update documentation for API changes
  • Ensure all CI checks pass

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Fuse.js for powerful fuzzy search capabilities
  • Model Context Protocol for the standard protocol
  • All the icon library maintainers for their amazing work

📞 Support


Made with ❤️ for the developer community

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选