Skip to main content
Glama
IMPORTANT

This project is archived. Its successor is OutPost2.

outpost was a single-user CLI and a local stdio MCP server: it ran on the machine you were sitting at, held one account per profile, and could not be reached from a phone.

OutPost2 is the successor — a self-hosted, multi-user server with named connections, built for the case this CLI could not serve: a voice conversation while driving. You say "check work email" and it knows which mailbox; "all" checks every one. Several unrelated Entra tenants at once, plus YouTrack and GitHub, through one connection model.

It is a rewrite rather than a port — no code is shared — so there is no upgrade path from here. outpost remains readable and forkable at its final state; it receives no further updates, and its open issues will not be worked.

outpost

Your outpost to Outlook — from the terminal.

A fast CLI for Microsoft Tasks, Calendar, Email, Contacts, and Teams via the Microsoft Graph API. Human-friendly with natural-language dates, AI-agent-ready with JSON output and a 39-tool MCP server for Claude Desktop.

Full documentation on the Wiki

Related MCP server: Outlook MCP Server

How Does It Compare?

Feature

outpost

Outlook Desktop

OWA (Browser)

python-o365

msgraph-sdk

Terminal-native

Yes

No

No

Library only

Library only

Natural language dates

Yes

No

No

No

No

Tasks + Calendar + Mail + Teams

All-in-one

Yes

Yes

Partial

Raw API

Teams channel files (browse/download)

Yes

Yes

Yes

No

Raw API

Office/PDF text extraction (DOCX, XLSX, PPTX, PDF)

Built-in

Native

Native

No

No

MCP server (Claude Desktop)

39 tools

No

No

No

No

JSON output for scripting

Every command

No

No

Manual

Manual

Multi-account profiles

Yes

Yes

Tab switching

Manual

Manual

Optional permission scopes

Opt-in per feature

All or nothing

All or nothing

Manual

Manual

Runs headless / SSH

Yes

No

No

Yes

Yes

Setup time

< 2 minutes

Installer

Browser login

Code required

Code required

Quick Start

# Install (Python 3.10+)
pip install git+https://github.com/signalclaude/outpost.git

# Connect your Microsoft account
outpost setup

# You're ready
outpost task list
outpost cal today
outpost mail list --unread
outpost teams chats

What Can It Do?

outpost task add "Review PR" --due tomorrow --priority high
outpost cal add "Standup" --start "tomorrow 9am" --duration 15
outpost mail send --to "bob@work.com" --subject "Update" --body "All good!"
outpost teams send <team-id> <channel-id> --body "Hi team!"
outpost contact search "alice"
outpost update                            # self-update to latest release
outpost --version                         # check installed version

Every command supports --output json for scripting and AI agents.

Documentation

See the Wiki for full documentation:

License

MIT

Available Tools

39 tools
auth_statusA

Check if the user is authenticated with Microsoft.

Inputs: no named parameters. Returns: object

cal_addB

Add a calendar event to Outlook.

Inputs: title (required), start (required), end, duration, +3 more. Returns: object

cal_deleteB

Delete a calendar event from Outlook.

Inputs: event_id (required). Returns: object

cal_listC

List calendar events from Outlook.

Inputs: date, week. Returns: result

cal_nextB

Get the next upcoming calendar event(s) from Outlook.

Inputs: count. Returns: result

cal_todayA

Get today's calendar events from Outlook.

Inputs: no named parameters. Returns: result

cal_updateB

Update an existing calendar event in Outlook.

Inputs: event_id (required), title, start, end, +3 more. Returns: object

contact_listC

List contacts from Outlook.

Inputs: top. Returns: result

mail_attachmentsB

List attachments for an email message.

Inputs: message_id (required). Returns: result

mail_deleteB

Delete an email from Outlook.

Inputs: message_id (required). Returns: object

mail_download_attachmentB

Download an email attachment. Returns filename and base64-encoded content.

Inputs: message_id (required), attachment_id (required). Returns: object

mail_listC

List email messages from Outlook.

Inputs: folder, top, unread. Returns: result

mail_readB

Read a specific email message from Outlook.

Inputs: message_id (required). Returns: object

mail_replyB

Reply to an email in Outlook.

Inputs: message_id (required), body (required). Returns: object

mail_sendB

Send an email via Outlook.

Inputs: to (required), subject (required), body (required), cc. Returns: object

task_addC

Add a new task to Microsoft To Do.

Inputs: title (required), due, list_name, priority. Returns: object

