granttap-mcp 0.8.7 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -217,6 +217,19 @@ codex plugin add granttap@granttap
217
217
  # Claude Code
218
218
  claude plugin marketplace add sergii-ziborov/granttap-mcp
219
219
  claude plugin install granttap@granttap
220
+
221
+ # Grok Build
222
+ grok plugin marketplace add sergii-ziborov/granttap-mcp
223
+ grok plugin install granttap --trust
224
+ ```
225
+
226
+ Install **GrantTap** from the Cursor plugin marketplace, then open
227
+ **Cursor Settings → MCP → GrantTap → Authorize**. From a source checkout the
228
+ same plugin can be linked locally:
229
+
230
+ ```bash
231
+ mkdir -p "$HOME/.cursor/plugins/local"
232
+ ln -sfn "$PWD/cursor-plugin" "$HOME/.cursor/plugins/local/granttap"
220
233
  ```
221
234
 
222
235
  Open GrantTap from the plugin page or ask `Show my GrantTap pairing QR.` Codex
@@ -4,6 +4,9 @@ import { generateKeyPair, randomId } from "../../../../packages/core/crypto";
4
4
  import type { PeerConfig } from "../../../../packages/core/relay-client";
5
5
  import { configDir } from "./paths";
6
6
 
7
+ export const DEFAULT_RELAY_URL = "wss://relay.granttap.com";
8
+ export const LEGACY_RELAY_URL = "wss://granttap-relay.sergii-ziborov.workers.dev";
9
+
7
10
  export function saveConfig(path: string, cfg: PeerConfig): void {
8
11
  mkdirSync(configDir(), { recursive: true });
9
12
  if (existsSync(path)) {
@@ -25,7 +28,12 @@ export function saveConfig(path: string, cfg: PeerConfig): void {
25
28
  }
26
29
 
27
30
  export function loadConfig(path: string): PeerConfig {
28
- return JSON.parse(readFileSync(path, "utf8")) as PeerConfig;
31
+ const cfg = JSON.parse(readFileSync(path, "utf8")) as PeerConfig;
32
+ if (cfg.relayUrl === LEGACY_RELAY_URL) {
33
+ cfg.relayUrl = DEFAULT_RELAY_URL;
34
+ saveConfig(path, cfg);
35
+ }
36
+ return cfg;
29
37
  }
30
38
 
31
39
  const b64url = (value: string): string =>
@@ -54,7 +62,8 @@ export function normalizeRelayUrl(value: string): string {
54
62
  if (url.username || url.password || url.hash || url.search) {
55
63
  throw new Error("relay URL must not contain credentials, a query, or a fragment");
56
64
  }
57
- return url.toString().replace(/\/$/, "");
65
+ const normalized = url.toString().replace(/\/$/, "");
66
+ return normalized === LEGACY_RELAY_URL ? DEFAULT_RELAY_URL : normalized;
58
67
  }
59
68
 
60
69
  function validPairingKey(value: string): boolean {
@@ -8,6 +8,7 @@ import {
8
8
  } from "./install";
9
9
  import {
10
10
  createPairing,
11
+ DEFAULT_RELAY_URL,
11
12
  loadConfig,
12
13
  machineConfigPath,
13
14
  normalizeRelayUrl,
@@ -16,7 +17,7 @@ import {
16
17
  } from "./config";
17
18
  import type { PeerConfig } from "../../../packages/core/relay-client";
18
19
 
19
- export const DEFAULT_RELAY = "wss://granttap-relay.sergii-ziborov.workers.dev";
20
+ export const DEFAULT_RELAY = DEFAULT_RELAY_URL;
20
21
  export const PAIRING_CODE_TTL_MINUTES = 15;
21
22
 
22
23
  function validConfig(config: PeerConfig, role: PeerConfig["role"]): boolean {
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "granttap",
3
3
  "owner": {
4
- "name": "GrantTap"
4
+ "name": "GrantTap",
5
+ "email": "support@granttap.com"
5
6
  },
6
7
  "metadata": {
7
- "description": "GrantTap for Cursor — local HTTP MCP authorization and exactly correlated phone approvals"
8
+ "description": "GrantTap for Cursor — local HTTP MCP authorization and exactly correlated phone approvals",
9
+ "version": "0.1.1"
8
10
  },
9
11
  "plugins": [
10
12
  {
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "granttap",
3
3
  "displayName": "GrantTap",
4
- "version": "0.1.0",
4
+ "version": "0.1.1",
5
5
  "description": "GrantTap for Cursor: loopback HTTP MCP authorization, phone pairing, and exactly correlated dual-channel approvals. Start with granttap authorize.",
6
6
  "author": {
7
7
  "name": "GrantTap",
8
+ "email": "support@granttap.com",
8
9
  "url": "https://granttap.com"
9
10
  },
10
11
  "publisher": "GrantTap",
@@ -36,19 +36,21 @@ The OAuth service listens only at `http://127.0.0.1:17342/mcp`. Cursor cannot
36
36
  show **Authorize** for a stdio (`command`/`args`) MCP entry, so do not replace the
37
37
  plugin's HTTP configuration with stdio.
38
38
 
39
- ## Install these local plugin assets
39
+ ## Install from the Cursor marketplace
40
40
 
41
- Until the plugin is published in a Cursor marketplace, link this directory from
42
- a source checkout and reload Cursor:
41
+ Install **GrantTap** from Cursor's plugin marketplace, then reload Cursor.
42
+ The plugin adds the `/connect` command, a connect skill, and the
43
+ exact-correlation rule; `granttap setup` still configures the MCP endpoint
44
+ itself.
45
+
46
+ From a source checkout, the same plugin can be linked locally:
43
47
 
44
48
  ```bash
45
49
  mkdir -p "$HOME/.cursor/plugins/local"
46
50
  ln -sfn "$PWD/cursor-plugin" "$HOME/.cursor/plugins/local/granttap"
47
51
  ```
48
52
 
49
- Run those commands from the repository root. The plugin adds the `/connect`
50
- command, a connect skill, and the exact-correlation rule; `granttap setup`
51
- still configures the MCP endpoint itself.
53
+ Run those commands from the repository root.
52
54
 
53
55
  ## Exact dual-channel behavior
54
56
 
@@ -62,7 +64,8 @@ prompt must never resolve the current request.
62
64
  | Path | Purpose |
63
65
  | --- | --- |
64
66
  | `.cursor-plugin/plugin.json` | Cursor plugin manifest |
65
- | `.cursor-plugin/marketplace.json` | Marketplace metadata for future publication |
67
+ | `.cursor-plugin/marketplace.json` | Plugin-local marketplace metadata |
68
+ | `../.cursor-plugin/marketplace.json` | Repository marketplace index Cursor publishes |
66
69
  | `mcp.json` | Loopback Streamable HTTP MCP endpoint |
67
70
  | `assets/logo.svg` | Plugin logo |
68
71
  | `rules/dual-channel.mdc` | Exact prompt/correlation rule |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "granttap-mcp",
3
- "version": "0.8.7",
3
+ "version": "0.8.8",
4
4
  "description": "Personal live control center runtime for local coding agents on iPhone and Apple Watch.",
5
5
  "type": "module",
6
6
  "bin": {