Skip to main content
Glama
YawLabs

@yawlabs/tailscale-mcp

by YawLabs

List keys

tailscale_list_keys
Read-onlyIdempotent

List Tailscale tailnet auth keys, API tokens, OAuth clients, and federated identities. Use all to see the full tailnet-wide view instead of credential-scoped keys.

Instructions

List keys in your tailnet: auth keys, API access tokens, OAuth clients and federated identities. Without 'all', what comes back depends on the credential this server runs on -- a user-owned API key sees only that user's keys (including the API access token the server itself is using, keyType 'api'); an OAuth-client token sees the tailnet's OAuth clients; a federated-identity token sees its federated identities. Set 'all' to true for the tailnet-wide list (needs the matching :read scopes; only 'all:read' and 'all' return every API access token).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
allNoWhen true, list keys tailnet-wide instead of the credential-dependent default set. Default: false

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.21.0
    • changedInput schema / properties / all / description
      Previous value: -"When true, returns all key types (auth keys, OAuth clients, federated identities). Default: false"New value: +"When true, list keys tailnet-wide instead of the credential-dependent default set. Default: false"
  2. First observedv0.13.3

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds substantial non-obvious behavior beyond that: results are credential-dependent, a user-owned API key sees the server's own access token (keyType 'api'), and only 'all:read'/'all' scopes return every API access token. These are surprising behavioral traits an agent could not infer from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and each of the three sentences earns its place: scope enumeration, credential-dependent default behavior, and 'all' semantics with permissions. It loses a point only for the dense dash-nested parenthetical ('including the API access token the server itself is using, keyType api'), which packs several ideas into one clause and slightly reduces parseability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Everything needed to invoke the tool correctly is covered: the default credential-dependent behavior, what 'all' does, and the scope constraints. However, with no output schema, the description leaves the shape of returned key objects unspecified — for a list operation with four distinct key types, some hint at the return record structure would complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the single 'all' parameter has its own description), so the baseline is 3. The tool description adds value above the schema by disclosing the permission requirement ('needs the matching :read scopes') and the nuance that only 'all:read' and 'all' return every API access token — details absent from the schema's parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('List keys in your tailnet') and enumerates the four key categories (auth keys, API access tokens, OAuth clients, federated identities), leaving no ambiguity about scope. This enumeration also differentiates it from siblings like tailscale_get_key, tailscale_create_key, and tailscale_list_oauth_apps without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear operational context: it explains that default results depend on the credential the server runs under and instructs when to set 'all' for a tailnet-wide list, including the required :read scopes. It does not, however, explicitly name sibling alternatives (e.g., when to prefer tailscale_get_key for a single key) or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools