MCP Server

Painel Sintético Concorde

io.github.caio-sartoratto/painel-sintetico-concorde
Data & Analytics Search & Research Public & reachable MCP 2025-11-25

What this MCP does

Provides access to a calibrated panel of synthetic Brazilian banking consumers, statistical facts, personas, financial institutions, reviews, and privacy-preserving research sampling.

avaliar_pergunta
Fronteira de confiança (classificação LOCAL, preserva privacidade). NÃO recebe a pergunta: devolve a RUBRICA para VOCÊ (assistente) classificar a pergunta do usuário no seu próprio contexto, sem enviá-la ao servidor. Bandas: 'inferivel' (pode rodar), 'arriscado' (rode com ressalva), 'humano' (NÃO pergunte a persona sintética — exige estado vivido). Aplique antes de preparar_pesquisa.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
buscar_fatos
Busca nos 105 fatos estatísticos. Modos: texto livre (busca em métrica/fonte/corpo), por eixo (por-classe, por-regiao, por-genero, por-investidor, por-divida, por-idade, por-fonte-renda, por-composto, populacional), ou por persona_id (fatos cujo filtro casa com a persona).
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'eixo': {'type': 'string', 'description': 'Eixo de segmentação'}, 'texto': {'type': 'string', 'description': 'Busca textual livre'}, 'persona_id': {'type': 'string', 'description': 'Retorna fatos aplicáveis a esta persona'}, 'incluir_corpo': {'type': 'boolean', 'default': False, 'description': 'Incluir o corpo markdown completo dos fatos'}}}
filtrar_personas
Filtra as 787 personas pela DSL determinística do painel. Ex.: "classe_social == 'Classe C' & divida_ativa == 'Sim' & regiao == 'Nordeste'". Vazio retorna todas. Retorna contagem e mini-perfis (até `limite`).
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'filtro': {'type': 'string', 'description': 'Expressão DSL: campo OP valor & ... (OP: == != > < >= <= in entre)'}, 'limite': {'type': 'integer', 'default': 30, 'maximum': 100, 'minimum': 1, 'description': 'Máximo de mini-perfis retornados'}}}
get_distribuicoes
Tabelas de calibração do painel: CSVs de distribuição (pesos do sorteio original) e registro de taxas. Sem nome, lista os arquivos.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'arquivo': {'type': 'string', 'description': "Nome do CSV, 'manifest.md' ou 'taxas'"}}}
get_instituicao
Ficha de uma instituição financeira (cadastro, volumetria, reputação, reviews). 12 bancos tradicionais e digitais. Sem nome, lista as disponíveis.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'nome': {'type': 'string', 'description': "Ex.: 'santander', 'nubank'"}}}
get_personas
Fichas completas de até 10 personas por id (atributos + Grounding com fatos/fontes + História). Use para dar voz às personas com ancoragem nos dados. IMPORTANTE: fatos marcados _composicao_ são P(público | métrica), o inverso de propensão — não os leia como probabilidade da persona; fatos _referencia_ não são proporção de pessoas.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'minItems': 1, 'description': "Ex.: ['PERS_023', 'PERS_041']"}}}
listar_vozes
Vozes verbatim REAIS (reviews, relatos) por tema: atendimento, bloqueio, canais, credito, endividamento, gestao-financeira, golpes, pix, tarifas (busca por substring no id/tema). Sem tema, lista todas as 17. Representatividade não-populacional — use como ilustração de linguagem, não como estatística.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tema': {'type': 'string', 'description': 'Filtro por tema/id'}, 'completo': {'type': 'boolean', 'default': True, 'description': 'Incluir texto completo'}}}
preparar_pesquisa
Prepara uma pesquisa de fan-out ISOLADO por persona (mede sem convergência). A PERGUNTA do usuário NÃO é enviada ao servidor (privacidade): você a classifica localmente pela 'fronteira' e a injeta você mesmo em cada pacote. Sorteia N personas e devolve UM pacote por persona (ficha + formato de resposta) + o protocolo para o HOST disparar UMA tarefa/subagente isolado por pacote — cada um responde só a SUA persona, sem ver as outras. A agregação é feita LOCALMENTE; o servidor não recebe nem armazena nenhuma resposta. Formatos: 'escolha' (opção única → distribuição), 'pontuar' (nota 0-10 por atributo → média+desvio por opção, recomendado para 'o que importa mais' e mais robusto a colapso), 'escala' e 'aberta'. Pode filtrar o segmento (classe, idade, região, etc.) pela DSL.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'n': {'type': 'integer', 'default': 12, 'maximum': 30, 'minimum': 1, 'description': 'Quantas personas sortear (teto 30, para proteger a base e o custo de tokens do host).'}, 'seed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Opcional. Por padrão o sorteio é ALEATÃ\x93RIO e o seed usado é devolvido no resultado â\x80\x94 salve-o para reproduzir a MESMA amostra depois. Passe um número só se quiser repetir uma amostra especÃ\xadfica.'}, 'filtro': {'type': 'string', 'description': 'Filtro DSL do segmento â\x80\x94 recorta por classe, idade, região, banco, dÃ\xadvida, etc. Ex.: "classe_social in [\'Classe A\'; \'Classe B\'] & idade > 30 & se_investe == \'Sim\'". Vazio = população toda.'}, 'opcoes': {'type': 'array', 'items': {'type': 'string'}, 'description': "Opções fechadas quando formato='escolha' ou 'pontuar'. Ex.: ['Versão A', 'Versão B']"}, 'formato': {'enum': ['escolha', 'pontuar', 'escala', 'aberta'], 'type': 'string', 'default': 'escolha', 'description': "escolha=opção única fechada (gera distribuição, mas pode colapsar em amostra enviesada); pontuar=cada persona dá nota 0-10 a CADA opção (gera média+desvio por opção, preserva a preferência secundária â\x80\x94 recomendado para 'o que importa mais'); escala=uma nota numérica; aberta=sem número, só temas/verbatim."}, 'escala_max': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Máximo da escala quando formato='escala' (ex.: 5)."}, 'escala_min': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "MÃ\xadnimo da escala quando formato='escala' (ex.: 1)."}}}
sortear_amostra
Sorteia uma amostra aleatória de personas (opcionalmente dentro de um filtro DSL). O painel já reflete as distribuições reais, então a amostra uniforme é representativa do recorte.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['n'], 'properties': {'n': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Tamanho da amostra'}, 'seed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Semente para reprodutibilidade'}, 'filtro': {'type': 'string', 'description': 'Filtro DSL opcional'}}}
visao_geral
Visão geral do Painel Sintético Concorde: o que é, contagens, campos disponíveis das personas e como usar as demais ferramentas. Chame primeiro.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Added
get_distribuicoes
Sept. 17, 2026, 12:40 p.m.
Added
get_instituicao
Sept. 17, 2026, 12:40 p.m.
Added
listar_vozes
Sept. 17, 2026, 12:40 p.m.
Added
buscar_fatos
Sept. 17, 2026, 12:40 p.m.
Added
get_personas
Sept. 17, 2026, 12:40 p.m.
Added
preparar_pesquisa
Sept. 17, 2026, 12:40 p.m.
Added
sortear_amostra
Sept. 17, 2026, 12:40 p.m.
Added
filtrar_personas
Sept. 17, 2026, 12:40 p.m.
Added
avaliar_pergunta
Sept. 17, 2026, 12:40 p.m.
Added
visao_geral
Sept. 17, 2026, 12:40 p.m.