Skip to content

DocsToSheets Model Context Protocol (MCP) Server

The DocsToSheets MCP Server implements the Model Context Protocol. This allows AI assistants like ChatGPT and Claude to securely access, read, and write data to your spreadsheets on your behalf.

Rather than using public static API keys, the DocsToSheets remote MCP server uses standard OAuth 2.1 to authenticate and authorize LLM clients.


Connect your MCP client to the following endpoint:

SettingValue
MCP server endpointhttps://app.docstosheets.com/mcp
Protected-resource metadatahttps://app.docstosheets.com/.well-known/oauth-protected-resource/mcp
Authorization serverhttps://app.docstosheets.com
OAuth endpointsAuthorize /connect/authorize · Token /connect/token · Registration /connect/register (Dynamic Client Registration)
Scopesmcp.read, mcp.write

Clients that support OAuth 2.1 discovery (such as ChatGPT) only need the MCP server endpoint URL — they discover the authorization server, register a client via Dynamic Client Registration, and request scopes automatically.


OpenAI supports connecting remote MCP servers to ChatGPT as Apps using OAuth authentication.

How to Add the DocsToSheets App in ChatGPT

Section titled “How to Add the DocsToSheets App in ChatGPT”

To add DocsToSheets as an App in your ChatGPT workspace:

  1. Enable Developer Mode:
    • Open ChatGPT and navigate to Settings > Workspace Settings > Developer Mode.
    • Toggle Developer Mode on.
  2. Add the App:
    • Click Develop an App or Create App.
    • Choose MCP Server as the app type.
    • Provide the remote server endpoint URL:
      https://app.docstosheets.com/mcp
  3. OAuth Verification:
    • ChatGPT will perform a discovery request to fetch your server’s OAuth metadata at https://app.docstosheets.com/.well-known/oauth-protected-resource/mcp.
    • It will register itself dynamically via Dynamic Client Registration (DCR).
    • You will be prompted in a popup browser window to log into your DocsToSheets account and authorize ChatGPT.
  4. Active Tools:
    • Once authorized, ChatGPT will instantly gain access to the spreadsheet tools and display a workspace widget.

The simplest way to connect Claude is as a remote MCP connector over OAuth — the same flow ChatGPT uses, with no local installation required. Local STDIO options are also available for scripted setups.

  1. In Claude (Claude.ai or Claude Desktop), open your connector / integration settings and choose to add a custom connector.
  2. Enter the DocsToSheets MCP server endpoint:
    https://app.docstosheets.com/mcp
  3. Claude opens a browser window for you to log in to DocsToSheets and authorize access (OAuth 2.1).
  4. Once authorized, the DocsToSheets tools become available in your Claude conversations, including the interactive widgets (MCP Apps) rendered inline in the chat.

Note: Methods A and B below run the server locally over STDIO and require the @docstosheets CLI / server packages. If you don’t need a local setup, use the Remote Connector above.

Local desktop clients like Claude Desktop can also run MCP servers locally via claude_desktop_config.json (using standard input/output streams). You can connect using one of two methods:

Method A: Token Environment Variable (CLI/Scripts)

Section titled “Method A: Token Environment Variable (CLI/Scripts)”

For headless or scripted setups, you can mint MCP access tokens without a browser using an API app (paid plans): request POST /connect/token with grant_type=client_credentials, your dts_app_* client ID and secret, and scope=mcp.read mcp.write. The token acts on behalf of your whole workspace account and expires after about an hour.

Alternatively, generate a long-lived Access Token from your DocsToSheets dashboard and pass it directly to the local process:

  1. Open your Claude Desktop configuration:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Configure the local subprocess, injecting your access token:
{
"mcpServers": {
"docstosheets": {
"command": "npx",
"args": ["-y", "@docstosheets/mcp-server"],
"env": {
"DOCSTOSHEETS_ACCESS_TOKEN": "YOUR_OAUTH_ACCESS_TOKEN_HERE"
}
}
}
}
  1. Restart Claude Desktop.

If you need interactive authentication on your desktop:

  1. Install the DocsToSheets local CLI wrapper:
    Terminal window
    npm install -g @docstosheets/cli
  2. Run the login command to authenticate in your browser:
    Terminal window
    dts login
    This command opens a browser window to complete the OAuth flow and saves the tokens securely on your local system.
  3. Configure Claude Desktop to call the CLI proxy (which will pipe STDIO JSON-RPC streams to the remote server while injecting your stored OAuth credentials):
{
"mcpServers": {
"docstosheets": {
"command": "dts",
"args": ["mcp-proxy"]
}
}
}
  1. Restart Claude Desktop.

