calendar-tasks-mcp
Click on "Install 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., "@calendar-tasks-mcpshow me my events for next Tuesday"
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.
calendar-tasks-mcp
An MCP server that lets Claude manage the workshop@burrowsjewellers.com.au Outlook calendar and Microsoft To Do, via Microsoft Graph. Built as a sibling to burrows-mcp, in the dashboard's Node/ESM style, with the same token-lifecycle pattern as xeroClient.js (mint once → silent refresh, refresh token stored in Postgres).
Delegated, least-privilege: it signs in as workshop@ and can only touch that mailbox's calendar and tasks — no mail, no files.
Tools
Tool | What it does |
| Create a calendar event (local wall-clock time + timezone), with a phone reminder. |
| Change fields on an event by id. |
| Delete one event by id. |
| List events in a window (resolve an id before update/delete). |
| Add a task to the "Burrows Ops" To Do list (due date + reminder optional). |
| Mark a task complete. |
| List tasks (resolve an id before completing). |
The agent is instructed (via tool descriptions) to confirm before deleting events or acting on many items at once — this is write access to a live calendar.
Related MCP server: Outlook MCP Server
One-time setup
1. Register the Entra (Azure AD) app
In the Entra admin center → Identity → Applications → App registrations → New registration:
Name:
burrows-calendar-tasks-mcpSupported account types: Accounts in this organizational directory only (single tenant).
Register. Copy the Application (client) ID and Directory (tenant) ID → these become
GRAPH_CLIENT_ID/GRAPH_TENANT_ID.Authentication → Advanced settings → Allow public client flows → Yes. (Device-code flow needs this; no client secret is created.)
API permissions → Add a permission → Microsoft Graph → Delegated permissions, add exactly:
Calendars.ReadWriteTasks.ReadWriteoffline_accessUser.Read
Grant admin consent (button at the top) using the Global Admin
adm_mark.burrows@…onmicrosoft.com.
2. Configure
cp .env.example .env
# set GRAPH_CLIENT_ID, GRAPH_TENANT_ID, confirm GRAPH_DEFAULT_TIMEZONE, fill PG* for the token table
npm install3. Sign in once (mint the refresh token)
npm run loginOpen the printed URL, enter the code, and sign in as workshop@burrowsjewellers.com.au. The refresh token is stored (Postgres graph_tokens table by default). After this the server refreshes access tokens silently.
4. (Optional) Verify live
npm run smoke # creates + cleans up a test event and task against the real mailboxRun / deploy
Locally, the MCP runs over stdio:
npm startOn the droplet, run it under pm2 like burrows-dashboard-api:
pm2 start src/server.js --name calendar-tasks-mcp --interpreter node
pm2 saveRegister it with your MCP client (e.g. burrows-mcp's host config):
{
"mcpServers": {
"calendar-tasks": {
"command": "node",
"args": ["/path/to/calendar-tasks-mcp/src/server.js"]
}
}
}Config (.env)
Key | Purpose |
| From the Entra app registration. |
| IANA tz applied to events/tasks. Confirm the store's timezone. |
| Default event reminder lead time (30). |
| To Do list for tasks ( |
|
|
| Token table (reuses |
Tests
npm test # payload-builder unit tests + a spawned-server integration test (no live Graph needed)Notes / cautions
Reminders fire on the phone only if
workshop@is signed into the phone's Outlook app. Add it if not.Conditional-access policies can occasionally force a fresh
npm run login; the refresh token isn't guaranteed to last forever.Token storage mirrors the dashboard's
xero_tokens: one row, app-owned, never committed to git.
Available Tools
7 toolscomplete_taskA
Mark a Microsoft To Do task complete by id.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| listName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mutation (marking complete) but lacks details on side effects, permissions, or response. This is adequate for a simple action but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. Every word is earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and minimal description, there are gaps: how to get taskId, whether listName is needed, and what happens on failure. The description is too sparse for full contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no additional meaning for taskId or listName beyond their types. The user is left guessing the role of listName and how to obtain taskId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (mark complete), the resource (Microsoft To Do task), and the method (by id). It distinctly stands apart from sibling tools which handle events or create/update tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies specific usage context (completing a task by ID), but does not explicitly state when not to use or provide alternatives. The sibling tools offer some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventA
Create an Outlook calendar event in the workshop@ mailbox. Times are local wall-clock (e.g. 2026-07-01T14:00:00), interpreted in the default timezone unless timeZone is given. Sets a phone reminder by default.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Local end, ISO with no offset | |
| body | No | Notes / description | |
| start | Yes | Local start, ISO with no offset, e.g. 2026-07-01T14:00:00 | |
| subject | Yes | ||
| location | No | ||
| timeZone | No | IANA timezone, e.g. Australia/Adelaide | |
| attendees | No | Attendee email addresses | |
| reminderMinutesBeforeStart | No | Minutes before start to remind (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility. It discloses timezone handling and default phone reminders, but omits other behaviors like invitation sending, success response, or authentication requirements. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are front-loaded with purpose and key behavioral notes. No redundant or extraneous information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, the description covers core behavior but lacks return value details, error states, and prerequisites (e.g., mailbox access). It is sufficient for basic use but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value beyond the schema: it clarifies that times are local wall-clock and that phone reminder is set by default. This supplements the parameter descriptions, though subject and location remain unexplained. Schema coverage is high, but description still enhances meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates an Outlook calendar event in the 'workshop@' mailbox. This verb+resource specification is precise and distinguishes it from siblings like update_event or create_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives (e.g., update_event for existing events, or find_events to search). It only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskB
Create a Microsoft To Do task in the "Burrows Ops" list (created on first use). Optional due date and reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | Yes | ||
| dueDate | No | YYYY-MM-DD or local ISO datetime | |
| listName | No | Override the default list name | |
| reminderDateTime | No | Local ISO datetime to remind |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose side effects and requirements. It mentions automatic list creation on first use, but omits details like authentication needs, return values, error conditions, or whether the task is immediately visible. The description is insufficient for full behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the core purpose, and wastes no words. Every phrase adds value: the action, resource, list name, list creation behavior, and optional parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description should cover behavior and results. It explains the list creation and optional fields but lacks details on return value (e.g., task ID), error handling, and post-creation state. Adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 60% of parameters with descriptions. The description adds value by specifying the default list name and stating that due date and reminder are optional, but it does not clarify the semantics of 'title' or 'body' parameters, which lack schema descriptions. Overall, it provides moderate complementary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and resource 'Microsoft To Do task', and specifies the target list 'Burrows Ops', which distinguishes it from sibling tools like create_event (events) and complete_task (completion). The phrase 'created on first use' adds context about list initialization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as find_tasks or complete_task. There is no mention of prerequisites, limitations, or scenarios where this tool is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventA
Delete a single calendar event by id. For deleting multiple events, confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It indicates a destructive action ('delete') but does not mention permissions, irreversibility, or side effects. The hint about confirming for multiple events adds some caution, but overall transparency is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action. No extraneous information; every word is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the basic action and provides a usage caveat for multiple events. However, it lacks details on permissions, eventId format, and confirmation expectations for single events, which would be beneficial for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning beyond the schema. It only says 'by id' without explaining the format or source of 'eventId'. This fails to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a single calendar event by id', specifying the verb, resource, and method of identification. This distinguishes it from sibling tools like create_event or complete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes guidance on when not to use this tool alone: 'For deleting multiple events, confirm with the user first.' It implies caution but does not explicitly state that this tool handles only single deletions or mention alternatives for batch deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_eventsA
List events between two datetimes (use this to resolve an event id before updating or deleting). start/end are ISO datetimes.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Window end, ISO datetime | |
| start | Yes | Window start, ISO datetime | |
| timeZone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It implies a read operation with 'list,' but does not explicitly state it is read-only, mention auth requirements, rate limits, or what happens if no events are found. This is a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core purpose ('List events between two datetimes') and includes a concise usage hint. Every word adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, no output schema), the description covers the basic purpose and provides a use case. However, it does not describe return values (event objects), handle the optional timeZone, or mention any limits, leaving the agent with some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description merely restates that start and end are ISO datetimes, which is already in the input schema descriptions. The optional timeZone parameter is not mentioned, and with 67% schema coverage, the description fails to add meaningful context beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists events between two datetimes, with a specific verb and resource. It also distinguishes from siblings by noting its use for resolving event IDs before updates or deletions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'use this to resolve an event id before updating or deleting.' This provides clear context for selecting this tool over alternatives like update_event or delete_event. However, it does not mention when not to use it, such as for listing all events without a date range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_tasksA
List tasks in the "Burrows Ops" list (use this to resolve a task id before completing it). Optional status filter: notStarted | inProgress | completed.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| listName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It indicates the tool is read-only and lists tasks from a specific list, but does not detail return format, pagination, or permissions. The hardcoded list name 'Burrows Ops' is a behavioral clue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a parenthetical, concise and front-loaded. However, the parenthetical could be clearer and the structure slightly muddled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description leaves gaps: it doesn't specify sorting, result limits, or what fields are returned. The presence of an undocumented 'listName' parameter further reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It partially documents the 'status' parameter with three possible values (notStarted, inProgress, completed) but does not mention the 'listName' parameter at all, which is confusing given the description implies a fixed list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'List tasks in the "Burrows Ops" list' with a specific verb and resource. Also clarifies its use for resolving a task id before completing, distinguishing it from sibling tools like complete_task and create_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this tool to resolve a task id before completing it, and mentions an optional status filter. However, it does not specify when not to use it or provide alternatives beyond the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventA
Update an existing calendar event by id. Only the fields you pass are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| body | No | ||
| start | No | ||
| eventId | Yes | ||
| subject | No | ||
| location | No | ||
| timeZone | No | ||
| reminderMinutesBeforeStart | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions partial update behavior but lacks details on error handling, side effects, or validation of event existence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no wasted words; front-loaded with action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description does not mention return value or confirmation. Lacks details on required parameters and error conditions for a mutation tool with 8 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description does not explain individual parameter formats (e.g., date strings, timezone) or required fields beyond eventId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'update', resource 'calendar event', and method 'by id'. It distinguishes from siblings like create_event and delete_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies partial update ('Only the fields you pass are changed'), but does not explicitly state when to use versus alternatives or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
complete_task - First observed
create_event - First observed
create_task - First observed
delete_event - First observed
find_events - First observed
find_tasks - First observed
update_event
TDQS
Tools are clearly split into calendar event and task domains, each with distinct verbs (create, find, update, delete for events; create, find, complete for tasks). No overlap or ambiguity.
All tool names use a consistent verb_noun pattern in snake_case (e.g., create_event, complete_task). The naming is predictable and follows a uniform style.
With 7 tools spanning two domains, the count is reasonable. It could include a few more (like update_task or delete_task), but the current set covers essential operations without being excessive.
Event tools provide full CRUD (create, find, update, delete). Task tools are missing update and delete operations, and lack an uncomplete action. This leaves gaps in task lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
GDPR-compliant calendar access for AI assistants. Google, Microsoft 365, Apple & more. EU-hosted.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConnects Claude with Microsoft Outlook through the Graph API, providing comprehensive email, calendar, folder management, and rules creation capabilities.19-
- AlicenseNot gradedqualityCmaintenanceConnects 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
- 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.-
- AlicenseBqualityBmaintenanceEnables interaction with Microsoft Outlook services (Tasks, Calendar, Email, Contacts, and Teams) via the Microsoft Graph API, providing 39 tools for Claude Desktop with natural language and JSON output.39MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/itscartmanbrah/calendar-mcp-task'
If you have feedback or need assistance with the MCP directory API, please join our Discord server