Install
$ agentstack add mcp-anoopt-outlook-meetings-scheduler-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
[](https://mseep.ai/app/anoopt-outlook-meetings-scheduler-mcp-server)
Outlook Meetings Scheduler MCP Server
MCP Server for scheduling meetings in Microsoft Outlook using Microsoft Graph API.
This MCP server allows you to create calendar events, create events with attendees (including finding their email addresses). It integrates seamlessly with other MCP servers, such as the GitHub MCP server, to enhance your workflow.
Sample queries
- Schedule a meeting with Sarah for tomorrow at 3 PM.
- Create a meeting called "Project Kickoff" for tomorrow at 2 PM. Add Megan and John as required attendees.
Usage with GitHub MCP Server
- Create an issue in the organization/repo repository titled "Fix pagination bug in user dashboard" with the description "Users report seeing duplicate entries when navigating between pages." Then schedule a calendar reminder for me to review this issue tomorrow at 3 PM.
Demo
Tools
find-person
- Find a person's email address by their name
- Input:
name(string) - Returns: List of matching people with names and email addresses
create-event
- Create a calendar event using Microsoft Graph API
- Inputs:
subject(string): Subject of the calendar eventbody(string): Content/body of the calendar eventstart(optional): ISO format datetime (e.g., 2025-04-20T12:00:00)end(optional): ISO format datetime (e.g., 2025-04-20T13:00:00)timeZone(optional): Time zone for the event (default: "GMT Standard Time")- Returns: Event details including URL and ID
create-event-with-attendees
- Create a calendar event with attendees using Microsoft Graph API
- Inputs:
subject(string): Subject of the calendar eventbody(string): Content/body of the calendar eventstart(optional): ISO format datetime (e.g., 2025-04-20T12:00:00)end(optional): ISO format datetime (e.g., 2025-04-20T13:00:00)timeZone(optional): Time zone for the event (default: "GMT Standard Time")location(optional): Location of the eventattendees: Array of { email, name (optional), type (optional) }- Returns: Event details including URL, ID, and attendees list
get-event
- Get details of a calendar event by its ID
- Input:
eventId(string): ID of the event to retrieve- Returns: Detailed event information including subject, time, attendees, and URL
list-events
- List calendar events with optional filtering
- Inputs:
subject(optional): Filter events by subject containing this textstartDate(optional): Start date in ISO format (e.g., 2025-04-20T00:00:00) to filter events fromendDate(optional): End date in ISO format (e.g., 2025-04-20T23:59:59) to filter events untilmaxResults(optional): Maximum number of events to return- Returns: List of calendar events with basic information and IDs
delete-event
- Delete a calendar event
- Input:
eventId(string): ID of the event to delete- Returns: Confirmation of event deletion
update-event
- Update an existing calendar event
- Inputs:
eventId(string): ID of the event to updatesubject(optional): New subject for the calendar eventbody(optional): New content/body for the calendar eventstart(optional): New start time in ISO format (e.g., 2025-04-20T12:00:00)end(optional): New end time in ISO format (e.g., 2025-04-20T13:00:00)timeZone(optional): New time zone for the eventlocation(optional): New location for the eventattendees(optional): Array of { email, name (optional), type (optional) }- Returns: Updated event details showing changes
update-event-attendees
- Add or remove attendees from a calendar event
- Inputs:
eventId(string): ID of the event to updateaddAttendees(optional): Array of attendees to add: { email, name (optional), type (optional) }removeAttendees(optional): Array of email addresses to remove from the event- Returns: Updated event attendee information
Setup
Authentication Modes
This MCP server supports three authentication modes:
1. Interactive (Delegated)
Thank you Lokka
Best for: User-impersonation scenarios, accessing user-specific data
- Prompts user to login interactively
- Uses delegated permissions
- Authenticates as the signed-in user
2. Client Credentials (App-Only)
Best for: Server-to-server scenarios, automated processes
- Uses Azure AD application credentials
- Requires Application permissions
- Works without user interaction
3. Client Provided Token
Best for: Custom token management, pre-acquired tokens
- Uses a token provided by the client
- Requires managing token refresh externally
Microsoft Graph API Setup
For Interactive (Delegated) Mode
- Register an application in the Microsoft Azure Portal (or use an existing app)
- Add a redirect URI:
http://localhost(Mobile and desktop applications platform) - Enable public client flows: Go to Authentication > Advanced settings > "Allow public client flows" = YES
- Grant necessary Delegated permissions: Microsoft Graph API > Delegated permissions > Calendars.ReadWrite, People.Read, User.Read
- Note your Client ID and Tenant ID (Client Secret not needed for interactive mode with custom app)
> Note: The server uses a built-in multi-tenant app by default, so custom app setup is optional. When authentication is needed, the device code and login URL will appear directly in your MCP client chat interface.
For Client Credentials (App-Only) Mode
- Register an application in the Microsoft Azure Portal
- Create a client secret
- Grant necessary Application permissions: Microsoft Graph API > Application permissions > Calendars.ReadWrite, People.Read.All, User.ReadBasic.All
- Grant admin consent for your organization
- Note your Client ID, Client Secret, and Tenant ID
Usage with VS Code
Authentication Mode Configuration
The MCP server supports different authentication modes via the AUTH_MODE environment variable:
interactive(default) - User authentication with browser or device code flowclient_credentials- App-only authentication with client secretclient_provided_token- Use a pre-acquired token
Backward Compatibility: If AUTH_MODE is not specified, the server automatically detects the mode:
- Presence of
CLIENT_SECRET→client_credentialsmode - Presence of
ACCESS_TOKEN→client_provided_tokenmode - Neither present →
interactivemode (default)
Local Node.js
You can run the MCP server directly with Node.js from your local build:
- Clone the repository and build the project:
git clone https://github.com/anoopt/outlook-meetings-scheduler-mcp-server.git
cd outlook-meetings-scheduler-mcp-server
npm install
npm run build
- For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing
Ctrl + Shift + Pand typing Preferences:Open User Settings (JSON).
Optionally, you can add it to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others:
Interactive Mode (Default - Zero Configuration):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
]
}
}
}
Interactive Mode with Custom App:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "",
"TENANT_ID": ""
}
}
}
}
Client Credentials Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}
Client Provided Token Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": ""
}
}
}
}
> Note: > - Uses a built-in multi-tenant Azure AD app (works for any organization) > - USER_EMAIL is automatically determined from the signed-in user > - Users will see a one-time consent prompt (no admin approval needed) > - Zero configuration required - works out of the box
Interactive Mode with Custom App:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "",
"TENANT_ID": ""
}
}
}
}
> Use a custom app if you need specific branding or tenant restrictions.
Replace /path/to/outlook-meetings-scheduler-mcp-server with the absolute path to your cloned repository.
Docker
Run the MCP server using Docker locally. Build the Docker image with the following command:
``` bash docker build -t mcp/outlook-meetings-scheduler .
For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing `Ctrl + Shift + P` and typing Preferences: `Open User Settings (JSON)`.
Optionally, you can add it to a file called `.vscode/mcp.json` in your workspace. This will allow you to share the configuration with others.
```json
{
"inputs": [
{
"type": "promptString",
"id": "client_secret",
"description": "Enter the client secret",
"password": true
}
],
"servers": {
"outlook-meetings-scheduler": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CLIENT_ID",
"-e",
"CLIENT_SECRET",
"-e",
"TENANT_ID",
"-e",
"USER_EMAIL",
"mcp/outlook-meetings-scheduler"
],
"env": {
"USER_EMAIL": "",
"CLIENT_ID": "",
"CLIENT_SECRET": "${input:client_secret}",
"TENANT_ID": ""
}
}
}
}
NPX
Interactive Mode (Default - Zero Configuration):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
]
}
}
}
Interactive Mode with Custom App:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "",
"TENANT_ID": ""
}
}
}
}
Client Credentials Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}
Client Provided Token Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": ""
}
}
}
}
Usage with Claude Desktop
Docker
- Run the MCP server using Docker locally. Build the Docker image with the following command:
``` bash docker build -t mcp/outlook-meetings-scheduler .
2. Add the following to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CLIENT_ID",
"-e",
"CLIENT_SECRET",
"-e",
"TENANT_ID",
"-e",
"USER_EMAIL",
"mcp/outlook-meetings-scheduler"
],
"env": {
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}
NPX
Interactive Mode (Default - Zero Configuration):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
]
}
}
}
Interactive Mode with Custom App:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "",
"TENANT_ID": ""
}
}
}
}
Client Credentials Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}
Client Provided Token Mode:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": ""
}
}
}
}
Example Scenarios
Integration with GitHub MCP Server
You can combine this MCP server with other MCP servers like the GitHub MCP server for powerful workflows.
Create an Issue and Schedule a Follow-up Review
Create an issue in the organization/repo repository titled "Fix pagination bug in user dashboard" with the description "Users report seeing duplicate entries when navigating between pages." Then schedule a calendar reminder for me to review this issue tomorrow at 3 PM.
This will:
- Use the GitHub MCP server to create the issue
- Use the Outlook Meetings Scheduler MCP server to create a calendar event for the review
Schedule a Code Review Meeting Based on a Pull Request
Find the open PR about the authentication feature in the organization/app-backend repository and schedule a code review meeting with the contributors for tomorrow morning.
This will:
- Use GitHub MCP server to find the pull request and identify contributors
- Use the Outlook Meetings Scheduler MCP server to schedule a meeting with those team members
Configuration for Multi-MCP Setup
To use both GitHub and Outlook MCP servers together :
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"US
…
## Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [anoopt](https://github.com/anoopt)
- **Source:** [anoopt/outlook-meetings-scheduler-mcp-server](https://github.com/anoopt/outlook-meetings-scheduler-mcp-server)
- **License:** ISC
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.