mcp-use-compat 0.3.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/CHANGELOG.md +23 -0
- package/LICENSE +21 -0
- package/README.md +375 -0
- package/dist/checks/auth.d.ts +2 -0
- package/dist/checks/auth.d.ts.map +1 -0
- package/dist/checks/auth.js +229 -0
- package/dist/checks/auth.js.map +1 -0
- package/dist/checks/calls.d.ts +4 -0
- package/dist/checks/calls.d.ts.map +1 -0
- package/dist/checks/calls.js +192 -0
- package/dist/checks/calls.js.map +1 -0
- package/dist/checks/discovery.d.ts +3 -0
- package/dist/checks/discovery.d.ts.map +1 -0
- package/dist/checks/discovery.js +47 -0
- package/dist/checks/discovery.js.map +1 -0
- package/dist/checks/explanations.d.ts +15 -0
- package/dist/checks/explanations.d.ts.map +1 -0
- package/dist/checks/explanations.js +346 -0
- package/dist/checks/explanations.js.map +1 -0
- package/dist/checks/index.d.ts +3 -0
- package/dist/checks/index.d.ts.map +1 -0
- package/dist/checks/index.js +23 -0
- package/dist/checks/index.js.map +1 -0
- package/dist/checks/protocol.d.ts +5 -0
- package/dist/checks/protocol.d.ts.map +1 -0
- package/dist/checks/protocol.js +380 -0
- package/dist/checks/protocol.js.map +1 -0
- package/dist/checks/resources.d.ts +10 -0
- package/dist/checks/resources.d.ts.map +1 -0
- package/dist/checks/resources.js +144 -0
- package/dist/checks/resources.js.map +1 -0
- package/dist/checks/schema.d.ts +21 -0
- package/dist/checks/schema.d.ts.map +1 -0
- package/dist/checks/schema.js +412 -0
- package/dist/checks/schema.js.map +1 -0
- package/dist/checks/sdk.d.ts +10 -0
- package/dist/checks/sdk.d.ts.map +1 -0
- package/dist/checks/sdk.js +68 -0
- package/dist/checks/sdk.js.map +1 -0
- package/dist/checks/tools.d.ts +18 -0
- package/dist/checks/tools.d.ts.map +1 -0
- package/dist/checks/tools.js +422 -0
- package/dist/checks/tools.js.map +1 -0
- package/dist/checks/transport.d.ts +2 -0
- package/dist/checks/transport.d.ts.map +1 -0
- package/dist/checks/transport.js +123 -0
- package/dist/checks/transport.js.map +1 -0
- package/dist/checks/types.d.ts +37 -0
- package/dist/checks/types.d.ts.map +1 -0
- package/dist/checks/types.js +5 -0
- package/dist/checks/types.js.map +1 -0
- package/dist/checks/ui.d.ts +2 -0
- package/dist/checks/ui.d.ts.map +1 -0
- package/dist/checks/ui.js +207 -0
- package/dist/checks/ui.js.map +1 -0
- package/dist/checks/util.d.ts +20 -0
- package/dist/checks/util.d.ts.map +1 -0
- package/dist/checks/util.js +42 -0
- package/dist/checks/util.js.map +1 -0
- package/dist/cli.d.ts +110 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +317 -0
- package/dist/cli.js.map +1 -0
- package/dist/connect/calls.d.ts +13 -0
- package/dist/connect/calls.d.ts.map +1 -0
- package/dist/connect/calls.js +130 -0
- package/dist/connect/calls.js.map +1 -0
- package/dist/connect/http.d.ts +14 -0
- package/dist/connect/http.d.ts.map +1 -0
- package/dist/connect/http.js +122 -0
- package/dist/connect/http.js.map +1 -0
- package/dist/connect/index.d.ts +41 -0
- package/dist/connect/index.d.ts.map +1 -0
- package/dist/connect/index.js +168 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connect/lists.d.ts +12 -0
- package/dist/connect/lists.d.ts.map +1 -0
- package/dist/connect/lists.js +70 -0
- package/dist/connect/lists.js.map +1 -0
- package/dist/connect/modern.d.ts +13 -0
- package/dist/connect/modern.d.ts.map +1 -0
- package/dist/connect/modern.js +169 -0
- package/dist/connect/modern.js.map +1 -0
- package/dist/connect/session.d.ts +29 -0
- package/dist/connect/session.d.ts.map +1 -0
- package/dist/connect/session.js +96 -0
- package/dist/connect/session.js.map +1 -0
- package/dist/connect/stdio.d.ts +36 -0
- package/dist/connect/stdio.d.ts.map +1 -0
- package/dist/connect/stdio.js +127 -0
- package/dist/connect/stdio.js.map +1 -0
- package/dist/diff.d.ts +23 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +255 -0
- package/dist/diff.js.map +1 -0
- package/dist/evaluate.d.ts +70 -0
- package/dist/evaluate.d.ts.map +1 -0
- package/dist/evaluate.js +104 -0
- package/dist/evaluate.js.map +1 -0
- package/dist/explain.d.ts +4 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +46 -0
- package/dist/explain.js.map +1 -0
- package/dist/fix.d.ts +19 -0
- package/dist/fix.d.ts.map +1 -0
- package/dist/fix.js +116 -0
- package/dist/fix.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +85 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +287 -0
- package/dist/oauth.js.map +1 -0
- package/dist/policy.d.ts +29 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +63 -0
- package/dist/policy.js.map +1 -0
- package/dist/profiles/chatgpt.d.ts +3 -0
- package/dist/profiles/chatgpt.d.ts.map +1 -0
- package/dist/profiles/chatgpt.js +29 -0
- package/dist/profiles/chatgpt.js.map +1 -0
- package/dist/profiles/claude-code.d.ts +3 -0
- package/dist/profiles/claude-code.d.ts.map +1 -0
- package/dist/profiles/claude-code.js +62 -0
- package/dist/profiles/claude-code.js.map +1 -0
- package/dist/profiles/claude-desktop.d.ts +3 -0
- package/dist/profiles/claude-desktop.d.ts.map +1 -0
- package/dist/profiles/claude-desktop.js +51 -0
- package/dist/profiles/claude-desktop.js.map +1 -0
- package/dist/profiles/cline.d.ts +4 -0
- package/dist/profiles/cline.d.ts.map +1 -0
- package/dist/profiles/cline.js +118 -0
- package/dist/profiles/cline.js.map +1 -0
- package/dist/profiles/codex.d.ts +4 -0
- package/dist/profiles/codex.d.ts.map +1 -0
- package/dist/profiles/codex.js +168 -0
- package/dist/profiles/codex.js.map +1 -0
- package/dist/profiles/continue.d.ts +4 -0
- package/dist/profiles/continue.d.ts.map +1 -0
- package/dist/profiles/continue.js +93 -0
- package/dist/profiles/continue.js.map +1 -0
- package/dist/profiles/cursor.d.ts +3 -0
- package/dist/profiles/cursor.d.ts.map +1 -0
- package/dist/profiles/cursor.js +52 -0
- package/dist/profiles/cursor.js.map +1 -0
- package/dist/profiles/gemini-cli.d.ts +4 -0
- package/dist/profiles/gemini-cli.d.ts.map +1 -0
- package/dist/profiles/gemini-cli.js +137 -0
- package/dist/profiles/gemini-cli.js.map +1 -0
- package/dist/profiles/goose.d.ts +4 -0
- package/dist/profiles/goose.d.ts.map +1 -0
- package/dist/profiles/goose.js +114 -0
- package/dist/profiles/goose.js.map +1 -0
- package/dist/profiles/index.d.ts +7 -0
- package/dist/profiles/index.d.ts.map +1 -0
- package/dist/profiles/index.js +43 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/opencode.d.ts +3 -0
- package/dist/profiles/opencode.d.ts.map +1 -0
- package/dist/profiles/opencode.js +47 -0
- package/dist/profiles/opencode.js.map +1 -0
- package/dist/profiles/types.d.ts +86 -0
- package/dist/profiles/types.d.ts.map +1 -0
- package/dist/profiles/types.js +2 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/profiles/vscode-copilot.d.ts +3 -0
- package/dist/profiles/vscode-copilot.d.ts.map +1 -0
- package/dist/profiles/vscode-copilot.js +71 -0
- package/dist/profiles/vscode-copilot.js.map +1 -0
- package/dist/profiles/windsurf.d.ts +4 -0
- package/dist/profiles/windsurf.d.ts.map +1 -0
- package/dist/profiles/windsurf.js +49 -0
- package/dist/profiles/windsurf.js.map +1 -0
- package/dist/project.d.ts +52 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +291 -0
- package/dist/project.js.map +1 -0
- package/dist/reporters/escape.d.ts +7 -0
- package/dist/reporters/escape.d.ts.map +1 -0
- package/dist/reporters/escape.js +15 -0
- package/dist/reporters/escape.js.map +1 -0
- package/dist/reporters/github.d.ts +7 -0
- package/dist/reporters/github.d.ts.map +1 -0
- package/dist/reporters/github.js +19 -0
- package/dist/reporters/github.js.map +1 -0
- package/dist/reporters/index.d.ts +6 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +10 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json.d.ts +3 -0
- package/dist/reporters/json.d.ts.map +1 -0
- package/dist/reporters/json.js +4 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/markdown.d.ts +3 -0
- package/dist/reporters/markdown.d.ts.map +1 -0
- package/dist/reporters/markdown.js +98 -0
- package/dist/reporters/markdown.js.map +1 -0
- package/dist/run.d.ts +14 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +163 -0
- package/dist/run.js.map +1 -0
- package/dist/sdk-facts.d.ts +27 -0
- package/dist/sdk-facts.d.ts.map +1 -0
- package/dist/sdk-facts.js +63 -0
- package/dist/sdk-facts.js.map +1 -0
- package/dist/snapshot.d.ts +189 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +22 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/ui.d.ts +18 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +22 -0
- package/dist/ui.js.map +1 -0
- package/dist/upgrade.d.ts +12 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +115 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +65 -0
- package/schema/report.schema.json +327 -0
package/dist/run.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { appendFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { ALL_CHECKS } from "./checks/index.js";
|
|
3
|
+
import { UsageError } from "./cli.js";
|
|
4
|
+
import { CredentialStore, describeCredentials, oauthLogin, StoredOAuthProvider } from "./oauth.js";
|
|
5
|
+
import { connect } from "./connect/index.js";
|
|
6
|
+
import { evaluate } from "./evaluate.js";
|
|
7
|
+
import { EXIT, exitCode, failures, parsePolicy, PolicyError } from "./policy.js";
|
|
8
|
+
import { ALL_PROFILES, selectProfiles, UnknownClientError } from "./profiles/index.js";
|
|
9
|
+
import { markdownReporter, REPORTERS } from "./reporters/index.js";
|
|
10
|
+
import { cell } from "./reporters/escape.js";
|
|
11
|
+
import { loadSnapshot, saveSnapshot } from "./snapshot.js";
|
|
12
|
+
const AREAS = [...new Set(ALL_CHECKS.map((c) => c.area))];
|
|
13
|
+
/** Runs the check command. Returns the process exit code. */
|
|
14
|
+
export async function run(options) {
|
|
15
|
+
if (options.listChecks)
|
|
16
|
+
return listChecks();
|
|
17
|
+
if (options.listClients)
|
|
18
|
+
return listClients();
|
|
19
|
+
let profiles, policy;
|
|
20
|
+
try {
|
|
21
|
+
profiles = selectProfiles(options.clients);
|
|
22
|
+
policy = parsePolicy(options.failOn, ALL_CHECKS.map((c) => c.id), AREAS);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (err instanceof UnknownClientError || err instanceof PolicyError)
|
|
26
|
+
throw new UsageError(err.message);
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
const snapshot = await getSnapshot(options);
|
|
30
|
+
if (options.saveSnapshot)
|
|
31
|
+
saveSnapshot(options.saveSnapshot, snapshot);
|
|
32
|
+
const report = evaluate(snapshot, ALL_CHECKS, profiles);
|
|
33
|
+
const output = REPORTERS[options.format](report);
|
|
34
|
+
if (options.out)
|
|
35
|
+
writeFileSync(options.out, output);
|
|
36
|
+
else
|
|
37
|
+
process.stdout.write(output);
|
|
38
|
+
if (options.format === "github" && process.env.GITHUB_STEP_SUMMARY) {
|
|
39
|
+
appendFileSync(process.env.GITHUB_STEP_SUMMARY, markdownReporter(report));
|
|
40
|
+
}
|
|
41
|
+
const connectFailed = report.checks.some((c) => c.id === "TRANSPORT_CONNECT_FAILED" && c.ran) && !snapshot.connect.ok;
|
|
42
|
+
const code = exitCode(report, policy, connectFailed);
|
|
43
|
+
if (code === EXIT.connectFailed) {
|
|
44
|
+
console.error(`\n✖ Could not connect to the server: ${snapshot.connect.error ?? "unknown error"}`);
|
|
45
|
+
}
|
|
46
|
+
else if (code === EXIT.failed) {
|
|
47
|
+
const failed = failures(report, policy);
|
|
48
|
+
console.error(`\n✖ ${failed.length} check result(s) failed --fail-on=${options.failOn}: ${failed.slice(0, 10).join(", ")}${failed.length > 10 ? ", …" : ""}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error(`\n✔ No results matched --fail-on=${options.failOn}.`);
|
|
52
|
+
}
|
|
53
|
+
return code;
|
|
54
|
+
}
|
|
55
|
+
export async function getSnapshot(options) {
|
|
56
|
+
if (options.fromSnapshot)
|
|
57
|
+
return loadSnapshot(options.fromSnapshot);
|
|
58
|
+
let target = options.target;
|
|
59
|
+
if (options.oauth && target.kind === "http") {
|
|
60
|
+
target = { ...target, authProvider: new StoredOAuthProvider(target.url, new CredentialStore()) };
|
|
61
|
+
}
|
|
62
|
+
return connect({
|
|
63
|
+
target,
|
|
64
|
+
timeoutMs: options.timeoutMs,
|
|
65
|
+
authProbe: options.authProbe,
|
|
66
|
+
versionMatrix: options.versionMatrix,
|
|
67
|
+
probeCalls: options.probeCalls,
|
|
68
|
+
calls: options.calls,
|
|
69
|
+
offline: options.offline,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/** Calls one tool, prints its result and any call findings. */
|
|
73
|
+
export async function runCall(options) {
|
|
74
|
+
if (options.fromSnapshot)
|
|
75
|
+
throw new UsageError("call needs a live server (-- <command> or --url), not a snapshot");
|
|
76
|
+
const snapshot = await getSnapshot({ ...options, calls: [{ tool: options.tool, args: options.args }] });
|
|
77
|
+
if (!snapshot.connect.ok) {
|
|
78
|
+
console.error(`✖ Could not connect to the server: ${snapshot.connect.error ?? "unknown error"}`);
|
|
79
|
+
return EXIT.connectFailed;
|
|
80
|
+
}
|
|
81
|
+
const probe = snapshot.calls?.[0];
|
|
82
|
+
const report = evaluate(snapshot, ALL_CHECKS.filter((c) => c.area === "calls"), []);
|
|
83
|
+
const known = snapshot.lists.tools?.items.some((t) => t.name === options.tool);
|
|
84
|
+
if (options.format === "json") {
|
|
85
|
+
process.stdout.write(JSON.stringify({ call: probe, findings: report.findings }, null, 2) + "\n");
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const lines = [`# ${options.tool}(${JSON.stringify(options.args)})`, ""];
|
|
89
|
+
if (!known)
|
|
90
|
+
lines.push(`_Note: "${options.tool}" is not in the server's tools/list._`, "");
|
|
91
|
+
lines.push(`${probe?.durationMs ?? "?"} ms${probe?.resultChars !== undefined ? ` · ${probe.resultChars} characters` : ""}`, "");
|
|
92
|
+
lines.push("```json", JSON.stringify(probe?.result ?? { error: probe?.error }, null, 2), "```", "");
|
|
93
|
+
if (report.findings.length) {
|
|
94
|
+
lines.push("| Severity | Check | Message |", "|---|---|---|");
|
|
95
|
+
for (const f of report.findings)
|
|
96
|
+
lines.push(`| ${f.severity} | \`${f.checkId}\` | ${cell(f.message)} |`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
lines.push("_No problems found in the result._");
|
|
100
|
+
}
|
|
101
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
102
|
+
}
|
|
103
|
+
const failed = report.findings.some((f) => f.severity === "error") || !!probe?.error;
|
|
104
|
+
return failed ? EXIT.failed : EXIT.ok;
|
|
105
|
+
}
|
|
106
|
+
export async function runOAuthLogin(options) {
|
|
107
|
+
const steps = await oauthLogin({
|
|
108
|
+
...options,
|
|
109
|
+
log: (m) => console.error(m),
|
|
110
|
+
verify: async (provider) => {
|
|
111
|
+
const snapshot = await connect({
|
|
112
|
+
target: { kind: "http", url: options.url, headers: {}, authProvider: provider },
|
|
113
|
+
timeoutMs: 15000,
|
|
114
|
+
authProbe: false,
|
|
115
|
+
});
|
|
116
|
+
if (!snapshot.connect.ok)
|
|
117
|
+
throw new Error(snapshot.connect.error ?? "connect failed");
|
|
118
|
+
return `initialize + tools/list OK (${snapshot.lists.tools?.items.length ?? 0} tools)`;
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
const ok = steps.length > 0 && steps.every((s) => s.ok);
|
|
122
|
+
console.error(ok ? `\n✔ Logged in. Use --oauth with check/call to reuse these credentials.` : `\n✖ Login did not complete.`);
|
|
123
|
+
return ok ? EXIT.ok : EXIT.failed;
|
|
124
|
+
}
|
|
125
|
+
export function runOAuthStatus() {
|
|
126
|
+
const all = new CredentialStore().all();
|
|
127
|
+
const urls = Object.keys(all);
|
|
128
|
+
if (urls.length === 0)
|
|
129
|
+
console.log("No stored credentials.");
|
|
130
|
+
for (const url of urls)
|
|
131
|
+
console.log(describeCredentials(url, all[url]));
|
|
132
|
+
return EXIT.ok;
|
|
133
|
+
}
|
|
134
|
+
export function runOAuthLogout(url) {
|
|
135
|
+
const store = new CredentialStore();
|
|
136
|
+
const had = url in store.all();
|
|
137
|
+
store.update(url, () => undefined);
|
|
138
|
+
console.error(had ? `Removed credentials for ${url}.` : `No credentials stored for ${url}.`);
|
|
139
|
+
return EXIT.ok;
|
|
140
|
+
}
|
|
141
|
+
export function listChecks() {
|
|
142
|
+
for (const area of AREAS) {
|
|
143
|
+
console.log(`\n${area}`);
|
|
144
|
+
for (const c of ALL_CHECKS.filter((c) => c.area === area))
|
|
145
|
+
console.log(` ${c.id.padEnd(36)} ${c.description}`);
|
|
146
|
+
}
|
|
147
|
+
return EXIT.ok;
|
|
148
|
+
}
|
|
149
|
+
export function listClients() {
|
|
150
|
+
if (ALL_PROFILES.length === 0)
|
|
151
|
+
console.log("No client profiles yet.");
|
|
152
|
+
for (const p of ALL_PROFILES) {
|
|
153
|
+
const dates = [
|
|
154
|
+
...Object.values(p.supports).map((s) => s.verifiedOn),
|
|
155
|
+
...Object.values(p.limits).map((l) => l.verifiedOn),
|
|
156
|
+
].sort();
|
|
157
|
+
const oldest = dates[0];
|
|
158
|
+
const stale = oldest && Date.now() - Date.parse(oldest) > 90 * 86_400_000 ? " (stale: re-verify)" : "";
|
|
159
|
+
console.log(`${p.id.padEnd(16)} ${p.displayName.padEnd(28)} facts: ${dates.length}, oldest verified ${oldest ?? "-"}${stale}`);
|
|
160
|
+
}
|
|
161
|
+
return EXIT.ok;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type DetectedSdk } from "./project.js";
|
|
2
|
+
/** What we verified (by reading the SDK's source) about protocol support. */
|
|
3
|
+
export interface SdkFact {
|
|
4
|
+
/** First version that speaks the stateless 2026-07-28 protocol, or false if this package never will. */
|
|
5
|
+
modernFrom: string | false;
|
|
6
|
+
/** What to do when modernFrom is false. */
|
|
7
|
+
migrateTo?: string;
|
|
8
|
+
note?: string;
|
|
9
|
+
source: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const SDK_FACTS: Record<string, SdkFact>;
|
|
12
|
+
export { SAFE_VERSION } from "./project.js";
|
|
13
|
+
export type UpgradeKind = "current" | "minor" | "major" | "migrate" | "unknown";
|
|
14
|
+
export interface UpgradeAdvice {
|
|
15
|
+
sdk: DetectedSdk;
|
|
16
|
+
kind: UpgradeKind;
|
|
17
|
+
/** Command to run, when an upgrade applies. */
|
|
18
|
+
command?: string;
|
|
19
|
+
/** One-line human summary. */
|
|
20
|
+
summary: string;
|
|
21
|
+
/** Upgrading adds protocol 2026-07-28. */
|
|
22
|
+
addsModern: boolean;
|
|
23
|
+
/** A requirements file pinning the old version with ==, which must be edited too. */
|
|
24
|
+
pinnedFile?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function adviseUpgrade(sdk: DetectedSdk): UpgradeAdvice;
|
|
27
|
+
//# sourceMappingURL=sdk-facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-facts.d.ts","sourceRoot":"","sources":["../src/sdk-facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAExG,6EAA6E;AAC7E,MAAM,WAAW,OAAO;IACtB,wGAAwG;IACxG,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAiB7C,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,UAAU,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAqC7D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { compareVersions, majorOf, SAFE_VERSION, upgradeCommand } from "./project.js";
|
|
2
|
+
export const SDK_FACTS = {
|
|
3
|
+
"@modelcontextprotocol/sdk": {
|
|
4
|
+
modernFrom: false,
|
|
5
|
+
migrateTo: "@modelcontextprotocol/server",
|
|
6
|
+
note: "v1 supports protocol versions up to 2025-11-25; 2026-07-28 is only in the v2 packages (@modelcontextprotocol/server), which is a migration, not an update.",
|
|
7
|
+
source: "https://unpkg.com/@modelcontextprotocol/sdk@1.30.1/dist/esm/types.js",
|
|
8
|
+
},
|
|
9
|
+
"@modelcontextprotocol/server": {
|
|
10
|
+
modernFrom: "2.0.0",
|
|
11
|
+
note: "v2 implements server/discover and the 2026-07-28 request envelope.",
|
|
12
|
+
source: "https://unpkg.com/@modelcontextprotocol/server@2.1.0/",
|
|
13
|
+
},
|
|
14
|
+
mcp: {
|
|
15
|
+
modernFrom: "2.0.0",
|
|
16
|
+
note: "mcp 1.x supports up to 2025-11-25; mcp 2.x adds 2026-07-28 (see mcp_types.version).",
|
|
17
|
+
source: "https://pypi.org/project/mcp-types/2.2.0/",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export { SAFE_VERSION } from "./project.js";
|
|
21
|
+
export function adviseUpgrade(sdk) {
|
|
22
|
+
const fact = SDK_FACTS[sdk.name];
|
|
23
|
+
const current = sdk.installed ?? cleanDeclared(sdk.declared);
|
|
24
|
+
const latest = sdk.latest && SAFE_VERSION.test(sdk.latest) ? sdk.latest : undefined;
|
|
25
|
+
const hasModern = (v) => !!v && !!fact?.modernFrom && compareVersions(v, fact.modernFrom) >= 0;
|
|
26
|
+
if (!current || !latest) {
|
|
27
|
+
return {
|
|
28
|
+
sdk,
|
|
29
|
+
kind: "unknown",
|
|
30
|
+
command: upgradeCommand(sdk, latest),
|
|
31
|
+
summary: `${sdk.name}${current ? ` ${current}` : ""}: couldn't compare with the latest release${latest ? "" : " (offline?)"}.`,
|
|
32
|
+
addsModern: false,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (compareVersions(current, latest) >= 0) {
|
|
36
|
+
const migrate = fact?.modernFrom === false && fact.migrateTo;
|
|
37
|
+
return {
|
|
38
|
+
sdk,
|
|
39
|
+
kind: migrate ? "migrate" : "current",
|
|
40
|
+
summary: migrate
|
|
41
|
+
? `${sdk.name} ${current} is the latest, but ${fact.note}`
|
|
42
|
+
: `${sdk.name} ${current} is the latest release.`,
|
|
43
|
+
addsModern: false,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const major = majorOf(current) !== majorOf(latest);
|
|
47
|
+
const addsModern = !hasModern(current) && hasModern(latest);
|
|
48
|
+
const pinnedFile = sdk.manager === "pip" && sdk.declared?.startsWith("==") ? sdk.manifest : undefined;
|
|
49
|
+
return {
|
|
50
|
+
sdk,
|
|
51
|
+
kind: major ? "major" : "minor",
|
|
52
|
+
command: upgradeCommand(sdk, latest),
|
|
53
|
+
summary: `${sdk.name} ${current} → ${latest}${major ? " (major version: check the changelog for breaking changes)" : ""}${addsModern ? "; adds protocol 2026-07-28" : ""}.${pinnedFile ? ` Also change the pin in ${pinnedFile} to ${sdk.name}==${latest}.` : ""}`,
|
|
54
|
+
addsModern,
|
|
55
|
+
pinnedFile,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** "^1.29.0" → "1.29.0"; ranges we can't reduce to one version → undefined. */
|
|
59
|
+
function cleanDeclared(declared) {
|
|
60
|
+
const m = declared ? /^[\^~=>v]*\s*([0-9][0-9.]*)/.exec(declared.trim()) : null;
|
|
61
|
+
return m?.[1];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=sdk-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-facts.js","sourceRoot":"","sources":["../src/sdk-facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,cAAc,CAAC;AAYxG,MAAM,CAAC,MAAM,SAAS,GAA4B;IAChD,2BAA2B,EAAE;QAC3B,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,8BAA8B;QACzC,IAAI,EAAE,4JAA4J;QAClK,MAAM,EAAE,sEAAsE;KAC/E;IACD,8BAA8B,EAAE;QAC9B,UAAU,EAAE,OAAO;QACnB,IAAI,EAAE,oEAAoE;QAC1E,MAAM,EAAE,uDAAuD;KAChE;IACD,GAAG,EAAE;QACH,UAAU,EAAE,OAAO;QACnB,IAAI,EAAE,qFAAqF;QAC3F,MAAM,EAAE,2CAA2C;KACpD;CACF,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAiB5C,MAAM,UAAU,aAAa,CAAC,GAAgB;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,SAAS,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAExG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO;YACL,GAAG;YACH,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;YACpC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,6CAA6C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG;YAC9H,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,EAAE,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC;QAC7D,OAAO;YACL,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACrC,OAAO,EAAE,OAAO;gBACd,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,uBAAuB,IAAK,CAAC,IAAI,EAAE;gBAC3D,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,yBAAyB;YACnD,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,OAAO;QACL,GAAG;QACH,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAC/B,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QACpC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,2BAA2B,UAAU,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClQ,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,aAAa,CAAC,QAAiB;IACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type { ProjectInfo } from "./project.js";
|
|
2
|
+
/**
|
|
3
|
+
* Everything we observed about a server in one session. Plain JSON so it can be
|
|
4
|
+
* saved, attached to bug reports, and re-checked offline.
|
|
5
|
+
*
|
|
6
|
+
* List items are stored exactly as the server sent them (not SDK-validated), so
|
|
7
|
+
* checks can see malformed data such as `description: null`.
|
|
8
|
+
*/
|
|
9
|
+
export interface ServerSnapshot {
|
|
10
|
+
snapshotVersion: 1;
|
|
11
|
+
/**
|
|
12
|
+
* Which protocol generation the checks ran over: "legacy" (initialize handshake),
|
|
13
|
+
* "modern" (2026-07-28 only; lists come from the modern probe) or "both".
|
|
14
|
+
* Absent in snapshots from older versions = "legacy".
|
|
15
|
+
*/
|
|
16
|
+
era?: "legacy" | "modern" | "both";
|
|
17
|
+
target: Target;
|
|
18
|
+
connectedAt: string;
|
|
19
|
+
connect: {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
/** For era "modern": why the initialize handshake failed. */
|
|
23
|
+
legacyError?: string;
|
|
24
|
+
/** Transport start → initialize response. */
|
|
25
|
+
startupMs?: number;
|
|
26
|
+
};
|
|
27
|
+
initialize?: {
|
|
28
|
+
requestedProtocolVersion: string;
|
|
29
|
+
negotiatedProtocolVersion?: string;
|
|
30
|
+
serverInfo?: Record<string, unknown>;
|
|
31
|
+
capabilities: Record<string, unknown>;
|
|
32
|
+
instructions?: string;
|
|
33
|
+
};
|
|
34
|
+
lists: {
|
|
35
|
+
tools?: ListResult;
|
|
36
|
+
resources?: ListResult;
|
|
37
|
+
resourceTemplates?: ListResult;
|
|
38
|
+
prompts?: ListResult;
|
|
39
|
+
};
|
|
40
|
+
io: {
|
|
41
|
+
/** stdio only: lines on stdout that were not JSON-RPC messages. Capped. */
|
|
42
|
+
stdoutNonJsonLines: string[];
|
|
43
|
+
/** Last lines of stderr. Capped. */
|
|
44
|
+
stderrTail: string[];
|
|
45
|
+
};
|
|
46
|
+
http?: HttpProbe;
|
|
47
|
+
/** server/discover (protocol revision 2026-07-28 and later). */
|
|
48
|
+
discover?: DiscoverProbe;
|
|
49
|
+
/** Everything learned over protocol 2026-07-28. */
|
|
50
|
+
modern?: ModernProbe;
|
|
51
|
+
/** resources/read results for UI resources that tools link to, keyed by URI. */
|
|
52
|
+
uiReads?: Record<string, UiRead>;
|
|
53
|
+
/** One initialize per protocol version (--version-matrix). */
|
|
54
|
+
versionMatrix?: VersionProbe[];
|
|
55
|
+
/** tools/call results (--probe-calls or the call command). */
|
|
56
|
+
calls?: CallProbe[];
|
|
57
|
+
/** The stdio server's project and the MCP SDKs it uses. */
|
|
58
|
+
project?: ProjectInfo;
|
|
59
|
+
}
|
|
60
|
+
export interface CallProbe {
|
|
61
|
+
tool: string;
|
|
62
|
+
args: Record<string, unknown>;
|
|
63
|
+
/** "probe" = picked automatically (readOnlyHint), "explicit" = named by the user. */
|
|
64
|
+
origin: "probe" | "explicit";
|
|
65
|
+
durationMs: number;
|
|
66
|
+
/** Set when the server answered with a JSON-RPC error or the call failed. */
|
|
67
|
+
error?: {
|
|
68
|
+
code?: number;
|
|
69
|
+
message: string;
|
|
70
|
+
};
|
|
71
|
+
/** Raw result, with large text truncated. */
|
|
72
|
+
result?: Record<string, unknown>;
|
|
73
|
+
/** Size of the full JSON result before truncation, in characters. */
|
|
74
|
+
resultChars?: number;
|
|
75
|
+
}
|
|
76
|
+
export interface VersionProbe {
|
|
77
|
+
requested: string;
|
|
78
|
+
ok: boolean;
|
|
79
|
+
negotiated?: string;
|
|
80
|
+
error?: string;
|
|
81
|
+
/** Sorted tool names listed in that session. */
|
|
82
|
+
tools?: string[];
|
|
83
|
+
}
|
|
84
|
+
export interface UiRead {
|
|
85
|
+
ok: boolean;
|
|
86
|
+
mimeType?: string;
|
|
87
|
+
error?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface ModernPageMeta {
|
|
90
|
+
resultType?: unknown;
|
|
91
|
+
ttlMs?: unknown;
|
|
92
|
+
cacheScope?: unknown;
|
|
93
|
+
/** _meta["io.modelcontextprotocol/serverInfo"] from the result. */
|
|
94
|
+
serverInfo?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
export interface ModernProbe {
|
|
97
|
+
version: string;
|
|
98
|
+
/** The server answered like a 2026-07-28 server. */
|
|
99
|
+
supported: boolean;
|
|
100
|
+
discover: DiscoverProbe;
|
|
101
|
+
/** Result metadata of server/discover. */
|
|
102
|
+
discoverMeta?: ModernPageMeta;
|
|
103
|
+
startupMs?: number;
|
|
104
|
+
lists?: Partial<Record<ListKind, ListResult>>;
|
|
105
|
+
/** Result metadata per list page. */
|
|
106
|
+
pagesMeta?: Partial<Record<ListKind, ModernPageMeta[]>>;
|
|
107
|
+
uiReads?: Record<string, UiRead>;
|
|
108
|
+
/** What the server did with a request carrying an unsupported protocol version. */
|
|
109
|
+
unsupportedVersion?: {
|
|
110
|
+
answered: boolean;
|
|
111
|
+
code?: number;
|
|
112
|
+
message?: string;
|
|
113
|
+
data?: unknown;
|
|
114
|
+
};
|
|
115
|
+
stderrTail?: string[];
|
|
116
|
+
}
|
|
117
|
+
export interface DiscoverProbe {
|
|
118
|
+
ok: boolean;
|
|
119
|
+
/** Raw result when ok. */
|
|
120
|
+
result?: Record<string, unknown>;
|
|
121
|
+
error?: {
|
|
122
|
+
code?: number;
|
|
123
|
+
message: string;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export type Target = {
|
|
127
|
+
kind: "stdio";
|
|
128
|
+
command: string;
|
|
129
|
+
args: string[];
|
|
130
|
+
cwd: string;
|
|
131
|
+
} | {
|
|
132
|
+
kind: "http";
|
|
133
|
+
url: string;
|
|
134
|
+
};
|
|
135
|
+
export type RawItem = Record<string, unknown>;
|
|
136
|
+
export interface ListResult {
|
|
137
|
+
ok: boolean;
|
|
138
|
+
items: RawItem[];
|
|
139
|
+
pages: number;
|
|
140
|
+
durationMs: number;
|
|
141
|
+
error?: {
|
|
142
|
+
code?: number;
|
|
143
|
+
message: string;
|
|
144
|
+
};
|
|
145
|
+
/** Set when pagination stopped because a cursor repeated. */
|
|
146
|
+
cursorLoop?: boolean;
|
|
147
|
+
}
|
|
148
|
+
export interface HttpResponseProbe {
|
|
149
|
+
url: string;
|
|
150
|
+
status?: number;
|
|
151
|
+
error?: string;
|
|
152
|
+
headers?: Record<string, string>;
|
|
153
|
+
/** Parsed JSON body, when the response was JSON. */
|
|
154
|
+
json?: unknown;
|
|
155
|
+
}
|
|
156
|
+
export interface HttpProbe {
|
|
157
|
+
/** Unauthenticated initialize POST. */
|
|
158
|
+
unauthenticated: HttpResponseProbe;
|
|
159
|
+
/** Protected resource metadata fetches, in the order tried. */
|
|
160
|
+
protectedResource: HttpResponseProbe[];
|
|
161
|
+
/** Authorization server metadata fetches, in the order tried. */
|
|
162
|
+
authorizationServer: HttpResponseProbe[];
|
|
163
|
+
}
|
|
164
|
+
export declare const LIST_KINDS: {
|
|
165
|
+
readonly tools: {
|
|
166
|
+
readonly method: "tools/list";
|
|
167
|
+
readonly key: "tools";
|
|
168
|
+
readonly capability: "tools";
|
|
169
|
+
};
|
|
170
|
+
readonly resources: {
|
|
171
|
+
readonly method: "resources/list";
|
|
172
|
+
readonly key: "resources";
|
|
173
|
+
readonly capability: "resources";
|
|
174
|
+
};
|
|
175
|
+
readonly resourceTemplates: {
|
|
176
|
+
readonly method: "resources/templates/list";
|
|
177
|
+
readonly key: "resourceTemplates";
|
|
178
|
+
readonly capability: "resources";
|
|
179
|
+
};
|
|
180
|
+
readonly prompts: {
|
|
181
|
+
readonly method: "prompts/list";
|
|
182
|
+
readonly key: "prompts";
|
|
183
|
+
readonly capability: "prompts";
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
export type ListKind = keyof typeof LIST_KINDS;
|
|
187
|
+
export declare function saveSnapshot(path: string, snapshot: ServerSnapshot): void;
|
|
188
|
+
export declare function loadSnapshot(path: string): ServerSnapshot;
|
|
189
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
export const LIST_KINDS = {
|
|
3
|
+
tools: { method: "tools/list", key: "tools", capability: "tools" },
|
|
4
|
+
resources: { method: "resources/list", key: "resources", capability: "resources" },
|
|
5
|
+
resourceTemplates: {
|
|
6
|
+
method: "resources/templates/list",
|
|
7
|
+
key: "resourceTemplates",
|
|
8
|
+
capability: "resources",
|
|
9
|
+
},
|
|
10
|
+
prompts: { method: "prompts/list", key: "prompts", capability: "prompts" },
|
|
11
|
+
};
|
|
12
|
+
export function saveSnapshot(path, snapshot) {
|
|
13
|
+
writeFileSync(path, JSON.stringify(snapshot, null, 2) + "\n");
|
|
14
|
+
}
|
|
15
|
+
export function loadSnapshot(path) {
|
|
16
|
+
const data = JSON.parse(readFileSync(path, "utf8"));
|
|
17
|
+
if (data?.snapshotVersion !== 1) {
|
|
18
|
+
throw new Error(`${path}: unsupported snapshot version ${String(data?.snapshotVersion)}`);
|
|
19
|
+
}
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA6JtD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;IAClE,SAAS,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;IAClF,iBAAiB,EAAE;QACjB,MAAM,EAAE,0BAA0B;QAClC,GAAG,EAAE,mBAAmB;QACxB,UAAU,EAAE,WAAW;KACxB;IACD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;CAClE,CAAC;AAIX,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAwB;IACjE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAmB,CAAC;IACtE,IAAI,IAAI,EAAE,eAAe,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RawItem } from "./snapshot.js";
|
|
2
|
+
/** MCP Apps (io.modelcontextprotocol/ui, stable 2026-01-26). */
|
|
3
|
+
export declare const MCP_APP_MIME = "text/html;profile=mcp-app";
|
|
4
|
+
/** Legacy OpenAI Apps SDK widget type, still emitted by some mcp-ui adapters. */
|
|
5
|
+
export declare const SKYBRIDGE_MIME = "text/html+skybridge";
|
|
6
|
+
export interface UiLinks {
|
|
7
|
+
/** `_meta.ui.resourceUri`, the current MCP Apps key. */
|
|
8
|
+
current?: string;
|
|
9
|
+
/** `_meta["ui/resourceUri"]`, deprecated flat key. */
|
|
10
|
+
flat?: string;
|
|
11
|
+
/** `_meta["openai/outputTemplate"]`, ChatGPT compatibility alias. */
|
|
12
|
+
openai?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function uiLinks(tool: RawItem): UiLinks;
|
|
15
|
+
export declare function linkedUiUris(tool: RawItem): string[];
|
|
16
|
+
/** Normalises a MIME type for comparison: lowercase, no spaces around parameters. */
|
|
17
|
+
export declare function normalizeMime(mime: string): string;
|
|
18
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,gEAAgE;AAChE,eAAO,MAAM,YAAY,8BAA8B,CAAC;AACxD,iFAAiF;AACjF,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAO9C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAGpD;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** MCP Apps (io.modelcontextprotocol/ui, stable 2026-01-26). */
|
|
2
|
+
export const MCP_APP_MIME = "text/html;profile=mcp-app";
|
|
3
|
+
/** Legacy OpenAI Apps SDK widget type, still emitted by some mcp-ui adapters. */
|
|
4
|
+
export const SKYBRIDGE_MIME = "text/html+skybridge";
|
|
5
|
+
export function uiLinks(tool) {
|
|
6
|
+
const meta = tool._meta;
|
|
7
|
+
if (typeof meta !== "object" || meta === null)
|
|
8
|
+
return {};
|
|
9
|
+
const m = meta;
|
|
10
|
+
const ui = typeof m.ui === "object" && m.ui !== null ? m.ui : {};
|
|
11
|
+
const s = (v) => (typeof v === "string" ? v : undefined);
|
|
12
|
+
return { current: s(ui.resourceUri), flat: s(m["ui/resourceUri"]), openai: s(m["openai/outputTemplate"]) };
|
|
13
|
+
}
|
|
14
|
+
export function linkedUiUris(tool) {
|
|
15
|
+
const links = uiLinks(tool);
|
|
16
|
+
return [...new Set([links.current, links.flat, links.openai].filter((u) => !!u))];
|
|
17
|
+
}
|
|
18
|
+
/** Normalises a MIME type for comparison: lowercase, no spaces around parameters. */
|
|
19
|
+
export function normalizeMime(mime) {
|
|
20
|
+
return mime.toLowerCase().replace(/\s*;\s*/g, ";").trim();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,2BAA2B,CAAC;AACxD,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAWpD,MAAM,UAAU,OAAO,CAAC,IAAa;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,EAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UpgradeOptions } from "./cli.js";
|
|
2
|
+
import { type ProjectInfo } from "./project.js";
|
|
3
|
+
import { type UpgradeAdvice } from "./sdk-facts.js";
|
|
4
|
+
export declare function renderAdvice(project: ProjectInfo, advice: UpgradeAdvice[]): string;
|
|
5
|
+
/** Which upgrades --apply runs: minor always, major only with --major, never migrations. */
|
|
6
|
+
export declare function planUpgrades(advice: UpgradeAdvice[], allowMajor: boolean): UpgradeAdvice[];
|
|
7
|
+
/** Rewrites `name==old` to `name==new` in a pinned requirements file. */
|
|
8
|
+
export declare function bumpPin(file: string, name: string, version: string): boolean;
|
|
9
|
+
/** Runs each upgrade in order and bumps == pins; stops at the first failure. */
|
|
10
|
+
export declare function applyPlan(plan: UpgradeAdvice[], dir: string, run: (command: string, cwd: string) => Promise<number>, log: (m: string) => void): Promise<boolean>;
|
|
11
|
+
export declare function runUpgrade(options: UpgradeOptions, log?: (m: string) => void): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG9E,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAclF;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,EAAE,CAE1F;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAM5E;AAED,gFAAgF;AAChF,wBAAsB,SAAS,CAC7B,IAAI,EAAE,aAAa,EAAE,EACrB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACtD,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAgBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAA8B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmD7H"}
|