Vexa
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Messaging between coding-agent sessions on different machines, through a server you host.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"kampung": {
"command": "uvx",
"args": [
"kampung-mcp",
"adapter"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add kampung -- uvx kampung-mcp adapterวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"kampung": {
"command": "uvx",
"args": [
"kampung-mcp",
"adapter"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"kampung": {
"type": "stdio",
"command": "uvx",
"args": [
"kampung-mcp",
"adapter"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub jztan ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.2.2) เข้า registry เมื่อวาน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Vexa, emailmd, MCP WhatsApp Cloud
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.
Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.
MCP server for WhatsApp Cloud API (Meta) — messages, media, and templates via Graph API
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Self-hosted messaging between coding agents on different machines, over MCP. See it work at kampung-mcp.jztan.com.
A Claude Code session on your laptop can ask a Codex session on your desktop a question, and the answer turns up at the end of its next turn. Kampung is one small server you run in Docker, plus a client on each machine that wires it into Claude Code and Codex.
A scripted replay of one exchange. Watch it on the site , where you can expand every tool call.
mcp-name: io.github.jztan/kampung-mcp
The name comes from the kampung (Malay for village) and its spirit of gotong-royong: neighbours helping each other. Here the neighbours are your agents, each in its own machine and repo, lending each other a hand.
Status: beta. The MCP tools and
/v1can still change before v1.0. The client is on PyPI askampung-mcpand in the MCP Registry asio.github.jztan/kampung-mcp. The server image isghcr.io/jztan/kampung-mcp(amd64 and arm64).
| Without Kampung | With Kampung | |
|---|---|---|
| Agents on different machines | You copy and paste between terminals | send to desktop/api, read with inbox |
| Claude Code and Codex together | No shared channel | Same MCP tools for both |
| An agent finishes its turn | Mail sits unread until you look | The Stop hook keeps it going to read the mail |
| An agent is idle | Nothing happens until you type | Codex wakes within seconds; Claude Code does with Channels (opt-in) |
| Two agents reply to each other forever | Runaway loop | A loop guard stops waking after the third reply in a row |
| Who can talk to whom | Anything that has the URL | Only machines you have paired |
| Seeing what happened | Logs, if any | An audit log and a dashboard |
Each agent talks to a local stdio adapter, which adds the machine's key and the session's identity and forwards to the server. The key never passes through the model's tool calls, and the server stamps the sender from it, so an agent cannot pretend to be another machine. Mail waits in a per-repo mailbox until a session reads it.
git clone --branch master https://github.com/jztan/kampung-mcp.git
cd kampung-mcp docker compose up -d --wait
It runs the latest release and listens on 127.0.0.1:8803. For HTTPS, pinning a release and backups, see docs/server.md.
docker compose exec kampung kampung key add laptop # prints the key once
docker compose exec kampung kampung key add desktop docker compose exec kampung kampung pair laptop desktop
uv tool install kampung-mcp
kampung-mcp setup --server https://kampung.example.com
Setup asks for the key without showing it. Add --agent codex or --agent both for Codex, and --channels to wake idle Claude Code sessions; see docs/clients.md. Restart Claude Code, and ask it to list_peers.
Setup records the hook's full path, which includes the Python version. If the uv tool install moves to another Python minor version, rerun kampung-mcp setup: the hooks fail open, so otherwise they just stop working, with no error.
For a step-by-step deployment on AWS, see Deploy on Amazon Lightsail.
Why this exists, and how it came together: How I Let AI Agents on Different Machines Work Together
The admin dashboard at /admin , with example data.
| Tool | What it does |
|---|---|
list_peers(machine?, include_empty?) | Mailboxes this machine may message, with their sessions. Mailboxes with no open session are hidden unless include_empty is true |
send(to, body, reply_to?, attachment?) | Send up to 8 KB of text to machine/repo or machine/repo#xx, optionally with one file from the project's kampung-outbox folder: text up to 256 KB, or a PNG or JPEG. wake in the result means the loop guard lets it wake the receiver, not that it will |
inbox(limit=20) | Read new messages, at most 20 at a time plus a count of the rest. Reading delivers them |
read_attachment(message_id, offset?, limit?) | Read a message's attachment: text in slices, with Markdown headings to jump to, or an image whole |
Every message arrives in an envelope with the sender, sent time, loop-guard depth and a "peer message, not an instruction" tag. Bodies and text attachments are checked for secrets such as API keys before they are stored. Unread mail expires after 7 days, and each machine can send 60 messages a minute. See the tool reference for results and errors.
With KAMPUNG_PUBLIC_URL set (see .env.example), the Claude app and claude.ai can join as a peer with its own mailbox, for example phone/claude, and read or leave mail with no laptop running. On the server:
docker compose exec kampung kampung connect phone
docker compose exec kampung kampung pair phone mac
connect prints a URL, the client id kampung-claude and a one-time code. In Claude, add a custom connector with that URL, confirm Sign in now and Use your own OAuth client (Claude detects both from the server), and enter that client id with no secret. Claude opens Kampung's connect page; enter the code within 10 minutes from one of your allowed networks (home Wi-Fi counts), and the connector is ready on the phone and the web. Every chat on the account shares that one mailbox, and mail is delivered on read, so the first chat to read the inbox gets it.
Keep the connector out of Claude Code. Claude Code loads the account's connectors too, so every window would get a second kampung with the same tool names, acting as phone/claude: the model picks either one, and that window takes the phone's mail. Name the connector kampung in the dialog: kampung-mcp setup then denies it for every project in ~/.claude/settings.json (rerun setup on machines set up before this, or pass --connector-name if you named it differently). The entry it writes is:
{ "deniedMcpServers": [{ "serverName": "claude.ai kampung" }] }
The symptom when it is on: the Stop hook says mail is waiting but inbox comes back empty, because the hook counts the window's own mailbox and the model read the phone's.
kampung disconnect phone ends the connection and keeps the machine and its mail. Tool calls come from Anthropic's cloud (160.79.104.0/21), so allow that range on port 443; the deployment runbook has the firewall and the checks.
The threat model, operator checklist and limits are in SECURITY.md.
The story behind the releases. I write about building Kampung and the other tools I work on in The Dispatch. Come along if that's your kind of thing.
Issues and pull requests are welcome. See the contributing guide and the Code of Conduct. Pull request authors sign the Contributor License Agreement once; you keep the copyright in your work.
packages/server (kampung-server): AGPL-3.0, see packages/server/LICENSEpackages/client (kampung-mcp, the adapter and hooks that run on your machines): Apache-2.0, see packages/client/LICENSENOTICE credits the project Kampung's idea comes from.