Graunt
The agent-native marketplace for AI data: search listings and read their price and rights.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"marketplace": {
"url": "https://api.graunt.com/v1/mcp"
}
}
}Remote endpoints
https://api.graunt.com/v1/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢search(query, limit, ai_generation, kind, video_subject, ...)
Search the Graunt catalog of evaluated data packets. Returns matching packets with their id, title, and public URL.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search keywords."
},
"limit": {
"type": "number",
"description": "Max results; default 20, cap 50."
},
"ai_generation": {
"type": "string",
"enum": [
"NONE",
"PARTIAL",
"FULL"
],
"description": "Keep only packets whose seller declares this AI-generation extent: NONE (not AI-generated), PARTIAL or FULL. A seller declaration, not a Graunt finding."
},
"kind": {
"type": "string",
"enum": [
"video"
],
"description": "Only listings of this kind. video: video listings."
},
"video_subject": {
"type": "string",
"enum": [
"PEOPLE_TALKING",
"PEOPLE_IN_ACTION",
"PEOPLE_HANDLING_OBJECTS",
"HOW_TO_AND_TASKS",
"SPORTS_AND_FITNESS",
"MUSIC_AND_PERFORMANCE",
"ANIMALS",
"NATURE",
"CITIES_AND_BUILDINGS",
"DRIVING_AND_TRANSPORTATION",
"INDUSTRY_AND_WORK_SITES",
"FOOD_AND_COOKING",
"PRODUCTS_AND_RETAIL",
"ANIMATION",
"VIDEO_GAMES"
],
"description": "Only video listings whose footage shows this subject."
},
"camera_view": {
"type": "string",
"enum": [
"FIRST_PERSON",
"AERIAL_OR_DRONE",
"VEHICLE_OR_DASHCAM",
"FIXED_CAMERA",
"OTHER"
],
"description": "Only video listings shot from this camera view."
}
},
"required": [
"query"
]
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"title",
"url"
]
}
}
},
"required": [
"results"
]
}🟢fetch(id)
Read one Graunt catalog packet by id. Returns its title, description, price and whether an account is needed, its seller-declared rights, and its public URL. A free packet that needs no account also returns its files: small text files (CSV, JSON, Markdown, text and similar) in the text, and a short-lived download link for each listed file in metadata.files (at most 100 per fetch; files_not_listed counts the rest). Images, audio and video carry no link and download from the packet's public URL. A video listing also returns metadata.video: its subjects, measured hours, per-hour price with volume tiers, and the seller's declarations.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The packet listing id."
}
},
"required": [
"id"
]
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"url": {
"type": "string"
},
"metadata": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"asset_class": {
"type": "string"
},
"price_cents": {
"type": "integer",
"minimum": 0
},
"currency": {
"type": "string",
"enum": [
"usd"
]
},
"acquisition_mode": {
"type": "string"
},
"registration_required": {
"type": "boolean"
},
"payment_required": {
"type": "boolean"
},
"free_access_grant_url": {
"type": "string",
"description": "Present only when the packet can be taken with no account: POST it for a short-lived grant, then GET the download_url in its response."
},
"files": {
"type": "array",
"description": "Present when the packet downloads without an account: one entry per listed file (at most 100; files_not_listed counts the rest). inline says how much of the file the text shows (up to 200 KB of text in all); download_url works until download_expires_at. Images, audio and video carry no link here and download from the packet's public URL.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"format": {
"type": [
"string",
"null"
]
},
"size_bytes": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"inline": {
"type": "string",
"enum": [
"FULL",
"PARTIAL",
"NONE"
]
},
"inline_bytes": {
"type": "integer",
"minimum": 0
},
"download_url": {
"type": "string"
},
"download_expires_at": {
"type": "string"
}
},
"required": [
"name",
"format",
"size_bytes",
"inline",
"inline_bytes"
]
}
},
"files_not_listed": {
"type": "integer",
"minimum": 1,
"description": "Present when the packet has more files than one fetch lists (100): how many more there are. They download from the packet's public URL."
},
"files_note": {
"type": "string",
"description": "Why the files could not be returned right now (for example a rate limit), in plain words."
},
"publisher": {
"type": "string"
},
"ai_generation": {
"type": "object",
"description": "The seller's AI-generation declaration: extent NONE (not AI-generated), PARTIAL (with share_percent and description) or FULL. A seller declaration, not a Graunt finding; absent when the seller has not declared.",
"properties": {
"extent": {
"type": "string",
"enum": [
"NONE",
"PARTIAL",
"FULL"
]
},
"share_percent": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"description": {
"type": "string"
}
},
"required": [
"extent"
]
},
"video": {
"type": "object",
"additionalProperties": false,
"required": [
"media_kind",
"subjects",
"camera_views",
"measured",
"per_hour",
"seller_declared",
"barred_uses"
],
"properties": {
"media_kind": {
"type": "string",
"enum": [
"VIDEO"
]
},
"subjects": {
"type": "array",
"maxItems": 15,
"items": {
"type": "string",
"enum": [
"PEOPLE_TALKING",
"PEOPLE_IN_ACTION",
"PEOPLE_HANDLING_OBJECTS",
"HOW_TO_AND_TASKS",
"SPORTS_AND_FITNESS",
"MUSIC_AND_PERFORMANCE",
"ANIMALS",
"NATURE",
"CITIES_AND_BUILDINGS",
"DRIVING_AND_TRANSPORTATION",
"INDUSTRY_AND_WORK_SITES",
"FOOD_AND_COOKING",
"PRODUCTS_AND_RETAIL",
"ANIMATION",
"VIDEO_GAMES"
]
},
"description": "What the footage shows, from the closed video-subject list. Filter with video_subject on GET /v1/listings."
},
"camera_views": {
"type": "array",
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"FIRST_PERSON",
"AERIAL_OR_DRONE",
"VEHICLE_OR_DASHCAM",
"FIXED_CAMERA",
"OTHER"
]
},
"description": "How the footage was shot, from the closed camera-view list; empty when none was given. Filter with camera_view on GET /v1/listings."
},
"measured": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"required": [
"eligible_duration_seconds",
"hours"
],
"description": "What Graunt measured from the files; null when it measured none.",
"properties": {
"eligible_duration_seconds": {
"type": "integer",
"minimum": 0,
"description": "Seconds of video a buyer of the whole listing receives and pays for."
},
"hours": {
"type": "number",
"minimum": 0,
"description": "The same length in hours, to one decimal place."
}
}
},
"per_hour": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"required": [
"rate_class",
"price_per_hour_cents",
"currency",
"volume_tiers",
"tier_applied",
"subtotal_cents",
"discount_cents",
"price_cents"
],
"description": "The per-hour price, or null when the listing has a flat price. The seller sets the rate. The volume tier is applied automatically from the hours in the order; there is no code and nothing to request. All amounts are integer cents.",
"properties": {
"rate_class": {
"type": "string",
"enum": [
"BASIC",
"STANDARD",
"PREMIUM",
"NATIVE_1080P",
"NATIVE_4K",
"ARCHIVAL"
]
},
"price_per_hour_cents": {
"type": "integer",
"minimum": 1,
"description": "The seller's rate."
},
"currency": {
"const": "usd"
},
"volume_tiers": {
"type": "array",
"maxItems": 5,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"min_hours",
"discount_bps"
],
"properties": {
"min_hours": {
"type": "integer",
"minimum": 1,
"description": "Hours in the order from which the tier applies."
},
"discount_bps": {
"type": "integer",
"minimum": 1,
"maximum": 9000,
"description": "Discount in basis points (1000 = 10%)."
}
}
},
"description": "This listing's volume schedule, lowest tier first: a term of the listing, recorded in every purchase. The seller funds each discount."
},
"tier_applied": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"required": [
"min_hours",
"discount_bps"
],
"properties": {
"min_hours": {
"type": "integer",
"minimum": 1,
"description": "Hours in the order from which the tier applies."
},
"discount_bps": {
"type": "integer",
"minimum": 1,
"maximum": 9000,
"description": "Discount in basis points (1000 = 10%)."
}
},
"description": "The tier this listing's hours reach; null when they reach none."
},
"subtotal_cents": {
"type": "integer",
"minimum": 0,
"description": "floor(eligible_duration_seconds × price_per_hour_cents / 3600)."
},
"discount_cents": {
"type": "integer",
"minimum": 0,
"description": "floor(subtotal_cents × the applied tier's discount_bps / 10000)."
},
"price_cents": {
"type": "integer",
"minimum": 0,
"description": "The listing price, subtotal_cents minus discount_cents: what checkout charges before any sales tax."
}
}
},
"seller_declared": {
"type": "object",
"additionalProperties": false,
"required": [
"depicts_person",
"sublicense",
"attestations"
],
"description": "The seller's declarations, kept apart from what Graunt measured. Never Graunt's findings.",
"properties": {
"depicts_person": {
"type": "boolean",
"description": "Whether the seller says people appear in the footage."
},
"sublicense": {
"type": "string",
"enum": [
"NONE",
"ONE_CLIENT_PREAUTHORIZED"
],
"description": "ONE_CLIENT_PREAUTHORIZED: the buyer may pass the data through to one client, named privately at purchase in sublicense_client, for that client's use within the license; the buyer makes no use of it for itself. The license itself stays non-transferable."
},
"attestations": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"description": "What the seller declares about the material, recorded as the seller declared it. Graunt does not compute these.",
"properties": {
"people_on_camera": {
"type": "string",
"enum": [
"INCIDENTAL",
"SUBJECT"
],
"description": "How people appear: SUBJECT (the footage is about them) or INCIDENTAL (in passing, in a crowd)."
},
"person_release_status": {
"type": "string",
"enum": [
"NOT_APPLICABLE",
"SELLER_ATTESTED",
"EVIDENCE_ON_FILE",
"INCOMPLETE"
],
"description": "Releases from the people shown. INCOMPLETE is allowed only when people appear incidentally."
},
"identifiable_minors": {
"type": "boolean",
"description": "Whether anyone under 16 can be identified in the content."
},
"guardian_releases_on_file": {
"type": "boolean",
"description": "Whether the releases on file include a parent's or guardian's release for each minor shown."
},
"third_party_ip_status": {
"type": "string",
"enum": [
"NOT_APPLICABLE",
"SELLER_ATTESTED",
"EVIDENCE_ON_FILE",
"INCOMPLETE"
],
"description": "Third-party marks and designs."
},
"music_audio_rights_status": {
"type": "string",
"enum": [
"NOT_APPLICABLE",
"SELLER_ATTESTED",
"EVIDENCE_ON_FILE",
"INCOMPLETE"
],
"description": "Music and audio."
},
"event_or_venue_rights_status": {
"type": "string",
"enum": [
"NOT_APPLICABLE",
"SELLER_ATTESTED",
"EVIDENCE_ON_FILE",
"INCOMPLETE"
],
"description": "Events and venues."
},
"property_release_status": {
"type": "string",
"enum": [
"NOT_APPLICABLE",
"SELLER_ATTESTED",
"EVIDENCE_ON_FILE",
"INCOMPLETE"
],
"description": "Private property shown."
},
"native_resolution": {
"type": "string",
"enum": [
"SD",
"HD_720P",
"FHD_1080P",
"QHD_1440P",
"UHD_4K",
"UHD_8K"
],
"description": "The lowest native resolution in the listing."
}
}
}
}
},
"barred_uses": {
"type": "array",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"person_likeness_use",
"voice_clone",
"deepfake_use",
"biometric_identification"
]
},
"description": "Uses no license permits for this footage, whatever else the listing allows. Present when the footage shows people."
}
},
"description": "Present only on a video listing: subjects, the hours Graunt measured, the per-hour price with its volume tiers, and the seller's declarations (people on camera, releases, sublicense), kept apart."
},
"rights_passport_summary": {
"type": "object",
"properties": {
"license_family": {
"type": "string"
},
"training_allowed": {
"type": "boolean"
},
"redistribution_allowed": {
"type": "boolean"
},
"citation_required": {
"type": "boolean"
},
"no_train": {
"type": "boolean"
},
"no_redistribute": {
"type": "boolean"
},
"personal_data_sensitive": {
"type": "boolean"
}
},
"required": [
"license_family",
"training_allowed",
"redistribution_allowed",
"citation_required",
"no_train",
"no_redistribute",
"personal_data_sensitive"
]
}
},
"required": [
"price_cents",
"currency",
"acquisition_mode",
"registration_required",
"payment_required",
"rights_passport_summary"
]
}
},
"required": [
"id",
"title",
"text",
"url",
"metadata"
]
}🟢search_assets(q, limit, ai_generation, kind, video_subject, ...)
Search the public catalog of evaluated packets and listings. Returns paginated matches.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search query string."
},
"limit": {
"type": "number",
"description": "Max rows; default 20, cap 100."
},
"ai_generation": {
"type": "string",
"enum": [
"NONE",
"PARTIAL",
"FULL"
],
"description": "Keep only packets whose seller declares this AI-generation extent: NONE (not AI-generated), PARTIAL or FULL. A seller declaration, not a Graunt finding."
},
"kind": {
"type": "string",
"enum": [
"video"
],
"description": "Only listings of this kind. video: video listings."
},
"video_subject": {
"type": "string",
"enum": [
"PEOPLE_TALKING",
"PEOPLE_IN_ACTION",
"PEOPLE_HANDLING_OBJECTS",
"HOW_TO_AND_TASKS",
"SPORTS_AND_FITNESS",
"MUSIC_AND_PERFORMANCE",
"ANIMALS",
"NATURE",
"CITIES_AND_BUILDINGS",
"DRIVING_AND_TRANSPORTATION",
"INDUSTRY_AND_WORK_SITES",
"FOOD_AND_COOKING",
"PRODUCTS_AND_RETAIL",
"ANIMATION",
"VIDEO_GAMES"
],
"description": "Only video listings whose footage shows this subject."
},
"camera_view": {
"type": "string",
"enum": [
"FIRST_PERSON",
"AERIAL_OR_DRONE",
"VEHICLE_OR_DASHCAM",
"FIXED_CAMERA",
"OTHER"
],
"description": "Only video listings shot from this camera view."
}
}
}🟢get_asset(listing_id)
Read a single listing by id. Public projection.
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
]
}🟢get_agent_commerce_manifest(listing_id)
Read the agent commerce manifest for a listing: price, rights, and how to buy it.
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
]
}🟢get_asset_manifest(listing_id)
Read the canonical asset manifest (sha256-stamped).
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
]
}🟢get_bundle_manifest(listing_id)
Read the per-asset bundle inventory: every delivered file with role, format, size and content hash, plus counts that name the population each one counted.
Input Schema
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
]
}🟢meta_capabilities
Read /v1/meta/capabilities — the authoritative capability state map.
Input Schema
{
"type": "object",
"properties": {}
}🟢meta_refinery_support_matrix
Read /v1/meta/refinery-support-matrix: the source types Graunt accepts and what the Refinery does with each. Every upload gets deterministic extraction; a model drafts only the listing fields a seller leaves empty.
Input Schema
{
"type": "object",
"properties": {}
}Community
Evidence