@mcpjam/inspector 0.1.6 → 0.2.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 CHANGED
@@ -1,5 +1,13 @@
1
1
  <div align="center">
2
2
 
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://github.com/MCPJam/inspector/blob/main/client/public/mcp_jam_dark.png">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://github.com/MCPJam/inspector/blob/main/client/public/mcp_jam_light.png">
6
+ <img width="250" alt="MCPJam logo" src="https://github.com/MCPJam/inspector/blob/main/client/public/mcp_jam_light.png">
7
+ </picture>
8
+
9
+ <br/>
10
+
3
11
  # MCPJam Inspector
4
12
 
5
13
  **The developer tool for testing and debugging MCP servers**
@@ -8,8 +16,7 @@
8
16
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=for-the-badge)](https://opensource.org/licenses/Apache-2.0)
9
17
  [![Node.js](https://img.shields.io/badge/Node.js-22.7.5+-green.svg?style=for-the-badge&logo=node.js)](https://nodejs.org/)
10
18
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.8+-blue.svg?style=for-the-badge&logo=typescript)](https://www.typescriptlang.org/)
11
-
12
- _A powerful fork of the original [mcp-inspector](https://github.com/modelcontextprotocol/inspector) with enhanced features and modern UI_
19
+ [![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2.svg?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/yF7vWWkk)
13
20
 
14
21
  </div>
15
22
 
@@ -20,7 +27,7 @@ _A powerful fork of the original [mcp-inspector](https://github.com/modelcontext
20
27
  Get up and running in seconds with the MCPJam Inspector:
21
28
 
22
29
  ```bash
23
- npx @mcpjam/inspector
30
+ npx @mcpjam/inspector@latest
24
31
  ```
25
32
 
26
33
  That's it! The inspector will launch automatically in your browser at `http://localhost:6274`.
@@ -40,9 +47,10 @@ That's it! The inspector will launch automatically in your browser at `http://lo
40
47
  This project is a fork of the [@modelcontextprotocol/inspector](https://github.com/modelcontextprotocol/inspector). Many of the features are the same but with some enhancements. Key features include:
41
48
 
42
49
  - **STDIO / SSE / Streamable HTTP** - This inspector supports all three protocols. Connect to any MCP server.
43
- - **Tool Execution** - Run server tools with live parameter input. Easily handle errors.
50
+ - **Tool Execution** - Run server tools with live parameter input. Easily debug errors.
44
51
  - **(New) LLM tool interaction** - Test your MCP server against a real LLM.
45
52
  - **Debugging tools** - Enhanced logging experience to debug your server.
53
+ - **Quality of life improvements** - Save requests, multi-server connection, saved connections.
46
54
 
47
55
  ## 📋 Requirements
48
56
 
@@ -176,6 +184,31 @@ We welcome contributions! We thought the original inspector repository moved too
176
184
  4. **Push** to the branch (`git push origin feature/amazing-feature`)
177
185
  5. **Open** a Pull Request
178
186
 
187
+ ## 🗺️ Our Roadmap
188
+
189
+ We're continuously improving the MCPJam Inspector. Here's what's coming next:
190
+
191
+ ### UI/UX Improvements
192
+
193
+ - **Fix dark mode styling** - Improve run tool button appearance in dark mode
194
+ - **Enhanced logging UX** - Address misleading red color for INFO logs
195
+
196
+ ### Core Features
197
+
198
+ - **AI parameter fill** - Smart parameter completion using AI
199
+ - **Collections** - Organize and group your MCP servers / tools
200
+ - **Multi Provider support** - Support for other LLMs like ChatGPT
201
+
202
+ ### Technical Enhancements
203
+
204
+ - **Security scanning** - Built-in vulnerability scanning tools
205
+ - **Electron App** - Desktop application for enhanced user experience
206
+
207
+ ### Ecosystem
208
+
209
+ - **Landing page improvements** - Update MCP Jam landing page
210
+ - **Documentation expansion** - Enhanced guides and tutorials
211
+
179
212
  ### Development Guidelines
180
213
 
181
214
  - Follow the existing code style (Prettier + ESLint)
@@ -202,6 +235,4 @@ This project is licensed under the **Apache License 2.0** - see the [LICENSE](LI
202
235
 
203
236
  **Made with ❤️ by the [MCPJam](https://mcpjam.com) team**
204
237
 
205
- _Empowering developers to build better MCP servers_
206
-
207
238
  </div>
@@ -1,4 +1,4 @@
1
- import { u as useToast, r as reactExports, j as jsxRuntimeExports, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-CV_1RAbM.js";
1
+ import { u as useToast, r as reactExports, j as jsxRuntimeExports, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-DJQtmX5A.js";
2
2
  import { p as parseOAuthCallbackParams, g as generateOAuthErrorDescription } from "./oauthUtils-DTcoXpSP.js";
3
3
  const OAuthCallback = ({ onConnect }) => {
4
4
  const { toast } = useToast();
@@ -1,4 +1,4 @@
1
- import { r as reactExports, S as SESSION_KEYS, j as jsxRuntimeExports } from "./index-CV_1RAbM.js";
1
+ import { r as reactExports, S as SESSION_KEYS, j as jsxRuntimeExports } from "./index-DJQtmX5A.js";
2
2
  import { p as parseOAuthCallbackParams, g as generateOAuthErrorDescription } from "./oauthUtils-DTcoXpSP.js";
3
3
  const OAuthDebugCallback = ({ onConnect }) => {
4
4
  reactExports.useEffect(() => {
@@ -978,6 +978,39 @@ video {
978
978
  background-color: hsl(var(--background));
979
979
  color: hsl(var(--foreground));
980
980
  }
981
+ .container {
982
+ width: 100%;
983
+ }
984
+ @media (min-width: 640px) {
985
+
986
+ .container {
987
+ max-width: 640px;
988
+ }
989
+ }
990
+ @media (min-width: 768px) {
991
+
992
+ .container {
993
+ max-width: 768px;
994
+ }
995
+ }
996
+ @media (min-width: 1024px) {
997
+
998
+ .container {
999
+ max-width: 1024px;
1000
+ }
1001
+ }
1002
+ @media (min-width: 1280px) {
1003
+
1004
+ .container {
1005
+ max-width: 1280px;
1006
+ }
1007
+ }
1008
+ @media (min-width: 1536px) {
1009
+
1010
+ .container {
1011
+ max-width: 1536px;
1012
+ }
1013
+ }
981
1014
  .sr-only {
982
1015
  position: absolute;
983
1016
  width: 1px;
@@ -1325,6 +1358,9 @@ video {
1325
1358
  min-width: -moz-fit-content;
1326
1359
  min-width: fit-content;
1327
1360
  }
1361
+ .max-w-4xl {
1362
+ max-width: 56rem;
1363
+ }
1328
1364
  .max-w-\[80\%\] {
1329
1365
  max-width: 80%;
1330
1366
  }
@@ -1430,6 +1466,9 @@ video {
1430
1466
  .grid-cols-3 {
1431
1467
  grid-template-columns: repeat(3, minmax(0, 1fr));
1432
1468
  }
1469
+ .grid-cols-\[2fr_3fr_3fr\] {
1470
+ grid-template-columns: 2fr 3fr 3fr;
1471
+ }
1433
1472
  .flex-col {
1434
1473
  flex-direction: column;
1435
1474
  }
@@ -1842,11 +1881,6 @@ video {
1842
1881
  --tw-gradient-to: hsl(var(--muted) / 0) var(--tw-gradient-to-position);
1843
1882
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1844
1883
  }
1845
- .from-primary {
1846
- --tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);
1847
- --tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);
1848
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1849
- }
1850
1884
  .from-purple-500 {
1851
1885
  --tw-gradient-from: #a855f7 var(--tw-gradient-from-position);
1852
1886
  --tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);
@@ -1928,9 +1962,6 @@ video {
1928
1962
  .to-muted\/50 {
1929
1963
  --tw-gradient-to: hsl(var(--muted) / 0.5) var(--tw-gradient-to-position);
1930
1964
  }
1931
- .to-primary\/90 {
1932
- --tw-gradient-to: hsl(var(--primary) / 0.9) var(--tw-gradient-to-position);
1933
- }
1934
1965
  .to-secondary\/10 {
1935
1966
  --tw-gradient-to: hsl(var(--secondary) / 0.1) var(--tw-gradient-to-position);
1936
1967
  }
@@ -2070,6 +2101,9 @@ video {
2070
2101
  .pt-2 {
2071
2102
  padding-top: 0.5rem;
2072
2103
  }
2104
+ .pt-4 {
2105
+ padding-top: 1rem;
2106
+ }
2073
2107
  .text-center {
2074
2108
  text-align: center;
2075
2109
  }
@@ -2112,6 +2146,9 @@ video {
2112
2146
  .uppercase {
2113
2147
  text-transform: uppercase;
2114
2148
  }
2149
+ .capitalize {
2150
+ text-transform: capitalize;
2151
+ }
2115
2152
  .italic {
2116
2153
  font-style: italic;
2117
2154
  }
@@ -2524,12 +2561,6 @@ h1 {
2524
2561
  color: hsl(var(--muted-foreground));
2525
2562
  }
2526
2563
 
2527
- .hover\:scale-\[1\.01\]:hover {
2528
- --tw-scale-x: 1.01;
2529
- --tw-scale-y: 1.01;
2530
- 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));
2531
- }
2532
-
2533
2564
  .hover\:border-\[\#646cff\]:hover {
2534
2565
  --tw-border-opacity: 1;
2535
2566
  border-color: rgb(100 108 255 / var(--tw-border-opacity, 1));
@@ -2608,6 +2639,11 @@ h1 {
2608
2639
  background-color: hsl(var(--primary) / 0.9);
2609
2640
  }
2610
2641
 
2642
+ .hover\:bg-red-50:hover {
2643
+ --tw-bg-opacity: 1;
2644
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
2645
+ }
2646
+
2611
2647
  .hover\:bg-red-50\/80:hover {
2612
2648
  background-color: rgb(254 242 242 / 0.8);
2613
2649
  }
@@ -2634,12 +2670,6 @@ h1 {
2634
2670
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
2635
2671
  }
2636
2672
 
2637
- .hover\:from-primary\/90:hover {
2638
- --tw-gradient-from: hsl(var(--primary) / 0.9) var(--tw-gradient-from-position);
2639
- --tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);
2640
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
2641
- }
2642
-
2643
2673
  .hover\:from-secondary\/30:hover {
2644
2674
  --tw-gradient-from: hsl(var(--secondary) / 0.3) var(--tw-gradient-from-position);
2645
2675
  --tw-gradient-to: hsl(var(--secondary) / 0) var(--tw-gradient-to-position);
@@ -2655,10 +2685,6 @@ h1 {
2655
2685
  --tw-gradient-to: hsl(var(--muted) / 0.3) var(--tw-gradient-to-position);
2656
2686
  }
2657
2687
 
2658
- .hover\:to-primary\/80:hover {
2659
- --tw-gradient-to: hsl(var(--primary) / 0.8) var(--tw-gradient-to-position);
2660
- }
2661
-
2662
2688
  .hover\:to-secondary\/20:hover {
2663
2689
  --tw-gradient-to: hsl(var(--secondary) / 0.2) var(--tw-gradient-to-position);
2664
2690
  }
@@ -2689,6 +2715,11 @@ h1 {
2689
2715
  color: hsl(var(--primary));
2690
2716
  }
2691
2717
 
2718
+ .hover\:text-red-600:hover {
2719
+ --tw-text-opacity: 1;
2720
+ color: rgb(220 38 38 / var(--tw-text-opacity, 1));
2721
+ }
2722
+
2692
2723
  .hover\:text-slate-900:hover {
2693
2724
  --tw-text-opacity: 1;
2694
2725
  color: rgb(15 23 42 / var(--tw-text-opacity, 1));
@@ -2794,12 +2825,6 @@ h1 {
2794
2825
  --tw-ring-offset-width: 2px;
2795
2826
  }
2796
2827
 
2797
- .active\:scale-\[0\.99\]:active {
2798
- --tw-scale-x: 0.99;
2799
- --tw-scale-y: 0.99;
2800
- 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));
2801
- }
2802
-
2803
2828
  .disabled\:pointer-events-none:disabled {
2804
2829
  pointer-events: none;
2805
2830
  }
@@ -3069,6 +3094,10 @@ h1 {
3069
3094
  --tw-enter-translate-y: -100%;
3070
3095
  }
3071
3096
 
3097
+ .dark\:border-border\/60:is(.dark *) {
3098
+ border-color: hsl(var(--border) / 0.6);
3099
+ }
3100
+
3072
3101
  .dark\:border-destructive:is(.dark *) {
3073
3102
  border-color: hsl(var(--destructive));
3074
3103
  }
@@ -3154,6 +3183,12 @@ h1 {
3154
3183
  background-color: rgb(15 23 42 / 0.6);
3155
3184
  }
3156
3185
 
3186
+ .dark\:from-secondary\/30:is(.dark *) {
3187
+ --tw-gradient-from: hsl(var(--secondary) / 0.3) var(--tw-gradient-from-position);
3188
+ --tw-gradient-to: hsl(var(--secondary) / 0) var(--tw-gradient-to-position);
3189
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
3190
+ }
3191
+
3157
3192
  .dark\:from-slate-800:is(.dark *) {
3158
3193
  --tw-gradient-from: #1e293b var(--tw-gradient-from-position);
3159
3194
  --tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);
@@ -3176,6 +3211,10 @@ h1 {
3176
3211
  --tw-gradient-to: #1f2937 var(--tw-gradient-to-position);
3177
3212
  }
3178
3213
 
3214
+ .dark\:to-secondary\/20:is(.dark *) {
3215
+ --tw-gradient-to: hsl(var(--secondary) / 0.2) var(--tw-gradient-to-position);
3216
+ }
3217
+
3179
3218
  .dark\:to-slate-800:is(.dark *) {
3180
3219
  --tw-gradient-to: #1e293b var(--tw-gradient-to-position);
3181
3220
  }
@@ -3259,11 +3298,20 @@ h1 {
3259
3298
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3260
3299
  }
3261
3300
 
3301
+ .dark\:shadow-secondary\/10:is(.dark *) {
3302
+ --tw-shadow-color: hsl(var(--secondary) / 0.1);
3303
+ --tw-shadow: var(--tw-shadow-colored);
3304
+ }
3305
+
3262
3306
  .dark\:hover\:border-blue-800:hover:is(.dark *) {
3263
3307
  --tw-border-opacity: 1;
3264
3308
  border-color: rgb(30 64 175 / var(--tw-border-opacity, 1));
3265
3309
  }
3266
3310
 
3311
+ .dark\:hover\:border-border\/80:hover:is(.dark *) {
3312
+ border-color: hsl(var(--border) / 0.8);
3313
+ }
3314
+
3267
3315
  .dark\:hover\:border-red-500\/60:hover:is(.dark *) {
3268
3316
  border-color: rgb(239 68 68 / 0.6);
3269
3317
  }
@@ -3285,15 +3333,35 @@ h1 {
3285
3333
  background-color: rgb(127 29 29 / 0.2);
3286
3334
  }
3287
3335
 
3336
+ .dark\:hover\:bg-red-950:hover:is(.dark *) {
3337
+ --tw-bg-opacity: 1;
3338
+ background-color: rgb(69 10 10 / var(--tw-bg-opacity, 1));
3339
+ }
3340
+
3288
3341
  .dark\:hover\:bg-slate-700\/30:hover:is(.dark *) {
3289
3342
  background-color: rgb(51 65 85 / 0.3);
3290
3343
  }
3291
3344
 
3345
+ .dark\:hover\:from-secondary\/40:hover:is(.dark *) {
3346
+ --tw-gradient-from: hsl(var(--secondary) / 0.4) var(--tw-gradient-from-position);
3347
+ --tw-gradient-to: hsl(var(--secondary) / 0) var(--tw-gradient-to-position);
3348
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
3349
+ }
3350
+
3351
+ .dark\:hover\:to-secondary\/30:hover:is(.dark *) {
3352
+ --tw-gradient-to: hsl(var(--secondary) / 0.3) var(--tw-gradient-to-position);
3353
+ }
3354
+
3292
3355
  .dark\:hover\:text-slate-200:hover:is(.dark *) {
3293
3356
  --tw-text-opacity: 1;
3294
3357
  color: rgb(226 232 240 / var(--tw-text-opacity, 1));
3295
3358
  }
3296
3359
 
3360
+ .dark\:hover\:shadow-secondary\/20:hover:is(.dark *) {
3361
+ --tw-shadow-color: hsl(var(--secondary) / 0.2);
3362
+ --tw-shadow: var(--tw-shadow-colored);
3363
+ }
3364
+
3297
3365
  .group:hover .dark\:group-hover\:text-gray-100:is(.dark *) {
3298
3366
  --tw-text-opacity: 1;
3299
3367
  color: rgb(243 244 246 / var(--tw-text-opacity, 1));