LABSCO SUMMARY
Per-server registration is the access control.
Because mail, calendar, contacts and tasks are separate servers, an assistant that should read your calendar but never touch your inbox is a matter of which entries you add — no scopes to negotiate afterwards. The setup cost is the Microsoft side: registering an app in Entra ID and granting Graph permissions is the part that takes real time, and it is the same work whether you run one server or all six.
What it is
A set of MCP servers over Microsoft Graph, one per Outlook area: mail, calendar, contacts, to-do, mailbox settings and categories. Each runs independently, so you register only the ones you want an assistant to reach.
What you get
- Mail — advanced search, retrieve conversations, read full messages with attachments, mark read or unread, move, copy, delete and manage flags
- Composing — create and edit drafts, handle attachments, send, reply and forward
- Folders and rules — view and navigate the folder hierarchy, create, edit and delete folders, and manage mail rules
- Calendar — retrieve, create, update and delete events, accept, decline or tentatively answer invitations, cancel events, add and remove attachments
- Calendars and groups themselves — list, create, update and delete, plus free/busy lookup
- Contacts — search folders and contacts, read details, create, update and delete
- Tasks — retrieve, create and delete task lists; retrieve, create, update and delete tasks
- Categories — create, edit, delete, apply predefined colours, and assign them to emails and events
- Mailbox settings — read and update automatic replies, time zone and working hours
Requirements
Python 3.11 or higher and uv. Published as aisecretary version 0.1.0. Microsoft Graph API access has to be configured first, following the repository's Microsoft setup guide. Each server is a separate Python file: uv run mcp install server.py registers one with Claude Desktop, or uv run python claude_setup.py registers all of them at once. For OpenWebUI and similar platforms, uvx mcpo --port 9000 -- uv run mcp run server.py exposes it over HTTP at http://127.0.0.1:9000.
Setup effort
Build from source — git clone https://github.com/DIEGODOPAZO/AISecretary.git
USE CASES
01
Triaging a full inbox
Search, read whole conversations and move or flag messages without opening Outlook.
02
Drafting a reply for you to check
Create the draft with its attachments and leave sending as your decision.
03
Finding a slot everyone can make
Read free/busy across the people involved, then create the event with attendees.
04
Setting an out-of-office
Update automatic replies and working hours through mailbox settings.
05
Letting an assistant see your diary but not your mail
Register only the calendar server and leave the mail server unregistered.
BEFORE YOU INSTALL
What to know first
Requires
Python 3.11
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
TERMINAL
git clone https://github.com/DIEGODOPAZO/AISecretary.git
cd AISecretarySet up Microsoft Graph API access by following the repository's guide in setups/Microsoft.md.
MCP Clients
Claude Desktop — mcp install
CLAUDE DESKTOP — MCP INSTALL · TERMINAL
uv run mcp install server.pyRun it in your clone; server.py is the server you want — src/outlook_mail_mcp.py, src/outlook_calendar_mcp.py, src/outlook_contacts_mcp.py, src/outlook_to_do_mcp.py, src/outlook_mailbox_settings_mcp.py or src/outlook_categories_mcp.py. uv run python claude_setup.py registers all six at once.
Claude Desktop — manual config
CLAUDE DESKTOP — MANUAL CONFIG · JSON
{
"mcpServers": {
"Server_name": {
"command": "<YOUR_PATH_TO_UV>",
"args": [
"run",
"--with",
"mcp[cli]",
"--with",
"msal",
"mcp",
"run",
"<YOUR_PATH_TO_SERVER>"
]
}
}
}Set command to the full path of your uv binary and the last argument to the full path of one server file in your clone — src/outlook_mail_mcp.py, src/outlook_calendar_mcp.py, src/outlook_contacts_mcp.py, src/outlook_to_do_mcp.py, src/outlook_mailbox_settings_mcp.py or src/outlook_categories_mcp.py. Server_name is any name you choose.
Open WebUI
OPEN WEBUI · TERMINAL
uvx mcpo --port 9000 -- uv run mcp run server.pyRun it in your clone; server.py is one of the files in src (for example src/outlook_mail_mcp.py). Then add http://127.0.0.1:9000 under Settings → Tools in Open WebUI.