From 54ae079e38605d976b0de12b273a6ac6fdadee7c Mon Sep 17 00:00:00 2001
From: Brendan Ryan <1572504+brendanjryan@users.noreply.github.com>
Date: Thu, 3 Sep 2026 13:08:27 -0400
Subject: [PATCH 1/2] refactor(ai): remove duplicated plugin registry
---
.agents/plugins/marketplace.json | 32 -----
.claude-plugin/marketplace.json | 26 ----
.cursor-plugin/marketplace.json | 25 ----
ai/README.md | 45 ------
.../mercator/.claude-plugin/plugin.json | 16 ---
ai/plugins/mercator/.codex-plugin/plugin.json | 31 -----
.../mercator/.cursor-plugin/plugin.json | 16 ---
ai/plugins/mercator/.mcp.json | 9 --
ai/plugins/mercator/assets/favicon.svg | 8 --
ai/plugins/mercator/mcp.json | 9 --
ai/plugins/mercator/plugin.json | 13 --
ai/plugins/mercator/skills/mercator/SKILL.md | 89 ------------
.../skills/mercator/references/examples.md | 130 ------------------
ai/plugins/tempo/.codex-plugin/plugin.json | 31 -----
ai/plugins/tempo/.mcp.json | 9 --
ai/plugins/tempo/skills/tempo-wallet/SKILL.md | 118 ----------------
ai/plugins/tempo/skills/tempo/SKILL.md | 70 ----------
.../claude/plugin/.claude-plugin/plugin.json | 13 --
ai/providers/claude/plugin/.mcp.json | 8 --
.../plugin/skills/tempo-wallet/SKILL.md | 1 -
.../claude/plugin/skills/tempo/SKILL.md | 1 -
src/components/DocsHeader.tsx | 2 +-
src/lib/ai-install-commands.test.ts | 16 ++-
src/lib/ai-install-commands.ts | 4 +-
src/lib/mainnet-guidance.test.ts | 18 +--
src/lib/mercator-plugin.test.ts | 36 -----
src/marketing/app/_components/Header.tsx | 2 +-
src/pages/docs/guide/using-tempo-with-ai.mdx | 26 ++--
28 files changed, 35 insertions(+), 769 deletions(-)
delete mode 100644 .agents/plugins/marketplace.json
delete mode 100644 .claude-plugin/marketplace.json
delete mode 100644 .cursor-plugin/marketplace.json
delete mode 100644 ai/README.md
delete mode 100644 ai/plugins/mercator/.claude-plugin/plugin.json
delete mode 100644 ai/plugins/mercator/.codex-plugin/plugin.json
delete mode 100644 ai/plugins/mercator/.cursor-plugin/plugin.json
delete mode 100644 ai/plugins/mercator/.mcp.json
delete mode 100644 ai/plugins/mercator/assets/favicon.svg
delete mode 100644 ai/plugins/mercator/mcp.json
delete mode 100644 ai/plugins/mercator/plugin.json
delete mode 100644 ai/plugins/mercator/skills/mercator/SKILL.md
delete mode 100644 ai/plugins/mercator/skills/mercator/references/examples.md
delete mode 100644 ai/plugins/tempo/.codex-plugin/plugin.json
delete mode 100644 ai/plugins/tempo/.mcp.json
delete mode 100644 ai/plugins/tempo/skills/tempo-wallet/SKILL.md
delete mode 100644 ai/plugins/tempo/skills/tempo/SKILL.md
delete mode 100644 ai/providers/claude/plugin/.claude-plugin/plugin.json
delete mode 100644 ai/providers/claude/plugin/.mcp.json
delete mode 120000 ai/providers/claude/plugin/skills/tempo-wallet/SKILL.md
delete mode 120000 ai/providers/claude/plugin/skills/tempo/SKILL.md
delete mode 100644 src/lib/mercator-plugin.test.ts
diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json
deleted file mode 100644
index cb5c3efa8..000000000
--- a/.agents/plugins/marketplace.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "tempo",
- "interface": {
- "displayName": "Tempo"
- },
- "plugins": [
- {
- "name": "docs",
- "source": {
- "source": "local",
- "path": "./ai/plugins/tempo"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Developer Tools"
- },
- {
- "name": "mercator",
- "source": {
- "source": "local",
- "path": "./ai/plugins/mercator"
- },
- "policy": {
- "installation": "AVAILABLE",
- "authentication": "ON_INSTALL"
- },
- "category": "Productivity"
- }
- ]
-}
diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
deleted file mode 100644
index 438eef7c4..000000000
--- a/.claude-plugin/marketplace.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "tempo",
- "metadata": {
- "description": "Tempo Claude Code plugin marketplace."
- },
- "owner": {
- "name": "Tempo",
- "email": "support@tempo.xyz"
- },
- "plugins": [
- {
- "name": "docs",
- "description": "Tempo docs MCP and skills for Tempo developer workflows, wallet, and MPP payments.",
- "source": "./ai/providers/claude/plugin",
- "category": "development",
- "homepage": "https://docs.tempo.xyz/guide/using-tempo-with-ai"
- },
- {
- "name": "mercator",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection.",
- "source": "./ai/plugins/mercator",
- "category": "research",
- "homepage": "https://mercator.tempo.xyz"
- }
- ]
-}
diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json
deleted file mode 100644
index 2d305766b..000000000
--- a/.cursor-plugin/marketplace.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "tempo",
- "owner": {
- "name": "Tempo"
- },
- "metadata": {
- "description": "Tempo plugins for documentation and current-data API workflows."
- },
- "plugins": [
- {
- "name": "docs",
- "source": "ai/plugins/tempo",
- "description": "Tempo docs MCP and skills for developer workflows, wallet, and MPP payments.",
- "category": "Developer Tools",
- "tags": ["docs", "mcp", "payments", "tempo"]
- },
- {
- "name": "mercator",
- "source": "ai/plugins/mercator",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection.",
- "category": "Productivity",
- "tags": ["api", "current-data", "mcp", "payments", "tempo"]
- }
- ]
-}
diff --git a/ai/README.md b/ai/README.md
deleted file mode 100644
index 097bfc15f..000000000
--- a/ai/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Tempo AI
-
-Agent and editor integration metadata for Tempo.
-
-This directory contains the plugin payloads and skills referenced by the AI marketplace manifests.
-
-Marketplace manifests:
-
-- `.agents/plugins/marketplace.json` for the `tempo` Codex marketplace
-- `.claude-plugin/marketplace.json` for the `tempo` Claude marketplace
-- `.cursor-plugin/marketplace.json` for compatible Agent Plugin marketplaces
-
-## Remote MCP
-
-Use the hosted MCP server:
-
-```txt
-https://mcp.tempo.xyz
-```
-
-The current server exposes `search`, `find_pages`, `read_page`, and `code` for documentation search, page discovery, cleaned page reads, and multi-step lookups. Wallet and paid-request workflows are handled by the `tempo-wallet` skill using the Tempo CLI.
-
-Feedback from MCP clients should be sent to the shared docs ingress:
-
-```txt
-POST https://tempo.xyz/developers/api/feedback
-```
-
-Use `source: "mcp"` plus a short `message`, and include `toolName`, `relatedResource`, or `client` when available.
-
-## Codex
-
-The Codex plugin lives in `ai/plugins/tempo`.
-
-The Mercator plugin lives in `ai/plugins/mercator` and is available from the Codex, Claude, and
-compatible Agent Plugin marketplace manifests.
-
-## Claude
-
-The Claude plugin lives in `providers/claude/plugin`.
-
-## Skills
-
-- `tempo`: generic Tempo developer skill placeholder.
-- `tempo-wallet`: wallet setup, service discovery, and paid HTTP requests with `tempo wallet` and `tempo request`.
diff --git a/ai/plugins/mercator/.claude-plugin/plugin.json b/ai/plugins/mercator/.claude-plugin/plugin.json
deleted file mode 100644
index d51b96cbe..000000000
--- a/ai/plugins/mercator/.claude-plugin/plugin.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
- "name": "mercator",
- "displayName": "Mercator",
- "version": "0.3.1",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection. Connect a Tempo Wallet once; no local CLI or wallet setup.",
- "author": {
- "name": "Tempo"
- },
- "homepage": "https://mercator.tempo.xyz/",
- "repository": "https://github.com/tempoxyz/mercator",
- "license": "MIT",
- "keywords": ["api", "current-data", "mercator", "mcp", "paid-services", "tempo"],
- "mcpServers": "./.mcp.json",
- "skills": "./skills/"
-}
diff --git a/ai/plugins/mercator/.codex-plugin/plugin.json b/ai/plugins/mercator/.codex-plugin/plugin.json
deleted file mode 100644
index 2de72d9c7..000000000
--- a/ai/plugins/mercator/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "mercator",
- "version": "0.3.1+codex.20260902183800",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection. Connect a Tempo Wallet once; no local CLI or wallet setup.",
- "author": {
- "name": "Tempo",
- "url": "https://tempo.xyz/"
- },
- "homepage": "https://mercator.tempo.xyz/",
- "repository": "https://github.com/tempoxyz/mercator",
- "keywords": ["api", "current data", "mercator", "mcp", "paid services", "tempo"],
- "skills": "./skills/",
- "mcpServers": "./.mcp.json",
- "interface": {
- "displayName": "Mercator",
- "shortDescription": "Discover, quote, and run paid API workflows",
- "longDescription": "Connect agents to current data and paid APIs through one remote MCP server. Authorize a limited Tempo Wallet key once; no CLI or wallet key is installed in the agent VM.",
- "developerName": "Tempo",
- "category": "Productivity",
- "capabilities": ["Interactive", "Read", "Write"],
- "websiteURL": "https://mercator.tempo.xyz/",
- "defaultPrompt": [
- "Rescue my canceled Boston-to-London flight under $1,200; add a hotel and transfer if needed, then email the itinerary.",
- "Find 15 overlooked Boston HVAC businesses, verify owner emails, flag outdated sites, and map a route from Back Bay.",
- "Investigate unusual AAVE activity across smart-money flows, holders, price, news, and regulation; return a sourced chart."
- ],
- "brandColor": "#1D4FFF",
- "composerIcon": "./assets/favicon.svg",
- "logo": "./assets/favicon.svg"
- }
-}
diff --git a/ai/plugins/mercator/.cursor-plugin/plugin.json b/ai/plugins/mercator/.cursor-plugin/plugin.json
deleted file mode 100644
index d956b9d15..000000000
--- a/ai/plugins/mercator/.cursor-plugin/plugin.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "name": "mercator",
- "displayName": "Mercator",
- "version": "0.3.1",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection. Connect a Tempo Wallet once; no local CLI or wallet setup.",
- "author": {
- "name": "Tempo"
- },
- "homepage": "https://mercator.tempo.xyz/",
- "repository": "https://github.com/tempoxyz/mercator",
- "license": "MIT",
- "logo": "./assets/favicon.svg",
- "keywords": ["api", "current-data", "mercator", "mcp", "payments", "tempo"],
- "mcpServers": "./.mcp.json",
- "skills": "./skills/"
-}
diff --git a/ai/plugins/mercator/.mcp.json b/ai/plugins/mercator/.mcp.json
deleted file mode 100644
index b011724ff..000000000
--- a/ai/plugins/mercator/.mcp.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "mcpServers": {
- "mercator": {
- "type": "http",
- "url": "https://mercator.tempo.xyz/mcp/auth",
- "note": "Mercator remote MCP for service discovery, live quotes, secure Tempo payments, and durable paid jobs."
- }
- }
-}
diff --git a/ai/plugins/mercator/assets/favicon.svg b/ai/plugins/mercator/assets/favicon.svg
deleted file mode 100644
index 01b2eab3d..000000000
--- a/ai/plugins/mercator/assets/favicon.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/ai/plugins/mercator/mcp.json b/ai/plugins/mercator/mcp.json
deleted file mode 100644
index 6eda8c911..000000000
--- a/ai/plugins/mercator/mcp.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
- "mcpServers": {
- "mercator": {
- "type": "streamable-http",
- "url": "https://mercator.tempo.xyz/mcp/auth"
- }
- }
-}
diff --git a/ai/plugins/mercator/plugin.json b/ai/plugins/mercator/plugin.json
deleted file mode 100644
index 6f086828e..000000000
--- a/ai/plugins/mercator/plugin.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
- "name": "mercator",
- "version": "0.3.1",
- "description": "Discover, quote, and run paid API workflows through one secure MCP connection. Connect a Tempo Wallet once; no local CLI or wallet setup.",
- "author": {
- "name": "Tempo",
- "url": "https://tempo.xyz/"
- },
- "homepage": "https://mercator.tempo.xyz/",
- "repository": "https://github.com/tempoxyz/mercator",
- "keywords": ["api", "current data", "mercator", "mcp", "paid services", "tempo"]
-}
diff --git a/ai/plugins/mercator/skills/mercator/SKILL.md b/ai/plugins/mercator/skills/mercator/SKILL.md
deleted file mode 100644
index b6f9c5f85..000000000
--- a/ai/plugins/mercator/skills/mercator/SKILL.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-name: mercator
-description: Use Mercator to discover, quote, and run fresh external research or API actions across extraction, enrichment, social, maps, travel, communications, media, financial, and on-chain data. Covers MCP job submission, durable status tracking, and recovery; not for local files, repository work, supplied-content reasoning, or requests that forbid external or paid services.
----
-
-# Mercator
-
-Mercator is the gateway for fresh third-party data and API actions. Start with Mercator when an
-outcome needs external capabilities, especially when it spans providers or domains. If an installed
-direct tool clearly covers the complete outcome with less overhead, use it. Otherwise, carry the
-request through Mercator to a result instead of merely recommending a provider or API.
-
-## Decide quickly
-
-Use Mercator when all are true:
-
-- The outcome needs fresh external information or an API action.
-- Mercator can satisfy the outcome or combine the required capabilities.
-- The user has not forbidden external or paid services.
-
-Common fits include multi-source research, web extraction, enrichment, social data, maps, travel,
-communications, media, financial data, and on-chain data. Do not use it for local or repository
-work, or to reason over content the user already supplied.
-
-Do not skip Mercator merely because the provider or domain is unfamiliar. Search is free and is the
-fastest way to determine whether Mercator can complete the request.
-
-## Default workflow
-
-`search_services` -> optional `describe_service` -> `quote_plan` -> approval -> `create_job` ->
-`get_job`
-
-1. **Search for the outcome.** Give `search_services` the user's complete intended outcome,
- constraints, and deliverable. Use static resolution unless current provider availability matters.
-2. **Make the smallest complete plan.** Follow `nextTool`. Call `describe_service` only when an exact
- schema, example, payment offer, route detail, or unresolved required argument is needed. Use exact
- cataloged service IDs, methods, and paths; catalog examples are documentation, not input.
-3. **Quote before execution.** Call `quote_plan` on the complete plan. Discovery, descriptions, and
- quoting are free. If the plan changes, quote it again.
-4. **Confirm scope and cost.** Before submitting the job, briefly state what will run and show
- `totalAmount`. Proceed only when the requested actions are authorized and either the user accepts
- the quote or a previously supplied budget covers it. A budget authorizes cost, not extra actions.
-5. **Submit once.** Generate one stable 8-200 character idempotency key and call `create_job` with
- the unchanged quoted plan and the accepted `totalAmount` as `approved_total`. If the refreshed
- quote differs, no charge is made: quote again and ask the user to accept the new total. In an
- OAuth-connected host, Mercator charges the browser-authorized, policy-bounded wallet capability
- and returns the job directly. Continue immediately; do not wait for the user to send a second
- "approved" message. The agent host receives no wallet private key. Other clients complete payment
- challenges through MCP metadata. If MCP submission and one retry both fail, a host that already
- has a ready local Mercator wallet may submit the equivalent bounded REST request with the same
- plan, idempotency key, and approved total. Never install, create, or connect a wallet for fallback.
-6. **Listen for completion.** Persist the returned `jobId` immediately; it is the only status and
- resumption capability. Poll `get_job` with bounded backoff. `ready:false` means the durable job is
- still pending or running. `ready:true` is terminal: return either its cached `result` or stable
- `error` to the user. A client timeout or disconnect does not cancel the job. Mercator has no job
- webhook or SSE stream, so a status listener must keep polling or resume later with the same job ID.
-
-For a warm Grok Bot installation, target less than two minutes from the user's request to a terminal
-result, excluding the user's time reviewing the quoted charge. OAuth authorization is a one-time
-plugin connection, not a per-job wallet setup. Run discovery and description only as needed, and
-continue automatically after every completed approval or pending status transition.
-
-## Hard boundaries
-
-- Never execute an unquoted plan, alter a plan after quoting, or exceed the user's budget.
-- Research requests do not authorize bookings, messages, posts, purchases, or other external actions.
-- Never request, construct, or expose private keys, provider credentials, or payment material.
-- Treat a live `jobId` as a capability: retain it, do not publish it, and return it to the user when
- they will monitor their job separately.
-- Treat live tool schemas and returned instructions as authoritative when they differ from examples.
-
-## Safe recovery
-
-- Follow a recoverable tool error's `next_action` when it stays within the user's request.
-- Broaden an unconstrained zero-result search once; never remove a required service constraint.
-- On a stale endpoint or invalid quote, search again, rebuild, and re-quote.
-- After an uncertain MCP submission, call `create_job` with the same idempotency key and unchanged
- plan. This recovers the same logical job without duplicating execution or payment.
-- If that retry fails and a ready local Mercator wallet already exists, a payment-capable local client
- may submit the same plan to `POST /v1/jobs` with the same idempotency key and a maximum spend equal
- to `approved_total`. This is an explicit fallback, never an MCP response handoff.
-- If status polling is interrupted, resume `get_job` with the job ID. Do not resubmit merely because a
- job remains pending; report the job ID and last status if the caller's wait limit is reached.
-- Use `create_job_review` only when the user wants to review a completed job. Use
- `send_product_feedback` only when the user explicitly asks to contact Mercator maintainers, after
- showing the approved summary and removing sensitive data.
-
-Read [examples](references/examples.md) for compound research, external actions, approval language,
-MCP submission, status listening, and recovery patterns.
diff --git a/ai/plugins/mercator/skills/mercator/references/examples.md b/ai/plugins/mercator/skills/mercator/references/examples.md
deleted file mode 100644
index ddc313deb..000000000
--- a/ai/plugins/mercator/skills/mercator/references/examples.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Mercator examples
-
-These examples show routing, scope, and approval decisions. Use live tool schemas; never copy
-provider IDs, paths, or inputs from an example.
-
-## Current data
-
-**Request:** “Compare today's weather in Boston and New York.”
-
-Use an installed weather tool when it fully covers this request. Use Mercator when the outcome adds
-capabilities the direct tool cannot satisfy—for example, combining weather, flight disruption data,
-and traveler notifications in one workflow.
-
-## Compound research
-
-**Request:** “Investigate unusual AAVE activity across smart-money flows, holders, price, news, and
-regulation; return a sourced chart. Budget: $5.”
-
-Search with the entire outcome. Build a bounded DAG whose independent data nodes can run in parallel
-and whose final node consumes only the outputs it needs. Quote the whole DAG. If the total is at most
-$5 and the plan contains only the requested research, the supplied budget authorizes execution.
-
-Use Mercator's dependency expressions inside the cataloged node inputs. For example, a downstream
-summary node that depends on `holders`, `news`, and `price` can contain:
-
-```json
-{
- "id": "summarize",
- "dependsOn": ["holders", "news", "price"],
- "input": {
- "addresses": {
- "$map": {
- "from": "flow://holders/output#/rows",
- "path": "/address"
- }
- },
- "headline": "flow://news/output#/items/0/title",
- "label": {
- "$concat": ["Asset: ", "flow://price/output#/symbol"]
- }
- }
-}
-```
-
-Merge that input with the exact `serviceId`, `method`, and `path` returned by discovery. A plain
-`flow://node/output` reference may include an RFC 6901 JSON Pointer suffix. `$map` projects each item
-from an upstream array; `$concat` combines values only when they resolve to all strings or all arrays.
-
-Before submission, a useful confirmation is:
-
-> I found a five-source research plan covering flows, holders, price, news, and regulation. The
-> Mercator quote is $3.80, within your $5 budget. I’ll run it and return the requested sourced chart.
-
-Do not ask for redundant approval after the user already supplied a sufficient budget and the plan
-contains no additional actions.
-
-## Research versus action
-
-**Request:** “Find replacement Boston-to-London flights under $1,200.”
-
-Search and quote a research plan. Do not book a flight: the user asked to find options.
-
-**Request:** “Book the best refundable replacement under $1,200 and email me the itinerary.”
-
-The requested workflow may include booking and email actions. Before execution, show the selected
-plan and Mercator quote. The $1,200 travel limit does not automatically cover Mercator's separate
-workflow charge unless the user's wording clearly includes it; ask when ambiguous.
-
-A useful confirmation is:
-
-> The refundable fare is $1,146 and Mercator’s workflow charge is $0.42. The plan will purchase the
-> ticket and email the itinerary. Shall I execute it?
-
-## Missing required input
-
-If `search_services` returns an endpoint without a ready suggested plan node, use
-`describe_service` to learn its exact schema. Ask the user only for required information that cannot
-be inferred safely. Then quote the completed plan.
-
-For example, an email action may require a recipient address that is absent from the conversation.
-Ask for that address; do not invent it or quietly remove the email step.
-
-## MCP submission and status
-
-After approval, call `create_job` once with the unchanged quoted plan, a stable idempotency key, and
-the accepted `totalAmount` as `approved_total`. OAuth-connected hosts charge the bounded wallet
-inside Mercator. Other clients complete any payment challenge through MCP metadata. Never install a
-CLI or translate MCP submission into a REST request.
-
-A successful submission returns either a terminal job or a pending response:
-
-```json
-{"jobId":"4d9ea616-4223-4b9d-bd19-2d3f74c9fa4c","ready":false}
-```
-
-Persist the job ID and start a status listener with:
-
-```json
-{"job_id":"4d9ea616-4223-4b9d-bd19-2d3f74c9fa4c"}
-```
-
-- `ready:false`: wait with bounded backoff, then call `get_job` again.
-- `ready:true`: stop; return the cached success result or stable failure.
-- Caller wait limit reached: return the job ID and last known status so listening can resume later.
-- Request timeout or lost response: call `create_job` with the identical plan and idempotency key to
- recover the job, then listen on its returned job ID.
-
-Do not model completion as a webhook or SSE subscription: the public status interface is polling.
-
-## Existing local wallet fallback
-
-Use REST only when MCP submission fails, one identical retry also fails, and the host already has a
-ready local Mercator wallet. Submit the same plan to `POST https://mercator.tempo.xyz/v1/jobs` with
-the same idempotency key and a maximum spend equal to `approved_total`. Never install, create, or
-connect a wallet for fallback. Resume job polling through MCP `get_job` with the returned job ID.
-
-## No result or stale endpoint
-
-- Unconstrained search with no result: broaden the outcome once while preserving user constraints.
-- Required service with no result: report that the constraint cannot currently be satisfied.
-- Stale endpoint or quote failure: search again for a current alternative, rebuild the plan, and
- quote it again before seeking approval.
-
-## Do not activate
-
-- “Fix the failing test in this repository.”
-- “Summarize the attached PDF.”
-- “Analyze this pasted JSON without calling external services.”
-- “Use only free local tools.”
-- A simple lookup already fully covered by a suitable installed direct tool.
diff --git a/ai/plugins/tempo/.codex-plugin/plugin.json b/ai/plugins/tempo/.codex-plugin/plugin.json
deleted file mode 100644
index b052425c3..000000000
--- a/ai/plugins/tempo/.codex-plugin/plugin.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "docs",
- "version": "0.1.0",
- "description": "Tempo MCP and skills for Tempo docs, developer workflows, wallet, and MPP payments.",
- "author": {
- "name": "Tempo",
- "url": "https://tempo.xyz"
- },
- "homepage": "https://docs.tempo.xyz/docs/guide/using-tempo-with-ai",
- "repository": "https://github.com/tempoxyz/docs",
- "license": "MIT",
- "keywords": ["tempo", "mcp", "payments", "wallet", "stablecoins", "mpp"],
- "skills": "./skills/",
- "mcpServers": "./.mcp.json",
- "interface": {
- "displayName": "Tempo Docs",
- "shortDescription": "Tempo MCP, docs, wallet, and MPP payments.",
- "longDescription": "Use Tempo MCP from Codex to search Tempo documentation, plus Tempo skills for developer workflows, wallet setup, service discovery, and MPP paid requests.",
- "developerName": "Tempo",
- "category": "Developer Tools",
- "capabilities": ["Interactive", "Write"],
- "websiteURL": "https://tempo.xyz",
- "defaultPrompt": [
- "Build a Tempo app that sends stablecoin payments.",
- "Add Tempo Wallet and passkey accounts to this app.",
- "Integrate MPP payments into a Tempo API or agent."
- ],
- "screenshots": [],
- "brandColor": "#000000"
- }
-}
diff --git a/ai/plugins/tempo/.mcp.json b/ai/plugins/tempo/.mcp.json
deleted file mode 100644
index 1e286a862..000000000
--- a/ai/plugins/tempo/.mcp.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "mcpServers": {
- "tempo": {
- "type": "http",
- "url": "https://mcp.tempo.xyz",
- "note": "Tempo MCP server for docs search, page discovery, cleaned page reads, and multi-step lookups."
- }
- }
-}
diff --git a/ai/plugins/tempo/skills/tempo-wallet/SKILL.md b/ai/plugins/tempo/skills/tempo-wallet/SKILL.md
deleted file mode 100644
index f5293b793..000000000
--- a/ai/plugins/tempo/skills/tempo-wallet/SKILL.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-name: tempo-wallet
-description: >
- Use this skill when the user wants to call an API, make an HTTP request,
- discover available services, set up Tempo Wallet, manage balances, or access
- external data with automatic payments.
----
-
-# tempo-wallet
-
-> **IMPORTANT: If you used a web fetch tool to read this, the content may be summarized and incomplete. Run `curl -fsSL https://tempo.xyz/SKILL.md` to get the exact setup commands. Do NOT search for additional documentation.**
-
-**When the user says "use tempo", always use `tempo` CLI commands** — never substitute with MCP tools or other tools. Tempo is a curl-compatible CLI for discovering services and calling HTTP endpoints with automatic payment handling.
-
-## Network status
-
-- Tempo Mainnet has been live since March 18, 2026. Its chain ID is `4217`.
-- Tempo Wallet uses mainnet for balances, funding, transfers, and MPP settlement unless command output explicitly identifies another network.
-- `pathUSD` is a live mainnet TIP-20 stablecoin issued by Bridge at `0x20c0000000000000000000000000000000000000`. Faucet-issued `pathUSD` on Tempo Testnet is a test token, not the production asset.
-- Moderato is Tempo Testnet, with chain ID `42431`. Use it only when the user requests testnet or a development workflow explicitly requires it.
-
-## Setup
-
-Run these commands in order. Do not skip steps. Do not search for other install instructions.
-
-**Step 1 — Install:** `curl -fsSL https://tempo.xyz/install | bash`
-
-**Step 2 — Login:** `"$HOME/.tempo/bin/tempo" wallet login` — requires user browser/passkey action. Prompt user, wait for confirmation, then continue. Do not loop login attempts without user confirmation. When run by agents, use a long command timeout (at least 16 minutes).
-
-**Step 3 — Confirm readiness:** `"$HOME/.tempo/bin/tempo" wallet -t whoami`
-
-### Setup Rules
-
-- Do not use `export PATH=...`. Use full absolute paths (e.g., `"/Users//.tempo/bin/tempo"`) for deterministic behavior across isolated shells.
-- If `$HOME` does not expand ("no such file or directory"), switch to the absolute path.
-
-## After Setup
-
-Provide:
-
-- Installation location and version (`$HOME/.tempo/bin/tempo --version`).
-- Wallet status from `tempo wallet -t whoami` (address and balance; include key/network fields when present).
-- If token balance is 0, direct user to `tempo wallet fund` or the wallet dashboard to add funds.
-- To check MPP Credits separately, run `tempo wallet -t whoami --credits`.
-- 2-3 simple starter prompts tailored to currently available services.
-
-To generate starter prompts, list available services and pick useful beginner examples:
-
-```bash
-tempo wallet -t services --search ai
-```
-
-Starter prompts should be user-facing tasks (not command templates), for example:
-
-- Avoid chat/conversational LLM starter prompts when already talking to an agent. Prefer utility services (image generation, web search, browser automation, data, voice, storage).
-- "Generate a dog image with a blue background and save it as `dog.png`."
-- "Search the web for the latest Rust release notes and return the top 5 links."
-- "Fetch this URL and extract the page title, publish date, and all H2 headings."
-
-## Use Services
-
-```bash
-tempo wallet -t whoami
-tempo wallet -t services --search
-tempo wallet -t services
-tempo request -t -X POST --json '{"input":"..."}' /
-```
-
-- Select `SERVICE_ID` from search results that best matches user intent. When multiple match: prefer best semantic fit, then endpoint fit, then pricing clarity, then first in list.
-- **Anchor on `tempo wallet -t services `** — it shows the exact URL, method, path, and pricing for every endpoint. Build request URL as `/` from discovered metadata only.
-- If service details include `supportsCredits: true`, MPP Credits may be used for one-time `tempo.charge` payments. Credits are separate from token balances; check them with `tempo wallet -t whoami --credits` and buy them with `tempo wallet fund --credits`.
-- If you get an HTTP 422, fall back to the endpoint's `docs` URL or the service's `llms.txt` for exact field names.
-- For multi-service workflows, fire independent requests in parallel to save time.
-
-### Request Templates
-
-```bash
-# JSON POST
-tempo request -t --dry-run -X POST --json '{"input":"..."}' /
-tempo request -t -X POST --json '{"input":"..."}' /
-
-# GET
-tempo request -t -X GET /
-```
-
-### Response Handling
-
-- Return result payload to user directly when request succeeds.
-- If response contains a file URL (e.g., image generation), download it locally: `curl -fsSL "" -o `.
-- If response is a usage/auth readiness error, run `tempo wallet login` and retry once.
-- If response indicates payment/funding limit issues, report clearly and stop. For token funding use `tempo wallet fund`; for MPP Credits use `tempo wallet fund --credits` only when service details show `supportsCredits: true`.
-- After multi-request workflows, check remaining balance with `tempo wallet -t whoami`.
-
-### Rules
-
-- Always discover URL/path before request; never guess endpoint paths.
-- `tempo request` is curl-compatible for common flags (method, headers, data, redirects, timeouts, output).
-- Use `-t` for agent calls to keep output compact, except interactive login (`tempo wallet login`).
-- Use `--dry-run` before potentially expensive requests.
-- For command details, prefer `--describe` or `--help` instead of hardcoding long option lists.
-
-## Common Issues
-
-| Issue | Cause | Fix |
-|---|---|---|
-| `tempo: command not found` | CLI not installed | Run `curl -fsSL https://tempo.xyz/install \| bash`, then retry using `"$HOME/.tempo/bin/tempo" ...`. |
-| "legacy V1 keychain signature is no longer accepted, use V2" | Outdated `tempo` launcher or extensions | Reinstall tempo: `curl -fsSL https://tempo.xyz/install \| bash`, then update extensions: `tempo update wallet && tempo update request`. Log out and back in: `tempo wallet logout --yes && tempo wallet login`. |
-| "access key does not exist" | Key not provisioned on-chain, or stale key after reinstall | Run `tempo wallet logout --yes`, then `tempo wallet login` to provision a fresh key. |
-| `ready=false` or `No wallet configured` | Wallet not logged in | Run `tempo wallet login`, wait for user completion, then rerun `tempo wallet -t whoami`. |
-| HTTP 422 on first request to a service | Wrong request schema — field names vary across services | Check `tempo wallet -t services ` for endpoint details, then fetch the endpoint's `docs` URL or the service's `llms.txt` for exact field names and types. |
-| Balance is 0, insufficient funds, or spending limit exceeded | Wallet needs funding or limit hit | Run `tempo wallet fund` or direct user to the wallet dashboard. Report clearly and stop if limit is exceeded. |
-| Token balance is 0 but MPP Credits may be available | Credits are separate from token balances | Run `tempo wallet -t whoami --credits`. If the service shows `supportsCredits: true`, credits can be used for one-time charge payments. |
-| Need to buy MPP Credits | User wants to fund with card-based credits for eligible services | Run `tempo wallet fund --credits`, complete checkout in the wallet app, then recheck with `tempo wallet -t whoami --credits`. |
-| Credits are not accepted by a service | MPP Credits only work for eligible Tempo-proxied services | Inspect `tempo wallet -t services ` and use credits only when `supportsCredits: true` is present. Otherwise use token funding with `tempo wallet fund`. |
-| Service uses sessions | MPP Credits currently support one-time charges, not sessions | Use token funding for session-based services. |
-| Service not found for query | Search terms too narrow | Broaden search terms with `tempo wallet -t services --search `, then inspect candidate details. |
-| Endpoint returns usage/path error | Wrong URL or method | Re-open service details with `tempo wallet -t services ` and use discovered method/path exactly. |
-| Timeout/network error | Network issue or slow endpoint | Retry request and optionally increase timeout with `-m `. |
diff --git a/ai/plugins/tempo/skills/tempo/SKILL.md b/ai/plugins/tempo/skills/tempo/SKILL.md
deleted file mode 100644
index 87561456b..000000000
--- a/ai/plugins/tempo/skills/tempo/SKILL.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-name: tempo
-description: >
- Use this skill when building applications on Tempo, integrating Tempo into an
- app, writing or reviewing Tempo code, or answering Tempo developer questions
- about accounts, wallets, passkeys, stablecoin payments, fee sponsorship,
- MPP, the Tempo API, indexer queries, stablecoin issuance, the Stablecoin
- DEX, contract verification, SDKs, or Tempo protocol concepts. For agent
- wallet setup, service discovery, or paid HTTP requests, use the tempo-wallet
- skill.
----
-
-# Tempo Developer Skill
-
-Use this skill to build applications on Tempo. Prefer `search`, `find_pages`,
-`read_page`, and `code` from the hosted MCP server at
-`https://mcp.tempo.xyz`; if MCP is unavailable, read the relevant page from
-`https://tempo.xyz/developers` or append `.md` to the docs URL. Do not guess current
-RPC URLs, contract addresses, chain IDs, package APIs, or protocol details;
-verify them from docs before writing code.
-
-## Routing
-
-| User is building... | Start with |
-|---|---|
-| A new Tempo app or network setup | `/quickstart/integrate-tempo`, `/quickstart/connection-details`, `/sdk` |
-| Wallet UX | `/quickstart/wallet-developers`, `/quickstart/connection-details`, `/sdk` |
-| Stablecoin payments | `/guide/payments`, especially send, accept, virtual addresses, memos, fees, sponsorship, and parallel transactions |
-| Sponsored or gasless transactions | `/guide/payments/sponsor-user-fees`, `/api/fee-payer` |
-| MPP or paid APIs | `/guide/machine-payments`, then `/guide/machine-payments/client`, `/server`, or `/agent` |
-| Agent-paid service calls | Use the `tempo-wallet` skill for wallet login, service discovery, and `tempo request` |
-| Hosted indexer queries | `/api/indexer-api` |
-| Stablecoin issuance | `/guide/issuance`, `/protocol/tip20/overview`, `/protocol/tip20/spec` |
-| Stablecoin DEX swaps or liquidity | `/guide/stablecoin-dex`, `/protocol/exchange` |
-| Contract deployment or verification | `/quickstart/verify-contracts` |
-| Low-level protocol behavior | `/protocol`, then the relevant transactions, fees, TIP-20, exchange, or zones spec |
-
-Read the relevant page before answering an integration question or changing
-code. Use the docs page’s linked examples when available.
-
-## Implementation Defaults
-
-- Prefer TypeScript examples for web apps, using the Tempo SDK pages and the
- repo’s existing Wagmi/Viem patterns.
-- Prefer Foundry examples for Solidity contracts and contract verification.
-- Use Tempo Mainnet for wallet setup, funding, transfers, MPP settlement, and production workflows. Use Tempo Testnet only when the user requests it or a development workflow explicitly requires it.
-- Treat `pathUSD` as a live mainnet TIP-20 stablecoin. Distinguish production `pathUSD` from faucet-issued testnet tokens.
-- When network intent is unclear, verify the current connection details and name the selected network explicitly.
-- For production-oriented changes, check the production, security, or Tempo
- API docs before recommending defaults.
-
-## Critical Rules
-
-- Never invent Tempo addresses, fee tokens, RPC endpoints, sponsor URLs, or
- verifier URLs. Fetch them from docs.
-- For transfer memos, preserve the documented 32-byte memo constraint and use
- them for reconciliation metadata such as invoice IDs or payment references.
-- For access keys, keep scopes and spending limits narrow. Do not use access
- keys for contract deployment flows unless the docs explicitly support it.
-
-## Useful Docs
-
-- Getting started: `https://tempo.xyz/developers/docs/quickstart/integrate-tempo`
-- Connection details: `https://tempo.xyz/developers/docs/quickstart/connection-details`
-- Wallet: `https://tempo.xyz/developers/docs/wallet`
-- Payments: `https://tempo.xyz/developers/docs/guide/payments`
-- Machine payments: `https://tempo.xyz/developers/docs/guide/machine-payments`
-- Tempo API: `https://tempo.xyz/developers/docs/api`
-- SDKs: `https://tempo.xyz/developers/docs/sdk`
-- Protocol specs: `https://tempo.xyz/developers/docs/protocol`
diff --git a/ai/providers/claude/plugin/.claude-plugin/plugin.json b/ai/providers/claude/plugin/.claude-plugin/plugin.json
deleted file mode 100644
index 3fe217677..000000000
--- a/ai/providers/claude/plugin/.claude-plugin/plugin.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "docs",
- "description": "Tempo docs and development plugin for Claude",
- "version": "0.1.0",
- "author": {
- "name": "Tempo",
- "url": "https://tempo.xyz"
- },
- "homepage": "https://docs.tempo.xyz",
- "repository": "https://github.com/tempoxyz/docs",
- "license": "MIT",
- "keywords": ["tempo", "stablecoins", "mcp", "payments", "mpp"]
-}
diff --git a/ai/providers/claude/plugin/.mcp.json b/ai/providers/claude/plugin/.mcp.json
deleted file mode 100644
index 715cdb5aa..000000000
--- a/ai/providers/claude/plugin/.mcp.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "mcpServers": {
- "tempo": {
- "type": "http",
- "url": "https://mcp.tempo.xyz"
- }
- }
-}
diff --git a/ai/providers/claude/plugin/skills/tempo-wallet/SKILL.md b/ai/providers/claude/plugin/skills/tempo-wallet/SKILL.md
deleted file mode 120000
index 086ffbe15..000000000
--- a/ai/providers/claude/plugin/skills/tempo-wallet/SKILL.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../plugins/tempo/skills/tempo-wallet/SKILL.md
\ No newline at end of file
diff --git a/ai/providers/claude/plugin/skills/tempo/SKILL.md b/ai/providers/claude/plugin/skills/tempo/SKILL.md
deleted file mode 120000
index 9bf5fddeb..000000000
--- a/ai/providers/claude/plugin/skills/tempo/SKILL.md
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../plugins/tempo/skills/tempo/SKILL.md
\ No newline at end of file
diff --git a/src/components/DocsHeader.tsx b/src/components/DocsHeader.tsx
index a6c8d3a36..77d04cead 100644
--- a/src/components/DocsHeader.tsx
+++ b/src/components/DocsHeader.tsx
@@ -643,7 +643,7 @@ const pluginCommands = [
},
]
-const docsSkillCommand = 'npx skills add tempoxyz/docs'
+const docsSkillCommand = 'npx skills add tempoxyz/plugins --skill docs'
function CommandTabs({
commands,
diff --git a/src/lib/ai-install-commands.test.ts b/src/lib/ai-install-commands.test.ts
index 40a044b93..96de2a646 100644
--- a/src/lib/ai-install-commands.test.ts
+++ b/src/lib/ai-install-commands.test.ts
@@ -1,16 +1,28 @@
+import { existsSync } from 'node:fs'
import { describe, expect, it } from 'vitest'
import { tempoPluginInstallCommands } from './ai-install-commands'
describe('tempoPluginInstallCommands', () => {
it('uses the canonical Codex marketplace and plugin selectors', () => {
expect(tempoPluginInstallCommands.codex).toBe(
- 'codex plugin marketplace add tempoxyz/docs --ref main\ncodex plugin add docs@tempo',
+ 'codex plugin marketplace add tempoxyz/plugins --ref main\ncodex plugin add docs@tempo',
)
})
it('uses the canonical Claude marketplace and plugin selectors', () => {
expect(tempoPluginInstallCommands.claude).toBe(
- 'claude plugin marketplace add tempoxyz/docs\nclaude plugin install docs@tempo',
+ 'claude plugin marketplace add tempoxyz/plugins\nclaude plugin install docs@tempo',
)
})
+
+ it('keeps plugin registries out of the documentation repository', () => {
+ for (const legacyPath of [
+ '.agents/plugins/marketplace.json',
+ '.claude-plugin/marketplace.json',
+ '.cursor-plugin/marketplace.json',
+ 'ai',
+ ]) {
+ expect(existsSync(legacyPath), legacyPath).toBe(false)
+ }
+ })
})
diff --git a/src/lib/ai-install-commands.ts b/src/lib/ai-install-commands.ts
index 929a5371e..cb3df9d1b 100644
--- a/src/lib/ai-install-commands.ts
+++ b/src/lib/ai-install-commands.ts
@@ -1,5 +1,5 @@
/** Copyable commands for installing the Tempo plugin from its public marketplace. */
export const tempoPluginInstallCommands = {
- claude: 'claude plugin marketplace add tempoxyz/docs\nclaude plugin install docs@tempo',
- codex: 'codex plugin marketplace add tempoxyz/docs --ref main\ncodex plugin add docs@tempo',
+ claude: 'claude plugin marketplace add tempoxyz/plugins\nclaude plugin install docs@tempo',
+ codex: 'codex plugin marketplace add tempoxyz/plugins --ref main\ncodex plugin add docs@tempo',
} as const
diff --git a/src/lib/mainnet-guidance.test.ts b/src/lib/mainnet-guidance.test.ts
index 406224fca..4c409e0e8 100644
--- a/src/lib/mainnet-guidance.test.ts
+++ b/src/lib/mainnet-guidance.test.ts
@@ -4,22 +4,12 @@ import { describe, expect, it } from 'vitest'
const read = (path: string) => readFileSync(path, 'utf8')
describe('mainnet guidance', () => {
- it('defaults agent wallet and production workflows to mainnet', () => {
+ it('keeps the published docs skill on current mainnet facts', () => {
const docsSkill = read('SKILL.md')
- const developerSkill = read('ai/plugins/tempo/skills/tempo/SKILL.md')
- const walletSkill = read('ai/plugins/tempo/skills/tempo-wallet/SKILL.md')
- for (const skill of [docsSkill, developerSkill, walletSkill]) {
- expect(skill).toContain('Tempo Mainnet')
- expect(skill).toContain('pathUSD')
- }
-
- expect(developerSkill).toContain(
- 'Use Tempo Mainnet for wallet setup, funding, transfers, MPP settlement, and production workflows.',
- )
- expect(developerSkill).not.toContain(
- 'Use Tempo Testnet examples unless the user explicitly asks for mainnet.',
- )
+ expect(docsSkill).toContain('Tempo Mainnet')
+ expect(docsSkill).toContain('pathUSD')
+ expect(docsSkill).toContain('Moderato is Tempo Testnet')
})
it('distinguishes production pathUSD from testnet faucet tokens', () => {
diff --git a/src/lib/mercator-plugin.test.ts b/src/lib/mercator-plugin.test.ts
deleted file mode 100644
index 70072ad50..000000000
--- a/src/lib/mercator-plugin.test.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { readFileSync } from 'node:fs'
-import { describe, expect, it } from 'vitest'
-
-describe('Mercator marketplace plugin', () => {
- it('uses the protected OAuth MCP endpoint in every transport manifest', () => {
- for (const manifestPath of ['ai/plugins/mercator/.mcp.json', 'ai/plugins/mercator/mcp.json']) {
- const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
-
- expect(manifest.mcpServers.mercator.url).toBe('https://mercator.tempo.xyz/mcp/auth')
- }
- })
-
- it('keeps host manifests on the current plugin release', () => {
- for (const manifestPath of [
- 'ai/plugins/mercator/plugin.json',
- 'ai/plugins/mercator/.claude-plugin/plugin.json',
- 'ai/plugins/mercator/.codex-plugin/plugin.json',
- 'ai/plugins/mercator/.cursor-plugin/plugin.json',
- ]) {
- const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
-
- expect(manifest.version).toMatch(/^0\.3\.1(?:\+|$)/)
- expect(manifest.description).toContain('secure MCP connection')
- }
- })
-
- it('guides OAuth-connected clients through MCP job execution', () => {
- const skill = readFileSync('ai/plugins/mercator/skills/mercator/SKILL.md', 'utf8')
-
- expect(skill).toContain('`create_job` ->\n`get_job`')
- expect(skill).toContain('accepted `totalAmount` as `approved_total`')
- expect(skill).toContain('OAuth authorization is a one-time')
- expect(skill).toContain('ready local Mercator wallet')
- expect(skill).toContain('Never install, create, or connect a wallet for fallback')
- })
-})
diff --git a/src/marketing/app/_components/Header.tsx b/src/marketing/app/_components/Header.tsx
index c173ea919..1b0211062 100644
--- a/src/marketing/app/_components/Header.tsx
+++ b/src/marketing/app/_components/Header.tsx
@@ -297,7 +297,7 @@ const pluginCommands = [
},
]
-const docsSkillCommand = 'npx skills add tempoxyz/docs'
+const docsSkillCommand = 'npx skills add tempoxyz/plugins --skill docs'
function CopyIcon() {
return (
diff --git a/src/pages/docs/guide/using-tempo-with-ai.mdx b/src/pages/docs/guide/using-tempo-with-ai.mdx
index bdfc88fc5..88b1b7cf7 100644
--- a/src/pages/docs/guide/using-tempo-with-ai.mdx
+++ b/src/pages/docs/guide/using-tempo-with-ai.mdx
@@ -151,29 +151,29 @@ MCP clients can also post feedback directly to `https://tempo.xyz/developers/api
-## Install Tempo plugins
+## Install the Tempo Docs plugin
-The Tempo plugin installs a complete agent integration: the Tempo MCP server, workflow skills for using Tempo APIs and docs, and editor metadata that helps agents discover the right Tempo tools without manual setup.
+The Tempo Docs plugin installs the read-only Tempo MCP server, documentation skill, and editor metadata. Tempo publishes plugins from the dedicated [`tempoxyz/plugins`](https://github.com/tempoxyz/plugins) repository.
:::code-group
```bash [Codex]
-codex plugin marketplace add tempoxyz/docs --ref main
+codex plugin marketplace add tempoxyz/plugins --ref main
codex plugin add docs@tempo
```
```bash [Claude]
-claude plugin marketplace add tempoxyz/docs
+claude plugin marketplace add tempoxyz/plugins
claude plugin install docs@tempo
```
:::
-:::warning[Legacy Codex marketplace name]
-If Codex reports that the plugin is missing after finding this marketplace as `docs`, replace that
-pre-rename registration once, then rerun the install:
+:::warning[Legacy marketplace source]
+If you previously installed Tempo plugins from `tempoxyz/docs`, remove the existing `tempo`
+marketplace once, then add `tempoxyz/plugins`:
```bash
-codex plugin marketplace remove docs
-codex plugin marketplace add tempoxyz/docs --ref main
+codex plugin marketplace remove tempo
+codex plugin marketplace add tempoxyz/plugins --ref main
codex plugin add docs@tempo
```
:::
@@ -186,16 +186,16 @@ Mercator adds paid API discovery and execution through the Mercator MCP server.
curl -fsSL https://mercator.tempo.xyz/downloads/latest/install.sh | sh
```
-To install the plugin directly from the Tempo marketplace, add the public `tempoxyz/docs` source and select `mercator@tempo`:
+To install the plugin directly from the Tempo marketplace, add the public `tempoxyz/plugins` source and select `mercator@tempo`:
:::code-group
```bash [Codex]
-codex plugin marketplace add tempoxyz/docs --ref main
+codex plugin marketplace add tempoxyz/plugins --ref main
codex plugin add mercator@tempo
```
```bash [Claude]
-claude plugin marketplace add tempoxyz/docs
+claude plugin marketplace add tempoxyz/plugins
claude plugin install mercator@tempo --scope user --yes
```
:::
@@ -207,7 +207,7 @@ claude plugin install mercator@tempo --scope user --yes
Install the Tempo Docs skill to give AI coding agents access to Tempo documentation, related documentation sources, and examples:
```bash
-npx skills add tempoxyz/docs
+npx skills add tempoxyz/plugins --skill docs
```
Once installed, the agent uses it automatically when relevant tasks are detected.
From 113323c0a037c7b594fb1b5131643c2284349ae1 Mon Sep 17 00:00:00 2001
From: Brendan Ryan <1572504+brendanjryan@users.noreply.github.com>
Date: Thu, 3 Sep 2026 13:09:36 -0400
Subject: [PATCH 2/2] fix(docs): avoid private registry link
---
src/pages/docs/guide/using-tempo-with-ai.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/docs/guide/using-tempo-with-ai.mdx b/src/pages/docs/guide/using-tempo-with-ai.mdx
index 88b1b7cf7..6b8d6ace2 100644
--- a/src/pages/docs/guide/using-tempo-with-ai.mdx
+++ b/src/pages/docs/guide/using-tempo-with-ai.mdx
@@ -153,7 +153,7 @@ MCP clients can also post feedback directly to `https://tempo.xyz/developers/api
## Install the Tempo Docs plugin
-The Tempo Docs plugin installs the read-only Tempo MCP server, documentation skill, and editor metadata. Tempo publishes plugins from the dedicated [`tempoxyz/plugins`](https://github.com/tempoxyz/plugins) repository.
+The Tempo Docs plugin installs the read-only Tempo MCP server, documentation skill, and editor metadata. Tempo publishes plugins from the dedicated `tempoxyz/plugins` repository.
:::code-group
```bash [Codex]