Open Source ยท Agent Infrastructure

Secure file handoff
for AI agents.

Bus gives every agent-to-agent file exchange a verified sender, explicit recipient, signed manifest, time-bound access, and append-only audit trail โ€” across servers, tools, and environments.

โญ Self-deploy free Hosted quickstart

MIT license ยท self-hostable ยท "Dropbox for AI agents" without shared credentials.

Live file transfer ยท server-77 โ†’ bus.meetkai.xyz โ†’ server-89

๐Ÿค–
SnappedAI
server-77
๐ŸšŒ Bus
โ˜•
Kai-CMO
server-89
1 Upload POST /files.put
2 Hash + Sign SHA-256 manifest
3 Grant 1h expiry
4 Token Single-use ยท 5min
5 Download Verified โœ“
file_id: file_94fe66dd...
grant: grnt_066fe0bd...
hash: sha256:2e39...
contents: โœ“ verified

What changes when you use Bus

File sharing between agents is a solved problem โ€” badly.

Without Bus
  • โŒ Shared bucket credentials across agents
  • โŒ Anyone with the URL can download
  • โŒ No sender identity โ€” can't verify who sent what
  • โŒ Revocation means changing bucket policy
  • โŒ Files in Slack, Discord, or pasted as base64
  • โŒ No audit trail โ€” no idea who accessed what
With Bus
  • โœ“ Per-agent identity โ€” every action attributed
  • โœ“ Explicit share grants โ€” recipient required
  • โœ“ SHA-256 signed manifest on every handoff
  • โœ“ Instant revocation โ€” single API call
  • โœ“ Single-use download tokens, 5-min TTL
  • โœ“ Append-only audit log โ€” queryable by actor

Why Bus exists

Agents on different servers need to share files. Right now everyone is doing it wrong.

Bus vs. S3 Presigned URLs

Capability S3 Presigned URL Bus
Per-agent identityโœ— No โ€” shared IAM roleโœ“ Yes โ€” per-agent key
Recipient-scoped accessโœ— No โ€” anyone with URLโœ“ Yes โ€” agent_id required
Instant revocationโœ— No โ€” must invalidate bucket policyโœ“ Yes โ€” single API call
Signed manifest (sender + hash)โœ— Noโœ“ Yes โ€” HMAC-SHA256
Immutable audit trail~ CloudTrail (complex)โœ“ Built in, queryable
MCP native toolsโœ— Noโœ“ Yes โ€” 7 tools
Zero AWS dependencyโœ— Noโœ“ Yes โ€” self-contained
๐Ÿ”“

SSH and shared folders

Works until it doesn't. No access control. No audit trail. One misconfigured key and everything is exposed.

scp agent1@host:/tmp/output.csv agent2@host:/tmp/
๐Ÿชฃ

Direct S3 access

Every agent gets broad bucket access. No per-agent identity. No revocation. "Public read" is the easy answer โ€” and it is the wrong one.

s3://my-bucket/shared/ โ€” full access to everyone
๐Ÿ’ฌ

Slack and Discord uploads

Files get pasted into chat. Disappear after 90 days. No audit. No verification. Not how infrastructure should work.

here's the file [attachment]
๐Ÿ”ง

Custom scripts

One-off handoff code for every new workflow. No policy layer. No access control. Works until someone changes something.

curl -X POST https://other-agent/ingest -d @file.csv

How Bus works

Every file gets an identity. Every handoff gets a manifest. Every access gets logged.

1

Register each agent

Each agent gets a unique identity and an API key. All file actions are attributed to that agent. Identity is the foundation โ€” nothing works without it.

2

Upload a file

POST the file. Bus stores it, computes the content hash, creates a signed manifest, and returns a file_id. That file_id is your handle for all future operations.

Upload
curl -X POST https://bus.meetkai.xyz/files.put \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@report.csv"

โ†’ {"file_id": "file_abc123", "content_hash": "sha256:...", "manifest_id": "mfst_xyz"}
3

Share to another agent

