Launch and keep agent tools working: MCP checks, registry publishing, x402 payment checks.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. Bearer tt_... API key with credits; x402 works without one.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Call this after building or changing a paid (x402) endpoint, or when agents' payments fail: we call it unpaid like a paying agent, read the 402, and check the payment request parses (v1 or v2), the token's EIP-712 domain (extra.name/version) matches the contract on-chain (the usual cause of 'invalid signature' payments), network id, amount, payTo, timeout, CORS headers for browser agents, resource URL, description and Bazaar discovery. Pass / warn / fail per check with exact fixes. Never pays.
The paid endpoint's public https:// URL (an x402 resource).
Optional example JSON body for POST endpoints.
HTTP method the endpoint expects (default GET).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http builders https://tetheredtrust.com/mcp/builders
Headers
Authorization (optional, not in the config above): Optional. Bearer tt_... API key with credits; x402 works without one.Call this after building or changing a paid (x402) endpoint, or when agents' payments fail: we call it unpaid like a paying agent, read the 402, and check the payment request parses (v1 or v2), the token's EIP-712 domain (extra.name/version) matches the contract on-chain (the usual cause of 'invalid signature' payments), network id, amount, payTo, timeout, CORS headers for browser agents, resource URL, description and Bazaar discovery. Pass / warn / fail per check with exact fixes. Never pays.
| Argument | Type | Description |
|---|---|---|
| url* | string | The paid endpoint's public https:// URL (an x402 resource). |
| body | object | Optional example JSON body for POST endpoints. |
| method | string | HTTP method the endpoint expects (default GET). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The paid endpoint's public https:// URL (an x402 resource)."
},
"body": {
"type": "object",
"description": "Optional example JSON body for POST endpoints."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method the endpoint expects (default GET)."
}
}
}For retailers and marketplaces (API key required): up to 50 products per call (SKU with title, URL or GTIN) in; each product's compatibility attributes out (standards it takes and provides, numeric limits, evidence level, freshness), ready to add to a product feed or UCP catalog so agents can match it to what shoppers own.
| Argument | Type | Description |
|---|---|---|
| items* | array | |
| research | boolean | Default true: research up to 10 items per call that aren't in our catalog (from the manufacturer's page). |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Your SKU or offer id (echoed back)."
},
"url": {
"type": "string"
},
"gtin": {
"type": "string"
},
"brand": {
"type": "string"
},
"model": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"maxItems": 50,
"minItems": 1
},
"research": {
"type": "boolean",
"description": "Default true: research up to 10 items per call that aren't in our catalog (from the manufacturer's page)."
}
}
}What Tethered Trust is, what it covers, where its data comes from, pricing and terms.
No arguments.
{
"type": "object",
"properties": {}
}Call this after building or deploying an MCP server or paid agent API, or when its listings may be out of date: we check it works (as verify_mcp does), then look it up in the official MCP Registry (and whether the listed version is current), Glama, PulseMCP, the x402 Bazaar, npm and PyPI, plus its server card, llms.txt and robots.txt (Smithery, PulseMCP, mcp.so and Claude's directory are listed with links to check by hand). Returns a score, what's missing or stale, an ordered fix plan and a ready-to-publish server.json. Read-only.
| Argument | Type | Description |
|---|---|---|
| npm | string | Optional: npm package name to check. |
| url* | string | The MCP server's public https:// endpoint, e.g. https://example.com/mcp. |
| name | string | Optional: the server's display name, to search directories (defaults to the name the server reports). |
| pypi | string | Optional: PyPI project name to check. |
| description | string | Optional: one-line description for the generated server.json (max 100 characters). |
| registry_name | string | Optional: its official MCP Registry name, e.g. com.example/server. |
For sellers: 30 days of official MCP Registry publishing on every new version, a daily listing watch (registry, Glama, x402 Bazaar, npm, PyPI, health) and daily payment checks of up to 10 x402 endpoints, with one signed webhook. $12 per 30 days; renew with plan_id.
| Argument | Type | Description |
|---|---|---|
| npm | string | |
| url | string | Your MCP server's public https:// endpoint (listing watch + registry publishing). |
| pypi | string | |
| title | string | |
| domain | string | |
| plan_id | string | To renew: an existing plan_id (adds 30 days to everything). |
| publish | boolean | Publish to the official MCP Registry (default true). |
| webhook | string | Public https:// URL for signed listing.changed, payment.changed and plan.expiring events. |
| api_host | string | Host of your paid x402 API, e.g. api.example.com (we use the endpoints the x402 Bazaar lists for it). |
| endpoints |
Where a Launch Plan stands: listings, registry version and each paid endpoint's payment check. Free.
| Argument | Type | Description |
|---|---|---|
| plan_id* | string |
{
"type": "object",
"required": [
"plan_id"
],
"properties": {
"plan_id": {
"type": "string"
}
}
}Where a watched MCP server stands right now: each directory's status, the latest changes, and when the watch ends. Free.
| Argument | Type | Description |
|---|---|---|
| watch_id* | string | The watch_id from watch_listing. |
{
"type": "object",
"required": [
"watch_id"
],
"properties": {
"watch_id": {
"type": "string",
"description": "The watch_id from watch_listing."
}
}
}Call this to get an MCP server into the official MCP Registry (which Glama, PulseMCP and others import from) without mcp-publisher or DNS: first call with url returns a one-line file to host at https://<domain>/.well-known/mcp-registry-auth; once it's up, call again with publisher_id and we publish server.json under your domain's namespace, then re-publish every new version automatically for 90 days. $5, charged only when we publish. Remove the file to revoke.
| Argument | Type | Description |
|---|---|---|
| url | string | The MCP server's public https:// endpoint (Streamable HTTP). |
| slug | string | Optional: the part after the slash in the registry name. |
| title | string | |
| domain | string | Optional: the domain to verify (default: the URL's main domain, e.g. example.com for mcp.example.com). Becomes the namespace (com.example/...). |
| version | string | Optional: version to publish (default: the version your server reports). |
| website | string | |
| repository | string | |
| description | string | One line, max 100 characters. |
| publisher_id |
Before paying an unfamiliar x402 API, look up its payment-readiness score (0-100) from our daily unpaid checks of the x402 Bazaar: how many of its endpoints would accept an agent's payment, and the common problems. Free.
| Argument | Type | Description |
|---|---|---|
| url | string | Or any URL on that host. |
| host | string | The paid API's host, e.g. api.example.com. |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Or any URL on that host."
},
"host": {
"type": "string",
"description": "The paid API's host, e.g. api.example.com."
}
}
}Call this before you recommend, install or rely on an MCP server, after deploying one, or when a connector seems broken: we connect as an MCP client, list its tools, check each has a usable input schema and description, confirm the tools you name exist, and optionally run one sample call on a read-only tool. Pass / fail / couldn't-verify per check with a signed receipt. Never signs in or calls tools that change things.
| Argument | Type | Description |
|---|---|---|
| url* | string | The MCP server's public https:// endpoint (Streamable HTTP), e.g. https://example.com/mcp. |
| call | object | Optional sample call. Only made if the server marks the tool read-only (annotations.readOnlyHint). |
| expect_tools | array | Tool names that must be listed. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The MCP server's public https:// endpoint (Streamable HTTP), e.g. https://example.com/mcp."
},
"call": {
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"arguments": {
"type": "object"
},
"expect_text": {
"type": "string",
"description": "Text the reply must contain."
}
},
"description": "Optional sample call. Only made if the server marks the tool read-only (annotations.readOnlyHint)."
},
"expect_tools": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Tool names that must be listed."
}
}
}Call this before you tell someone a web page, site or deploy is done or working, or before relying on another agent's "it's live": we open the public page in a separate browser (desktop or mobile) and check what you list. It loads; this text is visible; this link or button leads to this address; no script errors; no broken same-site links. Pass / fail / couldn't-verify per check, with a screenshot and a signed receipt. Read-only: no logins, forms or purchases.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public https:// page to check, e.g. the page you just built or changed. |
| checks | array | What must be true. 'loads' is always included. |
| viewport | string | Check as a desktop (1280 px) or phone (390 px) browser. Default desktop. |
| screenshot | boolean | Return a screenshot link (default true). |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public https:// page to check, e.g. the page you just built or changed."
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"max": {
"type": "integer",
"description": "For no_broken_links: how many same-site links to test (default 15, max 25)."
},
"text": {
"type": "string",
"description": "For text/no_text: exact text that must (or must not) be visible. For link: the visible label of the link or button."
},
"type": {
"enum": [
"loads",
"text",
"no_text",
"link",
"no_console_errors",
"no_broken_links"
],
"type": "string"
},
"expect_url": {
"type": "string",
"description": "For link: where it should lead (same path or below)."
}
}
},
"maxItems": 8,
"description": "What must be true. 'loads' is always included."
},
"viewport": {
"enum": [
"desktop",
"mobile"
],
"type": "string",
"description": "Check as a desktop (1280 px) or phone (390 px) browser. Default desktop."
},
"screenshot": {
"type": "boolean",
"description": "Return a screenshot link (default true)."
}
}
}Call this after launching an MCP server or paid agent API to keep it findable: we run launch_check today and every day for 30 days, and tell your webhook (signed) when something changes: the server stops answering, the registry listing falls behind a release, a directory drops it, robots.txt starts blocking. $3 per 30 days; call again with watch_id to renew. Returns today's full launch check.
| Argument | Type | Description |
|---|---|---|
| npm | string | |
| url | string | The MCP server's public https:// endpoint to watch. |
| name | string | |
| pypi | string | |
| webhook | string | Optional public https:// URL: we POST a signed listing.changed event when something changes. |
| watch_id | string | To renew: an existing watch_id (adds 30 days). |
| registry_name | string |
{
"type": "object",
"properties": {
"npm": {
"type": "string"
},
"url": {
"type": "string",
"description": "The MCP server's public https:// endpoint to watch."
},
"name": {
"type": "string"
},
"pypi": {
"type": "string"
},
"webhook": {
"type": "string",
"description": "Optional public https:// URL: we POST a signed listing.changed event when something changes."
},
"watch_id": {
"type": "string",
"description": "To renew: an existing watch_id (adds 30 days)."
},
"registry_name": {
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.
{
"type": "object",
"required": [
"url"
],
"properties": {
"npm": {
"type": "string",
"description": "Optional: npm package name to check."
},
"url": {
"type": "string",
"description": "The MCP server's public https:// endpoint, e.g. https://example.com/mcp."
},
"name": {
"type": "string",
"description": "Optional: the server's display name, to search directories (defaults to the name the server reports)."
},
"pypi": {
"type": "string",
"description": "Optional: PyPI project name to check."
},
"description": {
"type": "string",
"description": "Optional: one-line description for the generated server.json (max 100 characters)."
},
"registry_name": {
"type": "string",
"description": "Optional: its official MCP Registry name, e.g. com.example/server."
}
}
}| array |
| Or name up to 10 paid endpoints yourself. |
| repository | string |
| description | string |
{
"type": "object",
"properties": {
"npm": {
"type": "string"
},
"url": {
"type": "string",
"description": "Your MCP server's public https:// endpoint (listing watch + registry publishing)."
},
"pypi": {
"type": "string"
},
"title": {
"type": "string"
},
"domain": {
"type": "string"
},
"plan_id": {
"type": "string",
"description": "To renew: an existing plan_id (adds 30 days to everything)."
},
"publish": {
"type": "boolean",
"description": "Publish to the official MCP Registry (default true)."
},
"webhook": {
"type": "string",
"description": "Public https:// URL for signed listing.changed, payment.changed and plan.expiring events."
},
"api_host": {
"type": "string",
"description": "Host of your paid x402 API, e.g. api.example.com (we use the endpoints the x402 Bazaar lists for it)."
},
"endpoints": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"body": {
"type": "object"
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string"
}
}
},
"maxItems": 10,
"description": "Or name up to 10 paid endpoints yourself."
},
"repository": {
"type": "string"
},
"description": {
"type": "string"
}
}
}| string |
| Second call: the publisher_id from the first call, after hosting the proof file. |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The MCP server's public https:// endpoint (Streamable HTTP)."
},
"slug": {
"type": "string",
"description": "Optional: the part after the slash in the registry name."
},
"title": {
"type": "string"
},
"domain": {
"type": "string",
"description": "Optional: the domain to verify (default: the URL's main domain, e.g. example.com for mcp.example.com). Becomes the namespace (com.example/...)."
},
"version": {
"type": "string",
"description": "Optional: version to publish (default: the version your server reports)."
},
"website": {
"type": "string"
},
"repository": {
"type": "string"
},
"description": {
"type": "string",
"description": "One line, max 100 characters."
},
"publisher_id": {
"type": "string",
"description": "Second call: the publisher_id from the first call, after hosting the proof file."
}
}
}