Specialized AI Search Tools

Specialized AI Search Tools

Provides specialized search capabilities across e-commerce platforms, scientific publications, code repositories, social media, and general web with advanced filtering, including product comparison, research aggregation, and developer tool discovery.

Category
访问服务器

README

🤖 MCP Server - Specialized AI Search Tools

Zaawansowany Model Context Protocol (MCP) Server z wyspecjalizowanymi narzędziami wyszukiwania dla agentów AI, zbudowany w Node.js i TypeScript.

🚀 Implementation Status

✅ Phase 1: Core Infrastructure (COMPLETED)

  • ✅ MCP Server setup with STDIO transport
  • ✅ BaseTool class with Zod validation
  • ✅ Logging system
  • ✅ TypeScript configuration
  • ✅ Development environment (ESLint, Prettier)

✅ Phase 2: Basic Search Tools (COMPLETED)

  • WebSearchTool - Search with DuckDuckGo, Brave, Google, Bing
  • WebFetchTool - Fetch and parse HTML content
  • TypeConversionTool - Convert between JSON, XML, YAML, CSV, TOML
  • ⏳ Unit tests (pending)

⏸️ Phase 3: Specialized Search Tools (PLANNED)

  • ⏸️ E-commerce search (Amazon, eBay, Allegro, AliExpress, Etsy)
  • ⏸️ Scientific publications (arXiv, PubMed, Google Scholar, IEEE)
  • ⏸️ Code repositories (GitHub, GitLab, npm, PyPI, Docker Hub)
  • ⏸️ Social media (Twitter/X, Reddit, LinkedIn, YouTube, Hacker News)

⏸️ Phase 4: Advanced Features (PLANNED)

  • ⏸️ Multi-layer caching (L1/L2/L3)
  • ⏸️ Request optimization and deduplication
  • ⏸️ Rate limiting and circuit breaker
  • ⏸️ Data aggregation and ranking

📖 O Model Context Protocol (MCP)

Czym jest MCP?

Model Context Protocol (MCP) to otwarty standard wprowadzony przez Anthropic, który standaryzuje sposób, w jaki aplikacje AI komunikują się z zewnętrznymi narzędziami, usługami i źródłami danych. MCP eliminuje potrzebę tworzenia dedykowanych integracji dla każdego narzędzia, oferując uniwersalny protokół komunikacji.

Kluczowe Założenia Projektowe

  1. Standardyzacja Integracji: MCP zapewnia jednolity sposób łączenia AI z różnymi systemami, eliminując fragmentację w ekosystemie AI
  2. Modularność: Serwery MCP są niezależnymi modułami, które można łatwo dodawać, usuwać i konfigurować
  3. Bezpieczeństwo: Protokół został zaprojektowany z myślą o bezpieczeństwie, z kontrolą dostępu i walidacją danych
  4. Elastyczność: Obsługa różnych transportów (STDIO, HTTP+SSE) i formatów danych
  5. Open Source: Otwarty standard dostępny dla wszystkich, promujący interoperacyjność

Architektura MCP

MCP składa się z trzech głównych komponentów:

1. Tools (Narzędzia)

Funkcje, które AI może wywołać do wykonania konkretnych akcji:

  • Definicja: Każde narzędzie ma nazwę, opis i schemat parametrów (JSON Schema)
  • Wykonanie: Narzędzie przyjmuje parametry i zwraca wynik
  • Przykłady: Wyszukiwanie w bazie danych, wysyłanie emaili, wykonywanie obliczeń

2. Resources (Zasoby)

Dane, do których AI może uzyskać dostęp:

  • Definicja: Zasób ma URI, nazwę, opis i typ MIME
  • Dostęp: AI może odczytać zawartość zasobu na żądanie
  • Przykłady: Pliki w systemie, wpisy w bazie danych, dokumenty w chmurze

3. Prompts (Prompty)

Szablony promptów, które AI może wykorzystać:

  • Definicja: Prompt ma nazwę, opis i opcjonalne argumenty
  • Użycie: AI może wywołać prompt z argumentami, aby wygenerować gotowy prompt
  • Przykłady: Szablony do code review, generowania dokumentacji, analizy danych

Jak Działa MCP?

┌─────────────┐         ┌──────────────┐         ┌─────────────┐
│  AI Client  │◄──────►│  MCP Server  │◄──────►│  External   │
│ (Claude,    │  MCP   │  (This       │  API   │  Services   │
│  Cursor)    │Protocol│  Project)    │ Calls  │  (APIs, DB) │
└─────────────┘         └──────────────┘         └─────────────┘
  1. Inicjalizacja: Klient AI łączy się z serwerem MCP przez wybrany transport (STDIO/HTTP+SSE)
  2. Odkrywanie: Klient pobiera listę dostępnych narzędzi, zasobów i promptów
  3. Użycie: AI wywołuje narzędzia lub odczytuje zasoby w odpowiedzi na zapytania użytkownika
  4. Wyniki: Serwer MCP wykonuje operacje i zwraca wyniki do klienta AI

Transporty MCP

  • STDIO (Standard Input/Output): Dla lokalnych integracji, proces komunikuje się przez stdin/stdout
  • HTTP+SSE (Server-Sent Events): Dla zdalnych serwerów, komunikacja przez HTTP z SSE dla strumieniowania
  • WebSocket: (Planowane) Dla aplikacji webowych wymagających dwukierunkowej komunikacji

Zalety MCP

Uniwersalność: Jeden protokół dla wszystkich integracji
Bezpieczeństwo: Kontrola dostępu i walidacja na poziomie protokołu
Skalowalność: Łatwe dodawanie nowych narzędzi bez modyfikacji klienta
Interoperacyjność: Różne klienty AI mogą używać tych samych serwerów MCP
Modularność: Każdy serwer MCP jest niezależnym modułem funkcjonalności


✨ Wyspecjalizowane Narzędzia Wyszukiwania

🛒 E-commerce Search

Wyszukiwanie produktów w popularnych sklepach internetowych:

  • Obsługiwane platformy: Amazon, eBay, Allegro, AliExpress, Etsy
  • Filtry:
    • 💰 Zakres cenowy (min-max)
    • ⭐ Oceny (minimalna ocena, liczba opinii)
    • 🚚 Dostępność i opcje wysyłki
    • 🏷️ Kategorie produktów
    • 🌍 Region sprzedawcy
    • 📦 Stan produktu (nowy, używany, odnowiony)
  • Sortowanie: cena, popularność, oceny, data dodania
  • Zwraca: tytuł, cena, ocena, link, zdjęcie, dostępność

🔬 Scientific Publications Search

Wyszukiwanie publikacji naukowych i artykułów badawczych:

  • Obsługiwane bazy: arXiv, PubMed, Google Scholar, IEEE Xplore, ResearchGate
  • Filtry:
    • 📅 Zakres dat publikacji
    • 🏫 Afiliacja autorów
    • 📄 Typ publikacji (artykuł, konferencja, preprint)
    • 🔬 Dziedzina nauki
    • 📊 Liczba cytowań (minimum)
    • 🌐 Język publikacji
  • Sortowanie: relevancja, data, cytowania
  • Zwraca: tytuł, autorzy, abstrakt, DOI, PDF link, cytowania

