# Symptom
A tool's JSON schema (what the model sees) contains `config` or `runtime` parameters, or calls fail because the model tries to fill them.
## Confirm
Print the tool's args schema and look for `config` or `runtime` keys.
## Cause
You named your own parameters `config` or `runtime`. Those names are reserved: the ToolNode injects runtime info itself, and your parameters leak into the model-facing schema.
## Fix
Use the ToolRuntime annotation; the parameter is injected at call time and excluded from the schema:
```python
from langchain.tools import tool, ToolRuntime
@tool
def my_tool(query: str, runtime: ToolRuntime) -> str:
# Do something with the query.
state = runtime.state
...
```
## Verify
Re-print the schema: only your real arguments remain. Invoke the tool through the agent and confirm the runtime values (state, context, store) are available inside.