Skip to content

MCP tool groups chosen in AGENTS.md or env switches; release 5.2.0 - #10

Merged
IronAdamant merged 5 commits into
mainfrom
claude/tool-groups
Nov 5, 2026
Merged

IronAdamant merged 5 commits into
mainfrom
claude/tool-groups

Conversation

@IronAdamant

@IronAdamant IronAdamant commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Implements the suite's tool-group convention for wikifier and prepares 5.2.0. No tag pushed.

Groups (31 tools):

Group Tools
core (always on) session_bootstrap, prepare_edit, get_dependencies, get_dependents, get_file_wiki, list_paths, suggest_next_actions, update_maps
notes record_change, record_changes, record_deletion, search_journal, why_file, journal
health check_changes, mark_green, verify_wikis, health, validate, list_healable_stubs, heal_stubs, seed_source_content_hashes
map get_resolution_diagnostics, get_barrel_reports, get_incremental_status
cycles get_cycles
status list_core_tools, get_project_status, get_current_project_root, issues, get_files_needing_attention

How agents choose them:

  • AGENTS.md block: the first ```agent-tools block in AGENTS.md at the server's root (WIKIFIER_PROJECT_ROOT, else the cwd) may hold wikifier: tools … / wikifier: disable ….
  • Env override: WIKIFIER_TOOLS / WIKIFIER_DISABLE override those lines key by key.
  • Errors: an env mistake (unknown name, core in DISABLE) prints one line and exits 2. A block mistake becomes a warning in the initialize instructions and list_core_tools, and that line is ignored.
  • Live edits: the server stats AGENTS.md before each request and sends notifications/tools/list_changed before the response when the exposed list changes.
  • Capabilities: initialize always advertises tools.listChanged: true. With a block or a switch, its instructions also end with the groups line.
  • Default unchanged: with neither, tools/list is byte-identical to 5.1.0, and initialize differs only by listChanged. Both are checked against tests/fixtures/mcp_default_5.1.0.jsonl. A block nested in another fence (a docs example) is text; a test pins that this repo's own AGENTS.md examples switch nothing. The CLI ignores all of it.

tools/list size:

Configuration Size Tools
All groups on 22.7 KB 31
Without notes 18.2 KB
Without health 17.0 KB
Without map 20.8 KB
Without cycles 21.9 KB
Without status 19.4 KB
Recommended disable map, cycles, status 16.8 KB 22
tools core 6.6 KB 8

Docs:

  • README: "Tool groups" and "Choosing groups".
  • AGENTS.md and skills/run.md: "Choosing groups".
  • CHANGELOG: 5.2.0 - 2026-11-05.
  • Version 5.2.0 everywhere.
  • This repo's own AGENTS.md shows the lines in a text fence, so dogfooding keeps every tool.

Tests: tests/tool_groups.rs (16 tests, run against the real wikifier mcp). 102 tests pass locally, clippy is clean, and Rust 1.83 checks.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ

IronAdamant and others added 5 commits November 5, 2026 17:26
Implements the suite's tool-group convention. The 31 MCP tools are in
six groups: core (always on: bootstrap, lookups, dependencies, file
wikis, update_maps), notes (record_change and the journal), health,
map (resolution and barrel diagnostics), cycles, status (repeats of
bootstrap).

- Agents choose per project: the first fenced `agent-tools` block in
  AGENTS.md at the server's root may hold `wikifier: tools <list>` and
  `wikifier: disable <list>`. WIKIFIER_TOOLS / WIKIFIER_DISABLE override
  those lines key by key.
- Hidden tools leave tools/list; calling one returns isError naming the
  switch or block line to change.
- An env mistake (unknown name, core in DISABLE) prints one line and
  exits 2. A block mistake is a warning in the initialize instructions
  and list_core_tools, and that line is ignored.
- The server stats AGENTS.md before every request and sends
  notifications/tools/list_changed before the response when the
  exposed list changed. With a block or a switch, initialize advertises
  tools.listChanged and ends with the groups line.
- With neither, initialize and tools/list are byte-identical to the
  5.1.0 release (tests/fixtures/mcp_default_5.1.0.jsonl). The CLI
  ignores all of it.

tools/list: 22.7 KB all on; 18.2 KB without notes, 17.0 without health,
20.8 without map, 21.9 without cycles, 19.4 without status; 16.8 KB
(22 tools) for `disable map, cycles, status`; 6.6 KB for `tools core`.

tests/tool_groups.rs runs the real server: default unchanged, filters
by group and tool name, refusal text, exit 2, core protected, block
precedence and warnings, the live list_changed notice, and the fence
parser.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ
Version 5.2.0 in Cargo.toml/Cargo.lock and the docs that name it.
CHANGELOG "5.2.0 - 2026-11-05". README gets "Tool groups" (table,
overlaps, env example, sizes) and "Choosing groups"; AGENTS.md and
skills/run.md get "Choosing groups": what each group is for, when to
turn it off, and the line to add. Wikifier's own AGENTS.md shows the
lines in a text fence, not an agent-tools block, so dogfooding here
keeps every tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ
Generated by the wikifier binary (record-change, mark-green,
update-maps), not edited by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ
…ext.

Per the updated convention, initialize advertises
capabilities.tools.listChanged: true on every server, so an agent can
add an agent-tools block mid-session and the client refetches the list
without a restart. It is the only field of the default initialize reply
that differs from 5.1.0; the golden test now applies just that change.

An agent-tools block inside another fenced block (a docs example) was
already read as text; a new test pins it for this repository, which
dogfoods its own server: the "Choosing groups" examples in AGENTS.md
switch nothing and the repo keeps all 31 tools.

The test helper no longer unwraps writes to a server that already exited
2, which failed with a broken pipe on Linux CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ
Generated by the wikifier binary, not edited by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMYkogM3QWVjMLzWKGyjuJ
@IronAdamant
IronAdamant merged commit 698210b into main Nov 5, 2026
3 checks passed
@IronAdamant
IronAdamant deleted the claude/tool-groups branch November 5, 2026 06:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant