Skip to content

Releases: Agent-Pattern-Labs/gmail-mcp

v1.8.0

Choose a tag to compare

@CharGrnmn CharGrnmn released this 19 Apr 17:49

File-path attachment support + auto MIME-encoded Subject

Why

Previously, sending a Gmail message with a PDF attachment required inlining a base64url RFC-2822 blob in the raw tool-call argument. A typical CV at 125KB → ~230KB base64url, which blows past tool-call argument limits. Empirically this blocked every mailto-apply email-with-CV workflow (observed 2026-04-19 on CoPlane, Rinse, Gambit, DHS sends that had to bypass the MCP entirely and POST directly to the Gmail API).

What changed

  • create_draft and send_message both accept a new attachments: [{path, filename?, mimeType?}] parameter.
  • The server reads each file from disk and builds a multipart/mixed MIME message. Callers pass file paths — no base64 ever touches the tool-call argument boundary.
  • MIME type auto-detected from the file extension (pdf, docx, png, etc.); override via mimeType.
  • Filename defaults to the basename of the path; override via filename.
  • Subject header auto-MIME-encodes per RFC 2047 (=?UTF-8?B?...?=) when non-ASCII characters are present. Fixes em-dash / smart-quote mojibake observed in stored message headers.

Backwards compatibility

None broken. Existing callers using raw (pre-built base64url) or plain-text bodies without attachments behave identically.

Example

{
  "to": ["founders@example.com"],
  "subject": "Application — Charlie Greenman (Austin)",
  "body": "Pitch text here.",
  "attachments": [
    { "path": "/abs/path/to/Charlie-Greenman-CV.pdf" }
  ]
}

Release v1.8.0

Choose a tag to compare

@github-actions github-actions released this 19 Apr 17:49

Direct push to main

Release v1.7.9

Choose a tag to compare

@CharGrnmn CharGrnmn released this 15 Apr 21:51

fix: survive EADDRINUSE on Streamable HTTP listener startup

Previously, if PORT (default 3000) was already bound — typically by a zombie gmail-mcp from a prior session, or a second instance running in another project — app.listen(PORT) threw EADDRINUSE and crashed the process, taking stdio MCP down with it even though stdio doesn't need the port.

Now the HTTP listener attaches an error handler: on EADDRINUSE we log a warning and continue. Stdio MCP clients (Claude Desktop, opencode, etc.) keep working.

Also added a DISABLE_HTTP=true env var to skip the HTTP listener entirely for stdio-only consumers.

Release v1.7.8

Choose a tag to compare

@CharGrnmn CharGrnmn released this 13 Apr 03:46

Direct push to main

Release v1.7.7

Choose a tag to compare

@CharGrnmn CharGrnmn released this 13 Apr 03:27

Direct push to main

v1.7.6

Choose a tag to compare

@CharGrnmn CharGrnmn released this 13 Apr 03:06

What's Changed

  • Zero-setup auth: Embedded default OAuth credentials so users can run npx @razroo/gmail-mcp auth without setting up their own Google Cloud project
  • Better error messages: Clear, actionable instructions when credentials are missing
  • Fixed: OAuth client was silently created with empty credentials, producing a broken auth URL

v1.7.5

Choose a tag to compare

@CharGrnmn CharGrnmn released this 13 Apr 03:05

What's Changed

  • Zero-setup auth: Embedded default OAuth credentials so users can run npx @razroo/gmail-mcp auth without setting up their own Google Cloud project
  • Better error messages: Clear, actionable instructions when credentials are missing
  • Fixed: OAuth client was silently created with empty credentials, producing a broken auth URL

Release v1.7.4

Choose a tag to compare

@CharGrnmn CharGrnmn released this 12 Apr 08:36