Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 22 additions & 13 deletions import_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,26 @@
from neo4j import GraphDatabase
import json


def import_tube_data(uri, username, password, data_file):
driver = GraphDatabase.driver(uri, auth=(username, password))

# Load JSON data
with open(data_file, 'r') as f:
with open(data_file, "r") as f:
data = json.load(f)

with driver.session() as session:
# Create constraints separately
session.run("""
CREATE CONSTRAINT underground_station_name IF NOT EXISTS FOR (s:UndergroundStation) REQUIRE s.name IS UNIQUE
""")

session.run("""
CREATE CONSTRAINT underground_station_id IF NOT EXISTS FOR (s:UndergroundStation) REQUIRE s.id IS UNIQUE
""")

session.run("""

session.run(
"""
UNWIND $stations AS station
CREATE (s:UndergroundStation {
id: station.id,
Expand All @@ -37,9 +39,12 @@ def import_tube_data(uri, username, password, data_file):
total_lines: toInteger(station.total_lines),
rail: toInteger(station.rail)
})
""", {'stations': data['stations']})

session.run("""
""",
{"stations": data["stations"]},
)

session.run(
"""
UNWIND $connections AS conn
MATCH (s1:UndergroundStation {id: conn.station1})
MATCH (s2:UndergroundStation {id: conn.station2})
Expand All @@ -48,18 +53,22 @@ def import_tube_data(uri, username, password, data_file):
time: toInteger(conn.time),
distance: toInteger(conn.time)
}]->(s2)
""", {'connections': data['connections']})

""",
{"connections": data["connections"]},
)

driver.close()


# Usage
from dotenv import load_dotenv
import os
load_dotenv('.env')

load_dotenv(".env")

uri = os.environ["NEO4J_URI"]
username = os.environ["NEO4J_USERNAME"]
password = os.environ["NEO4J_PASSWORD"]
data_file = "dataset/london.json"

import_tube_data(uri, username, password, data_file)
import_tube_data(uri, username, password, data_file)
5 changes: 3 additions & 2 deletions mcp_server/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"graphdatascience>=1.14",
"mcp[cli]>=1.5.0",
"fastmcp>=2.10.4",
]

[build-system]
Expand All @@ -22,5 +22,6 @@ target-version = "py311"
[dependency-groups]
dev = [
"ruff>=0.12.2",
"pytest>=8.4.1"
"pytest>=8.4.1",
"pytest-asyncio>=1.0.0",
]
20 changes: 10 additions & 10 deletions mcp_server/src/mcp_server_neo4j_gds/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

from dotenv import load_dotenv

from . import server
import asyncio
import argparse
import os

Expand Down Expand Up @@ -43,14 +41,16 @@ def main():
logging.info(f"Starting MCP Server for {args.db_url} with username {args.username}")
if args.database:
logging.info(f"Connecting to database: {args.database}")
asyncio.run(
server.main(
db_url=args.db_url,
username=args.username,
password=args.password,
database=args.database,
)

# Import and run the server directly without asyncio.run
from .server import main as server_main

server_main(
db_url=args.db_url,
username=args.username,
password=args.password,
database=args.database,
)


__all__ = ["main", "server"]
__all__ = ["main"]
Loading
Loading