slimcontext-mcp-server について
slimcontext-mcp-serverは、SlimContextのチャット履歴圧縮機能をMCPクライアント向けに提供します。トークン数による削除と、OpenAIを使った要約に対応しています。
主な機能
- 01トークン閾値による履歴の削除
- 02OpenAIによる要約生成
- 03システムメッセージと直近の会話を保持
- 04圧縮結果を構造化して返却
活用シーン
- 01コンテキスト上限を超える会話の短縮
- 02長い会話の要点を要約で保持
MCP 対応
互換クライアントに、trim_messagesとsummarize_messagesの2つのチャット履歴圧縮ツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| messages | array | はい | 圧縮するチャットメッセージの配列 |
| maxModelTokens | number | いいえ | モデルの最大トークンコンテキストウィンドウ |
| thresholdPercent | number | いいえ | 圧縮を開始する割合のしきい値(0-1) |
| minRecentMessages | number | いいえ | 常に保持する直近メッセージの最小数 |
詳細
SlimContext MCP Server
SlimContext ライブラリをラップした Model Context Protocol(MCP)サーバーです。MCP 対応クライアント向けに、AI チャット履歴を圧縮するツールを提供します。
概要
SlimContext MCP Server は、強力な 2 種類の圧縮戦略を MCP ツールとして公開します。
trim_messages- トークンベースの圧縮です。トークン数がしきい値を超えた場合、最も古いメッセージを削除します。summarize_messages- OpenAI を使用して簡潔な要約を作成する、AI を活用した圧縮です。
インストール
npm 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
設定
MCP クライアントの設定
MCP クライアントの設定に追加します。
{
"mcpServers": {
"slimcontext": {
"command": "npx",
"args": ["-y", "slimcontext-mcp-server"]
}
}
}
環境変数
OPENAI_API_KEY:要約に使用する OpenAI API キーです(任意。ツールのパラメーターとして渡すこともできます)。
ツール
trim_messages
トークンベースのトリミング戦略を使用して、チャット履歴を圧縮します。
パラメーター:
messages(必須):チャットメッセージの配列maxModelTokens(任意):モデルのトークンコンテキストウィンドウの最大値(デフォルト:8192)thresholdPercent(任意):圧縮を開始するしきい値の割合 0~1(デフォルト:0.7)minRecentMessages(任意):保持する直近のメッセージの最小数(デフォルト:2)
例:
{
"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
}
レスポンス:
{
"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." }
]
}
summarize_messages
AI を活用した要約戦略を使用して、チャット履歴を圧縮します。
パラメーター:
messages(必須):チャットメッセージの配列maxModelTokens(任意):モデルのトークンコンテキストウィンドウの最大値(デフォルト:8192)thresholdPercent(任意):圧縮を開始するしきい値の割合 0~1(デフォルト:0.7)minRecentMessages(任意):保持する直近のメッセージの最小数(デフォルト:4)openaiApiKey(任意):OpenAI API キー(環境変数の OPENAI_API_KEY も使用できます)openaiModel(任意):要約に使用する OpenAI モデル(デフォルト:'gpt-4o-mini')customPrompt(任意):カスタムの要約プロンプト
例:
{
"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"
}
レスポンス:
{
"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?" }
]
}
メッセージ形式
どちらのツールも、SlimContext 形式のメッセージを受け取ります。
interface SlimContextMessage {
role: 'system' | 'user' | 'assistant' | 'tool' | 'human';
content: string;
}
エラー処理
すべてのツールは、構造化されたエラーレスポンスを返します。
{
"success": false,
"error": "Error message description",
"error_type": "SlimContextError" | "OpenAIError" | "UnknownError"
}
よくあるエラーの例:
- 要約に必要な OpenAI API キーがない
- メッセージ形式が無効
- OpenAI API のレート制限またはエラー
- パラメーター値が無効
トークンの推定
SlimContext は、トークンの推定にシンプルなヒューリスティック Math.ceil(content.length / 4) + 2 を使用します。これは、ほとんどのユースケースで妥当な近似値を提供します。より正確にトークン数をカウントするには、クライアントアプリケーションでカスタムのトークン推定器を実装する必要があります。
圧縮戦略
トリミング戦略
- すべてのシステムメッセージを保持します
- 直近の N 件のメッセージを保持します
- トークン数がしきい値を下回るまで、システムメッセージ以外の最も古いメッセージを削除します
- 高速かつ決定論的です
- 外部 API への依存はありません
要約戦略
- すべてのシステムメッセージを保持します
- 直近の N 件のメッセージを保持します
- AI を使用して会話の中間部分を要約します
- 文脈が豊かな要約を作成します
- OpenAI API へのアクセスが必要です
ライセンス
MIT
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- 新しい機能のテストを追加します
- プルリクエストを送信します
関連項目
- SlimContext - 基盤となる圧縮ライブラリ
- Model Context Protocol - プロトコル仕様
- MCP SDK - MCP 用 TypeScript SDK
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。