task_completeA

Mark a task as completed in Microsoft To Do.

Inputs: task_id (required), list_name. Returns: object

task_deleteB

Delete a task from Microsoft To Do.

Inputs: task_id (required), list_name. Returns: object

task_listB

List tasks from Microsoft To Do.

Inputs: due, list_name. Returns: result

task_listsA

List all task lists in Microsoft To Do.

Inputs: no named parameters. Returns: result

task_lists_createA

Create a new task list in Microsoft To Do.

Inputs: name (required). Returns: object

task_lists_deleteB

Delete a task list from Microsoft To Do.

Inputs: list_id (required). Returns: object

task_updateB

Update an existing task in Microsoft To Do.

Inputs: task_id (required), title, due, priority, +1 more. Returns: object

teams_channelsB

List channels in a Microsoft Team.

Inputs: team_id (required). Returns: result

teams_chat_messagesC

Read messages from a Teams chat (1:1 or group).

Inputs: chat_id (required), top. Returns: result

teams_chatsA

List your recent Teams chats (1:1, group, and meeting). Requires the Teams feature.

Inputs: top. Returns: result

teams_chat_sendB

Send a message to a Teams chat (1:1 or group).

Inputs: chat_id (required), body (required). Returns: object

teams_downloadA

Download a file from Teams/SharePoint to the local workspace.

The file is saved to the local workspace. To read or analyze the file, use the filesystem server to read it at the returned workspace_path. Use teams_workspace_read only for plain text files. Use teams_upload to push changes back.

Inputs: drive_id (required), item_id (required). Returns: object

teams_filesA

List files in a Teams channel's SharePoint folder.

Inputs: team_id (required), channel_id (required). Returns: result

teams_listA

List your joined Microsoft Teams. Requires the Teams feature to be enabled in outpost setup.

Inputs: no named parameters. Returns: result

teams_messagesC

Read messages from a Teams channel.

Inputs: team_id (required), channel_id (required), top. Returns: result

teams_sendB

Send a message to a Teams channel.

Inputs: team_id (required), channel_id (required), body (required). Returns: object

teams_uploadA

Upload a file from the workspace to Teams/SharePoint.

Best suited for text-based files created with teams_workspace_write (markdown, CSV, plain text). Binary files (DOCX, XLSX, etc.) should be treated as read-only — use teams_workspace_extract to read them, not modify and re-upload.

Inputs: drive_id (required), parent_item_id (required), filename (required). Returns: object

teams_workspace_extractA

Extract text content from a binary file in the workspace.

Supports DOCX, XLSX, PPTX, and PDF files. Returns the extracted plain text content. Much faster than reading binary files through the filesystem server.

Inputs: filename (required). Returns: object

teams_workspace_listA

List files currently in the transient workspace directory.

For binary files (docx, pdf, xlsx, etc.), read them directly at the returned path using the filesystem server.

Inputs: no named parameters. Returns: result

teams_workspace_readA

Read a text file from the workspace directory.

For binary files (docx, pdf, xlsx, etc.), this tool returns metadata and a path hint instead of content. Use the filesystem server to read binary files directly.

Inputs: filename (required). Returns: object

teams_workspace_writeA

Write a text file to the workspace directory for sharing via Teams.

For text-based formats only (markdown, CSV, plain text, etc.). Do not use this to create or overwrite binary files (DOCX, XLSX, PPTX, PDF) — use teams_workspace_extract to read those instead.

Inputs: filename (required), content (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 39 tools

    Disambiguation5/5

    Each tool has a clear prefix (cal_, mail_, task_, teams_) and a descriptive verb or noun, making their purpose immediately distinguishable. Overlaps are minimal and well-documented in descriptions, e.g., teams_messages vs teams_chat_messages.

    Naming Consistency4/5

    Most tools follow a consistent verb_noun pattern with underscores, grouped by service prefix. Minor exceptions like cal_next, cal_today, and teams_channels deviate from the verb_noun pattern but are still intuitive.

    Tool Count3/5

    39 tools is on the higher side but justified by the integration of three Microsoft services (Outlook, To Do, Teams). Some areas like teams_workspace have multiple tools that could be consolidated, slightly bloating the count.

    Completeness4/5

    The tool set covers core CRUD operations for calendars, mail, tasks, and Teams, including edge cases like attachments and file workspace. Missing advanced features like calendar sharing or team creation, but these are reasonable omissions for an integration server.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers