This release rebuilds how Google Slides decks are read: get_presentation now reads by action and get_page is gone. It also drops Python 3.10, publishes full docstring guidance in tool descriptions, and fixes Gmail charset decoding, Drive copy placement and two batch tools that hid what they did. Shoutout @georgebashi for the presentation love and new docstring approach.
Heads up: Python 3.11+ is now required. Slides callers using get_page or the include_speaker_notes / include_geometry / include_styles flags should move to get_presentation(action="page" | "markup").
What's Changed
- gslides:
get_presentationtakes anaction(deck,layouts,page,markup; defaultdeck, so bare calls still work).deckpages 100 slides at a time viaoffset,layoutscan narrow to a position withafter,pagelists every element ID with text and the speaker notes shape, andmarkupreturns compact JSON for one slide ortargets(raw=Truefor the Page resource).get_pageand theinclude_*flags are removed; per-slide reads are also smaller. feat(slides)!: get_presentation reads by action (deck, layouts, page, markup) by @georgebashi in #1392 - core: Drops Python 3.10 (
requires-python >=3.11, matched infastmcp.json,manifest.jsonand the README) and bumpsopentelemetry-apianddnspythonminimums to clear Dependabot alerts. drop python3.10, dependabot alerts by @taylorwilsdon in #1398 - core: Tool descriptions now carry a docstring's full guidance. FastMCP was cutting them off at the first
Important:/Actions:style heading, so rules likebatch_update_presentation'sinsertTexttargeting never reached the model. fix: publish docstring guidance in tool descriptions by @georgebashi in #1319 - gmail: Inline
format=fullbodies are decoded as UTF-8 before the declared charset again, fixing double-decoded text (e.g.KĂśszĂśnĂśmforKöszönöm) in read tools and quoted replies/forwards of legacy-charset mail. fix(gmail): decode inline format=full bodies as UTF-8 before the declared charset by @MrMarci666 in #1377 - gdrive:
copy_drive_filealways sends the target parent, so the default"root"lands copies in your My Drive instead of the source's folder (which 403'd for Shared Drive viewers). fix(drive): pass parents=["root"] in copy_drive_file by @TejasLamba2006 in #1395 - gdocs:
batch_update_docreportsReplaced N occurrence(s) of '<text>'for eachfind_replace, including 0 when nothing matched. fix(gdocs): report find_replace counts in batch_update_doc by @ConnorMoss02 in #1374 - gcontacts:
manage_contacts_batch(action="update")lists each skipped contact and why (not foundor no matching field in the update). fix(contacts): list skipped contacts in manage_contacts_batch update by @ConnorMoss02 in #1376 - gcalendar (tests): The year-9999 overflow test now uses an input that overflows under every pytz version, so it passes on pytz 2026.6. test(calendar): use an input that overflows under every pytz version by @123andy in #1378
New Contributors
- @MrMarci666 made their first contribution in #1377
- @TejasLamba2006 made their first contribution in #1395
Full Changelog: v2.4.2...v2.5.0