[{"data":1,"prerenderedAt":533},["ShallowReactive",2],{"docs-navigation":3,"i-lucide:book-open":96,"i-lucide:history":100,"i-lucide:shield-check":102,"i-lucide:mail":104,"i-lucide:search":106,"i-lucide:moon":108,"i-lucide:sun":110,"i-lucide:menu":112,"i-lucide:chevron-down":114,"i-lucide:arrow-up-right":116,"i-simple-icons:github":118,"docs-\u002Fdocs\u002Fabout\u002Fcontributing":120,"docs-surround-\u002Fdocs\u002Fabout\u002Fcontributing":521,"i-lucide:arrow-left":525,"i-lucide:triangle-alert":527,"i-lucide:copy":529,"i-lucide:hash":531},[4],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fdocs","docs\u002F1.index",[9,10,28,45,66,79],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"page":27},"Install","\u002Fdocs\u002Finstall","docs\u002F2.install",[15,19,23],{"title":16,"path":17,"stem":18},"Install with the installer","\u002Fdocs\u002Finstall\u002Finstaller","docs\u002F2.install\u002F1.installer",{"title":20,"path":21,"stem":22},"Install from source","\u002Fdocs\u002Finstall\u002Ffrom-source","docs\u002F2.install\u002F2.from-source",{"title":24,"path":25,"stem":26},"Register with Claude","\u002Fdocs\u002Finstall\u002Fclaude-clients","docs\u002F2.install\u002F3.claude-clients",false,{"title":29,"path":30,"stem":31,"children":32,"page":27},"Providers","\u002Fdocs\u002Fproviders","docs\u002F3.providers",[33,37,41],{"title":34,"path":35,"stem":36},"Outlook.com","\u002Fdocs\u002Fproviders\u002Foutlook","docs\u002F3.providers\u002F1.outlook",{"title":38,"path":39,"stem":40},"Gmail, Fastmail, iCloud and any IMAP server","\u002Fdocs\u002Fproviders\u002Fother-providers","docs\u002F3.providers\u002F2.other-providers",{"title":42,"path":43,"stem":44},"Overriding provider endpoints","\u002Fdocs\u002Fproviders\u002Fendpoint-overrides","docs\u002F3.providers\u002F3.endpoint-overrides",{"title":46,"path":47,"stem":48,"children":49,"page":27},"Reference","\u002Fdocs\u002Freference","docs\u002F4.reference",[50,54,58,62],{"title":51,"path":52,"stem":53},"Tools","\u002Fdocs\u002Freference\u002Ftools","docs\u002F4.reference\u002F1.tools",{"title":55,"path":56,"stem":57},"Configuration","\u002Fdocs\u002Freference\u002Fconfiguration","docs\u002F4.reference\u002F2.configuration",{"title":59,"path":60,"stem":61},"CLI","\u002Fdocs\u002Freference\u002Fcli","docs\u002F4.reference\u002F3.cli",{"title":63,"path":64,"stem":65},"Permissions","\u002Fdocs\u002Freference\u002Fpermissions","docs\u002F4.reference\u002F4.permissions",{"title":67,"path":68,"stem":69,"children":70,"page":27},"Guides","\u002Fdocs\u002Fguides","docs\u002F5.guides",[71,75],{"title":72,"path":73,"stem":74},"The settings window","\u002Fdocs\u002Fguides\u002Fsettings-window","docs\u002F5.guides\u002F1.settings-window",{"title":76,"path":77,"stem":78},"Troubleshooting","\u002Fdocs\u002Fguides\u002Ftroubleshooting","docs\u002F5.guides\u002F2.troubleshooting",{"title":80,"path":81,"stem":82,"children":83,"page":27},"About","\u002Fdocs\u002Fabout","docs\u002F6.about",[84,88,92],{"title":85,"path":86,"stem":87},"Notes and limits","\u002Fdocs\u002Fabout\u002Flimits","docs\u002F6.about\u002F1.limits",{"title":89,"path":90,"stem":91},"Architecture","\u002Fdocs\u002Fabout\u002Farchitecture","docs\u002F6.about\u002F2.architecture",{"title":93,"path":94,"stem":95},"Contributing","\u002Fdocs\u002Fabout\u002Fcontributing","docs\u002F6.about\u002F3.contributing",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":99},0,24,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":101},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\"\u002F>\u003Cpath d=\"M3 3v5h5m4-1v5l4 2\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":103},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"\u002F>\u003Cpath d=\"m9 12l2 2l4-4\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":105},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":107},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":109},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":111},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":113},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":115},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":117},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":119},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"id":121,"title":93,"body":122,"description":514,"extension":515,"icon":516,"meta":517,"navTitle":93,"navigation":518,"path":94,"seo":519,"stem":95,"__hash__":520},"docs\u002Fdocs\u002F6.about\u002F3.contributing.md",{"type":123,"value":124,"toc":503},"minimark",[125,129,141,146,175,178,221,224,228,244,255,265,269,288,343,363,404,408,411,490,499],[126,127,93],"h1",{"id":128},"contributing",[130,131,132,133,140],"p",{},"The repo is at\n",[134,135,139],"a",{"href":136,"rel":137},"https:\u002F\u002Fgithub.com\u002Fbgalmes\u002Frubit-mcp-mail",[138],"nofollow","github.com\u002Fbgalmes\u002Frubit-mcp-mail",".",[142,143,145],"h2",{"id":144},"development","Development",[147,148,153],"pre",{"className":149,"code":150,"language":151,"meta":152,"style":152},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",".\u002F.venv\u002Fbin\u002Fpython -m pytest -q\n","bash","",[154,155,156],"code",{"__ignoreMap":152},[157,158,161,165,169,172],"span",{"class":159,"line":160},"line",1,[157,162,164],{"class":163},"sBMFI",".\u002F.venv\u002Fbin\u002Fpython",[157,166,168],{"class":167},"sfazB"," -m",[157,170,171],{"class":167}," pytest",[157,173,174],{"class":167}," -q\n",[130,176,177],{},"The full set of checks CI runs:",[147,179,181],{"className":149,"code":180,"language":151,"meta":152,"style":152},"ruff check .\nruff format --check .\npyright\npytest -q\n",[154,182,183,194,207,213],{"__ignoreMap":152},[157,184,185,188,191],{"class":159,"line":160},[157,186,187],{"class":163},"ruff",[157,189,190],{"class":167}," check",[157,192,193],{"class":167}," .\n",[157,195,197,199,202,205],{"class":159,"line":196},2,[157,198,187],{"class":163},[157,200,201],{"class":167}," format",[157,203,204],{"class":167}," --check",[157,206,193],{"class":167},[157,208,210],{"class":159,"line":209},3,[157,211,212],{"class":163},"pyright\n",[157,214,216,219],{"class":159,"line":215},4,[157,217,218],{"class":163},"pytest",[157,220,174],{"class":167},[130,222,223],{},"CI runs the suite on Python 3.11, 3.12 and 3.13 on Ubuntu, plus a Windows-only\npytest job.",[142,225,227],{"id":226},"building-the-installers","Building the installers",[130,229,230,231,234,235,239,240,243],{},"The published installers are built by\n",[154,232,233],{},".github\u002Fworkflows\u002Fbuild-installers.yml",", on Ubuntu and Windows runners. It\nbuilds twice with PyInstaller: first the console binary (the MCP server), then\na windowed binary that ",[236,237,238],"strong",{},"embeds the first one"," via ",[154,241,242],{},"--add-binary",". That second\nfile is the installer you download.",[130,245,246,247,250,251,254],{},"Both builds are smoke-tested before upload — ",[154,248,249],{},"--help",", a real MCP stdio\n",[154,252,253],{},"initialize"," handshake, and on Linux an Xvfb window check.",[130,256,257,258,261,262,140],{},"You need the ",[154,259,260],{},"build"," extra: ",[154,263,264],{},"pip install -e \".[dev,build]\"",[142,266,268],{"id":267},"commit-messages","Commit messages",[130,270,271,272,275,276,281,282,287],{},"Commits on ",[154,273,274],{},"main"," drive automatic versioning via\n",[134,277,280],{"href":278,"rel":279},"https:\u002F\u002Fpython-semantic-release.readthedocs.io\u002F",[138],"python-semantic-release",", so\nthey must follow ",[134,283,286],{"href":284,"rel":285},"https:\u002F\u002Fwww.conventionalcommits.org\u002F",[138],"Conventional Commits",":",[289,290,291,304],"table",{},[292,293,294],"thead",{},[295,296,297,301],"tr",{},[298,299,300],"th",{},"Prefix",[298,302,303],{},"Effect on version",[305,306,307,318,328],"tbody",{},[295,308,309,315],{},[310,311,312],"td",{},[154,313,314],{},"fix:",[310,316,317],{},"patch",[295,319,320,325],{},[310,321,322],{},[154,323,324],{},"feat:",[310,326,327],{},"minor",[295,329,330,340],{},[310,331,332,335,336,339],{},[154,333,334],{},"BREAKING CHANGE:"," in the footer, or ",[154,337,338],{},"!"," after the type",[310,341,342],{},"major",[130,344,345,346,349,350,349,353,349,356,349,359,362],{},"Other types (",[154,347,348],{},"docs:",", ",[154,351,352],{},"refactor:",[154,354,355],{},"test:",[154,357,358],{},"chore:",[154,360,361],{},"ci:",") don't trigger a\nrelease.",[364,365,368,375],"callout",{"color":366,"icon":367},"warning","i-lucide-triangle-alert",[130,369,370,371,374],{},"PRs are squash-merged, so the ",[236,372,373],{},"squash commit message"," is what the release\ntooling parses — not the individual commits on the branch.",[130,376,377,385,386,390,391,394,395,349,398,382,401,140],{},[236,378,379,380,382,383,140],{},"Website changes must not use ",[154,381,324],{}," or ",[154,384,314],{}," The parser keys on the\n",[387,388,389],"em",{},"type",", not the scope, so ",[154,392,393],{},"feat(site): ..."," would bump the Python package and\ncut a new installer release. Use ",[154,396,397],{},"docs(site):",[154,399,400],{},"chore(site):",[154,402,403],{},"ci(site):",[142,405,407],{"id":406},"how-a-release-happens","How a release happens",[130,409,410],{},"Four steps, one of them deliberately manual:",[412,413,415,420,438,442,453,457,473,477],"steps",{"level":414},"3",[416,417,419],"h3",{"id":418},"every-merge-to-main-prepares-a-release","Every merge to main prepares a release",[130,421,422,425,426,429,430,433,434,437],{},[154,423,424],{},"auto-release.yml"," runs python-semantic-release, force-pushes a ",[154,427,428],{},"release\u002Fnext","\nbranch, and opens a PR carrying only the ",[154,431,432],{},"pyproject.toml"," + ",[154,435,436],{},"CHANGELOG.md"," diff.",[416,439,441],{"id":440},"a-maintainer-merges-that-pr","A maintainer merges that PR",[130,443,444,445,448,449,452],{},"By hand. This is load-bearing: GitHub raises no events for actions taken by\n",[154,446,447],{},"GITHUB_TOKEN",", so a bot-merged release PR would fire no ",[154,450,451],{},"push"," event\nand nothing downstream would run. A human merge is a real event.",[416,454,456],{"id":455},"the-release-is-published","The release is published",[130,458,459,462,463,465,466,469,470,472],{},[154,460,461],{},"publish-release.yml"," tags the merge commit, extracts the notes from\n",[154,464,436],{},", and creates the GitHub release — a prerelease for a ",[154,467,468],{},"-rc.N","\nversion, a final release otherwise. It then calls the installer build directly,\nfor the same ",[154,471,447],{}," reason.",[416,474,476],{"id":475},"promoting-to-stable","Promoting to stable",[130,478,479,482,483,485,486,489],{},[154,480,481],{},"promote-release.yml"," is dispatched manually. It drops the ",[154,484,468],{}," suffix via a\n",[154,487,488],{},"release\u002Fpromote"," branch and the same publish path.",[130,491,492,493,495,496,498],{},"The ",[154,494,428],{}," and ",[154,497,488],{}," branches belong to the release bot —\nnever branch off them or commit to them by hand.",[500,501,502],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":152,"searchDepth":196,"depth":209,"links":504},[505,506,507,508],{"id":144,"depth":196,"text":145},{"id":226,"depth":196,"text":227},{"id":267,"depth":196,"text":268},{"id":406,"depth":196,"text":407,"children":509},[510,511,512,513],{"id":418,"depth":209,"text":419},{"id":440,"depth":209,"text":441},{"id":455,"depth":209,"text":456},{"id":475,"depth":209,"text":476},"Dev setup, the checks CI runs, commit conventions and how releases are cut.","md","i-lucide-git-pull-request",{},true,{"title":93,"description":514},"0F6Wnd_9IiJHLlAi8h6MhfUqjywb0rQWRmSBL_2MNxY",[522,524],{"title":89,"path":90,"stem":91,"description":523,"children":-1},"A file-by-file map of the source tree.",null,{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":526},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":528},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\"\u002F>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":530},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fg>",{"left":97,"top":97,"width":98,"height":98,"rotate":97,"vFlip":27,"hFlip":27,"body":532},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 9h16M4 15h16M10 3L8 21m8-18l-2 18\"\u002F>",1789573342689]