Connect InnerSheet to your AI client

One server, every client. Desktop apps and CLIs launch InnerSheet locally over stdio; web chats reach it over HTTPS once you deploy it in remote mode.

InnerSheet speaks standard MCP over stdio, so any client that can launch a local process can use it. If your client can run a program, it works — the only difference between clients is where the configuration lives. Replace /path/to/innersheet in the snippets below with your real folder.

Compatibility at a glance

ClientConfig locationStatusNotes
Claude Desktopclaude_desktop_config.jsonSupportedmcpServers block; restart after editing
Claude Codeclaude mcp add / .mcp.jsonSupportedOne command; project file can be committed
Cursor.cursor/mcp.jsonSupportedSame JSON as Claude Desktop
Codex (OpenAI CLI)~/.codex/config.tomlSupported[mcp_servers.innersheet] table (snake_case)
VS Code + GitHub Copilot.mcp.json / .vscode/mcp.jsonSupportedAgent mode required; see the key-name warning below
Gemini CLI~/.gemini/settings.jsonSupportedgemini mcp add -s user
Windsurf · Cline · Zed · JetBrainsClient MCP settingsStandard MCPSame stdio command + env; see each client's MCP docs
ChatGPT (web)Plugins / Developer modeRemote onlyNeeds a public HTTPS endpoint — deploy in HTTP mode
Claude.ai (web)Settings → ConnectorsRemote onlyAdd custom connector with the server URL
MuseCustom connector flowRemote onlyNo URL field; connect the deployed server as a custom connector
Gemini (web app)Settings → Connected AppsUS-onlyCustom apps need a personal account, age 18+, US location, English
Client typeRuns onHow it reaches InnerSheet
Desktop apps and CLIsYour machineLaunches InnerSheet as a local process (stdio)
Web chatsThe cloudOnly a server at a public HTTPS address

That is why InnerSheet v2 ships a Streamable HTTP mode alongside the local one — the same code, a different transport, protected by an API key.

Used the installer? This entry is already in place (it uses uv run, see what the installer writes) — just restart Claude Desktop.

Add this to claude_desktop_config.json (Claude Desktop → Settings → Developer → Edit Config), then fully quit and restart Claude Desktop.

{
  "mcpServers": {
    "innersheet": {
      "command": "/path/to/innersheet/.venv/bin/python",
      "args": ["/path/to/innersheet/server.py"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS": "/path/to/client_secret.json"
      }
    }
  }
}

On macOS and Linux the Python path is .venv/bin/python. On Windows it is C:\innersheet\.venv\Scripts\python.exe — note the doubled backslashes inside JSON. If you installed with uv, you can also use uv as the command with ["run", "/path/to/innersheet/server.py"] as the arguments.

One command from your terminal. Export the environment variable first, or pass it with -e:

claude mcp add innersheet   -e GOOGLE_OAUTH_CLIENT_SECRETS=/path/to/client_secret.json   -- /path/to/innersheet/.venv/bin/python /path/to/innersheet/server.py
  • Check it with claude mcp list.
  • For a project the whole team shares, commit a .mcp.json file with the same mcpServers block as Claude Desktop — teammates only need their own client_secret.json.
  • InnerSheet also ships as a Claude Code plugin bundle (skill + hooks); see the Tools page for what the plugin adds.

Create .cursor/mcp.json in your project (or Cursor → Settings → MCP → Add):

{
  "mcpServers": {
    "innersheet": {
      "command": "/path/to/innersheet/.venv/bin/python",
      "args": ["/path/to/innersheet/server.py"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS": "/path/to/client_secret.json"
      }
    }
  }
}

Cursor also imports Claude Code hooks from ~/.claude/settings.json when Third-Party Imports is on (it is by default), so the InnerSheet safety hooks work in Cursor without extra configuration.

Add this to ~/.codex/config.toml (or run codex mcp add). Watch the table name — it is snake_case mcp_servers, not mcpServers; a typo means the section is silently ignored.

[mcp_servers.innersheet]
command = "/path/to/innersheet/.venv/bin/python"
args = ["/path/to/innersheet/server.py"]

[mcp_servers.innersheet.env]
GOOGLE_OAUTH_CLIENT_SECRETS = "/path/to/client_secret.json"

Verify with codex mcp list, then type /mcp inside Codex to see the server and its tools. A project can scope the same table in .codex/config.toml, which Codex only reads for trusted projects.

Preferred: the portable .mcp.json at the workspace root, which uses the top-level key mcpServers. The older .vscode/mcp.json uses servers instead — copying an entry between the two files without renaming the key is the most common silent failure.

{
  "mcpServers": {
    "innersheet": {
      "command": "/path/to/innersheet/.venv/bin/python",
      "args": ["/path/to/innersheet/server.py"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS": "/path/to/client_secret.json"
      }
    }
  }
}

Then switch Copilot Chat to Agent mode — MCP tools do not run in Ask mode. The Copilot CLI reads the same entry from ~/.copilot/mcp-config.json. If Copilot comes from an organisation, the "MCP servers in Copilot" policy must be enabled by an admin, and it is disabled by default.

One command (-s user makes it available everywhere), or edit ~/.gemini/settings.json by hand:

gemini mcp add -s user innersheet   -e GOOGLE_OAUTH_CLIENT_SECRETS=/path/to/client_secret.json   /path/to/innersheet/.venv/bin/python /path/to/innersheet/server.py

Restart gemini and run /mcp — InnerSheet should show as CONNECTED with its tools listed underneath. Note that Gemini CLI access for free and individual paid accounts moved to the Antigravity CLI in June 2026, so check which CLI your plan uses before setting this up.

Web chats: remote mode

ChatGPT, Claude.ai, the Gemini web app and Muse all run in the cloud, so none of them can launch a program on your computer. To use InnerSheet there:

  1. Deploy it as a remote server over Streamable HTTP — FastMCP supports the transport natively, so the same code serves both modes.
  2. Protect it with an API key.
  3. Add the public URL where the chat expects it:
Web chatWhere to add the URLRequirements
ChatGPTPlugins / Developer modePro plan and up
Claude.aiSettings → Connectors → Add custom connectorFree allows one custom connector
Gemini web appSettings → Connected Apps → Custom appsPersonal account, 18+, US, English, Keep Activity on
MuseCustom-connector flow—

Never expose it without authentication. A remote Sheets server holds your Google credentials: anyone with the URL could read and write your sheets. The security page covers remote deployment in detail.

Trust prompts and tool limits

Every client asks you to approve a new MCP server at least once:

That friction is deliberate: an MCP server runs with your privileges, so a client that silently loaded any server it found would be a security hole. InnerSheet's 24 tools are well inside the per-request tool caps clients enforce (VS Code, for example, allows 128 tools per request), so you won't hit a ceiling.

A tool doesn't appear after setup?

  1. Restart the client first — most clients only read MCP configuration at startup.
  2. Then check the command path in the config — a wrong Python path is the cause in nine cases out of ten.

Every other error, with its fix, is on the Troubleshooting page.