npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@jeelidev/personal-neo4j-memory-server

v1.0.4

Published

Personal MCP Memory Server with Neo4j backend - Enhanced Cloudflare Access support with robust tunnel management and remove functionality

Downloads

278

Readme

Personal Neo4j Memory Server - Enhanced Cloudflare Access Support

A Model Context Protocol (MCP) server that provides AI assistants with persistent, intelligent memory capabilities using Neo4j's graph database with enhanced Cloudflare Access tunneling support.

🎯 What it does

This server enables AI assistants to:

  • Remember - Store memories as interconnected knowledge nodes with observations and metadata
  • Search - Find relevant memories using semantic vector search, exact matching, and graph traversal
  • Connect - Create meaningful relationships between memories with batch operations and cross-references
  • Organize - Separate memories by project using different databases
  • Evolve - Track how knowledge develops over time with temporal metadata and relationship networks
  • 🚀 NEW: Reliable Remote Access - Connect through Cloudflare Zero Trust Access from anywhere

✨ Key Features

Core Capabilities

  • 🧠 Graph Memory - Memories as nodes, relationships as edges, observations as content
  • 🔍 Unified Search - Semantic vectors, exact matching, wildcards, and graph traversal in one tool
  • 🔗 Smart Relations - Typed connections with strength, source tracking, and temporal metadata
  • 📊 Multi-Database - Isolated project contexts with instant switching
  • ☁️ Cloudflare Access Ready - Zero Trust tunneling for secure remote connections

Advanced Operations

  • Batch Operations - Create multiple memories with relationships in single request using localId
  • 🎯 Context Control - Response detail levels: minimal (lists), full (complete data), relations-only
  • 📅 Time Queries - Filter by relative ("7d", "30d") or absolute dates on any temporal field
  • 🌐 Graph Traversal - Navigate networks in any direction with depth control
  • 🛡️ Zero Trust Security - mTLS encryption through Cloudflare Access

Architecture

  • 🚀 MCP Native - Seamless integration with Claude Desktop and MCP clients
  • 💾 Persistent Storage - Neo4j graph database with GDS plugin for vector operations
  • ☁️ Cloudflare Optimized - Solved BOLT protocol tunneling issues
  • ⚠️ Zero-Fallback - Explicit errors for reliable debugging, no silent failures

🚀 Quick Start - NPM Installation

Option 1: Install from NPM (Recommended)

# Coming soon - after publication
npm install @jeelidev/personal-neo4j-memory-server

Option 2: Install from GitHub (Available Now)

npx -y https://github.com/jeelidev/personal-neo4j-memory-server.git

📝 Claude Code Configuration

Add to Claude Desktop/Claude Code config:

For NPM Package (when published):

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@jeelidev/personal-neo4j-memory-server"],
      "env": {
        "NEO4J_URI": "bolt://localhost:7687",
        "NEO4J_USERNAME": "neo4j",
        "NEO4J_PASSWORD": "your-password"
      }
    }
  }
}

For GitHub Installation (Current):

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "https://github.com/jeelidev/personal-neo4j-memory-server.git"],
      "env": {
        "NEO4J_URI": "bolt://localhost:7687",
        "NEO4J_USERNAME": "neo4j",
        "NEO4J_PASSWORD": "your-password"
      }
    }
  }
}

☁️ Cloudflare Access Setup (CRITICAL FOR REMOTE SETUP)

🎯 The Problem Solved