💻 Hosting & Repositories Search

Wyszukiwanie kodu, pakietów i zasobów deweloperskich:

  • Obsługiwane platformy: GitHub, GitLab, npm, PyPI, Docker Hub, Maven Central
  • Filtry:
    • 💻 Język programowania
    • ⭐ Minimalna liczba gwiazdek/pobrań
    • 📅 Ostatnia aktualizacja (aktywność projektu)
    • 📜 Licencja (MIT, Apache, GPL, itp.)
    • 🏷️ Tagi i tematy
    • 👥 Liczba kontrybutorów
  • Sortowanie: gwiazdki, forki, ostatnia aktualizacja, relevancja
  • Zwraca: nazwa, opis, autor, gwiazdki, język, licencja, link

📱 Social Media Search

Wyszukiwanie treści w mediach społecznościowych:

  • Obsługiwane platformy: Twitter/X, Reddit, LinkedIn, YouTube, Hacker News
  • Filtry:
    • 📅 Zakres czasowy (ostatnia godzina, dzień, tydzień, miesiąc)
    • 🌍 Język i lokalizacja
    • 👤 Autor/kanał
    • 💬 Minimalna liczba interakcji (lajki, komentarze, udostępnienia)
    • 🏷️ Hashtagi i słowa kluczowe
    • 📊 Typ treści (tekst, obraz, wideo, link)
  • Sortowanie: popularność, data, relevancja
  • Zwraca: treść, autor, data, interakcje, link, media

🌐 General Web Search

Uniwersalne wyszukiwanie w internecie:

  • Obsługiwane silniki: Google, Bing, DuckDuckGo, Brave Search
  • Filtry:
    • 📄 Formaty plików (PDF, DOCX, XLSX, CSV, JSON, XML, PPT)
    • 🌍 Język i region
    • 📅 Zakres dat
    • 🔒 SafeSearch
    • 🌐 Domena (np. tylko .edu, .gov)
    • 📍 Dokładna fraza vs. podobne wyniki
  • Sortowanie: relevancja, data
  • Zwraca: tytuł, URL, snippet, data publikacji, typ pliku

🔧 Dodatkowe Funkcjonalności

🌐 WebFetch Tool

Pobieranie i parsowanie treści stron internetowych:

  • Pobieranie HTML z dowolnego URL
  • Parsowanie z wykorzystaniem Cheerio
  • Ekstrakcja: tekst, nagłówki, linki, metadane, obrazy
  • Obsługa selektorów CSS
  • Timeout i error handling
  • User-agent customization

[!NOTE] Alternatywa: Firecrawl Integration Rozważ użycie Firecrawl jako zaawansowanej alternatywy lub uzupełnienia dla WebFetch. Zobacz sekcję Firecrawl Integration poniżej.

🔄 Type Conversion Tools

Konwersja między różnymi formatami danych:

  • Obsługiwane formaty: JSON, XML, YAML, CSV, TOML
  • Konwersje: JSON ↔ XML ↔ YAML ↔ CSV ↔ TOML
  • Pretty printing i minification
  • Walidacja struktury danych
  • Obsługa zagnieżdżonych struktur

📊 Data Aggregation

Agregacja wyników z wielu źródeł:

  • Równoległe wyszukiwanie w wielu platformach
  • Deduplikacja wyników
  • Normalizacja formatów odpowiedzi
  • Ranking i sortowanie zagregowanych wyników
  • Statystyki i podsumowania

🛠️ Extensible Architecture

Łatwe dodawanie własnych narzędzi:

  • Bazowa klasa BaseTool z wspólną logiką
  • Automatyczna walidacja z Zod
  • Centralna rejestracja narzędzi
  • Standardowy error handling
  • Plugin system dla nowych źródeł danych

⚡ Cache'owanie i Optymalizacja Zapytań

Strategie Cache'owania

1. Multi-Layer Caching

  • L1 Cache (In-Memory): Szybki dostęp do często używanych wyników (node-cache/lru-cache)
  • L2 Cache (Redis): Dzielony cache między instancjami serwera
  • L3 Cache (HTTP Cache Headers): Wykorzystanie cache'u przeglądarki/CDN

2. Cache Patterns

  • Cache-Aside (Lazy Loading): Aplikacja sprawdza cache, jeśli brak - pobiera z API i zapisuje
  • Write-Through: Zapis do cache i API jednocześnie
  • Stale-While-Revalidate: Zwracanie przestarzałych danych podczas aktualizacji w tle
  • Time-Based Invalidation: Automatyczne wygaszanie po określonym czasie (TTL)
  • Tag-Based Invalidation: Inwalidacja po tagach dla precyzyjnej kontroli

3. Request Optimization

  • Request Deduplication: Grupowanie identycznych równoległych żądań
  • Batching: Łączenie wielu zapytań w jedno żądanie (gdy API wspiera)
  • Pagination: Pobieranie danych w mniejszych porcjach
  • Field Filtering: Pobieranie tylko wymaganych pól z API

4. Rate Limiting & Circuit Breaker

  • Token Bucket: Kontrola przepustowości z tokenami
  • Sliding Window: Ograniczenie liczby żądań w oknie czasowym
  • Circuit Breaker: Automatyczne wyłączanie usługi przy błędach
  • Exponential Backoff: Stopniowe zwiększanie opóźnień przy ponawianiu

5. Monitoring & Metrics

  • Cache hit/miss ratio
  • API response times
  • Rate limit usage tracking
  • Error rates per API endpoint
  • Queue depth monitoring

📚 Dokumentacja Funkcjonalności i Przykłady

🎯 Scenariusze Użycia

Scenariusz 1: Research Assistant

Cel: Pomoc w badaniach naukowych poprzez agregację informacji z wielu źródeł

Przepływ:

  1. Użytkownik: "Znajdź najnowsze publikacje o quantum computing"
  2. AI wywołuje scientific_publications_search z parametrami:
    {
      query: "quantum computing",
      database: "arxiv",
      dateFrom: "2024-01-01",
      sortBy: "date"
    }
    
  3. AI następnie wywołuje repositories_search:
    {
      query: "quantum computing implementation",
      platform: "github",
      language: "python",
      minStars: 100
    }
    
  4. AI agreguje wyniki i generuje podsumowanie

Wartość: Automatyczna agregacja informacji z różnych źródeł w jednym miejscu

Scenariusz 2: Product Research & Comparison

Cel: Porównanie produktów z różnych platform e-commerce

Przepływ:

  1. Użytkownik: "Porównaj ceny iPhone 15 Pro na różnych platformach"
  2. AI równolegle wywołuje narzędzia dla każdej platformy:
    • ecommerce_search (platform: "amazon")
    • ecommerce_search (platform: "ebay")
    • ecommerce_search (platform: "allegro")
  3. AI agreguje wyniki, normalizuje formaty i porównuje ceny
  4. Zwraca tabelę porównawczą z najlepszymi ofertami

Wartość: Oszczędność czasu na ręcznym przeszukiwaniu wielu sklepów

