Skip to main content
Glama
mayronjr

Google Sheets Kanban MCP Server

by mayronjr

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

Related MCP server: Google Sheets MCP

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 projeto

  • task_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 busca

    • prioridade: Lista de prioridades (Baixa, Normal, Alta, Urgente)

    • status: Lista de status para filtrar

    • contexto: 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ífico

    • sprint: Filtro por Sprint

  • pagination (opcional): Objeto com page (número da página) e page_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 atualizada

  • updates: 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

  1. Python 3.13.5 ou superior

  2. Conta Google Cloud com Google Sheets API habilitada

  3. Arquivo credentials.json com 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 testes

  • pytest-asyncio: Suporte para testes assíncronos

  • pytest-cov: Cobertura de código

  • pytest-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 mockadas

  • mock_sheets_service: Mock do serviço Google Sheets

  • mock_credentials: Mock das credenciais do Google

  • sample_sheet_data: Dados de exemplo para testes

  • empty_sheet_data: Dados de planilha vazia

Cobertura de Testes

Os testes cobrem:

  1. list_tasks:

    • Listagem sem filtros

    • Filtros individuais (prioridade, status, contexto, etc.)

    • Múltiplos filtros combinados

    • Paginação

    • Casos de erro

  2. 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

  3. 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

  4. 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

  5. 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.

Available Tools

6 tools
batch_add_tasksC

Adiciona múltiplas tarefas em uma única operação.

Args: batch: Objeto BatchTaskAdd contendo lista de tarefas

Returns: Dicionário com: - success_count: Número de tarefas adicionadas com sucesso - error_count: Número de erros - details: Lista com detalhes de cada adição

ParametersJSON Schema
NameRequiredDescriptionDefault
batchYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. While it states this is a batch addition operation and describes the return structure, it doesn't mention important behavioral aspects: whether this requires specific permissions, if there are rate limits for batch operations, what happens when some tasks fail (partial success handling), or whether the operation is atomic. The return format description is helpful but insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for Args and Returns. The Portuguese text is direct and efficient. However, the 'Args' section could be more concise by integrating the batch object explanation into the main description rather than as a separate bullet point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch mutation tool with no annotations and 0% schema description coverage, the description is moderately complete. It explains the basic operation and return format (which is helpful since there's an output schema), but lacks critical context about permissions, error handling, batch constraints, and differentiation from sibling tools. The presence of an output schema reduces the burden slightly, but important behavioral aspects remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides the parameter name 'batch' and indicates it's a 'BatchTaskAdd' object containing a task list, which adds meaningful context beyond the bare schema. However, it doesn't explain the structure of individual tasks, validation rules, or constraints on batch size. The description adds some value but doesn't fully compensate for the complete lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Adiciona múltiplas tarefas em uma única operação' (Adds multiple tasks in a single operation). This is a specific verb+resource combination that distinguishes it from sibling tools like 'get_one_or_more_tasks' or 'list_tasks'. However, it doesn't explicitly differentiate from 'batch_update_tasks' beyond the verb difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when batch operations are preferred over individual task creation, or how this differs from 'batch_update_tasks'. The agent must infer usage context solely from the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_update_tasksC

Atualiza múltiplas tarefas em uma única operação.

Args: batch: Objeto BatchTaskUpdate contendo lista de atualizações

Returns: Dicionário com: - success_count: Número de tarefas atualizadas com sucesso - error_count: Número de erros - details: Lista com detalhes de cada atualização

ParametersJSON Schema
NameRequiredDescriptionDefault
batchYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It states this is an update operation (implying mutation) and describes the return format, but lacks critical behavioral details: required permissions, whether updates are atomic/transactional, error handling specifics, rate limits, or what happens to partially successful batches. The return format description is helpful but insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with three clear sections: purpose statement, Args, and Returns. Each sentence earns its place. The structure is front-loaded with the core functionality first. Minor improvement could be making the purpose statement more specific about what 'updates' entail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch mutation tool with no annotations, 0% schema description coverage, and complex nested parameters, the description is inadequate. While it describes the return format (output schema exists), it misses critical context: mutation implications, error scenarios, partial success handling, and detailed parameter guidance. The agent would struggle to use this tool correctly without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'batch' parameter contains 'lista de atualizações' (list of updates) and references 'BatchTaskUpdate', adding some semantic context. However, it doesn't explain the structure of individual updates, required fields, or validation rules. The description provides basic orientation but leaves most parameter semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Atualiza' - Updates) and resource ('múltiplas tarefas' - multiple tasks) with the operational context ('em uma única operação' - in a single operation). It distinguishes from sibling tools like 'get_one_or_more_tasks' (read) and 'list_tasks' (list), but doesn't explicitly differentiate from 'batch_add_tasks' (add vs update).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when batch updates are appropriate versus single updates, or how it differs from other mutation tools like 'batch_add_tasks'. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_one_or_more_tasksB

