granttap-mcp 0.8.11 → 0.8.12

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
@@ -224,13 +224,8 @@ grok plugin install granttap --trust
224
224
  ```
225
225
 
226
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"
233
- ```
227
+ **Cursor Customize → MCPs → GrantTap → Authenticate**. Complete authorization
228
+ and any one-time QR pairing on `https://granttap.com/connect`.
234
229
 
235
230
  Open GrantTap from the plugin page or ask `Show my GrantTap pairing QR.` Codex
236
231
  renders an interactive connection card with pairing status, a one-time QR,
@@ -91,7 +91,7 @@ async function main(): Promise<void> {
91
91
  ? codexHook.status === "manual" || httpService?.status === "manual"
92
92
  ? "Needs attention" : !paired ? "Needs connection" : "Authorize in Codex; review hooks"
93
93
  : "Not installed"}`,
94
- `Cursor ${before.cursor.installed ? `Beta · ${cursorReady ? "Authorize in Cursor" : "Needs repair"}` : "Not installed"}`,
94
+ `Cursor ${before.cursor.installed ? `Beta · ${cursorReady ? "Authenticate in Cursor" : "Needs repair"}` : "Not installed"}`,
95
95
  `Grok Build ${installed.has("grok")
96
96
  ? httpService?.status === "manual" ? "Needs attention" : "Authorize in Grok Build"
97
97
  : "Not installed"}`,
@@ -102,9 +102,9 @@ async function main(): Promise<void> {
102
102
  paired && installed.has("codex")
103
103
  ? `Next: authorize GrantTap in Codex, then ${CODEX_TRUST_INSTRUCTION}`
104
104
  : paired && before.cursor.installed
105
- ? "Next: open Cursor Settings → MCP → GrantTap → Authorize."
105
+ ? "Next: open Cursor Customize → MCPs → GrantTap → Authenticate."
106
106
  : !paired
107
- ? "Next: run granttap connect."
107
+ ? "Next: authenticate GrantTap in your coding app; granttap.com/connect will show the pairing QR."
108
108
  : engine
109
109
  ? "Governance is live. Restart the helper to pick it up: launchctl kickstart -k gui/$(id -u)/com.granttap.monitor"
110
110
  : "Governance stays off until an engine is found. Point at one with: granttap setup --engine <path>",
@@ -71,7 +71,7 @@ async function authorize(): Promise<void> {
71
71
  `[granttap-mcp] Cursor · Configured — ${cursor.detail}`,
72
72
  `[granttap-mcp] Persistent local OAuth is healthy at ${mcpUrl}`,
73
73
  `[granttap-mcp] LaunchAgent: ${service.status} (${service.detail})`,
74
- "[granttap-mcp] Open Cursor Settings → MCP → GrantTap → Authorize.",
74
+ "[granttap-mcp] Open Cursor Customize → MCPs → GrantTap → Authenticate. The browser continues at granttap.com/connect.",
75
75
  "[granttap-mcp] If this Mac is not paired, granttap.com/connect shows a QR and manual token.",
76
76
  "",
77
77
  ].join("\n"),
@@ -15,9 +15,9 @@ async function serve(): Promise<void> {
15
15
  process.stderr.write(
16
16
  [
17
17
  `[granttap-mcp] HTTP MCP + OAuth listening on ${started.mcpUrl}`,
18
- "[granttap-mcp] Cursor Settings → Authorize: set ~/.cursor/mcp.json entry to:",
18
+ "[granttap-mcp] Cursor authentication: set ~/.cursor/mcp.json entry to:",
19
19
  ` "granttap": { "url": "${started.mcpUrl}" }`,
20
- "[granttap-mcp] Then open Cursor Settings → MCP → GrantTap → Authorize.",
20
+ "[granttap-mcp] Then open Cursor Customize → MCPs → GrantTap → Authenticate and continue at granttap.com/connect.",
21
21
  "",
22
22
  ].join("\n"),
23
23
  );
@@ -37,7 +37,7 @@ details{border-top:1px solid #8884;padding-top:14px}summary{cursor:pointer;font-
37
37
  <h3>Provider readiness</h3><ul id="providers"></ul>
38
38
  <p>No GrantTap account or password is required. Pair using GrantTap on iPhone → Settings → Connections.
39
39
  Provider sign-in is separate.</p>
40
- <p>Missing hooks or background sync? Run <code>npm install -g granttap-mcp@0.8.11</code> and <code>granttap setup</code> locally.
40
+ <p>Missing hooks or background sync? Run <code>npm install -g granttap-mcp@0.8.12</code> and <code>granttap setup</code> locally.
41
41
  A saved pairing alone does not prove your phone or the background helper is online.</p>
42
42
  <p><a href="https://granttap.com" target="_blank" rel="noopener noreferrer">Website</a> ·
43
43
  <a href="https://granttap.com/privacy" target="_blank" rel="noopener noreferrer">Privacy</a> ·
@@ -97,7 +97,7 @@ export function inspectCursorHttpConfig(
97
97
  }
98
98
  const config = parseConfig(path);
99
99
  if (!config) {
100
- return { status: "action_required", detail: "Cursor mcp.json is invalid JSON; fix it before Authorize." };
100
+ return { status: "action_required", detail: "Cursor mcp.json is invalid JSON; fix it before authentication." };
101
101
  }
102
102
  const servers = config.mcpServers;
103
103
  if (servers == null) {
@@ -108,7 +108,7 @@ export function inspectCursorHttpConfig(
108
108
  }
109
109
  const entry = (servers as Record<string, unknown>).granttap;
110
110
  if (isHttpEntry(entry, expectedUrl)) {
111
- return { status: "action_required", detail: "Endpoint configured; keep local OAuth running and Authorize in Cursor." };
111
+ return { status: "action_required", detail: "Endpoint configured; keep local OAuth running and complete authentication in Cursor." };
112
112
  }
113
113
  return entry == null
114
114
  ? { status: "not_configured", detail: "Run granttap setup to add Cursor." }
@@ -5,14 +5,14 @@
5
5
  "email": "support@granttap.com"
6
6
  },
7
7
  "metadata": {
8
- "description": "GrantTap for Cursor — local HTTP MCP authorization and exactly correlated phone approvals",
9
- "version": "0.1.1"
8
+ "description": "GrantTap for Cursor — authorize on granttap.com/connect and approve local tasks from your phone",
9
+ "version": "0.1.5"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "granttap",
14
14
  "source": "./",
15
- "description": "Pair Cursor with GrantTap through loopback OAuth and keep each approval in its originating chat"
15
+ "description": "Authorize Cursor on granttap.com/connect, pair by QR, and keep each approval in its originating chat"
16
16
  }
17
17
  ]
18
18
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "granttap",
3
3
  "displayName": "GrantTap",
4
- "version": "0.1.1",
5
- "description": "GrantTap for Cursor: loopback HTTP MCP authorization, phone pairing, and exactly correlated dual-channel approvals. Start with granttap authorize.",
4
+ "version": "0.1.5",
5
+ "description": "Connect Cursor to GrantTap through granttap.com/connect, pair your phone with a one-time QR, and keep approvals in the originating chat.",
6
6
  "author": {
7
7
  "name": "GrantTap",
8
8
  "email": "support@granttap.com",
@@ -1,18 +1,17 @@
1
1
  # GrantTap Cursor plugin
2
2
 
3
3
  GrantTap connects Cursor to the GrantTap phone app through a loopback-only HTTP
4
- MCP server. Cursor can show its native **Authorize** action, while GrantTap keeps
4
+ MCP server. Cursor can show its native **Authenticate** action, while GrantTap keeps
5
5
  each phone response tied to the exact originating chat and prompt.
6
6
 
7
7
  ## Connect Cursor
8
8
 
9
- Install the supported CLI, then run the onboarding commands in this order:
9
+ Install the supported CLI and the GrantTap plugin from Cursor's marketplace,
10
+ then run:
10
11
 
11
12
  ```bash
