Reported issues for outlook-mcp
Pod holds 18 of 94 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to outlook-mcp.
Most discussed
v3.7.2 E2E test sweep — 48 findings across all 22 tools
Summary
Manual E2E sweep of every tool/action permutation in v3.7.2 against a live Personal Outlook.com account, run on 2026-05-05.
- Tools touched: 22 / 22
- Findings: 48 (F-1 through F-48)
- Account type: Personal Outlook.com (M365-only features marked skipped)
- Write safety: Self-only sends + cleanup; sentinel naming (
e2e-test-2026-05-05,[E2E v3.7.2]) - Cleanup status: ✅ All sentinels removed, mailbox state restored
Severity histogram
| Severity | Coun
Read the thread · 2026-05-05 · closed · 5 comments
search-emails: searchAllFolders=true silently drops kqlQuery and returns wrong results
Summary
The search-emails tool's searchAllFolders=true branch is unreliable in two ways:
kqlQueryis silently ignored. A KQL filter that should narrow results is dropped; the call returns a chronological dump of recent inbox messages with_Search strategy: combined-search_(a strategy line that lies about what was applied).queryreturns zero where withoutsearchAllFoldersit returns matches. The cross-folder branch sometimes finds strictly fewer results than the i
Read the thread · 2026-05-05 · open · 3 comments
Add JSDoc comments to exported functions in utils/graph-api.js
The utils/graph-api.js module is the core Graph API client used by every tool module, but its exported functions lack JSDoc documentation.
What to do:
- Add
@paramand@returnsJSDoc comments to all exported functions inutils/graph-api.js - Include brief descriptions of what each function does
- Document any important side effects (e.g., automatic token refresh)
Why this matters:
- Helps contributors understand the API surface without reading the full implementation
- Enables
Read the thread · 2026-03-09 · closed · 3 comments
v3.7.3 regression: F-24 fix incomplete — chokepoint misses JSON-stringified arrays from MCP transport
Summary
The post-tag commit 9b4373a ("fix(coerce): close v3.7.3 verification gaps (F-17, F-24)") claims to fix F-24 (array literals in string-typed params like to/cc/bcc), but the fix only catches the case where the value arrives as a real JS array. In practice, MCP clients (Claude Code's MCP harness, at minimum) JSON-stringify the array literal before transmission when the schema declares type: "string", so the chokepoint receives a string like '["nathanschram@live.com"]' (liter
Read the thread · 2026-05-05 · closed · 2 comments
Theme: tool outputs omit useful context (IDs, pagination, identity)
Tracking issue: #159 Severity: inefficiency Theme: Tools return human-readable output but skip details that callers (especially AI agents) need to drive subsequent operations
The pattern
A common failure mode: tool A creates a thing, tool B operates on it. If A doesn't return the ID, the caller has to make an extra `list` call (with potential ambiguity if names aren't unique). Or: a list returns 50 items with no pagination indicator, leaving the caller unsure whether more exis
Read the thread · 2026-05-05 · closed · 2 comments
Theme: param-shape mismatches — array/boolean/string schema-vs-handler drift
Tracking issue: #159 Severity: blocker (multiple sub-findings) Theme: Param shape mismatches across the entire tool surface
The pattern
Schema declares one type, handler reads another. Common variants:
- Schema says `type: 'array'` → MCP delivers a JSON-stringified array → handler iterates over the characters.
- Schema says `type: 'boolean'` → MCP delivers a string → handler does `=== true` and gets `false`.
- Schema says `type: 'string'` ("comma-separated") → caller
Read the thread · 2026-05-05 · closed · 2 comments
feat: publisher-verified shared multi-tenant app (one-click setup for read-only)
Summary
Register a publisher-verified shared multi-tenant Azure app owned by Little Bear Apps so end users can connect Outlook Assistant without each creating their own Azure app. The shared app is read-only by design; users who need write scopes (Mail.Send, Mail.ReadWrite, etc.) continue to use BYO mode via OUTLOOK_CLIENT_ID override.
One app covers both Microsoft 365 work/school accounts and personal Microsoft accounts (outlook.com, hotmail.com, live.com) via `signInAudi
Read the thread · 2026-04-20 · open · 2 comments
feat: add draft email tool (create, update, send, delete, reply, forward)
Summary
Add a consolidated draft tool to manage email drafts via the Microsoft Graph API. Follows the existing action-based routing pattern used by update-email, folders, manage-rules, etc.
Actions
| Action | Graph API | Description |
|---|---|---|
create |
POST me/messages |
Create new draft in Drafts folder |
update |
PATCH me/messages/{id} |
Update existing draft (subject, body, recipients, importance) |
send |
`POST me/messages/{id}/sen |
Read the thread · 2026-03-29 · closed · 2 comments
Most recent
docs: folders delete is recoverable (moves to Deleted Items), not "no recycle-bin recovery"
Summary
The folders tool's delete action is described as permanent:
action=
deletepermanently removes a folder (byfolderName/path orfolderId) and its contents — there is no recycle-bin recovery.
But on personal Outlook.com, deleting a mail folder actually moves it (and its contents) to Deleted Items, where it is recoverable — it is not an unrecoverable hard delete.
Observed during the v3.9.0 live E2E sweep: after folders delete folderName="e2e-v390-parent", t
Read the thread · 2026-07-22 · open · 0 comments
docs: raw searchExpression field-scoped $search returns 0 on personal Outlook.com
Summary
On personal Outlook.com accounts, a raw searchExpression (formerly kqlQuery) using field-scoped $search syntax — e.g. subject:"LinkedIn", from:github.com — often returns 0 results, even when matching messages clearly exist. The raw-$search branch intentionally does not fall back to the OData/client-side ladder (that's the #169 V37-F-1 fix that stopped it silently dropping the filter), so the user just sees "No emails found".
Surfaced during the v3.9.0 live E2
Read the thread · 2026-07-22 · open · 0 comments
feat: nested folder addressing (path syntax + folder IDs) for folders tool
Summary
The folders tool cannot address any non-top-level (nested) folder for move, stats, or delete. On work/school (Entra ID) accounts — where deep folder trees are the norm — this makes large parts of the mailbox unreachable.
Reported by @boz-tech on #159 (v3.8.1, Claude Desktop / Windows, work-school Entra ID account). Splitting into its own issue because #159 is the (now closed) v3.7.2 personal-account E2E sweep tracker; this is a distinct cross-cutting capability gap.
Read the thread · 2026-07-22 · closed · 0 comments
Security Audit: bump @modelcontextprotocol/sdk to clear transitive hono (high) + body-parser (low) advisories
Context
The required Security Audit CI gate (npm audit --omit=dev --audit-level=high) fails on main due to pre-existing, transitive advisories, not any first-party code:
hono(high) — via@modelcontextprotocol/sdk→@hono/node-server→hono@4.12.7. Advisories: serve-static path traversal on Windows (GHSA-wwfh-h76j-fc44), CORS wildcard-with-credentials (GHSA-88fw-hqm2-52qc), Lambda adapter cookie/header issues, body-limit bypass. All are HTTP-server issues; this s
Read the thread · 2026-07-21 · open · 0 comments
Device-code auth returns empty output on failure (reported via LinkedIn)
Report
A user ("Ben", Windows 11, Claude Cowork remote-connector session) reported that:
auth { action: "authenticate", method: "device-code" }"completes successfully but returns empty output" — no device code, no verification URL.- Follow-up
auth { action: "status" }still shows "Not authenticated."
Root cause
handleDeviceCodeAuth() called initiateDeviceCodeFlow() with no try/catch. When the HTTPS request to Microsoft throws (blocked outbound egress in a sandbo
Read the thread · 2026-07-21 · closed · 0 comments
docs: add docs/faq/index.md for help-centre FAQPage schema
Context
The littlebearapps.com help centre now emits Schema.org FAQPage
JSON-LD on any help article whose category: faq frontmatter is set,
or whose body contains ≥3 question-shaped H2s. The category exists in
the help collection schema, but no tool currently has a dedicated
FAQ article — synced or hand-written. This issue tracks creating
that scaffold for Outlook Assistant.
The marketing-site infrastructure (FAQPage extractor, author byline, heading anchors, per-tool `llms.tx
Read the thread · 2026-05-05 · open · 1 comment
Theme: README promises features that aren't fully delivered
Tracking issue: #159 Severity: docs (credibility) / bug Theme: README and tools-reference advertise features that are partial, broken, or missing
The pattern
The README leans hard on differentiator claims ("most Graph API wrappers fail silently; this one adapts", "forensic analysis built in as a first-class feature", "send-email protections", etc.). The E2E sweep found several of these are aspirational or partial.
Findings under this theme
🚨 F-12 — Progressive sea
Read the thread · 2026-05-05 · closed · 1 comment
Theme: schema-vs-docs param-name drift across tools
Tracking issue: #159 Severity: docs / inefficiency Theme: Param names are inconsistent across tools and not always discoverable
The pattern
Each tool was built with its own naming conventions. There's no shared vocabulary for:
- The identifier of the thing being managed (`id` vs `eventId` vs `ruleId` vs `categoryId` vs `sharedMailbox`)
- The display name (`name` vs `displayName`)
- The email of a contact / shared mailbox (`email` vs `emails` vs `sh
Read the thread · 2026-05-05 · closed · 1 comment
Theme: invalid actions silently fall through to default handler
Tracking issue: #159 Severity: bug (UX + correctness) Theme: Multi-action tools' switch statements default to `get`/`list` for unknown actions
The pattern
Every multi-action tool has:
```js switch (action) { case 'create': return handleCreate(args); case 'update': return handleUpdate(args); case 'delete': return handleDelete(args); case 'get': default: return handleGet(args); // ← swallows typos } ```
Calling `mailbox-settings action=set-auto-repl
Read the thread · 2026-05-05 · closed · 1 comment
Theme: PATCH-then-format silent failures across mutating tools
Tracking issue: #159 Severity: bug (data integrity) Theme: Tool reports "updated!" but Graph state didn't change
The pattern
Multiple tools follow this template:
- Read current state (GET).
- Build a partial settings object.
- PATCH it to Graph.
- GET fresh state.
- Format and return: "X updated!\n\n{formatted state}".
When step 3's PATCH is silently rejected by Graph (or the partial object has no effect), step 5 still returns "updated!" — but the formatted state s
Read the thread · 2026-05-05 · closed · 1 comment
The remaining reports are on the project's issue tracker.