Skip to main content
This guide shows you how to connect an MCP client to your Plane workspace. You can ask questions and perform common tasks in plain English.

What is MCP?

The Model Context Protocol (MCP) is an open standard that lets an application call external tools in a consistent way. An app that connects to MCP servers is called an MCP client. Most AI assistants, such as Claude and ChatGPT, act as the MCP client here. Plane provides an MCP server that exposes a set of tools for your workspace, so your MCP client can look up your data on your behalf instead of you clicking through screens. You do not install anything. Plane’s MCP server is remote: you point your MCP client at one URL and sign in.

What is a connector?

A connector is how an MCP client registers an MCP server. Different clients name it differently. Claude calls it a connector, and ChatGPT calls it an app. Either way the setup is the same: you add Plane as a custom connector by entering its URL, the client handles sign-in, and then it discovers the tools Plane exposes.
Plane shows only the tasks available to your connection.
An accepted compensation can flow into payroll. Before you approve a compensations_create call, confirm the worker, earning type, amount, currency, unit, and effective date. Use a sandbox when testing this tool.

Prerequisites

  • A Plane account with admin or manager access to the workspace
  • An MCP client that supports remote HTTP MCP servers, such as Claude or ChatGPT
  • OAuth support in your client, or a Plane API key for the manual fallback
Keep API keys and access tokens secret. Do not paste credentials into public repositories, shared chat logs, client-side code, or anywhere people outside your organization can read them.

Endpoint

Point your MCP client at:
Most clients handle the rest automatically: they discover Plane’s authorization server and prompt you to sign in with your Plane credentials. You usually only need to provide the /mcp URL. A toolset is a second URL with its own permissions. An admin creates one from Developers > Toolsets, picks what it may read and write family by family, and sees the tools that grant exposes before saving. Its URL has this shape:
The toolset narrows discovery and execution to its permission grant. Use a toolset with compensations:write to expose compensations_create; the URL still requires normal Plane authentication, and a member never gets more through a toolset than their own role allows. Deleting a toolset revokes every client connected through it.

Connect your client

OAuth is the recommended way to connect. You add Plane as a connector, sign in through the browser, and the client receives a short-lived access token scoped to your Plane permissions. Pick your client below.
1

Open connectors

In Claude, click Customize, then Connectors.
2

Add a custom connector

Click the + button and choose Add custom connector (not Browse connectors). When prompted, enter a name such as Plane and set the remote MCP server URL to https://api.plane.com/mcp.
3

Sign in to Plane

Complete the Plane sign-in flow in the browser when Claude prompts you.
4

Use Plane in a chat

Start a new conversation, make sure the Plane connector is enabled, and try List the first 10 workers in Plane.
Claude calls workers_list and returns the result.
If your Claude Desktop build cannot complete the OAuth flow, use the manual API key fallback below.
Connect over OAuth only when you want the client to work with live workspace data. To experiment safely, use a sandbox API key with the manual fallback.

Try it

Once connected, start with prompts that read data:
  • List the workers we paid in May.
  • How much did we pay [contractor name] this year?
  • Show me the most recent payroll and what it totaled.
  • Which payments are still pending?
  • Pull a list of contractors hired in the last 90 days.
When connected through a compensation-enabled toolset, make the consequence and all pay details explicit:
  • Record a USD 2,500 commission for [worker name] in the pay period containing August 31, 2026, with the reason "Q3 sales commission".
If your connection uses a write-enabled toolset, inspect the leave request before you approve or decline it. For example: List requested leave, then approve lvr_123 with the reason "Coverage confirmed". The same applies to expense reports: review the report and its expenses before you approve or reject it. For example: Show me pending expense reports, then approve exr_123. Rejections require a reason.

What you can do today

When your client connects, Plane advertises the tools available to that connection. Each tool comes with its input schema, and your assistant calls it directly. You do not need to know tool names to ask questions. The catalog also includes feedback. Your assistant uses it to report an unmet request when no available tool can satisfy it. Underlying tool names follow {resource}_{action}, for example workers_list or payments_get. List tools accept pagination arguments: limit, cursor, starting_after, and ending_before. To review onboarding, first find the worker with workers_list. Then call projects_list with the worker ID and status: "all". Call projects_get with the project ID to see all tasks that you can read, including blocked and completed tasks. Without a status, projects_list returns active projects.

Manage offers

An MCP toolset with offers:write can create, update, send, resend, extend, and void offers. The authenticated member or API key must also have permission to manage offers. Offers must be enabled for the workspace. Use a toolset with offers:read and offers:write for the full workflow. The default /mcp connection is read-only. The built-in Plane Agent cannot execute these writes under its default grant. Offer writes do not have _request tools for approval proposals.