Busca uma ou mais tarefas específicas pelos IDs das tarefas e projeto.

Args: project: Nome do Projeto task_id_list: Lista de IDs únicos das tarefas

Returns: Lista de dicionários com os dados das tarefas encontradas. Tarefas não encontradas ou com erro retornam objeto com campo 'error'.

Exemplo: get_one_or_more_tasks(project="MCP Server", task_id_list=["TASK-001", "TASK-002"])

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes
task_id_listYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that it returns a list of dictionaries for found tasks and that unfound/errored tasks return an object with an 'error' field, which is useful behavioral information. However, it doesn't mention critical aspects like whether this is a read-only operation (implied by 'busca' but not explicit), authentication requirements, rate limits, error handling details, or pagination. For a tool with no annotations, this leaves significant gaps in behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by structured sections for Args, Returns, and an Example. Each section adds value without redundancy. However, the example could be more concise by omitting redundant parameter names if they're obvious from context, and the overall structure is slightly verbose but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (which should document return values), the description doesn't need to explain return details extensively. However, with no annotations and 0% schema description coverage, the description provides basic purpose, parameter semantics, and an example, but lacks context on error handling, authentication, and usage comparisons. For a tool with 2 parameters and sibling tools, this is adequate but has clear gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics: 'project' is described as 'Nome do Projeto' (Project Name) and 'task_id_list' as 'Lista de IDs únicos das tarefas' (List of unique task IDs). This clarifies what each parameter represents beyond the schema's basic types. However, it doesn't specify format constraints (e.g., project name patterns or ID formats), so it doesn't fully compensate for the 0% coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Busca uma ou mais tarefas específicas pelos IDs das tarefas e projeto' (Searches for one or more specific tasks by task IDs and project). This is a specific verb+resource combination that distinguishes it from siblings like 'list_tasks' (which presumably lists all tasks without filtering by IDs). However, it doesn't explicitly contrast with 'get_sprint_stats' or 'get_valid_configs', so it's not fully differentiated from all siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying that it searches by task IDs and project, suggesting it should be used when you have specific task IDs to retrieve. However, it doesn't explicitly state when to use this versus alternatives like 'list_tasks' (which might retrieve all tasks without ID filtering) or when not to use it. The example shows usage but doesn't provide comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sprint_statsA

Retorna estatísticas de sprints com porcentagem de conclusão das tarefas.

Args: project: Nome do projeto para filtrar sprints (opcional). Se não fornecido, retorna stats de todas as sprints.

Returns: Dicionário com: - sprints: Lista de estatísticas por sprint contendo: - sprint: Nome da sprint - total_tasks: Total de tarefas na sprint - completed_tasks: Número de tarefas concluídas - completion_percentage: Porcentagem de conclusão (0-100) - tasks_by_status: Distribuição de tarefas por status - total_sprints: Total de sprints encontradas

Exemplo: get_sprint_stats() get_sprint_stats(project="MCP Server")

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it returns statistics (read-only operation), explains the optional filtering parameter, and details the return structure including nested data like 'tasks_by_status'. It doesn't mention potential limitations like rate limits, authentication needs, or data freshness, but provides solid operational context for a read-only statistical tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It begins with a clear purpose statement, then provides parameter documentation, return value details, and examples. Every section adds value, though the example section could be slightly more concise. The Portuguese documentation is clear and avoids redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (implied by the detailed Returns section), no annotations, and good parameter documentation, the description is quite complete. It covers purpose, parameter usage, and return structure. For a read-only statistical tool with one optional parameter, this provides sufficient context, though it could benefit from mentioning any limitations or performance considerations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It does this excellently: it explains the single parameter 'project' as optional, specifies it filters sprints by project name, and clarifies the default behavior when omitted. The description adds complete semantic meaning beyond the bare schema, including examples of usage with and without the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retorna estatísticas de sprints com porcentagem de conclusão das tarefas' (Returns sprint statistics with task completion percentage). It specifies the verb ('retorna' - returns) and resource ('estatísticas de sprints' - sprint statistics) with the key metric being completion percentage. However, it doesn't explicitly differentiate from sibling tools like 'get_one_or_more_tasks' or 'list_tasks' beyond the statistical focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage guidance through the optional 'project' parameter explanation: 'Se não fornecido, retorna stats de todas as sprints' (If not provided, returns stats for all sprints). This suggests when to use the parameter, but there's no explicit guidance on when to choose this tool versus alternatives like 'get_one_or_more_tasks' or 'list_tasks', nor any mention of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_valid_configsA

