Skip to main content

OutNote Logo

OutNote

Headless Microsoft 365 over Graph - mail, calendar, Teams, OneDrive, SharePoint, OneNote, To Do, Planner and Assignments, without an app registration.

visits Python 3.10+ Latest release MIT license Built on Entrance


What is OutNote?

Every "read my mailbox over Graph" tutorial makes you register an Azure app and get admin consent - which a locked-down tenant (a school, a company) simply refuses. OutNote sidesteps that entirely.

It signs in (via entrance) with the pre-consented OfficeHome first-party client, gets a FOCI family refresh token, and a broker trades it for whichever first-party client's token a given call needs - all without another sign-in, and each already consented in the tenant. One headless login (password + TOTP, no browser), then clean reads and writes across the whole account.

Features

  • 🔓 No app registration, no admin consent - rides pre-consented Microsoft first-party clients
  • 🤖 Fully headless - password + TOTP MFA over pure HTTP (or a browser fallback via entrance)
  • 💾 Log in once - the family refresh token is persisted (0600) and reused, so later runs skip the sign-in
  • 📬 Broad coverage - mail, calendar, Teams chats & channels, OneDrive, SharePoint, OneNote, To Do, Planner, Assignments
  • ✉️ Writes too - send mail, Teams messages (with @mentions), events, uploads, OneNote pages, tasks
  • 🧾 Text out - Teams/OneNote HTML to text, .docx/.pptx/.xlsx/.pdf extraction
  • ⚡ Robust - 429/5xx backoff, $batch, delta queries, nextLink paging
  • 🖥️ CLI - outnote --text chats --unread

Install

pip install outnote        # or: uv add outnote

Python 3.10+; ms-entrance is pulled in automatically. pip install "outnote[pdf]" adds PDF text extraction.

Quickstart

from outnote import authenticate

note = authenticate("you@school.ch", "password", totp_secret="JBSWY3DPEHPK3PXP")

note.emails(top=5, unread=True)
note.chats()
note.send_to("friend@school.ch", "on my way")
note.download(item_id)
note.search_emails("invoice")

Docs

  • Usage - sign-in, reading, writing, the CLI
  • Method reference - every method, its endpoint, and the caveats
  • FOCI clients - the client/scope map and how to re-probe your tenant

Disclaimer

OutNote is published for educational and research purposes only - to document how Microsoft 365's first-party OAuth2 clients and the Graph API behave for a browserless client.

Use it only against accounts you own, or with the explicit authorization of the account or tenant owner. You alone are responsible for your use of it and for complying with Microsoft's terms, your identity provider's terms, your institution's acceptable-use policy, and applicable law. The software is provided "as is", without warranty of any kind, and the author accepts no liability for misuse. Not affiliated with or endorsed by Microsoft.

License

MIT (c) PianoNic

Metadata

Release files for outnote 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for outnote 1.1.1
File Size Uploaded Provenance
outnote-1.1.1.tar.gz 26.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for outnote 1.1.1
File Interpreter ABI Platform
outnote-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 58.0 kB

Release files / outnote-1.1.1.tar.gz

Download URL outnote-1.1.1.tar.gz
Size 26.8 kB
Tags Source
SHA-256 checksum
How to use checksums
bc8554cee51d268f1db1f0259d8594810533ab8806b6aacac9b01d7a8315aa80
BLAKE2b-256 checksum
How to use checksums
86b79a0568bc78ce4e3ae50d44b2bb5ecd544518695ba6662276f78c0aba5642
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / outnote-1.1.1-py3-none-any.whl

Download URL outnote-1.1.1-py3-none-any.whl
Size 31.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf33a5d6887a7970c511b51a0ff82300e7c6dba440c6ed44a16ef64e0033399c
BLAKE2b-256 checksum
How to use checksums
b1e9cd0483846242c7ebdda0d8695d8b0799ac90da0697bee449eeb97409a485
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for outnote 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page