53 · O servidor MCP¶
O stalwart mcp dá ao seu assistente de programação com IA -- Claude Code, Cursor, VS Code -- toda a suíte como
ferramentas: o guardrail, construído com você e ensaiado nas suas próprias chamadas; o gateway; o caçador de falhas; o
red team; a verificação formal das suas regras e do grafo de um agente; e os certificados, conferidos na sua máquina. O
seu assistente faz cada passo pelo servidor e traz o resultado para você, com a página do console para
desenvolvedores que o mostra e o capítulo deste guia que o explica.
O servidor roda na sua máquina, por stdio. Ele chama o serviço da Stalwart só onde um passo já chama -- compilar uma planilha de regras, uma caça, um red team, uma prova --, e nunca chama um modelo: onde um passo precisa de um, como rascunhar uma planilha de regras a partir da sua política, o seu próprio assistente o faz, por um prompt, e o servidor confere o que ele fez.
Idiomas
O seletor lê turnos escritos em inglês e em português do Brasil (pt-BR). O idioma é escolhido, nunca adivinhado a partir do turno: na página Settings do console (Language the selector reads), em language numa requisição de plano, ou no settings.language do seu arquivo de vocabulário; sem nenhum deles, inglês. Um turno em português pode ser digitado com os acentos ou sem eles. O português europeu não é uma gramática que o seletor tenha, e um turno em qualquer outra língua não é lido.
Adicionando ao seu assistente¶
Na pasta do seu projeto:
$ stalwart mcp --config claude # imprime: claude mcp add stalwart -e STALWART_MCP_HOME=<esta pasta> -e QLS_API_KEY=<a sua chave> -- ...
$ stalwart mcp --config cursor # a entrada mcpServers para o Cursor
$ stalwart mcp --config vscode # a entrada servers para o VS Code
Rode-o na pasta do seu projeto: a configuração nomeia essa pasta (STALWART_MCP_HOME), então os arquivos do servidor
vão para ela, nunca para a pasta pessoal em que um cliente inicia servidores. Ponha a sua chave na configuração também:
um servidor lê o seu ambiente uma vez, ao começar, então uma chave definida depois exige iniciar o servidor de novo (o
status diz isso).
Depois peça ao seu assistente para chamar o status: ele responde com a pasta em que o servidor trabalha, se ele tem
a sua chave, o seu plano e quanto resta de cada medidor neste mês.
Como ele conduz o seu assistente¶
Um assistente usa o que um servidor mostra a ele, então o servidor mostra tudo e diz para onde ir depois:
- As instruções dele, que o seu assistente lê primeiro, nomeiam cada produto e a ferramenta de cada um, e dizem ao assistente para fazer cada passo por essas ferramentas, e não escrevendo código nem lendo o código-fonte do pacote.
- Toda resposta diz o que vem depois (
next): o que o passo não cobriu e a ferramenta que cobre. Depois de uma caça que não encontrou nada, por exemplo, ela diz o que a caça não leu, e que overify_rulesprova uma ação contra as suas regras. - Toda resposta que leva a uma página dá o endereço dela:
consolepara a página do console para desenvolvedores que mostra o resultado,guidepara o capítulo deste guia sobre o passo. Olinksdá todos os endereços de uma vez (abaixo). - O prompt
assurance-planconduz o seu assistente por cada nível em ordem, diz o que cada um cobre e o que usa do seu plano, e pergunta quais você quer.
Uma sessão que começa do zero é assim: status; catalogue_from_server no servidor das suas ferramentas;
writes_file, e os tipos que você confere; uma planilha de regras que o seu assistente rascunha a partir da sua
política em palavras simples, e que você lê; compile_rules e lint_rules; check_sequence nas chamadas de uma
conversa; hunt num projeto; e, onde você quer que fique provado, verify_rules no perfil proof e
check_certificate no que ele escreveu.
As ferramentas dele¶
Perguntando o que ele faz¶
| Ferramenta | Responde |
|---|---|
capabilities(language) |
todas as verificações, da própria lista do guardrail: o que barram e o que não conseguem, o que leem e as opções on-fail; onde ele pode rodar; versões; o que é garantido e o que não é |
explain_check(name, language) |
uma verificação inteira, com um exemplo permitido e um barrado e a sua seção do manual |
search_manual(question, language) |
as seções do manual que mais combinam, pelas palavras, em inglês ou português; sem modelo |
how_to(goal, language) |
receitas fixas: "proteger meu servidor MCP", "adicionar ao meu guard do Guardrails AI", "escrever uma regra para reembolsos acima de 100", "avaliar nos meus traces", ... |
explain_decision(decision_id) |
por que uma chamada registrada foi barrada: a verificação, a sua regra e o que ela leu |
status() |
se há uma chave, o plano dela, o que ela pode usar e quanto resta de cada medidor, e a pasta em que o servidor trabalha: leia antes de um passo que usa cota |
links(about, language) |
todo endereço de que uma pessoa precisa: cada página do console para desenvolvedores com o que ela guarda, e onde entrar; o capítulo do guia de cada produto; a referência da API, a documentação do pacote, o pacote e onde se cadastrar |
Construindo e ensaiando um guardrail¶
| Ferramenta | Faz |
|---|---|
catalogue_from_server(server, out) |
lê as ferramentas de um servidor MCP para tools.json: o endereço, uma resposta tools/list salva, ou o comando que o inicia (npx -y @playwright/mcp@latest), iniciado aqui, listado e parado |
writes_file(tools, out) |
rascunha tool_kinds.yaml: o tipo, o motivo e a origem de cada ferramenta, as incertas primeiro |
set_tool_kinds(changes, reasons) |
define tipos como o seu assistente propõe, registrados como source: assistant |
compile_rules(sheet, out_dir) |
compila rules.yaml com o serviço para compiled/ |
lint_rules(sheet, tools) |
uma regra para uma ferramenta que você não tem; uma escrita que nenhuma regra nomeia |
check_call(call, context) |
uma resposta de ensaio; nada roda |
check_sequence(calls, context, approve) |
o ensaio de uma sessão: cada chamada respondida com o que as anteriores rodaram, para que regras de ordem, limites e confirmações sejam testados como uma execução os encontra; uma chamada perguntada é respondida de novo com o sim de uma pessoa |
search_wordings(tools, language, checks, seconds) |
a busca de formulações das três verificações que leem o turno |
snippet(where, upstream) |
o código para python, guardrails-ai ou nemo, ou o catalogue.json e o gateway.yaml do gateway |
O check_call responde uma chamada sozinha. Regras de ordem (after), limites (at_most) e confirmações só aparecem
ao longo de uma conversa, então teste-os com o check_sequence: cada chamada é respondida com o que as anteriores
rodaram.
Medindo, caçando e fazendo red team¶
| Ferramenta | Faz |
|---|---|
replay(trace, format) |
a resposta de cada chamada; contagens por regra; as chamadas barradas; confirmações por 100 chamadas; tempo p50/p95; determinismo |
evaluate(labelled, format) |
alarmes falsos e falhas contra os seus rótulos, por regra |
counterfactual(trace, outcome_checker) |
a sua própria verificação de resultado, como rodou e sem as chamadas barradas |
hunt(sheet, properties, session_steps, profile, project, branch, commit) |
o caçador de falhas nas suas regras (o serviço, com a sua chave); com um project, a varredura fica guardada onde a página Findings do console para desenvolvedores a mostra, e a resposta traz o endereço dos achados do projeto e o da página de cada achado |
redteam(server) |
as ferramentas de um servidor MCP atrás do gateway, provadas para qualquer chamada (o serviço, com a sua chave) |
compare_with_gai(trace, guard) |
o seu guard do Guardrails AI sozinho, e com o nosso validador |
benchmark(name) |
busca os dados de companhia aérea ou varejo do tau2-bench nos seus commits fixados |
Provando¶
| Ferramenta | Faz |
|---|---|
verify_rules(action, without, sheet, profile, certificate) |
a verificação formal das suas regras: action pode rodar sem without? Sim, com a testemunha; não, provado com um certificado nos perfis proof e patch, e a palavra do solver no fast |
verify_graph(graph, catalogue, rules, certificate) |
o grafo de um agente verificado antes de ir para produção: toda rota até uma ação de risco sem a sua salvaguarda |
check_certificate(certificate, cnf) |
um certificado conferido aqui, offline, pelo verificador que o pacote traz (stalwart check) |
Os prompts dele¶
assurance-plan: cada nível de garantia em ordem -- construir, ensaiar, caçar, red team, provar, certificar, acompanhar --, o que cada um cobre e não cobre e o que usa do seu plano; o seu assistente pergunta quais você quer e faz só esses.build-guardrail: a construção inteira, em ordem: ferramentas, tipos, uma planilha de regras rascunhada a partir da sua política em palavras simples, compilar e verificar, ensaios, busca e caça, o trecho de código. O seu assistente rascunha a planilha; você a lê antes de ela ser usada.classify-tools: o seu assistente propõe tipos para as ferramentas de que a dedução não tem certeza.set-up-guardrail: uma receita dohow_to, seguida passo a passo.evaluate-guardrail:replayeevaluatenas suas chamadas, sem citar nada delas.
Os resultados no console para desenvolvedores¶
O que o servidor faz com o serviço fica listado no console para desenvolvedores, na sua organização:
- Findings: o
huntcom umproject(um nome; o projeto é criado na primeira vez) guarda a varredura nele, num branch e num commit quando você os informa. A resposta dá o endereço do projeto na página Findings e o de cada achado. Ali você aceita um achado com o motivo, ou o deixa para corrigir, e a próxima varredura do projeto lê as suas decisões (capítulo 28). - Jobs: cada caça, red team e prova é um job, com o seu estado, o seu veredito e os seus arquivos, entre eles um certificado (capítulo 9).
- Usage: o que cada medidor usou neste mês contra o seu limite -- o
statusdá os mesmos números ao seu assistente (capítulo 16).
O links dá ao seu assistente todos os endereços: cada página do console para desenvolvedores com o que ela guarda,
e onde entrar; o capítulo deste guia de cada produto; a referência da API, a documentação do pacote, o pacote e onde
se cadastrar. links(about="findings") restringe cada lista ao que o nomeia. O capítulo 5
tem todas as páginas do console.
Uma prova, ou a palavra do solver¶
O verify_rules faz uma pergunta -- esta ação pode rodar sem esta condição? -- e a responde no perfil que você indica
(capítulo 10):
- Sim vem com a testemunha: a conversa em que ela roda. Corrija a regra que ela atravessa, compile e pergunte de novo.
- Não, em
proofoupatch, é uma prova derivada, com um certificado. O servidor o grava emcertificates/, e ocheck_certificateo confere na sua máquina, offline, com o verificador que o pacote traz (capítulo 7). - Não, em
fast, é a palavra do solver, sem certificado. A resposta diz isso, e diz para perguntar de novo emproofpara ter um.
Uma prova responde à pergunta feita, e a nenhuma outra (o que isto prova). O verify_graph
prova o grafo de um agente antes de ele ir para produção (capítulo 47).
Os arquivos que ele lê e grava¶
Todo caminho fica dentro da pasta em que o servidor trabalha; um caminho que sairia dela é recusado.
| Arquivo | Gravado por | Lido por |
|---|---|---|
tools.json |
catalogue_from_server |
todas as ferramentas do guardrail |
tool_kinds.yaml |
writes_file, set_tool_kinds |
todas as ferramentas do guardrail |
rules.yaml |
o seu assistente, a partir da sua política | compile_rules, lint_rules, hunt, verify_rules |
compiled/ |
compile_rules |
check_call, check_sequence, replay, evaluate |
catalogue.json, gateway.yaml |
snippet com gateway |
stalwart gateway |
certificates/ |
verify_rules, verify_graph |
check_certificate |
Plano e cota¶
Caças, red teams e provas são do serviço e contam no seu plano; o status diz o que resta antes de o seu assistente
começar uma, e uma prova no perfil proof é contada à parte (capítulo 16). Construir, ensaiar,
reproduzir chamadas e conferir um certificado rodam na sua máquina, e não contam nada.
Os limites¶
- O servidor conduz o seu assistente; ele não o obriga a seguir. Um assistente que escreve o próprio código em vez disso ainda pode, e os resultados dele são dele.
- Um relatório traz nomes de ferramentas, nomes de regras, contagens, ids de decisão e digests, nunca um valor de argumento nem uma palavra que uma pessoa disse. Para ver a testemunha de um achado inteira, abra a página dele no console.
- O red team lê o servidor das suas ferramentas, não o roteamento próprio do seu agente: o
verify_graphé o passo para isso.