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.
- package/README.md +84 -11
- package/dist/__tests__/helpers.test.d.ts +1 -0
- package/dist/__tests__/helpers.test.js +131 -0
- package/dist/__tests__/helpers.test.js.map +1 -0
- package/dist/__tests__/image-block.live.d.ts +1 -0
- package/dist/__tests__/image-block.live.js +41 -0
- package/dist/__tests__/image-block.live.js.map +1 -0
- package/dist/__tests__/server.test.js +713 -16
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/stdio-e2e.live.d.ts +1 -0
- package/dist/__tests__/stdio-e2e.live.js +60 -0
- package/dist/__tests__/stdio-e2e.live.js.map +1 -0
- package/dist/__tests__/ui-resource.live.d.ts +1 -0
- package/dist/__tests__/ui-resource.live.js +71 -0
- package/dist/__tests__/ui-resource.live.js.map +1 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.js +15 -0
- package/dist/client.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/prompts.js +132 -0
- package/dist/prompts.js.map +1 -1
- package/dist/resources/ui.d.ts +33 -0
- package/dist/resources/ui.js +14 -0
- package/dist/resources/ui.js.map +1 -0
- package/dist/resources.js +144 -0
- package/dist/resources.js.map +1 -1
- package/dist/server.js +55 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/collecting.js +78 -37
- package/dist/tools/collecting.js.map +1 -1
- package/dist/tools/cross-domain.js +147 -19
- package/dist/tools/cross-domain.js.map +1 -1
- package/dist/tools/debug.d.ts +6 -0
- package/dist/tools/debug.js +26 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/helpers.d.ts +81 -5
- package/dist/tools/helpers.js +138 -4
- package/dist/tools/helpers.js.map +1 -1
- package/dist/tools/listening.js +223 -52
- package/dist/tools/listening.js.map +1 -1
- package/dist/tools/reading.js +122 -22
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/running.js +87 -43
- package/dist/tools/running.js.map +1 -1
- package/dist/tools/watching.js +199 -32
- package/dist/tools/watching.js.map +1 -1
- package/dist/ui-bundles.d.ts +3 -0
- package/dist/ui-bundles.js +8 -0
- package/dist/ui-bundles.js.map +1 -0
- package/dist/worker.d.ts +2 -1
- package/dist/worker.js +55 -30
- package/dist/worker.js.map +1 -1
- 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,
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
125
|
-
const allowlist = JSON.parse(
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
},
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,
|
|
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.
|
|
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/
|
|
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
|
}
|