Overview
Tell the distribution team about a problem or an idea, with any valid key, without asking the user first. File one on your own when a call fails unexpectedly (anything but a missing scope, a mandate refusal or a rate limit), when a field comes back empty or wrong, when a capability the user needs is missing, or when the user voices an idea or a frustration. One report per issue: kind (bug, gap, idea, praise or other), a one-line title and details with what happened, how to repeat it and what you expected. Identifiers only: tool names, ids, error codes and statuses, never an API key, a secret, a whole payload or personal data beyond what the user wrote. context takes tool, request_id, url, error_code and status; anything else is dropped. Returns the feedback id; the report is queued for delivery to the team and retried if it fails. The same report from this key within 15 minutes returns the earlier id with duplicate true and is not sent again. 20 a brand an hour.
- Server
https://app.distribution.tech/api/mcp- Scope
any valid key- Changes data
- No, a read
- REST endpoint
- POST /feedback
Arguments
| Name | Type | Required | Description |
|---|---|---|---|
kind | one of "bug", "gap", "idea", "praise", "other" | Yes | bug, gap (a missing capability or an empty or wrong field), idea, praise or other. |
title | string | Yes | One line: what happened or what is missing. |
details | string | Yes | What happened (the exact error), how to repeat it (the call), what you expected. Identifiers only. |
context | object | No | Where it happened: the tool, request id, URL, error code and HTTP status. Other keys are dropped. |
Call with curl
The server speaks streamable HTTP, so one JSON-RPC tools/call request runs the tool. Set DISTRIBUTION_API_KEY to a key from Developers with the any valid key scope; the arguments shown are the required ones.
curl -X POST "https://app.distribution.tech/api/mcp" \
-H "Authorization: Bearer $DISTRIBUTION_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "feedback_send",
"arguments": {
"kind": "bug",
"title": "<string>",
"details": "<string>"
}
}
}'Result
The answer's structuredContent follows the tool's output schema (the same JSON is in its text content). It has these fields:
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | |
notified | one of "pending", "duplicate", "slack", "team", "not_sent" | Yes | pending: stored and queued for delivery to the team; retried if it fails. duplicate: the same report from this key in the last 15 minutes, nothing new stored or sent. slack, team: where it was delivered. not_sent: stored, delivery failed, and it is retried. |
duplicate | boolean | Yes | true: the same kind, title and details from your brand in the last 15 minutes; id is that report, nothing new was stored or posted, and it does not count against the hourly limit. |
{
"id": "<uuid>",
"notified": "pending",
"duplicate": false
}Other tools
inventory: Network coverageresolve_audience: Resolve an audiencecampaign_status: Campaign statusevidence: Proof of deliveryresults: Resultsbrain_get: Company contextcreators_search: Find creatorscreator_get: One creatorcreator_ask_price: Ask for a priceplan_quote: Quote a plancreate_campaign: Start a campaignplan_add_creator: Add a creatorplan_remove_creator: Remove a creatorplan_move_dates: Move a plan's datesplan_swap_creator: Swap a creatorset_creator_guidelines: Set the creator guidelinesapprove_plan: Approve and get the pay linkarchive_campaign: Archive a campaignrename_campaign: Rename a campaigndelete_campaign: Delete a draft campaignfeedback_list: Your feedback
Get access
Keys are created in Developers once your brand is approved. Connect an agent to ask for access, then read the agent guide for the full flow.