Agent skill
neo4j-graphiti-migration
Assists with migrating data from Neo4j Memory to Graphiti temporal knowledge graphs
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/neo4j-graphiti-migration
SKILL.md
Neo4j Memory to Graphiti Migration Skill
When to Use This Skill
Invoke this skill when the user asks about:
- Migrating data from Neo4j Memory to Graphiti
- Converting entities to episodes
- Episode format templates
- Migration validation
- Group ID classification
- Rate limiting strategies
Core Concepts
Source System: Neo4j Memory (MCP_DOCKER)
- Entity-first architecture (direct node creation)
- Observations as array properties on entities
- Simple typed relationships
- No temporal tracking, no embeddings
Target System: Graphiti (graphiti-local)
- Episode-first architecture (LLM extraction)
- Temporal tracking (valid_at, invalid_at)
- group_id namespace isolation
- Auto-generated embeddings
Entity-to-Episode Conversion Templates
Person Entities (source: text)
{Name} is a {role/title} with {experience summary}.
{Key professional details}.
Key observations:
- {observation 1}
- {observation 2}
- {observation N}
Experience Entities (source: json)
json
{
"name": "Role/Position Name",
"type": "Experience",
"years": "YYYY-YYYY",
"duration": "N years",
"company": "Company Name",
"details": ["detail 1", "detail 2"]
}
Organization Entities (source: text)
{Organization Name} is a {type} organization.
{Description and context}.
Key divisions/teams:
- {division 1}
- {division 2}
Leadership: {key people and roles}
JobPosting Entities (source: json)
json
{
"title": "Job Title",
"company": "Company",
"salary_range": "$XXK-$YYK",
"requirements": ["req1", "req2"],
"posted_date": "YYYY-MM"
}
Pattern/Architecture Entities (source: text)
{Pattern Name} Pattern
Description: {what it does}
When to use:
- {use case 1}
- {use case 2}
Trade-offs:
- Pros: {benefits}
- Cons: {limitations}
Related patterns: {related}
Group ID Classification Rules
| Entity Type | group_id |
|---|---|
| Don Branson, Experience, Skills, Credentials | don_branson_career |
| Organization (Disney*), Team, BuyingCenter | disney_knowledge |
| JobPosting, Recruiter | career_opportunities |
| Pattern, Architecture | technical_patterns |
| research, Project (other) | ai_engineering_research |
Rate Limiting
Sequential Mode (don_branson_career)
- 1 episode at a time
- 2 second pause between calls
- For CRITICAL priority data
Batch Mode (all others)
- Up to 10 episodes per batch
- 0.3 second delay within batch
- 3 second pause between batches
Exponential Backoff on 429 Errors
Base delay → 2x → 4x → 8x → 16x (max 60s)
Validation Queries
After each group_id migration, verify:
-
Episode count:
get_episodes(group_ids=[group_id])- Pass threshold: ≥80% of expected
-
Entity discovery:
search_nodes(query="entity name", group_ids=[group_id])- Pass threshold: ≥80% of key entities found
-
Relationship extraction:
search_memory_facts(query="relationship query")- Pass threshold: ≥3 relevant facts per query
Migration State File
Location: migration/progress/migration_state.json
json
{
"started_at": "ISO timestamp",
"current_phase": 1,
"completed_groups": ["group1"],
"in_progress_group": "group2",
"completed_episodes": {"group1": ["entity1", "entity2"]},
"validation_results": {"group1": {...}},
"last_checkpoint": "ISO timestamp"
}
Quick Reference Commands
bash
# Dry run
uv run python migration/orchestrate_migration.py --dry-run
# Run specific phase
uv run python migration/orchestrate_migration.py --phase 1
# Resume from checkpoint
uv run python migration/orchestrate_migration.py --resume
# Verbose logging
uv run python migration/orchestrate_migration.py -v
Rollback
Per-group rollback (DANGEROUS - requires confirmation):
python
# Clear specific namespace
mcp__graphiti-local__clear_graph(group_ids=["group_id"])
Source Neo4j Memory remains unchanged as read-only reference.
Didn't find tool you were looking for?