Scenariusz 3: Developer Tool Discovery

Cel: Znalezienie odpowiednich bibliotek i narzędzi dla projektu

Przepływ:

  1. Użytkownik: "Znajdź biblioteki do walidacji danych w TypeScript"
  2. AI wywołuje repositories_search:
    {
      query: "data validation",
      platform: "github",
      language: "typescript",
      minStars: 500,
      sortBy: "stars"
    }
    
  3. AI następnie używa webfetch do pobrania dokumentacji najlepszych wyników
  4. Zwraca listę z opisami, ocenami i linkami do dokumentacji

Wartość: Szybkie znalezienie sprawdzonych narzędzi

📋 Szczegółowa Dokumentacja Narzędzi

🛒 E-commerce Search Tool

Funkcjonalność: Wyszukiwanie produktów w popularnych sklepach internetowych z zaawansowanymi filtrami

Parametry wejściowe:

interface EcommerceSearchParams {
  query: string;              // Fraza wyszukiwania
  platform: 'amazon' | 'ebay' | 'allegro' | 'alexpress' | 'etsy';
  priceMin?: number;          // Minimalna cena
  priceMax?: number;          // Maksymalna cena
  minRating?: number;         // Minimalna ocena (1-5)
  minReviews?: number;         // Minimalna liczba opinii
  category?: string;          // Kategoria produktu
  region?: string;            // Region (kod kraju)
  condition?: 'new' | 'used' | 'refurbished';
  sortBy?: 'price' | 'rating' | 'popularity' | 'date';
  limit?: number;             // Maksymalna liczba wyników (domyślnie 10)
}

Format odpowiedzi:

interface EcommerceSearchResult {
  platform: string;
  totalResults: number;
  results: Array<{
    title: string;
    price: number;
    currency: string;
    rating: number;
    reviewCount: number;
    url: string;
    imageUrl?: string;
    availability: 'in_stock' | 'out_of_stock' | 'limited';
    shippingInfo?: string;
  }>;
}

Przykład użycia:

// Wywołanie przez AI
{
  query: "laptop gaming",
  platform: "allegro",
  priceMin: 2000,
  priceMax: 5000,
  minRating: 4.5,
  minReviews: 10,
  sortBy: "rating"
}

🔬 Scientific Publications Search Tool

Funkcjonalność: Wyszukiwanie publikacji naukowych w bazach danych z filtrowaniem po datach, autorach i cytowaniach

Parametry wejściowe:

interface ScientificSearchParams {
  query: string;
  database: 'arxiv' | 'pubmed' | 'scholar' | 'ieee' | 'researchgate';
  dateFrom?: string;          // Format: YYYY-MM-DD
  dateTo?: string;            // Format: YYYY-MM-DD
  authorAffiliation?: string; // Afiliacja autora
  publicationType?: 'article' | 'conference' | 'preprint';
  field?: string;             // Dziedzina nauki
  minCitations?: number;      // Minimalna liczba cytowań
  language?: string;           // Kod języka (ISO 639-1)
  sortBy?: 'relevance' | 'date' | 'citations';
  limit?: number;
}

Format odpowiedzi:

interface ScientificSearchResult {
  database: string;
  totalResults: number;
  results: Array<{
    title: string;
    authors: string[];
    abstract: string;
    doi?: string;
    pdfUrl?: string;
    publicationDate: string;
    citationCount: number;
    journal?: string;
    keywords?: string[];
  }>;
}

💻 Repositories Search Tool

Funkcjonalność: Wyszukiwanie projektów, bibliotek i pakietów w repozytoriach kodu

Parametry wejściowe:

interface RepositorySearchParams {
  query: string;
  platform: 'github' | 'gitlab' | 'npm' | 'pypi' | 'docker' | 'maven';
  language?: string;          // Język programowania
  minStars?: number;          // Minimalna liczba gwiazdek
  minDownloads?: number;      // Minimalna liczba pobrań (dla npm/pypi)
  lastUpdated?: string;       // Ostatnia aktualizacja po dacie
  license?: string;           // Typ licencji (MIT, Apache, GPL, etc.)
  topics?: string[];          // Tagi/tematy
  minContributors?: number;   // Minimalna liczba kontrybutorów
  sortBy?: 'stars' | 'forks' | 'updated' | 'relevance';
  limit?: number;
}

Format odpowiedzi:

interface RepositorySearchResult {
  platform: string;
  totalResults: number;
  results: Array<{
    name: string;
    description: string;
    author: string;
    stars: number;
    forks: number;
    language: string;
    license?: string;
    url: string;
    lastUpdated: string;
    topics?: string[];
  }>;
}

📱 Social Media Search Tool

Funkcjonalność: Wyszukiwanie treści w mediach społecznościowych z filtrowaniem po czasie i popularności

Parametry wejściowe:

interface SocialMediaSearchParams {
  query: string;
  platform: 'twitter' | 'reddit' | 'linkedin' | 'youtube' | 'hackernews';
  timeRange?: 'hour' | 'day' | 'week' | 'month' | 'year';
  language?: string;
  author?: string;            // Nazwa użytkownika/kanału
  minInteractions?: number;   // Minimalna liczba lajków/komentarzy
  hashtags?: string[];        // Hashtagi
  contentType?: 'text' | 'image' | 'video' | 'link';
  sortBy?: 'popularity' | 'date' | 'relevance';
  limit?: number;
}

🌐 General Web Search Tool

Funkcjonalność: Uniwersalne wyszukiwanie w internecie z filtrowaniem po typach plików i domenach

Parametry wejściowe:

interface WebSearchParams {
  query: string;
  engine: 'google' | 'bing' | 'duckduckgo' | 'brave';
  fileType?: 'pdf' | 'docx' | 'xlsx' | 'csv' | 'json' | 'xml' | 'ppt';
  language?: string;
  region?: string;
  dateFrom?: string;
  dateTo?: string;
  domain?: string;            // np. ".edu", ".gov"
  exactPhrase?: boolean;      // Dokładna fraza vs. podobne wyniki
  safeSearch?: boolean;
  sortBy?: 'relevance' | 'date';
  limit?: number;
}

🔄 Type Conversion Tool

Funkcjonalność: Konwersja między różnymi formatami danych (JSON, XML, YAML, CSV, TOML)

Przykład użycia:

// Konwersja JSON do YAML
{
  inputFormat: "json",
  outputFormat: "yaml",
  data: '{"name": "test", "value": 123}',
  prettyPrint: true
}

🌐 WebFetch Tool

Funkcjonalność: Pobieranie i parsowanie treści stron internetowych

Parametry:

interface WebFetchParams {
  url: string;
  selector?: string;          // CSS selector dla ekstrakcji fragmentu
  extractImages?: boolean;
  extractLinks?: boolean;
  timeout?: number;           // Timeout w sekundach
}

Format odpowiedzi:

interface WebFetchResult {
  url: string;
  title?: string;
  text: string;
  html?: string;
  metadata?: {
    description?: string;
    keywords?: string[];
    author?: string;
  };
  images?: string[];
  links?: string[];
}

🔧 Development

Struktura projektu

