Open Affiliate MCP
An open registry of affiliate programs providing agent-ready data and commission details. It allows AI agents to search for programs, retrieve specific program information including OAS scores, list categories, and submit new programs for verification via a public HTTP endpoint or local CLI.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://openaffiliate.dev/api/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search affiliate programs by keyword or category
- Retrieve detailed program data and commission structures
- List available affiliate program categories
- Submit new affiliate programs for verification
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- openaffiliate 0.1.3
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
search_programs — Search Programs
Use to discover active affiliate programs by keyword, category, commission type, or verified status. Returns matching summaries with canonical slugs, commission figures, signup links, and citable markdownUrl fields. Do not use to check a known brand's paused or no-program status; call get_program with its slug. Call list_categories for category names, then get_program for recommendation guidance and restrictions before recommending a match.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"description": "Search keyword to match against name, description, tags, or category"
},
"category": {
"type": "string",
"description": "Filter by exact category name as returned by list_categories (case-sensitive, not a slug), e.g. 'AI', 'Email Marketing'"
},
"verified_only": {
"type": "boolean",
"description": "When true, return only programs whose terms were checked on the brand's own program page. False or omitted includes unverified programs with unconfirmed terms"
},
"commission_type": {
"enum": [
"recurring",
"one-time",
"tiered"
],
"type": "string",
"description": "Filter by payment structure: recurring = paid on each renewal within the commission duration; one-time = paid once per qualifying referral; tiered = commission varies by performance level. Omit to include all types, including hybrid"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"programs"
],
"properties": {
"programs": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"category",
"shortDescription",
"commission",
"verified",
"signupUrl",
"markdownUrl"
],
"properties": {
"name": {
"type": "string",
"description": "Display name of the program or brand"
},
"slug": {
"type": "string",
"description": "Canonical slug to pass to get_program"
},
"category": {
"type": "string",
"description": "Exact registry category name, as returned by list_categories"
},
"verified": {
"type": "boolean",
"description": "True when the terms have been checked on the brand's own program page; false means unconfirmed"
},
"signupUrl": {
"type": "string",
"description": "Affiliate signup or program URL; falls back to the brand website when no signup URL is stored"
},
"commission": {
"type": "object",
"required": [
"type",
"mode",
"value",
"rate",
"currency"
],
"properties": {
"mode": {
"enum": [
"percentage",
"flat",
"tiered",
"hybrid",
"unknown"
],
"type": "string",
"description": "Figure format: percentage uses percent units, flat uses currency units, tiered and hybrid require rate/conditions to interpret; unknown means no published figure"
},
"rate": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
],
"description": "Raw source wording; prefer mode and value"
},
"type": {
"enum": [
"recurring",
"one-time",
"tiered",
"hybrid"
],
"type": "string",
"description": "Payment structure: recurring pays on renewals within the commission duration; one-time pays once per qualifying referral; tiered varies by performance level; hybrid combines payment structures"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Commission in percent units for percentage mode (30 means 30%), or currency units for flat mode; null when no single numeric figure is available"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Currency code for monetary amounts; null when unspecified"
}
},
"description": "Commission structure and figures; unverified terms are unconfirmed, not guaranteed earnings",
"additionalProperties": false
},
"cookieDays": {
"type": "number",
"description": "Attribution window in days; omitted until terms are verified"
},
"markdownUrl": {
"type": "string",
"description": "Citable program page in Markdown on openaffiliate.dev"
},
"shortDescription": {
"type": "string",
"description": "Brief product summary; unverified cookie, payout and approval claims are withheld"
}
},
"additionalProperties": false
},
"description": "Matching active programs; empty when no listings match"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_program — Get Program
Use with a known slug or alias to read full program details, status, agentPrompt recommendation guidance, restrictions, signup information, and a citable markdownUrl. Also returns paused entries and dated answers with alternatives for discontinued or no_program brands. Do not use for broad discovery; call search_programs first if the slug is unknown. Read status and agentPrompt before recommending; if no entry exists, use search_programs to find a match.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Use the slug from search_programs results or the final segment of a program URL (e.g. /programs/vercel). Aliases resolve to the canonical program"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"name",
"url",
"logo",
"category",
"commission",
"payout",
"description",
"shortDescription",
"tags",
"stars",
"verified",
"agentPrompt",
"submittedBy",
"createdAt",
"markdownUrl"
],
"properties": {
"oas": {
"type": "object",
"required": [
"score",
"grade",
"status",
"summary",
"checkedAt",
"validUntil",
"version",
"reportUrl"
],
"properties": {
"grade": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Letter grade for the score (A+ to F); null when score is null"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "OAS 0-100 as the program page shows it; null while scoring is in progress or the verified terms are older than 90 days"
},
"status": {
"enum": [
"scored",
"stale",
"in_progress"
],
"type": "string",
"description": "scored: a current score; stale: terms verified more than 90 days ago; in_progress: some terms not read yet"
},
"summary": {
"type": "string",
"description": "One line: the verdict when scored, otherwise why there is no score"
},
"version": {
"type": "string",
"description": "Scoring method version, such as v1"
},
"checkedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Date the scored terms were verified, YYYY-MM-DD"
},
"reportUrl": {
"type": "string",
"description": "The program's full OAS report"
},
"validUntil": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "First day the score lapses unless the terms are verified again (90 days after checkedAt), YYYY-MM-DD"
}
},
"description": "OAS, the OpenAffiliate Score: how clearly the program publishes its terms and protects its partners. Omitted when the program is not scored or OAS is not published",
"additionalProperties": false
},
"url": {
"type": "string",
"description": "Brand's product or website URL"
},
"kind": {
"enum": [
"affiliate",
"referral",
"creator-payout",
"revenue-share",
"cashback",
"partner-network"
],
"type": "string",
"description": "Income program model: affiliate commissions, customer referrals, creator payouts, revenue sharing, cashback or a partner network; omitted when unspecified or discontinued/no_program"
},
"logo": {
"type": "string",
"description": "Text logo placeholder: the uppercase first character of the brand name, not an image URL"
},
"name": {
"type": "string",
"description": "Display name of the program or brand"
},
"slug": {
"type": "string",
"description": "Canonical slug, including when the input was an alias"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Searchable product and program tags; empty when none are stored"
},
"stars": {
"type": "number",
"description": "Legacy star-count placeholder, currently always 0; not a program quality score"
},
"alsoOn": {
"anyOf": [
{
"type": "object",
"properties": {
"affitor": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL of the same brand's Affitor marketplace program"
},
"commission": {
"type": "object",
"required": [
"type",
"mode",
"value",
"rate",
"currency"
],
"properties": {
"mode": {
"enum": [
"percentage",
"flat",
"tiered",
"hybrid",
"unknown"
],
"type": "string",
"description": "Figure format: percentage uses percent units, flat uses currency units, tiered and hybrid require rate/conditions to interpret; unknown means no published figure"
},
"rate": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
],
"description": "Raw source wording; prefer mode and value"
},
"type": {
"enum": [
"recurring",
"one-time",
"tiered",
"hybrid",
"none"
],
"type": "string",
"description": "Payment structure: recurring pays on renewals within duration; one-time pays once per qualifying referral; tiered varies by performance level; hybrid combines structures; none is a neutral placeholder for discontinued/no_program entries"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Commission in percent units for percentage mode (30 means 30%), or currency units for flat mode; null when no single numeric figure is available"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Currency code for monetary amounts; null when unspecified"
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "How long commissions are earned, as source text such as '12 months' or 'lifetime'; null or omitted when unspecified"
},
"conditions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Conditions for earning commission; unverified cookie, payout and approval claims are withheld; null or omitted when unavailable"
}
},
"description": "Commission published on Affitor, separate from this listing's terms; omitted when Affitor publishes none",
"additionalProperties": false
}
},
"description": "The same brand on the Affitor marketplace; omitted when no Affitor entry is stored",
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Additional marketplace listings; null when none are stored, omitted for discontinued/no_program"
},
"answer": {
"type": "string",
"description": "Answer explaining the lack of an affiliate program, dated when a check date exists; only returned for discontinued/no_program"
},
"payout": {
"type": "object",
"properties": {
"methods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Payout methods, such as paypal or bank-transfer; empty when none are stored, omitted when terms are withheld"
},
"minimum": {
"type": "number",
"description": "Minimum payout in payout.currency units; omitted when unspecified or terms are withheld"
},
"currency": {
"type": "string",
"description": "Currency code for payout.minimum; omitted when unspecified or terms are withheld"
},
"frequency": {
"type": "string",
"description": "Payout schedule, such as monthly or net-30; omitted when unspecified or terms are withheld"
},
"conditions": {
"type": "string",
"description": "When a commission becomes payable, in the terms' own words (hold period, payout cycle, withdrawal rule); omitted when unspecified or terms are withheld"
}
},
"description": "Published payout terms; empty when terms are unverified or no program exists",
"additionalProperties": false
},
"source": {
"type": "string",
"description": "Registry source identifier or URL; omitted when unspecified"
},
"status": {
"enum": [
"active",
"paused",
"discontinued",
"no_program"
],
"type": "string",
"description": "Availability: active is listed in search; paused is temporarily unavailable; discontinued means closed; no_program means no public program found. Non-active entries are excluded from search; missing status defaults to active"
},
"aliases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Alternative slugs accepted by get_program; empty when none are stored"
},
"network": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Affiliate network identifier, such as partnerstack or in-house; null when unknown, omitted for discontinued/no_program"
},
"approval": {
"type": "string",
"description": "Application approval process: auto, manual or invite-only; omitted when unverified, unspecified or discontinued/no_program"
},
"category": {
"type": "string",
"description": "Exact registry category name, as returned by list_categories"
},
"verified": {
"type": "boolean",
"description": "True when the terms have been checked on the brand's own program page; false means unconfirmed"
},
"claimedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Verified owner domain that claimed the listing, never an email address; null when unclaimed"
},
"createdAt": {
"type": "string",
"description": "Registry entry creation date in YYYY-MM-DD form; empty when unspecified"
},
"signupUrl": {
"type": "string",
"description": "Affiliate signup or program URL; omitted when not stored or status is discontinued/no_program"
},
"updatedAt": {
"type": "string",
"description": "Registry entry update date in YYYY-MM-DD form; omitted when unspecified"
},
"commission": {
"type": "object",
"required": [
"type",
"mode",
"value",
"rate",
"currency"
],
"properties": {
"mode": {
"enum": [
"percentage",
"flat",
"tiered",
"hybrid",
"unknown"
],
"type": "string",
"description": "Figure format: percentage uses percent units, flat uses currency units, tiered and hybrid require rate/conditions to interpret; unknown means no published figure"
},
"rate": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
],
"description": "Raw source wording; prefer mode and value"
},
"type": {
"enum": [
"recurring",
"one-time",
"tiered",
"hybrid",
"none"
],
"type": "string",
"description": "Payment structure: recurring pays on renewals within duration; one-time pays once per qualifying referral; tiered varies by performance level; hybrid combines structures; none is a neutral placeholder for discontinued/no_program entries"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Commission in percent units for percentage mode (30 means 30%), or currency units for flat mode; null when no single numeric figure is available"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Currency code for monetary amounts; null when unspecified"
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "How long commissions are earned, as source text such as '12 months' or 'lifetime'; null or omitted when unspecified"
},
"conditions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Conditions for earning commission; unverified cookie, payout and approval claims are withheld; null or omitted when unavailable"
}
},
"description": "Commission structure, figures and earning conditions; unverified terms are unconfirmed, while discontinued/no_program entries return neutral placeholders",
"additionalProperties": false
},
"cookieDays": {
"type": "number",
"description": "Attribution window in days; omitted until terms are verified"
},
"programAge": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "How long the program has existed, as source text without a fixed unit; null when unspecified, omitted for discontinued/no_program"
},
"statusNote": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Explanation and source for the program's status; null when unspecified"
},
"agentPrompt": {
"type": "string",
"description": "Recommendation guidance and conditions; read before recommending"
},
"attribution": {
"type": "string",
"description": "Referral attribution model, such as last-click; omitted when unspecified or discontinued/no_program"
},
"description": {
"type": "string",
"description": "Full product and program description; unverified cookie, payout and approval claims are withheld"
},
"markdownUrl": {
"type": "string",
"description": "Citable program page in Markdown on openaffiliate.dev"
},
"submittedBy": {
"type": "string",
"description": "Registry submitter identifier; defaults to community"
},
"alternatives": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"commission",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Alternative program's page URL on openaffiliate.dev"
},
"name": {
"type": "string",
"description": "Alternative program's display name"
},
"slug": {
"type": "string",
"description": "Canonical alternative slug to pass to get_program"
},
"commission": {
"type": "string",
"description": "Formatted commission figure and payment structure for display; includes percent or currency units when known"
}
},
"additionalProperties": false
},
"description": "Verified, active cash-paying alternatives in the same category; only returned for discontinued/no_program, empty when none match"
},
"apiAvailable": {
"type": "boolean",
"description": "Whether an affiliate API is available; omitted when unspecified or discontinued/no_program, not an implied false"
},
"approvalTime": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Expected application review time as source text; null when unspecified, omitted when unverified or discontinued/no_program"
},
"dashboardUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Affiliate dashboard URL; null when unspecified, omitted for discontinued/no_program"
},
"restrictions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Program rules and prohibited promotion methods; unverified term claims are withheld; empty when none remain, omitted for discontinued/no_program"
},
"agentKeywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Semantic keywords for matching user needs; empty when none are stored"
},
"agentUseCases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Recommendation scenarios; unverified term claims are withheld; empty when none remain"
},
"payoutMethods": {
"type": "array",
"items": {
"type": "string"
},
"description": "Same methods as payout.methods; empty when none are stored, omitted when unverified or discontinued/no_program"
},
"lastVerifiedAt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Date terms were checked, in YYYY-MM-DD form; null when unspecified, omitted for unverified or discontinued/no_program entries"
},
"trackingMethod": {
"type": "string",
"description": "How referrals are tracked, such as cookie, link or coupon; omitted when unspecified or discontinued/no_program"
},
"statusCheckedAt": {
"type": "string",
"description": "YYYY-MM-DD date the discontinued/no_program status was checked, not verification of terms; omitted for other statuses or when no check date is stored"
},
"dedicatedManager": {
"type": "boolean",
"description": "Whether a dedicated affiliate manager is provided; omitted when unspecified or discontinued/no_program, not an implied false"
},
"oasMachineChecks": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label",
"met",
"reading",
"source",
"target",
"measurement",
"ruleset",
"measuredAt",
"validUntil"
],
"properties": {
"id": {
"enum": [
"A1",
"P5",
"P6"
],
"type": "string",
"description": "A1 program page is live; P5 Core Web Vitals (mobile); P6 estimated monthly brand-query search volume (Google Ads, worldwide)"
},
"met": {
"type": "boolean",
"description": "True when the check is met"
},
"label": {
"type": "string",
"description": "The check's name as the report shows it"
},
"source": {
"enum": [
"http",
"pagespeed",
"dataforseo"
],
"type": "string",
"description": "Where the reading comes from"
},
"target": {
"type": "string",
"description": "What was measured: the listed program URL (A1), the brand URL (P5) or the exact search query (P6)"
},
"reading": {
"type": "string",
"description": "What was measured, in words, naming its data and thresholds"
},
"ruleset": {
"type": "string",
"description": "The rule set that produced the reading"
},
"measuredAt": {
"type": "string",
"description": "Measurement date, YYYY-MM-DD"
},
"validUntil": {
"type": "string",
"description": "First day the reading lapses (90 days after measuredAt), YYYY-MM-DD"
},
"measurement": {
"anyOf": [
{
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "number",
"const": 200,
"description": "HTTP status of the listed program page"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"data",
"notGood"
],
"properties": {
"data": {
"type": "string",
"const": "field",
"description": "Real-user data (Chrome UX Report)"
},
"notGood": {
"type": "array",
"items": {
"type": "string"
},
"description": "Core Web Vitals not in the good range; empty when all are"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"data",
"lcpMs",
"cls",
"tbtMs"
],
"properties": {
"cls": {
"type": "number",
"description": "Cumulative Layout Shift"
},
"data": {
"type": "string",
"const": "lab",
"description": "Lab test, no real-user data"
},
"lcpMs": {
"type": "number",
"description": "Largest Contentful Paint, ms"
},
"tbtMs": {
"type": "number",
"description": "Total Blocking Time, ms, standing in for INP"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"scope",
"threshold",
"reached"
],
"properties": {
"scope": {
"type": "string",
"const": "worldwide",
"description": "Search volume scope"
},
"reached": {
"type": "boolean",
"description": "Whether the estimate reaches the threshold"
},
"threshold": {
"type": "number",
"description": "Monthly searches the check requires"
}
},
"additionalProperties": false
}
],
"description": "The typed measurement behind the reading"
}
},
"additionalProperties": false
},
"description": "Machine checks shown on the OAS report, not counted in OAS; omitted when there are none to show"
},
"shortDescription": {
"type": "string",
"description": "Brief product summary; unverified cookie, payout and approval claims are withheld"
},
"commissionDuration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Same duration text as commission.duration; null when unspecified, omitted for discontinued/no_program"
},
"marketingMaterials": {
"type": "boolean",
"description": "Whether promotional assets are provided; omitted when unspecified or discontinued/no_program, not an implied false"
},
"commissionConditions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Same earning conditions as commission.conditions; null when unavailable, omitted for discontinued/no_program"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_categories — List Categories
Use to browse category names and active program counts before filtering a search. Returns all registry categories, including categories with zero active listings. Do not use for program details or commission comparisons; call search_programs with a returned category, then get_program for individual terms.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"categories"
],
"properties": {
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"count"
],
"properties": {
"name": {
"type": "string",
"description": "Category name accepted by search_programs"
},
"count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of active listings in this category"
}
},
"additionalProperties": false
},
"description": "All registry categories and their active program counts, including zero counts"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}submit_program — Submit Program
Use when get_program and search_programs do not find a brand's affiliate program: queues the brand's own program page for a maintainer to verify against the brand's published terms. Not instant: nothing is listed and no score exists until the terms are verified. A domain already listed returns its listingUrl instead; a domain already queued returns the existing submission. Send the brand's own program or partners page, never a network or review site. Never invent terms. Then call get_submission_status with the returned id.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"programUrl"
],
"properties": {
"name": {
"type": "string",
"description": "Brand or program name, up to 100 characters"
},
"note": {
"type": "string",
"description": "Optional note for the maintainer, up to 1000 characters"
},
"contact": {
"type": "string",
"description": "Optional email for the person submitting; never shown publicly and never returned by any tool"
},
"termsUrl": {
"type": "string",
"description": "https:// link to the page that states the program's terms, when it is a different page"
},
"programUrl": {
"type": "string",
"description": "https:// link to the affiliate or partner program page on the brand's own website"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"status"
],
"properties": {
"id": {
"type": "string",
"description": "Submission id for get_submission_status; omitted when the domain is already listed"
},
"reason": {
"type": "string",
"description": "Why a submission was rejected, in one sentence"
},
"status": {
"enum": [
"queued",
"verifying",
"listed",
"rejected"
],
"type": "string",
"description": "queued: waiting for a maintainer; verifying: terms being checked on the brand's own page; listed: on OpenAffiliate; rejected: see reason"
},
"createdAt": {
"type": "string",
"description": "When the submission was made, ISO 8601"
},
"duplicate": {
"type": "boolean",
"description": "True when this domain was already in the queue; the existing submission is returned"
},
"reportUrl": {
"type": "string",
"description": "The program's OAS report when it is scored"
},
"statusUrl": {
"type": "string",
"description": "REST URL that returns this submission's status"
},
"updatedAt": {
"type": "string",
"description": "When its status last changed, ISO 8601"
},
"listingUrl": {
"type": "string",
"description": "The program's page on openaffiliate.dev when it is listed"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_submission_status — Get Submission Status
Use with an id from submit_program to read where a submitted program is: queued, verifying, listed (with listingUrl and, once scored, reportUrl) or rejected (with reason). Do not use to look up listed programs; call get_program for those.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The id submit_program returned"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"status"
],
"properties": {
"id": {
"type": "string",
"description": "Submission id for get_submission_status; omitted when the domain is already listed"
},
"reason": {
"type": "string",
"description": "Why a submission was rejected, in one sentence"
},
"status": {
"enum": [
"queued",
"verifying",
"listed",
"rejected"
],
"type": "string",
"description": "queued: waiting for a maintainer; verifying: terms being checked on the brand's own page; listed: on OpenAffiliate; rejected: see reason"
},
"createdAt": {
"type": "string",
"description": "When the submission was made, ISO 8601"
},
"duplicate": {
"type": "boolean",
"description": "True when this domain was already in the queue; the existing submission is returned"
},
"reportUrl": {
"type": "string",
"description": "The program's OAS report when it is scored"
},
"statusUrl": {
"type": "string",
"description": "REST URL that returns this submission's status"
},
"updatedAt": {
"type": "string",
"description": "When its status last changed, ISO 8601"
},
"listingUrl": {
"type": "string",
"description": "The program's page on openaffiliate.dev when it is listed"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
categories — OpenAffiliate Categories
All registry category names and active program counts, identical to list_categories. Use a name with search_programs to discover programs.
openaffiliate://categories30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 954 ms
- 95th percentile latency
- 954 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 954 ms · metadata changed · 5 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http open-affiliate-mcp https://openaffiliate.dev/api/mcpCodex
codex mcp add open-affiliate-mcp --url https://openaffiliate.dev/api/mcpCursor
{
"mcpServers": {
"open-affiliate-mcp": {
"url": "https://openaffiliate.dev/api/mcp"
}
}
}Cline
{
"mcpServers": {
"open-affiliate-mcp": {
"type": "streamableHttp",
"url": "https://openaffiliate.dev/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"open-affiliate-mcp": {
"type": "http",
"url": "https://openaffiliate.dev/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http open-affiliate-mcp https://openaffiliate.dev/api/mcpClaude Desktop
https://openaffiliate.dev/api/mcpWindsurf
{
"mcpServers": {
"open-affiliate-mcp": {
"serverUrl": "https://openaffiliate.dev/api/mcp"
}
}
}Let your agent find its tools
Find servers like Open Affiliate MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.