Draft and send

  1. Call offers_create with the recipient and proposed terms. The result is a draft, not a delivered offer.
  2. Call offers_get to review the draft.
  3. If the draft needs changes, call offers_update.
  4. Before delivery, confirm the recipient, role, start date, compensation options, benefits, and expiration with the user.
  5. Call offers_send with the draft ID.
Each compensation option can have an optional label, such as Option A or Option B, under terms.compensations. The accepted decision preserves these labels in its terms snapshot.
Sending an offer delivers an email to the recipient. Voiding an offer prevents acceptance and cannot be undone. Use a sandbox for tests of these tools.

Revise a sent offer

A sent offer cannot be edited with offers_update. Revision requires separate read, void, create, and send calls.
  1. Call offers_get with the original offer ID to read its recipient and terms.
  2. Confirm the revised terms and the reason for replacement with the user.
  3. Call offers_void with the original ID and the reason.
  4. Call offers_create with the original offer ID as template.
  5. Include the recipient and only the terms that changed.
  6. Call offers_get with the new draft ID to review the replacement.
  7. Call offers_send with the new draft ID.
The template copies the proposed terms, benefits, header, footer, and metadata. The supplied non-blank terms override the copied values. The template does not copy the recipient, status, expiration, delivery, or decision. The new draft has no stored link to the original offer. For example: Read offer ofr_123. Prepare a replacement with a November 15 start date and the same compensation options. Confirm the changes before you void the original or send the replacement.

Retries and delivery

  • Each offers_create call creates a new draft. After an uncertain result, use offers_list and offers_get to confirm the result before another create call.
  • A repeated offers_send call for an already sent offer returns it without another delivery email.
  • Each offers_resend call sends another email. Repeat it only when the user wants another delivery.
  • A repeated offers_update call with the same values leaves the draft in the same state. A repeated offers_extend call with the same future expiration leaves that expiration unchanged.
  • After an uncertain offers_void result, call offers_get to confirm the current status before the next step.

Manual API key fallback

Use an API key only when your client cannot complete OAuth, only supports static headers, or you are testing the endpoint directly. Create live API keys from Developers > API keys in Plane; see API access. For test keys, create a sandbox first and generate a key from inside it; see Your first API call. Send the key as a bearer token:

Claude Desktop config

On macOS, Claude Desktop stores local MCP configuration at ~/Library/Application Support/Claude/claude_desktop_config.json. Open Claude Desktop, go to Settings > Developer, and click Edit Config. Add Plane as an HTTP MCP server:
If the file already contains other servers, add the plane entry inside the existing mcpServers object rather than replacing the file. Fully quit and restart Claude Desktop to load the change.

Advanced: test the endpoint with curl

You can verify the endpoint without a full MCP client by sending a JSON-RPC request with an API key. List the available tools — the response advertises every tool available to your key, each with its input schema:
Then run a read-only tool by name:
The Plane result arrives in structuredContent as machine-readable JSON. Treat cursors as opaque: if the response includes a cursor, pass it back unchanged as the cursor argument to fetch the next page. When cursor is absent, you have reached the end of the list. To record compensation, call compensations_create directly through a toolset that grants compensations:write. This example records a one-time commission:
The response is the created compensation object. Its status is accepted when it flows straight into payroll, or pending when Plane must review it first. A regular compensation also requires unit, such as year or hour.

Troubleshooting

Confirm your client supports remote HTTP MCP servers with OAuth. Some clients only support local stdio servers or static API-key headers. If yours cannot complete OAuth, use the manual API key fallback.
Restart the client after adding the connector. If tools still don’t show, confirm the OAuth flow completed and that your account has access to the workspace.
Empty data arrays are normal in new or empty workspaces. Confirm your credential has access to the workspace you expect. If you are using an API key, verify it is from the right workspace (sandbox keys start with sk_test_, live keys with sk_live_).
MCP tools are limited by both the credential and the selected toolset. If a tool fails a permission check, confirm the toolset grants the resource permission and the underlying user or API key has access to it. Review the credential’s role in Members and roles.
Use a sandbox API key with the manual fallback. Create a sandbox from Developers > Sandboxes, generate a key inside it (prefix sk_test_), and configure your client with that key. See Your first API call.

Next steps

Using Plane Agent

Ask Plane Agent questions about your workspace directly inside Plane.

Your first API call

Make a direct API call without MCP, using cURL, Node.js, or Python.

Authentication

Review API-key authentication for the manual fallback.

API reference

Browse every endpoint and object the API exposes.