Skip to main content
Glama

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_event

Create a calendar event (local wall-clock time + timezone), with a phone reminder.

update_event

Change fields on an event by id.

delete_event

Delete one event by id.

find_events

List events in a window (resolve an id before update/delete).

create_task

Add a task to the "Burrows Ops" To Do list (due date + reminder optional).

complete_task

Mark a task complete.

find_tasks

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 centerIdentity → Applications → App registrations → New registration:

  1. Name: burrows-calendar-tasks-mcp

  2. Supported account types: Accounts in this organizational directory only (single tenant).

  3. Register. Copy the Application (client) ID and Directory (tenant) ID → these become GRAPH_CLIENT_ID / GRAPH_TENANT_ID.

  4. Authentication → Advanced settings → Allow public client flows → Yes. (Device-code flow needs this; no client secret is created.)

  5. API permissions → Add a permission → Microsoft Graph → Delegated permissions, add exactly:

    • Calendars.ReadWrite

    • Tasks.ReadWrite

    • offline_access

    • User.Read

  6. 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 install

3. Sign in once (mint the refresh token)

npm run login

Open 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 mailbox

Run / deploy

Locally, the MCP runs over stdio:

npm start

On the droplet, run it under pm2 like burrows-dashboard-api:

pm2 start src/server.js --name calendar-tasks-mcp --interpreter node
pm2 save

Register 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

GRAPH_CLIENT_ID / GRAPH_TENANT_ID

From the Entra app registration.

GRAPH_DEFAULT_TIMEZONE

IANA tz applied to events/tasks. Confirm the store's timezone.

GRAPH_DEFAULT_REMINDER_MINUTES

Default event reminder lead time (30).

GRAPH_TODO_LIST_NAME

To Do list for tasks (Burrows Ops).

GRAPH_TOKEN_STORE

postgres (default) or file (local dev).

PGUSER/PGPASSWORD/PGHOST/PGPORT/PGDATABASE

Token table (reuses burrows_jewellers).

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 tools
complete_taskA

Mark a Microsoft To Do task complete by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes
listNameNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesLocal end, ISO with no offset
bodyNoNotes / description
startYesLocal start, ISO with no offset, e.g. 2026-07-01T14:00:00
subjectYes
locationNo
timeZoneNoIANA timezone, e.g. Australia/Adelaide
attendeesNoAttendee email addresses
reminderMinutesBeforeStartNoMinutes before start to remind (default 30)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
titleYes
dueDateNoYYYY-MM-DD or local ISO datetime
listNameNoOverride the default list name
reminderDateTimeNoLocal ISO datetime to remind

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesWindow end, ISO datetime
startYesWindow start, ISO datetime
timeZoneNo

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
listNameNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
bodyNo
startNo
eventIdYes
subjectNo
locationNo
timeZoneNo
reminderMinutesBeforeStartNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv0.1.0
    • First observedcomplete_task
    • First observedcreate_event
    • First observedcreate_task
    • First observeddelete_event
    • First observedfind_events
    • First observedfind_tasks
    • First observedupdate_event

TDQS

A3.7/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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