One API to give any AI agent, on any model, access to shared context that survives across sessions, handoffs, and providers.
Quick Start
TypeScript, Python, or MCP — pick your path and add persistent memory to any AI agent.
import { NeutrallyMemory } from '@neutrally/sdk';
const memory = new NeutrallyMemory({
apiKey: process.env.NEUTRALLY_API_KEY,
});
// Store a memory
await memory.store({
fact: "User prefers TypeScript over JavaScript",
type: "preference",
});
// Search memories semantically
const results = await memory.search("programming language preferences");
// Retrieve context for an AI prompt
const context = await memory.getContext({
query: "What tech stack does the user prefer?",
limit: 20,
});Why Neutrally
One memory layer across Claude, GPT, Gemini, Llama, and any future model. Switch providers without losing context.
Vector embeddings + full-text search with Reciprocal Rank Fusion. Semantic understanding meets keyword precision.
Structured fact extraction with semantic deduplication. New information automatically supersedes outdated facts.
Connect your own API keys. Your keys stay server-side. LLM providers do not train on API data. AES-256-GCM key encryption.
10 MCP tools out of the box. Connect from Claude Code, VS Code, Cursor, or any MCP-compatible client.
Row-level security, rate limiting, token management. Running in production with real users today.
API
RESTful API with Bearer token authentication. Store, search, and retrieve memories with a few lines of code.
/api/v1/memoryList all memories with optional type filtering
/api/v1/memoryStore a new memory with type, title, and content
/api/v1/memoryUpdate an existing memory
/api/v1/memoryDelete a memory by ID
/api/memory/searchSemantic search across all conversation memory
/api/memory/contextGet aggregated user context (interests, projects, stack)
/api/memory/fetchFetch complete conversation with all messages
/api/memory/recentGet recent messages across all conversations
const response = await fetch(
'https://neutrally.app/api/memory/search?query=typescript',
{
headers: {
'Authorization': 'Bearer your-token',
},
}
);
const memories = await response.json();
// Returns:
// [
// {
// "conversation_id": "abc-123",
// "title": "Tech Stack Discussion",
// "summary": "User prefers TypeScript...",
// "keywords": ["typescript", "react"]
// }
// ]await fetch('https://neutrally.app/api/v1/memory', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'preference',
title: 'Language preference',
content: 'User prefers TypeScript over JavaScript',
}),
});MCP Server
Connect Neutrally to Claude Code, VS Code, Cursor, or any MCP client. Your AI tools get persistent memory instantly.
npx neutrally@latest # Connects to your Neutrally account via OAuthsearchSemantic search across all conversations and memories
list_conversationsList recent conversations with summaries and keywords
fetch_conversationGet complete conversation with every message
get_contextRetrieve aggregated user context and preferences
recentGet the most recent messages across all conversations
extract_codeExtract code snippets from conversation history
summarize_activitySummarize recent activity and conversation topics
save_memoryStore a new structured memory item
list_memoryList all stored memory items with filtering
delete_memoryRemove a memory item by ID
Architecture
Your AI agent chats with users through any model. Every message is stored and indexed in real-time.
Structured extraction captures personal facts, dates, numbers, preferences, and decisions. Each fact is embedded as a vector for semantic retrieval.
When new information contradicts old information, the system detects the conflict and keeps the most recent version. "I live in London" gets superseded by "I moved to Berlin."
Vector similarity + full-text search with Reciprocal Rank Fusion. The most relevant memories surface regardless of which model stored them or when.
Start with the free tier. One memory layer, every model, every agent.