12
13
  npm install -g granttap-mcp
13
14
  granttap setup
14
- granttap connect
15
- granttap setup
16
15
  granttap status
17
16
  ```
18
17
 
@@ -20,20 +19,17 @@ The commands have separate jobs:
20
19
 
21
20
  1. `granttap setup` detects Cursor, installs and verifies the persistent loopback OAuth/MCP
22
21
  service, then writes only GrantTap's entry in `~/.cursor/mcp.json`.
23
- 2. `granttap connect` displays a one-time QR and a short manual code for pairing
24
- the iPhone or iPad app. If the website already completed pairing,
25
- this command is not needed again.
26
- 3. `granttap setup` installs the Cursor, Claude Code, and Codex policy hooks and
27
- the background task-sync helper. OAuth remains a separate authorization.
28
- 4. `granttap status` performs a read-only readiness check.
29
-
30
- After `granttap setup`, open **Cursor Settings → MCP → GrantTap** and choose
31
- **Authorize**. The browser opens granttap.com/connect to authorize Cursor.
22
+ 2. `granttap setup` also installs the supported policy hooks and background
23
+ task-sync helper. OAuth remains a separate authorization.
24
+ 3. `granttap status` performs a read-only readiness check.
25
+
26
+ After `granttap setup`, open **Cursor Customize → MCPs → GrantTap** and choose
27
+ **Authenticate**. The browser opens granttap.com/connect to authorize Cursor.
32
28
  If the Mac is not paired, the website shows a one-time QR and manual-code
33
29
  fallback; a saved pairing is reused unless you explicitly confirm reconnect.
34
30
 
35
31
  The OAuth service listens only at `http://127.0.0.1:17342/mcp`. Cursor cannot