mcp-server/
├── src/
│   ├── index.ts              # Entry point
│   ├── server.ts             # MCP Server setup
│   ├── tools/                # Narzędzia wyszukiwania
│   │   ├── index.ts          # Eksport wszystkich narzędzi
│   │   ├── base.ts           # Bazowa klasa
│   │   ├── ecommerce/        # E-commerce search tools
│   │   │   ├── amazon.ts
│   │   │   ├── ebay.ts
│   │   │   └── allegro.ts
│   │   ├── scientific/       # Scientific search tools
│   │   │   ├── arxiv.ts
│   │   │   ├── pubmed.ts
│   │   │   └── scholar.ts
│   │   ├── repositories/     # Code repository tools
│   │   │   ├── github.ts
│   │   │   ├── npm.ts
│   │   │   └── pypi.ts
│   │   ├── social/           # Social media tools
│   │   │   ├── twitter.ts
│   │   │   ├── reddit.ts
│   │   │   └── youtube.ts
│   │   ├── websearch.ts      # General web search
│   │   ├── webfetch.ts       # Web scraping
│   │   └── conversion.ts     # Type conversion
│   ├── types/                # TypeScript types
│   └── utils/                # Utilities
│       ├── logger.ts
│       ├── cache.ts
│       └── validators.ts
├── tests/                    # Testy
├── examples/                 # Przykłady konfiguracji
└── dist/                     # Skompilowany kod

Skrypty npm

# Development
npm run dev          # Uruchomienie w trybie dev (watch mode)
npm run build        # Build produkcyjny
npm start            # Uruchomienie serwera

# Testing
npm test             # Uruchomienie testów
npm run test:watch   # Testy w trybie watch
npm run test:coverage # Coverage report

# Linting
npm run lint         # ESLint check
npm run lint:fix     # ESLint auto-fix
npm run format       # Prettier formatting

Dodawanie nowego źródła wyszukiwania

  1. Utwórz nowy plik w odpowiednim katalogu, np. src/tools/ecommerce/shopify.ts:
import { z } from 'zod';
import { BaseTool } from '../base.js';

const ShopifySearchSchema = z.object({
  query: z.string().describe('Search query'),
  priceMin: z.number().optional().describe('Minimum price'),
  priceMax: z.number().optional().describe('Maximum price'),
  limit: z.number().default(10).describe('Number of results'),
});

export class ShopifySearchTool extends BaseTool {
  name = 'ecommerce_shopify';
  description = 'Search for products on Shopify stores';
  schema = ShopifySearchSchema;

  async execute(params: z.infer<typeof ShopifySearchSchema>) {
    // Implementacja wyszukiwania w Shopify
    const results = await this.searchShopify(params);
    return {
      platform: 'shopify',
      results,
    };
  }

  private async searchShopify(params: any) {
    // Logika API call do Shopify
  }
}
  1. Zarejestruj w src/tools/index.ts:
import { ShopifySearchTool } from './ecommerce/shopify.js';

export const tools = [
  // ... existing tools
  new ShopifySearchTool(),
];

Implementacja Cache'owania

Przykład: Multi-Layer Cache z keyv

// src/utils/cache.ts
import Keyv from 'keyv';
import KeyvRedis from '@keyv/redis';
import { LRUCache } from 'lru-cache';

// L1: In-memory LRU cache (szybki dostęp)
const l1Cache = new LRUCache<string, any>({
  max: 500, // maksymalna liczba wpisów
  ttl: 1000 * 60 * 5, // 5 minut TTL
});

// L2: Redis cache (współdzielony między instancjami)
const l2Cache = new Keyv({
  store: new KeyvRedis(process.env.REDIS_URL),
  ttl: 1000 * 60 * 30, // 30 minut TTL
});

export class CacheManager {
  async get<T>(key: string): Promise<T | undefined> {
    // Sprawdź L1 cache
    const l1Value = l1Cache.get(key);
    if (l1Value !== undefined) {
      return l1Value as T;
    }

    // Sprawdź L2 cache
    const l2Value = await l2Cache.get(key);
    if (l2Value !== undefined) {
      // Promuj do L1
      l1Cache.set(key, l2Value);
      return l2Value as T;
    }

    return undefined;
  }

  async set(key: string, value: any, ttl?: number): Promise<void> {
    // Zapisz w obu warstwach
    l1Cache.set(key, value, { ttl: ttl || 1000 * 60 * 5 });
    await l2Cache.set(key, value, ttl);
  }

  async invalidate(pattern: string): Promise<void> {
    // Inwalidacja po wzorcu (dla tag-based invalidation)
    // Implementacja zależy od używanego store
  }
}

Przykład: Request Deduplication

// src/utils/request-deduplication.ts
import { CacheManager } from './cache.js';

class RequestDeduplicator {
  private pendingRequests = new Map<string, Promise<any>>();

  async deduplicate<T>(
    key: string,
    requestFn: () => Promise<T>
  ): Promise<T> {
    // Sprawdź czy żądanie jest już w trakcie
    const pending = this.pendingRequests.get(key);
    if (pending) {
      return pending;
    }

    // Utwórz nowe żądanie
    const promise = requestFn().finally(() => {
      // Usuń z mapy po zakończeniu
      this.pendingRequests.delete(key);
    });

    this.pendingRequests.set(key, promise);
    return promise;
  }
}

Przykład: Rate Limiting z bottleneck

// src/utils/rate-limiter.ts
import Bottleneck from 'bottleneck';

// Rate limiter per API endpoint
const rateLimiters = new Map<string, Bottleneck>();

export function getRateLimiter(
  apiName: string,
  maxConcurrent: number = 5,
  minTime: number = 1000
): Bottleneck {
  if (!rateLimiters.has(apiName)) {
    rateLimiters.set(
      apiName,
      new Bottleneck({
        maxConcurrent,
        minTime, // minimum time between requests (ms)
        reservoir: 100, // initial number of requests
        reservoirRefreshAmount: 100,
        reservoirRefreshInterval: 60 * 1000, // refresh every minute
      })
    );
  }
  return rateLimiters.get(apiName)!;
}

Przykład: Circuit Breaker Pattern

// src/utils/circuit-breaker.ts
enum CircuitState {
  CLOSED = 'CLOSED',
  OPEN = 'OPEN',
  HALF_OPEN = 'HALF_OPEN',
}

export class CircuitBreaker {
  private state = CircuitState.CLOSED;
  private failures = 0;
  private lastFailureTime = 0;

  constructor(
    private threshold: number = 5,
    private timeout: number = 60000 // 1 minute
  ) {}

  async execute<T>(fn: () => Promise<T>): Promise<T> {
    if (this.state === CircuitState.OPEN) {
      if (Date.now() - this.lastFailureTime > this.timeout) {
        this.state = CircuitState.HALF_OPEN;
      } else {
        throw new Error('Circuit breaker is OPEN');
      }
    }

    try {
      const result = await fn();
      this.onSuccess();
      return result;
    } catch (error) {
      this.onFailure();
      throw error;
    }
  }

  private onSuccess() {
    this.failures = 0;
    this.state = CircuitState.CLOSED;
  }

