foodblock-mcp について
foodblock-mcpは、AIエージェントがFoodBlockの署名付きレコードを読み書きするためのMCPサーバーです。食品関連情報を構造化プロトコルで扱い、レコードを検証できます。
主な機能
- 01署名付きブロックの読み書き
- 02食品と関連レコードの表現
- 03ブロック構造と署名の検証
- 04FoodBlockのアイデンティティチェーン管理
活用シーン
- 01食品のオファーや約束の記録
- 02構造化された食品情報の読み取り
- 03レコードの作成者と有効性の確認
MCP 対応
MCPサーバーを通じて、MCP対応システムが署名付きFoodBlockブロックを読み書きできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| refs | object | いいえ | ハッシュで他のブロックを参照します。例:{ seller: 'abc123...' } |
| type | string | はい | ブロックの種類。基本型:actor、place、substance、transform、transfer、observe。サブタイプにはドット記法を使用します(例:actor.producer、substance.product、transfer.order)。 |
| state | object | いいえ | ブロックのプロパティを JSON オブジェクトで指定します。例:{ name: 'Sourdough', price: 4.50 } |
詳細
FoodBlock
食品に関わる見知らぬ人同士が合意するための、上司のいない最小限の言語です。それ以外はすべてデータです。
ブロックは3つのフィールドで構成され、作成者が自分のデバイス上で署名します。
{
"type": "promise",
"state": {
"terms": { "price": { "minor": 450, "currency": "GBP" }, "quantity": { "value": "30", "unit": "{egg}" } },
"at": "2026-10-15T09:00:00.000Z",
"audience": "public",
"seq": 4
},
"refs": { "author": "a1b2…", "prev": "c3d4…", "from": "a1b2…", "what": "e5f6…" }
}
これはオファーです。from側が署名します。そのIDは正規形のハッシュです(テキストでの正確な書き方の1つ:RFC 8785)。作成者は同じバイト列にEd25519(デフォルトのスイート。p256とsmも選択できます)で署名します。誰の時計も権限を決めません。相手側はその権限を確認できます。署名がなければ、何も失われたり偽造されたりすることはありません。
- 仕様書:
spec/protocol.md、FoodBlock 1.6(2026-10-19改訂)。これは規範文書です。ここにあるほかの記述と食い違う場合は、仕様書が優先されます。関連文書:protocol.json(コードで読み込むための全リスト)、正規形、トランスポート(メールが封筒で、FoodBlockが手紙です)、適合性ベクトル。プロトコルに以前のバージョンはありません。1.6が初年度です。古いデータは、プロトコルの一部ではないコンバーターを通して一度だけ取り込みます。NECESSITY.mdには、すべてのフィールド、用語、動詞、閉じた型、参照キー、不変条件について、それがなければどのベクトルが失敗するかを示しています。圧縮を試した記録はEXPERIMENTS.mdにあります。 - 論文: FoodBlockホワイトペーパー v1.6(PDF)(DOI 10.5281/zenodo.23457910):プロトコルが存在する理由を説明しています。論文と仕様書に違いがある場合は、仕様書が最新です。
言語
7つの型を、3つのモードに分けています。
| 型 | 意味 | |
|---|---|---|
| 存在するもの | actor | 人、自律システムや機械、集まり、または連絡先 |
thing | 所有、発見、記述されるあらゆるもの:食品、ツール、場所、レシピ、持ち分、スキーマ | |
| である | observe | 何かが事実であるという主張 |
transform | あるものが変化すること:入力が出力になる、またはあるものが保たれ、そのままの状態であること | |
transfer | あるものの所有者、保持者、または場所が変わること | |
| しなければならない | promise | 提案または依頼された確約 |
| してもよい | grant | 誰かに与えられる権限 |
7つの動詞が、ブロックをつなぐ参照です:updates、answers(同意を示す唯一の方法)、confirms、defeats、for、derives_from、same_as。prevとafterは、それ以前に何があったかを示します。
**厳格です。**権限を持つ4つの型(actor、promise、transfer、grant)のみが閉じた型です。それ以外の語はすべて開いた型で、ノードはそれを保存して引き継ぎます。ノードが書き込み、読み取るのは1.6の形式だけです。null値も浮動小数点数も使いません(金額は{ minor, currency }、数量は小数を表す文字列を含む{ value, unit }です)。時刻はUTCの正確な形式で、集合はソートして記述し、すべてのブロックはキーのチェーンに属します(state.seq、refs.prev)。ブロックを修復することはありません。拒否し、作成者が新しいブロックに署名します。
3 種類のピア
すべてのピアは、それ自体でプロトコルを話します。電話、ロボットキッチン、配送バン、ドローン、スマート冷蔵庫、センサーなどです。機械も人と同じようにピアです。あらゆる食品機械は SDK を使い、独自の ID を作成し、保有する許可の範囲内で動作できます。各ピアは 3 種類のサイズのいずれかです(protocol.json の peers)。
- マイクロはデバイスです。土壌センサーや冷蔵庫センサー、はかり、オーブン、ロボットの本体などです。正規形式、SHA-256、Ed25519、書き込みチェック、独自のチェーン、およびこれらのベクトルが必要です。実世界で動作するものは、許可も確認し、停止指示が届いたらすぐに停止します。
- エッジはローカルの運用者です。農場、キッチン、バン、店舗にあるコンピューターなどです。ローカルでの探索、近くのピアとのプルおよびプッシュ、自身の取引に対する約束の集約機能を備え、オフラインでも動作し続けます。
- ノードは永続的なレベルです。封印されたエンベロープとコミットメントを追加し、誰に対してもプルとプッシュを提供し、署名付きの応答とインターネット探索、保持するすべての記録の集約機能を備えます。
ノードを持つのは人と機械だけです。企業、世帯、コミュニティは、それらのノードからなるサークルです。サークルには ID と記録があり、メンバーのノードが保持しますが、サークル自身がノードを持つことはありません。
内容
| フォルダー | 内容 |
|---|---|
spec/ | プロトコル、各種リスト、正規形式、トランスポート、プロファイル、ベクトル、オラクル、論文 |
sdk/javascript | リファレンス SDK |
sdk/rust | 唯一のコア。すべてのルールを Rust クレート、C ライブラリ、WebAssembly として実装 |
sdk/python、sdk/go、sdk/swift、sdk/kotlin | 他の言語で同じプロトコルを実装。コアを薄くラップし、それぞれがすべてのベクトルセクションを実行 |
server/ | ノード。ブロック用の Postgres、署名付きプルとプッシュ用の HTTP、および .well-known/foodblock |
mcp/ | MCP サーバー。あらゆる自律システムが署名付きブロックを読み書きできます |
cli/ | fb:ID とデバイスキーを作成し、キーのチェーンにブロックを書き込み、チェック、検証、署名確認を行い、古いデータを一度だけ変換 |
sql/schema.sql | ノードのストア。追記専用で、各ブロックを受信時のまま正確に保持 |
test/ | 複数言語にまたがる正規形式のベクトルと、仕様を各 SDK にコピーするスクリプト |
各 SDK の README には、対応するプロファイルが記載されています。
自律システム向け
FoodBlock は、人、自律システム、機械が一緒に使えるように構築されています。自律システムは FoodBlock を直接読み書きできます。
- MCP サーバー:
mcp/。Claude、Cursor、Windsurf、Gemini CLI、および MCP 互換のあらゆる自律システム向け - 1 つのファイルにまとめた仕様:
spec/protocol.md。すべてのリストはspec/protocol.jsonで機械可読形式になっています - LLM クイックリファレンス:https://foodx.network/llms.txt
- FoodX について:https://foodx.network
クイックスタート
const fb = require('@foodxdev/foodblock') // in this repository: require('./sdk/javascript/src/index.cjs')
const keys = fb.generateKeypair() // one key is the whole ceremony
const me = fb.identity.genesis(keys) // who you are: its hash is your id
const eggs = fb.write('thing', { kind: 'eggs', name: 'Free-range eggs' }, {}, { author: me.hash, key: keys, held: [me] })
fb.valid(eggs, [me]) // [] : sound, signed by a key of its author, in its chain
ターミナルから:
cd cli && npm install
node bin/fb.js init me.json
node bin/fb.js create thing eggs --state '{"name":"Free-range eggs"}' --identity me.json
ノード間
誰でも、自分が署名したものすべてをノードから持ち出せます。ピアは2つのメッセージ(spec/modules/nodes.md)を使ってブロックを交換します。
- Pull
{ since, limit, filter, heads }:到着番号以降の一致するものを、古い順にすべて取得します。順位付けはしません。heads: trueの場合、最新のブロックのみを返します。署名付きの pull は要求者が誰かを証明するため、その要求者宛てに封印されたコピーも取得できます。 - Push
{ messages, for }:ノードは、作成者が署名したものと、所有者の受け入れルールで許可されたものを保持します。 前のブロックが見つからないブロックは保留されます。同じキーの2つのブロックが同じprevを指定している場合、虚偽の証拠になります。 - 署名付きリクエストには
counterまたはchallenge(GET /challenge)が含まれ、時刻は含まれません。 - すべての応答には、ノードの保有者(人またはマシン)の鍵で署名します。
- ディスカバリー:
.well-known/foodblockは、ノードの識別情報、保持する内容、誰を代表するか、受け入れルールを示します。ローカルネットワークでは、より短い形式で告知できます。
docker compose -f server/docker-compose.yml up で起動するか、DATABASE_URL に指定した Postgres と、NODE_KEY に指定した fb key で作成したキーファイルを用意して、cd server && npm install && npm start を実行してください。
テスト
| 内容 | コマンド |
|---|---|
| 適合性ベクター | node spec/run-vectors.cjs |
| SDK が仕様をそのまま実装していること | node test/sync-spec.cjs --check |
| JS SDK | cd sdk/javascript && npm test |
| Python SDK | cd sdk/python && python3 -m unittest discover -s tests |
| Go SDK | cd sdk/go && CGO_ENABLED=0 go test ./... |
| Swift SDK | sdk/swift/scripts/build-xcframework.sh --macos && swift test(ルートディレクトリで実行) |
| Rust コア | cd sdk/rust && cargo test |
| Kotlin SDK | cd sdk/kotlin && ./gradlew :foodblock:test(JDK 17 が必要です);バンドルライブラリのチェック:scripts/build-natives.sh jvm && ./gradlew :foodblock:testBundled |
| 仕様テキストだけをもとに書かれたオラクル | node spec/oracle/run.cjs |
| すべての fold、コアとオラクルの照合 | node test/audit/run.cjs |
| 一覧にあるものに未使用または未テストのものがないこと | node test/necessity.cjs(完全な計測には10分かかります:node tools/necessity.cjs) |
| 保存済みブロックと現在のコアの照合 | node tools/replay-check.cjs <export>(件数と理由コードのみ;DISTRIBUTION.md を参照) |
| ノード | cd server && npm test(インメモリ Postgres;実際のものを使う場合は TEST_DATABASE_URL を設定してください) |
| MCP サーバー | cd mcp && npm test |
| CLI | cd cli && npm test |
ライセンス
MIT。著作権者は、このリポジトリを所有する FOODX WORLD LIMITED(イングランドおよびウェールズ、会社番号 16406719)です。このプロトコルの実装に許可は不要です。
変更の提案方法とバージョンの仕組みについては、GOVERNANCE.md をご覧ください。互いにどう接するか、および許可されないコンテンツについては、CODE_OF_CONDUCT.md をご覧ください。脆弱性の報告については、SECURITY.md をご覧ください。
FoodBlock の引用については、CITATION.cff をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。