rewind-mcp-server 0.1.1 → 0.4.0

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.
Files changed (53) hide show
  1. package/README.md +84 -11
  2. package/dist/__tests__/helpers.test.d.ts +1 -0
  3. package/dist/__tests__/helpers.test.js +131 -0
  4. package/dist/__tests__/helpers.test.js.map +1 -0
  5. package/dist/__tests__/image-block.live.d.ts +1 -0
  6. package/dist/__tests__/image-block.live.js +41 -0
  7. package/dist/__tests__/image-block.live.js.map +1 -0
  8. package/dist/__tests__/server.test.js +713 -16
  9. package/dist/__tests__/server.test.js.map +1 -1
  10. package/dist/__tests__/stdio-e2e.live.d.ts +1 -0
  11. package/dist/__tests__/stdio-e2e.live.js +60 -0
  12. package/dist/__tests__/stdio-e2e.live.js.map +1 -0
  13. package/dist/__tests__/ui-resource.live.d.ts +1 -0
  14. package/dist/__tests__/ui-resource.live.js +71 -0
  15. package/dist/__tests__/ui-resource.live.js.map +1 -0
  16. package/dist/client.d.ts +9 -0
  17. package/dist/client.js +15 -0
  18. package/dist/client.js.map +1 -1
  19. package/dist/index.js +0 -0
  20. package/dist/prompts.js +132 -0
  21. package/dist/prompts.js.map +1 -1
  22. package/dist/resources/ui.d.ts +33 -0
  23. package/dist/resources/ui.js +14 -0
  24. package/dist/resources/ui.js.map +1 -0
  25. package/dist/resources.js +144 -0
  26. package/dist/resources.js.map +1 -1
  27. package/dist/server.js +55 -1
  28. package/dist/server.js.map +1 -1
  29. package/dist/tools/collecting.js +78 -37
  30. package/dist/tools/collecting.js.map +1 -1
  31. package/dist/tools/cross-domain.js +147 -19
  32. package/dist/tools/cross-domain.js.map +1 -1
  33. package/dist/tools/debug.d.ts +6 -0
  34. package/dist/tools/debug.js +26 -0
  35. package/dist/tools/debug.js.map +1 -0
  36. package/dist/tools/helpers.d.ts +81 -5
  37. package/dist/tools/helpers.js +138 -4
  38. package/dist/tools/helpers.js.map +1 -1
  39. package/dist/tools/listening.js +223 -52
  40. package/dist/tools/listening.js.map +1 -1
  41. package/dist/tools/reading.js +122 -22
  42. package/dist/tools/reading.js.map +1 -1
  43. package/dist/tools/running.js +87 -43
  44. package/dist/tools/running.js.map +1 -1
  45. package/dist/tools/watching.js +199 -32
  46. package/dist/tools/watching.js.map +1 -1
  47. package/dist/ui-bundles.d.ts +3 -0
  48. package/dist/ui-bundles.js +8 -0
  49. package/dist/ui-bundles.js.map +1 -0
  50. package/dist/worker.d.ts +2 -1
  51. package/dist/worker.js +55 -30
  52. package/dist/worker.js.map +1 -1
  53. package/package.json +13 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-bundles.js","sourceRoot":"","sources":["../src/ui-bundles.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,UAAU,GACrB,6rrbAA6rrb,CAAC;AAChsrb,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kz3bAAkz3b,CAAC;AAErz3b,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,YAAY,EAAE,UAAU;IACxB,qBAAqB,EAAE,mBAAmB;CAC3C,CAAC"}
package/dist/worker.d.ts CHANGED
@@ -6,9 +6,10 @@
6
6
  * upstream identity provider. The OAuth layer is only for the remote transport;
7
7
  * local stdio transport (Claude Desktop, Claude Code) uses REWIND_API_KEY directly.
8
8
  */
