tool_name_glob em uma regra. É uma gramática deliberadamente pequena e
case-sensitive (sem regex, sem backtracking) de modo que uma regra se lê da
mesma forma que você digitaria um nome de ferramenta da aba Discovered
tools, e a correspondência permanece de tempo linear no hot path do relay.
Esta página é a referência de gramática focada nesse único campo. Para onde um
glob se posiciona dentro de uma regra completa — a superfície, cláusulas de
argumento, listas de egress, veredito — veja
Schema de regra e a referência profunda do
motor em Regras do Firewall.
1. Por que um glob de nome de ferramenta em vez de regex
As ferramentas são convencionalmente nomeadas com namespace server.tool ou
category.action (shell.exec, db.query, community.http_fetch). Um glob
deixa uma regra capturar uma família inteira — shell.* para cada verbo shell,
*.delete para um verbo através de servidores — sem os perigos de um regex em um
caminho que roda em cada chamada de ferramenta.
A gramática é intencionalmente minúscula. A correspondência é case-sensitive
— nomes de ferramenta MCP são convencionalmente minúsculos-com-pontos, então um
case-fold surpreenderia um autor que copia-cola um nome direto da visão de
Discovered tools. Não há backtracking catastrófico porque não há motor de regex
por trás dele; cada padrão abaixo é um punhado de operações de string.
2. As cinco formas de padrão
Umglob de nome de ferramenta é exatamente uma dessas formas. Qualquer coisa
que não se encaixe nas formas wildcard é tratada como uma correspondência
literal exata.
| Padrão | Forma | Corresponde a |
|---|---|---|
"" ou * | qualquer | Cada chamada de ferramenta. |
foo.* | prefixo | foo.bar, foo.exec — não foo sozinho. |
*.exec | sufixo | shell.exec, db.exec, e exec sozinho. |
*.shell.* | infixo | local.shell.exec, byo.shell.run. |
shell.exec | exato | Apenas a string literal shell.exec. |
3. Prefixo — foo.*
Corresponde a qualquer ferramenta cujo nome começa com foo. e tem ao menos
mais um caractere depois do ponto.
Corresponde
shell.exec, shell.run, shell.rm para o padrão shell.*Não corresponde
shell sozinho (o prefixo exige o ponto final e algo depois dele)shell.* cobre cada verbo shell que um servidor possa adicionar
depois.
4. Sufixo — *.exec
Corresponde a qualquer ferramenta cujo nome termina com .exec, ancorado em um
ponto — e também corresponde ao verbo sem namespace exec por si só.
O sufixo permanece ancorado — ele não corresponde a uma palavra parcial:
| Padrão | shell.exec | exec sozinho | shell.execute |
|---|---|---|---|
*.exec | corresponde | corresponde | sem correspondência |
*.execute seria necessário para shell.execute; o sufixo só dispara em uma
fronteira de ponto ou no início da string, nunca no meio da palavra.
5. Infixo — *.shell.*
Corresponde a qualquer nome de ferramenta que contenha .shell. como infixo,
com ao menos um caractere de cada lado. É assim que uma regra cobre um verbo
onde quer que um servidor BYO-MCP o nomeie.
local.shell.exec, byo.shell.run e qualquer outra
forma <server>.shell.<verb>. Ela não corresponde a shell sozinho ou a um
.shell. sozinho sem nada em volta — o requisito de caractere-de-cada-lado
mantém o infixo honesto.
6. Exato — shell.exec
Qualquer coisa que não seja uma das formas wildcard acima é uma correspondência
de string literal. shell.exec corresponde a shell.exec e nada mais. Esta é a
escolha certa quando você quer nomear uma ferramenta específica — combine-a com
uma cláusula de argumento para
estreitar ainda mais (“bloquear shell.exec apenas quando o comando for
rm -rf”).
7. Um exemplo concreto
Digamos que você queira negar cada verbo shell destrutivo independentemente de como um servidor MCP usa namespace, enquanto deixa todo o resto fazer audit. No editor de regras do console (escritas exigem Developer+), a metade de correspondência da regra é um único glob de infixo:firewall_policy_id na chave), e a regra agora
captura local.shell.exec, byo.shell.run e acme.shell.rm — três servidores,
um glob. Quer confirmar que ela dispara no que você espera antes de depender
dela? Use Testar regras — ele retorna o
veredito, a regra correspondente e o motivo sem despachar nada.
Um glob estreita qual ferramenta. Para estreitar com quais argumentos,
combine com AND uma cláusula de argumento
à mesma regra; para governar uma ferramenta apenas quando uma skill particular a
possui, adicione um glob de nome de skill (mesma gramática, correspondido
contra a skill proprietária). Ambos são cobertos em
Regras do Firewall.
8. Referência rápida
O verbo sem namespace é coberto por um glob de sufixo?
O verbo sem namespace é coberto por um glob de sufixo?
Sim.
*.exec corresponde a shell.exec, db.exec, e o exec sem
namespace. Globs de prefixo (foo.*) não correspondem ao namespace sem
sufixo foo — apenas nomes com algo depois do ponto.A estrela do meio em foo.*.bar funciona?
A estrela do meio em foo.*.bar funciona?
Não. A única forma de wildcard-no-meio que o motor entende é o infixo
simétrico
*.X.*. foo.*.bar cai para uma correspondência literal exata.
Use duas regras ou uma cláusula de argumento em vez disso.A correspondência é case-sensitive?
A correspondência é case-sensitive?
Sim.
Shell.Exec e shell.exec são ferramentas diferentes. Copie nomes
verbatim da aba Discovered tools.E se o glob for malformado?
E se o glob for malformado?
Qualquer forma que não seja uma das cinco acima é tratada como uma
correspondência exata — ela simplesmente não corresponderá a um nome de
ferramenta real, então a regra nunca dispara em vez de corresponder a algo
inesperado. O console valida as regras ao salvar.
Relacionados
Allow-listing de ferramentas
Use globs para permitir um conjunto conhecido e negar o resto.
Validar argumentos
Combine com AND uma cláusula de argumento JSONPath a um glob.
Schema de regra
Cada campo de uma regra, em um único lugar.