36
- show **Authorize** for a stdio (`command`/`args`) MCP entry, so do not replace the
32
+ show **Authenticate** for a stdio (`command`/`args`) MCP entry, so do not replace the
37
33
  plugin's HTTP configuration with stdio.
38
34
 
39
35
  ## Install from the Cursor marketplace
@@ -43,15 +39,6 @@ The plugin adds the `/connect` command, a connect skill, and the
43
39
  exact-correlation rule; `granttap setup` still configures the MCP endpoint
44
40
  itself.
45
41
 
46
- From a source checkout, the same plugin can be linked locally:
47
-
48
- ```bash
49
- mkdir -p "$HOME/.cursor/plugins/local"
50
- ln -sfn "$PWD/cursor-plugin" "$HOME/.cursor/plugins/local/granttap"
51
- ```
52
-
53
- Run those commands from the repository root.
54
-
55
42
  ## Exact dual-channel behavior
56
43
 
57
44
  For an interactive question or approval, Cursor and the phone receive the same
@@ -7,13 +7,12 @@ end-to-end.
7
7
 
8
8
  1. Run `granttap setup` to detect Cursor and configure the persistent loopback HTTP
9
9
  MCP/OAuth service.
10
- 2. Open **Cursor Settings → MCP → GrantTap → Authorize**.
11
- 3. Run `granttap connect` if pairing is still required; surface its one-time QR
12
- and manual code to the user.
13
- 4. Run `granttap setup`, then verify the result with `granttap status`.
10
+ 2. Open **Cursor Customize → MCPs → GrantTap → Authenticate**. Complete
11
+ authorization and any one-time QR pairing on `https://granttap.com/connect`.
12
+ 3. Run `granttap status`, then verify the GrantTap MCP tools respond in Cursor.
14
13
  5. For a test question, send the same complete prompt to Cursor and GrantTap
15
14
  under one exact correlation. Accept only the first answer correlated to that
16
15
  prompt; never reuse a response from another chat or request.
17
16
 
18
17
  Do not replace the plugin's HTTP MCP entry with stdio: Cursor exposes
19
- **Authorize** only for HTTP/SSE MCP transports.
18
+ **Authenticate** only for HTTP/SSE MCP transports.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: granttap-connect
3
- description: Authorize Cursor and connect or reconnect GrantTap through loopback HTTP MCP. Use when the user asks to connect, pair, show a QR, reconnect, or repair Cursor Authorize.
3
+ description: Authorize Cursor through granttap.com/connect, pair by QR, or reconnect GrantTap. Use when the user asks to connect, pair, show a QR, reconnect, or repair Cursor authentication.
4
4
  ---
5
5
 
6
6
  # GrantTap connect
@@ -9,7 +9,7 @@ Connect Cursor to the GrantTap phone app without weakening chat isolation.
9
9
 
