mcpField
K
Keel

Keel

ローカル
angelkurten.github.ioメモリ・ナレッジ151 日前に更新

Keel について

Keelは、製品内の複数エージェント向けにテナント単位のコンテキスト層を提供します。ドメインイベントから二時点コンテキストグラフを構築し、カートリッジで各ドメインを定義して事実の来歴を保持します。

主な機能

  1. 01ドメインイベントから決定的にグラフを構築
  2. 02テナントごとにグラフと権限を分離
  3. 03事実の来歴と二時点データを記録
  4. 04コンテキスト、履歴、検索、関連、注釈のツール
  5. 05イベントアダプターと複数言語のSDK

活用シーン

  1. 01製品内の複数エージェントで顧客情報を共有
  2. 02事実の有効時点と記録時点を追跡
  3. 03イベントストリームからチームや世帯の情報を構築
  4. 04意味に基づいて該当する対象を検索

MCP 対応

KeelはMCP経由で5つのコンテキストツールを公開し、エージェントによる照会と注釈の追加を可能にします。HTTP JSON APIにも対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"angelkurten-keel": {
"command": "uvx",
"args": [
"keel-context"
],
"env": {
"KEEL_DB": "<KEEL_DB>",
"KEEL_AGENT": "<KEEL_AGENT>"
}
}
}
}
起動コマンドuvx keel-context
設定が必要な環境変数
KEEL_DBA SQLite file or a mysql:// URL; in memory when unset
KEEL_AGENTThe agent id, when the cartridge declares agents

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypikeel-context0.34.0
ocighcr.io/angelkurten/keel:0.34.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Keel

ci PyPI docs DOI

エージェントごとにパイプラインを作り直すのは、もうやめましょう。

ライブデモ · ドキュメント · ホスト型コンソール(ベータ版) · 理由:4つのエージェントと、顧客コンテキストのコピーを4つ作った

Keelは、製品内のAIエージェント向けコンテキストレイヤーです。垂直SaaS、コンシューマーアプリ、社内ツールなどが対象です。製品のドメインイベントを受け取り、テナントごとの双時制コンテキストグラフを生成します。単位はエンドカスタマー、世帯、チームなど、任意に設定できます。構築するすべてのエージェントが、MCP、HTTP、または型付きSDKを介して、同じ5つのツールからグラフを読み書きできます。

オントロジー、イベントカタログ、セマンティックルール、メモリポリシーを含む カートリッジ に、垂直領域を一度だけ記述します。Keelのコアは、ドメインについて何も知りません。2つ目のエージェントは、数週間ではなく1日で接続できます。2つ目のパイプラインを書く必要がないからです。

サンプルのカートリッジとイベントを使って、1分で試せます。

pip install keel-context
keel init fleet --example fleet          # also crm, clinics, finance
keel context fleet fleet/events.jsonl unit:MXK-4821

ステータス:0.34.0、アルファ版。コンテナ:ghcr.io/angelkurten/keel。MCPとHTTP JSON API(/v1)経由の5つのツール、Postgres、Webhook、Kafka、SQSアダプター、セマンティック検索、統合、エージェントレジストリ、TypeScript、Python、Go、PHP用SDKを提供しています。インメモリストア、SQLite(--db keel.db、標準ライブラリを使用し、サーバーの実行不要)、またはMySQL(--db mysql://...)で動作します。

ターミナルデモ:ストリームをカートリッジに照らして検証し、取り込み、ルールの判定とともにタイヤのコンテキストを尋ね、LLMを使わずにエージェントを実行

課題

製品に新しいエージェントを追加するたびに、同じ作業が繰り返されます。顧客データを抽出して正規化し、「重要」とは何かを判断し、独自のメモリを保持し、モデル向けに独自のツールを公開します。エージェントが4つなら、顧客コンテキストのコピーも4つ、「重要」の定義も4つ、互いに連携しないメモリも4つです。

既存のメモリレイヤー(Zep、Mem0、AgentCore Memory、Neo4jのMKG)は、テキストやドキュメントを取り込み、ユーザーまたはエージェントごとにメモリをモデル化します。しかし、ドメインイベントを出発点とするものはありません。また、製品がすでに持つテナント、つまりB2B SaaSのエンドカスタマー、コンシューマーアプリの世帯、社内ツールのチームをモデル化するものもありません。

Keelの特長

  1. カートリッジ。 垂直領域は、YAMLと数個の10行程度のハンドラーで宣言します。コアは汎用のままです。フリート、クリニック、物流、または独自の製品向けにカートリッジを作成できます。
  2. ドキュメントではなくイベントを取り込みます。 Keelは、時刻情報を伴う構造化された事実を取り込みます。PostgresのテーブルからCDC経由で、アウトボックス、型付きSDK、Webhook、Kafka、SQS経由で取り込めます。取り込みは決定論的で、低コストです。グラフはテキストから推論されるのではなく、イベントから作られるため、正確です。
  3. すべての事実が出所情報を持ちます。 ソース、valid_from、valid_to、recorded_at、修正者を記録します。設計段階から監査に対応しています。
  4. テナントごとに1つのグラフ。 エンドカスタマー、世帯、チームごとにサブグラフを設け、それぞれに独自の権限と有効期限を設定します。

5つのツールをあらゆるエージェントで

ツール回答する質問
contextこのテーマについて、現在または過去のある時点で何がわかっていますか?有効な事実、関係、ルールの判定を確認します。
history時間とともにどのように変化し、いつそれを知りましたか?
searchどの対象が一致しますか?テキスト、種類、ルール、属性値、または意味で検索します。
relatedどのようなつながりがありますか?最大3ホップまで確認します。
annotateエージェントや人が証拠とスコープを添えて導き出した結論を記録します。

すべてのパラメーターは仕様に記載されています。

search(mode="semantic")は意味に基づいて対象を見つけます。まずクエリ内のIDを検索し、次に高密度検索と語彙検索を統合し、その後、任意で再ランキングを行います。ベクトルの保存場所と使用するモデルは、メモリ内、Chroma、Weaviate、OpenAI互換の任意の埋め込みエンドポイント、または独自のベクトルデータベースとモデルから選べます(方法、例)。

MCP経由で公開し(keel serve)、任意のエージェントフレームワークから接続します。カートリッジでagents:を宣言し、keel serve --agent <id>を実行すると、サーバーがそのエージェントにバインドされます。読み取りと書き込みの権限はエージェントではなく、レイヤーによって適用されます。

クイックスタート

uv sync --extra dev
uv run keel validate examples/fleet --events examples/fleet/events.jsonl
uv run keel ingest examples/fleet examples/fleet/events.jsonl
uv run keel context examples/fleet examples/fleet/events.jsonl unit:MXK-4821

続いて、独自のカートリッジを作成します。docs/first-cartridge.mdを参照してください(20分)。設定(データベース、シークレット、埋め込みキー)は.envに記述します。.env.exampleをコピーしてください(リファレンス)。

独自の製品では、ライブラリとして使用できます。uv add keel-context(またはpip install keel-context)を実行します。インポート文はimport keelです。別の言語から使う場合は、カートリッジから型付きクライアントを生成します。keel sdk typescript|python|go|php examples/fleet -o <file>を実行してください。各言語には小さなランタイムが用意されています(docs/sdks.mdを参照)。

私たちとパイロット運用を始めましょう

私たちのサポートのもと、エージェントと一緒に製品のイベントでKeelを実行できます。1日で始める初回パイロットでは、各ステップの所要時間の目安を含む手順を確認できます。パイロットのリクエストを送信するか、calendar.app.google/3oKUSqXTQPYmjya56で30分の予定を予約するか、[email protected]までご連絡ください。

実際のイベントストリームに接続する

MCPクライアントから5つのツールに接続します。

uv sync --extra mcp
uv run keel serve examples/fleet --tenant acme-logistics --events examples/fleet/events.jsonl

Claude Codeでは、1つのコマンドで登録でき、エージェントには5つのツールだけが表示されます。

claude mcp add keel -- uv run --directory $PWD keel serve examples/fleet --tenant acme-logistics --events examples/fleet/events.jsonl

Codex CLI(OpenAI)も、~/.codex/config.tomlから同じように使えます。読み取り専用の注釈が付いた4つの読み取りツールは、確認なしで実行されます。どちらのクライアントも、同じ5つのツールを通じて同じ質問に回答しました。ツールを提供するを参照してください。バックエンドや、1つのプロセスから複数のテナントを扱う場合も、同じ5つのツールをJSON APIとして使えます。keel serve --transport httpを実行します(OpenAPI対応の/v1/context、/v1/eventsなどを使用し、リクエストごとにテナントとエージェントを指定します)。

製品のイベントは、すでに利用している場所から送信します(方法(各方法の説明))。

  • Postgres CDC。製品内にコードは不要です。keel cdc <cartridge> --dsn postgresql://... --map cdc.yaml --db keel.db --setupを実行すると、独自のテーブルを監視します。各行の変更がイベントになります。
  • 型付きSDK。バックエンドから使用します。keel sdk typescript <cartridge> -o src/keel.tsを実行し、続けてkeel.events([emit.tireDepthMeasured({...})])を呼び出します(Python、Go、PHPにも対応しています)。
  • アウトボックステーブル。PostgresTableAdapterがカーソルを使って順番にポーリングするため、再起動後も続きから再開できます。
  • Webhook。keel serve --transport httpでPOST /v1/eventsを呼び出すか、build_app(ingestor, token=...)を使用します。
  • SQSまたはKafka。keel consume --queue <url>を実行するか、PythonからKafkaAdapterを使用します。少なくとも1回の配信を行い、各コミット後に確認応答します。
  • バックフィルやテスト用の**.jsonlファイル**。keel ingest <cartridge> events.jsonl --db keel.dbを実行します。

keel export <tenant> --db keel.dbは、閉じた事実とプロベナンスを含め、1つのテナントの監査証跡全体をJSONLとして書き出します。keel importを使うと、任意のストアの空のテナントに、元の状態のまま復元できます。

アーキテクチャ

Keel のアーキテクチャ:ソース、アダプター、決定論的な取り込み、二時点ストア、カートリッジ、5 つのツール、ジョブ、サーフェス、エージェント

各ボックスとその選択肢、どれを選ぶべきかについては、docs/architecture.md を参照してください。

コアが適用する設計ルール:

  • イベントが真実です。 追記専用ログであり、グラフはそこから導出され、再生できます。エージェントや人が書き込んだ内容は、再生後も保持されます。
  • コピーではなくポインターです。 グラフには、行、セマンティクス、蓄積されたメモリーへの参照が保持されます。テーブルのコピーは決して保持しません。
  • 時間を明示します。 事実は終了し、上書きされることはありません。
  • フラットなストアではなく、スコープです。 global > tenant > task > agent。誤ってより広いスコープに昇格することはありません。エージェントのメモリーは書き込んだエージェントのみが読み取れます。タスク ID に紐づくタスクメモリーは、そのタスクを渡す呼び出し(context(task=), history(task=))のみが読み取れます。グローバルメモリーは、すべてのテナントが読み取り、どのイベントも書き込まない予約済みパーティションに保存されます。

リポジトリの構成

keel/            core: envelope, handlers, store, scopes, cartridge loader, ingest, tools, cli
cartridges/      your own cartridges (empty here)
examples/        fleet (reference), crm, finance and clinics: four domains, one core, no core change between them;
                 each a cartridge, its events and its test; fleet also has a minimal agent and a multi-agent workflow
sdk/             SDK runtimes: typescript, go, php (the Python client ships in keel)
evals/           the semantic-search eval bench
docs/            site sources (mkdocs.yml at the root): architecture, first-cartridge, ingest, serve, sdks, operate, SPEC
tests/

ロードマップ

概要を以下に示します。各リリースで提供された内容を含む計画の全文は、ROADMAP.md を参照してください。

リリース済み:

  • イベントエンベロープ、ハンドラーレジストリ、イベント ID による重複排除と再生を備えた決定論的な取り込み
  • メモリー内、SQLite、MySQL の二時点ストアと、適合性テストスイートを備えたストアプロトコル
  • TTL、証拠ポリシー、有効期限、永続的な事実への統合を備えたメモリースコープ(keel expire、keel consolidate)
  • MCP(stdio と HTTP)および JSON API 経由の 5 つのツールと、エージェントレジストリ(人も含む)
  • アダプター:Postgres outbox、webhook、Kafka、SQS
  • 関係をたどり、所要時間を計測する複合ルール
  • トランザクション時刻(as_known_at)、ウォーターマーク以降の変更、タスク ID、冪等な書き込み、提案、競合、トレース
  • カートリッジから生成される SDK:TypeScript、Python、Go、PHP
  • 一括取り込み(MySQL で 90 秒未満に 100 万件のイベントを処理)
  • セマンティック検索:ハイブリッド検索、ID 優先、リランカー、プラグ可能なベクトルインデックスと埋め込みモデル、評価ベンチ
  • Postgres CDC:論理レプリケーションで独自のテーブルを追跡(0.28.0)

未完了:

  • セマンティック検索の評価ベンチにおける、パイロットからの実際のエージェントクエリ
  • カートリッジカタログ、ホスト型 Keel、エンタープライズ機能(2027 年)

論文

Keel:プロダクトエージェント向けの決定論的なコンテキストレイヤー(Zenodo の PDF、ソースは docs/paper/)。3 つの実際の Jira プロジェクトに関する 387 件の質問と 3 つのエージェントを用いた評価では、テナント全体に関する質問において、Keel はプロダクト独自の API を 21~32 ポイント上回り、正解 1 件あたりのコストも最も低くなっています。ハーネスとすべての結果行は evals/jira/ にあります。

@misc{kurten2026keel,
  author    = {K{\"u}rten, Angel},
  title     = {Keel: one deterministic context layer for product agents},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.23571090},
  url       = {https://doi.org/10.5281/zenodo.23571090}
}

ライセンス

Apache 2.0。イベントエンベロープ、カートリッジ形式、5 つのツールは標準であり、今後も常に無料で利用できます。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。