Skip to main content

Iobox

PyPI Python CI License: MIT Docs

Your email is in one place. Your calendar is in another. Your files are somewhere else entirely.

Iobox puts them in the same box. One workspace fans out a single query across every account and service simultaneously — email, calendar events, and files — and returns clean Markdown. Use it from the CLI or wire it into Claude Desktop via MCP so your AI assistant can search your inbox directly.

Status (v0.5.0): Google providers (Gmail, Calendar, Drive) are live-tested. Microsoft 365 providers (Outlook, OneDrive) are fully implemented but not yet tested against a real tenant — expect rough edges and please open issues.

Why

Email inboxes, calendars, and file drives are full of valuable content but it's trapped in silos. Iobox unifies them under a single interface: search across all three resource types at once, save results as structured Markdown files, and expose everything to AI assistants via an MCP server.

What's implemented

Iobox covers the full read + write surface for email, calendar, and files across Google and Microsoft 365.

Providers

Provider Type Read Write
GmailProvider Email search, list, get, attachments send, forward, draft, label, trash, sync
OutlookProvider Email search, list, get, attachments send, forward, draft, label, trash
GoogleCalendarProvider Calendar list, get create, update, delete, RSVP
OutlookCalendarProvider Calendar list, get create, update, delete, RSVP
GoogleDriveProvider Files search, list, get, download upload, delete, mkdir
OneDriveProvider Files search, list, get, download upload, delete, mkdir

Workspace layer

  • Named workspaces — configure multiple accounts in a ~/.iobox/workspaces/NAME.toml file
  • Fan-out queries — one search command queries all registered providers simultaneously; partial failures are logged and skipped
  • iobox space command group — create, add, list, status, use, login, logout

Processing layer

  • Markdown conversion — any Email, Event, or File resource exports as structured Markdown with YAML frontmatter
  • File manager — save resources to disk with deduplication and attachment handling
  • AI summarization — Claude-powered summaries (pip install 'iobox[ai]')
  • Semantic search — embedding backends (OpenAI, Voyage, local) + sqlite-vec index (pip install 'iobox[semantic]')

Access modes

  • readonly — search and retrieve only; no writes
  • standard — adds draft creation, labels, calendar and file writes
  • dangerous — adds send, forward, and trash

MCP server

Exposes all workspace tools to Claude Desktop and other MCP clients via FastMCP.

Installation

pip install iobox

Optional extras

pip install 'iobox[outlook]'   # Microsoft 365 / Outlook support
pip install 'iobox[mcp]'       # MCP server for Claude Desktop
pip install 'iobox[ai]'        # AI summarization via Claude
pip install 'iobox[semantic]'  # Semantic search (OpenAI embeddings + sqlite-vec)

Install from source

git clone https://github.com/timainge/iobox.git
cd iobox
uv sync

Quick Start

Gmail setup

  1. Create a Google Cloud project with Gmail API, Google Calendar API, and Google Drive API enabled
  2. Download OAuth credentials (Desktop app type) as credentials.json in the project root
  3. Run your first command — a browser window opens for OAuth consent:
iobox search -q "from:boss@example.com" -d 7

Workspace setup (multi-account)

# Create a workspace
iobox space create personal

# Add Gmail with messages, calendar, and drive access
iobox space add gmail you@gmail.com --messages --calendar --drive --read

# Check status
iobox space status

# Search across all resource types
iobox events list --after 2026-01-01
iobox files list --query "Q4 report"

Outlook / Microsoft 365 setup

pip install 'iobox[outlook]'
export OUTLOOK_CLIENT_ID=<your Azure app client ID>
export OUTLOOK_TENANT_ID=<your tenant ID or "common">

iobox space add outlook you@company.com --messages --calendar --read

MCP server (Claude Desktop)

pip install 'iobox[mcp]'

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "iobox": {
      "command": "iobox-mcp",
      "env": {
        "IOBOX_MODE": "readonly"
      }
    }
  }
}

CLI Reference

Email commands

# Search
iobox search -q "from:newsletter@example.com" -d 3

# Save emails
iobox save -q "label:important" --max 50 -d 14 -o ./emails

# Send
iobox send --to recipient@example.com --subject "Hello" --body "Message"

# Forward
iobox forward --message-id MESSAGE_ID --to recipient@example.com

