npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@safecore/aip-mcp-ajx

v1.1.1

Published

Busca de dados de controle de acesso em condomínios usando Qdrant e rastreamento integrado com Firestore.

Readme

AJX MCP

Um servidor MCP (Model Context Protocol) para buscar e consultar dados de controle de acesso de condomínios armazenados no Qdrant e integrado com rastreamento de visitantes via Firestore.

🏢 Sobre

Este servidor MCP permite realizar buscas avançadas em registros de acesso de condomínios, incluindo:

  • Busca semântica por texto livre
  • Filtros estruturados por pessoa, morador, veículo, data, etc.
  • Histórico de acesso de pessoas específicas
  • Lista de visitantes por morador
  • Consulta de pessoas ainda dentro do condomínio
  • Busca por placa de veículo
  • NOVO: Rastreamento de visitantes com SafeTags
  • NOVO: Visualização de histórico de movimentação em mapas interativos
  • NOVO: Integração com Firebase/Firestore para dados de rastreamento

🚀 Instalação

  1. Clone o repositório:
git clone <repo>
cd aip-mcp-ouroville
  1. Instale as dependências:
pnpm install
  1. Configure as variáveis de ambiente:
cp .env.example .env

Edite o arquivo .env com suas configurações:

# Configuração do servidor MCP
MCP_SERVER_NAME=condominio-access-mcp
MCP_SERVER_VERSION=1.1.0

# Configuração do Qdrant
QDRANT_URL=http://localhost:6333
QDRANT_API_KEY=sua_api_key_aqui
QDRANT_COLLECTION_NAME=condominio_access

# Configuração da OpenAI para embeddings
OPENAI_API_KEY=sua_openai_api_key
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

# Configuração do Firebase/Firestore
FIREBASE_API_KEY=sua_firebase_api_key
FIREBASE_AUTH_DOMAIN=seu-projeto.firebaseapp.com
FIREBASE_PROJECT_ID=seu-projeto
FIREBASE_STORAGE_BUCKET=seu-projeto.appspot.com
FIREBASE_MESSAGING_SENDER_ID=seu_messaging_sender_id
FIREBASE_APP_ID=seu_app_id
  1. Compile o projeto:
pnpm run build

🔧 Configuração

Pré-requisitos

  • Node.js 18+
  • Qdrant Server rodando
  • Coleção no Qdrant com os dados de acesso do condomínio

Estrutura dos Dados

O servidor espera que os dados no Qdrant sigam a estrutura definida nos tipos TypeScript (src/types.ts), baseada no payload fornecido.

Configuração do MCP

Para usar este servidor com clientes MCP, adicione a configuração apropriada ao seu cliente. Exemplo para Claude Desktop:

{
  "mcpServers": {
    "condominio-access": {
      "command": "node",
      "args": ["./dist/index.js"],
      "cwd": "/caminho/para/aip-mcp-ouroville"
    }
  }
}

🛠️ Ferramentas Disponíveis

1. buscar_acesso_texto

Busca registros usando busca semântica por texto livre.

Parâmetros:

  • query (obrigatório): Texto para busca
  • limit (opcional): Número máximo de resultados (padrão: 10)
  • offset (opcional): Número de resultados para pular (padrão: 0)

Exemplo:

{
  "query": "ALECSANDER SILVA",
  "limit": 5
}

2. buscar_acesso_filtros

Busca com filtros estruturados específicos.

Parâmetros:

  • query (opcional): Busca semântica adicional
  • pessoa_nome (opcional): Nome da pessoa
  • pessoa_documento (opcional): Documento da pessoa
  • morador_nome (opcional): Nome do morador visitado
  • residencia_numero (opcional): Número da residência
  • residencia_rua (opcional): Rua da residência
  • veiculo_placa (opcional): Placa do veículo
  • data_inicio (opcional): Data início (YYYY-MM-DD)
  • data_fim (opcional): Data fim (YYYY-MM-DD)
  • ainda_dentro (opcional): Se ainda está dentro
  • tem_veiculo (opcional): Se possui veículo
  • periodo_dia (opcional): manha, tarde, noite
  • dia_semana (opcional): segunda, terca, etc.
  • limit (opcional): Número máximo de resultados
  • offset (opcional): Número de resultados para pular

3. buscar_pessoas_dentro

Lista pessoas que ainda estão dentro do condomínio.

Parâmetros:

  • limit (opcional): Número máximo de resultados (padrão: 10)

4. buscar_historico_pessoa

Busca histórico completo de uma pessoa por documento.

