Pocketbase

Permita que seu agente se conecte ao Pocketbase com facilidade.

Documentação

pocketbase-mcp

License: MIT CI Docker

Servidor MCP remoto que conecta qualquer cliente MCP a uma instância PocketBase via HTTP sem estado.

Início rápido

Use a instância hospedada em https://pocketbase.tokenscompany.co/mcp ou hospede a sua própria.

Instalar com agente de IA

Copie e cole este prompt no seu agente de IA (Claude Code, Cursor, Windsurf, etc.):

Install the PocketBase MCP server. The MCP endpoint is https://pocketbase.tokenscompany.co/mcp and the transport type is http (NOT sse). It requires X-PB-URL set to my PocketBase instance URL and either X-PB-Email + X-PB-Password (superuser credentials) or X-PB-Token (superuser auth token). Add it to my project MCP config with type "http". Then fetch https://raw.githubusercontent.com/tokenscompany/pocketbase-mcp/main/SKILL.md and save it to my project's agent instructions so you always know how to use the PocketBase tools.
Claude Code
claude mcp add --transport http pocketbase https://pocketbase.tokenscompany.co/mcp \
  --header "X-PB-URL: https://your-pocketbase.example.com" \
  --header "X-PB-Email: admin@example.com" \
  --header "X-PB-Password: your-password"

Ou adicione ao .mcp.json na raiz do seu projeto:

{
  "mcpServers": {
    "pocketbase": {
      "type": "http",
      "url": "https://pocketbase.tokenscompany.co/mcp",
      "headers": {
        "X-PB-URL": "${PB_URL}",
        "X-PB-Email": "${PB_EMAIL}",
        "X-PB-Password": "${PB_PASSWORD}"
      }
    }
  }
}

O Claude Code expande ${VAR} a partir do seu ambiente, então defina PB_URL, PB_EMAIL e PB_PASSWORD no seu shell ou .env.

Cursor

Adicione ao ~/.cursor/mcp.json:

{
  "mcpServers": {
    "pocketbase": {
      "url": "https://pocketbase.tokenscompany.co/mcp",
      "headers": {
        "X-PB-URL": "https://your-pocketbase.example.com",
        "X-PB-Email": "admin@example.com",
        "X-PB-Password": "your-password"
      }
    }
  }
}
OpenCode

Adicione ao opencode.json na raiz do seu projeto:

{
  "mcp": {
    "pocketbase": {
      "type": "remote",
      "url": "https://pocketbase.tokenscompany.co/mcp",
      "headers": {
        "X-PB-URL": "https://your-pocketbase.example.com",
        "X-PB-Email": "admin@example.com",
        "X-PB-Password": "your-password"
      },
      "enabled": true
    }
  }
}

Auto-hospedagem

Bun

bun install
bun run src/index.ts

O servidor escuta em PORT (padrão 3000).

Docker (GHCR)

docker pull ghcr.io/tokenscompany/pocketbase-mcp:latest
docker run -p 3000:3000 ghcr.io/tokenscompany/pocketbase-mcp:latest

Ou construa localmente:

docker build -t pocketbase-mcp .
docker run -p 3000:3000 pocketbase-mcp

Verificando a imagem

Toda imagem publicada no GHCR inclui atestado de proveniência SLSA. Você pode verificar se uma imagem foi construída a partir deste repositório:

gh attestation verify oci://ghcr.io/tokenscompany/pocketbase-mcp:latest \
  --owner tokenscompany

Autenticação

Toda requisição ao POST /mcp deve incluir X-PB-URL e um dos dois métodos de autenticação:

Opção 1: E-mail + Senha (recomendado)

CabeçalhoDescrição
X-PB-URLURL base da sua instância PocketBase
X-PB-EmailE-mail do superusuário
X-PB-PasswordSenha do superusuário

O servidor autentica contra o PocketBase em cada requisição. Nenhum gerenciamento manual de token é necessário.

Opção 2: Token

CabeçalhoDescrição
X-PB-URLURL base da sua instância PocketBase
X-PB-TokenToken de autenticação do superusuário

