Skip to content

Graph MCP v0.9.0

Choose a tag to compare

@JustStas JustStas released this 18 Aug 11:36
· 3 commits to main since this release
2ac27b9

0.9.0 - 2026-08-17

Added

  • graph_get_file_bytes downloads a file as base64-encoded bytes in a contentBytes field,
    capped at 4MB, the same shape graph_get_mail_attachment already used. graph_get_file_content
    only ever hands back a downloadUrl for a binary file, so a host without an HTTP fetch tool
    could not read a PDF at all.

Changed

  • graph_get_file_content, graph_get_file_bytes, graph_list_files, and graph_search_files
    take an optional drive_id, so they reach SharePoint document libraries and other people's
    OneDrive instead of only /me/drive. A Teams channel file or a shared attachment previously
    returned 404, because a driveItem ID only resolves under the drive that owns it.
  • graph_get_channel_files_folder, graph_list_shared_files, and graph_resolve_share_link
    now say how to carry parentReference.driveId into the file tools, and that Teams chat
    attachments never appear in sharedWithMe. The channel-folder description previously steered
    callers straight into the 404 above.
  • Removed docs/superpowers/ from version control and ignored it. Those six plan and design
    documents were point-in-time internal notes totalling 240KB, referenced by nothing in the
    build, tests, or runtime, and already contradicted by later releases. They remain in git
    history.
  • Install documentation now uses the GitHub marketplace for Codex as well as Claude Code.
    codex plugin marketplace add accepts owner/repo[@ref] and Git URLs, so requiring a local
    clone was never necessary; both host sections keep the local path as the plugin-development
    route. Verified by installing 0.8.1 into a clean CODEX_HOME from JustStas/Graph-MCP.
  • The Codex plugin manifest now states what the plugin can do beyond reading — send and delete
    mail, cancel meetings, edit and delete Teams messages, change presence and automatic replies,
    and create, move, and delete files — so the consent prompt is not misleading. The previous
    wording dated from the 44-tool release.
  • The bundled plugin README said "exactly 44 tools" and now says 126.

Fixed

  • graph_resolve_share_link and graph_get_file_content now really return a download URL.
    Graph drops @microsoft.graph.downloadUrl from any response that carries an explicit
    $select, and naming the annotation in that $select does not bring it back — the annotation
    hangs off the content stream property, so content.downloadUrl is what selects it.
    graph_get_file_content had asked for the annotation by name since 0.7.0, which means its
    binary branch returned downloadUrl: null for every PDF, image, and Office document it was
    ever pointed at, while still telling the caller to use that URL. Verified against a live
    tenant: both tools previously returned no URL, and both now return one.
  • The release helper now retries the post-publish registry readback six times with exponential
    backoff, capped at 30 seconds, instead of three times one second apart. npm's registry is
    eventually consistent, so a successful publish routinely became visible after the old
    three-second budget expired — the 0.8.1 release reported failure even though the package had
    published correctly, and 0.7.0 needed three attempts for the same reason.