outpost
This MCP server lets you manage Microsoft To Do, Outlook Calendar, Outlook Mail, Contacts, Microsoft Teams, and Teams/SharePoint files from an AI/agent interface.
Add, list, update, complete, and delete Microsoft To Do tasks; create/delete task lists.
Create, list, update, and delete calendar events; view today’s, weekly, and upcoming events.
List, read, search, send, reply to, and delete emails; list and download attachments.
List and search Outlook contacts.
Check Microsoft authentication status.
List Teams, channels, chats, and messages; send channel and chat messages.
List, download, and upload Teams/SharePoint files.
List, read, and write local workspace text files; extract text from DOCX, XLSX, PPTX, and PDF files.
Click on "Deploy 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., "@outpost list my unread emails"
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.
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 chatsWhat 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 versionEvery command supports --output json for scripting and AI agents.
Documentation
See the Wiki for full documentation:
Installation — pip, wheel, from source
Setup & Authentication — device code flow, token storage
Commands — Tasks, Calendar, Email, Contacts, Teams
MCP Server — Claude Desktop integration (39 tools)
Remote Access — SSE/streamable-http for mobile/LAN
Permissions & Scopes — scope-to-feature matrix
License
MIT
Available Tools
39 toolsauth_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
contact_searchB
Search contacts in Outlook by name or email.
Inputs: query (required), 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_searchA
Search email messages across all folders in Outlook.
Inputs: query (required), top. Returns: result
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
Scored across 39 tools
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.
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.
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.
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
Related MCP Connectors
Connect Apple iCloud and Microsoft 365 mail, calendars, contacts and tasks to AI.
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Lets Claude, ChatGPT, and Muse read and update your beckett tasks, notes, calendar, and lists.
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Claude with Microsoft Outlook through the Graph API, providing comprehensive email, calendar, folder management, and rules creation capabilities.19MIT
- AlicenseNot gradedqualityDmaintenanceConnects Claude to Microsoft Outlook through the Microsoft Graph API, enabling email management (list, search, read, send) and calendar operations (list, create, accept, decline, delete events) via OAuth 2.0 authentication.1MIT
- FlicenseBqualityDmaintenanceProvides comprehensive integration with Microsoft Outlook for managing emails, contacts, calendars, and folders through the Microsoft Graph API. It offers 26 specialized tools to perform actions like sending emails, scheduling meetings, and organizing mail folders.261-
- FlicenseNot gradedqualityDmaintenanceProvides Claude Desktop and Claude Code with access to Microsoft 365 email and calendar services via the Microsoft Graph API. It enables users to manage emails, search folders, schedule calendar events, and check availability through natural language commands.-