MemoSift

Works with
the stack you already have.

One SDK. Every framework. MemoSift drops into 8 agent platforms with typed adapters, middleware, and an MCP server that works with any client.

8ADAPTERS
1SDK
2LANGUAGES
AGENTS
anthropic.pySDK
$pip install "memosift[anthropic]"
from anthropic import AsyncAnthropic
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
client = ms.wrap_anthropic(AsyncAnthropic(), session_id="my-session")

response = await client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[...],
)
Wrap the AsyncAnthropic client. Tool-result blocks intercepted pre-flight.docs →

Four lines to sifted context.

01
Install
Add the SDK + your framework adapter.
pip install memosift
02
Init
Create a project-scoped client.
ms = MemoSift(project="acme")
03
Wrap
Wrap the agent loop or tool layer.
agent.middleware = [ms.middleware()]
04
Recall
Ask for context, any time.
ctx = ms.recall("auth middleware")

Every integration, one place.

Anthropic

PythonTypeScript

Wrap the AsyncAnthropic client. Tool-result blocks intercepted pre-flight.

pythonms.wrap_anthropic(...)

pip install "memosift[anthropic]"

from anthropic import AsyncAnthropic
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
client = ms.wrap_anthropic(AsyncAnthropic(), session_id="my-session")

response = await client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[...],
)
typescriptwrapAnthropic(...)
import Anthropic from "@anthropic-ai/sdk";
import { MemoSift, wrapAnthropic } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const client = wrapAnthropic(new Anthropic(), { memosift: ms, session: ms.session("my-session") });

OpenAI

PythonTypeScript

Proxies chat.completions.create AND responses.create. Mutates oversized tool outputs in place.

pythonms.wrap_openai(...)

pip install "memosift[openai]"

from openai import AsyncOpenAI
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
client = ms.wrap_openai(AsyncOpenAI(), session_id="my-session")
typescriptwrapOpenAI(...)
import OpenAI from "openai";
import { MemoSift, wrapOpenAI } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const client = wrapOpenAI(new OpenAI(), { memosift: ms, session: ms.session("my-session") });

OpenAI Agents SDK

PythonTypeScript

One decorator. Every tool call sifted.

pythonms.openai_agents_tool_wrapper(...)
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
intercept = ms.openai_agents_tool_wrapper(session_id="my-session")

@intercept
async def fetch_data(query: str) -> str:
    return long_csv_content
typescriptwrapOpenAIAgentsTool(...)
import { MemoSift, wrapOpenAIAgentsTool } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const wrappedTool = wrapOpenAIAgentsTool(myTool, { memosift: ms, session: ms.session("my-session") });

Claude Agent SDK

PythonTypeScript

PostToolUse hooks — the SDK's native extension point.

pythonms.claude_agent_hooks(...)
from claude_agent_sdk import ClaudeAgentOptions
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
options = ClaudeAgentOptions(hooks=ms.claude_agent_hooks())
typescriptinstallClaudeAgentMemoSift(...)
import { MemoSift, installClaudeAgentMemoSift } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
installClaudeAgentMemoSift(myAgent, { memosift: ms, session: ms.session("my-session") });

LangChain

PythonTypeScript

BaseCallbackHandler — pass via callbacks=[...] to any chain, agent, or tool.

pythonms.langchain_callback(...)

pip install "memosift[langchain]"

from langchain_openai import ChatOpenAI
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
handler = ms.langchain_callback(session_id="my-session")
llm = ChatOpenAI(callbacks=[handler])
typescriptmemosiftCallback(...)
import { ChatOpenAI } from "@langchain/openai";
import { MemoSift, memosiftCallback } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const handler = memosiftCallback({ memosift: ms, session: ms.session("my-session") });
const llm = new ChatOpenAI({ callbacks: [handler] });

LangGraph

PythonTypeScript

ToolNode-level interception via awrap_tool_call.

pythonms.langgraph_wrapper(...)
from langgraph.prebuilt import ToolNode
from memosift import MemoSift

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")
tool_node = ToolNode(tools=my_tools, awrap_tool_call=ms.langgraph_wrapper())
typescriptwithLangGraphMemoSift(...)
import { MemoSift, withLangGraphMemoSift } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const wrapped = withLangGraphMemoSift(myCompiledGraph, { memosift: ms, session: ms.session("my-session") });

Vercel AI SDK

TypeScriptTypeScript only

LanguageModelV1Middleware. TypeScript only — JS-only framework.

typescriptmemosiftMiddleware(...)
import { generateText } from "ai";
import { MemoSift, memosiftMiddleware } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const middleware = memosiftMiddleware({ memosift: ms, session: ms.session("my-session") });
// Pass via the Vercel AI SDK's middleware option.

Generic

PythonTypeScript

Configurable Proxy. Declare methods + extract function. Works with any client.

pythonms.wrap_generic(...)
from memosift import MemoSift
from memosift.adapters import ExtractedToolResult

ms = MemoSift(api_key="msk_...", base_url="https://dev.memosift.com")

def extract(result, ctx):
    return [ExtractedToolResult(tool_name="my_tool", content=str(result))]

wrapped = ms.wrap_generic(
    my_client,
    session_id="my-session",
    methods=["chat.completions.create"],
    extract=extract,
)
typescriptwrapGenericClient(...)
import { MemoSift, wrapGenericClient } from "memosift";

const ms = new MemoSift({ apiKey: process.env.MEMOSIFT_API_KEY!, baseUrl: "https://dev.memosift.com" });
const wrapped = wrapGenericClient(myClient, {
  memosift: ms,
  session: ms.session("my-session"),
  methods: ["chat.completions.create"],
  extract: (result, ctx) => [{ toolName: "myTool", content: String(result) }],
});

Don't see your framework?
The SDK is framework-agnostic.

Every adapter is built on the same typed Python + TypeScript SDK. If you can wrap a tool call, you can ship MemoSift.