Grant access by agent ID. Set permissions (read, download, reshare). Set expiry. Bus creates a signed manifest linking sender, recipient, file hash, and expiry time.

Share with 1-hour expiry
curl -X POST https://bus.meetkai.xyz/files/file_abc123/share \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"recipient_id": "snappedai", "expires_in_hours": 1}'

โ†’ {"grant_id": "grnt_xyz", "manifest_id": "mfst_abc", "expires_at": ...}
4

Recipient gets a download token

The recipient requests a short-lived download token. Token is single-use. Expires in 5 minutes by default. Can't be shared or replayed.

5

Revoke access instantly

Any future access attempt against a revoked grant is denied immediately. No eventual consistency. No cache expiry to wait for. Revoke means revoke.

6

Audit everything

Every action โ€” upload, share, access grant, download, revoke โ€” is written to an append-only audit log. Queryable by actor, target, action, or time range.


What you get

๐Ÿชช Per-agent identity

Every agent has its own API key and agent_id. Every action is attributed. No shared credentials.

๐Ÿ“‹ Signed manifests

Every file handoff generates a manifest: sender, recipient, hash, expiry, signature. Verifiable and tamper-evident.

๐Ÿ” SHA-256 content hash

Every file is hashed on upload. Hash is in the manifest. Recipients can verify integrity before processing.

โฑ Time-bound grants

Set expiry on any share. Access automatically denied after expiry. No manual cleanup needed.

๐Ÿšซ Instant revocation

Revoke a grant. Next access attempt fails immediately. No delays, no caching, no grace period.

๐ŸŽŸ Single-use tokens

Download tokens are single-use and expire in 5 minutes. Can't be intercepted and replayed.

๐Ÿ“œ Immutable audit log

Append-only log of every action. Queryable by agent, file, or action type. Export for compliance.

๐Ÿ”Œ MCP native

Full MCP server included. Connect any Claude or Cursor instance with one config line.

๐Ÿ— REST API + Python SDK

Clean REST API for any language. Python SDK ships with the server. JS SDK coming.


Quick start

Register, upload, share, verify โ€” under 5 minutes.

Register Agent A
curl -X POST https://bus.meetkai.xyz/agents/register \
  -H "Content-Type: application/json" \
  -d '{"name": "agent-a"}'

โ†’ {"agent_id": "agt_abc", "api_key": "fbus_..."}
Register Agent B (the recipient)
curl -X POST https://bus.meetkai.xyz/agents/register \
  -H "Content-Type: application/json" \
  -d '{"name": "agent-b"}'

โ†’ {"agent_id": "agt_def", "api_key": "fbus_..."}
Agent A uploads a file
curl -X POST https://bus.meetkai.xyz/files.put \
  -H "Authorization: Bearer fbus_..." \
  -F "file=@data.csv"

โ†’ {"file_id": "file_xyz", "content_hash": "sha256:abc...", "manifest_id": "mfst_123"}
Agent A shares to Agent B (1 hour expiry)
curl -X POST https://bus.meetkai.xyz/files/file_xyz/share \
  -H "Authorization: Bearer fbus_..." \
  -H "Content-Type: application/json" \
  -d '{"recipient_id": "agt_def", "expires_in_hours": 1}'

โ†’ {"grant_id": "grnt_abc", "manifest_id": "mfst_456", "expires_at": ...}
Agent B gets a download token and downloads
# Get token
TOKEN=$(curl -s -X POST https://bus.meetkai.xyz/files/file_xyz/download-token \
  -H "Authorization: Bearer fbus_...agent_b_key..." | jq -r .token)

# Download
curl "https://bus.meetkai.xyz/files/file_xyz/content?token=$TOKEN" -o data.csv
Verify the manifest
curl https://bus.meetkai.xyz/files/file_xyz/manifest \
  -H "Authorization: Bearer fbus_..."

โ†’ {"manifest": {"sender_id": "agt_abc", "content_hash": "sha256:abc...", "signature": "...", ...}}

API reference

Base URL: https://bus.meetkai.xyz

Agents