Traditional Cloudflare Tunnel with TCP (cloudflared tunnel --url tcp://localhost:7687) fails for Neo4j BOLT protocol, causing HTTP 400 errors.

✅ The Solution: Cloudflare Access

Use cloudflared access tcp instead of cloudflared tunnel for reliable BOLT protocol connections.

1. Cloudflare Dashboard Configuration

Navigate to: Zero Trust → Networks → Tunnels → Public Hostnames

Add Public Hostname:

  • Type: TCP
  • Hostname: neo4j-bolt.jeelidev.uk (or your domain)
  • Service: tcp://localhost:7687

2. Local Cloudflare Access Command

# Start tunnel for Neo4j BOLT
cloudflared access tcp --hostname neo4j-bolt.jeelidev.uk --url localhost:7687

# For multiple services (MySQL, PostgreSQL, SSH, etc.)
cloudflared access tcp --hostname mysql-server.jeelidev.uk --url localhost:3306
cloudflared access tcp --hostname postgres-server.jeelidev.uk --url localhost:5432

3. SSH Configuration (Optional but Recommended)

Add to ~/.ssh/config:

Host *.jeelidev.uk
  ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

🛠️ Automated TCP Tunnels Service

📁 Included Scripts

This package includes automated tunnel management for any TCP service:

cloudflare-tcp-tunnels.sh - Main Script

# Start all configured tunnels
./cloudflare-tcp-tunnels.sh start

# Check tunnel status
./cloudflare-tcp-tunnels.sh status

# Add new tunnel
./cloudflare-tcp-tunnels.sh add my-service api.jeelidev.uk 3000

# List configured tunnels
./cloudflare-tcp-tunnels.sh list

# Remove existing tunnel
./cloudflare-tcp-tunnels.sh remove my-service

# Clean all tunnels (resets configuration)
./cloudflare-tcp-tunnels.sh clean

# Stop all tunnels
./cloudflare-tcp-tunnels.sh stop

Pre-configured Services:

  • Neo4j BOLT: neo4j-bolt.jeelidev.uk:7687
  • Neo4j Routing: neo4j-routing.jeelidev.uk:7688
  • MySQL: mysql-server.jeelidev.uk:3306
  • PostgreSQL: postgres-server.jeelidev.uk:5432
  • SSH: ssh-server.jeelidev.uk:22
  • Redis: redis-server.jeelidev.uk:6379
  • MongoDB: mongodb-server.jeelidev.uk:27017
  • Custom Services: Easily add more with add command

cloudflare-tcp-tunnels.service - Systemd Service

# Install for automatic startup on boot
sudo cp cloudflare-tcp-tunnels.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable cloudflare-tcp-tunnels.service
sudo systemctl start cloudflare-tcp-tunnels.service

🗄️ Neo4j Setup

Working setup: DozerDB with GDS Plugin

For the database, use DozerDB with the Graph Data Science plug-in, GDS is not only recommended but necessary:

For current installation instructions, see: https://dozerdb.org/

Example setup:

# Run DozerDB container with latest version
docker run \
    -p 7474:7474 -p 7687:7687 \
    -v $HOME/neo4j/data:/data \
    -v $HOME/neo4j/logs:/logs \
    -v $HOME/neo4j/plugins:/plugins \
    --env NEO4J_AUTH=neo4j/password \
    --env NEO4J_dbms_security_procedures_unrestricted='gds.*' \
    graphstack/dozerdb:latest

# Install GDS plugin - see dozerdb.org for current instructions

# Verify GDS plugin works
# In Neo4j Browser (http://localhost:7474):
# RETURN gds.similarity.cosine([1,2,3], [2,3,4]) as similarity

Remote Neo4j with Cloudflare Access

For remote Neo4j servers, use Cloudflare Access instead of traditional tunneling:

# On remote server: configure Zero Trust hostname
# On local machine: start access tunnel
cloudflared access tcp --hostname neo4j-remote.jeelidev.uk --url localhost:7687

# Connect Neo4j Browser to: bolt://localhost:7687
# MCP connects through localhost proxy

🛠️ Unified Tools

The server provides 4 unified MCP tools that integrate automatically with Claude:

  • memory_store - Create memories with observations and immediate relations in ONE operation
  • memory_find - Unified search/retrieval with semantic search, direct ID lookup, date filtering, and graph traversal
  • memory_modify - Comprehensive modification operations (update, delete, observations, relations)
  • database_switch - Switch database context for isolated environments

📊 Memory Structure

{
  "id": "dZ$abc123",
  "name": "Project Alpha",
  "memoryType": "project",
  "metadata": {"status": "active", "priority": "high"},
  "observations": [
    {"id": "dZ$obs456", "content": "Started development", "createdAt": "2025-06-08T10:00:00Z"}
  ],
  "related": {
    "ancestors": [{"id": "dZ$def789", "name": "Initiative", "relation": "PART_OF", "distance": 1}],
    "descendants": [{"id": "dZ$ghi012", "name": "Task", "relation": "INCLUDES", "distance": 1}]
  }
}

🎯 System Prompt

The simplest use of the memory tool, the following usually is more than enough.

## Memory Tool Usage
- Store all memory for this project in database: 'project-database-name'
- Use MCP memory tools exclusively for storing project-related information
- Begin each session by:
  1. Switching to this project's database
  2. Searching memory for data relevant to the user's prompt

🔧 Troubleshooting

Cloudflare Access Issues

❌ HTTP 400 Error with Traditional Tunneling:

# WRONG - This causes HTTP 400 errors
cloudflared tunnel --url tcp://localhost:7687

# CORRECT - Use Cloudflare Access
cloudflared access tcp --hostname neo4j-bolt.jeelidev.uk --url localhost:7687

✅ Connection Verification:

# Verify tunnel is working
netcat -zv localhost 7687
# Should show: Connection to localhost port 7687 [tcp/*] succeeded!

Vector Search Issues:

  • Check logs for [VectorSearch] GDS Plugin detected
  • GDS Plugin requires DozerDB setup (see Neo4j Setup section)

Connection Issues:

  • Verify Neo4j is running: docker ps
  • Test connection: curl http://localhost:7474
  • Check credentials in environment variables
  • Ensure Cloudflare Access tunnels are running

📚 Cloudflare Access Commands Reference

Supported Protocols:

# TCP Services (Neo4j, MySQL, PostgreSQL, etc.)
cloudflared access tcp --hostname service.domain.com --url localhost:PORT

# SSH Services
cloudflared access ssh --hostname ssh.domain.com

# HTTP/HTTPS Services
cloudflared access https://app.domain.com

# RDP (Windows Remote Desktop)
cloudflared access rdp --hostname rdp.domain.com --local-port 3389

# VNC
cloudflared access vnc --hostname vnc.domain.com --local-port 5900

🚀 Production Deployment

For Production Use:

  1. Install systemd service for automatic tunnel startup
  2. Configure proper SSL certificates in Cloudflare Zero Trust
  3. Set up access policies for additional security
  4. Monitor tunnel health with the provided status command
  5. Use environment variables for sensitive configuration

📄 License

MIT

🤝 Contributing

This is a personal fork enhanced for Cloudflare Access compatibility. Original project by sylweriusz.

Key Enhancements in This Fork:

  • Cloudflare Access TCP compatibility
  • Enhanced error logging for tunneling issues
  • Automated tunnel management scripts
  • Production-ready systemd service
  • Comprehensive documentation