io.github.YawLabs/tailscale-mcp
NPM · @YAWLABS/TAILSCALE-MCP · SCANNED AUG 4
Tailscale MCP server for managing your tailnet from AI assistants
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency19
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 13 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability88
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 6773 tokens (~72/item across 93 items; 89 tools + 4 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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 supported MCP spec version (2025-11-25); the latest is 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.
npm · @yawlabs/tailscale-mcp
claude mcp add yawlabs-tailscale-mcp -- npx -y @yawlabs/tailscale-mcp
codex mcp add yawlabs-tailscale-mcp -- npx -y @yawlabs/tailscale-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"yawlabs-tailscale-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@yawlabs/tailscale-mcp"
],
"enabled": true
}
}
} openclaw mcp add yawlabs-tailscale-mcp --command npx --arg -y --arg @yawlabs/tailscale-mcp
mcp_servers:
yawlabs-tailscale-mcp:
command: "npx"
args: ["-y", "@yawlabs/tailscale-mcp"] {
"mcpServers": {
"yawlabs-tailscale-mcp": {
"command": "npx",
"args": [
"-y",
"@yawlabs/tailscale-mcp"
]
}
}
} 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.
- 4 Aug 26 +1
- Security disclosure: fail → unverified ▼ functional
- 3 Aug 26 +4
- Stability: unverified → 0.27 ▲ functional
- 2 Aug 26 +15
- Malware scan: unverified → pass ▲ security
- 31 Jul 26 −9
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 −18
- Malware scan: pass → unverified ▼ security
- 27 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 78
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 4 Aug 2026 · Analysed npm/@yawlabs/[email protected]
Provenance none
Ecosystem: npm · Outcome: none
Dependencies 0 packages
0 packages in the resolved dependency tree.
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.
tailscale_accept_device_invite ~38
Accept a device share invitation using the invite URL or code.
| Name | Type | Req | Description |
|---|---|---|---|
| invite | string | yes | The device invite URL or invite code |
No output schema declared.
No examples provided.
tailscale_approve_user ~38
Approve a pending user, granting them access to the tailnet.
| Name | Type | Req | Description |
|---|---|---|---|
| userId | string | yes | The user ID to approve |
No output schema declared.
No examples provided.
tailscale_authorize_device ~33
Authorize a device that is pending authorization.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID to authorize |
No output schema declared.
No examples provided.
tailscale_batch_update_posture_attributes ~159
Batch update custom posture attributes across multiple devices. Each attribute key must start with 'custom:'. Uses JSON Merge Patch semantics — pass null as the attribute config to delete.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | — | Optional comment added to the audit log explaining why attributes are being set (max 200 chars) |
| nodes | object | yes | Map of device ID to attribute config map (e.g. { "12345": { "custom:compliant": { "value": "true" } }, "67890": { "custom:compliant": { "value": false, "expiry": "2026-12-01T00:00:00Z" } } }). Pass n… |
No output schema declared.
No examples provided.
tailscale_create_aws_external_id ~46
Create or get an AWS external ID for your tailnet. Used when configuring log streaming to S3 — the external ID is included in the IAM role trust policy.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_create_device_invite ~107
Create a device share invitation that allows an external user to access a specific device in your tailnet.
| Name | Type | Req | Description |
|---|---|---|---|
| allowExitNode | boolean | — | Whether the invited device can be used as an exit node (default: false) |
| deviceId | string | yes | The device ID to create an invite for |
| string | — | Email address to send the invite to | |
| multiUse | boolean | — | Whether the invite can be used more than once (default: false) |
No output schema declared.
No examples provided.
tailscale_create_key ~495
Create a new key in your tailnet. Supports auth keys (for adding devices), OAuth clients (for programmatic API access), and federated identities (for OIDC-based CI/CD access). Returns the key value — save it immediately, as it cannot be retrieved again. SECURITY: the response body contains a long-lived credential verbatim. MCP clients commonly persist tool responses to logs and conversation transcripts; treat this response as sensitive (do not commit it, avoid re-sharing it in unrelated chat history). Examples: - Auth key: {keyType:'auth', reusable:true, tags:['tag:ci']} - OAuth client: {keyType:'client', scopes:['devices:read','dns']} - Federated (GitHub Actions): {keyType:'federated', scopes:['devices:read'], issuer:'https://token.actions.githubusercontent.com', subject:'repo:my-org/my-repo:*'}
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | — | (federated only) Expected audience claim |
| customClaimRules | object | — | (federated only) Custom claim mapping rules |
| description | string | — | Description for this key (max 50 chars, alphanumeric/hyphens/spaces) |
| ephemeral | boolean | — | (auth only) Whether devices using this key are ephemeral (default: false) |
| expirySeconds | number | — | (auth only) Key expiry in seconds (default: 90 days) |
| issuer | string | — | (federated only) OIDC issuer URL (e.g. 'https://token.actions.githubusercontent.com') |
| keyType | string | — | Key type: 'auth' (default) for device auth keys, 'client' for OAuth clients, 'federated' for OIDC federation |
| preauthorized | boolean | — | (auth only) Whether devices are pre-authorized (default: false) |
| reusable | boolean | — | (auth only) Whether the key can be used more than once (default: false) |
| scopes | array | — | (client/federated) OAuth scopes to grant (e.g. ['devices:read', 'dns', 'acl']) |
| subject | string | — | (federated only) Expected subject claim, supports * wildcards |
| tags | array | — | ACL tags (must start with 'tag:'). Required for client/federated if scopes include 'devices:core' or 'auth_keys' |
No output schema declared.
No examples provided.
tailscale_create_posture_integration ~210
Create a new device posture integration.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | string | — | Client ID for the provider (Intune: application UUID; Falcon/Jamf Pro: client id; Kandji/Kolide/Sentinel One: leave blank) |
| clientSecret | string | yes | The secret (auth key, token, etc.) used to authenticate with the provider. SENSITIVE: passed straight to Tailscale and not echoed back, but MCP clients may log the input value you supply. |
| cloudId | string | — | Identifies which of the provider's clouds to integrate with. Falcon: us-1|us-2|eu-1|us-gov; Intune: global|us-gov; Jamf Pro/Kandji/Sentinel One: FQDN of your subdomain; Kolide: leave blank. |
| provider | string | yes | The posture provider |
| tenantId | string | — | Microsoft Intune directory (tenant) ID. Other providers leave blank. |
No output schema declared.
No examples provided.
tailscale_create_user_invite ~58
Create a new user invite that allows someone to join your tailnet.
| Name | Type | Req | Description |
|---|---|---|---|
| string | — | Email address to send the invite to | |
| role | string | — | Role to assign to the invited user (default: member) |
No output schema declared.
No examples provided.
tailscale_create_webhook ~100
Create a new webhook. The response includes the webhook's signing secret -- this is the only opportunity to capture it; save it immediately. SECURITY: the response body contains the secret verbatim. MCP clients commonly persist tool responses to logs and conversation transcripts; treat this response as sensitive.
| Name | Type | Req | Description |
|---|---|---|---|
| endpointUrl | string | yes | The HTTPS URL to send webhook events to |
| subscriptions | array | yes | Event types to subscribe to (at least one) |
No output schema declared.
No examples provided.
tailscale_deauthorize_device ~51
Deauthorize a device, immediately removing its access to the tailnet. The device will need to be re-authorized to reconnect.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID to deauthorize |
No output schema declared.
No examples provided.
tailscale_delete_device ~47
Permanently remove a device from the tailnet. This is irreversible — the device must re-authenticate to rejoin.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID to delete |
No output schema declared.
No examples provided.
tailscale_delete_device_invite ~42
Delete a device invite. This is irreversible — the invite link will stop working.
| Name | Type | Req | Description |
|---|---|---|---|
| inviteId | string | yes | The device invite ID to delete |
No output schema declared.
No examples provided.
tailscale_delete_device_posture_attribute ~59
Delete a custom posture attribute from a device. This is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| attributeKey | string | yes | The attribute key to delete (e.g. 'custom:lastAuditDate') |
| deviceId | string | yes | The device ID |
No output schema declared.
No examples provided.
tailscale_delete_key ~86
Delete a key (auth key, OAuth client, or federated identity). This is irreversible. For auth keys, devices already authenticated are unaffected but no new devices can use it. For OAuth clients and federated identities, any integrations using them lose access immediately.
| Name | Type | Req | Description |
|---|---|---|---|
| keyId | string | yes | The key ID to delete (auth key, OAuth client, or federated identity) |
No output schema declared.
No examples provided.
tailscale_delete_log_stream_config ~49
Delete a log streaming configuration. Logs will stop being sent to the configured destination.
| Name | Type | Req | Description |
|---|---|---|---|
| logType | string | yes | The log type to stop streaming: 'configuration' or 'network' |
No output schema declared.
No examples provided.
tailscale_delete_posture_integration ~36
Delete a posture integration. This is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| integrationId | string | yes | The posture integration ID to delete |
No output schema declared.
No examples provided.
tailscale_delete_service ~47
Delete a Tailscale Service. This is irreversible — the service's MagicDNS name and virtual IP will be released.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceName | string | yes | The service name to delete |
No output schema declared.
No examples provided.
tailscale_delete_user ~45
Delete a user from the tailnet. This is irreversible — the user and all their devices will be removed.
| Name | Type | Req | Description |
|---|---|---|---|
| userId | string | yes | The user ID to delete |
No output schema declared.
No examples provided.
tailscale_delete_user_invite ~42
Delete a user invite. This is irreversible — the invite link will stop working.
| Name | Type | Req | Description |
|---|---|---|---|
| inviteId | string | yes | The user invite ID to delete |
No output schema declared.
No examples provided.
tailscale_delete_webhook ~39
Delete a webhook. This is irreversible — the webhook secret cannot be recovered.
| Name | Type | Req | Description |
|---|---|---|---|
| webhookId | string | yes | The webhook ID to delete |
No output schema declared.
No examples provided.
tailscale_expire_device ~38
Expire a device's key, forcing it to re-authenticate.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID to expire |
No output schema declared.
No examples provided.
tailscale_get_acl ~60
Get the current ACL policy for your tailnet. Returns the raw policy text with original formatting preserved, including comments and trailing commas (HuJSON). Also returns an ETag — you must pass it to tailscale_update_acl to safely update the policy.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_audit_log ~86
Get the tailnet audit/configuration log. Shows who changed what and when — useful for troubleshooting and compliance.
| Name | Type | Req | Description |
|---|---|---|---|
| end | string | — | End time in RFC3339 format. Defaults to now. |
| start | string | yes | Start time in RFC3339 format (e.g. '2026-04-01T00:00:00Z'). Required. |
No output schema declared.
No examples provided.
tailscale_get_contacts ~24
Get the tailnet contact information (security, support, admin emails).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_device ~43
Get detailed information about a specific device by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID (numeric id or nodeId, NOT the nodeKey) |
No output schema declared.
No examples provided.
tailscale_get_device_invite ~32
Get details for a specific device invite.
| Name | Type | Req | Description |
|---|---|---|---|
| inviteId | string | yes | The device invite ID |
No output schema declared.
No examples provided.
tailscale_get_device_posture_attributes ~39
Get all posture attributes for a device, including custom and system-managed attributes.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID |
No output schema declared.
No examples provided.
tailscale_get_device_routes ~35
Get the subnet routes a device advertises and which are enabled.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID |
No output schema declared.
No examples provided.
tailscale_get_dns_configuration ~40
Get the unified DNS configuration for your tailnet, including nameservers, search paths, split DNS, and MagicDNS preference in a single call.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_dns_preferences ~26
Get DNS preferences for your tailnet, including whether MagicDNS is enabled.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_key ~50
Get details for a specific key (auth key, OAuth client, or federated identity).
| Name | Type | Req | Description |
|---|---|---|---|
| keyId | string | yes | The key ID (auth key, OAuth client, or federated identity) |
No output schema declared.
No examples provided.
tailscale_get_log_stream_config ~49
Get the log streaming configuration for a specific log type.
| Name | Type | Req | Description |
|---|---|---|---|
| logType | string | yes | The log type: 'configuration' for audit logs, 'network' for network flow logs |
No output schema declared.
No examples provided.
tailscale_get_log_stream_status ~58
Get the status of log streaming for a specific log type. Shows whether logs are being delivered successfully.
| Name | Type | Req | Description |
|---|---|---|---|
| logType | string | yes | The log type: 'configuration' for audit logs, 'network' for network flow logs |
No output schema declared.
No examples provided.
tailscale_get_nameservers ~22
Get the DNS nameservers configured for your tailnet.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_network_flow_logs ~94
Get network traffic flow logs showing connections between devices. Shows source/destination nodes, timestamps, and traffic metadata — useful for security monitoring and debugging connectivity.
| Name | Type | Req | Description |
|---|---|---|---|
| end | string | — | End time in RFC3339 format. Defaults to now. |
| start | string | yes | Start time in RFC3339 format (e.g. '2026-04-01T00:00:00Z'). Required. |
No output schema declared.
No examples provided.
tailscale_get_posture_integration ~34
Get details for a specific device posture integration.
| Name | Type | Req | Description |
|---|---|---|---|
| integrationId | string | yes | The posture integration ID |
No output schema declared.
No examples provided.
tailscale_get_search_paths ~22
Get the DNS search paths configured for your tailnet.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_service ~43
Get details for a specific Tailscale Service, including its MagicDNS name, virtual IP, and configuration.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceName | string | yes | The service name |
No output schema declared.
No examples provided.
tailscale_get_service_device_approval ~50
Get the approval status of a specific device for a Tailscale Service.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID |
| serviceName | string | yes | The service name |
No output schema declared.
No examples provided.
tailscale_get_split_dns ~21
Get the split DNS configuration for your tailnet.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_tailnet_settings ~29
Get your tailnet settings (device approval, key expiry, HTTPS certificates, etc.).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_get_user ~28
Get details for a specific user.
| Name | Type | Req | Description |
|---|---|---|---|
| userId | string | yes | The user ID |
No output schema declared.
No examples provided.
tailscale_get_user_invite ~32
Get details for a specific user invite.
| Name | Type | Req | Description |
|---|---|---|---|
| inviteId | string | yes | The user invite ID |
No output schema declared.
No examples provided.
tailscale_get_webhook ~29
Get details for a specific webhook.
| Name | Type | Req | Description |
|---|---|---|---|
| webhookId | string | yes | The webhook ID |
No output schema declared.
No examples provided.
tailscale_list_device_invites ~36
List all device invites for a specific device.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | The device ID to list invites for |
No output schema declared.
No examples provided.
tailscale_list_devices ~193
List all devices in your tailnet with their status, IP addresses, OS, and last seen time.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | string | — | Comma-separated list of fields to include. Omit for all fields. Valid fields: addresses, advertisedRoutes, authorized, blocksIncomingConnections, clientConnectivity, clientVersion, connectedToControl… |
| filters | object | — | Server-side filters as key-value pairs. Filter by any top-level device property (e.g. { isEphemeral: 'true', os: 'linux', tags: 'tag:prod' }). Multiple filters are ANDed together. |
No output schema declared.
No examples provided.
tailscale_list_keys ~67
List keys in your tailnet. By default lists auth keys only. Set 'all' to true to include OAuth clients and federated identities.
| Name | Type | Req | Description |
|---|---|---|---|
| all | boolean | — | When true, returns all key types (auth keys, OAuth clients, federated identities). Default: false |
No output schema declared.
No examples provided.
tailscale_list_log_stream_configs ~66
List all log streaming configurations for your tailnet. Fetches both 'configuration' (audit) and 'network' (flow) log stream configs. Log streaming sends logs to external destinations like Axiom, Datadog, Splunk, Elasticsearch, or S3.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
tailscale_list_posture_integrations ~24
List all device posture integrations configured for your tailnet.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.