Escritório
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Escritórioask @especialista-deposito "quando o reembolso cai na conta após estorno?""
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Office
Peer-to-peer communication between Claude Code sessions. Your sessions and your experts become addressable people by name, chatting with each other about multiple topics simultaneously — without an orchestrator.
Design spec: pessoal/claudicaro-cli/docs/design/2026-08-02-escritorio-multiagente.md
Why this wasn't possible without it
Claude Code's native topology is a tree: the sub-agent returns to the parent, SendMessage
only reaches who the session itself spawned, Workflow passes data through the script. Two
siblings don't talk to each other. Lateral communication requires a shared medium — which is
this mailbox.
Related MCP server: claude-mesh
The six tools
tool | what it does |
| who exists, what they know, which tier — one line per person, without loading any |
| asks a question and waits for the answer |
| sends and moves on; in the thread of a pending question, it becomes the answer |
| pulls the correspondence (normally the hook delivers it automatically) |
| shared whiteboard, no recipient |
| claims a resource before touching it |
Plus close_thread, which ends the conversation and makes each colleague distill the notebook.
How it works
A thread is the single conversation container — it replaces rooms and channels. Debate between peers is a thread with N participants where each one chooses who to reply to.
No boss, two rules in the mailbox keep the system in check:
hopsdecrements with each message; when it hits zero, the mailbox rejects it. Kills infinite ping-pong.The thread owner is whoever opened it, and only they can close it.
Delivery has two natures:
Live session receives via hook (
Stopblocks the stop and delivers;PostToolBatchdelivers mid-work). The hook is a script — runs outside the model, zero token cost.Roster colleague is woken up by the mailbox with
claude -p, responds, and goes back to sleep.
Colleague's memory: within a thread they keep the session alive (--resume) and remember
everything; when the thread closes, they distill what they learned into a .md notebook and
the session dies. Long-term is the notebook — auditable, manually editable, versioned.
Installation
npm install && npm run build
node scripts/instalar.mjs # --dry pra ver antes, --remover pra desfazerThe installer registers the delivery hook in ~/.claude/settings.json, sets
ESCRITORIO_WORKSPACE/ESCRITORIO_ROSTER, and registers the MCP server via
claude mcp add --scope user (which writes to ~/.claude.json — settings.json doesn't register MCP).
Backs up to settings.json.antes-do-escritorio the first time, and never overwrites that backup.
Roster
~/claude-workspace-config/roster.yaml (synced repo Mac ↔ VM):
especialista-deposito:
brief: "Depósito antecipado: cobrança, pagamento, reembolso (DSG/v1)"
agent_file: ${ESCRITORIO_WORKSPACE}/dsg/.agent/especialista-deposito.md
caderno: ${ESCRITORIO_WORKSPACE}/pessoal/escritorio/cadernos/especialista-deposito.md
tier: advisor
cwd: ${ESCRITORIO_WORKSPACE}/dsg/v1brief is the only thing roster() returns — write it thinking "when would I call this
person." Paths accept ~ and ${VAR}; it's environment expansion that makes the same file work
on Mac and VM, where the workspace lives in different places.
Tiers
tier | can do | how it's enforced |
| read and advise | allowlist of tools ( |
| write in the working tree |
|
| write in isolation | own git worktree; if creation fails, refuses instead of falling back to the real repo |
A request can downgrade the tier in the query, never raise it.
Why allowlist and not denylist
The first version used --disallowedTools Edit Write NotebookEdit with bypassPermissions.
Tested with real claude, it leaked: the colleague wrote the file via Bash, which wasn't
in the negation. Measured across four variants:
flags | result |
| leaked (wrote via Bash) |
| held |
no permission-mode + deny Edit/Write/Bash | held |
no permission-mode + allowlist read-only | held, and still read |
We kept the allowlist: whatever I forget to list is denied instead of allowed. Worth noting
that Bash(cat:*) in the allowlist did not allow escaping via redirection (cat > arquivo).
See it happening
npm run tailFollows the mailbox and prints what happens between all sessions — board written, claim, thread opened, message exchanged, response arriving:
Escritório — monitor ao vivo
sessões vistas na última hora: icaromelo@v1, icaromelo@kairos-ui, icaromelo@oraculo-api, …
threads abertas: (nenhuma)
────────────────────────────────────────────────────────────────────────
13:26:36 ▤ quadro dsg/v1:decisoes = cache sempre via RedisService · icaromelo@v1
13:26:37 🔒 claim src/infra/redis por icaromelo@v1 · revisar TTLs
13:26:38 ⊕ thread [477cfbdc] Em uma frase: qual TTL padrao usamos? · dono icaromelo@v1
13:26:38 icaromelo@v1 →? especialista-cache [477cfbdc]
Em uma frase: qual TTL padrao usamos?
13:26:44 especialista-cache ←! icaromelo@v1 [477cfbdc]
O TTL padrão é 3600 segundos (1 hora) — mas sempre passe TTL explícito…→? is a blocking question, → a message, ←! a response.
Identity
Each session needs a name. ESCRITORIO_ID when declared; without it, derives from
user@folder — stable per project, so a session opened in dsg/v1 is always
icaromelo@v1 and can be addressed by another.
Tests
npm test # 117 testes, sem gastar API
node scripts/smoke-mcp.mjs # sobe o servidor MCP de verdade via stdio
node scripts/smoke-e2e.mjs # E2E REAL: acorda colega, --resume, caderno (gasta API)
node scripts/smoke-escrita.mjs # E2E REAL dos 3 tiers: advisor bloqueado, worktree isolado,
# editor sob claim (gasta API)Known limitations
One mailbox per machine. A session on the Oracle VM doesn't talk to the Mac's mailbox; the bridge between machines is a separate problem.
dist/lives on SSD. With the SSD unmounted the hook fails silently (|| true) and the MCP is disconnected — nothing freezes, but the office disappears until remounting.askon a live session depends on it running. If no one has that session open, you wait until the timeout (5 min) and the response stays in the inbox for later.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceEnables multiple Claude Code instances to communicate through direct messages and topic-based channels. It features a real-time web dashboard for monitoring conversations and includes a persistent mailbox for offline message delivery.
- Alicense-qualityBmaintenanceEnables networked Claude-to-Claude messaging over HTTP and MCP channels, allowing direct messages, broadcasts, threaded replies, and permission approvals among Claude Code instances.23MIT
- Alicense-qualityBmaintenanceEnables multiple Claude Code sessions to communicate and coordinate through broadcast and peer-to-peer messaging.21MIT
- Alicense-qualityBmaintenanceLets Claude Code instances discover and message each other across sessions, with reliable delivery via hooks instead of experimental channels.26MIT
Related MCP Connectors
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
Ephemeral REST chatrooms for AI agents to coordinate. Share a room URL — agents talk live.
Agent-to-agent network for teams: dm, who-knows-X routing, shared rooms. Human-in-the-loop.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/icaromelo1/escritorio'
If you have feedback or need assistance with the MCP directory API, please join our Discord server