Skip to main content
Tool permissions control, per navigator instance, which tools the navigator may use and how — always_execute, require_approval, or disabled. After you provision a project per customer, each navigator instance starts with default permissions. This recipe copies the exact policy you’ve configured on a model project onto the matching navigators in your other projects. The recipe reads the model instance’s policy as a tool_id → mode map and applies the same mode to the matching tools on each target instance. This assumes both projects have the same servers connected (which the provisioning recipe guarantees); any tool that doesn’t exist on the target is simply skipped.
When you provision a new project with POST /projects/from-seed, the seed’s tool-permission policy is copied automatically. Use this recipe to push a policy onto projects that already exist.

Endpoints used

The permission mode is one of:
Prefer the mode field over the deprecated enabled boolean. enabled still works (true → always_execute, false → disabled) but it can’t express require_approval.

The procedure

1

Locate the model navigator instance

GET /navigator-instances?project_id={model_project_id} and pick the instance for the navigator you want to copy (match on navigator_id or navigator_name).
2

Read the model policy

GET /navigator-instances/{model_instance_id}/tool-permissions and build a tool_id → mode map.
3

For each target project, find the matching instance

GET /navigator-instances?project_id={target_project_id} and locate the instance with the same navigator_id.
4

Apply the policy

Read the target instance’s permissions to know which tool_ids it actually has, then PUT those tool ids with the mode from the model map. Tools absent on the target are skipped.

Full copy script

This copies one navigator’s policy from a model project to a list of target projects. Run it after provisioning, or whenever you change the model policy and want to roll it out. The Python and TypeScript tabs run the whole loop; the cURL tab shows the individual calls.
copy_tool_permissions.py
List endpoints return up to 100 items per call. If a project has more than 100 navigators, follow meta.next_cursor from the response (passing it back as the cursor query parameter) until meta.has_next is false.
If a navigator’s projects might have different servers connected, match on (server_name, tool_name) instead of tool_id to be safe — read both instances’ permission lists (which include server_name and tool_name) and build the target update from tools that match by name. With identical server sets, matching on tool_id as shown above is simplest and exact.

Next steps

Provision customer projects

Create the projects and connect the servers/navigators this recipe configures.

Tool suggestions

How the navigator discovers and selects tools at runtime.

REST API Reference

Full request/response schemas for the tool-permission endpoints.

Platform Authentication

Create and manage the platform access token these recipes use.