over:heard exposes a standard MCP (Model Context Protocol) server: your AI assistant reads brands and stories, works with advisories (paywall respected), dispatches and validates crisis actions, adds context and creates share links — as the signed-in user, within their permissions.
/.well-known/oauth-authorization-server) — you sign in, no secret
is ever pasted.Claude / ChatGPT (remote connectors): add a custom connector with the URL
https://www.overheard.co/mcp. Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"overheard": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://www.overheard.co/mcp"
]
}
}
}
Clients with native remote-MCP support:
{
"mcpServers": {
"overheard": {
"type": "http",
"url": "https://www.overheard.co/mcp"
}
}
}
This list is generated from the server's live tool registry — exactly what
tools/list answers.
list_brandsList the monitored brands (workspaces) in the account.
No arguments.
list_storiesList stories for a brand (or all brands), newest first.
| argument | type | |
|---|---|---|
brand_id | string | Brand id from list_brands; omit for all. |
status | string | One of: new, assigned, in_progress, closed. |
get_storyFull story detail incl. the advisory. If the advisory is locked, only the free teaser (assessment, severity, urgency, executive summary) is returned with an 'unlocked': false flag — call unlock_advisory to reveal the rest.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string |
unlock_advisoryUnlock the full advisory of a story. Uses an included monthly unlock if available; otherwise returns a checkout_url to buy one (15 EUR). Never charges silently.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string |
assign_actionAssign a phase's action to a teammate by email. An unknown email is invited into the workspace and emailed the action with full context.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string | |
phase required | integer | |
assignee required | string | Teammate email address. |
validate_actionMark a phase action done (only its assignee may). Optional comment for the audit trail.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string | |
phase required | integer | |
comment | string |
add_contextProvide authoritative facts about a story: proposes an UPDATED advisory as a pending version with a change diff (phases where work started are preserved verbatim). Nothing is applied until apply_advisory_update — the live advisory never changes silently.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string | |
context required | string |
apply_advisory_updateApply the pending advisory update of a story (assigned/completed phases stay verbatim and keep their assignees). Owner only.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string |
create_shareCreate a share link for a story briefing. access 'public' is anonymous and tops out at mode 'briefing' (the response doctrine never reaches an anonymous audience); ask for access 'guests' to share the full advisory.
| argument | type | |
|---|---|---|
brand_id required | string | |
event_uri required | string | |
access | string | One of: public, guests. Default: public. |
listed | boolean | Public shares only: list the page in the public index. Default: False. |
mode | string | One of: compact, briefing, full. Default: briefing. |
On the Partner plan the REST API's operations are additionally exposed as MCP tools, generated from the same registry as the OpenAPI reference — same auth model, same scopes, same answers.
v1_list_stories Partner[GET /v1/stories] List stories (mentions) of one scoped brand.
| argument | type | |
|---|---|---|
brand required | string | brand host, e.g. danone.com |
v1_get_story Partner[GET /v1/story] Read one story of a scoped brand (advisory fields follow the same paywall as the UI).
| argument | type | |
|---|---|---|
brand required | string | brand host |
event_uri required | string | story id |
v1_post_brand_note Partner[POST /v1/brand-note] Publish the official Brand Note on a story — gated: verified or delegated brands only. Never deletes: an empty or missing text is refused (use delete_brand_note).
| argument | type | |
|---|---|---|
brand required | string | brand host |
event_uri required | string | story id |
text required | string | note (600 chars max) |
v1_delete_brand_note Partner[DELETE /v1/brand-note] Remove the official Brand Note from a story — the ONLY way to delete it, and an explicit intent. Same gate as publishing.
| argument | type | |
|---|---|---|
brand required | string | brand host |
event_uri required | string | story id |
v1_trigger_advisory Partner[POST /v1/advisory] Request the full advisory for a story. Consumes the same per-brand quota and bills exactly like the UI (15 EUR beyond the included).
| argument | type | |
|---|---|---|
brand required | string | brand host |
event_uri required | string | story id |
v1_list_delegations Partner[GET /v1/delegations] Delegation state of the brands in this key's scope.
No arguments.
v1_create_api_key Partner[POST /v1/api-keys] Always 403: API keys are managed by Owners/Admins in the app — a key can never mint keys.
No arguments.
v1_grant_delegation Partner[POST /v1/delegations] Always 403: delegation is an explicit client-side act — a key can never self-delegate.
No arguments.