diff --git a/src/scribe/mcp/server.py b/src/scribe/mcp/server.py index 7eb1c5a..4d8bd73 100644 --- a/src/scribe/mcp/server.py +++ b/src/scribe/mcp/server.py @@ -131,6 +131,12 @@ _READ_ONLY_TOOLS = frozenset({ # looked at names that had one (#3191). rule_history records a pull the way # the getters above do. "rules_due_for_verification", "rule_history", + # What each retrieval surface's floor and budget currently are, and what + # has been changed about them (#4102). Both pure reads; `tune_retrieval` is + # the write and is deliberately NOT here. Read access matters more than + # usual for these two: a session that cannot see the bar in force, or the + # reason it was last moved, is a session that will move it again blind. + "retrieval_surfaces", "retrieval_tuning_history", }) # Every tool that WRITES, by name. Nothing reads this set at runtime — a tool @@ -166,6 +172,9 @@ _WRITE_TOOLS = frozenset({ "create_rule", "create_project_rule", "update_rule", "move_rule", "delete_rule", "create_preference", "update_preference", "relate_rules", "unrelate_rules", "mark_rule_verified", + # retrieval tuning — a write in both senses: it moves the number the arm + # reads, and it appends the reason to the audit trail (#4102). + "tune_retrieval", # trash "restore", "purge_trash", })