Junê (june-mcp)

公式

エージェントにメモリを:あらゆるMCPホスト向けの、共有・引用付き・テナント分離型ナレッジグラフメモリ。ローカルファーストのJuneエンドポイントからの根拠に基づく回答—推測ではなく棄権します。

Junê (june MCPで何ができますか?

  • 記憶に基づく引用回答 — アシスタントに、6月のナレッジグラフに基づいて情報源付きで質問に回答させ、不確かな場合はjune_answerで回答を控えさせます。

  • 検索とコンテキストの組み立て — アシスタントに、クエリに対するランク付けされた証拠を取得させたり、june_searchまたはjune_contextを使用してトークン予算内のコンテキストパックを構築させたりします。

  • 事実とメモの記憶 — アシスタントに、事実やメモをグラフに保存するよう指示し、後でjune_rememberですぐに取得・引用できるようにします。

  • ナレッジグラフの探索 — アシスタントに、ノード周辺の近傍を表示させたり、june_graphを使用して境界付きサブグラフをエクスポートさせたりします。

  • 常時指示の管理 — アシスタントに、永続的なドキュメントやスキルを保存、一覧表示、または日付付きの教訓を追加するよう指示し、june_doc_savejune_doc_list、またはjune_learnを使用して規約を決して忘れないようにします。

  • リポジトリへのドキュメント同期 — アシスタントに、エージェントドキュメントやページを管理ファイルとしてリポジトリにエクスポートさせたり、june_docs_exportまたはjune_page_importで編集内容をインポートさせたりします。

ドキュメント

june-mcp

エージェントに記憶を。 june-mcpJunê の公式 MCP サーバーです。あらゆるMCPホスト(Claude Desktop、Claude Codeなど)をJuneのナレッジグラフに接続し、エージェントが共有・引用・テナント分離されたメモリに対して質問検索記憶できるようにします。

このパッケージは薄い、ロジックゼロのコネクタです。取得・グラフ構築・応答はすべて、指定したJuneエンドポイントで行われます。ここにエンジンコードはありません。そのため、一度に読めるほど小さいのです。

Claude Desktop / Claude Code  ──stdio──▶  june-mcp  ──HTTPS──▶  your June endpoint
                                                                 (graph · retrieval · answers)

インストール

pip install june-mcp          # just the connector   (or: pipx install june-mcp)
pip install june-ai           # umbrella: june-mcp + june-bench (the benchmark suite)
pip install "june-bench[mcp]" # the bench, with the connector as an extra

Juneエンドポイントを指定する

june-mcp はあらゆるJuneサービスと通信します。用意する方法は3つあります。

  1. Junêデスクトップアプリ(ローカル優先)。 Junêアプリ を実行し、ローカルエンジンに接続します。ファイル・グラフ・キーはすべて自分のマシンに残ります。
  2. 自前のJuneサービス。 Pro/Teamのお客様で june-local エンジンパッケージを実行している場合は、JUNE_BASE_URL を自前のサーバーに向けます。
  3. ホスティング(Team)。 コンソールのAPIキーを使って、ホストされたJuneワークスペースエンドポイントを指定します。

設定

サーバーはフェイルクローズドです。接続先と接続者を把握していない限り起動を拒否し、不足している項目をすべて1つのメッセージで伝えます(1回に1エラーではありません)。

env必須意味
JUNE_BASE_URLJuneエンドポイント。例: http://localhost:8000
JUNE_CANVASこの接続をバインドするキャンバス(ワークスペース)— 名前work)またはキャンバスID。名前は起動時にIDに解決されます。曖昧な名前はフェイルクローズドになります
JUNE_CANVAS_CREATE任意1 は、指定された名前のキャンバスが存在しない場合、初回実行時に作成します(読み取り専用モードでは拒否されます)
JUNE_API_KEYJune APIキー(JUNE_ALLOW_ANON=1 はキーレスローカルセットアップを明示的にオプトアウトします)
JUNE_LLM_KEY任意引用付き回答のための独自LLMキー — リクエストごとにヘッダーとして転送され、ログに記録されず、サービスに保存されることもありません
JUNE_READONLY任意1 はすべての書き込みツールを非表示にし拒否します(メモリは読み取り専用になります)
JUNE_TOOL_PROFILE任意compactデフォルト)、full、または leancompact は17の関連ツールを、op を取る7つのファミリーツールに折りたたみます — 30ではなく20のツール、Pro読み書き接続で13,236ではなく11,359のプロンプトトークン。すべての呼び出しは以前と同じコードにディスパッチされるため、ゲート・キャンバスルール・レシート・2フェーズ確認は変更されません。デフォルトになる前に4つのホストで測定: Claude Code 1.000タスク成功率(ベースライン0.987)、GPT-5.4直接0.983(0.957)、Codex 0.922(0.763)、全アームで安全でない消去ゼロ。full は30のメンバーをそれぞれの名前でリストします — 同じ0.4.2コード、各1名前。lean はコーディングエージェントが使う6つの動詞のみを公開します(june_answer / june_context / june_search / june_remember / june_learn / june_usage)— 1段落のハンドシェイク付き、約2.5kトークン — 質問と記憶だけが必要なセッション向け
JUNE_FILES_ROOT任意オプトインのディレクトリ。エージェントが june_ingest_file 経由でファイルをアップロードできる場所 — 未設定 ⇒ そのツールは存在しません
JUNE_TIMEOUT_READ / JUNE_TIMEOUT_ANSWER任意動詞ごとのタイムアウト(デフォルト15秒 / 120秒)
JUNE_TOOL_CONCURRENCY任意この接続で同時に実行される最大ツール呼び出し数(デフォルト8)。ホストは1つのストリームでリクエストをパイプライン処理します。これは明示的な上限です — 超過した呼び出しはキューに入り、殺到することはありません
JUNE_DOCS_CANVAS任意エージェントドキュメントを保持するキャンバス(常設指示/スキル — 下記のエージェントメモリを参照)。デフォルト agent_docs。最初の june_doc_save で作成されます
JUNE_DOCS_REFRESH任意0 は定期的な standing_docs ダイジェストを無効にします(デフォルトオン — 忘却防止の安全網です)
JUNE_DOCS_REFRESH_CALLS / JUNE_DOCS_REFRESH_MINUTES任意ダイジェストの頻度: N回のツール呼び出しごと(デフォルト12)または M分ごと(デフォルト10)、先に来た方
JUNE_DOCS_DIGEST_CHARS任意シリアライズされたダイジェストのサイズ上限(デフォルト2000)
JUNE_EXPORT_ROOT任意オプトインのリポジトリディレクトリ。エージェントがJuneのページ/ドキュメントをファイルとしてエクスポートできる場所(下記のリポジトリ同期を参照)— 未設定 ⇒ 3つのリポジトリ同期ツールは存在しません
JUNE_EXPORT_GIT任意1 は各エクスポートが書き込んだファイルだけをコミットします(パススペック限定、プッシュはしません
JUNE_EXPORT_DIR任意ルート内のエージェントドキュメントのサブツリー(デフォルト docs/agent
JUNE_LOG_LEVEL任意ロギングは設計上stderrのみ — stdoutはMCPワイヤーです

エージェントの前にチェックする

JUNE_BASE_URL=http://localhost:8000 JUNE_API_KEY=... JUNE_CANVAS=work june-mcp --doctor

ドクターは次の順序で検証します: 設定 → サービス到達可能性 → キャンバス解決(キャンバス → そのID、例: name "work" → 9147bee6-…)→ 検索シームの健全性 → ツールマニフェスト。各チェックでPASS/FAILと対応するヒントを出力します(例: 名前がない場合は存在するキャンバスをリストし、JUNE_CANVAS_CREATE=1 を指し示します)。ドクターはすべてのチェックが合格した場合のみ 0 で終了します(それ以外は 1)。サーバー自体は設定エラー時に 2 で終了し、半分配線された状態で起動しません。最初にドクターを実行してください。エージェントがサーバーを見る前に、一般的な設定ミスをすべて検出します。

Claudeに配線する

Claude Desktopclaude_desktop_config.json にマージします(設定 → 開発者):

{
  "mcpServers": {
    "june": {
      "command": "june-mcp",
      "env": {
        "JUNE_BASE_URL": "http://localhost:8000",
        "JUNE_API_KEY": "your-key",
        "JUNE_CANVAS": "work",
        "JUNE_LLM_KEY": "your-llm-provider-key"
      }
    }
  }
}

Claude Code:

claude mcp add june -e JUNE_BASE_URL=http://localhost:8000 \
  -e JUNE_API_KEY=your-key -e JUNE_CANVAS=work \
  -e JUNE_LLM_KEY=your-llm-provider-key -- june-mcp

ホストを完全に再起動し(macOSではCmd+Q)、サーバーが20ツールを表示することを確認します — 0.4.2以降のデフォルトであるコンパクトサーフェスです。JUNE_TOOL_PROFILE=full は同じ機能を30の個別名ツールとしてリストします(JUNE_FILES_ROOT 経由で june_ingest_file をオプトインすると31になります)。

ツール

デフォルトのサーフェスはコンパクトです: 20ツール、そのうち7つは関連操作を op 引数の背後にグループ化します。JUNE_TOOL_PROFILE=full は30のメンバーをそれぞれの名前でリストします — 同じ機能、同じゲート、同じ動作です。

ファミリーツール操作折りたたみ
june_graphneighborhood, subgraphjune_neighborhood, june_subgraph
june_maintainenrich, resolvejune_enrich, june_resolve
june_page_readlist, get, grammarjune_page_list, june_page_get(+必要に応じてブロック文法)
june_page_editcreate, append, updatejune_page_create, june_page_append, june_page_update
june_canvas_readlist, current, usejune_canvas_list, june_canvas_current, june_canvas_use
june_canvas_eraseclear, deletejune_canvas_clear, june_canvas_delete
june_docs_readrefresh, list, getjune_docs_refresh, june_doc_list, june_doc_get

その他はすべて独自の名前を維持します: june_answer, june_search, june_enumerate, june_context, june_usage, june_remember, june_ingest, june_page_write, june_page_delete, june_canvas_create, june_doc_save, june_doc_delete, june_learn。何かを削除できる動詞は、できない動詞と一緒に折りたたまれることはありません — したがって june_page_writejune_page_deletejune_page_edit から分離され、各ファミリーは1つの正直な destructiveHint を持ちます。

古い名前は保存済みのエージェントドキュメントで引き続き機能します: 常設ドキュメントのダイジェストには古い名前→新しい名前のマップが含まれ、折りたたまれた名前への呼び出しは正確な置換とともに拒否されます(june_page_get is not a tool on this surface (compact): call june_page_read with op='get')。

各操作の内容:

ツールエージェントが得るもの
june_answerグラフからの根拠のある引用付き回答 — 推測ではなく棄権します
june_searchクエリに対するランク付けされた証拠(マルチホップ対応)
june_contextトークン予算内で組み立てられたコンテキストパック
june_neighborhood1つのノード周辺のグラフ
june_subgraph境界付きサブグラフのエクスポート
june_remember事実/メモをグラフに書き込む(即座に取得可能+引用可能になります)。長いテキストはエンジンジョブとして実行されます: {state: running, job_id} の結果は june_remember(job_id=…) で収集されます — テキストを再送信しないでください。貼り付けられたテキストはエンジン上でコンテンツアドレス指定されるため(v0.0.13)、同一テキストの再送信は同じノードをアップサートします。重複はできません
june_ingest構造化されたノード/エッジの取り込み
june_enumerate述語に一致するすべてのノード — 「すべてのXをリスト」の完全リコール(トップkではありません)
june_ingest_fileオペレーター承認済みフォルダーからローカルファイル(pdf/docx/xlsx/csv/html/md/画像/音声)を1つアップロード — JUNE_FILES_ROOT を設定した場合のみ存在します
june_enrichPro: よりリッチなエンジンによるキャンバスのバックグラウンド再抽出(冪等、ジョブ+ポーリング、無料プランでは403)
june_resolveメンテナンス: 可逆的な same_as エッジによる重複エンティティのマージ(サーバーサイドで実行、strong_only=false はProでセマンティック層をロック解除します)
june_docs_refresh / june_doc_list / june_doc_getエージェントの常設ドキュメントを読む — 完全なダイジェスト、レジストリ一覧、1つのドキュメントの本文
june_doc_save / june_doc_delete / june_learn書き込む — ドキュメントまたはスキルの作成/置換、2フェーズ削除、日付付きレッスンの1件追加
june_usage使用量レシート — Juneが実際に提供したもの。名前付きトークナイザーで測定され、推定ではありません。1つのレシート全体(receipt_id)またはウィンドウサマリー(window)。節約額の数字は、2つのプロバイダー報告使用量が実際に測定された呼び出しにのみ表示されます

すべての読み取りでのレシート

エンジンが JUNE_USAGE=1 で実行されている場合(デスクトップ: 設定 → 使用量レシート)、すべての june_answer / june_context / june_search 結果には receipt と1行の receipt_footer も含まれます:

receipt r_7f…: served 812 tokens (exact, tiktoken:cl100k_base) from 3 blocks across 2 docs
· 1 doc this session already had — june_usage(receipt_id="r_7f…") shows it in full

コネクタはサーバープロセスごとに X-June-Source: mcp と1つの X-June-Session IDを送信するため、 エンジンはこのエージェントセッションがすでに持っていたドキュメントを記録できます(回避した再読み取り)。 フッターは「保存」とは決して言いません。その言葉は測定されたペアを持つレシートにのみ存在します。 レシートのないエンジンはフッターを送信せず、june_usage はオフであることを明確に回答します。

説明はエージェント向けに書かれています(何を → いつ → 何を返すか)、すべてのクランプされた入力は サイレントに切り詰められるのではなく、目に見える形でエージェントに通知されます。

エージェントメモリ — ドキュメント、スキル、忘却防止ダイジェスト

長いセッションは忘れます: セッション開始時にエージェントが読んだ指示(CLAUDE.md、あなたの 規約)は、数千トークン後には力を失います。june-mcp はこれを構造的に修正します。

エージェントは常設ドキュメントをJuneに保存します — kind='doc' は永続的な指示用 (pinned=true = 常に有効)、kind='skill' は1行の when_to_use トリガー付きの名前付き手順用(本文はスキルと同様に遅延ロード)、kind='learnings'june_learn 経由で書き込まれる追記専用の日付付きログ用。各ドキュメントはドキュメントキャンバス内の 通常のJuneページです(JUNE_DOCS_CANVAS、デフォルト agent_docs)、小さなメタデータブロックでマークされています — Junêアプリでエージェントのメモリを開いて読み、編集できます。エージェントは次のリフレッシュで あなたの編集を取得します。

忘却防止の半分: 各セッションの最初のツール呼び出しで、その後は 12回の呼び出しまたは10分ごと(調整可能)に、コネクタはコンパクトな standing_docs ダイジェストを 通常のツール結果に添付します — ピン留めされた本文全体、スキルトリガー行、ドキュメントのワンライナー。ツール 結果は常にモデルの新しいコンテキストに再入力されるため、指示はシステムプロンプトのように 劣化できません。どのMCPホストでも、ホストの協力なしにです。構築できないダイジェスト (サービスビジー、キャンバス欠落)はサイレントにスキップされます — 運ぶ呼び出しにコストをかけることはありません。 JUNE_DOCS_REFRESH=0 を設定してダイジェストをオフにします。ドキュメントツールは引き続き機能します。 Juneは、エージェントに自身の使い方を内部から教えます。 最初の保存でドキュメントキャンバスが作成され、agent-memory-guide がシードされます。これは操作マニュアルです(システムキャンバスとワークストリームキャンバスの違い、3種類の使い分け、命名規則、ピン留めするもの、改訂の規律、リポジトリ同期)。これはすべてのレジストリとダイジェストに掲載され、エージェントは不明な点があれば june_doc_get('agent-memory-guide') でこれを読みます。そしてこれは通常のページなので、編集すればエージェントはあなたのバージョンに従います。何も保存される前は、空の状態は setup のウォークスルーを返し、june_memory_setup プロンプトはエージェントがあなたにインタビューし、あなたの規約を最初のドキュメントとして保存します。

Juneを自動化する — エージェントは指示なしでそれに依存する

「Juneを使え」と言う必要は一切ないはずです。3つのメカニズムが積み重なって使用を自動化し、それぞれが前のメカニズムの盲点をカバーします:

  1. ホストフック(コールドスタートを解消)。 サーバーはエージェントの最初の呼び出しまで話せません。そこで、ホストが毎セッションでネイティブに読み込むファイルにJuneの常設指示をインストールします:

    JUNE_EXPORT_ROOT=/path/to/project june-mcp --install-instructions            # → CLAUDE.md
    JUNE_EXPORT_ROOT=/path/to/project june-mcp --install-instructions AGENTS.md  # other agents
    

    これは管理セクションとして記述され(あなた自身のコンテンツには触れず、再実行するとその場で更新されます)、june-firstの姿勢(無知を主張する前にJuneを確認する、プロンプトなしで事実を記憶する、発生した教訓を学ぶ)をシステムプロンプト自体に組み込みます。

  2. プロアクティブなツール説明(決して劣化しない)。 コア動詞の説明は、モデルに求められなくてもいつそれらを使うべきかを伝えます。説明は毎ターン、すべてのMCPホストで再読され、協力は不要です。

  3. ピン留めされた june-first ドキュメント(セッション全体で再主張)。 ガイドと一緒にシードされ、すべての standing_docs ダイジェストに含まれるため、長いコンテキストのドリフトがそれを侵食するであろうまさにその場所で、セッション中に姿勢が繰り返されます。シードされたものすべてと同様に、これは通常のページです。編集すれば、エージェントはあなたのバージョンに従います。

正直なところ、MCPサーバーにできないことは、ホストに行動を強制することです。ホストが SERVER_INSTRUCTIONS を隠し、指示ファイルもなく、June呼び出しを一度もしないエージェントは、コールドのままです。メカニズム1は、まさにそのケースが実際に発生しないように存在します。

リポジトリ同期 — リポジトリはJuneが知っている内容と最新の状態を保つ

JUNE_EXPORT_ROOT=<your repo> でオプトインすると、さらに3つのツールが表示されます:

ツール機能
june_docs_exportすべてのエージェントドキュメントを docs/agent/<name>.md にミラーリング — リポジトリは常に現在の常設指示を保持します
june_page_export任意のページを管理ファイルにエクスポート、または既存ファイル内のマーカー間に挿入された管理セクションにエクスポート(path=KNOWHOW.md section=june-learnings)— マークされた領域のみが触れられます
june_page_importその逆:エディタでエクスポートしたファイルを編集し、Juneページにインポートし直します — エージェントドキュメントはそのアイデンティティを維持し、古いファイルは新しい知識を上書きするのではなく拒否されます

すべてコードで強制され、テストで固定された安全ルール:すべてのパスはルート内にフェンスで囲まれ(字句 .. チェックおよびシンボリックリンク解決)、june-mcpによって書き込まれていないファイルは決して上書きされず、何も削除されず、JUNE_EXPORT_GIT=1 を使用すると、各エクスポートは書き込んだファイルのみをコミットします。パススペックで制限されるため、ステージングされた作業が巻き込まれることはなく、プッシュは決して行われません。エクスポートされたファイルにはフロントマターが含まれ、バイト決定的であるため、変更されていないドキュメントは同一のファイルに再エクスポートされ、gitは静かなままです。

マニフェスト(.june-export.json)により、最新性をチェック可能にします — CI用の2つのCLIモード:

june-mcp --export         # sync agent docs + every managed page/section, commit if enabled
june-mcp --export-check   # write NOTHING; exit 1 if the repo has drifted from June

CIでの --export-check は、「ドキュメントは最新か?」という期待を、失敗するビルドに変えます。

無料版 vs Pro版 — june-pro タグ

june-mcp はすべての人に1つのパッケージです。別の「Proビルド」はありません。Proはエンドポイントのプロパティであり、コネクタのプロパティではありません。ProアクティベートされたJune(アプリのProライセンス、ホスト型ワークスペースのProキー)に接続すると、同じツールがProグレードの結果をもたらします:すべての june_remember および june_ingest_file 書き込みは、よりリッチなエンティティ/エッジエンジンを自動的に実行し(結果はどの engine が実行されたかを報告)、june_resolve はセマンティックマッチングにアップグレードされ、june_enrich はアップグレード前に無料階層で書き込まれたメモリをバックフィルします。ターミナルはどちらの世界にいるかを示します:--doctoredition 行を出力し、サーバーの起動バナーは接続にタグを付けます —

june-mcp: connected http://localhost:8000 canvas name "work" → 11d2… [june-pro]

タグはサービス自身の /v1/whoami から読み取られます(Proルートをサーバー側でゲートするのと同じエンタイトルメント状態)。したがって、実際に得られるものと矛盾することはなく、表示専用です。エンタイトルメントは、クライアントが何を印刷してもサービス側で強制されます。/v1/whoami のない古いサービスは、単にタグを表示しません。

セキュリティモデル

ツールサーフェスはキャンバス/ワークスペースパラメータを公開しません。ワークスペースは接続のコンテキストからサーバー側でバインドされ、フェイルクローズです。クロステナント読み取りは、オープンに失敗する可能性のある権限チェックではなく、クライアントからは表現不可能です。JUNE_READONLY=1 は、読み取り専用デプロイメントに2番目のフェンスを追加します。BYO LLMキーは各回答リクエストにヘッダーとして添付され、サービスによって永続化またはログ記録されることはありません。

エラー

すべてのアップストリーム障害は、型付きで編集されたエラーペイロードにマッピングされます(例外タイプ+HTTPステータスのみから構築され、レスポンスボディからは決して構築されません)。これにより、サーバーはエンドポイントが投げるものすべてに耐え、エージェントはクリーンで実行可能なメッセージを確認できます。

ライセンス

MIT。Junêエンジン自体は別のクローズドソース製品です。このコネクタは、設計上、オープンな部分です。