# Connect

> Add Taskadence to Claude, Claude Code, Cursor, VS Code and other MCP clients — one URL, sign in with OAuth.

**What this is:** adding Taskadence to your AI client. **When you need it:** once per client — after that the client stays signed in.

> **Available at launch.** The hosted MCP server and the `npx`/`uvx` packages go live with the Taskadence launch. Until then they aren't reachable.

**Server URL — the same for every organization**

```text
https://api.taskadence.com/mcp
```

## Sign in

1.  **Authorize** — the client registers itself and sends you to Taskadence. Sign in and choose the organization.
2.  **Consent** — Taskadence names the client and lists the scopes it asks for. You approve once per client and organization.
3.  **Done** — the client holds a token and refreshes it itself. Nothing to paste.

Connect once: sign in, approve the scopes, done

| On the consent screen |  |
| --- | --- |
| The client | Marked as registered by itself and not reviewed by Taskadence — connect only if you started this from an app you trust. |
| Scopes | **Follow the URL’s groups** (below). Untick what the client should not do; a read stays ticked while its write is. |
| Organization | Named when you have one where you may connect, a picker when you have several. The connection acts in that one only. |
| Next time | The same client asking for no more than you approved goes straight through; asking for more shows the screen again. |

## Your client

**Claude**


In `Customize → Connectors → Add custom connector`:

```text
Name: Taskadence
URL:  https://api.taskadence.com/mcp
```

**Sign in:** Connect → you are sent to Taskadence to sign in and approve.

**Claude Desktop**


In `Customize → Connectors → Add custom connector`:

```text
Name: Taskadence
URL:  https://api.taskadence.com/mcp
```

**Sign in:** Connect → you are sent to Taskadence to sign in and approve.

Local package: `claude_desktop_config.json (Settings → Developer → Edit Config)`

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**Claude Code**


Run in a terminal:

```bash
claude mcp add --transport http taskadence "https://api.taskadence.com/mcp"
```

**Sign in:** Run /mcp in Claude Code, choose taskadence → Authenticate.

Local package

```bash
claude mcp add --env TASKADENCE_TOKEN=$TASKADENCE_TOKEN --transport stdio taskadence -- npx -y @taskadence/mcp
```

```bash
claude mcp add --env TASKADENCE_TOKEN=$TASKADENCE_TOKEN --transport stdio taskadence -- uvx taskadence-mcp
```

**Cursor**


Add to `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "taskadence": {
      "url": "https://api.taskadence.com/mcp"
    }
  }
}
```

**Sign in:** Cursor shows Needs login on the server → sign in to Taskadence.

Local package

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**VS Code**


Add to `.vscode/mcp.json`:

```json
{
  "servers": {
    "taskadence": {
      "type": "http",
      "url": "https://api.taskadence.com/mcp"
    }
  }
}
```

**Sign in:** Start the server → VS Code asks to sign in to Taskadence.

Local package

```json
{
  "servers": {
    "taskadence": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "servers": {
    "taskadence": {
      "type": "stdio",
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**GitHub Copilot**


Add to `.vscode/mcp.json`:

```json
{
  "servers": {
    "taskadence": {
      "type": "http",
      "url": "https://api.taskadence.com/mcp"
    }
  }
}
```

**Sign in:** Copilot Chat, agent mode: start the server → sign in to Taskadence.

Local package

```json
{
  "servers": {
    "taskadence": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "servers": {
    "taskadence": {
      "type": "stdio",
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**Codex**


Run in a terminal:

```bash
codex mcp add taskadence --url "https://api.taskadence.com/mcp"
codex mcp login taskadence
```

**Sign in:** The second line opens the Taskadence sign-in.

Local package

```bash
codex mcp add taskadence --env TASKADENCE_TOKEN=$TASKADENCE_TOKEN -- npx -y @taskadence/mcp
```

```bash
codex mcp add taskadence --env TASKADENCE_TOKEN=$TASKADENCE_TOKEN -- uvx taskadence-mcp
```

**Gemini CLI**


Run in a terminal:

```bash
gemini mcp add --transport http taskadence "https://api.taskadence.com/mcp"
```

**Sign in:** Run /mcp auth taskadence in Gemini CLI.

Local package

```bash
gemini mcp add -e TASKADENCE_TOKEN=$TASKADENCE_TOKEN taskadence npx -- -y @taskadence/mcp
```

```bash
gemini mcp add -e TASKADENCE_TOKEN=$TASKADENCE_TOKEN taskadence uvx -- taskadence-mcp
```

**Windsurf (Devin Desktop)**


Add to `~/.config/devin/mcp_config.json (Windows: %APPDATA%\devin\mcp_config.json)`:

```json
{
  "mcpServers": {
    "taskadence": {
      "serverUrl": "https://api.taskadence.com/mcp"
    }
  }
}
```

**Sign in:** Refresh the MCP servers → sign in to Taskadence.

Local package

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**Zed**


Add to `Zed settings.json`:

```json
{
  "context_servers": {
    "taskadence": {
      "url": "https://api.taskadence.com/mcp"
    }
  }
}
```

**Sign in:** Zed asks to authenticate the server → sign in to Taskadence.

Local package

```json
{
  "context_servers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "context_servers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**Other (URL)**


In `Your client's remote MCP server settings`:

```text
Transport: Streamable HTTP
URL:       https://api.taskadence.com/mcp
```

**Sign in:** An OAuth-capable client signs in by itself; any other sends Authorization: Bearer <token>.

**Other (stdio)**
Local package: `Your client's MCP configuration`

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

```json
{
  "mcpServers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

The server enforces two URL options: `?readonly=1` and `?groups=tasks,projects` — see [Security](https://docs.taskadence.com/mcp/security/).

| URL | Scopes the client asks for |
| --- | --- |
| `/mcp` | `tasks:read tasks:write projects:read projects:write teams:read teams:write members:read` |
| `/mcp?readonly=1` | `tasks:read projects:read teams:read members:read` |
| `/mcp?groups=tasks` | `tasks:read tasks:write teams:read members:read` |
| `/mcp?groups=tasks,admin` | the same, plus `admin` |

## Local packages

> **Available at launch.** The hosted MCP server and the `npx`/`uvx` packages go live with the Taskadence launch. Until then they aren't reachable.

`npx -y @taskadence/mcp` and `uvx taskadence-mcp` proxy the remote server over stdio — the same tools and enforcement — with an access token from [Developers → Tokens](https://taskadence.com/developers?dev=tokens).

**npx**


```json
{
  "mcpServers": {
    "taskadence": {
      "command": "npx",
      "args": ["-y", "@taskadence/mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

**uvx**


```json
{
  "mcpServers": {
    "taskadence": {
      "command": "uvx",
      "args": ["taskadence-mcp"],
      "env": {"TASKADENCE_TOKEN": "$TASKADENCE_TOKEN"}
    }
  }
}
```

| Variable | Flag |  |
| --- | --- | --- |
| `TASKADENCE_TOKEN` | — | Required: the access token (never a flag). |
| `TASKADENCE_API_URL` | `--api-url` | The API’s origin. Default: production; `/mcp` is added. |
| `TASKADENCE_MCP_READONLY` | `--readonly` | `1` → `?readonly=1`: only tools that read. |
| `TASKADENCE_MCP_GROUPS` | `--groups` | `tasks,projects` → `?groups=…`: only those tool groups. |

Flags win. Both are pre-release (`0.x`) and not yet on npm or PyPI.

## Generate it in the app

[Developers → MCP](https://taskadence.com/developers?dev=mcp) writes this for your client with **Read-only** and the **tool groups** built in, mints a token for the choice when one is needed, and has **Copy prompt**.

![](/_astro/developers-mcp-light.BG5Ig8oh_1NhbtK.webp)![](/_astro/developers-mcp-dark.BX_TYs69_1fA8E6.webp)

Developers → MCP

---
Source: https://docs.taskadence.com/mcp/connect/
