Local MCP server for Google Drive with full permission management — read, write, share files with your Google account.
Project description
honest-drive-mcp
Local Google Drive MCP server with full permission management — the piece missing from the official connector.
Companion project to honest-gmail-mcp and honest-calendar-mcp.
Why
The official Anthropic Drive connector is competent for read + create, but has one big gap: it cannot set or modify sharing permissions. If you build a workflow like "create a folder for my accountant and share it with her", you hit a dead end — you have to jump into the Drive UI to do the sharing part manually.
This MCP fixes that. Same trust model as the rest of the honest-* family: data flows only between your machine and Google.
Features
Eight tools exposed over MCP:
list_files— search with Drive query syntaxget_file— full metadataread_file— download content (text/JSON returned as UTF-8; binaries as base64; Google-native docs auto-exported to plain text / CSV)create_file— upload from text or base64create_folder— new folder, optionally inside a parentshare_file— grant access to an email (reader/commenter/writer/owner), notification optional, custom message supported ← the piece missing elsewherelist_permissions— see who has access and with what roleremove_permission— revoke a specific permission by id
Requirements
- Python 3.10+
- A Google account
- One-time Google Cloud OAuth setup (~10 min; can reuse the client from honest-gmail-mcp — just enable the Drive API on the same project)
Setup
git clone https://github.com/bartosz-kuc/honest-drive-mcp.git
cd honest-drive-mcp
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
Google Cloud steps (same as honest-gmail-mcp):
- https://console.cloud.google.com/ → create or select project
- APIs & Services → Library → enable Google Drive API
- APIs & Services → Credentials → OAuth client ID → Desktop app → download JSON → save as
credentials.jsonhere
First run:
./venv/bin/python server.py
Browser opens → Allow → token saved to token.json. Ctrl+C.
Register with Claude Code:
claude mcp add drive-personal /absolute/path/to/venv/bin/python /absolute/path/to/server.py
Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"drive-personal": {
"command": "/absolute/path/to/venv/bin/python",
"args": ["/absolute/path/to/server.py"]
}
}
}
Example usage
"Create a folder called 'Faktury dla księgowej' in My Drive and share it with elwira@example.pl as writer."
AI calls create_folder → gets folder_id → calls share_file(file_id, "elwira@example.pl", role="writer"). Done in one shot. No context-switch to the Drive UI.
"Who has access to file X?"
AI calls list_permissions(file_id) → returns all permissions with ids you can pass to remove_permission later.
Data flow
Your AI client
↕ MCP stdio
This server (Python, on your machine)
↕ HTTPS
Google Drive API
No cloud middle. Tokens stay on disk, .gitignored.
Security notes
- OAuth scope requested:
drive(full read/write on all Drive files this account can access). Google does not offer a scope that includes permission management without also including read/write to files, which is why the scope is broad. send_notificationdefaults tofalse— AI will not spam recipients unless explicitly asked.role: "owner"transfers ownership — an irreversible action. The tool passestransferOwnership: trueautomatically when this role is requested; consider usingwriterunless you really mean to hand over the file.- Revoke access anytime at https://myaccount.google.com/permissions.
credentials.jsonandtoken.jsonare.gitignored.
Author
Bartosz Kuć — Warsaw-based developer, JDG owner running skanfirmy.pl.
-
Site: https://skanfirmy.pl
-
GitHub: https://github.com/bartosz-kuc
-
Email: firma@bartosza.pl
Consulting
Available for consulting on Polish tax and business integrations (KSeF, GUS/NFZ/GIOŚ APIs, mBank data), MCP server design, and AI-assisted tooling for JDGs and small teams. Reach out via email.
License
MIT — see LICENSE.
Related
- honest-gmail-mcp — local Gmail MCP
- honest-calendar-mcp — local Google Calendar MCP
- ksef-mcp — Polish KSeF (e-invoicing) MCP
- nip-krs-mcp — Polish company registry MCP
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file honest_drive_mcp-0.1.0.tar.gz.
File metadata
- Download URL: honest_drive_mcp-0.1.0.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
109a2a90d86a2c76ec1e97473beb62a46e61732d497fac88112c86154e8dc62a
|
|
| MD5 |
84efd7d6e7ed004e06c1c64fceb7a074
|
|
| BLAKE2b-256 |
771060ad009c8f6e4a4170555a3c9bacae9eed153c0d84482ba7abe329fc87f7
|
Provenance
The following attestation bundles were made for honest_drive_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on bartosz-kuc/honest-drive-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
honest_drive_mcp-0.1.0.tar.gz -
Subject digest:
109a2a90d86a2c76ec1e97473beb62a46e61732d497fac88112c86154e8dc62a - Sigstore transparency entry: 2218247929
- Sigstore integration time:
-
Permalink:
bartosz-kuc/honest-drive-mcp@88119097cac92f0cd51280fa6be6df130ce47c7b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bartosz-kuc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@88119097cac92f0cd51280fa6be6df130ce47c7b -
Trigger Event:
push
-
Statement type:
File details
Details for the file honest_drive_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: honest_drive_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1f2dceb8db00618217554ed792ff625b116ad793226796c7c3e640c0bccdfc0
|
|
| MD5 |
40168a6a374b6aeab386a30fae5ce11b
|
|
| BLAKE2b-256 |
0536b4f8046f29427c0842e478a90a6a6dd0c56f2bff916b68b86250a34bab6b
|
Provenance
The following attestation bundles were made for honest_drive_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on bartosz-kuc/honest-drive-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
honest_drive_mcp-0.1.0-py3-none-any.whl -
Subject digest:
b1f2dceb8db00618217554ed792ff625b116ad793226796c7c3e640c0bccdfc0 - Sigstore transparency entry: 2218247939
- Sigstore integration time:
-
Permalink:
bartosz-kuc/honest-drive-mcp@88119097cac92f0cd51280fa6be6df130ce47c7b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bartosz-kuc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@88119097cac92f0cd51280fa6be6df130ce47c7b -
Trigger Event:
push
-
Statement type: