Google Sheets Kanban MCP Server
Enables task management and Kanban board tracking using Google Sheets as a database via the Model Context Protocol. It supports advanced filtering, batch operations, and full lifecycle management of project tasks within a spreadsheet.
README
MCP Server - Google Sheets Kanban
Servidor MCP (Model Context Protocol) para gerenciamento de tarefas em um quadro Kanban utilizando Google Sheets como backend.
Características
- Integração com Google Sheets: Usa Google Sheets API v4 para armazenamento de dados
- Modelos Pydantic: Validação de dados com Pydantic v2
- Operações em Lote: Suporte para adicionar e atualizar múltiplas tarefas de uma vez
- Busca Avançada: Filtros por prioridade, status, contexto, projeto e texto
- Paginação: Suporte completo para navegação paginada de resultados
- Protocolo MCP: Compatível com clientes MCP via STDIO
Configuração
Claude
Executar o seguinte comando na pasta do projeto:
claude mcp add --transport stdio kanban-sheets -- uv run -- --directory "caminho\projeto\sua\maquina" python main.py
Ferramentas Disponíveis
1. get_one_task - Buscar Tarefa Específica
Busca uma tarefa específica pelo ID da tarefa e nome do projeto.
Parâmetros:
project(obrigatório): Nome do projetotask_id(obrigatório): ID único da tarefa
Exemplo:
{
"project": "MCP Server Sheets",
"task_id": "TASK-001"
}
Retorno (sucesso):
{
"Projeto": "MCP Server Sheets",
"Task ID": "TASK-001",
"Task ID Root": "TASK-001",
"Sprint": "Sprint 1",
"Contexto": "Backend",
"Descrição": "Implementar busca avançada",
"Detalhado": "Adicionar filtros por prioridade, status e contexto",
"Prioridade": "Alta",
"Status": "Em Desenvolvimento",
"Data Criação": "2025-10-24 10:30:00",
"Data Solução": ""
}
Retorno (não encontrada):
{
"error": "Tarefa 'TASK-999' não encontrada no projeto 'MCP Server'"
}
2. list_tasks - Listar e Buscar Tarefas
Lista e busca tarefas da planilha com filtros avançados e paginação opcional.
Parâmetros:
filters(opcional): Objeto com critérios de buscaprioridade: Lista de prioridades (Baixa, Normal, Alta, Urgente)status: Lista de status para filtrarcontexto: Filtro por contexto (busca parcial, case-insensitive)projeto: Filtro por projeto (busca parcial, case-insensitive)texto_busca: Busca em Descrição e Detalhado (case-insensitive)task_id: Busca por Task ID específicosprint: Filtro por Sprint
pagination(opcional): Objeto compage(número da página) epage_size(itens por página)
Exemplos:
// 1. Listar todas as tarefas (comportamento legado)
{}
// 2. Com paginação
{
"pagination": {
"page": 1,
"page_size": 20
}
}
// 3. Buscar tarefas de alta prioridade
{
"filters": {
"prioridade": ["Alta", "Urgente"]
}
}
// 4. Buscar tarefas em desenvolvimento com paginação
{
"filters": {
"status": ["Em Desenvolvimento"]
},
"pagination": {
"page": 1,
"page_size": 10
}
}
// 5. Buscar por texto na descrição
{
"filters": {
"texto_busca": "implementar API"
}
}
// 6. Combinar múltiplos filtros
{
"filters": {
"prioridade": ["Alta"],
"status": ["Todo", "Em Desenvolvimento"],
"contexto": "Backend",
"projeto": "MCP Server"
},
"pagination": {
"page": 1,
"page_size": 25
}
}
Retorno (sem paginação):
[
{
"Task ID": "TASK-001",
"Contexto": "Backend",
"Descrição": "...",
...
},
...
]
Retorno (com paginação):
{
"tasks": [...],
"total_count": 45,
"page": 1,
"page_size": 25,
"total_pages": 2,
"has_next": true,
"has_previous": false
}
3. add_task - Adicionar Tarefa
Adiciona uma nova tarefa na planilha.
Parâmetros:
task: Objeto Task com todos os campos
Exemplo:
{
"task": {
"project": "MCP Server Sheets",
"task_id": "TASK-001",
"contexto": "Backend",
"descricao": "Implementar busca avançada",
"prioridade": "Alta",
"status": "Todo",
"task_id_root": "",
"sprint": "Sprint 1",
"detalhado": "Adicionar filtros por prioridade, status e contexto",
"data_criacao": "2025-10-24",
"data_solucao": ""
}
}
4. update_task - Atualizar Tarefa
Atualiza uma tarefa existente pelo Task ID.
Parâmetros:
task_id: ID da tarefa a ser atualizadaupdates: Dicionário com campos a atualizar
Exemplo:
{
"task_id": "TASK-001",
"updates": {
"Status": "Concluído",
"Data Solução": "2025-10-24"
}
}
5. batch_add_tasks - Adicionar Múltiplas Tarefas
Adiciona múltiplas tarefas em uma única operação.
Parâmetros:
batch: Objeto BatchTaskAdd contendo lista de tarefas
Exemplo:
{
"batch": {
"tasks": [
{
"project": "MCP Server",
"task_id": "TASK-001",
"contexto": "Backend",
"descricao": "Tarefa 1",
"prioridade": "Alta",
"status": "Todo"
},
{
"project": "MCP Server",
"task_id": "TASK-002",
"contexto": "Frontend",
"descricao": "Tarefa 2",
"prioridade": "Normal",
"status": "Todo"
}
]
}
}
Retorno:
{
"success_count": 2,
"error_count": 0,
"details": [
{
"task_id": "TASK-001",
"status": "success",
"message": "Tarefa adicionada com sucesso"
},
{
"task_id": "TASK-002",
"status": "success",
"message": "Tarefa adicionada com sucesso"
}
]
}
6. batch_update_tasks - Atualizar Múltiplas Tarefas
Atualiza múltiplas tarefas em uma única operação.
Parâmetros:
batch: Objeto BatchTaskUpdate contendo lista de atualizações
Exemplo:
{
"batch": {
"updates": [
{
"task_id": "TASK-001",
"fields": {"Status": "Concluído"}
},
{
"task_id": "TASK-002",
"fields": {"Prioridade": "Alta"}
}
]
}
}
Retorno:
{
"success_count": 2,
"error_count": 0,
"details": [
{
"task_id": "TASK-001",
"status": "success",
"message": "Tarefa atualizada com sucesso"
},
{
"task_id": "TASK-002",
"status": "success",
"message": "Tarefa atualizada com sucesso"
}
]
}
7. get_valid_configs - Obter Configurações Válidas
Retorna os valores válidos para Status e Prioridade.
Retorno:
{
"valid_task_status": [
"Todo",
"Em Desenvolvimento",
"Impedido",
"Concluído",
"Cancelado",
"Não Relacionado",
"Pausado"
],
"valid_task_priorities": [
"Baixa",
"Normal",
"Alta",
"Urgente"
]
}
Modelos de Dados
Task
{
"project": str, # Nome do Projeto (obrigatório)
"task_id": str, # ID único da tarefa (obrigatório)
"contexto": str, # Contexto da tarefa (obrigatório)
"descricao": str, # Descrição breve (obrigatório)
"prioridade": str, # Prioridade (obrigatório)
"status": str, # Status atual (obrigatório)
"task_id_root": str, # ID da tarefa raiz (opcional)
"sprint": str, # Sprint associada (opcional)
"detalhado": str, # Descrição detalhada (opcional)
"data_criacao": str, # Data de criação (opcional)
"data_solucao": str # Data de solução (opcional)
}
BatchTaskAdd
{
"tasks": List[Task] # Lista de tarefas a serem adicionadas
}
BatchTaskUpdate
{
"updates": List[TaskUpdate] # Lista de atualizações
}
Onde TaskUpdate é:
{
"task_id": str, # ID da tarefa
"fields": dict # Campos a atualizar
}
SearchFilters
{
"prioridade": List[str], # Lista de prioridades
"status": List[str], # Lista de status
"contexto": str, # Filtro de contexto
"projeto": str, # Filtro de projeto
"texto_busca": str, # Busca de texto
"task_id": str, # ID específico
"sprint": str # Filtro de sprint
}
PaginationParams
{
"page": int, # Número da página (mínimo: 1)
"page_size": int # Itens por página (1-500)
}
PaginatedResponse
{
"tasks": List[Dict], # Tarefas da página
"total_count": int, # Total de tarefas
"page": int, # Página atual
"page_size": int, # Itens por página
"total_pages": int, # Total de páginas
"has_next": bool, # Existe próxima página
"has_previous": bool # Existe página anterior
}
Configuração
Pré-requisitos
- Python 3.13.5 ou superior
- Conta Google Cloud com Google Sheets API habilitada
- Arquivo
credentials.jsoncom credenciais de Service Account
Variáveis de Ambiente
Crie um arquivo .env com:
KANBAN_SHEET_ID=seu_id_da_planilha_aqui
KANBAN_SHEET_NAME=Back-End # Nome da aba (padrão: "Back-End")
Instalação
# Instalar dependências
uv sync
# Executar servidor
uv run main.py
Configuração do Cliente MCP
Adicione ao seu cliente MCP:
{
"mcpServers": {
"kanban-sheets": {
"command": "uv",
"args": ["run", "main.py"]
}
}
}
Estrutura da Planilha
A planilha deve ter as seguintes colunas (A até K):
| Coluna | Nome | Descrição |
|---|---|---|
| A | Projeto | Nome do Projeto |
| B | Task ID | ID único da tarefa |
| C | Task ID Root | ID da tarefa raiz |
| D | Sprint | Sprint associada |
| E | Contexto | Contexto da tarefa |
| F | Descrição | Descrição breve |
| G | Detalhado | Descrição detalhada |
| H | Prioridade | Prioridade da tarefa |
| I | Status | Status atual |
| J | Data Criação | Data de criação |
| K | Data Solução | Data de solução |
Exemplos de Uso Avançado
Buscar todas as tarefas urgentes pendentes
{
"filters": {
"prioridade": ["Urgente"],
"status": ["Todo", "Em Desenvolvimento"]
}
}
Listar tarefas de um projeto específico com paginação
{
"filters": {
"projeto": "MCP Server"
},
"pagination": {
"page": 1,
"page_size": 50
}
}
Buscar tarefas impedidas ou pausadas
{
"filters": {
"status": ["Impedido", "Pausado"]
}
}
Buscar por palavra-chave na descrição
{
"filters": {
"texto_busca": "API REST"
}
}
Tecnologias Utilizadas
- FastMCP: Framework para servidores MCP
- Pydantic: Validação de dados (v2.12.3)
- Google API Python Client: Integração com Google Sheets
- google-auth: Autenticação com Google Cloud
Testes
O projeto inclui uma suíte completa de testes usando pytest.
Estrutura de Testes
tests/
├── __init__.py
├── conftest.py # Fixtures compartilhadas
├── test_list_tasks.py # Testes para listagem e busca
├── test_add_task.py # Testes para adição de tarefas
├── test_update_task.py # Testes para atualização
└── test_batch_operations.py # Testes para operações em lote
Instalação das Dependências de Teste
# Instalar dependências de desenvolvimento
uv pip install -r requirements-dev.txt
As dependências incluem:
pytest: Framework de testespytest-asyncio: Suporte para testes assíncronospytest-cov: Cobertura de códigopytest-mock: Mocking facilitado
Executar Testes
# Executar todos os testes
uv run pytest
# Executar com cobertura de código
uv run pytest --cov
# Executar testes específicos
uv run pytest tests/test_list_tasks.py
# Executar testes com saída verbosa
uv run pytest -v
# Executar apenas testes de uma função específica
uv run pytest tests/test_list_tasks.py::test_list_tasks_all
# Gerar relatório de cobertura em HTML
uv run pytest --cov --cov-report=html
# O relatório será criado em htmlcov/index.html
Estrutura dos Testes
Os testes utilizam mocks do Google Sheets API para não depender de conexões reais. As principais fixtures incluem:
mock_env_vars: Variáveis de ambiente mockadasmock_sheets_service: Mock do serviço Google Sheetsmock_credentials: Mock das credenciais do Googlesample_sheet_data: Dados de exemplo para testesempty_sheet_data: Dados de planilha vazia
Cobertura de Testes
Os testes cobrem:
-
list_tasks:
- Listagem sem filtros
- Filtros individuais (prioridade, status, contexto, etc.)
- Múltiplos filtros combinados
- Paginação
- Casos de erro
-
add_task:
- Adição com todos os campos
- Adição com campos mínimos
- Diferentes prioridades e status
- Validação de campos
- Tratamento de erros
-
update_task:
- Atualização de campos individuais
- Atualização de múltiplos campos
- Validação de status e prioridade
- Tarefa não encontrada
- Tratamento de erros
-
batch_add_tasks e batch_update_tasks:
- Operações em lote bem-sucedidas
- Operações parcialmente bem-sucedidas
- Validações em lote
- Tratamento de erros
-
get_valid_configs:
- Retorno de configurações válidas
- Estrutura do retorno
Exemplo de Teste
def test_list_tasks_with_priority_filter(mock_env_vars, mock_credentials_file,
mock_credentials, mock_get_sheets_service):
"""Testa filtro por prioridade."""
filters = SearchFilters(prioridade=["Alta"])
result = list_tasks(filters=filters)
assert isinstance(result, list)
assert len(result) == 1
assert result[0]["Task ID"] == "TASK-001"
assert result[0]["Prioridade"] == "Alta"
Configuração do pytest
O arquivo pytest.ini contém as configurações padrão, incluindo:
- Padrões de descoberta de testes
- Opções de saída
- Configuração de cobertura de código
- Marcadores customizados
Documentação Adicional
Licença
Este projeto é um servidor MCP para gerenciamento de tarefas em Google Sheets.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.