  private onFailure() {
    this.failures++;
    this.lastFailureTime = Date.now();

    if (this.failures >= this.threshold) {
      this.state = CircuitState.OPEN;
    }
  }
}

Przykład: Integracja z BaseTool

// src/tools/base.ts (rozszerzenie)
import { CacheManager } from '../utils/cache.js';
import { RequestDeduplicator } from '../utils/request-deduplication.js';
import { getRateLimiter } from '../utils/rate-limiter.js';
import { CircuitBreaker } from '../utils/circuit-breaker.js';

export abstract class BaseTool {
  protected cache = new CacheManager();
  protected deduplicator = new RequestDeduplicator();
  protected circuitBreaker = new CircuitBreaker();

  protected async executeWithCache<T>(
    cacheKey: string,
    apiCall: () => Promise<T>,
    ttl?: number
  ): Promise<T> {
    // Sprawdź cache
    const cached = await this.cache.get<T>(cacheKey);
    if (cached !== undefined) {
      return cached;
    }

    // Request deduplication
    const result = await this.deduplicator.deduplicate(
      cacheKey,
      async () => {
        // Rate limiting
        const limiter = getRateLimiter(this.name);
        return limiter.schedule(async () => {
          // Circuit breaker
          return this.circuitBreaker.execute(apiCall);
        });
      }
    );

    // Zapisz w cache
    await this.cache.set(cacheKey, result, ttl);
    return result;
  }
}

🧪 Testing

# Wszystkie testy
npm test

# Testy dla konkretnej kategorii
npm test -- ecommerce
npm test -- scientific

# Coverage
npm run test:coverage

🏗️ Architektura Projektu

Założenia Architektoniczne

  1. Modularność: Każde narzędzie wyszukiwania jest niezależnym modułem, łatwym do dodania/usunięcia
  2. Walidacja Schematów: Wszystkie parametry narzędzi są walidowane przez Zod przed wykonaniem
  3. Error Handling: Centralny system obsługi błędów z informatywnymi komunikatami
  4. Multi-Layer Caching: Inteligentne cachowanie wyników wyszukiwań w wielu warstwach (L1: in-memory, L2: Redis) dla poprawy wydajności
  5. Request Optimization: Deduplikacja żądań, batching, i paginacja dla minimalizacji wywołań API
  6. Rate Limiting & Resilience: Rate limiting per API, circuit breaker pattern, i exponential backoff retry
  7. Extensibility: Bazowa klasa BaseTool umożliwia łatwe dodawanie nowych narzędzi z automatycznym cache'owaniem

Struktura Komunikacji

┌─────────────────────────────────────────────────────────┐
│                    AI Client (Claude/Cursor)            │
└────────────────────┬────────────────────────────────────┘
                     │ MCP Protocol (JSON-RPC)
                     │
┌────────────────────▼────────────────────────────────────┐
│              MCP Server (This Project)                   │
│  ┌────────────────────────────────────────────────────┐  │
│  │  Tool Registry                                    │  │
│  │  - E-commerce Search Tools                        │  │
│  │  - Scientific Publication Tools                   │  │
│  │  - Repository Search Tools                        │  │
│  │  - Social Media Tools                            │  │
│  │  - Web Search Tools                              │  │
│  └────────────────────────────────────────────────────┘  │
│                     │                                     │
│  ┌──────────────────▼────────────────────────────────┐  │
│  │  BaseTool Abstract Class                          │  │
│  │  - Schema Validation (Zod)                        │  │
│  │  - Error Handling                                 │  │
│  │  - Logging                                        │  │
│  └────────────────────────────────────────────────────┘  │
└────────────────────┬────────────────────────────────────┘
                     │ HTTP/API Calls
                     │
┌────────────────────▼────────────────────────────────────┐
│         External APIs & Services                         │
│  - Google Search API                                    │
│  - Amazon Product API                                   │
│  - GitHub API                                           │
│  - arXiv API                                            │
│  - Twitter API                                          │
│  - ... (20+ services)                                   │
└──────────────────────────────────────────────────────────┘

Wzorce Projektowe

1. Strategy Pattern

Każde narzędzie wyszukiwania implementuje wspólny interfejs BaseTool, ale ma własną strategię wykonania:

abstract class BaseTool {
  abstract name: string;
  abstract description: string;
  abstract schema: ZodSchema;
  abstract execute(params: unknown): Promise<unknown>;
}

2. Factory Pattern

Centralna rejestracja narzędzi w tools/index.ts:

export const tools = [
  new AmazonSearchTool(),
  new GitHubSearchTool(),
  // ... inne narzędzia
];

3. Adapter Pattern

Normalizacja różnych formatów odpowiedzi API do jednolitego formatu MCP:

class SearchResultAdapter {
  normalize(apiResponse: unknown): MCPToolResult {
    // Konwersja do standardowego formatu
  }
}

Przepływ Danych z Cache'owaniem i Optymalizacją

  1. Żądanie od AI: Klient AI wysyła żądanie wywołania narzędzia z parametrami
  2. Walidacja: Parametry są walidowane przez schemat Zod
  3. Cache Check (L1): Sprawdzenie in-memory cache dla szybkiego dostępu
  4. Request Deduplication: Sprawdzenie, czy identyczne żądanie jest już w trakcie przetwarzania
  5. Rate Limiting Check: Weryfikacja limitów dla danego API endpoint
  6. Cache Check (L2): Jeśli L1 miss, sprawdzenie Redis cache
  7. Circuit Breaker Check: Weryfikacja stanu circuit breakera dla API
  8. Wykonanie: Narzędzie wykonuje zapytanie do zewnętrznego API (z retry logic)
  9. Przetwarzanie: Odpowiedź API jest parsowana i normalizowana
  10. Caching: Wynik jest cachowany w L1 i L2 (z TTL i tagami)
  11. Odpowiedź: Znormalizowany wynik jest zwracany do klienta AI
  12. Metrics: Aktualizacja metryk (cache hit/miss, response time, error rate)

Obsługa Błędów

  • Walidacja Parametrów: Błędy walidacji są zwracane przed wykonaniem
  • API Errors: Błędy zewnętrznych API są przechwytywane i konwertowane na format MCP
  • Timeout Protection: Wszystkie żądania mają timeouty, aby uniknąć zawieszenia
  • Retry Logic: Automatyczne ponawianie z exponential backoff i jitter (axios-retry)
  • Circuit Breaker: Automatyczne wyłączanie usługi przy wysokim wskaźniku błędów
  • Fallback to Cache: W przypadku błędów API, zwracanie danych z cache (jeśli dostępne)
  • Graceful Degradation: Stopniowe obniżanie funkcjonalności zamiast całkowitego błędu

🛠️ Tech Stack

Core Technologies

  • Runtime: Node.js 20+ - Najnowsze funkcje ES2023, wydajność i stabilność
  • Language: TypeScript 5.7+ - Type safety, lepsze IDE support, refactoring
  • MCP SDK: @modelcontextprotocol/sdk - Oficjalne SDK dla protokołu MCP

Validation & Schema

  • Zod: Walidacja schematów JSON Schema dla parametrów narzędzi
  • Type Safety: Pełne typowanie TypeScript dla wszystkich komponentów

