@metalabdesign/mcp-client 1.0.1

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 (64) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +243 -0
  3. package/dist/bin/cli.d.ts +14 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/bin/cli.js +216 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/bin/metalab-mcp-config.d.ts +9 -0
  8. package/dist/bin/metalab-mcp-config.d.ts.map +1 -0
  9. package/dist/bin/metalab-mcp-config.js +224 -0
  10. package/dist/bin/metalab-mcp-config.js.map +1 -0
  11. package/dist/bin/metalab-mcp.d.ts +14 -0
  12. package/dist/bin/metalab-mcp.d.ts.map +1 -0
  13. package/dist/bin/metalab-mcp.js +242 -0
  14. package/dist/bin/metalab-mcp.js.map +1 -0
  15. package/dist/config/aws-sso.d.ts +21 -0
  16. package/dist/config/aws-sso.d.ts.map +1 -0
  17. package/dist/config/aws-sso.js +67 -0
  18. package/dist/config/aws-sso.js.map +1 -0
  19. package/dist/config/defaults.d.ts +14 -0
  20. package/dist/config/defaults.d.ts.map +1 -0
  21. package/dist/config/defaults.js +20 -0
  22. package/dist/config/defaults.js.map +1 -0
  23. package/dist/config/index.d.ts +5 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +3 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/index.d.ts +27 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +30 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/oauth.d.ts +34 -0
  32. package/dist/oauth.d.ts.map +1 -0
  33. package/dist/oauth.js +401 -0
  34. package/dist/oauth.js.map +1 -0
  35. package/dist/proxy.d.ts +39 -0
  36. package/dist/proxy.d.ts.map +1 -0
  37. package/dist/proxy.js +203 -0
  38. package/dist/proxy.js.map +1 -0
  39. package/dist/storage.d.ts +15 -0
  40. package/dist/storage.d.ts.map +1 -0
  41. package/dist/storage.js +64 -0
  42. package/dist/storage.js.map +1 -0
  43. package/dist/types.d.ts +78 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +40 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/utils.d.ts +42 -0
  48. package/dist/utils.d.ts.map +1 -0
  49. package/dist/utils.js +89 -0
  50. package/dist/utils.js.map +1 -0
  51. package/package.json +51 -0
  52. package/src/bin/cli.ts +242 -0
  53. package/src/bin/metalab-mcp-config.ts +262 -0
  54. package/src/bin/metalab-mcp.ts +284 -0
  55. package/src/config/aws-sso.ts +78 -0
  56. package/src/config/defaults.ts +26 -0
  57. package/src/config/index.ts +8 -0
  58. package/src/index.ts +54 -0
  59. package/src/oauth.ts +540 -0
  60. package/src/proxy.ts +274 -0
  61. package/src/storage.ts +81 -0
  62. package/src/types.ts +79 -0
  63. package/src/utils.ts +115 -0
  64. package/tsconfig.json +25 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,43 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@metalabdesign/mcp-client` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.0.1] - 2026-01-28
9
+
10
+ ### Changed
11
+ - Switched package registry from GitHub Packages to npmjs.org for easier installation
12
+ - No authentication required to install - just run `npx @metalabdesign/mcp-client`
13
+
14
+ ### Fixed
15
+ - TypeScript strict mode errors in `metalab-mcp-config.ts`
16
+ - CI workflow now allows publishing same version with `--allow-same-version`
17
+
18
+ ## [1.0.0] - 2026-01-28
19
+
20
+ ### Added
21
+ - Initial public release as `@metalabdesign/mcp-client`
22
+ - **Zero-config CLI** (`metalab-mcp`) - automatically discovers MCP Gateway URL via:
23
+ - AWS SSM Parameter Store (`/mcp/gateway-url`)
24
+ - `MCP_SERVER_URL` environment variable
25
+ - Hardcoded production fallback
26
+ - **Config generator** (`metalab-mcp-config`) for multiple MCP clients:
27
+ - Claude Desktop (macOS/Windows/Linux)
28
+ - Windsurf
29
+ - Cursor
30
+ - VS Code (Cline)
31
+ - **MCP Inspector integration** via `--inspect` flag
32
+ - **AWS SSO profile support** via `--profile` flag
33
+ - **Per-user service token forwarding**:
34
+ - Figma (`--figma-token` / `FIGMA_ACCESS_TOKEN`)
35
+ - Notion (`--notion-token` / `NOTION_ACCESS_TOKEN`)
36
+ - OAuth 2.1 with PKCE authentication
37
+ - Automatic token refresh and persistence
38
+ - GitHub Actions CI/CD pipeline for automated releases
39
+
40
+ ### Migration from `@metalab/mcp-local-proxy`
41
+ - Package renamed to `@metalabdesign/mcp-client`
42
+ - New convenience commands: `metalab-mcp` and `metalab-mcp-config`
43
+ - Original `mcp-local-proxy` CLI still available for advanced usage
package/README.md ADDED
@@ -0,0 +1,243 @@
1
+ # @metalabdesign/mcp-client
2
+
3
+ MCP client for connecting to Metalab's MCP Gateway with OAuth 2.1 authentication.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Run directly - zero config needed!
9
+ npx @metalabdesign/mcp-client
10
+
11
+ # Generate config for your MCP client (Claude, Windsurf, Cursor, etc.)
12
+ npx @metalabdesign/mcp-client-config --client claude
13
+ ```
14
+
15
+ ## Installation
16
+
17
+ The package is published on **npmjs.org** (public, no authentication needed).
18
+
19
+ ```bash
20
+ # Run directly with npx (recommended)
21
+ npx @metalabdesign/mcp-client
22
+
23
+ # Or install globally
24
+ npm install -g @metalabdesign/mcp-client
25
+ metalab-mcp
26
+ ```
27
+
28
+ ### Registry Configuration
29
+
30
+ If your `~/.npmrc` maps `@metalabdesign` to GitHub Packages for other internal packages, you'll need to explicitly use the npmjs.org registry for this package:
31
+
32
+ **Option 1: Use `--registry` flag**
33
+
34
+ ```bash
35
+ npx --registry=https://registry.npmjs.org @metalabdesign/mcp-client
36
+ ```
37
+
38
+ **Option 2: Configure registry per-package in `~/.npmrc`**
39
+
40
+ ```ini
41
+ # Other @metalabdesign packages from GitHub Packages
42
+ @metalabdesign:registry=https://npm.pkg.github.com
43
+
44
+ # Override for mcp-client to use npmjs.org
45
+ @metalabdesign/mcp-client:registry=https://registry.npmjs.org
46
+ ```
47
+
48
+ **Option 3: Remove the GitHub Packages override** (simplest)
49
+
50
+ If you don't need other `@metalabdesign` packages locally, remove the registry override from your `~/.npmrc`:
51
+ ```bash
52
+ # Remove this line if present:
53
+ # @metalabdesign:registry=https://npm.pkg.github.com
54
+ ```
55
+
56
+ ## Commands
57
+
58
+ ### metalab-mcp
59
+
60
+ Zero-config connection to Metalab MCP Gateway.
61
+
62
+ ```bash
63
+ # Basic usage (auto-detects gateway URL)
64
+ metalab-mcp
65
+
66
+ # With Figma token
67
+ metalab-mcp --figma-token figd_YOUR_TOKEN
68
+
69
+ # With MCP Inspector for debugging
70
+ metalab-mcp --inspect
71
+
72
+ # Use specific AWS profile for SSM lookup
73
+ metalab-mcp --profile metalab-dev
74
+
75
+ # Using environment variables
76
+ FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN metalab-mcp
77
+ ```
78
+
79
+ **Gateway URL Resolution**:
80
+
81
+ 1. AWS SSM Parameter Store (`/mcp/gateway-url`) - if AWS credentials available
82
+ 2. `MCP_SERVER_URL` environment variable
83
+ 3. Hardcoded production URL (fallback)
84
+
85
+ ### metalab-mcp-config
86
+
87
+ Generate configuration for various MCP clients.
88
+
89
+ ```bash
90
+ # Interactive mode
91
+ metalab-mcp-config
92
+
93
+ # Generate config for specific client
94
+ metalab-mcp-config --client claude
95
+ metalab-mcp-config --client windsurf
96
+ metalab-mcp-config --client cursor
97
+ metalab-mcp-config --client cline
98
+
99
+ # Include tokens in config
100
+ metalab-mcp-config --client claude --figma-token figd_YOUR_TOKEN
101
+
102
+ # Write directly to client's config file
103
+ metalab-mcp-config --client claude --output
104
+ ```
105
+
106
+ **Supported Clients**:
107
+
108
+ | Client | Config File Location |
109
+ |--------|---------------------|
110
+ | Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` |
111
+ | Claude Desktop (Windows) | `%APPDATA%\Claude\claude_desktop_config.json` |
112
+ | Claude Desktop (Linux) | `~/.config/Claude/claude_desktop_config.json` |
113
+ | Windsurf | `~/.codeium/windsurf/mcp_config.json` |
114
+ | Cursor | `~/.cursor/mcp.json` |
115
+ | Cline (VS Code) | `.vscode/cline_mcp_settings.json` |
116
+
117
+ ## Claude Desktop Configuration
118
+
119
+ **Option 1: Use the config generator**
120
+
121
+ ```bash
122
+ npx @metalabdesign/mcp-client-config --client claude --output
123
+ ```
124
+
125
+ **Option 2: Manual configuration**
126
+
127
+ Add to your Claude Desktop config file:
128
+
129
+ ```json
130
+ {
131
+ "mcpServers": {
132
+ "metalab": {
133
+ "command": "npx",
134
+ "args": ["@metalabdesign/mcp-client"]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ **With service tokens**:
141
+
142
+ ```json
143
+ {
144
+ "mcpServers": {
145
+ "metalab": {
146
+ "command": "npx",
147
+ "args": ["@metalabdesign/mcp-client"],
148
+ "env": {
149
+ "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
150
+ "NOTION_ACCESS_TOKEN": "secret_YOUR_TOKEN_HERE"
151
+ }
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
157
+ ## Service Tokens
158
+
159
+ | Service | CLI Option | Environment Variable | Status |
160
+ |---------|------------|---------------------|--------|
161
+ | Figma | `--figma-token` | `FIGMA_ACCESS_TOKEN` | Full per-user support |
162
+ | Notion | `--notion-token` | `NOTION_ACCESS_TOKEN` | Limited (see docs) |
163
+
164
+ ### Getting Your Figma Token
165
+
166
+ 1. Log in to your Figma account
167
+ 2. Go to **Settings** > **Account**
168
+ 3. Scroll to **Personal access tokens**
169
+ 4. Click **Generate new token**
170
+ 5. Copy the token (starts with `figd_`)
171
+
172
+ ## AWS SSO Integration
173
+
174
+ For automatic gateway URL discovery via SSM Parameter Store:
175
+
176
+ ```bash
177
+ # Configure AWS SSO profile
178
+ aws configure sso --profile metalab-dev
179
+
180
+ # Log in
181
+ aws sso login --profile metalab-dev
182
+
183
+ # Now metalab-mcp will auto-detect the gateway URL
184
+ metalab-mcp --profile metalab-dev
185
+ ```
186
+
187
+ ## Advanced Options
188
+
189
+ The underlying `mcp-local-proxy` CLI is also available:
190
+
191
+ ```bash
192
+ mcp-local-proxy \
193
+ --remote-url https://your-gateway.example.com/mcp \
194
+ --callback-url http://localhost:9861/oauth/callback \
195
+ --figma-token figd_YOUR_TOKEN
196
+ ```
197
+
198
+ | Option | Description | Default |
199
+ |--------|-------------|---------|
200
+ | `--remote-url` | Remote MCP server URL | Required |
201
+ | `--callback-url` | OAuth callback URL | Required |
202
+ | `--token-dir` | Directory for token storage | `~/.metalab/mcp-client/tokens` |
203
+ | `--timeout` | Request timeout in ms | 30000 |
204
+ | `--no-browser` | Don't auto-open browser | false |
205
+ | `--log-level` | debug, info, warn, error | info |
206
+ | `--figma-token` | Figma access token | `FIGMA_ACCESS_TOKEN` env var |
207
+ | `--notion-token` | Notion access token | `NOTION_ACCESS_TOKEN` env var |
208
+
209
+ ## How It Works
210
+
211
+ ```
212
+ MCP Client metalab-mcp MCP Gateway MCP Services
213
+ (Claude, etc.) (proxy) (Figma, Notion...)
214
+ | | | |
215
+ |----stdio---> | | |
216
+ | |----HTTPS+OAuth---> | |
217
+ | | |----aggregate---> |
218
+ | |<---MCP responses------|<---------------------|
219
+ |<---stdio-----------| | |
220
+ ```
221
+
222
+ 1. **Auto-config**: Discovers gateway URL from SSM/env/hardcoded fallback
223
+ 2. **OAuth 2.1**: Handles authentication with Okta via browser
224
+ 3. **Token Management**: Persists and refreshes tokens automatically
225
+ 4. **MCP Proxy**: Bridges stdio (local) to HTTPS (remote)
226
+ 5. **Service Tokens**: Forwards per-user tokens to downstream services
227
+
228
+ ## Security
229
+
230
+ - **PKCE**: Uses SHA-256 code challenge for OAuth 2.1
231
+ - **Token Storage**: Tokens stored with 0600 permissions (owner read/write only)
232
+ - **Localhost Binding**: Callback server binds to 127.0.0.1 only
233
+ - **Gateway Protected**: MCP Gateway requires Okta authentication
234
+ - **Public Package**: Safe because gateway still requires authentication
235
+
236
+ ## Requirements
237
+
238
+ - Node.js 20 or later
239
+ - (Optional) AWS CLI for SSM-based gateway URL discovery
240
+
241
+ ## License
242
+
243
+ MIT
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Local Proxy CLI
4
+ *
5
+ * Usage:
6
+ * mcp-local-proxy --remote-url <url> --callback-url <url> [options]
7
+ *
8
+ * Example:
9
+ * mcp-local-proxy \
10
+ * --remote-url https://mcp.example.com/mcp \
11
+ * --callback-url http://localhost:9876/callback
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Local Proxy CLI
4
+ *
5
+ * Usage:
6
+ * mcp-local-proxy --remote-url <url> --callback-url <url> [options]
7
+ *
8
+ * Example:
9
+ * mcp-local-proxy \
10
+ * --remote-url https://mcp.example.com/mcp \
11
+ * --callback-url http://localhost:9876/callback
12
+ */
13
+ import { createProxy } from '../index.js';
14
+ function printHelp() {
15
+ console.error(`
16
+ MCP Local Proxy - Connect to remote OAuth-protected MCP servers
17
+
18
+ USAGE:
19
+ mcp-local-proxy --remote-url <url> --callback-url <url> [options]
20
+
21
+ REQUIRED:
22
+ --remote-url <url> Remote MCP server URL
23
+ --callback-url <url> OAuth callback URL with port (e.g., http://localhost:9876/callback)
24
+
25
+ OPTIONS:
26
+ --token-dir <dir> Directory for token storage (default: ~/.metalab/mcp-local-proxy/tokens)
27
+ --timeout <ms> Request timeout in milliseconds (default: 30000)
28
+ --no-browser Don't auto-open browser for auth
29
+ --log-level <level> Log level: debug, info, warn, error (default: info)
30
+ --figma-token <token> Figma access token (alternative: FIGMA_ACCESS_TOKEN env var)
31
+ --notion-token <token> Notion access token (alternative: NOTION_ACCESS_TOKEN env var)
32
+ --help, -h Show this help message
33
+
34
+ EXAMPLES:
35
+ # Basic usage
36
+ mcp-local-proxy \\
37
+ --remote-url https://mcp.example.com/mcp \\
38
+ --callback-url http://localhost:9876/callback
39
+
40
+ # With custom callback port (specify in URL)
41
+ mcp-local-proxy \\
42
+ --remote-url https://mcp.example.com/mcp \\
43
+ --callback-url http://localhost:3000/oauth/callback
44
+
45
+ # Debug mode
46
+ mcp-local-proxy \\
47
+ --remote-url https://mcp.example.com/mcp \\
48
+ --callback-url http://localhost:9876/callback \\
49
+ --log-level debug
50
+
51
+ # With Figma token
52
+ mcp-local-proxy \\
53
+ --remote-url https://mcp.example.com/mcp \\
54
+ --callback-url http://localhost:9876/callback \\
55
+ --figma-token figd_xxxxx
56
+
57
+ # Multiple service tokens
58
+ mcp-local-proxy \\
59
+ --remote-url https://mcp.example.com/mcp \\
60
+ --callback-url http://localhost:9876/callback \\
61
+ --figma-token figd_xxxxx \\
62
+ --notion-token secret_xxxxx
63
+
64
+ CLAUDE DESKTOP CONFIGURATION:
65
+ Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
66
+
67
+ # Basic configuration
68
+ {
69
+ "mcpServers": {
70
+ "my-remote-server": {
71
+ "command": "npx",
72
+ "args": [
73
+ "@metalab/mcp-local-proxy",
74
+ "--remote-url", "https://mcp.example.com/mcp",
75
+ "--callback-url", "http://localhost:9876/callback"
76
+ ]
77
+ }
78
+ }
79
+ }
80
+
81
+ # With service tokens (CLI args)
82
+ {
83
+ "mcpServers": {
84
+ "metalab-mcp": {
85
+ "command": "npx",
86
+ "args": [
87
+ "@metalab/mcp-local-proxy",
88
+ "--remote-url", "https://mcp.example.com/mcp",
89
+ "--callback-url", "http://localhost:9876/callback",
90
+ "--figma-token", "figd_xxxxx"
91
+ ]
92
+ }
93
+ }
94
+ }
95
+
96
+ # With service tokens (environment variables)
97
+ {
98
+ "mcpServers": {
99
+ "metalab-mcp": {
100
+ "command": "npx",
101
+ "args": [
102
+ "@metalab/mcp-local-proxy",
103
+ "--remote-url", "https://mcp.example.com/mcp",
104
+ "--callback-url", "http://localhost:9876/callback"
105
+ ],
106
+ "env": {
107
+ "FIGMA_ACCESS_TOKEN": "figd_xxxxx"
108
+ }
109
+ }
110
+ }
111
+ }
112
+ `);
113
+ }
114
+ function parseArgs(argv) {
115
+ const args = {
116
+ serviceTokens: {},
117
+ };
118
+ let i = 2; // Skip 'node' and script path
119
+ while (i < argv.length) {
120
+ const arg = argv[i];
121
+ switch (arg) {
122
+ case '--remote-url':
123
+ args.remoteUrl = argv[++i];
124
+ break;
125
+ case '--callback-url':
126
+ args.callbackUrl = argv[++i];
127
+ break;
128
+ case '--token-dir':
129
+ args.tokenStorageDir = argv[++i];
130
+ break;
131
+ case '--timeout':
132
+ args.timeout = Number.parseInt(argv[++i] ?? '', 10);
133
+ break;
134
+ case '--no-browser':
135
+ args.openBrowser = false;
136
+ break;
137
+ case '--log-level':
138
+ args.logLevel = argv[++i];
139
+ break;
140
+ case '--figma-token':
141
+ case '--figma':
142
+ args.serviceTokens.figma = argv[++i] ?? '';
143
+ break;
144
+ case '--notion-token':
145
+ case '--notion':
146
+ args.serviceTokens.notion = argv[++i] ?? '';
147
+ break;
148
+ case '--help':
149
+ case '-h':
150
+ args.help = true;
151
+ break;
152
+ default:
153
+ if (arg?.startsWith('-')) {
154
+ console.error(`Unknown option: ${arg}`);
155
+ process.exit(1);
156
+ }
157
+ }
158
+ i++;
159
+ }
160
+ // Load service tokens from environment variables (fallback)
161
+ if (process.env.FIGMA_ACCESS_TOKEN) {
162
+ args.serviceTokens.figma = args.serviceTokens.figma || process.env.FIGMA_ACCESS_TOKEN;
163
+ }
164
+ if (process.env.NOTION_ACCESS_TOKEN) {
165
+ args.serviceTokens.notion = args.serviceTokens.notion || process.env.NOTION_ACCESS_TOKEN;
166
+ }
167
+ // Clean up empty serviceTokens object
168
+ if (Object.keys(args.serviceTokens).length === 0) {
169
+ delete args.serviceTokens;
170
+ }
171
+ return args;
172
+ }
173
+ async function main() {
174
+ const args = parseArgs(process.argv);
175
+ if (args.help) {
176
+ printHelp();
177
+ process.exit(0);
178
+ }
179
+ if (!args.remoteUrl) {
180
+ console.error('Error: --remote-url is required');
181
+ console.error('Run with --help for usage information');
182
+ process.exit(1);
183
+ }
184
+ if (!args.callbackUrl) {
185
+ console.error('Error: --callback-url is required');
186
+ console.error('Run with --help for usage information');
187
+ process.exit(1);
188
+ }
189
+ try {
190
+ const proxy = await createProxy({
191
+ remoteUrl: args.remoteUrl,
192
+ callbackUrl: args.callbackUrl,
193
+ tokenStorageDir: args.tokenStorageDir,
194
+ timeout: args.timeout,
195
+ openBrowser: args.openBrowser ?? true,
196
+ logLevel: args.logLevel ?? 'info',
197
+ serviceTokens: args.serviceTokens,
198
+ });
199
+ // Handle shutdown gracefully
200
+ const shutdown = async () => {
201
+ console.error('Shutting down...');
202
+ await proxy.disconnect();
203
+ process.exit(0);
204
+ };
205
+ process.on('SIGINT', shutdown);
206
+ process.on('SIGTERM', shutdown);
207
+ // Start the proxy
208
+ await proxy.start();
209
+ }
210
+ catch (error) {
211
+ console.error('Failed to start proxy:', error);
212
+ process.exit(1);
213
+ }
214
+ }
215
+ main();
216
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAa1C,SAAS,SAAS;IACd,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGjB,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC7B,MAAM,IAAI,GAAY;QAClB,aAAa,EAAE,EAAE;KACpB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B;IAEzC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,QAAQ,GAAG,EAAE,CAAC;YACV,KAAK,cAAc;gBACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,MAAM;YACV,KAAK,gBAAgB;gBACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACV,KAAK,aAAa;gBACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM;YACV,KAAK,cAAc;gBACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAM;YACV,KAAK,aAAa;gBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAwB,CAAC;gBACjD,MAAM;YACV,KAAK,eAAe,CAAC;YACrB,KAAK,SAAS;gBACV,IAAI,CAAC,aAAc,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM;YACV,KAAK,gBAAgB,CAAC;YACtB,KAAK,UAAU;gBACX,IAAI,CAAC,aAAc,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM;YACV,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAM;YACV;gBACI,IAAI,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;QACT,CAAC;QACD,CAAC,EAAE,CAAC;IACR,CAAC;IAED,4DAA4D;IAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACjC,IAAI,CAAC,aAAc,CAAC,KAAK,GAAG,IAAI,CAAC,aAAc,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5F,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,aAAc,CAAC,MAAM,GAAG,IAAI,CAAC,aAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC/F,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACf,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;YACvC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,kBAAkB;QAClB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Metalab MCP Config Generator
4
+ *
5
+ * Generates JSON configuration for various MCP clients like Claude Desktop,
6
+ * Windsurf, Cursor, and VS Code.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=metalab-mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metalab-mcp-config.d.ts","sourceRoot":"","sources":["../../src/bin/metalab-mcp-config.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}