@modelcontextprotocol/inspector 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/client/dist/assets/{OAuthCallback-DmuQ-LZN.js → OAuthCallback-KG5AbO62.js} +1 -1
- package/client/dist/assets/{index-mKSHihrk.js → index-BK1TrpAN.js} +155 -41
- package/client/dist/assets/{index-BC_1zPdU.css → index-Dt6l7sEy.css} +9 -67
- package/client/dist/index.html +2 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -38,6 +38,10 @@ CLIENT_PORT=8080 SERVER_PORT=9000 npx @modelcontextprotocol/inspector node build
|
|
|
38
38
|
|
|
39
39
|
For more details on ways to use the inspector, see the [Inspector section of the MCP docs site](https://modelcontextprotocol.io/docs/tools/inspector). For help with debugging, see the [Debugging guide](https://modelcontextprotocol.io/docs/tools/debugging).
|
|
40
40
|
|
|
41
|
+
### Authentication
|
|
42
|
+
|
|
43
|
+
The inspector supports bearer token authentication for SSE connections. Enter your token in the UI when connecting to an MCP server, and it will be sent in the Authorization header.
|
|
44
|
+
|
|
41
45
|
### From this repository
|
|
42
46
|
|
|
43
47
|
If you're working on the inspector itself:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as reactExports, j as jsxRuntimeExports, S as SESSION_KEYS, a as auth, b as authProvider } from "./index-
|
|
1
|
+
import { r as reactExports, j as jsxRuntimeExports, S as SESSION_KEYS, a as auth, b as authProvider } from "./index-BK1TrpAN.js";
|
|
2
2
|
const OAuthCallback = () => {
|
|
3
3
|
const hasProcessedRef = reactExports.useRef(false);
|
|
4
4
|
reactExports.useEffect(() => {
|
|
@@ -12151,7 +12151,7 @@ z.union([
|
|
|
12151
12151
|
CreateMessageRequestSchema,
|
|
12152
12152
|
ListRootsRequestSchema
|
|
12153
12153
|
]);
|
|
12154
|
-
z.union([
|
|
12154
|
+
const ServerNotificationSchema = z.union([
|
|
12155
12155
|
CancelledNotificationSchema,
|
|
12156
12156
|
ProgressNotificationSchema,
|
|
12157
12157
|
LoggingMessageNotificationSchema,
|
|
@@ -12282,7 +12282,7 @@ class Protocol {
|
|
|
12282
12282
|
Promise.resolve().then(() => handler(notification)).catch((error) => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));
|
|
12283
12283
|
}
|
|
12284
12284
|
_onrequest(request) {
|
|
12285
|
-
var _a, _b;
|
|
12285
|
+
var _a, _b, _c;
|
|
12286
12286
|
const handler = (_a = this._requestHandlers.get(request.method)) !== null && _a !== void 0 ? _a : this.fallbackRequestHandler;
|
|
12287
12287
|
if (handler === void 0) {
|
|
12288
12288
|
(_b = this._transport) === null || _b === void 0 ? void 0 : _b.send({
|
|
@@ -12297,7 +12297,11 @@ class Protocol {
|
|
|
12297
12297
|
}
|
|
12298
12298
|
const abortController = new AbortController();
|
|
12299
12299
|
this._requestHandlerAbortControllers.set(request.id, abortController);
|
|
12300
|
-
|
|
12300
|
+
const extra = {
|
|
12301
|
+
signal: abortController.signal,
|
|
12302
|
+
sessionId: (_c = this._transport) === null || _c === void 0 ? void 0 : _c.sessionId
|
|
12303
|
+
};
|
|
12304
|
+
Promise.resolve().then(() => handler(request, extra)).then((result) => {
|
|
12301
12305
|
var _a2;
|
|
12302
12306
|
if (abortController.signal.aborted) {
|
|
12303
12307
|
return;
|
|
@@ -13498,7 +13502,7 @@ const StdErrNotificationSchema = NotificationSchema.extend({
|
|
|
13498
13502
|
});
|
|
13499
13503
|
ClientNotificationSchema.or(
|
|
13500
13504
|
StdErrNotificationSchema
|
|
13501
|
-
);
|
|
13505
|
+
).or(ServerNotificationSchema);
|
|
13502
13506
|
class InspectorOAuthClientProvider {
|
|
13503
13507
|
get redirectUrl() {
|
|
13504
13508
|
return window.location.origin + "/oauth/callback";
|
|
@@ -13551,7 +13555,8 @@ class InspectorOAuthClientProvider {
|
|
|
13551
13555
|
}
|
|
13552
13556
|
}
|
|
13553
13557
|
const authProvider = new InspectorOAuthClientProvider();
|
|
13554
|
-
const
|
|
13558
|
+
const params$1 = new URLSearchParams(window.location.search);
|
|
13559
|
+
const DEFAULT_REQUEST_TIMEOUT_MSEC = parseInt(params$1.get("timeout") ?? "") || 1e4;
|
|
13555
13560
|
function useConnection({
|
|
13556
13561
|
transportType,
|
|
13557
13562
|
command,
|
|
@@ -13559,6 +13564,7 @@ function useConnection({
|
|
|
13559
13564
|
sseUrl,
|
|
13560
13565
|
env,
|
|
13561
13566
|
proxyServerUrl,
|
|
13567
|
+
bearerToken,
|
|
13562
13568
|
requestTimeout = DEFAULT_REQUEST_TIMEOUT_MSEC,
|
|
13563
13569
|
onNotification,
|
|
13564
13570
|
onStdErrNotification,
|
|
@@ -13665,6 +13671,7 @@ function useConnection({
|
|
|
13665
13671
|
return false;
|
|
13666
13672
|
};
|
|
13667
13673
|
const connect = async (_e, retryCount = 0) => {
|
|
13674
|
+
var _a;
|
|
13668
13675
|
try {
|
|
13669
13676
|
const client = new Client(
|
|
13670
13677
|
{
|
|
@@ -13690,9 +13697,9 @@ function useConnection({
|
|
|
13690
13697
|
backendUrl.searchParams.append("url", sseUrl);
|
|
13691
13698
|
}
|
|
13692
13699
|
const headers = {};
|
|
13693
|
-
const
|
|
13694
|
-
if (
|
|
13695
|
-
headers["Authorization"] = `Bearer ${
|
|
13700
|
+
const token = bearerToken || ((_a = await authProvider.tokens()) == null ? void 0 : _a.access_token);
|
|
13701
|
+
if (token) {
|
|
13702
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
13696
13703
|
}
|
|
13697
13704
|
const clientTransport = new SSEClientTransport(backendUrl, {
|
|
13698
13705
|
eventSourceInit: {
|
|
@@ -13707,6 +13714,10 @@ function useConnection({
|
|
|
13707
13714
|
ProgressNotificationSchema,
|
|
13708
13715
|
onNotification
|
|
13709
13716
|
);
|
|
13717
|
+
client.setNotificationHandler(
|
|
13718
|
+
ResourceUpdatedNotificationSchema,
|
|
13719
|
+
onNotification
|
|
13720
|
+
);
|
|
13710
13721
|
}
|
|
13711
13722
|
if (onStdErrNotification) {
|
|
13712
13723
|
client.setNotificationHandler(
|
|
@@ -17758,16 +17769,12 @@ const Button = reactExports.forwardRef(
|
|
|
17758
17769
|
);
|
|
17759
17770
|
Button.displayName = "Button";
|
|
17760
17771
|
const PingTab = ({ onPingClick }) => {
|
|
17761
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "ping", className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "col-span-2 flex justify-center items-center", children: /* @__PURE__ */ jsxRuntimeExports.
|
|
17772
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "ping", className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "col-span-2 flex justify-center items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
17762
17773
|
Button,
|
|
17763
17774
|
{
|
|
17764
17775
|
onClick: onPingClick,
|
|
17765
|
-
className: "
|
|
17766
|
-
children:
|
|
17767
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-3xl mr-2", children: "🚀" }),
|
|
17768
|
-
"MEGA PING",
|
|
17769
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-3xl ml-2", children: "💥" })
|
|
17770
|
-
]
|
|
17776
|
+
className: "font-bold py-6 px-12 rounded-full",
|
|
17777
|
+
children: "Ping Server"
|
|
17771
17778
|
}
|
|
17772
17779
|
) }) });
|
|
17773
17780
|
};
|
|
@@ -22767,6 +22774,10 @@ const ResourcesTab = ({
|
|
|
22767
22774
|
readResource,
|
|
22768
22775
|
selectedResource,
|
|
22769
22776
|
setSelectedResource,
|
|
22777
|
+
resourceSubscriptionsSupported,
|
|
22778
|
+
resourceSubscriptions,
|
|
22779
|
+
subscribeToResource,
|
|
22780
|
+
unsubscribeFromResource,
|
|
22770
22781
|
handleCompletion,
|
|
22771
22782
|
completionsSupported,
|
|
22772
22783
|
resourceContent,
|
|
@@ -22863,18 +22874,38 @@ const ResourcesTab = ({
|
|
|
22863
22874
|
children: selectedResource ? selectedResource.name : selectedTemplate ? selectedTemplate.name : "Select a resource or template"
|
|
22864
22875
|
}
|
|
22865
22876
|
),
|
|
22866
|
-
selectedResource && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
22867
|
-
|
|
22868
|
-
|
|
22869
|
-
|
|
22870
|
-
|
|
22871
|
-
|
|
22872
|
-
|
|
22873
|
-
|
|
22874
|
-
|
|
22875
|
-
|
|
22876
|
-
|
|
22877
|
-
|
|
22877
|
+
selectedResource && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex row-auto gap-1 justify-end w-2/5", children: [
|
|
22878
|
+
resourceSubscriptionsSupported && !resourceSubscriptions.has(selectedResource.uri) && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22879
|
+
Button,
|
|
22880
|
+
{
|
|
22881
|
+
variant: "outline",
|
|
22882
|
+
size: "sm",
|
|
22883
|
+
onClick: () => subscribeToResource(selectedResource.uri),
|
|
22884
|
+
children: "Subscribe"
|
|
22885
|
+
}
|
|
22886
|
+
),
|
|
22887
|
+
resourceSubscriptionsSupported && resourceSubscriptions.has(selectedResource.uri) && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22888
|
+
Button,
|
|
22889
|
+
{
|
|
22890
|
+
variant: "outline",
|
|
22891
|
+
size: "sm",
|
|
22892
|
+
onClick: () => unsubscribeFromResource(selectedResource.uri),
|
|
22893
|
+
children: "Unsubscribe"
|
|
22894
|
+
}
|
|
22895
|
+
),
|
|
22896
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
22897
|
+
Button,
|
|
22898
|
+
{
|
|
22899
|
+
variant: "outline",
|
|
22900
|
+
size: "sm",
|
|
22901
|
+
onClick: () => readResource(selectedResource.uri),
|
|
22902
|
+
children: [
|
|
22903
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "w-4 h-4 mr-2" }),
|
|
22904
|
+
"Refresh"
|
|
22905
|
+
]
|
|
22906
|
+
}
|
|
22907
|
+
)
|
|
22908
|
+
] })
|
|
22878
22909
|
] }),
|
|
22879
22910
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-4", children: error ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Alert, { variant: "destructive", children: [
|
|
22880
22911
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "h-4 w-4" }),
|
|
@@ -24323,7 +24354,7 @@ const useTheme = () => {
|
|
|
24323
24354
|
}, [])
|
|
24324
24355
|
];
|
|
24325
24356
|
};
|
|
24326
|
-
const version = "0.
|
|
24357
|
+
const version = "0.6.0";
|
|
24327
24358
|
const Sidebar = ({
|
|
24328
24359
|
connectionStatus,
|
|
24329
24360
|
transportType,
|
|
@@ -24336,11 +24367,14 @@ const Sidebar = ({
|
|
|
24336
24367
|
setSseUrl,
|
|
24337
24368
|
env,
|
|
24338
24369
|
setEnv,
|
|
24370
|
+
bearerToken,
|
|
24371
|
+
setBearerToken,
|
|
24339
24372
|
onConnect,
|
|
24340
24373
|
stdErrNotifications
|
|
24341
24374
|
}) => {
|
|
24342
24375
|
const [theme, setTheme] = useTheme();
|
|
24343
24376
|
const [showEnvVars, setShowEnvVars] = reactExports.useState(false);
|
|
24377
|
+
const [showBearerToken, setShowBearerToken] = reactExports.useState(false);
|
|
24344
24378
|
const [shownEnvVars, setShownEnvVars] = reactExports.useState(/* @__PURE__ */ new Set());
|
|
24345
24379
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-80 bg-card border-r border-border flex flex-col h-full", children: [
|
|
24346
24380
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between p-4 border-b border-gray-200", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("h1", { className: "ml-2 text-lg font-semibold", children: [
|
|
@@ -24390,17 +24424,46 @@ const Sidebar = ({
|
|
|
24390
24424
|
}
|
|
24391
24425
|
)
|
|
24392
24426
|
] })
|
|
24393
|
-
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
24394
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
24395
|
-
|
|
24396
|
-
|
|
24397
|
-
|
|
24398
|
-
|
|
24399
|
-
|
|
24400
|
-
|
|
24401
|
-
|
|
24402
|
-
|
|
24403
|
-
|
|
24427
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
24428
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
24429
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium", children: "URL" }),
|
|
24430
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
24431
|
+
Input,
|
|
24432
|
+
{
|
|
24433
|
+
placeholder: "URL",
|
|
24434
|
+
value: sseUrl,
|
|
24435
|
+
onChange: (e) => setSseUrl(e.target.value),
|
|
24436
|
+
className: "font-mono"
|
|
24437
|
+
}
|
|
24438
|
+
)
|
|
24439
|
+
] }),
|
|
24440
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
24441
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
24442
|
+
Button,
|
|
24443
|
+
{
|
|
24444
|
+
variant: "outline",
|
|
24445
|
+
onClick: () => setShowBearerToken(!showBearerToken),
|
|
24446
|
+
className: "flex items-center w-full",
|
|
24447
|
+
children: [
|
|
24448
|
+
showBearerToken ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "w-4 h-4 mr-2" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "w-4 h-4 mr-2" }),
|
|
24449
|
+
"Authentication"
|
|
24450
|
+
]
|
|
24451
|
+
}
|
|
24452
|
+
),
|
|
24453
|
+
showBearerToken && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
24454
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium", children: "Bearer Token" }),
|
|
24455
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
24456
|
+
Input,
|
|
24457
|
+
{
|
|
24458
|
+
placeholder: "Bearer Token",
|
|
24459
|
+
value: bearerToken,
|
|
24460
|
+
onChange: (e) => setBearerToken(e.target.value),
|
|
24461
|
+
className: "font-mono",
|
|
24462
|
+
type: "password"
|
|
24463
|
+
}
|
|
24464
|
+
)
|
|
24465
|
+
] })
|
|
24466
|
+
] })
|
|
24404
24467
|
] }),
|
|
24405
24468
|
transportType === "stdio" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
|
|
24406
24469
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -25352,7 +25415,7 @@ var prism = { exports: {} };
|
|
|
25352
25415
|
if (typeof document === "undefined") {
|
|
25353
25416
|
return null;
|
|
25354
25417
|
}
|
|
25355
|
-
if (
|
|
25418
|
+
if (document.currentScript && document.currentScript.tagName === "SCRIPT" && 1 < 2) {
|
|
25356
25419
|
return (
|
|
25357
25420
|
/** @type {any} */
|
|
25358
25421
|
document.currentScript
|
|
@@ -27124,9 +27187,10 @@ const params = new URLSearchParams(window.location.search);
|
|
|
27124
27187
|
const PROXY_PORT = params.get("proxyPort") ?? "3000";
|
|
27125
27188
|
const PROXY_SERVER_URL = `http://localhost:${PROXY_PORT}`;
|
|
27126
27189
|
const App = () => {
|
|
27190
|
+
var _a;
|
|
27127
27191
|
if (window.location.pathname === "/oauth/callback") {
|
|
27128
27192
|
const OAuthCallback = React$2.lazy(
|
|
27129
|
-
() => __vitePreload(() => import("./OAuthCallback-
|
|
27193
|
+
() => __vitePreload(() => import("./OAuthCallback-KG5AbO62.js"), true ? [] : void 0)
|
|
27130
27194
|
);
|
|
27131
27195
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, {}) });
|
|
27132
27196
|
}
|
|
@@ -27158,6 +27222,9 @@ const App = () => {
|
|
|
27158
27222
|
const [stdErrNotifications, setStdErrNotifications] = reactExports.useState([]);
|
|
27159
27223
|
const [roots, setRoots] = reactExports.useState([]);
|
|
27160
27224
|
const [env, setEnv] = reactExports.useState({});
|
|
27225
|
+
const [bearerToken, setBearerToken] = reactExports.useState(() => {
|
|
27226
|
+
return localStorage.getItem("lastBearerToken") || "";
|
|
27227
|
+
});
|
|
27161
27228
|
const [pendingSampleRequests, setPendingSampleRequests] = reactExports.useState([]);
|
|
27162
27229
|
const nextRequestId = reactExports.useRef(0);
|
|
27163
27230
|
const rootsRef = reactExports.useRef([]);
|
|
@@ -27178,6 +27245,7 @@ const App = () => {
|
|
|
27178
27245
|
const [selectedResource, setSelectedResource] = reactExports.useState(
|
|
27179
27246
|
null
|
|
27180
27247
|
);
|
|
27248
|
+
const [resourceSubscriptions, setResourceSubscriptions] = reactExports.useState(/* @__PURE__ */ new Set());
|
|
27181
27249
|
const [selectedPrompt, setSelectedPrompt] = reactExports.useState(null);
|
|
27182
27250
|
const [selectedTool, setSelectedTool] = reactExports.useState(null);
|
|
27183
27251
|
const [nextResourceCursor, setNextResourceCursor] = reactExports.useState();
|
|
@@ -27202,6 +27270,7 @@ const App = () => {
|
|
|
27202
27270
|
args,
|
|
27203
27271
|
sseUrl,
|
|
27204
27272
|
env,
|
|
27273
|
+
bearerToken,
|
|
27205
27274
|
proxyServerUrl: PROXY_SERVER_URL,
|
|
27206
27275
|
onNotification: (notification) => {
|
|
27207
27276
|
setNotifications((prev) => [...prev, notification]);
|
|
@@ -27232,6 +27301,9 @@ const App = () => {
|
|
|
27232
27301
|
reactExports.useEffect(() => {
|
|
27233
27302
|
localStorage.setItem("lastTransportType", transportType);
|
|
27234
27303
|
}, [transportType]);
|
|
27304
|
+
reactExports.useEffect(() => {
|
|
27305
|
+
localStorage.setItem("lastBearerToken", bearerToken);
|
|
27306
|
+
}, [bearerToken]);
|
|
27235
27307
|
reactExports.useEffect(() => {
|
|
27236
27308
|
const serverUrl = params.get("serverUrl");
|
|
27237
27309
|
if (serverUrl) {
|
|
@@ -27323,6 +27395,36 @@ const App = () => {
|
|
|
27323
27395
|
);
|
|
27324
27396
|
setResourceContent(JSON.stringify(response, null, 2));
|
|
27325
27397
|
};
|
|
27398
|
+
const subscribeToResource = async (uri) => {
|
|
27399
|
+
if (!resourceSubscriptions.has(uri)) {
|
|
27400
|
+
await makeRequest(
|
|
27401
|
+
{
|
|
27402
|
+
method: "resources/subscribe",
|
|
27403
|
+
params: { uri }
|
|
27404
|
+
},
|
|
27405
|
+
z.object({}),
|
|
27406
|
+
"resources"
|
|
27407
|
+
);
|
|
27408
|
+
const clone = new Set(resourceSubscriptions);
|
|
27409
|
+
clone.add(uri);
|
|
27410
|
+
setResourceSubscriptions(clone);
|
|
27411
|
+
}
|
|
27412
|
+
};
|
|
27413
|
+
const unsubscribeFromResource = async (uri) => {
|
|
27414
|
+
if (resourceSubscriptions.has(uri)) {
|
|
27415
|
+
await makeRequest(
|
|
27416
|
+
{
|
|
27417
|
+
method: "resources/unsubscribe",
|
|
27418
|
+
params: { uri }
|
|
27419
|
+
},
|
|
27420
|
+
z.object({}),
|
|
27421
|
+
"resources"
|
|
27422
|
+
);
|
|
27423
|
+
const clone = new Set(resourceSubscriptions);
|
|
27424
|
+
clone.delete(uri);
|
|
27425
|
+
setResourceSubscriptions(clone);
|
|
27426
|
+
}
|
|
27427
|
+
};
|
|
27326
27428
|
const listPrompts = async () => {
|
|
27327
27429
|
const response = await makeRequest(
|
|
27328
27430
|
{
|
|
@@ -27393,6 +27495,8 @@ const App = () => {
|
|
|
27393
27495
|
setSseUrl,
|
|
27394
27496
|
env,
|
|
27395
27497
|
setEnv,
|
|
27498
|
+
bearerToken,
|
|
27499
|
+
setBearerToken,
|
|
27396
27500
|
onConnect: connectMcpServer,
|
|
27397
27501
|
stdErrNotifications
|
|
27398
27502
|
}
|
|
@@ -27486,6 +27590,16 @@ const App = () => {
|
|
|
27486
27590
|
clearError("resources");
|
|
27487
27591
|
setSelectedResource(resource);
|
|
27488
27592
|
},
|
|
27593
|
+
resourceSubscriptionsSupported: ((_a = serverCapabilities == null ? void 0 : serverCapabilities.resources) == null ? void 0 : _a.subscribe) || false,
|
|
27594
|
+
resourceSubscriptions,
|
|
27595
|
+
subscribeToResource: (uri) => {
|
|
27596
|
+
clearError("resources");
|
|
27597
|
+
subscribeToResource(uri);
|
|
27598
|
+
},
|
|
27599
|
+
unsubscribeFromResource: (uri) => {
|
|
27600
|
+
clearError("resources");
|
|
27601
|
+
unsubscribeFromResource(uri);
|
|
27602
|
+
},
|
|
27489
27603
|
handleCompletion,
|
|
27490
27604
|
completionsSupported,
|
|
27491
27605
|
resourceContent,
|
|
@@ -1485,6 +1485,9 @@ video {
|
|
|
1485
1485
|
.col-span-2 {
|
|
1486
1486
|
grid-column: span 2 / span 2;
|
|
1487
1487
|
}
|
|
1488
|
+
.row-auto {
|
|
1489
|
+
grid-row: auto;
|
|
1490
|
+
}
|
|
1488
1491
|
.-mx-1 {
|
|
1489
1492
|
margin-left: -0.25rem;
|
|
1490
1493
|
margin-right: -0.25rem;
|
|
@@ -1601,6 +1604,9 @@ video {
|
|
|
1601
1604
|
.w-2 {
|
|
1602
1605
|
width: 0.5rem;
|
|
1603
1606
|
}
|
|
1607
|
+
.w-2\/5 {
|
|
1608
|
+
width: 40%;
|
|
1609
|
+
}
|
|
1604
1610
|
.w-3\.5 {
|
|
1605
1611
|
width: 0.875rem;
|
|
1606
1612
|
}
|
|
@@ -1654,18 +1660,6 @@ video {
|
|
|
1654
1660
|
--tw-translate-y: -50%;
|
|
1655
1661
|
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
|
1656
1662
|
}
|
|
1657
|
-
.transform {
|
|
1658
|
-
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
|
1659
|
-
}
|
|
1660
|
-
@keyframes pulse {
|
|
1661
|
-
|
|
1662
|
-
50% {
|
|
1663
|
-
opacity: .5;
|
|
1664
|
-
}
|
|
1665
|
-
}
|
|
1666
|
-
.animate-pulse {
|
|
1667
|
-
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
1668
|
-
}
|
|
1669
1663
|
.cursor-default {
|
|
1670
1664
|
cursor: default;
|
|
1671
1665
|
}
|
|
@@ -1704,6 +1698,9 @@ video {
|
|
|
1704
1698
|
.justify-between {
|
|
1705
1699
|
justify-content: space-between;
|
|
1706
1700
|
}
|
|
1701
|
+
.gap-1 {
|
|
1702
|
+
gap: 0.25rem;
|
|
1703
|
+
}
|
|
1707
1704
|
.gap-2 {
|
|
1708
1705
|
gap: 0.5rem;
|
|
1709
1706
|
}
|
|
@@ -1858,17 +1855,6 @@ video {
|
|
|
1858
1855
|
.bg-transparent {
|
|
1859
1856
|
background-color: transparent;
|
|
1860
1857
|
}
|
|
1861
|
-
.bg-gradient-to-r {
|
|
1862
|
-
background-image: linear-gradient(to right, var(--tw-gradient-stops));
|
|
1863
|
-
}
|
|
1864
|
-
.from-purple-500 {
|
|
1865
|
-
--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);
|
|
1866
|
-
--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);
|
|
1867
|
-
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
|
1868
|
-
}
|
|
1869
|
-
.to-pink-500 {
|
|
1870
|
-
--tw-gradient-to: #ec4899 var(--tw-gradient-to-position);
|
|
1871
|
-
}
|
|
1872
1858
|
.p-0 {
|
|
1873
1859
|
padding: 0px;
|
|
1874
1860
|
}
|
|
@@ -1945,10 +1931,6 @@ video {
|
|
|
1945
1931
|
.font-mono {
|
|
1946
1932
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1947
1933
|
}
|
|
1948
|
-
.text-3xl {
|
|
1949
|
-
font-size: 1.875rem;
|
|
1950
|
-
line-height: 2.25rem;
|
|
1951
|
-
}
|
|
1952
1934
|
.text-lg {
|
|
1953
1935
|
font-size: 1.125rem;
|
|
1954
1936
|
line-height: 1.75rem;
|
|
@@ -2109,13 +2091,6 @@ video {
|
|
|
2109
2091
|
.filter {
|
|
2110
2092
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
2111
2093
|
}
|
|
2112
|
-
.transition {
|
|
2113
|
-
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
|
|
2114
|
-
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
|
|
2115
|
-
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
|
|
2116
|
-
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2117
|
-
transition-duration: 150ms;
|
|
2118
|
-
}
|
|
2119
2094
|
.transition-all {
|
|
2120
2095
|
transition-property: all;
|
|
2121
2096
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -2134,9 +2109,6 @@ video {
|
|
|
2134
2109
|
.duration-200 {
|
|
2135
2110
|
transition-duration: 200ms;
|
|
2136
2111
|
}
|
|
2137
|
-
.duration-300 {
|
|
2138
|
-
transition-duration: 300ms;
|
|
2139
|
-
}
|
|
2140
2112
|
@keyframes enter {
|
|
2141
2113
|
|
|
2142
2114
|
from {
|
|
@@ -2154,9 +2126,6 @@ video {
|
|
|
2154
2126
|
.duration-200 {
|
|
2155
2127
|
animation-duration: 200ms;
|
|
2156
2128
|
}
|
|
2157
|
-
.duration-300 {
|
|
2158
|
-
animation-duration: 300ms;
|
|
2159
|
-
}
|
|
2160
2129
|
|
|
2161
2130
|
:root {
|
|
2162
2131
|
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
@@ -2263,12 +2232,6 @@ button[role="checkbox"] {
|
|
|
2263
2232
|
border-bottom-width: 0px;
|
|
2264
2233
|
}
|
|
2265
2234
|
|
|
2266
|
-
.hover\:scale-110:hover {
|
|
2267
|
-
--tw-scale-x: 1.1;
|
|
2268
|
-
--tw-scale-y: 1.1;
|
|
2269
|
-
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
|
2270
|
-
}
|
|
2271
|
-
|
|
2272
2235
|
.hover\:bg-accent:hover {
|
|
2273
2236
|
background-color: hsl(var(--accent));
|
|
2274
2237
|
}
|
|
@@ -2294,16 +2257,6 @@ button[role="checkbox"] {
|
|
|
2294
2257
|
background-color: hsl(var(--secondary) / 0.8);
|
|
2295
2258
|
}
|
|
2296
2259
|
|
|
2297
|
-
.hover\:from-purple-600:hover {
|
|
2298
|
-
--tw-gradient-from: #9333ea var(--tw-gradient-from-position);
|
|
2299
|
-
--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
|
|
2300
|
-
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
|
2301
|
-
}
|
|
2302
|
-
|
|
2303
|
-
.hover\:to-pink-600:hover {
|
|
2304
|
-
--tw-gradient-to: #db2777 var(--tw-gradient-to-position);
|
|
2305
|
-
}
|
|
2306
|
-
|
|
2307
2260
|
.hover\:text-accent-foreground:hover {
|
|
2308
2261
|
color: hsl(var(--accent-foreground));
|
|
2309
2262
|
}
|
|
@@ -2346,17 +2299,6 @@ button[role="checkbox"] {
|
|
|
2346
2299
|
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
|
2347
2300
|
}
|
|
2348
2301
|
|
|
2349
|
-
.focus\:ring-4:focus {
|
|
2350
|
-
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
|
2351
|
-
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
|
2352
|
-
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2355
|
-
.focus\:ring-purple-300:focus {
|
|
2356
|
-
--tw-ring-opacity: 1;
|
|
2357
|
-
--tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1));
|
|
2358
|
-
}
|
|
2359
|
-
|
|
2360
2302
|
.focus\:ring-ring:focus {
|
|
2361
2303
|
--tw-ring-color: hsl(var(--ring));
|
|
2362
2304
|
}
|
package/client/dist/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/mcp.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>MCP Inspector</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BK1TrpAN.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dt6l7sEy.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modelcontextprotocol/inspector",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Model Context Protocol inspector",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Anthropic, PBC (https://anthropic.com)",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"publish-all": "npm publish --workspaces --access public && npm publish --access public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@modelcontextprotocol/inspector-client": "0.
|
|
38
|
-
"@modelcontextprotocol/inspector-server": "0.
|
|
37
|
+
"@modelcontextprotocol/inspector-client": "^0.6.0",
|
|
38
|
+
"@modelcontextprotocol/inspector-server": "^0.6.0",
|
|
39
39
|
"concurrently": "^9.0.1",
|
|
40
40
|
"shell-quote": "^1.8.2",
|
|
41
41
|
"spawn-rx": "^5.1.2",
|