Supabase MCP Server

Supabase MCP Server

Enables AI agents to access and manage Supabase projects through the Model Context Protocol, supporting database operations, edge functions, storage, and documentation search. It provides a complete toolset for SQL execution, migration management, and real-time project debugging.

Category
访问服务器

README

🚀 Supabase MCP Server - Deploy no Coolify

Este repositório contém a configuração completa para deploy do Supabase MCP Server no Coolify, permitindo que agentes de IA acessem e gerenciem projetos Supabase através do Model Context Protocol (MCP).

🌐 Servidor Ativo

URL do Servidor: http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/

📡 Endpoints Disponíveis

  • Root: GET / - Informações do servidor
  • Health: GET /health - Verificação de saúde
  • Status: GET /status - Status detalhado
  • Test: GET /test e POST /test - Testes de conectividade
  • MCP: POST /mcp - Endpoint principal para agentes de IA

🛠️ Tools Disponíveis para Agentes de IA

🗄️ Database Tools

list_tables

Lista todas as tabelas no banco de dados.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_tables",
    "arguments": {
      "schemas": ["public"]
    }
  }
}

execute_sql

Executa SQL raw no banco de dados.

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "execute_sql",
    "arguments": {
      "query": "SELECT * FROM leads WHERE phone_number = '5511999999999'"
    }
  }
}

apply_migration

Aplica migrações DDL no banco.

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "apply_migration",
    "arguments": {
      "name": "create_new_table",
      "query": "CREATE TABLE new_table (id SERIAL PRIMARY KEY, name VARCHAR(255))"
    }
  }
}

📊 Gestão de Leads (Tabela: leads)

Consultar Leads

-- Buscar lead por telefone
SELECT * FROM leads WHERE phone_number = '5511999999999';

-- Buscar leads por cidade
SELECT * FROM leads WHERE city = 'São Paulo';

-- Buscar leads qualificados
SELECT * FROM leads WHERE qualification_status = 'QUALIFIED';

Inserir/Atualizar Lead

-- Inserir novo lead
INSERT INTO leads (phone_number, name, city, state, client_type, additional_data)
VALUES ('5511999999999', 'João Silva', 'São Paulo', 'SP', 'RESIDENTIAL', '{"source": "whatsapp", "campaign": "energia"}');

-- Atualizar lead existente
UPDATE leads 
SET name = 'João Silva Santos', 
    additional_data = additional_data || '{"last_contact": "2024-01-15"}'
WHERE phone_number = '5511999999999';

Campos da Tabela leads:

  • id (SERIAL PRIMARY KEY)
  • phone_number (VARCHAR, UNIQUE)
  • name (VARCHAR)
  • city (VARCHAR)
  • state (VARCHAR)
  • invoice_amount (NUMERIC)
  • client_type (VARCHAR)
  • qualification_status (VARCHAR, DEFAULT 'NEW')
  • conversation_state (VARCHAR, DEFAULT 'INITIAL')
  • additional_data (JSONB, DEFAULT '{}')
  • created_at (TIMESTAMP)
  • updated_at (TIMESTAMP)

📸 Gestão de Imagens (Tabelas: energy_bills, image_metadata)

Tabela energy_bills:

  • id (SERIAL PRIMARY KEY)
  • lead_id (INTEGER, FK para leads)
  • phone (VARCHAR)
  • image_path (VARCHAR)
  • extracted_data (TEXT)
  • created_at (TIMESTAMP)

Tabela image_metadata:

  • id (UUID PRIMARY KEY)
  • wamid (TEXT, UNIQUE)
  • sender_phone (TEXT)
  • storage_path (TEXT)
  • mime_type (TEXT, DEFAULT 'image/jpeg')
  • file_size_kb (INTEGER)
  • original_caption (TEXT)
  • lead_id (INTEGER, FK para leads)
  • processing_status (TEXT, DEFAULT 'completed')
  • error_message (TEXT)
  • created_at (TIMESTAMPTZ)

🔍 Debug & Monitoring

get_logs

Obtém logs do projeto Supabase.

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "get_logs",
    "arguments": {
      "service": "api"
    }
  }
}

get_advisors

Obtém avisos de segurança e performance.

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "get_advisors",
    "arguments": {
      "type": "security"
    }
  }
}

📚 Documentação

search_docs

Busca na documentação Supabase.

{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "search_docs",
    "arguments": {
      "graphql_query": "query { searchDocs(query: \"authentication\", limit: 5) { nodes { title href content } } }"
    }
  }
}

Edge Functions

list_edge_functions

Lista todas as edge functions.

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "list_edge_functions",
    "arguments": {}
  }
}

deploy_edge_function

Deploy de nova edge function.

{
  "jsonrpc": "2.0",
  "id": 8,
  "method": "tools/call",
  "params": {
    "name": "deploy_edge_function",
    "arguments": {
      "name": "process-lead",
      "files": [
        {
          "name": "index.ts",
          "content": "Deno.serve(async (req) => { return new Response('Hello from edge function!') })"
        }
      ]
    }
  }
}

🗄️ Storage

list_storage_buckets

Lista buckets de storage.

{
  "jsonrpc": "2.0",
  "id": 9,
  "method": "tools/call",
  "params": {
    "name": "list_storage_buckets",
    "arguments": {}
  }
}

🎯 Casos de Uso Específicos

1. Gestão Completa de Lead

