Strona główna / Artykuły

Serwer MCP Neo4j połączony z ChatGPT

Stwórz serwer MCP Neo4j, połącz z nim narzędzia Cypher, zarejestruj go w ChatGPT i sprawdź, czy zapytania tylko do odczytu z czatu rzeczywiście bezpiecznie docierają do grafu.

Wydawca: REACTAPP.TOP10 min czytania2403 słów

Źródła: How to Build and Connect a Neo4j MCP Server to ChatGPT

To przewodnik odtwarza całą ścieżkę od surowców do gotowego systemu w temacie: Jak zbudować i połączyć serwer MCP Neo4j z ChatGPT. Skupiamy się na krokach operacyjnych, wyraźnych sprawdzeniach oraz kodzie, który można bez problemu umieścić w repozytorium, bez konieczności domyślania się intencji. Aby uzyskać ogólny obraz, należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności domyślania się ukrytego stanu. Lepiej używać małych, testowalnych jednostek niż rozbudowanych skryptów. Gdy dany krok zawiedzie, powód awarii powinien wskazywać na konkretną odpowiedzialność, a nie na skomplikowany łańcuch operacji.

Wprowadzenie

W części wprowadzającej należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nazwij poszczególne elementy, zdefiniuj kryteria sukcesu i odrzuć ciche, częściowe ukończenie zadań. Zastosuj ograniczenia i indeksy przed masowym importem danych. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, bez powstawania duplikatów.

Repozytorium Neo4j Labs w porównaniu z oficjalnym serwerem MCP Neo4j

W przypadku repozytorium Neo4j Labs w porównaniu z oficjalnym serwerem MCP Neo4j, należy określić dane wejściowe, osobę odpowiedzialną za daną czynność oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić tę czynność na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu systemu. Należy rejestrować czasy wykonywania operacji oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy przechodzi się z środowiska demonstracyjnego do współdzielonych środowisk. Przed masowym importem danych należy używać ograniczeń i indeksów. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, bez powstawania duplikatów.

Architektura

Dla architektury należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Konfigurację należy przechowywać poza kodem aplikacji. Pliki środowiskowe, magazyny tajnych danych oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą sprawdzić bez konieczności czytania całej struktury. Przed masowym importem należy używać ograniczeń i indeksów. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, zamiast powodować problemy z duplikatami. Dla architektury należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić dany krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Należy preferować małe, testowalne jednostki nad rozbudowanymi skryptami. Gdy dany krok zawiedzie, powinien wskazywać na konkretną przyczynę, a nie na skomplikowaną strukturę procesów.

Wymagania wstępne

W ramach wymagań wstępnych należy zdefiniować dane wejściowe, osobę odpowiedzialną za dany krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić dany krok na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nadaj nazwy poszczególnym elementom, zdefiniuj kryteria sukcesu i odrzuć przypadkowe, częściowe ukończenie zadań. Sprawdź próbkę wyników po pierwszej partii obliczeń. Narzędzia typu Cypher skuteczniej wykrywają zmiany w etykietach i brakujące właściwości niż testy czatowe typu end-to-end.

Krok 1: Sprawdzenie architektury Ubuntu

Dla kroku 1: Sprawdź architekturę Ubuntu, określ dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Zapisuj czas trwania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy ścieżka przechodzi z środowiska demonstracyjnego do współdzielonych środowisk. Sprawdź próbkę danych po pierwszej partii. Narzędzia typu Cypher wykrywają zmiany w etykietach i brakujące właściwości taniej niż testy czatowe od początku do końca.

Krok 2: Zainstaluj oficjalny serwer MCP Neo4j

Dla kroku 2: Zainstaluj oficjalny serwer MCP Neo4j, zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Konfigurację należy przechowywać poza kodem aplikacji. Pliki środowiskowe, magazyny tajnych danych oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą sprawdzić bez konieczności czytania całego grafu. Sprawdź próbkę sąsiedztwa po pierwszej partii danych. Proby typu Cypher wykrywają zmiany w etykietach i brakujące właściwości taniej niż testy czatowe od początku do końca. Dla kroku 2: Zainstaluj oficjalny serwer MCP Neo4j, zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Wolno preferować małe, testowalne jednostki nad rozbudowanymi skryptami. Gdy krok się nie powiedzie, błąd powinien wskazywać na konkretną część do poprawy.

