You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`readOnlyHint`|`false`| If true, the tool does not modify its environment. | Always relevant |
70
+
|`destructiveHint`|`true`| If true, the tool may perform destructive updates to its environment. | Irrelevant when `readOnlyHint` is true |
71
+
|`idempotentHint`|`false`| If true, calling the tool repeatedly with the same arguments will have no additional effect on its environment. | Irrelevant when `readOnlyHint` is true |
72
+
|`openWorldHint`|`true`| If true, this tool may interact with an "open world" of external entities (outside of the tool's domain). | Always relevant |
73
+
74
+
### Pragmatic Annotation Guidelines
75
+
76
+
For practical tool design, consider these guidelines:
77
+
78
+
- Use `destructiveHint: true` for tools that **delete** records or data
79
+
- Use `destructiveHint: false` for tools that **modify** content (even if original is overwritten).
80
+
- Use `idempotentHint: true` for tools that produce the same logical result regardless of call count. Ignore metadata changes (timestamps, access logs, etc.). Focus on the core operation outcome.
81
+
- Use `idempotentHint: false` for tools that produce a different result each time they are called.
82
+
- Use `openWorldHint: true` for tools that interact with systems external to your application.
-`increment_counter(id: 123)` - **Non-destructive, Not idempotent**
89
+
90
+
This approach prioritizes **practical usability** over theoretical precision because being pedantic about `updatedAt` timestamps makes annotations effectively meaningless.
0 commit comments