HTTP & Networking

  • Axios: HTTP client z interceptors, retry logic i error handling
  • axios-retry: Automatyczne ponawianie żądań z konfigurowalnymi strategiami
  • axios-cache-interceptor: Cache interceptor dla Axios z obsługą HTTP cache headers
  • Cheerio: Server-side HTML parsing (jQuery-like API) dla web scraping
  • undici: Wysokowydajny HTTP client (alternatywa dla Axios, natywny w Node.js 18+)

Data Processing

  • xml2js: Parsowanie XML do obiektów JavaScript
  • js-yaml: Parsowanie i generowanie YAML
  • csv-parse: Parsowanie plików CSV

Performance & Caching

  • keyv: Uniwersalny key-value store z adapterami dla Redis, Memcached, MongoDB, PostgreSQL, SQLite
  • cache-manager: Elastyczny system cache'owania z wieloma backendami (Redis, Memcached, memory)
  • node-cache: In-memory caching dla wyników wyszukiwań (lightweight alternative)
  • ioredis: Zaawansowany Redis client z cluster support, pub/sub, pipeline
  • lru-cache: Wysokowydajna implementacja LRU cache z TypeScript support
  • p-limit: Kontrola współbieżności dla równoległych operacji API
  • bottleneck: Zaawansowany rate limiter z queue management
  • axios-retry: Automatyczne ponawianie żądań z exponential backoff

Development Tools

  • Jest: Framework testowy z coverage reports
  • ESLint: Linting kodu z regułami TypeScript
  • Prettier: Automatyczne formatowanie kodu
  • ts-node: TypeScript execution environment dla development

Security & Rate Limiting

  • dotenv: Zarządzanie zmiennymi środowiskowymi
  • helmet: (Planowane) Security headers dla HTTP transport
  • bottleneck: Rate limiting z queue management i priority support
  • p-limit: Kontrola współbieżności i rate limiting dla równoległych operacji
  • express-rate-limit: Rate limiting middleware (dla HTTP transport)

📖 Zasoby

MCP Protocol - Oficjalne Źródła

Open-Source Repozytoria MCP Server

TypeScript/Node.js Implementacje

Flutter/Dart Implementacje (dla integracji z AI Code Box)

Integracja z Flutter/Dart (AI Code Box)

Dla projektu AI Code Box w Flutter, możesz zintegrować ten MCP Server na kilka sposobów:

Opcja 1: HTTP/SSE Transport Uruchom Node.js MCP Server jako osobny proces i połącz się przez HTTP+SSE używając mcp_dart:

import 'package:mcp_dart/mcp_dart.dart';

final client = MCPClient(
  transport: StreamableHTTPTransport(url: 'http://localhost:3000/mcp'),
);
await client.connect();

Opcja 2: Native Dart MCP Server Użyj biblioteki mcp_dart do stworzenia natywnego serwera MCP w Dart, portując narzędzia z tego projektu.

Opcja 3: Bridge Pattern Stwórz bridge między Node.js MCP Server a Flutter aplikacją przez REST API.

Zalecane biblioteki:

  • mcp_dart - Pełne SDK MCP dla Dart
  • mcp_flutter - Flutter-specific MCP toolkit
  • dio - HTTP client dla komunikacji z Node.js serverem

Inne Implementacje

Artykuły i Najlepsze Praktyki

Podstawowe Wprowadzenie do MCP

  • MCP Explained: The New Standard Connecting AI to Everything - Polecany! Kompleksowe wyjaśnienie MCP, jego architektury, komponentów (tools, resources, prompts) oraz jak MCP standaryzuje integrację AI z zewnętrznymi systemami. Artykuł zawiera praktyczne przykłady i case studies.
  • Model Context Protocol (MCP) in AI - Polecany! Szczegółowe omówienie MCP jako otwartego standardu łączącego AI z systemami danych. Artykuł opisuje założenia projektowe, architekturę i praktyczne zastosowania MCP w ekosystemie AI.

Zaawansowane Implementacje

Przeglądy i Analizy

Badania i Benchmarki

Cache'owanie i Optymalizacja API - Najnowsze Źródła (2024-2025)

Biblioteki i Narzędzia

  • keyv - Uniwersalny key-value store z adapterami dla Redis, Memcached, MongoDB, PostgreSQL, SQLite. Idealny do multi-layer caching.
  • cache-manager - Elastyczny system cache'owania z wieloma backendami i strategiami TTL.
  • ioredis - Zaawansowany Redis client z cluster support, pub/sub, pipeline i TypeScript support.
  • lru-cache - Wysokowydajna implementacja LRU cache z TypeScript, idealna dla in-memory caching.
  • axios-cache-interceptor - Cache interceptor dla Axios z obsługą HTTP cache headers (ETag, Last-Modified, Cache-Control).
  • axios-retry - Automatyczne ponawianie żądań z exponential backoff i konfigurowalnymi strategiami.
  • bottleneck - Zaawansowany rate limiter z queue management, priority support i distributed rate limiting.
  • p-limit - Kontrola współbieżności dla równoległych operacji API z Promise-based API.

Wzorce i Strategie Cache'owania

Rate Limiting i Circuit Breaker

Optymalizacja Zapytań API

Monitoring i Performance

Artykuły i Przewodniki (2024-2025)

Firecrawl Integration - Analiza i Rekomendacje

🔥 Czym jest Firecrawl?

Firecrawl to zaawansowany serwis API do konwersji całych stron internetowych na czysty markdown lub strukturalne dane gotowe dla LLM. Projekt ma 68.6k gwiazdek na GitHub i jest aktywnie rozwijany.

Kluczowe funkcjonalności:

  • 🔍 Crawling całych stron - Automatyczne przechodzenie przez wszystkie dostępne podstrony
  • 📄 Markdown conversion - Konwersja HTML do czystego markdown
  • 🤖 LLM Extraction - Ekstrakcja strukturalnych danych z użyciem LLM (Zod/Pydantic schemas)
  • 🎯 Actions support - Interakcje z dynamicznymi stronami (kliknięcia, wpisywanie tekstu, screenshoty)
  • 📦 Batch scraping - Równoległe przetwarzanie wielu URL
  • 🔄 MCP Support - Oficjalne wsparcie dla Model Context Protocol

⚖️ Self-Hosted vs Cloud - Analiza

Status Self-Hosted (2024-2025):

⚠️ Ważne: Według oficjalnego README: "This repository is in development, and we're still integrating custom modules into the mono repo. It's not fully ready for self-hosted deployment yet, but you can run it locally."

Self-Hosted - Zalety:

  • Kontrola nad danymi - Wszystkie dane pozostają w Twojej infrastrukturze
  • Brak limitów API - Nieograniczone użycie (zależne od zasobów)
  • Customizacja - Możliwość modyfikacji kodu pod własne potrzeby
  • Koszty - Brak opłat za użycie (tylko koszty infrastruktury)
  • AGPL-3.0 License - Open source, możliwość modyfikacji