# Drafts
iobox draft-create --to recipient@example.com -s "Subject" -b "Body"
iobox draft-list --max 10
iobox draft-send --draft-id DRAFT_ID
iobox draft-delete --draft-id DRAFT_ID

# Label / Trash
iobox label --message-id MSG_ID --star --mark-read
iobox trash --message-id MSG_ID

Calendar commands

# List events
iobox events list --after 2026-01-01 --before 2026-04-01

# Get a single event
iobox events get EVENT_ID

# Save event as Markdown
iobox events save EVENT_ID -o ./events

# Create event (requires --mode standard)
iobox events create --title "Team meeting" --start "2026-04-01T10:00:00" \
    --end "2026-04-01T11:00:00" --attendee alice@company.com

# RSVP (requires --mode standard)
iobox events rsvp EVENT_ID --response accepted

# Delete (requires --mode standard)
iobox events delete EVENT_ID

File commands

# List files
iobox files list --query "Q4 report"

# Get file metadata
iobox files get FILE_ID

# Save file info as Markdown
iobox files save FILE_ID -o ./files

# Upload (requires --mode standard)
iobox files upload ./report.pdf --name "Q4 Report.pdf"

# Delete to trash (requires --mode standard)
iobox files delete FILE_ID

# Create folder
iobox files mkdir "Q4 Reports"

Workspace commands

# Create and manage workspaces
iobox space create NAME
iobox space list
iobox space use NAME
iobox space status

# Manage service sessions
iobox space add gmail you@gmail.com --messages --calendar --drive --read
iobox space add outlook you@company.com --messages --calendar
iobox space login 1        # re-authenticate by slot number
iobox space logout 1       # revoke token, keep config
iobox space remove 1       # remove slot entirely

Access modes

# Readonly — search and retrieve only
iobox --mode readonly search -q "test"

# Standard — adds drafts, labels, calendar/file writes
iobox --mode standard events create --title "Meeting" ...

# Dangerous — adds send, forward, trash
iobox --mode dangerous send --to recipient@example.com --subject "Hi" --body "Hello"

Set via --mode flag or IOBOX_MODE environment variable.

Output Format

Emails saved as Markdown with YAML frontmatter:

---
date: Mon, 23 Mar 2026 10:00:00 +1100
from: sender@example.com
labels: [INBOX]
message_id: 123456789abcdef
saved_date: 2026-03-24T21:30:00.123456
subject: Your Newsletter Subject
to: recipient@example.com
---

# Your Newsletter Subject

[Email content in Markdown]

Configuration

Variable Default Description
IOBOX_PROVIDER gmail Active provider: gmail or outlook
IOBOX_MODE standard Access mode: readonly, standard, dangerous
IOBOX_ACCOUNT default Account profile for token storage
CREDENTIALS_DIR . Directory for credential and token files
GOOGLE_APPLICATION_CREDENTIALS credentials.json Google OAuth credentials path
OUTLOOK_CLIENT_ID — Azure app client ID (required for Outlook)
OUTLOOK_TENANT_ID common Azure tenant ID

Development

uv sync
make check   # lint + type-check + tests
make test    # tests only

Documentation

Full documentation: timainge.github.io/iobox

License

MIT — see LICENSE for details.

Metadata

Release files for iobox 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iobox 0.6.0
File Size Uploaded
iobox-0.6.0.tar.gz 4.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for iobox 0.6.0
File Interpreter ABI Platform
iobox-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 5.0 MB

Release files / iobox-0.6.0.tar.gz

Download URL iobox-0.6.0.tar.gz
Size 4.9 MB
Tags Source
SHA-256 checksum
How to use checksums
b976d4a316c8eb4da090ee545bd41805990f94a657d670abb8be5e4f9e212935
BLAKE2b-256 checksum
How to use checksums
31acf92fcd9087534afbe2c68ed7a56c6b8094e9a7b72568d45716fa849999fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 26, 2026.

Transparency log

Release files / iobox-0.6.0-py3-none-any.whl

Download URL iobox-0.6.0-py3-none-any.whl
Size 105.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a1d20e3a2a715bda1f3392670a962aeb27c8dc9a4d9373079715599eac3ec9ec
BLAKE2b-256 checksum
How to use checksums
5a165a45a0a728503a1bf40941c1e5deae1973f0c6986fc0d4597cd23843af38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page