Slotlock
Calendars for AI agents: free/busy, next free slot, and bookings PostgreSQL never double-books.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Food data tools for any AI agent. Describe food in English, get structured data back.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
FOODBLOCK_URLต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"foodblock": {
"command": "npx",
"args": [
"-y",
"foodblock-mcp"
],
"env": {
"FOODBLOCK_URL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add foodblock --env FOODBLOCK_URL='ใส่ค่าของคุณ' -- npx -y foodblock-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"foodblock": {
"command": "npx",
"args": [
"-y",
"foodblock-mcp"
],
"env": {
"FOODBLOCK_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"foodblock": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"foodblock-mcp"
],
"env": {
"FOODBLOCK_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
FOODBLOCK_URL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub FoodXDevelopment ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.5.1) เข้า registry 9 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Slotlock, iDos Games SDK, Tandoor Recipe MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Calendars for AI agents: free/busy, next free slot, and bookings PostgreSQL never double-books.
Game modules, project scaffold and SDK skills for building web games on iDos Games.
Recipes, meal plans, shopping lists and more for your local or self-hosted Tandoor instance.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
The smallest language strangers in food need to agree on, with no boss. Everything else is data.
A block is three fields, signed by its author on their own device:
{
"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…" } }
This is an offer: it is signed by its from side. Its id is the hash of its canonical form (one exact way of writing it as text: RFC 8785). The author signs the same bytes with Ed25519 (the suite std; p256 and sm are two more). Nobody's clock decides who has authority. The other side can check that authority. Without the author's key no one can make a block that counts as theirs, or change one without changing its id, and a key that signs two versions of its history leaves the proof. What the protocol cannot do (keep a lost key safe, stop a custodian who holds your key, see inside a sealed block it was not sent) is in the threat model (a draft).
spec/protocol.md, FoodBlock 1.7 (2026-10-27; it adds to 1.6, except the few deletions the CHANGELOG lists). It is normative: where anything else here disagrees, it governs. Beside it: protocol.json (every list, for code to load), the canonical form, transport (email is the envelope, FoodBlock the letter) and the conformance vectors. There is no earlier version in the protocol: 1.6 is year zero. Old data enters once, through a converter that is not part of the protocol. NECESSITY.md shows, for every field, term, verb, closed type, reference key and invariant, which vectors fail without it; EXPERIMENTS.md records the compressions tried.Seven types, in three moods:
| Type | Meaning | |
|---|---|---|
| What exists | actor | A person, an autonomous system or machine, a circle, or a contact |
thing | Anything held, found or written: food, tools, places, recipes, shares, schemas | |
| Is | observe | A claim that something is so |
transform | A thing changes: inputs become outputs, or a thing is kept and stays itself | |
transfer | A thing changes owner, holder or place | |
| Must | promise | A commitment, offered or asked |
| May | grant | Authority given to someone |
Seven verbs, the refs that link blocks: updates, answers (the only way to consent), confirms, defeats, for, derives_from, same_as. prev and after say what came before.
Strict. Only four types carry authority and are closed (actor, promise, transfer, grant); any other word is an open type that a node stores and passes on. A node writes and reads only the current version's shapes: no nulls, no floats (money is { minor, currency }, an amount { value, unit } with a decimal string), exact UTC times, sets written sorted, every block in its key's chain (state.seq, refs.prev). It never repairs a block: it refuses it, and the author signs a new one.
Every peer speaks the protocol itself: a phone, a robot kitchen, a van, a sensor. Machines are peers like people. There are three sizes (protocol.json peers, and spec/protocol.md): micro (a device that measures and signs), edge (the local operator, works offline) and node (the lasting level, serves pull and push to anyone). Only people and machines hold nodes. A business, a household or a community is a circle of them, never a node of its own.
| Folder | What it is |
|---|---|
spec/ | The protocol, its lists, the canonical form, transport, profiles, vectors, the oracle and the paper |
sdk/javascript | The reference SDK |
sdk/rust | The one core: every rule, as a Rust crate, a C library and WebAssembly |
sdk/python, sdk/go, sdk/swift, sdk/kotlin | The same protocol in other languages, thin layers over the core; each runs every vector section |
server/ | A node: Postgres for the blocks, HTTP for signed pull, push and .well-known/foodblock |
mcp/ | An MCP server, so any autonomous system can write and read signed blocks |
cli/ | fb: make an identity and device keys, write blocks in its key chain, check, validate, verify, and convert old data once |
sql/schema.sql | The node's store: append-only, each block kept exactly as it arrived |
test/ | Cross-language canonical vectors, and the script that copies the spec into each SDK |
Each SDK's README says which profile it covers.
FoodBlock is built for people, autonomous systems and machines to use together. An autonomous system can read and write it directly:
mcp/, for Claude, Cursor, Windsurf, Gemini CLI and any MCP-compatible autonomous systemspec/protocol.md, with every list machine-readable in spec/protocol.jsonconst 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, { kind: 'person', at: '2026-10-15T09:00:00.000Z', audience: 'public' }) // who you are: its hash is your id; kind, at and audience are yours to state const eggs = fb.write('thing', { kind: 'eggs', name: 'Free-range eggs' }, {}, { author: me.hash, key: keys, held: [me], at: '2026-10-15T09:01:00.000Z', audience: 'public' }) fb.valid(eggs, [me]) // [] : sound, signed by a key of its author, in its chain
From a terminal:
cd cli && npm install
node bin/fb.js init me.json --kind person --audience public --reach P30D node bin/fb.js create thing eggs --state '{"name":"Free-range eggs"}' --identity me.json
Anyone can leave a node with everything they signed. Peers swap blocks with two messages, pull and push, and every answer is signed by a key of the node's holder (spec/modules/nodes.md). .well-known/foodblock says who the node is, what it holds and its admission rule.
Run one with docker compose -f server/docker-compose.yml up, or cd server && npm install && npm start with a Postgres at DATABASE_URL and a key file from fb key at NODE_KEY.
| What | Command |
|---|---|
| Conformance vectors | node spec/run-vectors.cjs |
| The SDKs carry the spec exactly | 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 (at the root) |
| Rust core | cd sdk/rust && cargo test |
| Kotlin SDK | cd sdk/kotlin && ./gradlew :foodblock:test (needs a JDK 17); the bundled-library check: scripts/build-natives.sh jvm && ./gradlew :foodblock:testBundled |
| The oracle (written from the spec text alone) | node spec/oracle/run.cjs |
| Every fold, core against oracle | node test/audit/run.cjs |
| No listed thing is dead or untested | node test/necessity.cjs (the full measurement, ten minutes: node tools/necessity.cjs) |
| Stored blocks against the current core | node tools/replay-check.cjs (counts and reason codes only; see DISTRIBUTION.md) |
| Node | cd server && npm test (in-memory Postgres; set TEST_DATABASE_URL for a real one) |
| MCP server | cd mcp && npm test |
| CLI | cd cli && npm test |
Public domain (CC0 1.0; decided 2026-10-29, replacing MIT). FOODX WORLD LIMITED (England and Wales, company 16406719), which wrote it and runs this repository, waived its copyright: the protocol needs no one's permission to implement, copy or change.
How a change is proposed and how versions work: GOVERNANCE.md. How we treat each other, and what content is not allowed: CODE_OF_CONDUCT.md. Reporting a weakness: SECURITY.md.
To cite FoodBlock, see CITATION.cff.