@markusvankempen/quantum-openqasm-mcp 1.7.0 → 1.7.2

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
@@ -7,6 +7,7 @@ ibm quantum, ibm fez, cursor, vscode, claude desktop, bob, antigravity, ai assis
7
7
  qiskit, quantum hardware, sampler v2, npx, stdio
8
8
  -->
9
9
 
10
+ [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.markusvankempen%2Fquantum--openqasm--mcp-blue)](https://registry.modelcontextprotocol.io/servers/io.github.markusvankempen/quantum-openqasm-mcp)
10
11
  [![npm version](https://img.shields.io/npm/v/@markusvankempen/quantum-openqasm-mcp.svg)](https://www.npmjs.com/package/@markusvankempen/quantum-openqasm-mcp)
11
12
  [![npm downloads](https://img.shields.io/npm/dm/@markusvankempen/quantum-openqasm-mcp.svg)](https://www.npmjs.com/package/@markusvankempen/quantum-openqasm-mcp)
12
13
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -62,6 +63,27 @@ npx @markusvankempen/quantum-openqasm-mcp
62
63
 
63
64
  Requires **Node.js 18 or newer**.
64
65
 
66
+ ### Interactive setup
67
+
68
+ ```bash
69
+ npx @markusvankempen/quantum-openqasm-mcp --setup
70
+ ```
71
+
72
+ Wizard options:
73
+ - **(a)** Write VS Code `mcp.json` with `${input:...}` prompts (recommended — secure)
74
+ - **(b)** Write `mcp.json` with env vars + `.env` file
75
+ - **(c)** `.env` only (for Cursor / npx)
76
+
77
+ ### Quick credential check
78
+
79
+ ```bash
80
+ npx @markusvankempen/quantum-openqasm-mcp --check
81
+ ```
82
+
83
+ Masks values, tests IBM IAM, exits 0 when ready.
84
+
85
+ The server **fails fast at startup** if `IBM_API_KEY` or `IBM_SERVICE_CRN` are missing (stderr shows setup guidance).
86
+
65
87
  ---
66
88
 
67
89
  ## Credentials
@@ -116,7 +138,7 @@ With a global install:
116
138
  }
117
139
  ```
118
140
 
119
- ### VS Code native MCP
141
+ ### VS Code native MCP (recommended — prompts on first use)
120
142
 
121
143
  ```json
122
144
  {
@@ -126,14 +148,31 @@ With a global install:
126
148
  "command": "npx",
127
149
  "args": ["-y", "@markusvankempen/quantum-openqasm-mcp"],
128
150
  "env": {
129
- "IBM_API_KEY": "your_key",
130
- "IBM_SERVICE_CRN": "your_crn"
151
+ "IBM_API_KEY": "${input:ibmApiKey}",
152
+ "IBM_SERVICE_CRN": "${input:ibmServiceCrn}",
153
+ "IBM_QUANTUM_ENDPOINT": "https://us-east.quantum-computing.cloud.ibm.com",
154
+ "IBM_QUANTUM_BACKEND": "ibm_fez"
131
155
  }
132
156
  }
133
- }
157
+ },
158
+ "inputs": [
159
+ {
160
+ "id": "ibmApiKey",
161
+ "type": "promptString",
162
+ "description": "IBM Cloud API Key (quantum.ibm.com → Account → API keys)",
163
+ "password": true
164
+ },
165
+ {
166
+ "id": "ibmServiceCrn",
167
+ "type": "promptString",
168
+ "description": "IBM Quantum Instance CRN (crn:v1:bluemix:public:quantum-computing:...)"
169
+ }
170
+ ]
134
171
  }
135
172
  ```
136
173
 
174
+ VS Code stores prompted values securely — no secrets in the config file.
175
+
137
176
  ### Bob & Antigravity
138
177
 
139
178
  Use the same stdio block as Cursor. The [Quantum OpenQASM Assistant](https://github.com/markusvankempen/quantum-openqasm-assistant) extension can register this server in all supported IDEs with **Quantum: Setup MCP**.
@@ -142,10 +181,11 @@ More detail: [Local MCP setup guide](https://github.com/markusvankempen/quantum-
142
181
 
143
182
  ---
144
183
 
145
- ## MCP tools (9)
184
+ ## MCP tools (10)
146
185
 
147
186
  | Tool | Description |
148
187
  |------|-------------|
188
+ | `check_credentials` | Masked env var status + IBM IAM connectivity test |
149
189
  | `list_backends` | List IBM Quantum backends — qubits, status, queue length |
150
190
  | `get_backend` | Details for one backend |
151
191
  | `get_backend_configuration` | Native gates and coupling map (ISA prep) |
@@ -158,6 +198,7 @@ More detail: [Local MCP setup guide](https://github.com/markusvankempen/quantum-
158
198
 
159
199
  ### Example AI prompts
160
200
 
201
+ - *"Call check_credentials first to verify IBM Quantum setup."*
161
202
  - *"Use quantum-openqasm-mcp list_backends and pick the shortest queue."*
162
203
  - *"Submit this Bell-state OpenQASM circuit on ibm_fez with submit_qasm_job."*
163
204
  - *"Poll get_job_status for job d8jftsk2upec739ngh4g until it completes, then show the histogram."*
@@ -190,18 +231,18 @@ The server listens on **stdio** — suitable for MCP hosts that spawn child proc
190
231
 
191
232
  ---
192
233
 
193
- ## Publish to npm
194
-
195
- Maintainers:
234
+ ## Publish (maintainers)
196
235
 
197
236
  ```bash
198
237
  cd packages/quantum-openqasm-mcp
199
238
  npm install
200
- npm run pack:check # dry-run: lists files that would ship
201
- npm login
202
- npm publish --access public
239
+ npm run pack:check # dry-run npm tarball
240
+ npm publish --access public # npm first
241
+ npm run publish:mcp # MCP Registry (requires: brew install mcp-publisher && mcp-publisher login github)
203
242
  ```
204
243
 
244
+ Bump `version` in `package.json` and `server.json` together before each release.
245
+
205
246
  ---
206
247
 
207
248
  ## Related projects
package/dist/cli.js CHANGED
@@ -1,8 +1,22 @@
1
1
  #!/usr/bin/env node
2
+ import { formatCheckOutput } from './credentials.js';
2
3
  import { loadEnvFiles } from './env.js';
4
+ import { runSetupWizard } from './setup.js';
3
5
  import { startQuantumMcpServer } from './server.js';
4
- loadEnvFiles();
5
- startQuantumMcpServer().catch((err) => {
6
+ async function main() {
7
+ loadEnvFiles();
8
+ if (process.argv.includes('--setup')) {
9
+ await runSetupWizard();
10
+ return;
11
+ }
12
+ if (process.argv.includes('--check')) {
13
+ const { text, exitCode } = await formatCheckOutput();
14
+ console.log(text);
15
+ process.exit(exitCode);
16
+ }
17
+ await startQuantumMcpServer();
18
+ }
19
+ main().catch((err) => {
6
20
  console.error('quantum-openqasm-mcp failed to start:', err);
7
21
  process.exit(1);
8
22
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,YAAY,EAAE,CAAC;AACf,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClC,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,KAAK,UAAU,IAAI;IACf,YAAY,EAAE,CAAC;IAEf,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,cAAc,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,qBAAqB,EAAE,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { QuantumEnv } from './env.js';
2
+ export declare function getMissingRequiredVars(): string[];
3
+ export declare function maskSecret(value: string): string;
4
+ export declare function formatSetupBanner(missing: string[]): string;
5
+ export declare function assertCredentialsAtStartup(): void;
6
+ export declare function testIamToken(apiKey: string): Promise<boolean>;
7
+ export declare function formatCredentialToolError(missing: string[]): string;
8
+ export declare function isCredentialError(error: unknown): boolean;
9
+ export declare function formatCheckOutput(): Promise<{
10
+ text: string;
11
+ exitCode: number;
12
+ }>;
13
+ export declare function formatCredentialStatus(missing: string[], env: QuantumEnv | null, iamOk: boolean): string;
14
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CASjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAoB3D;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAMjD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBnE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CASnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BrF;AAED,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,UAAU,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GACf,MAAM,CA0BR"}
@@ -0,0 +1,133 @@
1
+ import axios from 'axios';
2
+ export function getMissingRequiredVars() {
3
+ const missing = [];
4
+ if (!process.env.IBM_API_KEY) {
5
+ missing.push('IBM_API_KEY');
6
+ }
7
+ if (!process.env.IBM_SERVICE_CRN) {
8
+ missing.push('IBM_SERVICE_CRN');
9
+ }
10
+ return missing;
11
+ }
12
+ export function maskSecret(value) {
13
+ if (value.length <= 8) {
14
+ return '***';
15
+ }
16
+ return `${value.slice(0, 4)}...${value.slice(-4)}`;
17
+ }
18
+ export function formatSetupBanner(missing) {
19
+ return [
20
+ '╔══════════════════════════════════════════════════════════╗',
21
+ '║ quantum-openqasm-mcp — SETUP REQUIRED ║',
22
+ '╠══════════════════════════════════════════════════════════╣',
23
+ `║ Missing environment variables: ${missing.join(', ')}`,
24
+ '║',
25
+ '║ Fix one of these:',
26
+ '║',
27
+ '║ 1. Set in mcp.json "env" block:',
28
+ '║ "IBM_API_KEY": "your_key"',
29
+ '║ "IBM_SERVICE_CRN": "crn:v1:..."',
30
+ '║',
31
+ '║ 2. Create ~/.quantum-openqasm-mcp/.env with those keys',
32
+ '║',
33
+ '║ 3. Run: npx @markusvankempen/quantum-openqasm-mcp --setup',
34
+ '║',
35
+ '║ Get keys: https://quantum.ibm.com → Account → API keys',
36
+ '╚══════════════════════════════════════════════════════════╝',
37
+ ].join('\n');
38
+ }
39
+ export function assertCredentialsAtStartup() {
40
+ const missing = getMissingRequiredVars();
41
+ if (missing.length > 0) {
42
+ console.error(formatSetupBanner(missing));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ export async function testIamToken(apiKey) {
47
+ try {
48
+ await axios.post('https://iam.cloud.ibm.com/identity/token', new URLSearchParams({
49
+ grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
50
+ apikey: apiKey,
51
+ }), {
52
+ headers: {
53
+ 'Content-Type': 'application/x-www-form-urlencoded',
54
+ Accept: 'application/json',
55
+ },
56
+ timeout: 15000,
57
+ });
58
+ return true;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ export function formatCredentialToolError(missing) {
65
+ const vars = missing.join(', ');
66
+ return [
67
+ `Error: ${vars} missing.`,
68
+ 'Run: quantum-openqasm-mcp --setup',
69
+ 'Or add credentials to mcp.json env block.',
70
+ 'Or create ~/.quantum-openqasm-mcp/.env',
71
+ 'Get keys: https://quantum.ibm.com → Account → API keys',
72
+ ].join('\n');
73
+ }
74
+ export function isCredentialError(error) {
75
+ if (!(error instanceof Error)) {
76
+ return false;
77
+ }
78
+ return /IBM_API_KEY|IBM_SERVICE_CRN|missing\. Set in mcp\.json/.test(error.message);
79
+ }
80
+ export async function formatCheckOutput() {
81
+ const missing = getMissingRequiredVars();
82
+ const env = missing.length === 0
83
+ ? {
84
+ apiKey: process.env.IBM_API_KEY,
85
+ crn: process.env.IBM_SERVICE_CRN,
86
+ endpoint: process.env.IBM_QUANTUM_ENDPOINT || '(default us-east)',
87
+ backend: process.env.IBM_QUANTUM_BACKEND || 'ibm_fez',
88
+ }
89
+ : null;
90
+ const iamOk = env ? await testIamToken(env.apiKey) : false;
91
+ const ok = (label, value, pass) => `${label.padEnd(22)} ${value.padEnd(20)} ${pass ? '✅' : '❌'}`;
92
+ const lines = [
93
+ ok('IBM_API_KEY:', process.env.IBM_API_KEY ? maskSecret(process.env.IBM_API_KEY) : '(not set)', !missing.includes('IBM_API_KEY')),
94
+ ok('IBM_SERVICE_CRN:', process.env.IBM_SERVICE_CRN ? maskSecret(process.env.IBM_SERVICE_CRN) : '(not set)', !missing.includes('IBM_SERVICE_CRN')),
95
+ ok('IBM_QUANTUM_ENDPOINT:', process.env.IBM_QUANTUM_ENDPOINT || 'https://us-east.quantum-computing.cloud.ibm.com', true),
96
+ ok('IBM IAM token:', iamOk ? 'OK' : (env ? 'FAILED' : 'skipped'), env ? iamOk : false),
97
+ ];
98
+ const ready = missing.length === 0 && iamOk;
99
+ if (ready) {
100
+ lines.push('', 'quantum-openqasm-mcp is ready.');
101
+ }
102
+ else {
103
+ lines.push('', 'Not ready. Run: quantum-openqasm-mcp --setup');
104
+ }
105
+ return { text: lines.join('\n'), exitCode: ready ? 0 : 1 };
106
+ }
107
+ export function formatCredentialStatus(missing, env, iamOk) {
108
+ const lines = ['IBM Quantum credential check', ''];
109
+ if (missing.length > 0) {
110
+ lines.push(`Missing required: ${missing.join(', ')}`);
111
+ }
112
+ else {
113
+ lines.push('Required variables: OK');
114
+ }
115
+ lines.push('');
116
+ lines.push('Configured:');
117
+ lines.push(` IBM_API_KEY: ${process.env.IBM_API_KEY ? maskSecret(process.env.IBM_API_KEY) : '(not set)'}`);
118
+ lines.push(` IBM_SERVICE_CRN: ${process.env.IBM_SERVICE_CRN ? maskSecret(process.env.IBM_SERVICE_CRN) : '(not set)'}`);
119
+ lines.push(` IBM_QUANTUM_ENDPOINT: ${process.env.IBM_QUANTUM_ENDPOINT || '(default us-east)'}`);
120
+ lines.push(` IBM_QUANTUM_BACKEND: ${process.env.IBM_QUANTUM_BACKEND || 'ibm_fez (default)'}`);
121
+ lines.push('');
122
+ if (!env) {
123
+ lines.push('IBM IAM token test: skipped (credentials incomplete)');
124
+ }
125
+ else if (iamOk) {
126
+ lines.push('IBM IAM token test: OK');
127
+ }
128
+ else {
129
+ lines.push('IBM IAM token test: FAILED (check IBM_API_KEY)');
130
+ }
131
+ return lines.join('\n');
132
+ }
133
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,sBAAsB;IAClC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAiB;IAC/C,OAAO;QACH,8DAA8D;QAC9D,6DAA6D;QAC7D,8DAA8D;QAC9D,qCAAqC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACzD,GAAG;QACH,sBAAsB;QACtB,GAAG;QACH,oCAAoC;QACpC,mCAAmC;QACnC,yCAAyC;QACzC,GAAG;QACH,2DAA2D;QAC3D,GAAG;QACH,+DAA+D;QAC/D,GAAG;QACH,2DAA2D;QAC3D,8DAA8D;KACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACtC,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC7C,IAAI,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CACZ,0CAA0C,EAC1C,IAAI,eAAe,CAAC;YAChB,UAAU,EAAE,wCAAwC;YACpD,MAAM,EAAE,MAAM;SACjB,CAAC,EACF;YACI,OAAO,EAAE;gBACL,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,kBAAkB;aAC7B;YACD,OAAO,EAAE,KAAK;SACjB,CACJ,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAiB;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO;QACH,UAAU,IAAI,WAAW;QACzB,mCAAmC;QACnC,2CAA2C;QAC3C,wCAAwC;QACxC,wDAAwD;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC5C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,wDAAwD,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC;QAC5B,CAAC,CAAC;YACI,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAY;YAChC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAgB;YACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,mBAAmB;YACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;SACxD;QACH,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE3D,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,IAAa,EAAE,EAAE,CACvD,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAElE,MAAM,KAAK,GAAG;QACV,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjI,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACjJ,EAAE,CAAC,uBAAuB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,iDAAiD,EAAE,IAAI,CAAC;QACxH,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;KACzF,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC;IAC5C,IAAI,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gCAAgC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,OAAiB,EACjB,GAAsB,EACtB,KAAc;IAEd,MAAM,KAAK,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5G,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,mBAAmB,EAAE,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAE/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
package/dist/env.d.ts CHANGED
@@ -6,5 +6,7 @@ export interface QuantumEnv {
6
6
  }
7
7
  /** Load .env from cwd, then ~/.quantum-openqasm-mcp/.env (legacy: ~/.quantum-mcp/.env). */
8
8
  export declare function loadEnvFiles(): void;
9
+ /** Returns env when required vars are set; otherwise null (no throw). */
10
+ export declare function safeRequireEnv(): QuantumEnv | null;
9
11
  export declare function requireEnv(): QuantumEnv;
10
12
  //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAID,2FAA2F;AAC3F,wBAAgB,YAAY,IAAI,IAAI,CAWnC;AAED,wBAAgB,UAAU,IAAI,UAAU,CAmBvC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAID,2FAA2F;AAC3F,wBAAgB,YAAY,IAAI,IAAI,CAWnC;AAED,yEAAyE;AACzE,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAUlD;AAED,wBAAgB,UAAU,IAAI,UAAU,CASvC"}
package/dist/env.js CHANGED
@@ -2,6 +2,7 @@ import fs from 'fs';
2
2
  import os from 'os';
3
3
  import path from 'path';
4
4
  import { config as loadDotenv } from 'dotenv';
5
+ import { getMissingRequiredVars } from './credentials.js';
5
6
  const DEFAULT_ENDPOINT = 'https://us-east.quantum-computing.cloud.ibm.com';
6
7
  /** Load .env from cwd, then ~/.quantum-openqasm-mcp/.env (legacy: ~/.quantum-mcp/.env). */
7
8
  export function loadEnvFiles() {
@@ -16,20 +17,24 @@ export function loadEnvFiles() {
16
17
  }
17
18
  }
18
19
  }
19
- export function requireEnv() {
20
- const apiKey = process.env.IBM_API_KEY;
21
- if (!apiKey) {
22
- throw new Error('IBM_API_KEY missing. Set it in the environment or in .env / ~/.quantum-openqasm-mcp/.env');
23
- }
24
- const crn = process.env.IBM_SERVICE_CRN;
25
- if (!crn) {
26
- throw new Error('IBM_SERVICE_CRN missing. Set it in the environment or in .env / ~/.quantum-openqasm-mcp/.env');
20
+ /** Returns env when required vars are set; otherwise null (no throw). */
21
+ export function safeRequireEnv() {
22
+ if (getMissingRequiredVars().length > 0) {
23
+ return null;
27
24
  }
28
25
  return {
29
- apiKey,
30
- crn,
26
+ apiKey: process.env.IBM_API_KEY,
27
+ crn: process.env.IBM_SERVICE_CRN,
31
28
  endpoint: (process.env.IBM_QUANTUM_ENDPOINT || DEFAULT_ENDPOINT).replace(/\/$/, ''),
32
29
  defaultBackend: process.env.IBM_QUANTUM_BACKEND || 'ibm_fez',
33
30
  };
34
31
  }
32
+ export function requireEnv() {
33
+ const env = safeRequireEnv();
34
+ if (!env) {
35
+ const missing = getMissingRequiredVars().join(', ');
36
+ throw new Error(`${missing} missing. Set in mcp.json env, ~/.quantum-openqasm-mcp/.env, or run --setup`);
37
+ }
38
+ return env;
39
+ }
35
40
  //# sourceMappingURL=env.js.map
package/dist/env.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAS9C,MAAM,gBAAgB,GAAG,iDAAiD,CAAC;AAE3E,2FAA2F;AAC3F,MAAM,UAAU,YAAY;IACxB,MAAM,UAAU,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAuB,EAAE,MAAM,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC;KAClD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACX,0FAA0F,CAC7F,CAAC;IACN,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACX,8FAA8F,CACjG,CAAC;IACN,CAAC;IACD,OAAO;QACH,MAAM;QACN,GAAG;QACH,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnF,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;KAC/D,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAS1D,MAAM,gBAAgB,GAAG,iDAAiD,CAAC;AAE3E,2FAA2F;AAC3F,MAAM,UAAU,YAAY;IACxB,MAAM,UAAU,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAuB,EAAE,MAAM,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC;KAClD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;AACL,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc;IAC1B,IAAI,sBAAsB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAY;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAgB;QACjC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnF,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;KAC/D,CAAC;AACN,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACX,GAAG,OAAO,6EAA6E,CAC1F,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- export { loadEnvFiles, requireEnv, type QuantumEnv } from './env.js';
1
+ export { loadEnvFiles, requireEnv, safeRequireEnv, type QuantumEnv } from './env.js';
2
+ export { assertCredentialsAtStartup, formatCheckOutput, formatCredentialStatus, formatCredentialToolError, getMissingRequiredVars, testIamToken, } from './credentials.js';
3
+ export { buildVsCodeInputsConfig, getVsCodeUserMcpPath, isGlobalPackageInstalled, mergeVsCodeMcpConfig, } from './mcp-config.js';
4
+ export { runSetupWizard } from './setup.js';
2
5
  export { createQuantumMcpServer, startQuantumMcpServer, SERVER_NAME, SERVER_VERSION, } from './server.js';
3
6
  export { fetchBackendList, formatBackendList, formatBackendLine, parseBackendListResponse, type NormalizedBackend, } from './backend-utils.js';
4
7
  export { parseMeasurementResults, parseResultPayload, formatCountsHistogram, type MeasurementResult, } from './result-utils.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,iBAAiB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,iBAAiB,GACzB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EACH,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,iBAAiB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,iBAAiB,GACzB,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
- export { loadEnvFiles, requireEnv } from './env.js';
1
+ export { loadEnvFiles, requireEnv, safeRequireEnv } from './env.js';
2
+ export { assertCredentialsAtStartup, formatCheckOutput, formatCredentialStatus, formatCredentialToolError, getMissingRequiredVars, testIamToken, } from './credentials.js';
3
+ export { buildVsCodeInputsConfig, getVsCodeUserMcpPath, isGlobalPackageInstalled, mergeVsCodeMcpConfig, } from './mcp-config.js';
4
+ export { runSetupWizard } from './setup.js';
2
5
  export { createQuantumMcpServer, startQuantumMcpServer, SERVER_NAME, SERVER_VERSION, } from './server.js';
3
6
  export { fetchBackendList, formatBackendList, formatBackendLine, parseBackendListResponse, } from './backend-utils.js';
4
7
  export { parseMeasurementResults, parseResultPayload, formatCountsHistogram, } from './result-utils.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;AACrE,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GAE3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GAExB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AACrF,OAAO,EACH,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GAE3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GAExB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const NPM_PACKAGE = "@markusvankempen/quantum-openqasm-mcp";
2
+ export declare const SERVER_NAME = "quantum-openqasm-mcp";
3
+ export declare const DEFAULT_ENDPOINT = "https://us-east.quantum-computing.cloud.ibm.com";
4
+ export declare const DEFAULT_BACKEND = "ibm_fez";
5
+ export type McpOutputMode = 'inputs' | 'hardcoded' | 'env-only';
6
+ export declare function getVsCodeUserMcpPath(): string;
7
+ export declare function isGlobalPackageInstalled(): boolean;
8
+ export declare function buildNpmCommand(useGlobal: boolean): {
9
+ command: string;
10
+ args: string[];
11
+ };
12
+ export declare function buildVsCodeInputsConfig(endpoint?: string, backend?: string, useGlobal?: boolean): Record<string, unknown>;
13
+ export declare function buildVsCodeHardcodedConfig(creds: {
14
+ apiKey: string;
15
+ serviceCrn: string;
16
+ endpoint: string;
17
+ backend: string;
18
+ }, useGlobal?: boolean): Record<string, unknown>;
19
+ export declare function mergeVsCodeMcpConfig(filePath: string, patch: Record<string, unknown>): void;
20
+ //# sourceMappingURL=mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,gBAAgB,oDAAoD,CAAC;AAClF,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEhE,wBAAgB,oBAAoB,IAAI,MAAM,CAe7C;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAWlD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAKvF;AAED,wBAAgB,uBAAuB,CACnC,QAAQ,SAAmB,EAC3B,OAAO,SAAkB,EACzB,SAAS,UAA6B,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAED,wBAAgB,0BAA0B,CACtC,KAAK,EAAE;IACH,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB,EACD,SAAS,UAA6B,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAwBN"}
@@ -0,0 +1,110 @@
1
+ import { execSync } from 'child_process';
2
+ import fs from 'fs';
3
+ import os from 'os';
4
+ import path from 'path';
5
+ export const NPM_PACKAGE = '@markusvankempen/quantum-openqasm-mcp';
6
+ export const SERVER_NAME = 'quantum-openqasm-mcp';
7
+ export const DEFAULT_ENDPOINT = 'https://us-east.quantum-computing.cloud.ibm.com';
8
+ export const DEFAULT_BACKEND = 'ibm_fez';
9
+ export function getVsCodeUserMcpPath() {
10
+ const home = os.homedir();
11
+ switch (process.platform) {
12
+ case 'darwin':
13
+ return path.join(home, 'Library', 'Application Support', 'Code', 'User', 'mcp.json');
14
+ case 'win32':
15
+ return path.join(process.env.APPDATA || path.join(home, 'AppData', 'Roaming'), 'Code', 'User', 'mcp.json');
16
+ default:
17
+ return path.join(home, '.config', 'Code', 'User', 'mcp.json');
18
+ }
19
+ }
20
+ export function isGlobalPackageInstalled() {
21
+ try {
22
+ const prefix = execSync('npm prefix -g', { encoding: 'utf8' }).trim();
23
+ const candidates = [
24
+ path.join(prefix, 'lib', 'node_modules', NPM_PACKAGE, 'package.json'),
25
+ path.join(prefix, 'node_modules', NPM_PACKAGE, 'package.json'),
26
+ ];
27
+ return candidates.some((p) => fs.existsSync(p));
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ export function buildNpmCommand(useGlobal) {
34
+ if (useGlobal && isGlobalPackageInstalled()) {
35
+ return { command: 'quantum-openqasm-mcp', args: [] };
36
+ }
37
+ return { command: 'npx', args: ['-y', NPM_PACKAGE] };
38
+ }
39
+ export function buildVsCodeInputsConfig(endpoint = DEFAULT_ENDPOINT, backend = DEFAULT_BACKEND, useGlobal = isGlobalPackageInstalled()) {
40
+ const { command, args } = buildNpmCommand(useGlobal);
41
+ return {
42
+ servers: {
43
+ [SERVER_NAME]: {
44
+ type: 'stdio',
45
+ command,
46
+ args,
47
+ env: {
48
+ IBM_API_KEY: '${input:ibmApiKey}',
49
+ IBM_SERVICE_CRN: '${input:ibmServiceCrn}',
50
+ IBM_QUANTUM_ENDPOINT: endpoint,
51
+ IBM_QUANTUM_BACKEND: backend,
52
+ },
53
+ },
54
+ },
55
+ inputs: [
56
+ {
57
+ id: 'ibmApiKey',
58
+ type: 'promptString',
59
+ description: 'IBM Cloud API Key (quantum.ibm.com → Account → API keys)',
60
+ password: true,
61
+ },
62
+ {
63
+ id: 'ibmServiceCrn',
64
+ type: 'promptString',
65
+ description: 'IBM Quantum Instance CRN (crn:v1:bluemix:public:quantum-computing:...)',
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ export function buildVsCodeHardcodedConfig(creds, useGlobal = isGlobalPackageInstalled()) {
71
+ const { command, args } = buildNpmCommand(useGlobal);
72
+ return {
73
+ servers: {
74
+ [SERVER_NAME]: {
75
+ type: 'stdio',
76
+ command,
77
+ args,
78
+ env: {
79
+ IBM_API_KEY: creds.apiKey,
80
+ IBM_SERVICE_CRN: creds.serviceCrn,
81
+ IBM_QUANTUM_ENDPOINT: creds.endpoint,
82
+ IBM_QUANTUM_BACKEND: creds.backend,
83
+ },
84
+ },
85
+ },
86
+ };
87
+ }
88
+ export function mergeVsCodeMcpConfig(filePath, patch) {
89
+ let config = {};
90
+ if (fs.existsSync(filePath)) {
91
+ config = JSON.parse(fs.readFileSync(filePath, 'utf8'));
92
+ }
93
+ const servers = config.servers ?? {};
94
+ const patchServers = patch.servers ?? {};
95
+ config.servers = { ...servers, ...patchServers };
96
+ if (patch.inputs) {
97
+ const existing = config.inputs ?? [];
98
+ const patchInputs = patch.inputs;
99
+ const byId = new Map();
100
+ for (const item of [...existing, ...patchInputs]) {
101
+ if (typeof item === 'object' && item !== null && 'id' in item && typeof item.id === 'string') {
102
+ byId.set(item.id, item);
103
+ }
104
+ }
105
+ config.inputs = [...byId.values()];
106
+ }
107
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
108
+ fs.writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n', 'utf8');
109
+ }
110
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../src/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=postinstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { readFileSync } from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const dir = path.dirname(fileURLToPath(import.meta.url));
5
+ const pkg = JSON.parse(readFileSync(path.join(dir, '..', 'package.json'), 'utf8'));
6
+ console.log(`
7
+ ✅ ${pkg.name}@${pkg.version} installed
8
+
9
+ Next step — configure your IBM Quantum credentials:
10
+
11
+ quantum-openqasm-mcp --setup
12
+ quantum-openqasm-mcp --check
13
+
14
+ Or set IBM_API_KEY + IBM_SERVICE_CRN in mcp.json env block.
15
+ Get keys: https://quantum.ibm.com → Account → API keys
16
+ `.trim());
17
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAGhF,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC;IACR,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO;;;;;;;;;CAS1B,CAAC,IAAI,EAAE,CAAC,CAAC"}
package/dist/server.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
5
  export declare const SERVER_NAME = "quantum-openqasm-mcp";
6
- export declare const SERVER_VERSION = "1.7.0";
6
+ export declare const SERVER_VERSION = "1.7.2";
7
7
  export declare function createQuantumMcpServer(): Server;
8
8
  /** Start the MCP server on stdio (for Cursor, VS Code, Claude Desktop, etc.). */
9
9
  export declare function startQuantumMcpServer(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,cAAc,UAAU,CAAC;AAqKtC,wBAAgB,sBAAsB,IAAI,MAAM,CAqJ/C;AAED,iFAAiF;AACjF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAgBnE,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,cAAc,UAAU,CAAC;AAqKtC,wBAAgB,sBAAsB,IAAI,MAAM,CAsK/C;AAED,iFAAiF;AACjF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D"}
package/dist/server.js CHANGED
@@ -6,10 +6,11 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
6
6
  import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
7
7
  import axios from 'axios';
8
8
  import { fetchBackendList, formatBackendList } from './backend-utils.js';
9
- import { requireEnv } from './env.js';
9
+ import { assertCredentialsAtStartup, formatCredentialStatus, formatCredentialToolError, getMissingRequiredVars, isCredentialError, testIamToken, } from './credentials.js';
10
+ import { requireEnv, safeRequireEnv } from './env.js';
10
11
  import { formatCountsHistogram, parseMeasurementResults } from './result-utils.js';
11
12
  export const SERVER_NAME = 'quantum-openqasm-mcp';
12
- export const SERVER_VERSION = '1.7.0';
13
+ export const SERVER_VERSION = '1.7.2';
13
14
  const API_VERSION = '2023-11-16';
14
15
  let cachedToken = null;
15
16
  let tokenExpiry = 0;
@@ -241,12 +242,24 @@ export function createQuantumMcpServer() {
241
242
  required: ['job_id'],
242
243
  },
243
244
  },
245
+ {
246
+ name: 'check_credentials',
247
+ description: 'Check which IBM Quantum env vars are set (masked) and test IBM IAM connectivity.',
248
+ inputSchema: { type: 'object', properties: {} },
249
+ },
244
250
  ],
245
251
  }));
246
252
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
247
253
  const name = request.params.name;
248
254
  const args = request.params.arguments ?? {};
249
255
  try {
256
+ if (name === 'check_credentials') {
257
+ const missing = getMissingRequiredVars();
258
+ const env = safeRequireEnv();
259
+ const iamOk = env ? await testIamToken(env.apiKey) : false;
260
+ const isError = missing.length > 0 || (env !== null && !iamOk);
261
+ return textResult(formatCredentialStatus(missing, env, iamOk), isError);
262
+ }
250
263
  const env = requireEnv();
251
264
  switch (name) {
252
265
  case 'list_backends':
@@ -286,6 +299,10 @@ export function createQuantumMcpServer() {
286
299
  }
287
300
  }
288
301
  catch (error) {
302
+ const missing = getMissingRequiredVars();
303
+ if (missing.length > 0 || isCredentialError(error)) {
304
+ return textResult(formatCredentialToolError(missing.length > 0 ? missing : ['IBM_API_KEY', 'IBM_SERVICE_CRN']), true);
305
+ }
289
306
  return textResult(`Error: ${extractApiError(error)}`, true);
290
307
  }
291
308
  });
@@ -293,6 +310,7 @@ export function createQuantumMcpServer() {
293
310
  }
294
311
  /** Start the MCP server on stdio (for Cursor, VS Code, Claude Desktop, etc.). */
295
312
  export async function startQuantumMcpServer() {
313
+ assertCredentialsAtStartup();
296
314
  const server = createQuantumMcpServer();
297
315
  const transport = new StdioServerTransport();
298
316
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Interactive setup: prompts, validates IAM, writes .env and/or VS Code mcp.json */
2
+ export declare function runSetupWizard(): Promise<void>;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AA4DA,qFAAqF;AACrF,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA2EpD"}
package/dist/setup.js ADDED
@@ -0,0 +1,108 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import * as readline from 'readline/promises';
5
+ import { stdin as input, stdout as output } from 'process';
6
+ import { testIamToken } from './credentials.js';
7
+ import { buildVsCodeHardcodedConfig, buildVsCodeInputsConfig, getVsCodeUserMcpPath, isGlobalPackageInstalled, mergeVsCodeMcpConfig, } from './mcp-config.js';
8
+ const ENV_DIR = path.join(os.homedir(), '.quantum-openqasm-mcp');
9
+ const ENV_FILE = path.join(ENV_DIR, '.env');
10
+ const DEFAULT_ENDPOINT = 'https://us-east.quantum-computing.cloud.ibm.com';
11
+ async function prompt(rl, label, defaultValue = '') {
12
+ const suffix = defaultValue ? ` [${defaultValue}]` : '';
13
+ const answer = (await rl.question(`${label}${suffix}: `)).trim();
14
+ return answer || defaultValue;
15
+ }
16
+ async function promptSecret(rl, label) {
17
+ return (await rl.question(`${label}: `)).trim();
18
+ }
19
+ async function promptOutputMode(rl) {
20
+ console.log('\nOutput options:');
21
+ console.log(' (a) mcp.json with VS Code inputs prompts (recommended — secure)');
22
+ console.log(' (b) mcp.json with hardcoded env vars');
23
+ console.log(' (c) .env only (for Cursor / npx without VS Code prompts)');
24
+ const choice = (await rl.question('Choose [a/b/c] (default a): ')).trim().toLowerCase();
25
+ if (choice === 'b') {
26
+ return 'hardcoded';
27
+ }
28
+ if (choice === 'c') {
29
+ return 'env-only';
30
+ }
31
+ return 'inputs';
32
+ }
33
+ function buildEnvContent(values) {
34
+ return [
35
+ '# quantum-openqasm-mcp credentials (generated by --setup)',
36
+ `IBM_API_KEY=${values.IBM_API_KEY}`,
37
+ `IBM_SERVICE_CRN=${values.IBM_SERVICE_CRN}`,
38
+ `IBM_QUANTUM_ENDPOINT=${values.IBM_QUANTUM_ENDPOINT}`,
39
+ `IBM_QUANTUM_BACKEND=${values.IBM_QUANTUM_BACKEND}`,
40
+ '',
41
+ ].join('\n');
42
+ }
43
+ function writeEnvFile(values) {
44
+ fs.mkdirSync(ENV_DIR, { recursive: true });
45
+ fs.writeFileSync(ENV_FILE, buildEnvContent(values), { mode: 0o600 });
46
+ }
47
+ /** Interactive setup: prompts, validates IAM, writes .env and/or VS Code mcp.json */
48
+ export async function runSetupWizard() {
49
+ const rl = readline.createInterface({ input, output });
50
+ try {
51
+ console.log('Quantum OpenQASM MCP — setup wizard\n');
52
+ if (!isGlobalPackageInstalled()) {
53
+ console.log('Tip: npm install -g @markusvankempen/quantum-openqasm-mcp for a shorter mcp.json command.\n');
54
+ }
55
+ const outputMode = await promptOutputMode(rl);
56
+ const apiKey = await promptSecret(rl, 'IBM_API_KEY');
57
+ if (!apiKey) {
58
+ console.error('IBM_API_KEY is required.');
59
+ process.exit(1);
60
+ }
61
+ console.log('Validating IBM API key against IAM...');
62
+ if (!(await testIamToken(apiKey))) {
63
+ console.error('IBM IAM validation failed. Check your API key and try again.');
64
+ process.exit(1);
65
+ }
66
+ console.log('IBM API key: OK\n');
67
+ const crn = await promptSecret(rl, 'IBM_SERVICE_CRN');
68
+ if (!crn) {
69
+ console.error('IBM_SERVICE_CRN is required.');
70
+ process.exit(1);
71
+ }
72
+ const endpoint = await prompt(rl, 'IBM_QUANTUM_ENDPOINT', DEFAULT_ENDPOINT);
73
+ const backend = await prompt(rl, 'IBM_QUANTUM_BACKEND', 'ibm_fez');
74
+ const creds = {
75
+ IBM_API_KEY: apiKey,
76
+ IBM_SERVICE_CRN: crn,
77
+ IBM_QUANTUM_ENDPOINT: endpoint,
78
+ IBM_QUANTUM_BACKEND: backend,
79
+ };
80
+ if (outputMode === 'env-only' || outputMode === 'hardcoded') {
81
+ writeEnvFile(creds);
82
+ console.log(`\nWrote ${ENV_FILE}`);
83
+ }
84
+ if (outputMode === 'inputs' || outputMode === 'hardcoded') {
85
+ const mcpPath = getVsCodeUserMcpPath();
86
+ const patch = outputMode === 'inputs'
87
+ ? buildVsCodeInputsConfig(endpoint, backend)
88
+ : buildVsCodeHardcodedConfig({
89
+ apiKey,
90
+ serviceCrn: crn,
91
+ endpoint,
92
+ backend,
93
+ });
94
+ mergeVsCodeMcpConfig(mcpPath, patch);
95
+ console.log(`Wrote VS Code MCP config: ${mcpPath}`);
96
+ console.log('Reload VS Code (Developer → Reload Window) to apply.');
97
+ }
98
+ if (outputMode === 'inputs') {
99
+ console.log('\nVS Code will prompt for IBM_API_KEY and IBM_SERVICE_CRN on first MCP use.');
100
+ console.log('Optional: run with (c) next time to also write ~/.quantum-openqasm-mcp/.env for Cursor.');
101
+ }
102
+ console.log('\nVerify anytime: quantum-openqasm-mcp --check');
103
+ }
104
+ finally {
105
+ rl.close();
106
+ }
107
+ }
108
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@markusvankempen/quantum-openqasm-mcp",
3
3
  "mcpName": "io.github.markusvankempen/quantum-openqasm-mcp",
4
- "version": "1.7.0",
5
- "description": "IBM Quantum OpenQASM 2.0 MCP server — 9 tools to list backends, submit QASM circuits, poll jobs, and fetch measurement histograms. Works with Cursor, VS Code, Claude Desktop, Bob, Antigravity, and any MCP client via stdio or npx.",
4
+ "version": "1.7.2",
5
+ "description": "IBM Quantum OpenQASM 2.0 MCP server — 10 tools to list backends, submit QASM circuits, poll jobs, check credentials, and fetch histograms. Cursor, VS Code, Claude Desktop, Bob, Antigravity via stdio or npx.",
6
6
  "keywords": [
7
7
  "mcp",
8
8
  "mcp-server",
@@ -99,8 +99,10 @@
99
99
  "build": "tsc -p tsconfig.json",
100
100
  "dev": "tsc -p tsconfig.json --watch",
101
101
  "start": "node dist/cli.js",
102
+ "postinstall": "node dist/postinstall.js",
102
103
  "prepublishOnly": "npm run build",
103
104
  "pack:check": "npm run build && npm pack --dry-run",
105
+ "publish:mcp": "mcp-publisher publish",
104
106
  "typecheck": "tsc -p tsconfig.json --noEmit"
105
107
  },
106
108
  "dependencies": {