Skip to main content

Path format

Tool paths are dot-separated lowercase identifiers validated against:
^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$
  • Must have at least two segments (e.g., github.issues minimum, typically three)
  • Each segment starts with a lowercase letter
  • Segments can contain lowercase letters, digits, and underscores
  • Segments are separated by dots

Convention

The recommended pattern is service.resource.action:
PathServiceResourceAction
github.issues.listgithubissueslist
github.issues.creategithubissuescreate
gmail.messages.readgmailmessagesread
calendar.events.listcalendareventslist

Display names

Tool names use Title Case with spaces:
PathName
github.issues.listList Issues
github.issues.createCreate Issue
github.repos.searchSearch Repositories
gmail.messages.listList Gmail Messages
slack.messages.postPost Message

Tools proxy mapping

Inside sandbox scripts, the tools proxy translates property chains to dot paths:
// This call:
await tools.github.issues.list({ owner: "org", repo: "repo" });

// Invokes tool path: "github.issues.list"
Calling a namespace (not a leaf tool) throws a helpful error:
await tools.github.issues();
// Error: "github.issues" is a namespace, not a tool. Use tools.search() to find tools.

Namespace and plugin ID

A tool’s path prefix usually matches the plugin ID (github plugin -> github.* tools). However, multi-service plugins may use service-specific prefixes:
  • Plugin ID google-workspace uses gmail.* and calendar.* prefixes
  • This is intentional — tools are namespaced by the service they interact with