Integrações de banco de dados com MCP

Introdução ao Model Context Protocol (MCP)

James Chapman

AI Curriculum Manager, DataCamp

Por que adicionar um banco ao servidor de fusos?

 

  • Poder de consulta: filtra, busca e ordena sem carregar todo o conjunto
  • Escala: buscas rápidas com índices do banco

conexão com banco

Introdução ao Model Context Protocol (MCP)

Por que adicionar um banco ao servidor de fusos?

 

  • Poder de consulta: filtra, busca e ordena sem carregar tudo
  • Escala: buscas rápidas com índices do banco
  • Concorrência: várias chamadas de ferramenta ou clientes acessam o BD com segurança
  • Pronto para produção: backups, replicação e fonte única da verdade

vantagens do banco

Introdução ao Model Context Protocol (MCP)

Acesso a dados: Ferramentas vs. Recursos

ícone de ferramentas

  • Dinâmico, depende muito da entrada do usuário, operações de escrita
  • Exemplos: análises e operações de dados

ícone de recursos

  • Somente leitura, dados estáticos, informações de referência
  • Exemplos: guias, docs, políticas
Introdução ao Model Context Protocol (MCP)

Ciclo de vida da conexão

conexões de banco de dados

Introdução ao Model Context Protocol (MCP)

Recurso de banco: timezone_server.py

from mcp.server.fastmcp import FastMCP
import sqlite3

mcp = FastMCP("Timezone Converter")

# Create connection at startup; reuse in handlers
conn = sqlite3.connect("timezones.db")
conn.row_factory = sqlite3.Row

@mcp.resource("db://timezones") def get_locations() -> str: try: cursor = conn.execute("SELECT timezone FROM locations") rows = cursor.fetchall() return "\n".join(r["timezone"] for r in rows) except sqlite3.Error as e: return f"Error: {e}"
Introdução ao Model Context Protocol (MCP)

Ferramenta de busca no banco: timezone_server.py

@mcp.tool()
def lookup_locations(prefix: str) -> str:
    """Find timezones that contain the given prefix."""
    try:
        cursor = conn.execute(
            "SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50", (f"%{prefix}%",))
        rows = cursor.fetchall()
        return "\n".join(r["timezone"] for r in rows)
    except sqlite3.Error as e: return f"Error: {e}"

if __name__ == "__main__": try: mcp.run(transport="stdio") finally: conn.close()
Introdução ao Model Context Protocol (MCP)

Boas práticas de segurança e produção

 

  • Consultas parametrizadas (?): nunca formate entrada de usuário ou LLM em SQL
    • Injeção por prompt → inserção maliciosa de código via prompts
SELECT timezone FROM locations WHERE timezone LIKE ? LIMIT 50
  • Prefira acesso ao banco somente leitura e com escopo reduzido para o servidor MCP
  • Aplique limites: máx. de linhas e timeouts
Introdução ao Model Context Protocol (MCP)

Vamos praticar!

Introdução ao Model Context Protocol (MCP)

Preparing Video For Download...