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.
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=[...],
)Four lines to sifted context.
Every integration, one place.
Anthropic
PythonTypeScriptWrap the AsyncAnthropic client. Tool-result blocks intercepted pre-flight.
ms.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=[...],
)wrapAnthropic(...)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
PythonTypeScriptProxies chat.completions.create AND responses.create. Mutates oversized tool outputs in place.
ms.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")wrapOpenAI(...)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
PythonTypeScriptOne decorator. Every tool call sifted.
ms.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_contentwrapOpenAIAgentsTool(...)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
PythonTypeScriptPostToolUse hooks — the SDK's native extension point.
ms.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())installClaudeAgentMemoSift(...)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
PythonTypeScriptBaseCallbackHandler — pass via callbacks=[...] to any chain, agent, or tool.
ms.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])memosiftCallback(...)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
PythonTypeScriptToolNode-level interception via awrap_tool_call.
ms.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())withLangGraphMemoSift(...)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 onlyLanguageModelV1Middleware. TypeScript only — JS-only framework.
memosiftMiddleware(...)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
PythonTypeScriptConfigurable Proxy. Declare methods + extract function. Works with any client.
ms.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,
)wrapGenericClient(...)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.