Self-Hosted - Wady:

  • Nie gotowy do produkcji - Projekt wciąż w development
  • Wymaga zasobów - Większe zapotrzebowanie na CPU/RAM niż prosty WebFetch
  • Maintenance - Wymaga własnej konserwacji i aktualizacji
  • Brak niektórych funkcji - Cloud wersja ma więcej funkcji (Actions, advanced extraction)
  • Kompleksowość - Większa złożoność niż obecny WebFetch z Cheerio

Cloud Offering - Zalety:

  • Gotowe do użycia - Natychmiastowa dostępność
  • Więcej funkcji - Actions, advanced extraction, lepsze wsparcie dla dynamicznych stron
  • Maintenance - Brak konieczności utrzymywania infrastruktury
  • Skalowalność - Automatyczne skalowanie
  • MCP Server - Gotowy MCP server dostępny

Cloud Offering - Wady:

  • Koszty - Płatne API (z darmowym tierem)
  • Limity - Ograniczenia w darmowym planie
  • Zależność zewnętrzna - Zależność od zewnętrznego serwisu
  • Dane poza infrastrukturą - URL są wysyłane do zewnętrznego API

🎯 Rekomendacja dla MCP Server

Dla obecnego projektu MCP Server:

  1. Krótkoterminowo (Faza 1-2):

    • Zostań przy WebFetch + Cheerio - Prostsze, lżejsze, wystarczające dla większości przypadków
    • Dodaj Firecrawl jako opcjonalną integrację - Dla zaawansowanych przypadków użycia
  2. Średnioterminowo (Faza 3-4):

    • 🔄 Rozważ Firecrawl Cloud API - Jako uzupełnienie dla:
      • Crawling całych stron (nie tylko pojedyncze URL)
      • LLM extraction (strukturalne dane)
      • Dynamiczne strony wymagające interakcji
    • 🔄 Monitoruj rozwój self-hosted - Gdy będzie gotowy do produkcji, rozważ migrację
  3. Długoterminowo:

    • 🎯 Hybrid approach - WebFetch dla prostych przypadków, Firecrawl dla zaawansowanych
    • 🎯 Self-hosted Firecrawl - Gdy będzie stabilny, rozważ jako alternatywę

💡 Proponowana Implementacja

Opcja 1: Firecrawl jako opcjonalne narzędzie

// src/tools/webfetch-firecrawl.ts
import Firecrawl from '@mendable/firecrawl-js';

export class FirecrawlTool extends BaseTool {
  name = 'firecrawl_scrape';
  description = 'Advanced web scraping with Firecrawl (crawling, LLM extraction)';
  
  async execute(params: {
    url: string;
    crawl?: boolean; // Crawl entire site vs single page
    formats?: ('markdown' | 'html' | 'json')[];
    schema?: ZodSchema; // For LLM extraction
  }) {
    const firecrawl = new Firecrawl({ 
      apiKey: process.env.FIRECRAWL_API_KEY 
    });
    
    if (params.crawl) {
      return await firecrawl.crawl(params.url, {
        limit: 100,
        scrapeOptions: { formats: params.formats || ['markdown'] }
      });
    }
    
    return await firecrawl.scrape(params.url, {
      formats: params.formats || ['markdown'],
      ...(params.schema && { 
        formats: [{ type: 'json', schema: params.schema }] 
      })
    });
  }
}

Opcja 2: Integracja z istniejącym WebFetch

  • WebFetch używa prostego Cheerio (szybkie, lekkie)
  • Firecrawl jako fallback dla trudnych przypadków (dynamiczne strony, crawling)

📚 Zasoby Firecrawl

⚠️ Uwagi Prawne

Ważne: Firecrawl domyślnie respektuje robots.txt. Użytkownicy są odpowiedzialni za przestrzeganie polityk stron internetowych podczas scrapingu. Zawsze sprawdzaj Terms of Service i robots.txt przed crawlingiem.

API Documentation


🔒 Bezpieczeństwo

Najlepsze Praktyki

Implementacja serwera MCP wymaga szczególnej uwagi na bezpieczeństwo, ponieważ serwer może mieć dostęp do wrażliwych danych i zewnętrznych systemów.

1. Uwierzytelnianie i Autoryzacja

  • API Keys: Przechowuj klucze API w zmiennych środowiskowych, nigdy w kodzie
  • Szyfrowanie: Używaj szyfrowania dla wrażliwych danych (np. flutter_secure_storage dla Flutter)
  • Role-Based Access Control (RBAC): Implementuj kontrolę dostępu do narzędzi i zasobów
  • Rate Limiting: Ogranicz liczbę żądań na użytkownika/IP, aby zapobiec nadużyciom

2. Walidacja Danych

  • Input Validation: Waliduj wszystkie dane wejściowe używając Zod lub podobnych narzędzi
  • Sanitization: Oczyszczaj dane przed przetwarzaniem (szczególnie dla web scraping)
  • Schema Validation: Używaj silnych schematów walidacji dla wszystkich parametrów narzędzi

3. Bezpieczeństwo API

  • HTTPS Only: Wymuszaj połączenia HTTPS dla wszystkich zewnętrznych API calls
  • Timeout Protection: Ustaw rozsądne timeouty dla wszystkich żądań zewnętrznych
  • Error Handling: Nie ujawniaj wrażliwych informacji w komunikatach błędów
  • Request Signing: Podpisuj żądania do zewnętrznych API (np. Amazon Product Advertising API)

4. Ochrona przed Atakami

  • Prompt Injection: Waliduj i filtruj dane przed wysłaniem do LLM
  • SQL Injection: Używaj parametryzowanych zapytań (jeśli używasz bazy danych)
  • XSS Protection: Sanityzuj dane HTML przed wyświetleniem
  • CSRF Protection: Implementuj tokeny CSRF dla operacji modyfikujących dane

5. Monitoring i Logging

  • Audit Logs: Loguj wszystkie operacje na wrażliwych danych
  • Error Tracking: Monitoruj błędy i nieprawidłowe próby dostępu
  • Performance Monitoring: Śledź wydajność i wykrywaj anomalie

6. Konfiguracja Środowiska

  • Environment Variables: Używaj .env dla konfiguracji, dodaj .env do .gitignore
  • Secrets Management: Rozważ użycie narzędzi do zarządzania sekretami (np. AWS Secrets Manager, HashiCorp Vault)
  • Least Privilege: Nadawaj minimalne wymagane uprawnienia

Zasoby Bezpieczeństwa

[!WARNING] Zawsze testuj swoje narzędzia w środowisku izolowanym przed wdrożeniem produkcyjnym. Nie ufaj danym wejściowym i zawsze waliduj parametry przed wykonaniem operacji.


🚧 Roadmap

Faza 1: Core Infrastructure ✅

  • [x] Struktura projektu
  • [x] Bazowa klasa narzędzi
  • [x] System walidacji
  • [x] Logging

Faza 2: Basic Search Tools (W trakcie)

  • [ ] General web search (Google, Bing)
  • [ ] WebFetch tool
  • [ ] Type conversion tools
  • [ ] MCP server setup

Faza 3: Specialized Search

  • [ ] E-commerce search (Amazon, eBay, Allegro)
  • [ ] Scientific publications (arXiv, PubMed)
  • [ ] Code repositories (GitHub, npm, PyPI)
  • [ ] Social media (Twitter, Reddit, YouTube)

