Valet
REMOTE · API.VALET.DEV · SCANNED AUG 20
Get share links, publish and manage websites, artifacts and agents. No account needed.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (attach_site_connector). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4374 tokens (~273/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
- Stability check failed: schema churn in the 7 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 10 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · api.valet.dev
claude mcp add --transport http valetdotdev-valet https://api.valet.dev/mcp
[mcp_servers.valetdotdev-valet] url = "https://api.valet.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"valetdotdev-valet": {
"type": "remote",
"url": "https://api.valet.dev/mcp",
"enabled": true
}
}
} openclaw mcp add valetdotdev-valet --url https://api.valet.dev/mcp --transport streamable-http
mcp_servers:
valetdotdev-valet:
url: "https://api.valet.dev/mcp" {
"mcpServers": {
"valetdotdev-valet": {
"type": "http",
"url": "https://api.valet.dev/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Aug 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “publish_site” rewrote its description, which is the text the model reads security
- “attach_site_connector” reworded the description of “connector” cosmetic
- “attach_site_connector” reworded the description of “site” cosmetic
- “call_site_connector” reworded the description of “connector” cosmetic
- “call_site_connector” reworded the description of “site” cosmetic
- “call_site_connector” reworded the description of “tool” cosmetic
- “create_connector” reworded the description of “entry” cosmetic
- “delete_site” reworded the description of “name” cosmetic
- “delete_site” reworded the description of “site_token” cosmetic
- “detach_site_connector” reworded the description of “connector” cosmetic
- “detach_site_connector” reworded the description of “site” cosmetic
- “get_site” reworded the description of “name” cosmetic
- “get_site” reworded the description of “site_token” cosmetic
- “list_site_connectors” reworded the description of “site” cosmetic
- “publish_site” reworded the description of “description” cosmetic
- “publish_site” reworded the description of “files” cosmetic
- “publish_site” reworded the description of “title” cosmetic
- “rename_site” reworded the description of “name” cosmetic
- “rename_site” reworded the description of “new_name” cosmetic
- “set_site_access” reworded the description of “mode” cosmetic
- “set_site_access” reworded the description of “name” cosmetic
- “share_site” reworded the description of “emails” cosmetic
- “share_site” reworded the description of “name” cosmetic
- 18 Aug 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New tool “call_site_connector”, which the server declares destructive security
- Tool “get_site” rewrote its description, which is the text the model reads security
- Schema quality: 2901 → 4255 ▼ functional
- New tool “create_connector” functional
- New tool “get_connector_client” functional
- New tool “list_catalog_connectors” functional
- 17 Aug 26 +1
- New tool “attach_site_connector”, which the server declares destructive security
- Schema quality: 1942 → 2901 ▼ functional
- New tool “detach_site_connector” functional
- New tool “list_attachable_connectors” functional
- New tool “list_site_connectors” functional
- 15 Aug 26 −2
- Stability: 0.03 → fail ▼ security
- A breaking change shipped without a version bump: still 1.0.0 ▼ security
- The server rewrote its instructions, which are the text every model session reads security
- New tool “share_site”, which the server declares destructive security
- Tool “get_design_system” rewrote its description, which is the text the model reads security
- Tool “publish_site” rewrote its description, which is the text the model reads security
- Schema quality: 192 → 242 ▼ functional
- “publish_site” added a required parameter “description”, so existing callers break ▼ functional
- “publish_site” added a required parameter “title”, so existing callers break ▼ functional
- “get_design_system” added an optional parameter “anonymous” cosmetic
- “publish_site” added an optional parameter “anonymous” cosmetic
- “get_design_system” reworded the description of “org_name” cosmetic
- 14 Aug 26 +1
- New tool “rename_site”, which the server declares destructive security
- Tool “get_design_system” rewrote its description, which is the text the model reads security
- Stability: unverified → 0.03 ▲ functional
- 13 Aug 26 62
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Aug 2026 · Probed https://api.valet.dev/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.valet.dev | CN=YE2,O=Let's Encrypt,C=US | 18 Aug 2026 | 16 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 597d3cbe8de81bc95955470c861a475384b |
| SANs: api.valet.dev | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
DNSSEC insecure
Validation of api.valet.dev. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| dev. | present | 60074 | 8 | Verified |
| valet.dev. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.valet.dev/mcp | Verified | 200 | |
| http (plaintext) | http://api.valet.dev/mcp | HTTPS enforced | 301 | https://api.valet.dev/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
attach_site_connector Attach a connector to a website ~294
Attach an organization connector to a website so pages served from that site can call the connector's tools. Attaching is a grant, and it is wider than it looks: every person who can open the page can call every tool the connector exposes, using the credential Valet holds for it. On a private site that is every member of the organization; on a password-protected or shared one it is everyone holding the password or the link. Valet does not narrow the connector's reach for a page, so attach only what the page needs and check the site's access mode before you do. Only an organization connector that is an HTTP MCP server — transport sse or streamable-http — can be attached; list_attachable_connectors reports exactly that set. A connector that belongs to a single agent cannot back a page. A page calls the connector by its own name, which is what list_site_connectors reports and what the page's request path carries. Attaching a connector that is already attached changes nothing and is safe to repeat. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| connector | string | yes | Required. The organization connector's name. It is also the name a page served from the site calls it by. |
| org_name | string | – | The Valet organization the site and the connector belong to. Omit to use the organization the account joined first. |
| site | string | yes | Required. The site's name. |
No output schema declared.
No examples provided.
call_site_connector Call a website's connector ~431
Run one tool on a connector attached to a website and return what the connector answered. It is the sampling step of building a page that calls live data: discover, attach, read the schemas, then call one tool for real before you write any page code. Call it because a schema is not a shape. list_site_connectors gives you each tool's name and argument schema, which is what your call has to satisfy; this tells you what comes back, which is what the page has to parse. Results are text to read, not JSON to assume: many servers answer in markdown tables or prose, some expose a single meta-tool taking a whole command as one string, and a server that completes the handshake can still refuse half its tools when the stored credential's scope does not cover them. One real call settles all three. This runs the tool for real, with the organization's own credential and whatever side effects the tool has. It is not a dry run and there is no preview: a tool that sends, writes, or deletes will do so. Prefer a read-only tool when you are only learning the shape, and ask the user before running anything that changes their systems. The connector must already be attached to the site — attach_site_connector does that — and must be an HTTP MCP server. A tool that answers with an error is reported as an error carrying the connector's own text, which is usually the sentence that says what to fix. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| args | object | – | Arguments for the tool, as an object matching the tool's own input schema from list_site_connectors. Omit it for a tool that takes none. |
| connector | string | yes | Required. The name the connector is attached under, which is the name a page calls it by. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| site | string | yes | Required. The site's name. |
| tool | string | yes | Required. The tool to run, spelled exactly as list_site_connectors reports it. |
No output schema declared.
No examples provided.
create_connector Create a connector from the catalog ~374
Create an organization connector from a Valet catalog entry. It is the step after list_catalog_connectors found the entry for the product the user named; attach_site_connector then lets a website's pages call it. It creates an entry whose credential is a secret. Pass each slot the entry asks for in secrets, as slot name to value. A slot the organization already holds as a secret needs no value here. If a required slot has neither, nothing is created and the answer names the slots still needed. A key given here passes through this conversation. That is a real cost and it is the user's call to make: if they hand you the key, use it, and say that they could instead enter it on the dashboard's Integrations page, where it goes straight to Valet. The answer names the slots that were filled and never the values in them. An entry that authorizes in a browser — OAuth, or a Composio toolkit — is not created here. The answer gives the entry's name and the Integrations page, which creates the connector and runs the authorization in one place. An entry the organization already has is reported as already there; no second connector is made. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| entry | string | yes | Required. The catalog entry's name, spelled exactly as list_catalog_connectors reports it. |
| org_name | string | – | The Valet organization to create the connector in. Omit to use the organization the account joined first. |
| secrets | object | – | The entry's secret slots, as slot name to value. Valet stores each as an organization secret. A value passed here travels through this conversation; leave it out and point the user at the dashboard's… |
No output schema declared.
No examples provided.
delete_site Delete a website ~137
Permanently delete a website and stop serving it. Identify it by name, which requires connecting a Valet account, or by the site_token returned when it was published anonymously — whoever published a site can always take it down. This cannot be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Give this or site_token. The site's name, which requires a connected Valet account. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| site_token | string | – | Give this or name. The token returned when the site was published anonymously; it identifies that one site. |
No output schema declared.
No examples provided.
detach_site_connector Detach a connector from a website ~188
Detach a connector from a website, so pages served from that site can no longer call it. The connector itself is left in place for the rest of the organization, and nothing else about the site changes. This is how the grant attaching made is taken back. While a connector is attached, everyone who can open the page can call every tool it exposes with the credential Valet holds, so detaching is the way to end that reach. A page that still calls the connector starts getting an error, which is the intended outcome. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| connector | string | yes | Required. The name the connector is attached under, which is the name a page calls it by. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| site | string | yes | Required. The site's name. |
No output schema declared.
No examples provided.
get_connector_client Get the connector client contract ~161
Get how a page served from a Valet site talks to the connectors attached to it. It is the pair to get_design_system: consult that tool for how the page looks, this one for how it talks to its connectors. Call it before writing any page code that fetches from a connector. Returns the same-origin request contract and a paste-whole session helper that handles both sessionless and stateful connectors, plus the rules a page has to follow: handling a 403, recovering a lapsed session, and never caching a response on the caller's behalf. This needs no Valet account. It answers with static guidance about how pages work — nothing here reads an organization or a site — so an agent can call it before running any OAuth flow.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_design_system Get the design system ~186
Get the design system to follow before you build or substantially rewrite a page. Returns the caller's organization design system when it has one, otherwise the Valet default. Call it first, then follow what it returns — apply its palette, type scale, spacing, and layout — overriding only for what the user asked for on this page. Files a user supplies finished are published unchanged, not restyled. By default this requires a connected account. Pass anonymous: true only when building an explicitly anonymous site; no organization is then consulted and the Valet default is returned.
| Name | Type | Req | Description |
|---|---|---|---|
| anonymous | boolean | – | Set true only when building an explicitly anonymous site. No organization is consulted and the Valet default is returned. Omit for the account-first path. |
| org_name | string | – | The Valet organization whose design system to read. Omit to use the organization the account joined first. |
No output schema declared.
No examples provided.
get_site Get a website ~152
Get one website's URL, access mode, version, and expiry. Identify it by name, which requires connecting a Valet account, or by the site_token returned when it was published anonymously. A password-protected site reports that it is gated and never its visitor password. Read the password from the Valet dashboard instead.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Give this or site_token. The site's name, which requires a connected Valet account. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| site_token | string | – | Give this or name. The token returned when the site was published anonymously; it identifies that one site. |
No output schema declared.
No examples provided.
list_attachable_connectors List connectors a website can hold ~208
List the organization connectors a website can hold — the discovery step before attach_site_connector. Only connectors a page can actually call appear: HTTP MCP servers reached over the sse or streamable-http transport. Command connectors and stdio MCP servers are excluded by definition — they run inside an agent's container and no page can reach them — so a connector the organization has that is not listed here cannot back a site. Pass site to mark which connectors that site already holds; attached connectors stay listed because attaching is idempotent. Tool schemas are not included — attach the connector, then list_site_connectors reports its live tools and their schemas, which is the moment to write the page's calls. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| org_name | string | – | The Valet organization whose connectors to list. Omit to use the organization the account joined first. |
| site | string | – | A site to mark already-attached connectors against. Omit for the plain organization-wide list. |
No output schema declared.
No examples provided.
list_catalog_connectors List the connector catalog ~261
List the connectors Valet curates — the catalog an organization creates a connector from. Reach for it when list_attachable_connectors returned nothing that serves the data a page needs: the organization has no connector for it yet, and this says whether Valet has an entry for the product and what setting it up would take. Each entry says how its credential arrives. An entry that takes a secret names each slot it asks for and what the slot is. An entry that authorizes in a browser, or connects through Composio, says so — a person completes those on the dashboard's Integrations page, and no answer here can stand in for that. Each entry also says whether a website's pages could call it. That is a marker, not a filter: an entry only an agent's container can run is still listed, because "Valet has your product, but no page can call it" is a real answer and reporting it as missing is not. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| org_name | string | – | The Valet organization a connector would be created in. The catalog is the same for every organization; this names the one the answer points the next step at. Omit to use the organization the account… |
No output schema declared.
No examples provided.
list_site_connectors List a website's connectors ~279
List the connectors attached to a website, each with the tools a page served from that site can call. Read it before writing a page that calls one: the tool names and argument schemas it returns are what the page's own calls have to match, and guessing them produces a page that fails on its first click. It lists what is attached to this one site, not what the organization has available. A connector nobody attached to this site does not appear here, and attaching one is a separate, deliberate act — it hands the connector's reach to everyone who can open the page. Each connector says whether a page can call it, and whether the server keeps an MCP session the page must hold — the page runs the initialize handshake, replays the Mcp-Session-Id header, and re-initializes when the session lapses. The broker forwards the handshake and the tool calls, and always hands the page one JSON document per request, whatever framing the server chose. A connector that could not be reached reports its own error and leaves every other row intact, so one expired credential does not hide the rest. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| site | string | yes | Required. The site's name. |
No output schema declared.
No examples provided.
list_sites List websites ~84
List the websites in a Valet organization: name, URL, access mode, and when each was last published. It is the way to recover a site's name when an earlier publish has scrolled out of the conversation. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| org_name | string | – | The Valet organization to list. Omit to use the organization the account joined first. |
No output schema declared.
No examples provided.
publish_site Publish a website ~608
Publish files as a live website on the public internet, served over HTTPS. Use it when a report, dashboard, document, or any answer with real layout reads better as a page than as text in the conversation. Before building or substantially rewriting a page, call get_design_system and follow what it returns. title and description are required on every publish, and a call missing either is refused: title names the site for a person, and description says in one sentence what it holds. A site's name is a hostname, so those two are what a reader has to go on wherever the site is listed. Write them for the person who will come back to this page in a month. Content is text written here: HTML, CSS, JavaScript, Markdown, JSON, SVG. Images, PDFs, video, and other binary assets are not supported on this surface — publish those with the Valet CLI. Publishing uses a connected Valet account by default and creates a permanent, private site. Pass anonymous: true only when the user explicitly wants a temporary public site. It is public to anyone who has the link, and it may be removed 36 hours after it is created, unless it is claimed. The result carries a claim URL that moves the site into a Valet account and makes it permanent, and a site_token that updates the same site on a later call. Give that token back to revise the site instead of publishing a second copy of it; with an account, give the site's name instead.
| Name | Type | Req | Description |
|---|---|---|---|
| anonymous | boolean | – | Set true only when the user explicitly wants a temporary public site without account ownership. Omit for the account-first path, which connects a Valet account when needed. |
| description | string | yes | Required. One sentence saying what the site holds, for a person deciding whether to open it. It is shown beside the title wherever the site is listed. |
| files | array | yes | Required. The site's files. One file named index.html is the minimum; add more for stylesheets, scripts, or further pages. |
| idempotency_key | string | – | An opaque key of your choosing. Repeating a call with the same key returns the first call's result instead of publishing a second site, which makes a retry safe. |
| name | string | – | The site's name, which becomes part of its URL. Omit to have one generated. Naming a site that already exists republishes it. Requires a connected Valet account. |
| org_name | string | – | The Valet organization to publish into. Omit to use the organization the account joined first. |
| site_token | string | – | The token an earlier anonymous publish returned. Give it back to update that same site instead of creating another. |
| title | string | yes | Required. What the site is called, written for a person: 'Q3 Migration Audit', not a hostname. It labels the site wherever it is listed, so write the same thing the page's own <title> says. |
No output schema declared.
No examples provided.
rename_site Rename a website ~117
Rename a website and move it to the URL derived from its new name. The old URL stops serving the site and its name becomes available to another site or app in the same organization. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Required. The site's current name. |
| new_name | string | yes | Required. The site's new name. It also becomes the first label of the new URL. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
No output schema declared.
No examples provided.
set_site_access Set website access ~236
Set who can reach a website: public serves it to anyone who has the link, private serves it only to members of the organization that owns it, and password serves it to anyone who enters a shared visitor password. Requires connecting a Valet account. Password mode takes the password as the password argument. It is a shared visitor password the owner hands to whoever should see the site, not a Valet credential, and it is at most 72 bytes.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | yes | Required. The access mode. public serves the site to anyone who has the link. private serves it only to members of the organization that owns it. password serves it to anyone who enters the shared vi… |
| name | string | yes | Required. The site's name. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
| password | string | – | The shared visitor password. Required for password mode and rejected for the others. Anyone who enters it can open the site, so a site's owner passes it to whoever should see the page. At most 72 byt… |
No output schema declared.
No examples provided.
share_site Share a website by email ~327
Share a website with specific people by email, whether it is private or password-protected — sharing does not change who else can reach it. Each address is mailed a link from Valet that opens the site; the recipient needs no Valet account of their own, only the link, so anyone holding the email can open the site and forwarding it forwards access. Sharing again with an address that already has access re-sends the same link rather than creating a second one. Requires connecting a Valet account.
| Name | Type | Req | Description |
|---|---|---|---|
| access_ttl_seconds | integer | – | How many seconds of access the first open starts, after which the link stops working. Omit, or pass 0, for access that never expires this way. Composes with expires_in_seconds: the unopened deadline… |
| emails | array | yes | Required. The email addresses to share the site with, at most 10 at a time. Sharing again with an address that already has access re-sends the same link rather than creating a second one. |
| expires_in_seconds | integer | – | How many seconds from now the link stops working if nobody has opened it yet. Omit, or pass 0, for a link that never expires this way. |
| message | string | – | An optional note included in the email, shown to the recipient as a quote beside the link. At most 500 characters. |
| name | string | yes | Required. The site's name. |
| org_name | string | – | The Valet organization the site belongs to. Omit to use the organization the account joined first. |
No output schema declared.
No examples provided.