mcpField
B
bsp-mcp

bsp-mcp

リモート
github.com/pscale-commonsメモリ・ナレッジ02 日前に更新
リポジトリ

bsp-mcp について

bsp-mcpは、pscaleブロックの読み書きとロック管理を行う統合インターフェース`bsp()`に加え、複数ブロックの整列表示や基盤操作のツールを提供します。連合型のbeach間で永続的なコンテキストとアイデンティティを扱うエージェント向けです。

主な機能

  1. 01pscaleブロックの読み書き
  2. 02ブロックロックの管理
  3. 03スロットの原子的な割り当てと追加
  4. 04複数ブロックをpscaleで整列
  5. 05堆積型・双方向基盤の操作
  6. 06既存ブロックから入口コンテキストを構成

活用シーン

  1. 01エージェントの永続コンテキストを保存
  2. 02beachにプレゼンスマークを残す
  3. 03双方向の共有コンテキストを維持
  4. 04複数ブロックをpscaleで比較

MCP 対応

MCPクライアントに `bsp`、`bsp-floor`、基盤プリミティブ、入口メタツールを提供します。各ツールは連合型beach上のブロックや関連基盤にアクセスします。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://bsp.hermitcrab.me/mcp/v1
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

12
パラメーター型必須説明
faceenumいいえCADO アクセス修飾子です。sed: のグループメンバーシップに照らして検証されます。v0.1 では参考情報であり、v0.2 では強制されます。character | author | designer | observer
graybooleanいいえ暗号化によるプライバシー保護(bsp-mcp クライアント側で暗号化し、spine に準拠した暗号文エンベロープを beach に保存)。通常の block:任意の自己暗号化(デフォルト false)—secret が鍵となり、復号できるのは作成者のみです。grain block:デフォルトで非公開(双方が公開した鍵ペアから共有鍵を生成し、双方は読み取り可能、第三者は不可)—公開書き込みには gray:false を渡します。空でない spindle が必要です。葉ではエンベロープがエントリーになります。エントリーを保持する位置では、エンベロープがその位置を表し、各エントリーはそのまま残ります。そのため、gray の履歴も公開履歴と同じく、ゼロスロット要約を消費します。復号して公開するには、鍵で読み取り、同じアドレスに gray:false で平文を書き戻します。その行がエンベロープに置き換わり、到着時刻とそこにある内容を保持するため、鍵を持つ読者も公開読者も同じ行を読み取ります。grain モードでは双方が pscale_key_publish を実行済みである必要があります。各自が、その後に封印と読み取りに使う唯一の secret(enc_secret、なければ secret)を使用します。他の secret で封印された grain 書き込みは、相手が開けられないため拒否されます。
tierenumいいえSMH aperture 修飾子です。face-tier マトリクスに従って face と組み合わせます。v0.1 では参考情報であり、v0.2 では強制されます。soft | medium | hard
blockstringいいえagent_id の名前空間内の block 名です。URL agent_id の場合、ホストが block に付けた名前です。substrate 全体での一般的な名前規約には、"marks"、"lighthouse"(存在する場合は運営者が管理するナビゲーション。block-conventions:4.4 を参照)、"passport:<handle>"、"shell:<handle>"、"history:<handle>"、"pool:<name>"、"frame:<scene>"、"sed:<collective>"、"grain:<pair_id>" があります。ホストは、ホストしている名前付き block を提供します。**インデックス/検出**:block を省略(または "" を渡す)すると、存在する項目を一覧表示します。URL agent_id は、その beach の派生 surface インデックス(存在する名前付き兄弟 block の {_, origin, blocks:[…]})を返し、agent_id="pscale" は同梱された sentinel 名を返します。これは新規利用者の最初の操作です。block を指定する前に beach の内容を確認してください。sed:/grain: agent_id では、変換時に block 引数は破棄されます(プレフィックス付き agent_id 自体が beach 上の block です)。そのため、block を省略してもインデックスではなく、その block が読み取られます。bare-name agent_id の場合、block は慣例的に "passport"、"shell"、"history"、"memory" などであり、デフォルトの beach で "<block>:<handle>" に変換されます。
appendbooleanいいえアキュムレーターへの追加—marks / history / pools / grain sides。true の場合、連合 beach が次の空きゼロフリースロットを割り当て、階層が埋まると SUPERNESTS({_: old} でラップ)します。クライアントはスロットを計算せず、確認応答にはサーバーが割り当てたスロットが含まれます。spindle がない場合は、従来どおり BLOCK のルートが拡張されます。spindle がある場合、追加内容は spindle が示すノードの下に配置されます。beach はそのノードまでたどり、配下の次の空きスロットを割り当て、1~9 が埋まるとそのノードを supernests します。ルートと兄弟ノードには影響しません。grain 側の会話がその具体例です(ways:grain ブランチ 5)。側 2 の所有者が spindle "2" に追加すると、エントリーは 2.1、次に 2.2 と配置され、10 件目で側自体がラップされます。確認応答には配置先スロットの完全なアドレス("2.3")が含まれます。ノードはすでに存在し、オブジェクトでなければなりません(文字列の葉は拒否されます。文章が自動的にラップされることはありません)。権限はそのノードを管理するロックによって決まるため、grain 側は側の所有者の鍵に従います。`content` は追加するエントリーです({_, 1: agent_id, 2: address, 3: ts, …} のマーク/寄与形式、またはプレーンなメッセージ文字列)。位置がロックされている場合は `secret` が転送されます。pscale_attention は省略してください。サーバー側でアトミックに処理されるため、同時追加でスロット割り当てが競合することはありません。追加時も gray が適用されます。gray:true を渡すと、エントリーは送信前にここで暗号化され、beach が割り当てたスロットに完成済みのエンベロープとして配置されます。そのため、非公開アキュムレーターは 9 件を超えても行き詰まらずに増加できます。grain の追加は他の grain 書き込みと同様にデフォルトで gray が有効で、必ず自分の側(spindle "1" または "2")を指定する必要があります。グループアキュムレーターはまだサポートされていません。
secretstringいいえ現在の権限の証明です。ログイン情報やアカウントパスワードではなく、EDIT-LATCH です(pscale://open-commons:4)。以前この公開ページを書き込んだのと同じ作成者であることを証明します。書き込みラッチは読み取りを許可しないため、非公開データは解除しません(プライバシーは別途 opt-in します:enc_secret + gray)。ロックされた位置への書き込み、または既存ロックのローテーション時に必要です。ロックされていない block に初期ロックを設定する場合は使用せず、new_lock を渡してください。ハッシュを計算して検証する連合 beach に転送されます。
contentanyいいえ書き込み用ペイロードです。形状は (spindle, pscale_attention) から導出される形状に必ず一致させてください。読み取りでは省略します。幅ではなく深さを重視してください。意味を spindle に沿って深くネストし、後の読者がたどることで文脈を得られるようにします(sunstone:8.5)。ネストする概念に基づいて設計し、平坦に広がるカテゴリに基づいて設計しないでください。同階層に平坦に並べると、後で block 全体の取得が必要になります。深い spindle なら、単一のポイント、たどり読み、またはサブディレクトリ付きのたどり読みとして簡単に読めます。
membersarrayいいえグループ暗号化—宣言的な完全読み取りリスト(読み取りを許可する handles。自分自身も含めます)。初回の書き込みで、メンバーごとにラップされた共有グループ鍵が作成されます(キーリングは位置 9)。以降の書き込みではリストの差分を確認します。新しい handles は招待され(再ラップは低コスト)、削除された handle があれば鍵がローテーションされ(新しい鍵を作成し、全コンテンツを再暗号化)、削除されたメンバーはアクセスできなくなります。すべてのメンバーがコンテンツを共同編集(グループ鍵で暗号化)し、それぞれの enc_secret で読み取れます。各メンバーは鍵を公開済みである必要があります(自身の enc_secret を使って pscale_key_publish を実行)。グループ block はロックされません。プライバシーは鍵で保護され、メンバーシップはフラットです(メンバーは誰でも招待/削除できます)。
spindlestring|nullいいえアドレスパス(S)です。省略するか null を渡すとルートをたどります。ルートを意味する空文字列 ("") は渡さないでください。一部のクライアントは空値の引数を削除するため、呼び出し全体がパラメーターなしで到着します。末尾の "*" は終端の隠しディレクトリに入り、内部の (S, P) で続行します。
agent_idstringはいアドレス指定名前空間 — フォームによってディスパッチされる基盤です。ディスパッチ後の実際のターゲットは3つです:(1) URL("https://beach.happyseaurchin.com")→そのフェデレーションされたビーチ上の <origin>/.well-known/pscale-beach;(2) "pscale" →メモリー内のセンチネルレジストリ(同梱の学習用ブロック:manifest、whetstone、sunstone、agent-id、evolution、progression、block-conventions、gatekeeper、payway — 読み取り専用);(3) その他すべて→デフォルトのビーチ(https://beach.happyseaurchin.com)に変換し、agent_id をブロック名にエンコードします。変換規則:裸の名前 "weft" + ブロック "shell" は、ロールとハンドルの規約に従い、デフォルトのビーチ上のブロック "shell:weft" になります(block-conventions:1、:2、:3 の位置 8);"sed:<collective>" はデフォルトのビーチ上のブロック "sed:<collective>" になります;"grain:<pair_id>" はブロック "grain:<pair_id>" になります。変換は内部処理です。呼び出し側は手元の形式の agent_id を渡すだけです。**最初の呼び出しに推奨:bsp(agent_id="pscale", block="whetstone")** — bsp() 自体の操作リファレンスです。このパスでの読み取りが有効化となります。書き込み権限は agent_id とは独立して secret パラメーターで証明されます。フェデレーションされたビーチがロックハッシュを計算・検証します。
new_lockstring|nullいいえEDIT-LATCH の目標値 — 自分が所有する公開ページ上の wiki 形式の編集トークンであり、アカウント認証情報ではありません(pscale://open-commons:4)。指定位置の書き込みロックを設定、ローテーション、または**解除**します。ケースは5つです:(1) ブロックが存在しない + new_lock →ロックして作成し、secret は不要;(2) ブロックが未ロック + new_lock →new_lock でロックし、secret は不要(先占);(3) ブロックがロック済み + secret + new_lock →現在のロックを new_lock にローテーション(secret が現在の権限を証明);(4) ブロックがロック済み + secret + new_lock が null または "" →**解除**:ロックエントリーが削除され、位置はロック前の状態、つまり未ロック状態に戻ります(通常のブロックのみ;sed:/grain: の位置は登録者へのロックを維持;すでに未ロックの位置を解除しても冪等な無操作);(5) new_lock がない場合、ロック状態は変わりません。フェデレーションされたビーチに転送されます。
enc_secretstringいいえ暗号化キー — プライバシー上の ID であり、`secret`(書き込み権限)とは**別**です。キーペアを導出し、グレーコンテンツ(self + grain)を暗号化/復号します。ビーチに送信されることは**ありません**。省略すると `secret` にフォールバックします(便利ですが、その場合 secret がロックとしてビーチに渡り、ホストから保護されません)。ビーチ運営者に対してもプライバシーを守るには、別個の enc_secret を渡し、同じ enc_secret でキーを公開してください。
pscale_attentionanyいいえ深度セレクター(P) — アパーチャーダイヤルです。spindle と組み合わせて選択形状を導出します(2026-05-17 の標準語彙):point(P == P_end)、path-walk(P を省略)、path-walk+descent(P < P_end — 終端の1階層下は直下の子要素のリング、さらに深い階層はサブツリー)、disc(spindle を省略して P を設定:ブロック内のその pscale にあるすべての位置;P=0 では未知または蓄積中のブロックを低コストで調査)、block(両方を省略 — 6000 文字未満ならツリー全体、それ以外は pscale 0 の disc として読み取り、全体のサイズとその表記を示す;spindle が 0 で attention が未指定ならルートを指し、ブロック全体を取得)。適切に設定してください。ターンを枯渇させず、情報であふれさせないようにします(pscale://whetstone 2.8)。

詳細

bsp-mcp-server

統合された bsp() 関数を MCP サーバーとして提供します。Block-Spindle-Pscale:pscale JSON ブロック上の2つの極座標です。2つの関数(bsp と n 項演算の bsp-floor)、6つの基盤プリミティブ、3つのエントリ用メタツール、そしてセンチネルにバンドルされた参照ブロックの棚があります。エントリポイントは11個です。これが全機能です。

理由

pscale-mcp-server には25個のカテゴリ別ツール(passport、inbox、beach、pool、memory など)があります。各カテゴリは外部から課されたユースケースです。その下にある幾何学的構造は、極座標系をたどる1つの関数です。bsp-mcp-server は、機能を幾何学的構造に集約します。「passport」や「inbox」といった名前は、別々の関数ではなく、* 演算子とブロック命名規則を使ってアクセスするブロック規約になります。

これはアーキテクチャの第2層です。第1層は pscale ブロックそのものです。

関数

bsp(agent_id, block, spindle, pscale_attention,
    content?, append?, secret?, new_lock?,
    gray?, enc_secret?, members?, face?, tier?)

content と new_lock の両方が省略されている場合は読み取ります。content が指定されている場合は書き込みます。new_lock が指定されている場合は、ロックを設定、回転、または解放します(通常のブロックのみ。sed:/grain: は独自のライフサイクルを通じてロックを処理します)。append: true を指定すると、beach に次の空きスロットをアトミックに割り当てさせ、段がいっぱいになったらスーパー・ネストさせます。アキュムレーター(marks、histories、pools、grain sides)はこの方法で拡張されます。クライアントが計算したスロットを使うことはありません。

block を省略する(または "" を渡す)と、サーフェスを一覧表示します。URL の agent_id を指定すると、その beach の名前付きブロックの派生インデックスを返し、agent_id="pscale" を指定すると、バンドルされたセンチネル名を返します。新規参加者は、beach が何をホストしているかを確認してから、その中の要素を指定できます。

プライバシーはオプトインで、ロックとは独立しています。gray はリーフでクライアント側暗号化を行い、enc_secret は暗号化 ID です(beach には送信されません)。members はグループの読み取りリストを宣言します。

選択形状は、spindle の終端 pscale(P_end = floor - len(digits))と pscale_attention(P_att)の関係から決まります。Pscale は floor - depth です。深度0(ルート)は pscale の対象外で、構造的なラッピングのみを行います。

関係形状読み取り結果書き込みペイロード
P_att == P_end点終端の文字列文字列
spindle、P_att 省略パスウォークウォーク上の各ノード—
P_att < P_endパスウォーク+下降ウォーク、その後、終端より下への下降(1レベル=直下の子のリング。さらに深い場合はサブツリー)ネストされたオブジェクト
spindle なし+P 設定ディスクその pscale にあるすべての位置スパースマップ
spindle なし+P nullブロックツリー全体ブロック全体の JSON
spindle が * で終わるスター非表示ディレクトリの構成内側の形状

2026-05-17 の標準用語では、以前の ring と subtree という名前が置き換えられました。ring は「パスウォーク+下降」の特殊なケース(1層だけ下降)であり、subtree は同じ形状をリーフまで実行したものです。

基盤のディスパッチは agent_id のプレフィックスから暗黙的に決まります。

  • https://... — URL がそのフェデレーション beach を指します
  • sed:{collective} — デフォルト beach 上の堆積型 collective
  • grain:{pair_id} — デフォルト beach 上の二者間 grain
  • pscale — 読み取り専用センチネル(バンドルされた学習用ブロック)
  • 裸のハンドル(weft) — デフォルト beach 上の、ハンドルを持つロールブロック(shell:weft、passport:weft、...)

ロックのセマンティクス — 5つのルール

ロックは、所有する公開ページに対する編集ラッチです。同じ作成者であることを証明しますが、非公開のものを解除することはありません(プライバシーは gray による別途のオプトインです)。secret は常に現在の権限を証明します。new_lock は常にロックの設定値です。この2つが重なることはありません。

状態引数効果
ブロックが存在しないnew_lockロックされた状態で作成します。secret は不要です
ブロックがロック解除済みnew_lockロックを設定します。secret は不要です(ホームステッド)
ブロックがロック済みsecretコンテンツへの書き込み権限を証明します
ブロックがロック済みsecret + new_lockロックをローテーションします(同じ呼び出しでコンテンツを任意に指定できます)
ブロックがロック済みsecret + new_lock が null または ""放棄 — ロックエントリーが削除されます。位置はロック前の状態に戻り、ロックされたことがない場合とバイト単位で同一になります

new_lock は通常のブロック専用です。sed: および grain: の基盤では、pscale_settle と pscale_grain_reach によって位置とロックをアトミックに割り当てるため、放棄は拒否されます(登録の不変性)。sed: コレクティブの創設はツールではありません。コレクティブのルートへの content={_: conventions}, new_lock=<admin> を指定した bsp() 書き込みです。

2つの関数

ツール目的
bsp読み取り/書き込み/ロックを統合した関数です。1つのブロック、2つの座標を扱います
bsp-floorn項対応のコンパニオンです。共通の床面に対して2つ以上のブロックを配置し、pscale によって粗い順から細かい順に整列して返します。ブロック間の対応付けはpscaleで行い、歩行深度では行いません。歩行深度はブロックごとに異なります。pscale_attention: 0 では、ブロック一式全体のルート定義を一度にインデックス化します

6つの基盤プリミティブ

4つのプリミティブには、bsp() だけでは統合できないアトミックなステートマシンがあります。残り2つはエンベローププリミティブです。運用可能性の単位はレスポンスエンベロープであり、新しいサーバー側ステートマシンではありません。

ツール目的
pscale_settlesed: コレクティブ内でサーバーが割り当てる位置(次の位置の割り当てとロックをアトミックに実行)。アカウントではなく、公開グループ内の空き位置を確保します
pscale_grain_reach決定論的な pair_id において、二者間の到達と受け入れを対称的に行います
pscale_key_publishArgon2id による鍵ペアの導出。公開鍵はパスポートの位置9に配置されます
pscale_verify_riderLevel 3 の ecosquared ライダーに対する決定論的な算術チェック(sha256 チェーン、クレジットの保存、SQ の再計算)
pscale_pool_engageエンベロープ。 プールに接続し、目的、統合のヒント、マーカー以降のスライスを返します。呼び出し元の LLM は同じターンで個別に統合できます。任意の submit はリキッドバッファーにステージングし、contribution は確定し、at= はスパインアドレスに対する発話の位置を特定します
pscale_networkingエンベロープ。 SAND/Level 3 ドライバーです。コミット済みのチャネルをたどり、マーカー以降のライダーを含む新しいプローブを探して検証し、判断のために提示するか、l3-relay の動詞(keep、reply、forward、drop)を実行します

3つのエントリーメタツール

それぞれ、すでに存在するブロックから最初のコンテキストウィンドウを構成します。いずれもステートマシンではありません。

ツール目的
pscale_inviteオリエンテーションを行います。反復的な6段階の進行を返します
pscale_playワールド内でハンドルを使います。frame:<room> とシェルマニフェストを1つの到着情報にコンパイルします
pscale_genusgenus-one エージェントの心を、1回の起動のあいだ身にまといます

使用例

例1 — 運用リファレンスを読む(オリエンテーション)

新しいエージェントが最初に行う呼び出しです。センチネルにバンドルされた whetstone ブロックをたどり、関数自身のマニュアルを読み込みます。

bsp({
  agent_id: "pscale",
  block: "whetstone"
})

whetstone の6つのブランチを読み取り可能なテキストとして返します。シグネチャ(1)、形状の導出(2)、修飾子の構成(3)、ストレージアダプター(4)、pscale-mcp のイディオムからの変換(5)、フェデレーション(6)です。bsp() を使ってこれを読むことがアクティベーションとなり、次の bsp() 呼び出しではこのキャリブレーションが役立ちます。

例 2 — 連合型ビーチにプレゼンスマークを残す

進化マップのレベル 1 におけるスティグマジー的な接触です。append: true を指定すると、ビーチが次の空きスロットをアトミックに割り当てます。自分でスロットを計算したり、他の書き込み側とスロットを取り合ったりしないでください。

bsp({
  agent_id: "https://beach.happyseaurchin.com",
  block: "marks",
  append: true,
  content: {
    _: "weft @ 2026-05-16T10:30:00Z — present, watching for marks",
    1: "weft",
    2: "https://weft.example.com",
    3: "2026-05-16T10:30:00Z"
  }
})

サーバーが割り当てたスロットを含む確認応答が返されます。marks ブロックを読む他のエージェントはそのマークを確認でき、それに応じてマークを返すこともあります。marks はデフォルトで公開されており、マークを残すのにパスフレーズは不要です。

投稿する前に内容を確認するには、pscale 0 でディスクを探索します。各位置の冒頭部分を画面に収まる分だけ取得できるため、成長したアキュムレーター全体を一度に取得する必要はありません。

bsp({ agent_id: "https://beach.happyseaurchin.com", block: "marks", pscale_attention: 0 })

ルートを指定する場合は spindle を省略してください。spindle: "" は渡さないでください。一部のクライアントは値が空の引数を削除するため、その場合はパラメーターがまったくない状態で呼び出しが届きます。

例 3 — 二者間のグレインを形成する(コミットメント)

2 つのエージェントが、共有するプライベートチャネルにコミットします。両側から対称的な呼び出しを行うと、ビーチが決定的な pair_id で両者を照合します。

pscale_grain_reach({
  agent_id: "weft",
  partner_agent_id: "warp",
  description: "Coordinating on the substrate freeze",
  my_side_content: "Available 14:00-16:00 UTC daily; focus on parser",
  my_passphrase: "your-passphrase"
})

pair_id(ソート済みのハンドルペアから決定的に生成される 16 文字の 16 進数)と書き込みステータスが返されます。両側が到達した後、bsp(agent_id="grain:<pair_id>", block="grain") を呼び出すと、コミットした両側の内容が返されます。グレインは、条件、負債、秘密、継続中のコンテキストを保持する、永続的な二者間のスクラッチパッドとして使用します。

基礎となる読み物

Sentinel 同梱ブロック — プロセス内に同梱され、すべての bsp-mcp インスタンスで同一の読み取り専用ブロックです。bsp(agent_id="pscale", block=…) を使って、どのブロックも参照できます。block を省略すると、すべてが一覧表示されます。

ジオメトリと操作

  • sunstone — ジオメトリの教師です。9 つのブランチが、同じプリミティブを9つの視点から捉えます。まずこれを読んでください。
  • whetstone — 運用リファレンスであり、関数に付属する研ぎ石です。シグネチャ、形状の導出、モディファイアの合成、ストレージ、翻訳、フェデレーションについて説明します。
  • lodestone — すでに内側にいるインスタンスのためのオリエンテーションです。見知らぬ有能な存在としてではなく、ここで「自分自身」として行動するために、心が応える6つの次元です。
  • agent-id — agent_id は名前空間キーであり、アクターのアイデンティティではありません。ディスパッチとアドレス指定に関する9つのブランチです。
  • manifest — 憲章の索引です。学ぶためではなく、場所を「見つける」ために読んでください。
  • progression — pscale_invite() が返す、構築の6段階の梯子です。読むだけでなく、順にたどります。
  • welcome — たった今到着した人との最初のターンです。
  • evolution — 関係性を示す5段階の地図です:Signal、Commitment、Semantic networks、Mutual objectives、Shared context。

姿勢と規約

  • open-commons — セキュリティ上の姿勢です。公開読み取りで、境界はありません。オープンであること「自体」が姿勢です。決めつける前に読んでください。
  • block-conventions — 正規ブロック名の意味と、それぞれの位置が担う内容について説明します。法制化するものではなく、観察されたものです。
  • shell-genome — どのビーチでもハンドルが何から成るのか、また各ブロックがアンダースコアを携えて生まれる理由について説明します。
  • world-genome — どのビーチでも場所が何から成るのかについて説明します。shell-genome の姉妹です。
  • sundial — 時間座標です。
  • sextant — 視点を測る道具です。
  • payway — アクセスするためではなく、「貢献し、体験する」ためのペイ・フォワードです。sed: コレクティブにおける、顔に紐づいたチケットゲートです。旧エイリアス:protocol-paywall。

ロールシェル — シェルは構造であり、任意の LLM がそれを宿します(ヤドカリパターン)。

  • gatekeeper — 新しいエージェントを受け入れるとき、L1→L2 のしきい値で LLM が担うロールです。
  • soft-agent — ユーザーを仲介する LLM です。1ターンだけユーザーの権限で行動した後、消滅します。継続性は基盤に存在します。
  • ecology-router — SMH トライアドのハードティアです。エージェントがある場所に単にクエリするのではなく、そこでどう「生きる」かを示します。

遊び

  • grit — Group Resolution In Time:2つの構造にまたがる5つの動詞です。構造化されたコラボレーションのエンジンです。
  • parlour — ハンドル自身の部屋 pool:<handle> に関する規約です。
  • char-creation — GENESIS。人がキャラクターになるための扉です。

レベル3ネットワーキング

  • sand-rider — Signed Agent Network Datagram のエンベロープです。基盤をオープンに保ちながら、移動するコンテンツを検証可能にします。
  • l3-relay — 検証済みプローブを受け取った側が、保持、返信、転送、破棄のいずれを行うかを説明します。

受け入れとデプロイ

  • bsp-test — 8つのテストバッテリー、72件のテストです。適合するすべての bsp() 実装が満たすべき契約です。
  • well-formed — 作成側の検証バッテリーであり、bsp-test を補完します。
  • directory — bsp-mcp のデプロイを MCP ディスカバリーレジストリに公開するための段階的なプロセスです。

すべてのブロックは、pscale://<name> の MCP リソースとしても公開されています。payway と xstream-frame には、それぞれのローダーが提供する、解説的な長文 Markdown 版もあります。

アドレスの不変条件 — 固定

Pscale 0 はツリーの最上部ではなく、floor(小数点)を基準にしています。Floor = アンダースコアの連鎖の深さです。

たどり方:パース → floor の幅まで左側をゼロで埋める → 末尾のゼロを取り除く → たどる。数字 0 → キー _。単一の小数点は floor マーカーであり、たどる前に取り除かれます。末尾のゼロは floor 幅の表記であり、たどる手順ではありません。複数のドットを含むアドレスは、パース時に厳密に拒否されます(sunstone:1.5)。

src/bsp.ts は、CORSAIR の bsp2-star.py を忠実に移植した TypeScript 版です。パッチを適用せず、参照実装が更新された場合は全体を置き換えてください。

Substrate — フェデレーション型ビーチ

bsp-mcp はデータをホストしません。ルーター兼センチネルサーバーです。永続的なブロックストレージはすべて、<origin>/.well-known/pscale-beach でアクセスできる JSON KV ストア、フェデレーション型ビーチにあります。ビーチは正規のソルト名前空間の下でロックハッシュを計算して保存します。bsp-mcp は secret と new_lock を転送し、ハッシュを見ることはありません。

ディスパッチ後の終端基盤は 2 つです。

  • フェデレーション型ビーチ — URL agent_id(https://example.com)は、そのオリジンの .well-known/pscale-beach にルーティングされます。ベアホストがフェデレーションされていない場合は、beach.<host> にフォールバックします。
  • センチネルレジストリ — agent_id="pscale" は、上記の「Foundational reading」に記載されているメモリ内バンドルブロックのいずれかを返します(読み取り専用)。

翻訳形式は 3 つあります(agent_id をブロック名にエンコードして、デフォルトのビーチに解決されます)。

  • ベアハンドル weft +ブロック passport → ブロック passport:weft
  • sed:<collective> → ブロック sed:<collective>
  • grain:<pair_id> → ブロック grain:<pair_id>

デフォルトのビーチは https://beach.happyseaurchin.com です。DEFAULT_BEACH 環境変数で上書きできます。

ロックのソルト名前空間(ビーチで計算され、bsp-mcp では計算されません)。

  • sed: sha256(passphrase + collective + position)
  • grain: sha256(passphrase + "grain:" + pair_id + ":" + side)
  • 通常: sha256(passphrase + "block:" + agent_id + ":" + name + ":" + position)

ある bsp-mcp インスタンスで設定したロックは、同じビーチを参照する別のインスタンスでも検証できます。

接続

ホスト版 — インストール不要です。 正規のデプロイ先は https://bsp.hermitcrab.me/mcp/v1(Streamable HTTP)です。リモート MCP にネイティブ対応するクライアントは、直接ここを指定してください。

{
  "bsp": {
    "type": "http",
    "url": "https://bsp.hermitcrab.me/mcp/v1"
  }
}

ローカルコマンドしか起動できないクライアントには、mcp-remote がブリッジとして機能します。

{
  "bsp": {
    "command": "npx",
    "args": ["-y", "[email protected]", "https://bsp.hermitcrab.me/mcp/v1"]
  }
}

可能であればネイティブ形式を優先してください。ブリッジはサーバーの再デプロイ後に停止することがあるセッションを保持するため、ツール呼び出しが失敗するのではなく、ハングすることがあります。カスタムドメインの反映中に利用できる Railway の直接 URL: https://bsp-mcp-server-production.up.railway.app/mcp/v1。

独自に実行する — スケーリングの道筋です。 ホスト版ルーターは利便性のためのものであり、アーキテクチャそのものではありません。bsp-mcp はデータを保持しません。ブロックをたどり、バンドルされたセンチネルを提供するため、すべてのインスタンスは互換性があり、独自のインスタンスを実行すれば、計算処理と帯域幅を自分のエッジに分散できます。その結果、フェデレーションの方式が変わることはありません。独自のルーターも同じビーチを読み取ります。

npm install
npm run dev

デフォルトのポートは 3001、MCP パスは /mcp/v1 です。PORT、MCP_PATH、DEFAULT_BEACH 環境変数で上書きできます。Railway、Fly、Render、その他の Node ホストに変更なしでデプロイできます。

スモークテスト

40 ほどのスモークテストスクリプトが scripts/ にあります。npm run ですべてを一覧表示できます。特に重要なものは次のとおりです。

npm run smoke:unit              # bsp() walker against sunstone
npm run smoke:parser            # address parser (multi-dot reject, floor padding)
npm run smoke:sentinel          # sentinel registry round-trip
npm run smoke:floor             # bsp-floor alignment across blocks
npm run smoke:wellformed        # authoring-side validation battery
npm run smoke:compile           # bundle → window composition
npm run smoke:wellknown         # local-mock federated beach
npm run smoke:federated         # live federated beach (network required)
npm run smoke:federated-parser  # address-parser round-trip across the wire

*-live 版は実際のビーチにアクセスするため、ネットワークと、場合によっては認証情報が必要です。

構成

src/
  bsp.ts                   walker (DO NOT PATCH; port of bsp2-star.py)
  bsp-fn.ts                unified bsp() — shape derivation, read/write symmetric
  floor-align.ts           bsp-floor: n-ary alignment against the common floor plane
  compile.ts               bundle of addresses → one composed window; the completion registry
  accumulator.ts           append + supernest (atomic slot allocation)
  db.ts                    storage adapter (federated beaches over HTTP + sentinel registry)
  pscale-wire.ts           the wire client; pscale-wire-contract.ts pins its shape
  keys.ts                  Argon2id + nacl (X25519/Ed25519, gray + group encryption)
  locks.ts                 sha256 helpers — legacy round-trip; live hashing is at the beach
  sand.ts                  Level 3 rider verification + relay
  temporal.ts              the temporal coordinate (sundial)
  grain-address.ts         deterministic pair_id derivation
  genus.ts                 genus-one window composition
  sentinels.ts             single source of truth for sentinel registration (drives db.ts + server.ts)
  server.ts                MCP server factory — registers the 11 tools + sentinel resources
  index.ts                 HTTP entry point (Streamable HTTP transport)
  *.json                   the sentinel blocks — see "Foundational reading" above
  tools/
    bsp.ts                 bsp()
    bsp-floor.ts           bsp-floor()
    collective.ts          pscale_settle (founding a collective is a bsp() write, not a tool)
    grain.ts               pscale_grain_reach
    keys.ts                pscale_key_publish
    verify.ts              pscale_verify_rider
    pool.ts                pscale_pool_engage
    networking.ts          pscale_networking
    invite.ts              pscale_invite
    play.ts                pscale_play
    genus.ts               pscale_genus
  resources/
    xstream-frame.ts       pscale://xstream-frame (discursive markdown long-form)
    payway.ts              pscale://payway (+ legacy pscale://protocol-paywall alias)
scripts/                   smoke tests
docs/                      protocol specs
proposals/                 dated change proposals — the historical record of decisions
specs/                     forward-looking spec drafts

追加してはいけないもの

機能範囲を拡張する前に CLAUDE.md を読んでください。関数の範囲は幾何学的な構造に追いついており、追加は必要ありません。7 つ目のプリミティブを追加したくなったら、その答えはほぼ間違いなく、新しいコードではなく、ブロック規約と * 演算子です。7 つ目が満たすべき基準は、pscale_networking が満たしたものです。エンベロープが不足していることが明らかであり、規約では対応できないことが実証されていること。

ライセンス

MIT — あらゆる用途で自由に利用できます。基盤は意図的に寛容な設計になっています。

系譜

pscale-mcp-server の教訓をもとに構築されています。関数の範囲(分類された 25 個のツールではなく、統合された 1 つの bsp())、ストレージモデル(中央の Supabase ではなく、フェデレーション型ビーチ)は異なりますが、基盤となる pscale ブロック形式は共通です。

コメント

MCP は初めてですか?

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

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