Para obter um token manualmente:

curl -X POST https://your-pb.example.com/api/admins/auth-with-password \
  -H 'Content-Type: application/json' \
  -d '{"identity":"admin@example.com","password":"your-password"}'

O campo token na resposta é o seu X-PB-Token. Se tanto o token quanto e-mail+senha forem fornecidos, o token tem prioridade.

Ferramentas

FerramentaDescrição
pb_healthVerificação de saúde do PocketBase
pb_list_collectionsLista todas as coleções com esquemas completos de campos
pb_get_collection_schemaObtém o esquema completo de uma única coleção
pb_create_collectionCria uma nova coleção
pb_update_collectionAtualiza o esquema ou as regras de uma coleção
pb_delete_collectionExclui uma coleção
pb_import_collectionsImportação em massa/sobrescreve esquemas de coleções
pb_list_recordsLista/busca registros em uma coleção
pb_get_recordObtém um único registro por ID
pb_create_recordCria um novo registro
pb_update_recordAtualiza um registro existente
pb_delete_recordExclui um registro por ID
pb_list_backupsLista backups disponíveis
pb_create_backupCria um novo backup
pb_delete_backupExclui um backup por chave
pb_get_file_urlObtém URL de download para um campo de arquivo
pb_get_settingsObtém configurações do aplicativo
pb_update_settingsAtualiza configurações do aplicativo
pb_list_logsConsulta logs de requisições

Recursos

RecursoURIDescrição
schemapocketbase://schemaTodos os esquemas de coleções como JSON

Segurança e Privacidade

Este servidor é totalmente sem estado — ele não armazena, registra ou retém nenhum dos seus dados:

  • Sem banco de dados, sem gravação em disco — cada requisição cria um novo servidor MCP e transporte em memória, processa e descarta tudo. Nada é gravado em disco.
  • Sem armazenamento de credenciais — seus cabeçalhos X-PB-URL, X-PB-Token, X-PB-Email e X-PB-Password são usados durante a requisição e nunca são persistidos, armazenados em cache ou registrados.
  • Sem telemetria ou analytics — o servidor coleta zero dados de uso. Nenhum serviço de terceiros é contatado.
  • Sem sessões — não há cookies, IDs de sessão ou estado no lado do servidor entre requisições.
  • Código aberto — toda a base de código é licenciada sob MIT. Cada imagem Docker inclui atestado de proveniência SLSA, para que você possa verificar que foi construída diretamente deste repositório sem modificações.
  • Hospede você mesmo — para máximo controle, execute sua própria instância. O servidor é um único contêiner sem dependências externas além da sua instância PocketBase.

Endurecimento

Ao hospedar uma instância pública, o servidor inclui várias medidas adicionais:

  • Proteção SSRF — X-PB-URL é validado: apenas esquemas http/https são permitidos, e nomes de host que resolvem para faixas de IP privadas/reservadas (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, ::1, fc00::/7, fe80::/10) são rejeitados.

  • Limitação de taxa — token-bucket em memória por IP. Configurável via variáveis de ambiente:

    VariávelPadrãoDescrição
    RATE_LIMIT_RPM60Requisições por minuto por IP
    RATE_LIMIT_BURST10Tamanho máximo de rajada
  • CORS — Access-Control-Allow-Origin: * com suporte a preflight em /mcp.

  • Limite de tamanho do corpo — requisições maiores que 1 MB são rejeitadas com 413.

Endpoints

MétodoCaminhoDescrição
POST/mcpEndpoint MCP (sem estado, respostas JSON)
GET/healthVerificação de saúde

Solução de problemas

Erro "Failed to reconnect"

A configuração do seu cliente MCP provavelmente usa "type": "sse". Este servidor usa HTTP streamable sem estado, não Server-Sent Events. Altere o tipo de transporte para "http":

{
  "mcpServers": {
    "pocketbase": {
      "type": "http",
      ...
    }
  }
}

Para a CLI do Claude Code, use --transport http ao adicionar:

claude mcp add --transport http pocketbase https://pocketbase.tokenscompany.co/mcp ...

Licença

MIT