Skip to content

Graph MCP v0.8.1

Choose a tag to compare

@JustStas JustStas released this 03 Aug 14:28
· 12 commits to main since this release
a63136e

Ergonomics learned from using 0.7.0 on a real 325-message inbox, plus one outright bug fix. Tool count stays 125; every default request and response is unchanged when the new arguments are omitted.

Fixed. graph_list_mail always sent $orderby receivedDateTime desc, which Graph refuses to combine with a filter on from/, sender/, toRecipients/ or ccRecipients/ — so filtering mail by sender was a guaranteed 400. The sort is now dropped automatically for those filters, in graph_list_events too.

Added, uniformly across every domain.

  • compact on list and search tools, returning only identifying fields.
  • next_link and include_next_link on every list tool. This is the only way to page Teams chat and channel messages, which Graph pages with $skiptoken rather than $skip, so anything past the newest 50 messages in a busy chat was previously unreachable.
  • skip wherever Graph supports $skip.
  • folder on graph_search_mail, to scope a search to one folder.
  • body_type on graph_read_mail, graph_get_event and graph_list_events, for plain text instead of large HTML bodies.
  • immutable_ids on the mail read, list and search tools, because Graph message IDs change when a message moves.
  • filter_query on graph_list_events, and compact on graph_search_all.

Shared behaviour lives in one new module, src/tools/list-options.ts, so paging and projections cannot drift between domains.

Install now uses the GitHub plugin marketplace:

claude plugin marketplace add JustStas/Graph-MCP --scope user
claude plugin install graph-mcp@graph-mcp --scope user

Version 0.8.0 was tagged but never published: the version bump corrupted a transitive dependency range in the lockfile and npm ci failed with ETARGET. 0.8.1 restores it, bumps through targeted JSON edits, and adds validate:lockfile to npm run verify so this fails locally in future. See pull requests #19 and #20.