9
- import { OAuthProvider } from '@cloudflare/workers-oauth-provider';
9
+ import { OAuthProvider, type OAuthHelpers } from '@cloudflare/workers-oauth-provider';
10
10
  interface Env {
11
11
  OAUTH_KV: KVNamespace;
12
+ OAUTH_PROVIDER: OAuthHelpers;
12
13
  REWIND_API_URL: string;
13
14
  REWIND_API_KEY: string;
14
15
  GITHUB_CLIENT_ID: string;
package/dist/worker.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * upstream identity provider. The OAuth layer is only for the remote transport;
7
7
  * local stdio transport (Claude Desktop, Claude Code) uses REWIND_API_KEY directly.
8
8
  */
9
- import { OAuthProvider } from '@cloudflare/workers-oauth-provider';
9
+ import { OAuthProvider, } from '@cloudflare/workers-oauth-provider';
10
10
  import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
11
11
  import { RewindClient } from './client.js';
12
12
  import { createServer } from './server.js';
@@ -37,15 +37,15 @@ function checkRateLimit(key) {
37
37
  * ctx.props contains the GrantProps set during authorization.
38
38
  */
39
39
  const mcpHandler = {
40
- async fetch(request, env, _ctx) {
40
+ async fetch(request, env, ctx) {
41
41
  // Rate limit by IP
42
42
  const ip = request.headers.get('cf-connecting-ip') ?? 'unknown';
43
43
  const rateResult = checkRateLimit(ip);
44
44
  if (!rateResult.allowed) {
45
45
  return Response.json({ error: 'Too Many Requests' }, { status: 429, headers: { 'Retry-After': '60' } });
46
46
  }
47
- // Get user props from OAuth context
48
- const props = request.props;
47
+ // Get user props from OAuth context (set by OAuthProvider on ctx, not request)
48
+ const props = ctx.props;
49
49
  if (!props?.rewindApiKey) {
50
50
  return Response.json({ error: 'Unauthorized' }, { status: 401 });
51
51
  }
@@ -67,23 +67,36 @@ const mcpHandler = {
67
67
  const defaultHandler = {
68
68
  async fetch(request, env, _ctx) {
69
69
  const url = new URL(request.url);
70
+ // CORS preflight -- respond before auth parsing so OPTIONS never reaches
71
+ // /authorize's `parseAuthRequest(request)` path (which throws on
72
+ // preflights without query params). Without this, claude.ai aborts the
73
+ // OAuth flow with "Couldn't reach the MCP server".
74
+ if (request.method === 'OPTIONS') {
75
+ return new Response(null, {
76
+ status: 204,
77
+ headers: {
78
+ 'Access-Control-Allow-Origin': request.headers.get('Origin') ?? '*',
79
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
80
+ 'Access-Control-Allow-Headers': request.headers.get('Access-Control-Request-Headers') ??
81
+ 'Authorization, Content-Type',
82
+ 'Access-Control-Max-Age': '86400',
83
+ Vary: 'Origin',
84
+ },
85
+ });
86
+ }
70
87
  // Health check
71
88
  if (url.pathname === '/' || url.pathname === '/health') {
72
89
  return Response.json({ status: 'ok', service: 'rewind-mcp-server' });
73
90
  }
74
91
  // Authorization page -- user sees consent screen, clicks "Sign in with GitHub"
75
92
  if (url.pathname === '/authorize') {
76
- // Parse the MCP OAuth authorization request from query params
93
+ // Parse the OAuth authorization request from the MCP client
94
+ const oauthReqInfo = await env.OAUTH_PROVIDER.parseAuthRequest(request);
77
95
  const clientName = url.searchParams.get('client_name') ?? 'Claude';
78
96
  const scopes = (url.searchParams.get('scope') ?? 'read').split(' ');
79
- const state = url.searchParams.get('state') ?? '';
80
- // Store the original OAuth params in a short-lived KV key so we can
81
- // retrieve them after GitHub redirects back
97
+ // Store the parsed auth request in KV so /callback can complete authorization
82
98
  const oauthState = crypto.randomUUID();
83
- await env.OAUTH_KV.put(`github_state:${oauthState}`, JSON.stringify({
84
- originalUrl: request.url,
85
- state,
86
- }), { expirationTtl: 600 } // 10 minutes
99
+ await env.OAUTH_KV.put(`github_state:${oauthState}`, JSON.stringify({ oauthReqInfo }), { expirationTtl: 600 } // 10 minutes
87
100
  );
88
101
  const callbackUrl = `${url.origin}/callback`;
89
102
  const gitHubUrl = getGitHubAuthorizeUrl(env.GITHUB_CLIENT_ID, callbackUrl, oauthState);
@@ -100,47 +113,59 @@ const defaultHandler = {
100
113
  if (url.pathname === '/callback') {
101
114
  const code = url.searchParams.get('code');
102
115
  const githubState = url.searchParams.get('state');
116
+ console.error(`[callback] code=${code ? 'present' : 'MISSING'} state=${githubState ? 'present' : 'MISSING'}`);
103
117
  if (!code || !githubState) {
118
+ console.error('[callback] rejecting: missing code or state');
104
119
  return Response.json({ error: 'Missing code or state from GitHub' }, { status: 400 });
105
120
  }
106
- // Retrieve the original OAuth params
107
121
  const storedState = await env.OAUTH_KV.get(`github_state:${githubState}`);
108
122
  if (!storedState) {
123
+ console.error(`[callback] rejecting: no stored state for github_state:${githubState}`);
109
124
  return Response.json({ error: 'Invalid or expired state. Please try connecting again.' }, { status: 400 });
110
125
  }
111
126
  // eslint-disable-next-line drizzle/enforce-delete-with-where -- KV.delete(), not Drizzle
112
127
  await env.OAUTH_KV.delete(`github_state:${githubState}`);
113
- const { originalUrl } = JSON.parse(storedState);
114
- // Exchange GitHub code for user info
128
+ const { oauthReqInfo } = JSON.parse(storedState);
115
129
  let gitHubUser;
116
130
  try {
117
131
  gitHubUser = await exchangeGitHubCode(code, env.GITHUB_CLIENT_ID, env.GITHUB_CLIENT_SECRET);
132
+ console.error(`[callback] github exchange ok: id=${gitHubUser.id} login=${gitHubUser.login}`);
118
133
  }
119
134
  catch (error) {
135
+ console.error(`[callback] github exchange FAILED: ${error instanceof Error ? error.message : String(error)}`);
120
136
  return Response.json({
121
137
  error: `GitHub authentication failed: ${error instanceof Error ? error.message : String(error)}`,
122
138
  }, { status: 400 });
123
139
  }
124
- // Check if this GitHub user is in the allowlist
125
- const allowlist = JSON.parse(env.USER_ALLOWLIST || '{}');
140
+ const allowlistRaw = env.USER_ALLOWLIST || '{}';
141
+ const allowlist = JSON.parse(allowlistRaw);
126
142
  const rewindUserId = allowlist[String(gitHubUser.id)];
143
+ console.error(`[callback] allowlist check: github_id=${gitHubUser.id} rewind_user_id=${rewindUserId ?? 'NOT_ALLOWED'} allowlist_keys=${Object.keys(allowlist).join(',')}`);
127
144
  if (rewindUserId === undefined) {
128
145
  return Response.json({
129
- error: `GitHub user @${gitHubUser.login} is not authorized. Contact the Rewind admin to request access.`,
146
+ error: `GitHub user @${gitHubUser.login} (id ${gitHubUser.id}) is not authorized. Contact the Rewind admin to request access.`,
130
147
  }, { status: 403 });
131
148
  }
132
- // Complete the OAuth authorization using the workers-oauth-provider helpers.
133
- // We need to redirect back to the original authorize URL with the approval.
134
- // The OAuthProvider handles the actual code generation and redirect.
135
- // We pass the user info as props that will be available in the API handler.
136
- // Redirect to the original authorize URL with an approval indicator
137
- // The OAuthProvider's authorize flow will pick this up
138
- const approveUrl = new URL(originalUrl);
139
- approveUrl.searchParams.set('github_user_id', String(gitHubUser.id));
140
- approveUrl.searchParams.set('github_login', gitHubUser.login);
141
- approveUrl.searchParams.set('rewind_user_id', String(rewindUserId));
142
- approveUrl.searchParams.set('approved', 'true');
143
- return Response.redirect(approveUrl.toString(), 302);
149
+ try {
150
+ const { redirectTo } = await env.OAUTH_PROVIDER.completeAuthorization({
151
+ request: oauthReqInfo,
152
+ userId: String(rewindUserId),
153
+ metadata: { label: gitHubUser.login },
154
+ scope: oauthReqInfo.scope,
155
+ props: {
156
+ rewindUserId,
157
+ rewindApiKey: env.REWIND_API_KEY,
158
+ gitHubLogin: gitHubUser.login,
159
+ },
160
+ });
161
+ console.error(`[callback] completeAuthorization redirectTo=${redirectTo}`);
162
+ return Response.redirect(redirectTo, 302);
163
+ }
164
+ catch (err) {
165
+ const msg = err instanceof Error ? err.message : String(err);
166
+ console.error(`[callback] completeAuthorization FAILED: ${msg}`);
167
+ return Response.json({ error: `completeAuthorization failed: ${msg}` }, { status: 500 });
168
+ }
144
169
  }
145
170
  return Response.json({ error: 'Not found', docs: 'https://docs.rewind.rest' }, { status: 404 });
146
171
  },
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rewind-mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.4.0",
4
4
  "description": "MCP server for the Rewind personal data API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,11 +15,13 @@
15
15
  ],
16
16
  "scripts": {
17
17
  "build": "tsc",
18
+ "build:web": "node scripts/inline-bundles.mjs",
18
19
  "dev": "tsc --watch",
19
20
  "start": "node dist/index.js",
20
21
  "test": "vitest run",
21
22
  "test:watch": "vitest",
22
23
  "inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
24
+ "deploy": "npm run build:web && wrangler deploy",
23
25
  "prepublishOnly": "npm run build"
24
26
  },
25
27
  "keywords": [
@@ -51,13 +53,22 @@
51
53
  },
52
54
  "dependencies": {
53
55
  "@cloudflare/workers-oauth-provider": "^0.4.0",
54
- "@modelcontextprotocol/sdk": "^1.12.1",
56
+ "@modelcontextprotocol/ext-apps": "^1.7.0",
57
+ "@modelcontextprotocol/sdk": "^1.29.0",
58
+ "react": "^19.2.5",
59
+ "react-dom": "^19.2.5",
60
+ "thumbhash": "^0.1.1",
55
61
  "zod": "^3.23.0"
56
62
  },
57
63
  "devDependencies": {
58
64
  "@cloudflare/workers-types": "^4.20260403.1",
59
65
  "@types/node": "^22.0.0",
66
+ "@types/react": "^19.2.14",
67
+ "@types/react-dom": "^19.2.3",
68
+ "@vitejs/plugin-react": "^6.0.1",
60
69
  "typescript": "^5.9.3",
70
+ "vite": "^8.0.9",
71
+ "vite-plugin-singlefile": "^2.3.3",
61
72
  "vitest": "^4.1.2"
62
73
  }
63
74
  }