POST
/agents/register
Register a new agent. Returns agent_id and api_key. Store the key โ€” shown once.
GET
/agents/:agent_id
Get agent details. API key not returned after registration.

Files

POST
/files.put
Upload a file. Multipart form upload. Returns file_id, content_hash, manifest_id. v0.1 max: 100MB.
GET
/files/:file_id
Get file metadata. Owner or grant holder only. Returns hash, size, mime type, uploader.
POST
/files/:file_id/download-token
Issue a single-use download token. Expires in 5 min by default. Configurable via ttl_ms.
GET
/files/:file_id/content?token=...
Download file content using a token. No auth header needed โ€” token is the credential.

Shares

POST
/files/:file_id/share
Share a file to another agent. Body: recipient_id, permissions[], expires_in_ms. Returns grant_id + manifest.
POST
/shares/:grant_id/revoke
Revoke access immediately. All future requests against this grant return 403.
GET
/files/:file_id/shares
List all grants for a file. Owner only.

Manifests

GET
/files/:file_id/manifest
Get the manifest for a file. Contains sender, hash, signature, expiry.
POST
/manifest/verify
Verify a manifest signature. Returns {valid, signature_valid, expired}.

Error responses

401 Unauthorized

Missing or invalid API key. Include Authorization: Bearer fbus_... on every request.

403 Forbidden

Agent exists but doesn't have access to this resource. Check grant status โ€” it may have expired or been revoked.

404 Not Found

File, grant, or agent doesn't exist. Verify the ID from the original upload or registration response.

429 Rate Limited

Too many requests. Back off exponentially. Retry-After header included. Default: 100 req/min per agent.

Audit

GET
/audit
Query the audit log. Filter by actor_id, target_id, action. Returns events in reverse chronological order.

MCP integration

Connect Bus to any Claude or Cursor instance in one config block. Agents get native file transfer tools.

Available MCP tools

filebus_put
filebus_get
filebus_share
filebus_revoke
filebus_download
filebus_audit_search
filebus_manifest_verify
claude_desktop_config.json
{
  "mcpServers": {
    "bus": {
      "command": "node",
      "args": ["/path/to/agent-sentinel/mcp/file-bus-mcp/src/index.js"],
      "env": {
        "FILE_BUS_ENDPOINT": "https://bus.meetkai.xyz",
        "FILE_BUS_API_KEY": "fbus_your_key_here"
      }
    }
  }
}
Claude can now transfer files between agents natively
# Claude calls filebus_put to upload a generated report
# Then filebus_share to send it to another agent
# The receiving agent calls filebus_download to retrieve it
# All logged, signed, and auditable

Deploy how your team needs

Cloud for speed. Self-hosted for control. Hybrid for both.

โ˜๏ธ

Cloud

Fastest onboarding. Register, upload, and share in under 5 minutes. Zero infrastructure to manage.

Best for: most teams

๐Ÿ–ฅ

Self-hosted

Run the full stack in your VPC or on-prem. Files never leave your environment. Full policy control.

Best for: compliance-sensitive teams

๐Ÿ”€

Hybrid

Bus manages the control plane. Your data plane stays inside your environment. Data sovereignty without ops overhead.

Best for: enterprise with data residency requirements


Pricing

Self-deploy free. Managed cloud for teams who want it hosted.

Open Source ยท MIT License
Self-deploy Bus for free. Forever.
Clone the repo, run npm install, start the service. No license fees. No limits.
โญ Clone on GitHub

Managed cloud plans: annual billing saves 20%. Overage: $0.05/op, $0.02/GB.

Starter
Free
Managed cloud ยท no card needed
  • 3 agents
  • 1GB storage
  • 100 file operations/mo
  • 7-day audit retention
  • MCP server access
Business
$499/mo
$399/mo billed annually ยท overage applies
  • 100 agents
  • 500GB storage
  • Unlimited operations
  • 1-year audit retention
  • Advanced policy controls
  • Priority support
Enterprise
Self-hosted or hybrid ยท SCIM/SSO ยท private networking ยท tenant policy packs ยท custom SLA
Talk to us