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 @@ - - Mercator - - - - - - 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]