Plane

oficial

O servidor MCP oficial do Plane fornece integração com as APIs do Plane, permitindo automação completa por IA de projetos, itens de trabalho, ciclos e muito mais do Plane.

O que você pode fazer com Plane MCP?

  • Criar itens de trabalho — Peça ao seu assistente para criar um item de trabalho em um projeto, especificando nome e outros detalhes por meio da ferramenta workitem.
  • Consultar itens de trabalho com PQL — Use a Plane Query Language para listar ou contar itens de trabalho filtrados por estado, prioridade ou responsável, por exemplo, .
  • Gerenciar ciclos — Arquivar ou atualizar ciclos em um projeto, como cycle(action="archive", project_id=..., cycle_id=...).
  • Acessar referência de sintaxe PQL — Solicite a ferramenta get_pql_reference para obter a sintaxe completa do PQL, operadores e exemplos práticos.

Documentação

Servidor MCP Plane

Um servidor Model Context Protocol para Plane. Fornece a um agente de IA ferramentas para ler e gerenciar projetos, itens de trabalho, ciclos, módulos, releases, clientes e muito mais.

Construído sobre FastMCP e o oficial plane-sdk.

  • 30 ferramentas, uma por recurso do Plane, cobrindo 207 operações
  • Local ou remoto — stdio, HTTP streamable, SSE
  • Autenticação OAuth ou chave de API

Início rápido

Obtenha uma chave de API do Plane: Configurações do Workspace → Tokens de API.

Adicione isto à configuração do seu cliente MCP:

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-mcp-server", "stdio"],
      "env": {
        "PLANE_API_KEY": "<your-api-key>",
        "PLANE_WORKSPACE_SLUG": "<your-workspace-slug>"
      }
    }
  }
}

uvx não requer etapa de instalação. Requer Python 3.10+.

Para um Plane auto-hospedado, adicione "PLANE_BASE_URL": "https://plane.example.com".

Transportes

stdio — local

Executa como um subprocesso do seu cliente MCP. Configuração conforme mostrado acima; requer PLANE_API_KEY e PLANE_WORKSPACE_SLUG.

PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... uvx plane-mcp-server stdio

HTTP com OAuth — hospedado

https://mcp.plane.so/http/mcp

O fluxo OAuth é tratado na conexão; nenhuma credencial na sua configuração. Para clientes sem suporte nativo a MCP remoto, faça a ponte com mcp-remote:

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
    }
  }
}

Requer Node.js 22+.

HTTP com token de acesso pessoal — hospedado

https://mcp.plane.so/http/api-key/mcp

CabeçalhoValor
AuthorizationBearer <PAT>
X-Workspace-slug<workspace-slug>
{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/api-key/mcp"],
      "headers": {
        "Authorization": "Bearer <PAT>",
        "X-Workspace-slug": "<workspace-slug>"
      }
    }
  }
}

SSE — obsoleto

https://mcp.plane.so/sse é mantido apenas para compatibilidade reversa. Use um transporte HTTP em vez disso.

Ferramentas

O servidor anuncia 30 ferramentas, uma por recurso. Cada uma aceita um parâmetro action que seleciona a operação:

workitem(action="create", project_id=..., name="Fix login")
workitem(action="list", project_id=..., pql='state__group = "started"')
cycle(action="archive", project_id=..., cycle_id=...)

A descrição de cada ferramenta lista suas ações com seus parâmetros obrigatórios e opcionais, então o catálogo é autodocumentado no momento da chamada.

→ Referência completa de ferramentas e ações

Consultando itens de trabalho

Listar, contar e pesquisar aceitam PQL, a linguagem de consulta do Plane:

workitem(action="list", project_id=..., pql='state__group = "started" AND priority = "urgent"')
workitem(action="count", pql='assignees__id = "<member id>"', group_by="state_id")

Chame get_pql_reference para a sintaxe completa, operadores e exemplos práticos.

Atualizando das ferramentas por operação

Versões anteriores expunham uma ferramenta por operação de API. Integrações existentes continuam funcionando: 169 desses 177 nomes ainda resolvem para a ferramenta consolidada, então um prompt salvo ou script chamando create_work_item ou list_cycles não precisa de alteração. Eles não são mais anunciados e mantêm os nomes de parâmetros com os quais foram lançados (work_item_id, não workitem_id).

Sete nomes escolhiam entre duas operações com um parâmetro (manage_project_archive(archive=False)), o que um único par ferramenta-ação não pode reproduzir; chamar um informa seu substituto. get_pql_reference está inalterado.