odpowiedzialność, a nie skomplikowana ścieżka przetwarzania.

tar -xzf neo4j-mcp_Linux_x86_64.tar.gz
chmod +x neo4j-mcp
sudo mv neo4j-mcp /usr/local/bin/neo4j-mcp
neo4j-mcp --help
python3 -m venv neo4j-mcp-venv
source neo4j-mcp-venv/bin/activate
pip install neo4j-mcp-server

Krok 3: Zrozumienie dostępnych narzędzi MCP

W ramach kroku 3: Zrozumienie dostępnych narzędzi MCP należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nadaj nazwy artefaktom, zdefiniuj sprawdzenia sukcesu i odrzucaj ciche, częściowe ukończenie zadania. Modeluj węzły i relacje dla pytań, które zamierzasz zadać, a nie dla każdego rzeczownika w dokumencie. Rozproszone, typowane krawędzie są lepsze od gęstych, tajemniczych grafów.

Krok 4: Stworzenie ograniczonego użytkownika Neo4j

Dla kroku 4: Stworzenie ograniczonego użytkownika Neo4j – przed zmianą kodu należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Należy rejestrować czasy wykonywania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy ścieżka przechodzi z środowiska demonstracyjnego do współdzielonych środowisk. Modeluj węzły i relacje odpowiadające pytaniom, które zamierzasz zadać, a nie każdemu rzeczownikowi w dokumencie – rzadsze, typowane krawędzie są lepsze od gęstych, niejasnych grafów.

cypher-shell \
  -a bolt://127.0.0.1:7687 \
  -u mcp_reader \
  -p 'YOUR_PASSWORD' \
  'MATCH (n) RETURN count(n) AS node_count;'

Krok 5: Konfiguracja Neo4j MCP w trybie STDIO

Dla kroku 5: Konfiguruj Neo4j MCP w trybie STDIO, zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Konfigurację należy przechowywać poza kodem aplikacji. Pliki środowiskowe, magazyny tajnych danych oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą sprawdzić bez konieczności czytania całego grafu. Modeluj węzły i relacje odpowiadające pytaniom, które zamierzasz zadać, a nie każdemu rzeczownikowi w dokumencie. Rozproszone, typowane krawędzie są lepsze od gęstych, tajemniczych grafów. Dla kroku 5: Konfiguruj Neo4j MCP w trybie STDIO, zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Wolę małe, testowalne jednostki nad rozbudowane skrypty. Gdy krok się nie powiedzie, błąd powinien wskazywać na jedną konkretną osobę odpowiedzialną.

zamiast skomplikowanego łańcucha przetwarzania.

export NEO4J_URI="bolt://127.0.0.1:7687"
export NEO4J_USERNAME="mcp_reader"
export NEO4J_PASSWORD="YOUR_NEO4J_PASSWORD"
export NEO4J_DATABASE="neo4j"
export NEO4J_READ_ONLY="true"
export NEO4J_TRANSPORT_MODE="stdio"
export NEO4J_LOG_LEVEL="info"
export NEO4J_LOG_FORMAT="text"
neo4j-mcp

Krok 6: Zrozumienie alternatywy HTTP

W ramach kroku 6: Zrozumienie alternatywy HTTP należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nadaj nazwy artefaktom, zdefiniuj sprawdzenia sukcesu i odrzucaj ciche, częściowe ukończenie zadań. Zastosuj ograniczenia i indeksy przed masowym importem danych. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, bez powstawania duplikatów.

export NEO4J_URI="bolt://127.0.0.1:7687"
export NEO4J_DATABASE="neo4j"
export NEO4J_READ_ONLY="true"
export NEO4J_TRANSPORT_MODE="http"
export NEO4J_MCP_HTTP_HOST="127.0.0.1"
export NEO4J_MCP_HTTP_PORT="8000"