10
10
  ## Workflow
11
11
 
12
- ### 1. Configure Cursor Authorize
12
+ ### 1. Configure Cursor authentication
13
13
 
14
14
  Run:
15
15
 
@@ -19,7 +19,8 @@ granttap setup
19
19
 
20
20
  This installs and verifies the persistent loopback OAuth/MCP service before it
21
21
  changes GrantTap's entry in `~/.cursor/mcp.json`. Then direct the user to
22
- **Cursor Settings → MCP → GrantTap → Authorize**.
22
+ **Cursor Customize → MCPs → GrantTap → Authenticate**. Cursor opens
23
+ `https://granttap.com/connect` for authorization.
23
24
 
24
25
  The plugin endpoint must remain HTTP:
25
26
 
@@ -35,19 +36,15 @@ The plugin endpoint must remain HTTP:
35
36
  ```
36
37
 
37
38
  Do not replace it with a stdio `command`/`args` entry; Cursor does not expose
38
- its native **Authorize** action for stdio MCP servers.
39
+ its native **Authenticate** action for stdio MCP servers.
39
40
 
40
- ### 2. Pair the phone
41
+ ### 2. Pair the phone on the website
41
42
 
42
- If the Mac is not already paired, run:
43
-
44
- ```bash
45
- granttap connect
46
- ```
47
-
48
- Show the resulting one-time QR in chat. Preserve the short manual code as a
49
- fallback when the camera or QR rendering is unavailable. When Authorize starts
50
- first, `granttap.com/connect` offers the same pairing choices.
43
+ If this computer has no pairing, `granttap.com/connect` shows a one-time QR and
44
+ manual-code fallback. If it is already paired, the website reuses that pairing
45
+ without replacing its keys. A new QR for another phone requires the user's
46
+ explicit reconnect confirmation on the website. Do not present localhost as
47
+ the user-facing settings page.
51
48
 
52
49
  ### 3. Install policy hooks
53
50
 
@@ -71,8 +68,8 @@ granttap status
71
68
  Confirm the loopback HTTP service and exact Cursor MCP entry are healthy,
72
69
  pairing is present, and required hooks are ready. `granttap status` cannot prove
73
70
  that Cursor retained an OAuth grant, so also confirm the MCP tools respond after
74
- **Authorize**. If Cursor loaded the MCP configuration beforehand, reload the
75
- Cursor window and retry **Authorize**.
71
+ **Authenticate**. If Cursor loaded the MCP configuration beforehand, reload the
72
+ Cursor window and retry **Authenticate**.
76
73
 
77
74
  For any interactive test, send the same complete prompt to Cursor and GrantTap
78
75
  under one exact correlation. The first answer carrying that exact correlation
@@ -86,4 +83,5 @@ correlation.
86
83
  - Run `granttap cursor repair` if `granttap status` reports an unhealthy OAuth
87
84
  service.
88
85
  - Re-run `granttap setup` if the policy hooks or background helper are missing.
89
- - Re-run `granttap connect` only when pairing is absent or must be replaced.
86
+ - If the website cannot reach the local helper, check Chrome's local-network
87
+ permission for `granttap.com` and the background helper with `granttap status`.
@@ -8,8 +8,8 @@ granttap setup
8
8
 
9
9
  When Cursor is installed, setup preserves unrelated MCP entries, installs the
10
10
  GrantTap shell and MCP policy hooks, configures the loopback HTTP MCP endpoint,
11
- and installs its persistent per-user service. Then open **Cursor Settings → MCP
12
- → GrantTap → Authorize** to complete authorization on granttap.com.
11
+ and installs its persistent per-user service. Then open **Cursor Customize →
12
+ MCPs → GrantTap → Authenticate** to complete authorization on granttap.com/connect.
13
13
 
14
14
  The service binds only to loopback. Its OAuth token does not replace GrantTap's
15
15
  end-to-end encrypted computer pairing.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "granttap-mcp",
3
- "version": "0.8.11",
3
+ "version": "0.8.12",
4
4
  "description": "Personal live control center runtime for local coding agents on iPhone and Apple Watch.",
5
5
  "type": "module",
6
6
  "bin": {