Parâmetros:

  • documento (obrigatório): Documento da pessoa
  • data_inicio (opcional): Data início (YYYY-MM-DD)
  • data_fim (opcional): Data fim (YYYY-MM-DD)
  • limit (opcional): Número máximo de resultados (padrão: 20)

5. buscar_visitas_morador

Busca todas as visitas para um morador específico.

Parâmetros:

  • morador_nome (obrigatório): Nome do morador
  • data_inicio (opcional): Data início (YYYY-MM-DD)
  • data_fim (opcional): Data fim (YYYY-MM-DD)
  • limit (opcional): Número máximo de resultados (padrão: 20)

6. buscar_por_veiculo

Busca registros por placa de veículo.

Parâmetros:

  • placa (obrigatório): Placa do veículo
  • limit (opcional): Número máximo de resultados (padrão: 10)

7. verificar_conexao

Verifica a conexão com o Qdrant e a existência da coleção.

Parâmetros: Nenhum

🏃‍♂️ Executando

Desenvolvimento

npm run dev

Produção

npm run build
npm start

📊 Formato dos Dados

O servidor trabalha com registros de acesso que contêm informações sobre:

  • Pessoa: Nome, documento, cidade, telefone
  • Acesso: Data/hora de entrada e saída, tempo de permanência
  • Destino: Morador visitado, residência, endereço
  • Veículo: Placa, marca, modelo, cor (se aplicável)
  • Metadados: Período do dia, dia da semana, terminal usado

🔍 Exemplos de Uso

Buscar por nome de pessoa

{
  "tool": "buscar_acesso_texto",
  "arguments": {
    "query": "ALECSANDER DIAS DA SILVA"
  }
}

Buscar visitas para uma residência específica

{
  "tool": "buscar_acesso_filtros",
  "arguments": {
    "residencia_numero": "236",
    "data_inicio": "2025-03-01",
    "data_fim": "2025-03-31"
  }
}

Verificar quem ainda está dentro

{
  "tool": "buscar_pessoas_dentro",
  "arguments": {
    "limit": 20
  }
}

Buscar por placa de veículo

{
  "tool": "buscar_por_veiculo",
  "arguments": {
    "placa": "EHP1389"
  }
}

� Ferramentas de Rastreamento (Novas)

8. buscar_rastreamento_visitante

Busca informações de rastreamento de um visitante no Firestore.

Parâmetros:

  • nome_visitante (obrigatório): Nome do visitante para buscar
  • incluir_mapa_html (opcional): Se deve incluir mapa HTML (padrão: false)
  • incluir_mapa_svg (opcional): Se deve incluir mapa SVG (padrão: false)

9. buscar_acesso_com_rastreamento

Busca registros de acesso e informações de rastreamento combinados.

Parâmetros:

  • query (opcional): Texto para busca semântica
  • pessoa_nome (opcional): Nome da pessoa
  • pessoa_documento (opcional): Documento da pessoa
  • morador_nome (opcional): Nome do morador visitado
  • limite_registros (opcional): Número máximo de registros (padrão: 5)
  • incluir_mapa_html (opcional): Se deve incluir mapa HTML (padrão: false)
  • incluir_mapa_svg (opcional): Se deve incluir mapa SVG (padrão: true)

�🛡️ Segurança

  • Configure adequadamente as credenciais do Qdrant e Firebase no arquivo .env
  • Mantenha o arquivo .env fora do controle de versão
  • Use HTTPS em produção
  • Implemente autenticação adequada conforme necessário
  • Proteja adequadamente as credenciais do Firebase

📝 Logs e Debugging

Os logs são enviados para stderr e incluem:

  • Status de inicialização do servidor
  • Erros de conexão com Qdrant
  • Erros de execução de ferramentas

🤝 Contribuindo

  1. Fork o projeto
  2. Crie uma branch para sua feature
  3. Commit suas mudanças
  4. Push para a branch
  5. Abra um Pull Request

📄 Licença

MIT License - veja o arquivo LICENSE para detalhes.

🐛 Problemas Conhecidos

  • O sistema de embeddings está usando valores mock - em produção, integre com um modelo real
  • Algumas validações de tipos podem precisar de ajustes conforme a estrutura real dos dados
  • Performance pode variar dependendo do tamanho da coleção Qdrant

🔮 Próximas Funcionalidades

  • [ ] Integração com modelos de embedding reais
  • [ ] Cache de resultados
  • [ ] Exportação de relatórios
  • [ ] Alertas e notificações
  • [ ] Interface web para administração