unset NEO4J_USERNAME
unset NEO4J_PASSWORD

neo4j-mcp
Authorization: Basic BASE64_ENCODED_USERNAME_AND_PASSWORD
echo -n "mcp_reader:YOUR_PASSWORD" | base64
Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN

Krok 7: Zainstalowanie OpenAI tunnel-client na Ubuntu

Dla kroku 7: Zainstaluj OpenAI tunnel-client na Ubuntu, określ dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Zapisuj czas trwania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy proces przechodzi z środowiska demonstracyjnego do współdzielonych środowisk. Używaj ograniczeń i indeksów przed masowym importem danych. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, zamiast powodować problemy z duplikatami.

tunnel-client-<version>-linux-amd64.zip
tunnel-client-<version>-linux-arm64.zip
unzip tunnel-client-<version>-linux-amd64.zip
chmod +x tunnel-client
sudo mv tunnel-client /usr/local/bin/tunnel-client
tunnel-client --version
tunnel-client help quickstart

Krok 8: Stworzenie bezpiecznego tunelu MCP

Dla kroku 8: Tworzenie bezpiecznego tunelu MCP – należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Konfigurację należy przechowywać poza kodem aplikacji. Pliki środowiskowe, magazyny tajnych danych oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą sprawdzić bez konieczności czytania całej struktury. Przed masowym importem należy używać ograniczeń i indeksów. Unikalność kluczy biznesowych sprawia, że późniejsze łączenie danych przebiega w sposób przewidywalny, zamiast powodować problemy z duplikatami. Dla kroku 8: Tworzenie bezpiecznego tunelu MCP – należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Należy preferować małe, łatwe do przetestowania jednostki nad rozbudowanymi skryptami. Gdy jakiś krok zawiedzie, błąd powinien wskazywać na konkretną przyczynę.

zamiast skomplikowanego łańcucha przetwarzania.

Name: Neo4jMCP
Description: Private tunnel for the Neo4j MCP server
tunnel_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Krok 9: Stworzenie klucza API w czasie wykonywania

W ramach kroku 9: Stworzenie klucza API w czasie wykonywania należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nadaj nazwy plikom, zdefiniuj sprawdzenia sukcesu i odrzucaj ciche, częściowe ukończenie zadania. Sprawdź próbkę wyników po pierwszej partii danych. Narzędzia typu Cypher skuteczniej wykrywają zmiany w etykietach i brakujące właściwości niż testy czatowe od początku do końca.

export CONTROL_PLANE_API_KEY="sk-YOUR_RUNTIME_KEY"

Krok 10: Konfiguracja tunnel-client do uruchamiania Neo4j MCP

Dla kroku 10: Aby skonfigurować tunnel-client do uruchamiania Neo4j MCP, należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Należy rejestrować czasy wykonywania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega nieoczekiwanym rachunkom, gdy ścieżka przechodzi z środowiska demonstracyjnego do współdzielonych środowisk. Należy również sprawdzić przykładową okolicę po pierwszej partii danych. Proby typu Cypher wykrywają zmiany w etykietach i brakujące właściwości taniej niż testy czatowe od początku do końca.

export CONTROL_PLANE_API_KEY="sk-YOUR_RUNTIME_KEY"
export NEO4J_URI="bolt://127.0.0.1:7687"
export NEO4J_USERNAME="mcp_reader"
export NEO4J_PASSWORD="YOUR_NEO4J_PASSWORD"
export NEO4J_DATABASE="neo4j"
export NEO4J_READ_ONLY="true"
export NEO4J_TRANSPORT_MODE="stdio"
tunnel-client init \
  --sample sample_mcp_stdio_local \
  --profile neo4j-local \
  --tunnel-id "tunnel_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  --mcp-command "/usr/local/bin/neo4j-mcp"
tunnel-client doctor \
  --profile neo4j-local \
  --explain
