Skip to main content
Your app often knows things Bag of words doesn’t, like the id of the chat a question came from, the message id, or the ticket being discussed. Dynamic params let your app send those values with each question. Bag of words then adds them to every MCP tool call made while answering it.
Available on MCP connections, as part of User context forwarding.

How it works

  1. An admin lists which keys the connection accepts, with a default for each.
  2. Your app sends values for those keys in prompt.metadata when it calls the completions API.
  3. Every MCP tool call for that question carries the values in the metadata argument (custom_metadata by default).
For each listed key: The model never sees these keys and cannot change their values.

Set it up

  1. Open the MCP connection and expand Advanced → User context forwarding.
  2. Under Tool metadata, turn on Dynamic params.
  3. Enter the allowed keys as a JSON object of { "key": default }:
  1. Save.

Send values from your app

Add metadata to the prompt of a completions request. It works the same for streaming and non-streaming requests.

What the MCP server receives

With the allow-list above and a locked user_email field, each tool call includes:

Limits

  • metadata must be a JSON object with non-empty keys, up to 8 KB. Anything else returns 422.
  • The allow-list must be a JSON object, up to 8 KB. An invalid list is rejected when you save.
  • Values are stored with the question. Members of the report can see them through the API; public share links never show them.
Values come from your app and aren’t verified. Don’t use them to decide who the user is. For identity, use a locked forwarded field, which always wins over a dynamic param of the same name.