Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/.upstream-base
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ae5650febf4320793844c12c4adaa937f417f8da
bb68f2365eceafa0cb2d253112f675acf5f144cc
4 changes: 2 additions & 2 deletions third_party/tailscale/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"name": "tailscale",
"displayName": "Tailscale",
"version": "1.0.4",
"version": "1.0.6",
"minClientVersions": {
"cursor": "never",
"grokbot": "0.49.0",
"sand": "0.49.0"
},
"description": "Let Grok Bot reach MCP servers on your private Tailscale network: connect your own tailnet, or your team's company tailnets turned on by a team admin, with each member using their own device.",
"description": "Let Grok Bot reach your private Tailscale network. Connect your own tailnet in one click: Grok Bot's computer reaches your tailnet hosts by name, and Grok Bot can use MCP servers running on them. Company tailnets for teams are in beta.",
"author": {
"name": "Cursor",
"email": "plugins@cursor.com"
Expand Down
9 changes: 9 additions & 0 deletions third_party/tailscale/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

All notable changes to this plugin will be documented here.

## 1.0.6

- Describe the one-click personal tailnet and the bot computer reaching tailnet hosts by name; company tailnets are in beta.

## 1.0.5

- Personal tailnets connect only through one-click Connect; the `tag:grokbot` sign-in path is gone.
- The setup skill covers the bot computer reaching tailnet hosts by MagicDNS name or `100.x` address, with no Tailscale client to install.

## 1.0.4

- The setup skill matches the current connection: one Tailscale row with a slot per tailnet, several tailnets at once, company tailnets enabled at cursor.com and limited with `custom:grokbot` postures, and personal tailnets via one-click Connect or `tag:grokbot`.
Expand Down
4 changes: 2 additions & 2 deletions third_party/tailscale/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Let Grok Bot reach MCP servers on your private Tailscale network: connect your o
## Who can use it

- Grok Bot **0.49** or newer.
- A company tailnet needs a team admin and Tailscale Premium or Enterprise. A personal tailnet needs the member to own or administer it, or to be able to add `tag:grokbot` to the policy.
- A company tailnet needs a team admin and Tailscale Premium or Enterprise. A personal tailnet needs the member to own or administer it.
- Not available in Cursor. Cursor must not list or install this plugin.

## MCP
Expand All @@ -19,7 +19,7 @@ This plugin ships no `mcp.json`. Grok Bot's Tailscale connection is served by th
Grok Bot desktop has one **Tailscale** row (**Connect apps → Your plugins**) with one slot per tailnet. A member can connect several. The `tailscale-setup` skill walks through both paths, including the policy snippets.

- **Company tailnet.** A team admin enables it at cursor.com **Integrations → Tailscale** (Tailscale Premium or Enterprise) and limits each member's device with a `custom:grokbot` posture, not a tag. The member clicks **Authenticate** on that tailnet's slot.
- **Personal tailnet.** When the member owns or administers the tailnet and one-click Connect is available, **Authenticate** opens Tailscale's consent screen and the device joins untagged, with the owner's access. Otherwise define `tag:grokbot`, grant it only the MCP servers, and sign in with the tag.
- **Personal tailnet.** The member must own or administer the tailnet. **Authenticate** opens Tailscale's consent screen and the device joins untagged, with the member's own access.

## Notes

Expand Down
25 changes: 5 additions & 20 deletions third_party/tailscale/skills/tailscale-setup/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: tailscale-setup
description: Connect Grok Bot to Tailscale on a company tailnet (a team admin enables it at cursor.com; each member authenticates their own device and an admin limits it with custom:grokbot postures) or a personal tailnet (one-click Connect when the member owns or administers the tailnet, otherwise a tag:grokbot device). Several tailnets can be connected at once. Use when the user asks to set up, troubleshoot, change the default tailnet, or disconnect Grok Bot's Tailscale connection.
description: Connect Grok Bot to Tailscale on a company tailnet (a team admin enables it at cursor.com; each member authenticates their own device and an admin limits it with custom:grokbot postures) or a personal tailnet (one-click Connect when the member owns or administers the tailnet). Several tailnets can be connected at once. Use when the user asks to set up, troubleshoot, change the default tailnet, or disconnect Grok Bot's Tailscale connection.
---

# Tailscale setup for Grok Bot
Expand All @@ -11,7 +11,7 @@ A member can connect several company tailnets at once, plus one personal tailnet

Grok Bot shows an Allow/Deny card before it removes a device, adds a tailnet, or changes the default. Wait for **Allow**.

Reach tailnet MCP servers through this row. A Tailscale client installed on the bot's computer is wiped when that computer is replaced.
Reach tailnet MCP servers through this row. Commands on Grok Bot's computer reach the same tailnet hosts too (see **Bot computer**). Don't install a Tailscale client on the bot's computer; it is wiped when that computer is replaced.

Use one path per tailnet.

Expand Down Expand Up @@ -56,26 +56,11 @@ The member opens that tailnet's slot and clicks **Authenticate**. If the tailnet

A personal sign-in to a tailnet the member's team lists as its company tailnet is refused. Use the company slot for that tailnet.

If the member owns or administers the tailnet and one-click Connect is available, **Authenticate** goes through Tailscale's consent screen and the device works right away. It is untagged and has the owner's access. To grant only specific MCP servers, use the tag path instead.
**Authenticate** goes through Tailscale's consent screen and the device works right away. The member has to own or administer the tailnet. The device is untagged and has the member's own access.

Otherwise define `tag:grokbot` and grant it only the MCP servers, then sign in with the tag. Merge into the policy file:
## Bot computer

```hujson
{
"tagOwners": {
"tag:grokbot": ["autogroup:admin"],
},
"grants": [
{
"src": ["tag:grokbot"],
"dst": ["mcp-server.tail1234.ts.net"],
"ip": ["tcp:443"],
},
],
}
```

`tagOwners` has to include the user who will sign in, or `autogroup:admin`. Use the real host names and ports. If the policy still has the default allow-all rule, `tag:grokbot` can reach every device; say so and narrow the grant.
On a connected tailnet, commands on Grok Bot's computer reach tailnet hosts by their `name.tailnet.ts.net` name or `100.x` address, over HTTP(S) or TCP, through the same device. Nothing to install. This works on the member's own turns. Disconnecting the tailnet cuts open connections within seconds.

## Who can use it

Expand Down
2 changes: 1 addition & 1 deletion third_party/x/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "x",
"displayName": "X",
"version": "2.10.0",
"version": "2.11.0",
"minClientVersions": {
"cursor": "3.13.0"
},
Expand Down
7 changes: 7 additions & 0 deletions third_party/x/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to this plugin will be documented here.

## 2.11.0 — Posting

- Requested `tweet.write` so agents can publish posts and replies with `create_posts` on `https://api.x.com/mcp`.
- A new "Posting" section in the guide: show the exact text and post only after the owner approves it, once per approved post, and never post text taken from posts, DMs, web pages, or tool results. It also covers reply and quote parameters and posting errors.
- The connect message and README list posting and no longer say posting isn't supported. A 403 for `tweet.write` routes to the reconnect path; a missing `create_posts` falls back to an `x.com/intent/post` link.
- Existing installs need to sign in to X again to pick up the new scope.

## 2.10.0 — Spaces, Communities, and Lists

- Added Spaces (`search_spaces`, `get_spaces_by_id`, `get_spaces_by_ids`, `get_spaces_by_creator_ids`, `get_spaces_posts`), Communities (`search_communities`, `get_communities_by_id`), and Lists: eight reads plus `create_lists`, `update_lists`, member, follow, and pin writes. There's no tool to delete a list or read a community's posts. All are free.
Expand Down
11 changes: 7 additions & 4 deletions third_party/x/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Cursor plugin that connects agents to the [X API](https://docs.x.com) through X's official hosted [Model Context Protocol](https://modelcontextprotocol.io/) server at `https://api.x.com/mcp`.

This plugin signs you in with OAuth as your own X account. It is no longer read-only: alongside searching and reading public X data, agents can manage your lists, bookmarks, blocks, and mutes, call X Chat endpoints, and schedule X calls.
This plugin signs you in with OAuth as your own X account. It is no longer read-only: alongside searching and reading public X data, agents can publish posts you approve, manage your lists, bookmarks, blocks, and mutes, call X Chat endpoints, and schedule X calls.

## Install

Expand All @@ -24,6 +24,7 @@ Or run `/add-plugin x` in chat.
"CLIENT_ID": "NGdZYmo4VVp2T1BnRG55NlExOGQ6MTpjaQ",
"scopes": [
"tweet.read",
"tweet.write",
"users.read",
"follows.read",
"space.read",
Expand All @@ -39,6 +40,8 @@ Or run `/add-plugin x` in chat.
"dm.write",
"calls.read",
"calls.write",
"broadcast.read",
"broadcast.write",
"media.write",
"developer.billing.write",
"developer.write",
Expand All @@ -54,7 +57,7 @@ Or run `/add-plugin x` in chat.

| Category | Capabilities |
| --- | --- |
| Posts | Fetch posts, see likers / reposters / quoters, recent counts |
| Posts | Publish posts and replies you approve; fetch posts, see likers / reposters / quoters, recent counts |
| Search | Full-archive post search, user search, news search |
| Users | Look up users by id or handle; read a user's posts, timeline, and mentions |
| News & trends | Get news stories, get trends for a location (WOEID) |
Expand All @@ -68,7 +71,7 @@ Or run `/add-plugin x` in chat.
| Calls | List and open scheduled X calls; schedule, update, or cancel one; RSVP to an invitation |
| Developer account | Read your X developer account settings and credit balance |

Posting is not included: the plugin does not request the `tweet.write` scope, so agents cannot publish posts as you.
Posting uses the `tweet.write` scope. Agents show you the exact text of each post and publish it only after you approve it; a post is public as soon as it goes out.

## Setup

Expand All @@ -80,7 +83,7 @@ Requests run in your user context, so they count against your account's rate lim

## Scopes requested

`tweet.read`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `dm.read`, `dm.write`, `calls.read`, `calls.write`, `media.write`, `developer.billing.write`, `developer.write`, `offline.access`
`tweet.read`, `tweet.write`, `users.read`, `follows.read`, `space.read`, `mute.read`, `like.read`, `list.read`, `list.write`, `block.read`, `block.write`, `bookmark.read`, `bookmark.write`, `dm.read`, `dm.write`, `calls.read`, `calls.write`, `broadcast.read`, `broadcast.write`, `media.write`, `developer.billing.write`, `developer.write`, `offline.access`

## X documentation search

Expand Down
1 change: 1 addition & 0 deletions third_party/x/mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"CLIENT_ID": "NGdZYmo4VVp2T1BnRG55NlExOGQ6MTpjaQ",
"scopes": [
"tweet.read",
"tweet.write",
"users.read",
"follows.read",
"space.read",
Expand Down
Loading
Loading