tunnel-client run --profile neo4j-local

Krok 11: Sprawdzenie połączenia sieciowego w Ubuntu

Dla kroku 11: Sprawdzenie połączenia sieciowego Ubuntu, należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Konfigurację należy przechowywać poza kodem aplikacji. Pliki środowiskowe, magazyny tajnych danych oraz flagi funkcjonalne powinny znajdować się w jednym miejscu, które operatorzy mogą sprawdzić bez konieczności czytania całej struktury. Należy przeanalizować próbkę sąsiedztwa po pierwszej partii danych. Proby typu Cypher wykrywają zmiany w etykietach i brakujące właściwości taniej niż testy czatowe od początku do końca. Dla kroku 11: Sprawdzenie połączenia sieciowego Ubuntu, należy zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed modyfikacją kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Należy preferować małe, łatwe do przetestowania jednostki nad rozbudowanymi skryptami. Gdy krok się nie powiedzie, błąd powinien wskazywać na konkretną przyczynę.

zgodność z wymaganiami, a nie skomplikowany łańcuch przetwarzania.

curl -I https://api.openai.com

Krok 12: Stworzenie aplikacji w trybie deweloperskim ChatGPT

W ramach kroku 12: Stworzenie aplikacji w trybie deweloperskim ChatGPT należy najpierw zdefiniować dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok na podstawie znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Traktuj tę fazę jako umowę pomiędzy danymi wejściowymi a zweryfikowanymi wynikami. Nadaj nazwy poszczególnym elementom, zdefiniuj kryteria sukcesu i odrzucaj ciche, częściowe ukończenie zadań. Twórz węzły i relacje odpowiadające pytaniom, które zamierzasz zadać, a nie każdemu rzeczownikowi w dokumencie. Rozproszone, typowane krawędzie są lepsze od gęstych, niejasnych grafów.

Krok 13: Weryfikacja integracji

Dla kroku 13: Walidacja integracji – zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu. Zapisuj czas trwania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy ścieżka przechodzi z środowiska demonstracyjnego do współdzielonych środowisk.

Listwa kontrolna operacyjna

Dla listwy kontrolnej operacyjnej – zdefiniuj dane wejściowe, osobę odpowiedzialną za ten krok oraz kryteria zakończenia przed zmianą kodu. Operatorzy powinni móc ponownie uruchomić ten krok od znanego punktu kontrolnego, bez konieczności zgadywania ukrytego stanu.

Zdokumentuj zarówno ścieżkę prawidłową, jak i ścieżkę naprawczą. Próby ponowne, kontrolne punkty ludzkie oraz obsługa wiadomości nieodebranych stanowią część produktu, a nie elementy dodawane później.

Zbadaj próbkę obszaru po pierwszej partii danych. Proby typu Cypher wykrywają zmiany w etykietach i brakujące właściwości taniej niż testy czatowe od początku do końca.

Udostępnij narzędzia o wąskich schematach oraz z wyraźnymi etykietami efektów ubocznych. Hostowie muszą wiedzieć, które wywołania zmieniają stan, zanim je automatycznie zatwierdzą.

Gdy budżet na to pozwala, dodaj test dymny, który symuluje krytyczną ścieżkę w procesie CI przy użyciu fixitów, a nie rzeczywistych płatnych API.

Zapisz czasy wykonywania oraz koszt tokenów lub zapytań obok wyników funkcjonalnych. Wczesna widoczność kosztów zapobiega niespodziewanym rachunkom, gdy ścieżka przechodzi z wersji demonstracyjnej do środowisk współdzielonych.

Zanim zaczniesz promować tę architekturę, zamroź wersje oprogramowania, utwórz dokładny zapis procesu dla kluczowych etapów realizacji oraz potwierdź kroki konieczne do cofnięcia zmian. Środowiska współdzielone wymagają ograniczeń szybkości, weryfikacji uprawnień użytkowników oraz wyraźnego odpowiedzialnego za rotację haseł. Wolimy nudną niezawodność od pomysłowych, jednorazowych demonstracji.