The DocsToSheets MCP server exposes the following tools to authorized clients:

Breaking change (2026-06): the mailbox configuration contract was redesigned. Configs are now a list of header fields plus optional repeating sections (groups) — the previous mode/columns/headerColumns/lineItemColumns arguments were removed from mailboxes_create and mailbox_config_update, and config responses use fields/groups. Update any saved prompts or integrations accordingly.

  • account_get_profile: Retrieves details about your current profile, connected email, plan type, and account slug (Read-only).
  • account_update_profile(slug, acceptTerms, acceptPrivacy): Updates your account’s public slug or accepts terms/privacy agreements (Requires mcp.write scope).
  • mailboxes_list: Lists all mailboxes you own or have access to, including their custom emails, configurations, and target spreadsheet connections (Read-only).
  • mailboxes_create(name, fields, groups, layout, ...): Creates a new mailbox and sets up its AI extraction config and layout. fields are document-level columns (each with an immutable key, a type, optional label/hint/required, and at most one validator); groups are repeating sections (each with an id, name, and its own fields) that produce one spreadsheet row per entry (Requires mcp.write scope).
  • mailboxes_update(mailboxId, name, isActive): Renames a mailbox or toggles its active/inactive status to temporarily pause document ingestion (Requires mcp.write scope).
  • mailbox_config_get(mailboxId): Retrieves the extraction config (fields, groups) and layout properties for a specific mailbox (Read-only).
  • mailbox_config_update(mailboxId, fields, groups, layout, ...): Modifies the extraction config. A field can have one validator: email, usZip, regex, or same-row formula. Note: after documents have been processed in the mailbox, structural edits (removing or retyping a field, changing a key, deleting a section) are blocked — adding fields, editing labels/hints, the validator, and layout updates stay permitted (Requires mcp.write scope).
  • mailboxes_delete(mailboxId): Permanently deletes a mailbox (Requires mcp.write scope).
  • mailbox_shares_list(mailboxId): Lists all users who currently have shared access to this mailbox (Requires mcp.write scope).
  • mailbox_shares_create(mailboxId, email): Shares access to this mailbox with another user’s email address (Requires mcp.write scope).
  • mailbox_shares_delete(mailboxId, shareId): Revokes a mailbox share and removes user access (Requires mcp.write scope).
  • authorized_senders_get(mailboxId): Lists the email addresses and domains currently authorized to send files to this mailbox (Read-only).
  • authorized_senders_update(mailboxId, customEmails): Overwrites the allowlist of email addresses permitted to submit documents (Requires mcp.write scope).
  • documents_list(mailboxId, page, pageSize): Lists all uploaded or ingested documents in a mailbox, showing their statuses, sizes, and timestamps (Read-only).
  • documents_delete(mailboxId, documentId): Deletes a processed document along with its extracted data and raw source file (Requires mcp.write scope).
  • extractions_list(mailboxId, page, pageSize): Lists row-level data fields that have been parsed from files in a mailbox (Read-only).

Removed: the former export_csv and extractions_delete tools no longer exist. Extraction rows are continuously synchronized to the mailbox’s export workbook (Google Sheets or Excel Online), and extracted data is deleted by deleting its document via documents_delete — documents and their extracted data are one-to-one.

  • search(query, limit): Search across all accessible mailboxes, documents, extraction rows, integrations, and system notifications.
  • fetch(id): Fetches details for a single resource by its global URI ID (e.g. mailbox:{id}, document:{id}, extraction:{id}, or integration:{provider}) (Read-only).
  • integrations_status: Lists every supported external integration provider (Google Drive, Microsoft OneDrive) with a status of connected, revoked, or notConnected (Read-only).

Several tools render interactive widgets directly in the conversation. Widgets work in ChatGPT (OpenAI Apps) and in any client that supports the MCP Apps extension, including Claude on web, desktop, and mobile.

  • render_docstosheets_workspace_widget(limit): Renders a visually formatted overview widget showing your active profile, plan type, and mailbox statistics directly in the conversation (Read-only).