Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 165 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,185 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "interchange-plugin",
"description": "Scope3 Interchange plugins for Claude Code and Cowork.",
"description": "Interchange workflow packages for Claude Code and Cowork.",
"owner": {
"name": "Scope3 PBC",
"email": "engineering@scope3.com"
},
"plugins": [
{
"name": "interchange",
"description": "Plan, buy, and manage advertising through the Interchange V3 MCP server.",
"name": "amc-listing",
"description": "Build and maintain an Agentic Media Company listing in Interchange.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./",
"source": "./plugins/amc-listing",
"category": "productivity",
"keywords": [
"advertising",
"listing",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "amc-merchandising",
"description": "Merchandise an Agentic Media Company's inventory and products in Interchange.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/amc-merchandising",
"category": "productivity",
"keywords": [
"advertising",
"inventory",
"products",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "amc-distribution",
"description": "Prepare and distribute an Agentic Media Company through supported agent channels.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/amc-distribution",
"category": "deployment",
"keywords": [
"advertising",
"distribution",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "amc-campaign-management",
"description": "Operate seller-side campaigns and delivery in Interchange.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/amc-campaign-management",
"category": "productivity",
"keywords": [
"advertising",
"campaigns",
"media-buying",
"delivery",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "buyer-account-setup",
"description": "Prepare an Interchange buyer account for campaign execution.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/buyer-account-setup",
"category": "productivity",
"keywords": [
"advertising",
"buyer",
"account",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "buyer-campaign-management",
"description": "Discover sellers, create campaigns, request proposals, and manage delivery.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/buyer-campaign-management",
"category": "productivity",
"keywords": [
"advertising",
"buyer",
"campaigns",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "buyer-creative-management",
"description": "Prepare and inspect buyer creative inputs for campaign execution.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/buyer-creative-management",
"category": "productivity",
"keywords": [
"advertising",
"buyer",
"creative",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "buyer-reporting",
"description": "Inspect buyer campaign delivery and reporting in Interchange.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/buyer-reporting",
"category": "monitoring",
"keywords": [
"advertising",
"buyer",
"reporting",
"mcp"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "sales-agent-testing",
"description": "Test a first-party or third-party AdCP sales agent with governed buyer workflows.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/sales-agent-testing",
"category": "testing",
"keywords": [
"advertising",
"adcp",
"sales-agent",
"testing"
],
"homepage": "https://docs.interchange.io",
"license": "Apache-2.0"
},
{
"name": "amc-self-serve-buyer",
"description": "Bundle buyer workflows for an Agentic Media Company's own self-serve plugin.",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"source": "./plugins/amc-self-serve-buyer",
"category": "productivity",
"keywords": [
"advertising",
"buyer",
"self-serve",
"mcp"
],
"homepage": "https://docs.interchange.io",
Expand Down
14 changes: 0 additions & 14 deletions .claude-plugin/plugin.json

This file was deleted.

8 changes: 6 additions & 2 deletions .github/workflows/validate-plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,12 @@ jobs:
with:
node-version: '26.4.0'

- name: Validate plugin manifest
run: npx --yes "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}" plugin validate --strict .claude-plugin/plugin.json
- name: Validate plugin manifests
run: |-
set -euo pipefail
while IFS= read -r manifest; do
npx --yes "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}" plugin validate --strict "$manifest"
done < <(find plugins -path '*/.claude-plugin/plugin.json' -type f | sort)

- name: Validate marketplace manifest
run: npx --yes "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}" plugin validate --strict .claude-plugin/marketplace.json
63 changes: 35 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,51 @@
# Interchange
# Interchange plugin marketplace

Plan, buy, and manage advertising through the Interchange V3 MCP server.
Install only the workflow packages relevant to your role. Packages select
instructions and starter workflows; they do not grant account permissions.
Interchange OAuth and server-side entitlements remain authoritative.

## Install

```
/plugin marketplace add scope3data/interchange-plugin
/plugin install interchange
/plugin install buyer-campaign-management@interchange-plugin
```

Complete OAuth when prompted. Never paste API keys or provider credentials
into a prompt — provider authorization uses the browser URLs Interchange
returns.

## What's included

- `.claude-plugin/plugin.json` — the Claude Code / Cowork plugin manifest.
- `.claude-plugin/marketplace.json` — lets this repo be added directly as a
marketplace (`/plugin marketplace add`, above).
- `.mcp.json` — the remote Interchange V3 MCP connection (OAuth, no keys).
- `skills/` — three canonical buyer skills: get an account ready to buy,
set up a campaign, and manage a live campaign.
- `assets/` — the directory and composer icons.
- `LICENSE` — Apache License, Version 2.0 (see License, below).

Every durable change made through these skills remains confirmation-gated
by the underlying Interchange tool contract.

## Documentation

Full product documentation lives at https://docs.interchange.io.
into a prompt.

## Packages

| Package | Purpose | Current canonical skills |
|---|---|---|
| `amc-listing` | Build and maintain an Agentic Media Company listing in Interchange. | MCP access; workflow skill forthcoming |
| `amc-merchandising` | Merchandise an Agentic Media Company's inventory and products in Interchange. | MCP access; workflow skill forthcoming |
| `amc-distribution` | Prepare and distribute an Agentic Media Company through supported agent channels. | `publish-an-openai-app@1.0.0` |
| `amc-campaign-management` | Operate seller-side campaigns and delivery in Interchange. | MCP access; workflow skill forthcoming |
| `buyer-account-setup` | Prepare an Interchange buyer account for campaign execution. | `get-account-ready-to-buy@1.0.0` |
| `buyer-campaign-management` | Discover sellers, create campaigns, request proposals, and manage delivery. | `buy-from-seller@1.3.0`, `set-up-a-campaign@1.2.0`, `manage-a-campaign@1.1.0` |
| `buyer-creative-management` | Prepare and inspect buyer creative inputs for campaign execution. | `inspect-tag-sheet@1.0.0` |
| `buyer-reporting` | Inspect buyer campaign delivery and reporting in Interchange. | MCP access; workflow skill forthcoming |
| `sales-agent-testing` | Test a first-party or third-party AdCP sales agent with governed buyer workflows. | `test-sales-agent@1.5.1` |
| `amc-self-serve-buyer` | Bundle buyer workflows for an Agentic Media Company's own self-serve plugin. | `get-account-ready-to-buy@1.0.0`, `buy-from-seller@1.3.0`, `set-up-a-campaign@1.2.0`, `manage-a-campaign@1.1.0`, `inspect-tag-sheet@1.0.0` |

`amc-self-serve-buyer` is the aggregate buyer package an Agentic Media
Company can bundle into its own self-serve plugin. `sales-agent-testing`
is the package for first-party or third-party agent validation.

Skill files are composed from the canonical, versioned Interchange skill
registry. When a registry current-version pointer or referenced asset changes,
the source workflow opens a reviewed sync PR for this repository.

Every durable change remains confirmation-gated by the underlying Interchange
tool contract. Full documentation lives at https://docs.interchange.io.

## License

Licensed under the [Apache License, Version 2.0](LICENSE). Copyright 2026 Scope3 PBC.

## About this repository

This repository is a generated mirror. Its content is composed and synced
from Scope3's internal monorepo by an automated workflow, and every sync is
reviewed by a human before it reaches `main` — do not hand-edit files here,
they will be overwritten by the next sync. `SOURCE_DIGEST` at the repo
root records the content checkpoint of the last sync.
This is a generated public mirror. Do not hand-edit it: the next reviewed sync
will overwrite local changes. `SOURCE_DIGEST` records the composed content
checkpoint.
2 changes: 1 addition & 1 deletion SOURCE_DIGEST
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7aab66928511bcdaed9ce5e4d2e8d8cc643b80a3c2255c5d2aa609b9095960aa
65150d2d9e2468c611e4056622be82742b191ce0938da084d975c0de877f1dcb
20 changes: 20 additions & 0 deletions plugins/amc-campaign-management/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "amc-campaign-management",
"displayName": "AMC Campaign Management",
"description": "Operate seller-side campaigns and delivery in Interchange.",
"version": "1.0.0+8956d0aeaf6e",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"homepage": "https://docs.interchange.io",
"repository": "https://github.com/scope3data/interchange-plugin",
"license": "Apache-2.0",
"keywords": [
"advertising",
"campaigns",
"delivery",
"mcp"
],
"mcpServers": "./.mcp.json"
}
File renamed without changes.
20 changes: 20 additions & 0 deletions plugins/amc-distribution/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "amc-distribution",
"displayName": "AMC Distribution",
"description": "Prepare and distribute an Agentic Media Company through supported agent channels.",
"version": "1.0.0+5156e005ef0d",
"author": {
"name": "Scope3 PBC",
"url": "https://interchange.io"
},
"homepage": "https://docs.interchange.io",
"repository": "https://github.com/scope3data/interchange-plugin",
"license": "Apache-2.0",
"keywords": [
"advertising",
"distribution",
"mcp"
],
"mcpServers": "./.mcp.json",
"skills": "./skills/"
}
8 changes: 8 additions & 0 deletions plugins/amc-distribution/.mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"interchange": {
"type": "http",
"url": "https://api.interchange.io/mcp/v3"
}
}
}
Binary file added plugins/amc-distribution/assets/composer-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions plugins/amc-distribution/skills/publish-an-openai-app/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
name: publish-an-openai-app
description: Prepare and guide publication of an Interchange-powered app in OpenAI. Use when a seller administrator asks what is ready, needs help configuring the app's CNAME or OpenAI challenge, wants a submission checklist or package, or needs guidance for portal fields, reviewer access, screenshots, locales, release notes, scans, and the review video.
---

# Publish an OpenAI App

Guide a seller administrator from Interchange Distribution readiness through the manual OpenAI submission. Use only the existing Distribution surfaces for state: `get` reads it, and `save_seller` changes its OpenAI challenge token. Never invent a provider-specific tool or claim that Interchange tested or submitted an OpenAI draft.

Canonical customer documentation: <https://docs.interchange.io/v2/reference/white-label-chatgpt-app>

## Workflow

1. Confirm that the active account is the Seller Account the user intends to publish and that the user is an administrator. If either is false, stop and explain which account or administrator is required.
2. Call `get({ kind: "distribution" })`. Treat the returned Distribution object as the authority on the public hostname, CNAME target, ownership record, hostname status, MCP URL, and OpenAI challenge status.
3. Work through hostname readiness:
- Give the user the exact CNAME and ownership records returned by Distribution. Do not guess DNS values.
- Ask the user to make the DNS changes with their DNS provider, then call `get({ kind: "distribution" })` again.
- Treat `hostname.status: "active"` as Interchange's server-verified CNAME/ownership result. A pending or failed state is not ready; report the returned next action.
- Do not describe this as testing OpenAI publication. Interchange can verify its hostname and challenge endpoint, not the state of an OpenAI portal draft.
4. When OpenAI gives the user a challenge token, ask them to confirm the exact value and call `save_seller({ distribution: { openaiChallengeToken: "<exact token>" } })` as a separate write. Replacing or removing a token requires the matching `confirmReplace` or `confirmRemove` field and immediate confirmation. Re-read Distribution afterward and report its observed challenge status.
5. Direct the administrator to download a fresh OpenAI submission package from Distribution settings. Do not claim the MCP tool downloaded it. Use its `README.md` and `readiness-report.json` as the snapshot-specific authority for imported JSON, included assets, missing items, manual portal fields, approved prompts, test cases, and the video shot list.
6. Before portal submission, walk through every manual group:
- publisher identity, monitored contact, app identity, descriptions, category, website, support, privacy, and Terms URLs;
- directory and composer logos, screenshots, starter prompts, supported locales, and country availability;
- production MCP URL, OAuth redirect allowlist, reviewer account, fresh tool and skill scan, tool annotations, justifications, tests, confirmations, and UI CSP/origins;
- policy and data attestations, release version, release notes, and the final review video.
7. Treat reviewer credentials and portal-only evidence as manual and sensitive. Never request, store, repeat, or place credentials, OAuth tokens, challenge tokens, or private customer data in a generated file or ordinary chat response. The publisher enters reviewer credentials only in OpenAI's protected portal.
8. Keep completion evidence honest:
- `READY_FOR_PORTAL` means Interchange found no package-level blocker; `MANUAL_STEPS_REMAIN` still requires owner and reviewer work.
- Never infer that a locale, country, policy answer, screenshot, scan, reviewer account, or video is complete. Ask the owner to verify it in the portal.
- Never claim an uploaded OpenAI draft updates automatically. Regenerate and re-import after listing, branding, hostname, legal URL, account role, tool surface, test case, canonical skill, locale, or Discovery publication changes.
9. Finish with a compact checklist grouped as: ready in Distribution, missing in Interchange, manual in OpenAI, and stale since the last package. Name the next owner action and stop at any unresolved blocker.

## Stop conditions

- Do not publish, submit, or approve an OpenAI app on the user's behalf.
- Do not invent DNS records, portal values, reviewer evidence, supported locales, or completion state.
- Do not use unrelated seller writes to work around missing Distribution state.
- If `get({ kind: "distribution" })` or the nested `save_seller` Distribution input is unavailable, report that the current account, role, or V3 surface cannot perform this workflow and point to the canonical documentation.
Loading