Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TASKS_PROFILENoProfile name for multi-tenant use. Default is 'default'.default
TASKS_TENANT_IDNoOverride tenant ID for device code authority. Use for CI/power-user escape.
TASKS_ALLOW_WRITESNoSet to 'true' to enable write tools. Default is false.false
MS_TASKS_NO_PLANNERNoSet to 'true' to disable Planner and avoid admin consent. Default is false.false
MS_TASKS_TOKEN_STORENoToken storage backend: 'keyring', 'file', or 'encrypted-file'. Auto-detected by default.
MS_TASKS_PLANNER_BETANoSet to 'true' to use Microsoft Graph beta endpoints for Planner recurrence. Default is false.false
MS_TASKS_TOKEN_PASSPHRASENoPassphrase for encrypted-file token store when MS_TASKS_TOKEN_STORE is 'encrypted-file'.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
tasks_login_statusA

Return the current Microsoft 365 sign-in status for this profile. Three states: signed_in (a usable token exists, regardless of how it got there — CLI login, tasks_login_begin tool, even days ago), pending (a Device Code flow is in flight from a recent tasks_login_begin call; the response carries user_code + verification_url so the agent can re-display the prompt), or none (no token, no flow — the agent should call tasks_login_begin). Read-only: actively probes the token store + does at most one /me round-trip on a fresh signed_in to learn the UPN. AGENT_INSTRUCTIONS: When status='pending', present the verification code to the user inside a fenced code block (so it can be copied with one click) and present the verification URL as a plain markdown link on its own line. Do not paraphrase, do not embed the code inside prose, do not wrap the URL in bold. Same format as tasks_login_begin.

tasks_login_beginA