Configuração

Autenticação

VariávelObrigatória paraFinalidade
PLANE_API_KEYstdioChave de API
PLANE_WORKSPACE_SLUGstdioWorkspace de destino
PLANE_BASE_URLopcionalURL da API do Plane (padrão https://api.plane.so)

Os transportes remotos carregam credenciais na conexão — o fluxo OAuth ou os cabeçalhos PAT — e não precisam de nenhuma destas.

Auto-hospedando o próprio servidor:

VariávelFinalidade
PLANE_INTERNAL_BASE_URLURL interna para chamadas servidor-a-servidor, preferida sobre PLANE_BASE_URL
REDIS_URLArmazenamento de token OAuth como uma URL de conexão (redis:// ou rediss:// para TLS); tem precedência sobre host/porta
REDIS_HOST / REDIS_PORTArmazenamento de token OAuth; usa fallback para memória
PLANE_OAUTH_PROVIDER_*Credenciais do cliente OAuth e URL base
MCP_PATH_PREFIXPrefixo de caminho para as rotas HTTP, quando montado atrás de um proxy — /plane serve /plane/http/mcp

URIs de redirecionamento OAuth

Os transportes OAuth validam o URI de redirecionamento de cada cliente contra uma lista de permissões. Clientes comuns (Cursor, VS Code, Claude.ai, conectores ChatGPT, localhost) são permitidos por padrão.

Para integrar um novo cliente sem um release, acrescente padrões:

export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"

* corresponde a qualquer porta, segmento de caminho ou subdomínio. Mantenha o host fixo e use curinga apenas na porta ou caminho.

Registro de logs

JSON estruturado. Cada chamada de ferramenta registra seu nome, duração, status e — quando disponível — um ID de usuário opaco e o slug do workspace.

export LOG_USER_INFO=false    # also log the display name (PII);
export LOG_PAYLOADS=false    # keep request payloads out of logs; default true

Apenas os transportes OAuth e PAT carregam um nome de exibição; stdio não é afetado.

Desenvolvimento

git clone https://github.com/makeplane/plane-mcp-server
cd plane-mcp-server
uv pip install -e ".[dev]"

Execute o servidor contra um workspace:

PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... python -m plane_mcp stdio
python -m plane_mcp http            # port 8211

Testes, formatação, lint:

pytest                              # no network or credentials needed
ruff format plane_mcp/ tests/       # line length 120
ruff check plane_mcp/ tests/        # rules E, F, I, UP, B

A suíte roda totalmente offline — cada ação de cada recurso é executada contra um substituto que vincula cada chamada à assinatura genuína do plane-sdk. Veja plane_mcp/tools/README.md.

Testes de integração ao vivo são ignorados a menos que você os aponte para um servidor em execução:

export PLANE_TEST_API_KEY=... PLANE_TEST_WORKSPACE_SLUG=...
export PLANE_TEST_MCP_URL=http://localhost:8211    # optional; this is the default
pytest tests/test_integration.py -v

Eles gravam dados reais nesse workspace.

Estrutura do repositório

CaminhoConteúdo
plane_mcp/__main__.pyponto de entrada; escolhe o transporte a partir de argv[1]
plane_mcp/server.pyuma fábrica por transporte
plane_mcp/client.pyresolve credenciais em um cliente plane-sdk
plane_mcp/auth/provedor OAuth e autenticação por cabeçalho
plane_mcp/tools/a superfície de ferramentas: um módulo por recurso do Plane
plane_mcp/toolkit/blocos de construção compartilhados para a superfície de ferramentas
plane_mcp/pql_reference.pyreferência de sintaxe PQL servida aos modelos

Contribuindo

Pull requests são bem-vindos. Por favor, execute pytest e ruff check antes de enviar; novas ferramentas devem vir com os invariantes descritos em plane_mcp/tools/README.md.

Veja CONTRIBUTING.md e CODE_OF_CONDUCT.md.

Migrando do servidor Node.js

@makeplane/plane-mcp-server (Node.js) está obsoleto e sem manutenção. Esta implementação em Python o substitui.

Node.jsPython
PLANE_API_KEYPLANE_API_KEY
PLANE_API_HOST_URLPLANE_BASE_URL
PLANE_WORKSPACE_SLUGPLANE_WORKSPACE_SLUG

Substitua o command e o args pela configuração stdio em Início rápido.

Licença

MIT — veja LICENSE.