Remember Contacts

SkillDocs & knowledge

Consolidate contacts from email, calendar, chat history, vCards, and LinkedIn exports into persistent memory.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Remember Contacts skill

What this skill tells your AI

The instructions your AI receives, as published by markmhendrickson/neotoma in skills/remember-contacts/SKILL.md and read by ahel’s review.

Consolidate contacts from multiple sources — email, calendar, chat, vCards, LinkedIn exports — into Neotoma memory. Deduplicates by name and email to build a unified contact graph.

When to use

When the user wants to build a persistent, deduplicated contact list from various data sources.

Prerequisites

Run the ensure-neotoma skill first if Neotoma is not yet installed or configured in your current harness.

Supported sources

SourceFormatMethod
EmailGmail/IMAP headersEmail MCP (extract sender/recipient)
CalendarEvent attendeesCalendar MCP
vCards.vcf filesFile read
LinkedInCSV exportFile read
Chat historyConversation participantsFile read
ManualUser-stated contactsChat extraction

Workflow

Phase 0: Verify Neotoma

Confirm Neotoma MCP is connected (call get_session_identity).

Phase 1: Identify sources

  1. Ask the user which sources to pull contacts from:
    • Email (requires email MCP)
    • Calendar (requires calendar MCP)
    • vCard file
    • LinkedIn export CSV
    • Chat history files
  2. For MCP-based sources, verify the relevant MCP is configured.

Phase 2: Collect and deduplicate

  1. Email MCP: extract unique sender/recipient pairs from recent emails.
  2. Calendar MCP: extract attendees from recent events.
  3. vCard files: parse .vcf files for name, email, phone, organization.
  4. LinkedIn CSV: parse the connections export for name, title, company, email.
  5. Chat history: extract participants from conversation files.

Before storing each contact, check for existing records:

  • Search by email address first (most unique).
  • Search by name if no email match.
  • If a match exists, use correct to update with new fields rather than creating a duplicate.

Phase 3: Preview and confirm

Present the consolidated contact list:

  • Total contacts found per source
  • Duplicates detected and merged
  • New contacts to be created Ask for confirmation before storing.

Phase 4: Store contacts

Store each contact as a contact entity with all available fields:

  • name, email, phone, organization, title, role
  • source_file or data_source for provenance
  • source_quote with the relevant snippet when extracting from text

Link contacts to each other or to the user where relationships are apparent (e.g. same company, frequent email correspondents).

Phase 5: Report results

Summarize:

  • Contacts stored (new + updated)
  • Sources used
  • Top organizations or groups
  • Offer follow-up: "Want to enrich these contacts with recent email context?"

Do not

  • Create duplicate contacts — always deduplicate by email, then by name.
  • Import contacts without user confirmation.
  • Store sensitive contact details in chat replies beyond what answering requires.

Signals

GitHub stars
32
Forks
3
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
remember-contacts
Source
github.com/markmhendrickson/neotoma