Wraps the SlimContext library to compress chat histories when they approach token limits. You get two tools: trim_messages removes the oldest messages while preserving system prompts and recent context, while summarize_messages uses OpenAI's API to condense the middle of conversations into concise summaries. Both let you configure token thresholds, how many recent messages to preserve, and when compression kicks in. The trimming strategy is fast and deterministic, good for quick cleanup. The summarization route costs API calls but maintains semantic context better for long conversations. Useful when you're building chatbots or agents that need to stay under model context windows without losing conversational thread.
A Model Context Protocol (MCP) server that wraps the SlimContext library, providing AI chat history compression tools for MCP-compatible clients.
SlimContext MCP Server exposes two powerful compression strategies as MCP tools:
trim_messages - Token-based compression that removes oldest messages when exceeding token thresholdssummarize_messages - AI-powered compression using OpenAI to create concise summariesnpm install -g slimcontext-mcp-server
# or
pnpm add -g slimcontext-mcp-server
# Clone and setup
git clone <repository>
cd slimcontext-mcp-server
pnpm install
# Build
pnpm build
# Run in development
pnpm dev
# Type checking
pnpm typecheck
Add to your MCP client configuration:
{
"mcpServers": {
"slimcontext": {
"command": "npx",
"args": ["-y", "slimcontext-mcp-server"]
}
}
}
OPENAI_API_KEY: OpenAI API key for summarization (optional, can be passed as tool parameter)Compresses chat history using token-based trimming strategy.
Parameters:
messages (required): Array of chat messagesmaxModelTokens (optional): Maximum model token context window (default: 8192)thresholdPercent (optional): Percentage threshold to trigger compression 0-1 (default: 0.7)minRecentMessages (optional): Minimum recent messages to preserve (default: 2)Example:
{
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Hello!" },
{ "role": "assistant", "content": "Hi there! How can I help you today?" },
{ "role": "user", "content": "Tell me about AI." }
],
"maxModelTokens": 4000,
"thresholdPercent": 0.8,
"minRecentMessages": 2
}
Response:
{
"success": true,
"original_message_count": 4,
"compressed_message_count": 3,
"messages_removed": 1,
"compression_ratio": 0.75,
"compressed_messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "assistant", "content": "Hi there! How can I help you today?" },
{ "role": "user", "content": "Tell me about AI." }
]
}
Compresses chat history using AI-powered summarization strategy.
Parameters:
messages (required): Array of chat messagesmaxModelTokens (optional): Maximum model token context window (default: 8192)thresholdPercent (optional): Percentage threshold to trigger compression 0-1 (default: 0.7)minRecentMessages (optional): Minimum recent messages to preserve (default: 4)openaiApiKey (optional): OpenAI API key (can also use OPENAI_API_KEY env var)openaiModel (optional): OpenAI model for summarization (default: 'gpt-4o-mini')customPrompt (optional): Custom summarization promptExample:
{
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "I want to build a web scraper." },
{
"role": "assistant",
"content": "I can help you build a web scraper! What programming language would you prefer?"
},
{ "role": "user", "content": "Python please." },
{
"role": "assistant",
"content": "Great choice! For Python web scraping, I recommend using requests and BeautifulSoup..."
},
{ "role": "user", "content": "Can you show me a simple example?" }
],
"maxModelTokens": 4000,
"thresholdPercent": 0.6,
"minRecentMessages": 2,
"openaiModel": "gpt-4o-mini"
}
Response:
{
"success": true,
"original_message_count": 6,
"compressed_message_count": 4,
"messages_removed": 2,
"summary_generated": true,
"compression_ratio": 0.67,
"compressed_messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{
"role": "system",
"content": "The user expressed interest in building a web scraper and requested help with Python. The assistant recommended using requests and BeautifulSoup libraries for Python web scraping."
},
{
"role": "assistant",
"content": "Great choice! For Python web scraping, I recommend using requests and BeautifulSoup..."
},
{ "role": "user", "content": "Can you show me a simple example?" }
]
}
Both tools expect messages in SlimContext format:
interface SlimContextMessage {
role: 'system' | 'user' | 'assistant' | 'tool' | 'human';
content: string;
}
All tools return structured error responses:
{
"success": false,
"error": "Error message description",
"error_type": "SlimContextError" | "OpenAIError" | "UnknownError"
}
Common error scenarios:
SlimContext uses a simple heuristic for token estimation: Math.ceil(content.length / 4) + 2. This provides a reasonable approximation for most use cases. For more accurate token counting, you would need to implement a custom token estimator in your client application.
MIT
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp