@assetlab/mcp-server 1.19.5 → 1.19.7

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/dist/worker.js CHANGED
@@ -12,23 +12,42 @@
12
12
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
13
  import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
14
14
  import { AssetLabClient } from './client.js';
15
- import { authServerMetadata, handleAuthorizeGet, handleAuthorizePost, handleRegister, handleToken, protectedResourceMetadata, } from './oauth.js';
15
+ import { authServerMetadata, handleAuthorizeGet, handleAuthorizePost, handleDelete, handleRegister, handleRevoke, handleToken, protectedResourceMetadata, resolveAccessToken, } from './oauth.js';
16
16
  import { registerTools, SERVER_INSTRUCTIONS } from './tools.js';
17
- const CORS_HEADERS = {
18
- 'Access-Control-Allow-Origin': '*',
19
- 'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS',
20
- 'Access-Control-Allow-Headers': 'Authorization, Content-Type, MCP-Protocol-Version, Accept',
21
- };
17
+ const ALLOWED_ORIGINS = new Set([
18
+ 'https://claude.ai',
19
+ 'https://chat.openai.com',
20
+ 'https://chatgpt.com',
21
+ ]);
22
+ function corsHeaders(request) {
23
+ const origin = request.headers.get('origin') ?? '';
24
+ if (!ALLOWED_ORIGINS.has(origin))
25
+ return {};
26
+ return {
27
+ 'Access-Control-Allow-Origin': origin,
28
+ 'Access-Control-Allow-Credentials': 'true',
29
+ Vary: 'Origin',
30
+ 'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS',
31
+ 'Access-Control-Allow-Headers': 'Authorization, Content-Type, MCP-Protocol-Version, Accept',
32
+ };
33
+ }
22
34
  const SERVER_INFO = { name: 'assetlab', version: '1.3.0' };
23
- function jsonResponse(body, status = 200, extra = {}) {
35
+ function jsonResponse(body, status = 200, extra = {}, corsFor) {
24
36
  return new Response(JSON.stringify(body), {
25
37
  status,
26
- headers: { 'Content-Type': 'application/json', ...CORS_HEADERS, ...extra },
38
+ headers: {
39
+ 'Content-Type': 'application/json',
40
+ ...(corsFor ? corsHeaders(corsFor) : {}),
41
+ ...extra,
42
+ },
27
43
  });
28
44
  }
29
- function withCors(response) {
45
+ function withCors(response, request) {
46
+ const cors = corsHeaders(request);
47
+ if (Object.keys(cors).length === 0)
48
+ return response;
30
49
  const headers = new Headers(response.headers);
31
- for (const [k, v] of Object.entries(CORS_HEADERS)) {
50
+ for (const [k, v] of Object.entries(cors)) {
32
51
  headers.set(k, v);
33
52
  }
34
53
  return new Response(response.body, {
@@ -61,32 +80,41 @@ export default {
61
80
  async fetch(request, env) {
62
81
  const url = new URL(request.url);
63
82
  const origin = url.origin;
64
- // CORS preflight
83
+ // CORS preflight — only emit allow-* headers for trusted origins; unknown
84
+ // origins get a bare 204 which fails the preflight in the browser.
65
85
  if (request.method === 'OPTIONS') {
66
- return new Response(null, { status: 204, headers: CORS_HEADERS });
86
+ return new Response(null, { status: 204, headers: corsHeaders(request) });
67
87
  }
68
88
  if (!env.ASSETLAB_API_URL) {
69
89
  return jsonResponse({ error: 'Server misconfigured: ASSETLAB_API_URL not set.' }, 500);
70
90
  }
71
91
  // ── OAuth 2.0 routes ──────────────────────────────────────────────────
72
92
  if (url.pathname === '/.well-known/oauth-protected-resource') {
73
- return protectedResourceMetadata(origin);
93
+ return protectedResourceMetadata(origin, request);
74
94
  }
75
95
  if (url.pathname === '/.well-known/oauth-authorization-server' ||
76
96
  url.pathname === '/.well-known/openid-configuration') {
77
- return authServerMetadata(origin);
97
+ return authServerMetadata(origin, request);
78
98
  }
79
99
  if (url.pathname === '/oauth/register' && request.method === 'POST') {
80
- return handleRegister(request);
100
+ return handleRegister(request, env.OAUTH_CLIENTS);
101
+ }
102
+ // RFC 7592 client management — DELETE /oauth/register/{client_id}
103
+ if (url.pathname.startsWith('/oauth/register/') && request.method === 'DELETE') {
104
+ const clientId = url.pathname.slice('/oauth/register/'.length);
105
+ return handleDelete(request, env.OAUTH_CLIENTS, clientId);
81
106
  }
82
107
  if (url.pathname === '/authorize' && request.method === 'GET') {
83
- return handleAuthorizeGet(request);
108
+ return handleAuthorizeGet(request, env.OAUTH_CLIENTS);
84
109
  }
85
110
  if (url.pathname === '/authorize' && request.method === 'POST') {
86
- return handleAuthorizePost(request, env.OAUTH_SECRET);
111
+ return handleAuthorizePost(request, env);
87
112
  }
88
113
  if (url.pathname === '/token' && request.method === 'POST') {
89
- return handleToken(request, env.OAUTH_SECRET);
114
+ return handleToken(request, env);
115
+ }
116
+ if (url.pathname === '/oauth/revoke' && request.method === 'POST') {
117
+ return handleRevoke(request, env);
90
118
  }
91
119
  // ── Health / connectivity probes ──────────────────────────────────────
92
120
  // Return 401 for unauthenticated requests so Claude.ai triggers the OAuth
@@ -97,10 +125,10 @@ export default {
97
125
  if (!authHeader) {
98
126
  return new Response(null, {
99
127
  status: 401,
100
- headers: { 'WWW-Authenticate': wwwAuthenticate, ...CORS_HEADERS },
128
+ headers: { 'WWW-Authenticate': wwwAuthenticate, ...corsHeaders(request) },
101
129
  });
102
130
  }
103
- return new Response(null, { status: 200, headers: CORS_HEADERS });
131
+ return new Response(null, { status: 200, headers: corsHeaders(request) });
104
132
  }
105
133
  if (request.method === 'GET') {
106
134
  const accepts = request.headers.get('Accept') ?? '';
@@ -111,7 +139,7 @@ export default {
111
139
  if (!authHeader) {
112
140
  return new Response(null, {
113
141
  status: 401,
114
- headers: { 'WWW-Authenticate': wwwAuthenticate, ...CORS_HEADERS },
142
+ headers: { 'WWW-Authenticate': wwwAuthenticate, ...corsHeaders(request) },
115
143
  });
116
144
  }
117
145
  const { readable, writable } = new TransformStream();
@@ -123,16 +151,31 @@ export default {
123
151
  request.signal?.addEventListener('abort', () => { clearInterval(timer); writer.close().catch(() => { }); });
124
152
  return new Response(readable, {
125
153
  status: 200,
126
- headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', ...CORS_HEADERS },
154
+ headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', ...corsHeaders(request) },
127
155
  });
128
156
  }
129
157
  if (!authHeader) {
130
- return jsonResponse({ error: 'unauthorized', error_description: 'Bearer token required' }, 401, { 'WWW-Authenticate': wwwAuthenticate });
158
+ return jsonResponse({ error: 'unauthorized', error_description: 'Bearer token required' }, 401, { 'WWW-Authenticate': wwwAuthenticate }, request);
131
159
  }
132
- return jsonResponse({ ...SERVER_INFO, status: 'ok' });
160
+ return jsonResponse({ ...SERVER_INFO, status: 'ok' }, 200, {}, request);
133
161
  }
134
162
  // ── MCP transport ─────────────────────────────────────────────────────
135
- const apiKey = authHeader?.startsWith('Bearer ') ? authHeader.slice(7).trim() : '';
163
+ // Gate POST against the same Bearer requirement as GET/HEAD. Without this,
164
+ // initialize/tools/list leak the full tool catalog + SERVER_INSTRUCTIONS
165
+ // to any unauthenticated caller (pentest finding F-002).
166
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
167
+ return jsonResponse({ jsonrpc: '2.0', error: { code: -32001, message: 'Unauthorized: Bearer token required' } }, 401, { 'WWW-Authenticate': wwwAuthenticate }, request);
168
+ }
169
+ // Resolve the Bearer token: `mcp_at_*` tokens are looked up in KV and
170
+ // mapped to the underlying AssetLab API key; legacy `al_*` tokens pass
171
+ // through. Unknown / expired tokens → 401, which makes Claude.ai re-run
172
+ // the OAuth flow rather than show a stale "connected" state.
173
+ const presentedToken = authHeader.slice(7).trim();
174
+ const resolved = await resolveAccessToken(env.OAUTH_CLIENTS, presentedToken);
175
+ if (!resolved) {
176
+ return jsonResponse({ jsonrpc: '2.0', error: { code: -32001, message: 'Unauthorized: token expired or revoked' } }, 401, { 'WWW-Authenticate': wwwAuthenticate }, request);
177
+ }
178
+ const apiKey = resolved.apiKey;
136
179
  const client = new AssetLabClient({ apiKey, apiUrl: env.ASSETLAB_API_URL });
137
180
  const server = new McpServer(SERVER_INFO, { instructions: SERVER_INSTRUCTIONS });
138
181
  registerTools(server, client);
@@ -143,11 +186,11 @@ export default {
143
186
  const normalizedRequest = normalizeRequest(request);
144
187
  try {
145
188
  const response = await transport.handleRequest(normalizedRequest);
146
- return withCors(response);
189
+ return withCors(response, request);
147
190
  }
148
191
  catch (err) {
149
192
  const message = err instanceof Error ? err.message : 'Internal server error';
150
- return jsonResponse({ jsonrpc: '2.0', error: { code: -32603, message } }, 500);
193
+ return jsonResponse({ jsonrpc: '2.0', error: { code: -32603, message } }, 500, {}, request);
151
194
  }
152
195
  },
153
196
  };
@@ -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": "@assetlab/mcp-server",
3
- "version": "1.19.5",
3
+ "version": "1.19.7",
4
4
  "description": "MCP server for AssetLab — connect Claude, ChatGPT, or Microsoft Copilot to your asset management data",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,6 +11,9 @@
11
11
  "build": "tsc",
12
12
  "dev": "tsx src/index.ts",
13
13
  "start": "node dist/index.js",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest run --coverage",
14
17
  "worker:dev": "wrangler dev --config wrangler.toml",
15
18
  "worker:deploy": "wrangler deploy --config wrangler.toml"
16
19
  },
@@ -34,8 +37,10 @@
34
37
  },
35
38
  "devDependencies": {
36
39
  "@types/node": "^22.0.0",
40
+ "@vitest/coverage-v8": "^2.1.0",
37
41
  "tsx": "^4.19.0",
38
42
  "typescript": "^5.7.0",
43
+ "vitest": "^2.1.0",
39
44
  "wrangler": "^4.35.0"
40
45
  }
41
46
  }