Faza 4: Advanced Features (W trakcie)

  • [ ] Multi-layer caching system
    • [ ] L1: In-memory cache (lru-cache/node-cache)
    • [ ] L2: Redis cache dla współdzielonych danych
    • [ ] L3: HTTP cache headers (ETag, Cache-Control)
    • [ ] Cache invalidation strategies (TTL, tag-based, manual)
  • [ ] Request optimization
    • [ ] Request deduplication dla równoległych żądań
    • [ ] Batching zapytań (gdy API wspiera)
    • [ ] Intelligent pagination
    • [ ] Field filtering
  • [ ] Rate limiting & circuit breaker
    • [ ] Token bucket rate limiter (bottleneck)
    • [ ] Per-API rate limit tracking
    • [ ] Circuit breaker pattern
    • [ ] Queue management dla throttled requests
  • [ ] Data aggregation
    • [ ] Równoległe wyszukiwanie w wielu platformach
    • [ ] Deduplikacja wyników
    • [ ] Normalizacja formatów odpowiedzi
    • [ ] Ranking i sortowanie zagregowanych wyników
  • [ ] Advanced filtering
    • [ ] Composite filters
    • [ ] Full-text search optimization
    • [ ] Faceted search
  • [ ] Error recovery & resilience
    • [ ] Exponential backoff retry strategy
    • [ ] Fallback to cache on API errors
    • [ ] Graceful degradation
    • [ ] Health checks dla zewnętrznych API

Faza 5: Polish & Optimization

  • [ ] Comprehensive tests
  • [ ] Performance optimization
  • [ ] Documentation
  • [ ] Example integrations

📄 Licencja

MIT License - możesz swobodnie używać i modyfikować ten projekt.


🤝 Contributing

Contributions are welcome! Jeśli chcesz dodać nowe źródło wyszukiwania lub poprawić istniejące:

  1. Fork projektu
  2. Utwórz branch (git checkout -b feature/new-search-source)
  3. Commit zmian (git commit -m 'Add new search source')
  4. Push do brancha (git push origin feature/new-search-source)
  5. Otwórz Pull Request

💡 Use Cases

Research Assistant

Agent: Znajdź najnowsze publikacje o "quantum computing" na arXiv,
       następnie wyszukaj implementacje na GitHub i podsumuj stan badań.

Product Comparison

Agent: Porównaj ceny iPhone 15 Pro na Amazon, eBay i Allegro,
       pokaż najlepsze oferty z dobrymi ocenami.

Developer Tools Discovery

Agent: Znajdź popularne biblioteki TypeScript do walidacji danych,
       sprawdź ich dokumentację i przykłady użycia.

Trend Analysis

Agent: Sprawdź co jest teraz popularne na Reddit i Twitter w temacie AI,
       znajdź powiązane artykuły naukowe i projekty na GitHub.

📦 Instalacja i Konfiguracja

[!NOTE] Ta sekcja zawiera podstawowe informacje o instalacji. Szczegółowa dokumentacja funkcjonalności znajduje się w sekcjach powyżej.

Wymagania

  • Node.js 20.x lub wyższy
  • npm lub yarn
  • API Keys (opcjonalne, w zależności od używanych narzędzi)
  • Redis (opcjonalne, dla L2 cache - zalecane dla produkcji)

Szybki Start

# Klonowanie i instalacja
git clone <repo-url>
cd mcp-server
npm install

# Konfiguracja (opcjonalna)
cp .env.example .env
# Edytuj .env i dodaj API keys

# Instalacja zależności cache'owania (opcjonalne)
npm install keyv @keyv/redis ioredis lru-cache bottleneck axios-retry axios-cache-interceptor p-limit

# Build i uruchomienie
npm run build
npm start

Konfiguracja Cache'owania i Optymalizacji

Przykładowy plik .env

# Redis Configuration (opcjonalne, dla L2 cache)
REDIS_URL=redis://localhost:6379
REDIS_TTL=1800000  # 30 minut w milisekundach

# Cache Configuration
CACHE_ENABLED=true
CACHE_L1_MAX_SIZE=500
CACHE_L1_TTL=300000  # 5 minut
CACHE_L2_TTL=1800000  # 30 minut

# Rate Limiting
RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_CONCURRENT=5
RATE_LIMIT_MIN_TIME=1000  # minimum time between requests (ms)

# Circuit Breaker
CIRCUIT_BREAKER_THRESHOLD=5
CIRCUIT_BREAKER_TIMEOUT=60000  # 1 minute

# Retry Configuration
RETRY_ENABLED=true
RETRY_ATTEMPTS=3
RETRY_DELAY=1000  # initial delay (ms)

Przykładowe zależności w package.json

{
  "dependencies": {
    "@modelcontextprotocol/sdk": "^0.5.0",
    "axios": "^1.6.0",
    "axios-retry": "^4.0.0",
    "axios-cache-interceptor": "^1.5.0",
    "bottleneck": "^2.19.5",
    "cheerio": "^1.0.0",
    "keyv": "^4.5.0",
    "@keyv/redis": "^2.8.0",
    "ioredis": "^5.3.0",
    "lru-cache": "^10.0.0",
    "p-limit": "^5.0.0",
    "zod": "^3.22.0"
  }
}

Integracja z Klientami AI

Cursor AI: Dodaj do ~/.cursor/config.json:

{
  "mcpServers": {
    "specialized-search": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server/dist/index.js"]
    }
  }
}

Claude Desktop: Edytuj plik konfiguracyjny (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)

Flutter/Dart: Zobacz sekcję Integracja z Flutter/Dart w dokumentacji zasobów.

[!TIP] Większość narzędzi ma darmowe tier API. Serwer działa z dostępnymi narzędziami - narzędzia bez skonfigurowanych kluczy są automatycznie wyłączone.


Status projektu: 🚧 W trakcie implementacji - Faza 1 & 2

Projekt jest aktywnie rozwijany. Podstawowa infrastruktura gotowa, implementacja narzędzi wyszukiwania w toku!

✨ Najnowsze Aktualizacje (2024-2025)

Cache'owanie i Optymalizacja:

  • ✅ Dokumentacja multi-layer caching (L1: in-memory, L2: Redis)
  • ✅ Strategie cache'owania: Cache-Aside, Stale-While-Revalidate, Tag-Based Invalidation
  • ✅ Request deduplication i batching
  • ✅ Rate limiting z bottleneck i p-limit
  • ✅ Circuit breaker pattern dla odporności na błędy
  • ✅ Przykłady implementacji z keyv, ioredis, lru-cache
  • ✅ Integracja z axios-retry i axios-cache-interceptor
  • ✅ Kompleksowa dokumentacja zasobów i najlepszych praktyk

Zasoby:

  • 📚 20+ nowych źródeł dotyczących cache'owania i optymalizacji API
  • 🔧 Przykłady kodu dla wszystkich wzorców projektowych
  • 📖 Konfiguracja środowiska i zależności
  • 🎯 Roadmap z szczegółowym planem implementacji

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选