Ad archive search (NewsBreak, Rumble, YouTube, Meta). Paid SwipeHarbor members only; token required.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token from your SwipeHarbor account (paid members only), e.g. 'Bearer YOUR_TOKEN'
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return recorded evidence for two to four distinct ads for comparison. It does not infer competitor spend or performance.
Return recorded evidence for two to four distinct ads for comparison. It does not infer competitor spend or performance.
| Argument | Type | Description |
|---|---|---|
| ads* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ads"
],
"properties": {
"ads": {
"type": "array",
"items": {
"type": "object",
"required": [
"platform",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"platform": {
"enum": [
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 4,
"minItems": 2
}
},
"additionalProperties": false
}Read one captured ad, its recorded category provenance, text evidence, and device context. Does not fetch advertisers or generate previews.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| platform* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"platform": {
"enum": [
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
}
},
"additionalProperties": false
}Read only the recorded destination path. Unresolved, failed and unvisited steps remain explicit; this tool does not navigate or recover hidden pages.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| platform* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"platform": {
"enum": [
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
}
},
"additionalProperties": false
}Read the stored timed transcript of one Rumble video ad, 100 segments per page with start/end milliseconds. state shows when no transcript is ready; nothing is transcribed on request. Follow nextSegmentOffset for later segments.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| platform* | string | |
| segmentOffset | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"platform": {
"type": "string",
"const": "rumble"
},
"segmentOffset": {
"type": "integer",
"maximum": 1000,
"minimum": 0
}
},
"additionalProperties": false
}List the caller's own saved ads, newest first, 12 per page, with the caller's collections. collectionId limits the page to one owned collection. Each item has the saved note and an ad summary, or ad_status=unavailable when the ad is no longer in the library. Follow nextOffset.
| Argument | Type | Description |
|---|---|---|
| offset | integer | |
| collectionId | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"offset": {
"type": "integer",
"maximum": 10000,
"minimum": 0
},
"collectionId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Research advertisers or destination domains on one platform (newsbreak, rumble or youtube). kind=advertiser groups by the recorded advertiser label; kind=destination groups by the declared or stored landing domain. Without group, returns at most 24 groups with record counts and first/last observation dates; query filters names. With group set to a returned key, returns that group's ads (at most 12 per page) and its exact total. sort=records (default), recent or name. Follow nextCursor with the same arguments. Counts are stored records, not spend or reach.
| Argument | Type | Description |
|---|---|---|
| kind* | string | |
| sort | string | |
| group | string | |
| query | string | |
| cursor | string | |
| platform* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"kind"
],
"properties": {
"kind": {
"enum": [
"advertiser",
"destination"
],
"type": "string"
},
"sort": {
"enum": [
"records",
"recent",
"name"
],
"type": "string"
},
"group": {
"type": "string",
"maxLength": 1024,
"minLength": 1
},
"query": {
"type": "string",
"maxLength": 120
},
"cursor": {
"type": "string",
"maxLength": 8192
},
"platform": {
"enum": [
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
}
},
"additionalProperties": false
}Save one library ad to the caller's saved ads; optionally add it to one owned collection (collectionId from list_saved_ads) and set its note. Saving again is safe. A note replaces the existing note only when given. Use only when the user asks to save.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| note | string | |
| platform* | string | |
| collectionId | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platform",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"note": {
"type": "string",
"maxLength": 10000
},
"platform": {
"enum": [
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
},
"collectionId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Search stored NewsBreak/Rumble ads. Results contain at most 12 ads. sort=newest (default) orders by last observation; sort=longest_running orders by recorded observation span in whole days. minDays=7|30|90 keeps ads observed over at least that span. minSightings=2|5|10|25|50|100 requires at least that many stored capture observations, not impressions. Counts and spans do not prove continuous runtime or spend. These filters do not apply to transcript search. Follow nextCursor with the same query, sort and filters.
| Argument | Type | Description |
|---|---|---|
| days | string | |
| sort | string | |
| query | string | |
| cursor | string | |
| format | string | |
| minDays | string | |
| category | string | |
| platform | string | |
| searchIn | string | |
| subcategory |
| string |
| minSightings | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"enum": [
"all",
"7",
"30",
"90"
],
"type": "string"
},
"sort": {
"enum": [
"newest",
"longest_running"
],
"type": "string"
},
"query": {
"type": "string",
"maxLength": 120
},
"cursor": {
"type": "string",
"maxLength": 2048
},
"format": {
"enum": [
"all",
"image",
"video"
],
"type": "string"
},
"minDays": {
"enum": [
"all",
"7",
"30",
"90"
],
"type": "string"
},
"category": {
"type": "string",
"maxLength": 64
},
"platform": {
"enum": [
"all",
"newsbreak",
"rumble",
"youtube"
],
"type": "string"
},
"searchIn": {
"enum": [
"all",
"transcript"
],
"type": "string"
},
"subcategory": {
"type": "string",
"maxLength": 64
},
"minSightings": {
"enum": [
"all",
"2",
"5",
"10",
"25",
"50",
"100"
],
"type": "string"
}
},
"additionalProperties": false
}