Retorna as configurações válidas para Status e Prioridade.

Returns: Dicionário contendo: - valid_task_status: Lista de status válidos - valid_task_priorities: Lista de prioridades válidas

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation by using 'returns' and describes the output structure, but lacks details on permissions, rate limits, or error handling. This is adequate for a simple lookup tool but misses deeper behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured: it states the purpose in one sentence and details the return format in a clear, bulleted list. Every sentence adds value without redundancy, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool does and the return structure, though it could benefit from more behavioral context. The output schema likely covers return values, reducing the need for detailed output explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description does not add parameter information, but since no parameters exist, a baseline of 4 is appropriate as no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retorna as configurações válidas para Status e Prioridade' (Returns valid configurations for Status and Priority). It specifies the verb 'returns' and the resource 'valid configurations', though it doesn't explicitly differentiate from sibling tools like 'get_sprint_stats' or 'list_tasks' beyond the resource focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, timing, or comparisons to sibling tools such as 'get_one_or_more_tasks' or 'list_tasks', leaving the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA

Lista e busca tarefas da planilha Kanban com filtros avançados e paginação opcional.

Args: filters: Filtros de busca (opcional). Critérios: - prioridade: Lista de prioridades (Baixa, Normal, Alta, Urgente) - status: Lista de status para filtrar - contexto: 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ífico - sprint: Filtro por Sprint pagination: Parâmetros de paginação (opcional). Se não fornecido, retorna todas as tarefas.

Returns: Se pagination fornecido: Dicionário PaginatedResponse com: - tasks: Lista de tarefas da página atual - total_count: Total de tarefas encontradas - page: Página atual - page_size: Itens por página - total_pages: Total de páginas - has_next: Se existe próxima página - has_previous: Se existe página anterior

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo
paginationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors like pagination handling (returns all tasks if not provided) and case-insensitive search, which are useful. However, it lacks details on permissions, rate limits, or error handling, which are important for a list/search operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for Args and Returns, making it easy to parse. However, the initial sentence could be more front-loaded with key details, and some redundancy exists (e.g., repeating 'case-insensitive'), slightly reducing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (2 parameters with rich filtering), no annotations, and an output schema present, the description does a good job covering inputs and outputs. It explains filter options and pagination response structure thoroughly, though it could benefit from more behavioral context like error cases or performance notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It does so by detailing all filter criteria (e.g., prioridade, status, contexto) with specific values and behaviors (e.g., partial search, case-insensitive), and explains pagination parameters and defaults, adding significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Lista e busca') and resource ('tarefas da planilha Kanban'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'get_one_or_more_tasks', which appears to serve a similar purpose, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_one_or_more_tasks' or 'get_sprint_stats'. It mentions advanced filters and pagination but doesn't specify scenarios where this tool is preferred over others, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedbatch_add_tasks
    • First observedbatch_update_tasks
    • First observedget_one_or_more_tasks
    • First observedget_sprint_stats
    • First observedget_valid_configs
    • First observedlist_tasks

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes: batch operations, task retrieval, sprint statistics, configuration, and listing. However, 'get_one_or_more_tasks' and 'list_tasks' could cause confusion as both retrieve tasks, though one is ID-based and the other uses filters. The descriptions help differentiate them, but overlap exists.

Naming Consistency4/5

Tools follow a consistent verb_noun pattern (e.g., batch_add_tasks, list_tasks) with clear actions. Minor deviations include 'get_one_or_more_tasks' being wordier than others and 'get_valid_configs' using 'configs' instead of 'configurations', but overall naming is predictable and readable.

Tool Count5/5

With 6 tools, this server is well-scoped for a Google Sheets Kanban system. It covers core operations like adding, updating, retrieving, and listing tasks, plus sprint stats and configurations. Each tool serves a clear purpose without bloat, fitting typical domain needs.

Completeness4/5

The toolset covers essential CRUD operations for tasks (add, update, get, list) and includes useful extras like sprint stats and configs. Minor gaps include no direct tool for deleting tasks or managing sprints beyond stats, but agents can likely work around this with batch updates or other methods.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive Google Sheets integration for creating, reading, updating, and managing spreadsheets programmatically via tools like batch updates and range operations. It enables automated workflows for data analysis, project management, and synchronization within the Model Context Protocol.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact directly with Google Sheets to create, read, and edit spreadsheets through the Model Context Protocol. It supports a wide range of actions including cell manipulation, row and column management, and sheet organization.
    178
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create, update, list, and delete tasks on a Kanban board via the Model Context Protocol, supporting multi-project management and real-time collaboration.
    100
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mayronjr/mcp-server-project-tracker'

If you have feedback or need assistance with the MCP directory API, please join our Discord server