# 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.