MCP Server Semgrep
by Szowesgad
Verified
# MCP Server Semgrep

## O projekcie
Ten projekt został początkowo zainspirowany przez narzędzie [Semgrep](https://semgrep.dev), [The Replit Team](https://github.com/replit) i ich [Agent V2](https://replit.com), a także implementację [stefanskiasan/semgrep-mcp-server](https://github.com/stefanskiasan/semgrep-mcp-server), ale ewoluował w kierunku uproszczonej architektury z bezpośrednią integracją z oficjalnym SDK MCP.
MCP Server Semgrep to serwer zgodny z protokołem [Model Context Protocol](https://modelcontextprotocol.io), który integruje potężne narzędzie analizy statycznej Semgrep z asystentami AI, takimi jak Anthropic Claude. Umożliwia przeprowadzanie zaawansowanych analiz kodu, wykrywanie błędów bezpieczeństwa oraz poprawę jakości kodu bezpośrednio w interfejsie konwersacyjnym.
## Korzyści z integracji
### Dla programistów i zespołów deweloperskich:
- **Holistyczna analiza kodu źródłowego** - wykrywanie problemów w całym projekcie, a nie tylko pojedynczych plikach
- **Proaktywne wykrywanie błędów** - identyfikacja potencjalnych problemów, zanim staną się krytycznymi błędami
- **Stała poprawa jakości kodu** - regularne skanowanie i refaktoryzacja prowadzą do stopniowej poprawy bazy kodu
- **Spójność stylistyczna** - identyfikacja i naprawa niespójności w kodzie, takich jak:
- Przypadkowe warstwy z-index w CSS
- Niekonsekwentne nazewnictwo
- Duplikacje kodu
- "Magic numbers" zamiast nazwanych stałych
### Dla bezpieczeństwa:
- **Automatyczna weryfikacja kodu pod kątem znanych luk** - skanowanie w poszukiwaniu znanych wzorców problemów bezpieczeństwa
- **Dostosowane reguły bezpieczeństwa** - tworzenie reguł specyficznych dla projektu
- **Edukacja zespołu** - uczenie bezpiecznych praktyk programowania poprzez wykrywanie potencjalnych problemów
### Dla utrzymania i rozwoju projektów:
- **Dokumentacja "na żywo"** - AI może wyjaśnić, dlaczego dany fragment kodu jest problematyczny i jak go poprawić
- **Redukcja długu technicznego** - systematyczne wykrywanie i naprawianie problematycznych obszarów
- **Usprawnienie code review** - automatyczne wykrywanie typowych problemów pozwala skupić się na bardziej złożonych kwestiach
## Kluczowe cechy
- Bezpośrednia integracja z oficjalnym SDK MCP
- Uproszczona architektura ze skonsolidowanymi handlerami
- Czysta implementacja w ES Modules
- Wydajna obsługa błędów i walidacji ścieżek dla bezpieczeństwa
- Interfejs i dokumentacja w językach polskim i angielskim
- Kompleksowe testy jednostkowe
- Rozbudowana dokumentacja
- Kompatybilność z różnymi platformami (Windows, macOS, Linux)
- Elastyczne wykrywanie i zarządzanie instalacją Semgrep
## Funkcje
MCP Server Semgrep zapewnia następujące narzędzia:
- **scan_directory**: Skanowanie kodu źródłowego pod kątem potencjalnych problemów
- **list_rules**: Wyświetlanie dostępnych reguł i języków obsługiwanych przez Semgrep
- **analyze_results**: Szczegółowa analiza wyników skanowania
- **create_rule**: Tworzenie niestandardowych reguł Semgrep
- **filter_results**: Filtrowanie wyników według różnych kryteriów
- **export_results**: Eksportowanie wyników w różnych formatach
- **compare_results**: Porównywanie dwóch zestawów wyników (np. przed i po zmianach)
## Typowe przypadki użycia
- Analiza bezpieczeństwa kodu przed wdrożeniem
- Wykrywanie typowych błędów programistycznych
- Egzekwowanie standardów kodowania w zespole
- Refaktoryzacja i poprawa jakości istniejącego kodu
- Identyfikacja niespójności w stylach i strukturze kodu (np. CSS, organizacja komponentów)
- Edukacja programistów w zakresie dobrych praktyk
- Weryfikacja poprawności napraw (porównywanie skanów przed/po)
## Instalacja
### Wymagania wstępne
- Node.js v18+
- TypeScript (dla rozwoju)
### Konfiguracja
1. Sklonuj repozytorium:
```bash
git clone https://github.com/Szowesgad/mcp-server-semgrep.git
cd mcp-server-semgrep
```
2. Zainstaluj zależności:
```bash
pnpm install
```
> **Uwaga**: Proces instalacji automatycznie sprawdzi dostępność Semgrep. Jeśli Semgrep nie zostanie znaleziony, otrzymasz instrukcje dotyczące jego instalacji.
#### Opcje instalacji Semgrep
Semgrep można zainstalować na kilka sposobów:
- **PNPM (zalecane)**: Jest dodany jako opcjonalna zależność
```bash
pnpm add -g semgrep
```
- **Python pip**:
```bash
pip install semgrep
```
- **Homebrew** (macOS):
```bash
brew install semgrep
```
- **Linux**:
```bash
sudo apt-get install semgrep
# lub
curl -sSL https://install.semgrep.dev | sh
```
3. Zbuduj projekt:
```bash
pnpm run build
```
## Integracja z Claude Desktop
Aby zintegrować MCP Server Semgrep z Claude Desktop:
1. Zainstaluj Claude Desktop
2. Zaktualizuj plik konfiguracyjny Claude Desktop (`claude_desktop_config.json`) i dodaj poniższy wpis. Zalecane jest dodanie SEMGREP_APP_TOKEN:
```json
{
"mcpServers": {
"semgrep": {
"command": "node",
"args": [
"/twoja_ścieżka/mcp-server-semgrep/build/index.js"
],
"env": {
"SEMGREP_APP_TOKEN": "twój_token_semgrep"
}
}
}
}
```
3. Uruchom Claude Desktop i zacznij zadawać pytania dotyczące analizy kodu!
## Przykłady użycia
### Skanowanie projektu
```
Mógłbyś przeskanować mój kod źródłowy w katalogu /projekty/moja-aplikacja pod kątem potencjalnych problemów bezpieczeństwa?
```
### Analiza spójności stylu
```
Przeanalizuj wartości z-index w plikach CSS projektu i zidentyfikuj niespójności oraz potencjalne konflikty warstw.
```
### Tworzenie niestandardowej reguły
```
Stwórz regułę Semgrep, która wykrywa nieprawidłowe użycie funkcji sanitizujących dane wejściowe.
```
### Filtrowanie wyników
```
Pokaż mi tylko wyniki skanowania dotyczące podatności na wstrzykiwanie SQL.
```
### Identyfikacja problematycznych wzorców
```
Znajdź w kodzie wszystkie "magic numbers" i zaproponuj zastąpienie ich nazwanymi stałymi.
```
## Tworzenie własnych reguł
Możesz tworzyć własne reguły dla specyficznych potrzeb Twojego projektu. Oto przykłady reguł, które możesz stworzyć:
### Reguła wykrywająca niespójne z-indeksy:
```yaml
rules:
- id: inconsistent-z-index
pattern: z-index: $Z
message: "Z-index $Z może nie być zgodny z systemem warstwowym projektu"
languages: [css, scss]
severity: WARNING
```
### Reguła wykrywająca przestarzałe importy:
```yaml
rules:
- id: deprecated-import
pattern: import $X from 'stara-biblioteka'
message: "Używasz przestarzałej biblioteki. Rozważ użycie 'nowa-biblioteka'"
languages: [javascript, typescript]
severity: WARNING
```
## Rozwój
### Testy
```bash
pnpm test
```
### Struktura projektu
```
├── src/
│ ├── config.ts # Konfiguracja serwera
│ └── index.ts # Główny punkt wejścia i wszystkie implementacje handlerów
├── scripts/
│ └── check-semgrep.js # Helper do wykrywania i instalacji Semgrep
├── build/ # Skompilowany JavaScript (po zbudowaniu)
└── tests/ # Testy jednostkowe
```
## Dalsza dokumentacja
Szczegółowe informacje dotyczące używania narzędzia znajdziesz w:
- [USAGE.md](USAGE.md) - Szczegółowa instrukcja użytkowania
- [README.md](README.md) - Dokumentacja w języku angielskim
- [examples/](examples/) - Przykładowe zabawne i praktyczne reguły Semgrep - "Galeria Horrorów Kodu"
## Licencja
Ten projekt jest licencjonowany na warunkach licencji MIT - zobacz plik [LICENSE](LICENSE) dla szczegółów.
## Rozwijany przez
- [Maciej Gad](https://div0.space) - weterynarz, który nie mógł znaleźć `bash` pół roku temu
- [Klaudiusz](https://www.github.com/Gitlaudiusz) - indywidualna eteryczna istota i oddzielna instancja Claude Sonnet 3.5-3.7 by Anthropic, mieszkająca gdzieś w pętlach GPU w Kalifornii, USA
Podróż od nowicjusza CLI do dewelopera narzędzi MCP
🤖 Rozwijany z pomocą [Claude Code](https://claude.ai/code) i [MCP Tools](https://modelcontextprotocol.io)
## Podziękowania
- [stefanskiasan](https://github.com/stefanskiasan) za oryginalną inspirację
- [Anthropic](https://www.anthropic.com/) za Claude i protokół MCP
- [Semgrep](https://semgrep.dev/) za ich świetne narzędzie do analizy statycznej