Link decisions to chats, issues and pull requests
Send metadata so your team can find each decision in the log by thread, issue, PR or person.
Add metadata to a decision to say where it came from and for whom. The decision log shows it, filters by it, and finds it with its search. It is not sent to the model and does not change the answer.
{
"metadata": {
"conversation": {
"platform": "slack",
"channel": "#data-team",
"thread_url": "https://northwind.slack.com/archives/C04DATA/p1759561800123456"
},
"issue": {
"tracker": "linear",
"url": "https://linear.app/northwind/issue/DATA-398",
"key": "DATA-398",
"title": "Nightly ETL fails on lock timeout"
},
"pull_request": {
"platform": "github",
"url": "https://github.com/northwind/etl/pull/412",
"repo": "northwind/etl",
"number": 412
},
"on_behalf_of": {
"name": "Maija Virtanen",
"email": "maija@northwind.example"
}
}
}
conversation(object, optional): { platform, channel, thread_url }: the chat the request came from. platform is "slack", "teams", "google_chat" or "other" (required). channel is the channel’s name, up to 200 characters; for Teams "Team / Channel". thread_url links to the thread or message.issue(object, optional): { tracker, url, key, title }: the issue or ticket. tracker is "linear", "jira", "github" or "other" and url are required; key (e.g. "PLT-7003") up to 100 characters, title up to 300.pull_request(object, optional): { platform, url, repo, number, title }: the pull or merge request. platform is "github", "gitlab", "bitbucket", "azure_devops" or "other" and url are required; repo (e.g. "uprightproject/upright") up to 200 characters, number a positive integer, title up to 300.on_behalf_of(object, optional): { name, email } of the person the caller acts for. Name up to 200 characters; email a valid address.links(array, optional): Up to 10 other links, each { url, label }. A label is up to 200 characters.
Rules:
- Leave out what you do not know; never invent values. Leave out a whole part when it does not apply.
- Links must be
httporhttps, up to 2,000 characters. - An unknown field is a 400, so a misspelling does not go unnoticed.
- Metadata is personal data, so it follows the key's retention: not stored with "Not stored", deleted when the retention period ends.
The typed-question endpoint and the MCP tools take the same object.