# 1. Buscar lead existente
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "execute_sql",
      "arguments": {
        "query": "SELECT * FROM leads WHERE phone_number = '\''5511999999999'\''"
      }
    }
  }'

# 2. Inserir novo lead se não existir
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "execute_sql",
      "arguments": {
        "query": "INSERT INTO leads (phone_number, name, city, state, client_type, additional_data) VALUES ('\''5511999999999'\'', '\''Maria Silva'\'', '\''São Paulo'\'', '\''SP'\'', '\''RESIDENTIAL'\'', '\''{\"source\": \"whatsapp\", \"campaign\": \"energia\"}'\'') ON CONFLICT (phone_number) DO UPDATE SET name = EXCLUDED.name, updated_at = CURRENT_TIMESTAMP"
      }
    }
  }'

2. Processamento de Imagem de Conta de Energia

# 1. Salvar metadados da imagem
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "execute_sql",
      "arguments": {
        "query": "INSERT INTO image_metadata (wamid, sender_phone, storage_path, mime_type, file_size_kb, original_caption, lead_id) VALUES ('\''wamid_123'\'', '\''5511999999999'\'', '\''energy_bills/2024/01/bill_123.jpg'\'', '\''image/jpeg'\'', 256, '\''Conta de energia'\'', 1)"
      }
    }
  }'

# 2. Registrar conta processada
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "execute_sql",
      "arguments": {
        "query": "INSERT INTO energy_bills (lead_id, phone, image_path, extracted_data) VALUES (1, '\''5511999999999'\'', '\''energy_bills/2024/01/bill_123.jpg'\'', '\''{\"valor\": 150.50, \"vencimento\": \"2024-01-15\", \"consumo\": 250}\'')"
      }
    }
  }'

3. Atualização de Dados Adicionais

# Atualizar dados adicionais do lead
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 5,
    "method": "tools/call",
    "params": {
      "name": "execute_sql",
      "arguments": {
        "query": "UPDATE leads SET additional_data = additional_data || '\''{\"last_bill_amount\": 150.50, \"last_bill_date\": \"2024-01-15\", \"processing_status\": \"completed\"}'\''::jsonb WHERE phone_number = '\''5511999999999'\''"
      }
    }
  }'

🔧 Configuração Técnica

Variáveis de Ambiente (Coolify)

Variável Descrição Exemplo
SUPABASE_ACCESS_TOKEN Token de acesso Supabase sbp_...
PROJECT_REF Referência do projeto ynyvrnasvcxyvjzhzbwf
FEATURES Features habilitadas database,docs,functions,storage,debug,development
PORT Porta do servidor 45678

Features Habilitadas

  • database - Acesso completo ao banco de dados
  • docs - Busca na documentação
  • functions - Deploy de edge functions
  • storage - Gerenciamento de storage
  • debug - Logs e debugging
  • development - Ferramentas de desenvolvimento

Configuração de Porta

  • Interna: 45678 (container)
  • Externa: Gerenciada automaticamente pelo Coolify
  • Acesso: Via proxy reverso do Coolify (sem configuração manual de porta)

🚀 Deploy no Coolify

Pré-requisitos

  1. Conta no Coolify
  2. Projeto Supabase ativo
  3. Personal Access Token (PAT) do Supabase
  4. Repositório Git configurado

Passos para Deploy

  1. Clone o repositório no Coolify
  2. Configure as variáveis de ambiente:
    • SUPABASE_ACCESS_TOKEN: Seu PAT do Supabase
    • PROJECT_REF: ID do seu projeto Supabase
    • FEATURES: database,docs,functions,storage,debug,development
  3. Deploy automático via Coolify

Verificação do Deploy

# Testar conectividade
curl http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/health

# Testar endpoint MCP
curl -X POST http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'

🔒 Segurança

⚠️ Avisos Importantes

  • Modo Write: Este servidor está configurado para acesso completo (não read-only)
  • Permissões: O agente de IA terá acesso total ao banco de dados
  • Monitoramento: Recomenda-se monitorar logs regularmente
  • Backup: Mantenha backups regulares do banco de dados

Recomendações de Segurança

  1. Use RLS (Row Level Security) no Supabase
  2. Monitore logs regularmente
  3. Configure alertas para operações críticas
  4. Mantenha tokens seguros e rotacione periodicamente

🐛 Troubleshooting

Problemas Comuns

"Bad Gateway" no endpoint /mcp

  • Verifique se as variáveis de ambiente estão configuradas
  • Confirme se o projeto Supabase está ativo
  • Verifique logs do container no Coolify

"Unknown method"

  • Use métodos válidos: tools/list, tools/call
  • Verifique a sintaxe JSON-RPC 2.0

Erro de conexão com banco

  • Confirme se o PROJECT_REF está correto
  • Verifique se o SUPABASE_ACCESS_TOKEN é válido
  • Teste conectividade com o projeto Supabase

Logs Úteis

# Verificar status do servidor
curl http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/status

# Testar conectividade básica
curl http://hwg4ks4ooooc04wsosookoog.157.180.32.249.sslip.io/test

📞 Suporte

Para suporte técnico ou dúvidas sobre o uso do MCP Server:

  1. Verifique os logs do container no Coolify
  2. Teste os endpoints de diagnóstico
  3. Consulte a documentação Supabase
  4. Use as tools de debug disponíveis

🎉 O Supabase MCP Server está funcionando plenamente e pronto para uso com agentes de IA!

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选