hermes-agent/website/docs/user-guide/features
Teknium e7172ab1ba feat(mcp): fnmatch glob support in tools.include/exclude filters
The include/exclude filter matched exact names only — glob-style entries
('*_radar_*') silently matched nothing, so a Cloudflare flat-mode config
meant to trim 3,320 tools to ~1,900 actually registered 3,319. Unmatched
patterns produced no warning.

- matches_name_filter(): exact membership first (O(1) for literal lists),
  then fnmatch.fnmatchcase for entries containing * ? [ — same pattern
  semantics as approvals.deny. Entries without metacharacters stay
  strictly literal ('docs' never matches 'docs_search').
- _should_register() uses it for both include and exclude (symmetric)
- hermes mcp tools picker (mcp_config.py) pre-selection uses the same
  matcher so the UI agrees with runtime registration

E2E against the live Cloudflare capture with the real exclude list:
3,320 -> 1,905 surviving (1,415 excluded); radar/DLP gone,
purge_cache/dns_records kept. 220/220 mcp_tool tests (4 new).
2026-07-26 08:26:09 -07:00
..
_category_.json
…
acp.md
…
api-server.md
…
batch-processing.md
…
browser.md
…
built-in-plugins.md
…
code-execution.md
…
codex-app-server-runtime.md
…
computer-use.md
…
context-files.md
…
context-references.md
…
credential-pools.md
…
cron.md
…
curator.md
…
delegation.md
…
deliverable-mode.md
…
extending-the-dashboard.md
…
fallback-providers.md
…
goals.md
…
honcho.md
…
hooks.md
…
image-generation.md
…
kanban-tutorial.md
…
kanban-worker-lanes.md
…
kanban.md
…
lsp.md
…
mcp.md
…
memory-providers.md
…
memory.md
…
mixture-of-agents.md
…
overview.md
…
personality.md
…
pets.md
…
plugins.md
…
provider-routing.md
…
skills.md
…
skins.md
…
spotify.md
…
subscription-proxy.md
…
tool-gateway.md
…
tool-search.md
…
tools.md
…
tts.md
…
vision.md
…
voice-mode.md
…
web-dashboard.md
…
web-search.md
…
x-search.md
…