Name | google-docs-mcp JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | MCP server for Google Docs |
upload_time | 2025-08-29 15:37:38 |
maintainer | None |
docs_url | None |
author | Jag_k |
requires_python | >=3.13 |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Google Docs MCP
MCP server for Google Docs.
## Features
- Tools:
- `docs.read` — Read a Doc as Markdown or HTML
- `comments.list` — List comments and replies
- `comments.reply` — Reply to a comment (write gated)
- `comments.resolve` — Resolve a comment (write gated)
- `docs.insert_text` — Insert or append text (write gated)
- `docs.from_url` — Normalize a Docs/Drive URL to IDs
- `drive.export_file` — Export as PDF/DOCX/HTML
- Resources:
- `mcp://token-info` — Safe token diagnostics (no secrets)
- `gdoc-md://{document_id}` — Google Doc (Markdown)
- `gdoc-html://{document_id}` — Google Doc (HTML)
- Prompts:
- `comment_reply`, `summarize_doc`
## Quick Start
- Using CLI (recommended):
- Authorize: `uvx google-docs-mcp auth authorize [-f|--force]`
- Start server (default stdio): `uvx google-docs-mcp server [--transport stdio|http|sse|streamable-http]`
- Using local instance:
- Authorize: `uv run google_docs_mcp auth authorize`
- Start server: `uv run google_docs_mcp server`
## MCP Config (example)
Add to your MCP client configuration (installed CLI):
```toml
[mcp_servers.google_docs_mcp]
command = "uvx"
args = ["google-docs-mcp", "server"]
env = {
WRITE_MODE = "disabled",
GOOGLE__CLIENT_ID = "<id>",
GOOGLE__CLIENT_SECRET = "<secret>",
}
```
## OAuth Setup
1) Create OAuth Desktop client in Google Cloud Console.
2) Provide `GOOGLE__CLIENT_ID` and `GOOGLE__CLIENT_SECRET` as env vars, or put a client file in the config dir and set `GOOGLE__OAUTH_CLIENT_FILE`.
3) Run `google-docs-mcp auth authorize` (or `uv run -m google_docs_mcp.cli auth authorize`) and approve scopes.
## Write Safety
- Controlled via `WRITE_MODE` env var. Default is `enabled`. Set `disabled` to block any write tools.
## Configuration
- This repo provides an auto-generated `Configuration.md` and a starter `.env.example`. They are the source of truth for all env vars and defaults.
- Common variables:
- `WRITE_MODE`: `enabled` (default) or `disabled`
- `LOG_LEVEL`: `DEBUG` | `INFO` (default) | `WARNING` | `ERROR` | `CRITICAL`
- `GOOGLE__CLIENT_ID`, `GOOGLE__CLIENT_SECRET`, `GOOGLE__OAUTH_CLIENT_FILE`, `GOOGLE__SCOPES`
s
See `Configuration.md` for all environment variables and examples. A starter `.env.example` is provided.
## Notes
- Python 3.13, pydantic v2, ruff format, strict mypy.
- No tests by design; keep code small and documented.
## MCP Inspector
The MCP Inspector is a handy UI to explore and call tools.
Interactive setup (recommended):
- Start Inspector: `npx -y @modelcontextprotocol/inspector`
- In the connection dialog, set:
- Transport: `stdio`
- Command: `google-docs-mcp` (or `uv` for the alternative config above)
- Args: `server`
- Env (optional): add `WRITE_MODE=disabled` and your OAuth vars if not already stored
- Connect, then list tools and try `docs.from_url` and `docs.read`.
Tip: enable verbose logs with `LOG_LEVEL=DEBUG` in Env to diagnose issues.
Note on Drive permissions
- Some tools (comments and exports) call the Drive API. If you see a Drive 404 like "File not found" on an accessible Doc, re-authorize with Drive read-only scope:
- Ensure `GOOGLE__SCOPES` includes `https://www.googleapis.com/auth/drive.readonly`.
- Run `google-docs-mcp auth authorize` again to grant the new scope.
## Diagnostics
- Show token info (safe): `google-docs-mcp auth token-info`
- Revoke local token: `google-docs-mcp auth revoke`
## Security
- Required scopes: `https://www.googleapis.com/auth/documents` and `https://www.googleapis.com/auth/drive.readonly`.
- Secrets are never logged. The `mcp://token-info` resource exposes only safe metadata.
Raw data
{
"_id": null,
"home_page": null,
"name": "google-docs-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.13",
"maintainer_email": null,
"keywords": null,
"author": "Jag_k",
"author_email": "Jag_k <30597878+jag-k@users.noreply.github.com>",
"download_url": "https://files.pythonhosted.org/packages/80/c9/a4644712a519dc0b4e3a964c7ddb5516891218814cab1f9108576f2fcde7/google_docs_mcp-0.1.0.tar.gz",
"platform": null,
"description": "# Google Docs MCP\n\nMCP server for Google Docs.\n\n## Features\n\n- Tools:\n - `docs.read` \u2014 Read a Doc as Markdown or HTML\n - `comments.list` \u2014 List comments and replies\n - `comments.reply` \u2014 Reply to a comment (write gated)\n - `comments.resolve` \u2014 Resolve a comment (write gated)\n - `docs.insert_text` \u2014 Insert or append text (write gated)\n - `docs.from_url` \u2014 Normalize a Docs/Drive URL to IDs\n - `drive.export_file` \u2014 Export as PDF/DOCX/HTML\n- Resources:\n - `mcp://token-info` \u2014 Safe token diagnostics (no secrets)\n - `gdoc-md://{document_id}` \u2014 Google Doc (Markdown)\n - `gdoc-html://{document_id}` \u2014 Google Doc (HTML)\n- Prompts:\n - `comment_reply`, `summarize_doc`\n\n## Quick Start\n\n- Using CLI (recommended):\n - Authorize: `uvx google-docs-mcp auth authorize [-f|--force]`\n - Start server (default stdio): `uvx google-docs-mcp server [--transport stdio|http|sse|streamable-http]`\n- Using local instance:\n - Authorize: `uv run google_docs_mcp auth authorize`\n - Start server: `uv run google_docs_mcp server`\n\n## MCP Config (example)\n\nAdd to your MCP client configuration (installed CLI):\n\n```toml\n[mcp_servers.google_docs_mcp]\ncommand = \"uvx\"\nargs = [\"google-docs-mcp\", \"server\"]\nenv = {\n WRITE_MODE = \"disabled\",\n GOOGLE__CLIENT_ID = \"<id>\",\n GOOGLE__CLIENT_SECRET = \"<secret>\",\n}\n```\n\n## OAuth Setup\n\n1) Create OAuth Desktop client in Google Cloud Console.\n2) Provide `GOOGLE__CLIENT_ID` and `GOOGLE__CLIENT_SECRET` as env vars, or put a client file in the config dir and set `GOOGLE__OAUTH_CLIENT_FILE`.\n3) Run `google-docs-mcp auth authorize` (or `uv run -m google_docs_mcp.cli auth authorize`) and approve scopes.\n\n## Write Safety\n\n- Controlled via `WRITE_MODE` env var. Default is `enabled`. Set `disabled` to block any write tools.\n\n## Configuration\n\n- This repo provides an auto-generated `Configuration.md` and a starter `.env.example`. They are the source of truth for all env vars and defaults.\n- Common variables:\n - `WRITE_MODE`: `enabled` (default) or `disabled`\n - `LOG_LEVEL`: `DEBUG` | `INFO` (default) | `WARNING` | `ERROR` | `CRITICAL`\n - `GOOGLE__CLIENT_ID`, `GOOGLE__CLIENT_SECRET`, `GOOGLE__OAUTH_CLIENT_FILE`, `GOOGLE__SCOPES`\ns\nSee `Configuration.md` for all environment variables and examples. A starter `.env.example` is provided.\n\n## Notes\n\n- Python 3.13, pydantic v2, ruff format, strict mypy.\n- No tests by design; keep code small and documented.\n\n## MCP Inspector\n\nThe MCP Inspector is a handy UI to explore and call tools.\n\nInteractive setup (recommended):\n\n- Start Inspector: `npx -y @modelcontextprotocol/inspector`\n- In the connection dialog, set:\n - Transport: `stdio`\n - Command: `google-docs-mcp` (or `uv` for the alternative config above)\n - Args: `server`\n - Env (optional): add `WRITE_MODE=disabled` and your OAuth vars if not already stored\n- Connect, then list tools and try `docs.from_url` and `docs.read`.\n\nTip: enable verbose logs with `LOG_LEVEL=DEBUG` in Env to diagnose issues.\n\nNote on Drive permissions\n\n- Some tools (comments and exports) call the Drive API. If you see a Drive 404 like \"File not found\" on an accessible Doc, re-authorize with Drive read-only scope:\n - Ensure `GOOGLE__SCOPES` includes `https://www.googleapis.com/auth/drive.readonly`.\n - Run `google-docs-mcp auth authorize` again to grant the new scope.\n\n## Diagnostics\n\n- Show token info (safe): `google-docs-mcp auth token-info`\n- Revoke local token: `google-docs-mcp auth revoke`\n\n## Security\n\n- Required scopes: `https://www.googleapis.com/auth/documents` and `https://www.googleapis.com/auth/drive.readonly`.\n- Secrets are never logged. The `mcp://token-info` resource exposes only safe metadata.\n",
"bugtrack_url": null,
"license": null,
"summary": "MCP server for Google Docs",
"version": "0.1.0",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8c8b4342cb791e3759e367750db0da05ca9205a029f114b69e7d730cd6330ed1",
"md5": "1c1ef64e6ff569cca55d9b2d57031541",
"sha256": "8340ac352534d907c24e63434877c7968d1a38f09d4061761b4a19efd1f70e13"
},
"downloads": -1,
"filename": "google_docs_mcp-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1c1ef64e6ff569cca55d9b2d57031541",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.13",
"size": 18602,
"upload_time": "2025-08-29T15:37:36",
"upload_time_iso_8601": "2025-08-29T15:37:36.845218Z",
"url": "https://files.pythonhosted.org/packages/8c/8b/4342cb791e3759e367750db0da05ca9205a029f114b69e7d730cd6330ed1/google_docs_mcp-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "80c9a4644712a519dc0b4e3a964c7ddb5516891218814cab1f9108576f2fcde7",
"md5": "a8a2ad4d7b697009d3ef66f5c477297a",
"sha256": "9568415ca89720cbc498f5c9dfed7ca2fe82dc940b90a917600cd117be7fc912"
},
"downloads": -1,
"filename": "google_docs_mcp-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "a8a2ad4d7b697009d3ef66f5c477297a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.13",
"size": 14248,
"upload_time": "2025-08-29T15:37:38",
"upload_time_iso_8601": "2025-08-29T15:37:38.070050Z",
"url": "https://files.pythonhosted.org/packages/80/c9/a4644712a519dc0b4e3a964c7ddb5516891218814cab1f9108576f2fcde7/google_docs_mcp-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-29 15:37:38",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "google-docs-mcp"
}