Drive the OAuth Device Code flow as an MCP tool. Returns immediately, non-blocking. Surfaces user_code + verification_url so the agent can show them; polls Microsoft Identity in the background until the user completes sign-in OR the device code expires (~15 min cap). The agent then polls tasks_login_status until it flips to signed_in (or to a terminal expired / failed). REQUIRED parameter account_type: pass 'personal' for outlook.com / hotmail.com / live.com / msn.com (Microsoft To Do works; Planner does NOT — requires a work/school M365 group), or 'work_or_school' for any Microsoft 365 tenant account incl. B2B guests (both To Do and Planner work). The choice determines which Microsoft Device Code landing page the user is sent to (https://www.microsoft.com/link vs https://login.microsoft.com/device) — there is no auto-detection before sign-in. If you don't know, ASK THE USER first. Calling without account_type returns a structured error explicitly instructing you to elicit the choice. Idempotent: a non-expired pending session for the profile is returned as-is unless force=True. force=True cancels the in-flight session and starts a fresh flow. Returns the session's public view: session_id, user_code, verification_url, verification_url_complete, expires_at, time_remaining_s, status, signed_in_user_upn, error. AGENT_INSTRUCTIONS: Present the verification code to the user inside a fenced code block (so it can be copied with one click) and present the verification URL as a plain markdown link on its own line. Do not paraphrase, do not embed the code inside prose, do not wrap the URL in bold. Example:

Code:
```
ABCD-1234
```

Sign-in URL: https://www.microsoft.com/link

Rationale: in a chat UI, a code inside a fenced block gets a one-click copy button; a bare URL becomes clickable; bold-wrapped links and inline codes do not.

todo_listsA

List the signed-in user's Microsoft To Do lists. Each list has id, display_name, is_owner, is_shared, well_known_list_name (e.g. 'defaultList' for the built-in Tasks list, 'flaggedEmails' for the Outlook flagged-mails list, or None for user-created lists), and etag. Read-only — does not modify anything. To list tasks within a list, pass the returned id to todo_tasks.

todo_list_getA

Fetch a single Microsoft To Do list by id. Same shape as an entry returned by todo_lists. Read-only.

todo_tasksA

List tasks in a Microsoft To Do list. Returns each task in the unified envelope: id, title, status (completed/not_completed), due_date, assignees (empty for To Do — per-user surface), web_url (None for To Do — no public deep-link), source (always 'todo'), etag (for write concurrency), list_id, body_preview, categories, importance, reminder_date, is_reminder_on, last_modified_date_time, created_date_time. status_filter defaults to 'all'; pass 'completed' or 'not_completed' to narrow.

todo_task_getA

Fetch one Microsoft To Do task by id within its list. Both list_id and task_id are required — Microsoft Graph has no global task-by-id endpoint for To Do. Returns the unified task envelope (same shape as items in todo_tasks). Read-only.

tasks_assigned_to_meA

Cross-source view: every Microsoft To Do task in the user's lists plus every Microsoft Planner task assigned to the user, merged into one list. Sorted by due_date ascending (None last). include_completed=False excludes completed tasks from both surfaces. Each entry is a unified task envelope tagged with source ('todo' or 'planner') and profile so the agent can route follow-up calls correctly. Optional profiles=[...] fans out across multiple signed-in tenants and merges; per-profile failures are best-effort skipped and listed in _skipped_profiles. Returns {'tasks': [...], '_skipped_profiles': [...]}. Read-only.

tasks_searchA

Case-insensitive substring search across the user's To Do tasks and Planner tasks. Matches against title and body_preview. source narrows to a single surface — 'all' (default), 'todo', or 'planner'. Returns up to limit matches in the unified envelope shape. Read-only. Note: implementation is client-side because neither surface exposes a server-side $search for tasks; performance is fine at typical task volumes (hundreds, not hundreds of thousands).

planner_plansA

List Microsoft Planner plans the signed-in user can see. Without group_id, enumerates the user's M365 groups via /me/memberOf (requires Group.Read.All admin-consent — already granted on the XMV-published OAuth app) and aggregates plans across them. With group_id, lists plans within that single group. Each plan has id, title, owner_group_id, created_date_time, etag. Read-only.

planner_plan_getA

Fetch one Microsoft Planner plan by id. Same shape as an entry returned by planner_plans. Read-only.

planner_bucketsA

List buckets (columns) within a Planner plan. Each bucket has id, name, plan_id, order_hint, etag. The order_hint follows Microsoft Graph's lexicographic ordering scheme (read-only — buckets ship pre-ordered as the user arranged them in Planner). Read-only.

planner_tasksA

List tasks within a Planner plan. Returns each task in the unified envelope: id, title, status (completed/not_completed — derived from percentComplete >= 100), due_date, assignees (list of M365 user-ids assigned to the task), web_url (deep-link to tasks.office.com built from the access token's tid claim), source ('planner'), etag, plan_id, bucket_id, priority, percent_complete, applied_categories, created_date_time, last_modified_date_time. Optionally narrow by bucket_id and status_filter ('all'/'completed'/'not_completed').

planner_task_getA

Fetch one Planner task by id. Returns the unified task envelope (same shape as items in planner_tasks). Pass include_details=True to additionally fetch the task's description, checklist, references, and preview_type (one extra Graph round-trip to /planner/tasks/{id}/details). Read-only.

tasks_changes_sinceA

Incremental diff of Microsoft Planner tasks since the last call. Polls Graph, compares against an on-disk cursor, and returns added, modified, removed envelopes plus cursor_advanced (bool). scope controls which tasks are polled — pass one of: {"kind": "plan", "plan_id": "..."} (all tasks in a plan), {"kind": "assigned_to_me"} (tasks assigned to the signed-in user), or {"kind": "registry"} (only tasks this MCP profile created — one GET per registry id). Each scope is tracked independently via a sha256 cursor key. First call → everything returned as added, cursor initialised. Subsequent calls return only tasks that appeared, changed (lastModifiedDateTime advanced), or disappeared since the previous poll. removed entries carry {"id": "...", "last_known_title": null} — the title is not available because the task is gone. Cursor file: ~/.cache/mcp-server-microsoft-tasks/<profile>/cursors.json, mode 0o600. Read-only on Graph; mutates only the local cursor file.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/XMV-Solutions-GmbH/microsoft-tasks-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server