-
MCP Tool Explorer
To work with Model Context Protocol (MCP) servers, I created a VS Code extension for inspecting and testing.
This extension connects to any MCP server, browse its capabilities, call tools with live input forms, read resources, and render prompts. All without leaving your editor.

https://github.com/jurgen178/mcp-tool-explorer
Features
Server Management
- Auto-discovery â automatically finds servers defined in
.vscode/mcp.jsonor themcp.serversworkspace setting - Manual registration â add any server on the fly via the Add Server dialog
- All three transports â
stdio, SSE, and Streamable HTTP
Tools
- Browse all tools exposed by a server with their descriptions and parameter schemas
- Form view â auto-generated input form with type-aware fields (text, number, boolean toggle, enum select)
- JSON view â write raw JSON arguments with live validation hints (missing required fields, unknown properties)
- Run tools and see syntax-highlighted results
- Previous calls â the last 6 calls per tool are shown inline with one-click re-run
Resources
- List all resources and read their contents
- Results rendered with syntax highlighting
Prompts
- Browse and render prompts with argument input support
Request History
- A dedicated History tab records every tool call, resource read, and prompt render
- See timestamp, duration, status (success / error), and expand to inspect the request arguments and response
- Re-run any past tool call directly from the timeline
JSON Viewer
- Syntax-highlighted JSON output (keys, strings, numbers, booleans, nulls each in distinct colours)
- Copy to clipboard button appears on hover over any result
Getting Started
Installation
Install from the VS Code Marketplace, or build from source (see Building).

Opening the Explorer
- Run
MCP: Open MCP Tool Explorerfrom the Command Palette (Ctrl+Shift+P)
Auto-discovery
If your workspace has a
.vscode/mcp.jsonfile, servers are discovered automatically when the extension activates. Example:{ "servers": { "my-stdio-server": { "type": "stdio", "command": "node", "args": ["./server/index.js"] }, "my-http-server": { "type": "http", "url": "http://localhost:3000/mcp" }, "my-sse-server": { "type": "sse", "url": "http://localhost:3001/sse" } } }Adding a Server Manually
Click + Add Server in the sidebar and fill in the connection details. Manually added servers persist for the lifetime of the VS Code window.
Transports
Type Config key Description stdiocommand,args,env,cwdSpawns a local process httpurl,headersStreamable HTTP (MCP 2025-03 spec) sseurl,headersServer-Sent Events (legacy) For
stdioservers, the working directory defaults to the workspace root so relative paths incommandresolve correctly.
Building
# Install dependencies npm install # Build (webview + extension) npm run build # Watch mode (extension only) npm run watch:extension # Package as .vsix npm run packageThe webview is a Vite + React app located in
webview-ui/. Runningnpm run buildat the root builds both the webview and the extension host automatically.
Project Structure
src/ extension.ts # Extension entry point types.ts # Extension-side types mcp/ McpClientManager.ts # MCP client connections (all transports) McpConfigDiscovery.ts # Server auto-discovery panels/ McpToolExplorerPanel.ts # WebView panel & message bridge webview-ui/ src/ App.tsx # Root component & state management components/ Sidebar.tsx # Server list & connection controls ToolsPanel.tsx # Tools tab ResourcesPanel.tsx # Resources tab PromptsPanel.tsx # Prompts tab HistoryPanel.tsx # History timeline tab JsonViewer.tsx # Syntax-highlighted JSON renderer AddServerModal.tsx # Add Server dialog
Requirements
- VS Code 1.85 or later
- Node.js 18+ (for building from source)
License
MIT
- Auto-discovery â automatically finds servers defined in
-
MĂ€rzschnee
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=28mm/42mm
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=35mm/52mm
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=35mm/52mm
Lossless Minecraft Version
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=30mm/45mm
1/125s f/3,5 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
1/100s f/6,3 ISO 100/21° 16-50mm f/2,8 VR f=23mm/34mm
1/160s f/4 ISO 100/21° 16-50mm f/2,8 VR f=29mm/44mm
Architektur im Kleinen: Katzentreppe
1/60s f/6,3 ISO 100/21° 16-50mm f/2,8 VR f=20mm/30mm1/40s f/3,2 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
1/160s f/2,8 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
1/400s f/2,8 ISO 100/21° 16-50mm f/2,8 VR f=37mm/55mm
1/160s f/4,5 ISO 100/21° 16-50mm f/2,8 VR f=26mm/39mm
1/60s f/4,5 ISO 100/21° 16-50mm f/2,8 VR f=19mm/29mm
1/60s f/4,5 ISO 100/21° 16-50mm f/2,8 VR f=50mm/75mm
Diese Bilder sind Teil einer neuen Arbeitsweise. -
Lossless Exposure & Contrast Adjustment in JPEG10
Lossless Tonal Adjustments in JPEG's DCT Domain: Exposure Compensation and Multi-Band Contrast
Most JPEG workflows treat exposure (brightness) and contrast as inherently "lossy": decode pixels, apply curves, then re-encode. That approach works, but it always introduces an additional step of quantization error.
In this github fork of the IJG JPEG-10 code, I added two options to
jpegtranthat operate directly on quantized DCT coefficients:-exposure-comp EV-contrast DC LOW MID HIGH
Both are applied during transcoding, so they combine naturally with existing
jpegtranoperations such as rotation, flipping, cropping, marker copying, and progressive conversion.https://github.com/jurgen178/jpeg10
Download Windows x64 binary: jpegtran.zip
Quick Usage
jpegtran [standard options] [-exposure-comp EV] [-contrast DC LOW MID HIGH] input.jpg output.jpgExamples:
# Brighten by 1 stop jpegtran -copy all -exposure-comp 1 input.jpg output.jpg # Darken by 0.5 stops jpegtran -copy all -exposure-comp -0.5 input.jpg output.jpg # Contrast (uniform: DC=LOW=MID=HIGH) jpegtran -copy all -contrast -1 -1 -1 -1 input.jpg out-contrast-u-1.jpg jpegtran -copy all -contrast -0.5 -0.5 -0.5 -0.5 input.jpg out-contrast-u-0.5.jpg jpegtran -copy all -contrast 0.5 0.5 0.5 0.5 input.jpg out-contrast-u+0.5.jpg jpegtran -copy all -contrast 1 1 1 1 input.jpg out-contrast-u+1.jpg # Contrast (band-specific examples) jpegtran -copy all -contrast 0 0 0.6 0 input.jpg out-contrast-mid+0.6.jpg jpegtran -copy all -contrast 0 0 0 0.4 input.jpg out-contrast-high+0.4.jpg jpegtran -copy all -contrast 0 0.4 0 0 input.jpg out-contrast-low+0.4.jpg # Combine: rotate 90°, brighten 0.5 EV, and add uniform contrast +0.5 jpegtran -copy all -rot 90 -exposure-comp 0.5 -contrast 0.5 0.5 0.5 0.5 input.jpg output.jpgBoth switches accept fractional values. Practical ranges:
Option    Practical range     Neutral -exposure-comp EV-3 ⊠+3 0 -contrast DC LOW MID HIGH-2 ⊠+2 0 Integrated into cPicture with live preview:
Background: DCT Coefficient Basics
A JPEG image is encoded as a grid of DCT blocks (with 8Ă8 Elements in size). Each block has one DC coefficient and 63 AC coefficients. But each MCU might have more than one block depending on the color subsampling.
-
DC[0] represents the (level-shifted) average sample value of the block. The relationship to pixel mean is:
$$\mu = \frac{DC_\text{unquant}}{N} + \text{center}$$
where $N$ is the DCT block size of 8 and $\text{center} = 2^{\text{precision}-1}$ (e.g. 128 for 8âbit).
-
AC[1..NÂČâ1] represent spatial frequency components (texture, edges, contrast).
Both DC and AC are stored quantized: the actual stored integer is $\text{round}(\text{value} / Q_k)$, where $Q_k$ is the quantization step for coefficient $k$.
-exposure-comp EVâ Exposure CompensationExposure compensation from -2EV to +2EV:
Concept
A photographic EV step corresponds to doubling (or halving) the amount of light. Applied in linear light:
$$\text{gain} = 2^{EV}$$
Because JPEG samples are gamma-coded (sRGB), pixel values cannot be multiplied directly. Instead:
- Estimate a representative level from the DC blocks.
- Compute the equivalent additive pixel-domain offset by applying the gain in linear light at that reference level.
- Translate the offset into a quantized DC delta.
- Add the delta to every DC coefficient.
Only DC is modified. AC coefficients are not modified, so local contrast and texture are preserved.
Reference Level â Log-Average
A geometric mean (log-average) of all block mean levels is used as the exposure reference:
$$\bar{L} = \exp\!\left(\frac{1}{B}\sum_{i=1}^{B} \ln(L_i + 1)\right) - 1$$
where $L_i$ is the intensity mean of block $i$ (clamped to $[0, \text{MAX}]$) and $B$ is the total number of blocks.
sRGB Linearisation
The gain is applied in linear light:
$$u_\text{ref} = \frac{\bar{L}}{\text{MAX}}$$
$$u_\text{ref,lin} = f_\text{lin}(u_\text{ref})$$
$$u_\text{new,lin} = \min(u_\text{ref,lin} \cdot \text{gain},\; 1.0)$$
$$u_\text{new} = f_\text{sRGB}(u_\text{new,lin})$$
The sRGB transfer functions used:
$$f_\text{lin}(u) = \begin{cases} u / 12.92 & u \le 0.04045 \\ \left(\dfrac{u + 0.055}{1.055}\right)^{2.4} & u > 0.04045 \end{cases}$$
$$f_\text{sRGB}(u) = \begin{cases} 12.92\,u & u \le 0.0031308 \\ 1.055\,u^{1/2.4} - 0.055 & u > 0.0031308 \end{cases}$$
Pixel-Domain Offset â Quantized DC Delta
$$\Delta_\text{samples} = (u_\text{new} - u_\text{ref}) \cdot \text{MAX}$$
Clamped to available headroom/shadow room to limit clipping, then converted to a quantized DC delta:
$$\Delta_{DC} = \text{round}\!\left(\frac{\Delta_\text{samples} \cdot N}{Q_0}\right)$$
where $N$ is the DCT block size and $Q_0$ is the DC quantization step.
Component Policy
Color space Components adjusted YCbCr, BG_YCC, YCCK Luma only (component 0) RGB/BG_RGB + subtract-green transform Green/base only (component 1) CMYK, all others All components For CMYK and YCCK the delta is computed in an inverted intensity domain ($I = \text{MAX} - \text{sample}$) so that +EV brightens and âEV darkens.
-contrast DC LOW MID HIGHâ Contrast AdjustmentContrast from -1CV to +1CV:
Concept
This option provides four separate controls (all in stops):
DCcontrols the DC coefficient (block mean)LOW,MID,HIGHcontrol the AC coefficients in frequency order
All controls are interpreted as log2 gains (stops). For a value $x$, the gain is:
$$g(x) = 2^{x}$$
So +1 doubles, -1 halves.
DC
DC is scaled by:
$$g_\mathrm{DC} = 2^{DC}$$
and applied as:
$$DC' = \mathrm{clamp}(\mathrm{round}(g_\mathrm{DC} \cdot DC))$$
AC (low/mid/high weighting)
AC coefficients are processed in zigzag order (the JPEG natural order). Let $z$ be the AC position with $z = 1 \ldots A$, where $A$ is the number of AC coefficients.
Define a normalized position:
$$t = \begin{cases} \dfrac{z-1}{A-1} & A > 1 \\ 0 & A = 1 \end{cases}$$
Triangular weights:
- low weight fades out from low frequencies
$$w_\mathrm{low} = \max(0, 1 - 2t)$$
- mid weight peaks in the middle
$$w_\mathrm{mid} = 1 - |2t - 1|$$
- high weight fades in toward high frequencies
$$w_\mathrm{high} = \max(0, 2t - 1)$$
Per-coefficient exponent and gain:
$$v(z) = LOW\cdot w_\mathrm{low} + MID\cdot w_\mathrm{mid} + HIGH\cdot w_\mathrm{high}$$
$$g(z) = 2^{v(z)}$$
Applied to each AC coefficient:
$$AC'[z] = \mathrm{clamp}(\mathrm{round}(g(z)\cdot AC[z]))$$
If
DC = LOW = MID = HIGH = X, then all coefficients are scaled by the same gain $2^X$ (uniform contrast adjustment).Component Policy
Same as
-exposure-comp:- YCbCr/BG_YCC/YCCK: luma only
- RGB subtract-green: base/green only
- otherwise: all components
Ordering and Composition
Both
-exposure-compand-contrastare applied as a post step after any geometric transform (-rot,-flip,-crop, âŠ). The tonal operations work on the final output coefficient arrays, so the order of switches on the command line does not matter.
Implementation notes
- Core implementation:
transupp.c:do_exposure_comp()anddo_contrast()transupp.h: adds new fields tojpeg_transform_info
- CLI parsing:
jpegtran.c
- Feature flags and parameters are stored in
jpeg_transform_infointransupp.h
Summary
-exposure-comp EVshifts brightness by changing only DC coefficients, with EV evaluated in linear light (sRGB transfer) at a log-average reference.-contrast DC LOW MID HIGHscales DC and AC coefficients, with AC gains varying smoothly over frequency order using low/mid/high controls.- Both run in the DCT domain and integrate naturally into the lossless-transformation workflow of
jpegtran.
Example pictures
-
Chagall Fenster der Stephanskirche in Mainz
Chagall-Fenster im Chor
Die Fenster der Stephanskirche wurden von Marc Chagall gestaltet und prÀgen den gesamten Raum. Das tiefe Blau und die warmen Farbtöne fangen das Licht auf eine Weise ein, die sofort eine besondere Ruhe entstehen lÀsst. Beim Betreten der Kirche verÀndert sich die Wahrnehmung fast unmerklich, doch sehr deutlich. Farbe, Licht und Stille verbinden sich zu einem Moment, der lange nachwirkt.
Chagall begann in der zweiten HĂ€lfte der 1970er Jahre damit, fĂŒr die Stephanskirche Fenster zu entwerfen, damals bereits fast neunzig Jahre alt. Das erste Fenster wurde 1978 eingebaut und war ursprĂŒnglich als einzelnes Werk gedacht. Doch er arbeitete weiter. Bis zu seinem Tod 1985 schuf Chagall insgesamt neun Fenster fĂŒr den vorderen Teil der Kirche. Chagall entwarf die GlasgemĂ€lde und fĂŒhrte auch die Schwarzlotmalerei eigenhĂ€ndig aus. Seine Arbeit verstand er als Zeichen der jĂŒdisch-deutschen Aussöhnung. Nach seinem Tod wurde die Arbeit an den weiteren Fenstern in St. Stephan von Charles Marq fortgesetzt.
Das tiefe Blau, das seine Arbeiten auszeichnet, verĂ€ndert den ganzen Raum. Das Licht wird weicher, die Farben wirken fast schwebend, und die Kirche bekommt eine Ruhe, die man sofort spĂŒrt.
360°-Ansicht aller Fenster, 1/40s f/2 ISO 640/29°
1/50s f/3,5 ISO 800/30° 16-50mm f/2,8 VR f=32mm/48mm
1/25s f/4 ISO 400/27° 16-50mm f/2,8 VR f=22mm/33mm
1/20s f/2,8 ISO 250/25° 16-50mm f/2,8 VR f=38mm/57mm
1/30s f/2,8 ISO 250/25° 16-50mm f/2,8 VR f=31mm/46mm
1/30s f/4,5 ISO 400/27° f=13mm
1/25s f/4 ISO 250/25° 16-50mm f/2,8 VR f=30mm/45mm
1/13s f/3,5 ISO 400/27° 16-50mm f/2,8 VR f=41mm/61mm
1/40s f/3,2 ISO 800/30° 16-50mm f/2,8 VR f=50mm/75mm
1/50s f/3,5 ISO 800/30° 16-50mm f/2,8 VR f=50mm/75mm
Interaktives Panorama Chagall Fenster der Stephanskirche 1
1/50s f/2 ISO 200/24° f=7,5mm
Interaktives Panorama Chagall Fenster der Stephanskirche 2
1/50s f/2 ISO 250/25° f=7,5mm
Klais-Orgel im St Stephan, Klang trifft Licht
Die heutige Orgel der Stephanskirche wurde von der Werkstatt Klais aus Bonn gebaut und im Jahr 2013 eingeweiht. Sie entstand nach einem Wettbewerb, bei dem der Entwurf von Klais ĂŒberzeugte, weil er sich bewusst an der Architektur und am Licht der Kirche orientiert. Die metallischen FlĂ€chen der Orgel nehmen die Farben der Chagall Fenster auf und spiegeln sie im Raum wider.
Das Instrument besitzt drei Manuale und Pedal sowie 47 Register und wurde so konzipiert, dass es den weiten Kirchenraum mĂŒhelos fĂŒllt. Die schlanke Bauweise lĂ€sst die Orgel fast wie eine Skulptur wirken, die sich nach oben öffnet und den Raum nicht dominiert, sondern begleitet.
Hier wurde eine lÀngere Belichtungszeit mit niedrigem ISO verwendet, aber die Bildstabilisierung konnte das nicht ganz ausgleichen.
0,3s f/3,5 ISO 400/27° 16-50mm f/2,8 VR f=24mm/36mm
0,4s f/2,8 ISO 250/25° 16-50mm f/2,8 VR f=20mm/30mm
Innenraum der Stephanskirche
1/5s f/2,8 ISO 800/30° 16-50mm f/2,8 VR f=16mm/24mm
1/30s f/2,8 ISO 800/30° 16-50mm f/2,8 VR f=50mm/75mm
0,3s f/3,5 ISO 1000/31° 16-50mm f/2,8 VR f=26mm/39mm
1/25s f/2,8 ISO 800/30° 16-50mm f/2,8 VR f=16mm/24mm
1/25s f/2,8 ISO 800/30° 16-50mm f/2,8 VR f=16mm/24mm
1/50s f/5,6 ISO 640/29° f=7,5mm
1/8s f/3,5 ISO 1000/31° 16-50mm f/2,8 VR f=28mm/42mm
1/13s f/3,5 ISO 1000/31° 16-50mm f/2,8 VR f=16mm/24mm
1/15s f/3,5 ISO 1000/31° 16-50mm f/2,8 VR f=16mm/24mm
1/5s f/3,5 ISO 400/27° 16-50mm f/2,8 VR f=16mm/24mm
1/25s f/4 ISO 1000/31° 16-50mm f/2,8 VR f=16mm/24mm
Kreuzgang der Stephanskirche
Der Kreuzgang der Stephanskirche gehört zu den spĂ€tgotischen Anlagen der Stadt und wurde im Jahr 1499 vollendet. Er entstand rund eine Generation nach dem Bau der Kirche und wurde von den Stiftsherren in Auftrag gegeben, die damit einen geschĂŒtzten, ruhigen Bereich an der SĂŒdseite der Kirche schufen.
Die Anlage zeigt bis heute viele Spuren ihrer langen Geschichte. An den WÀnden stehen zahlreiche Grabplatten, von denen die Àlteste aus dem Jahr 1048 stammt. Sie wurden im 19. Jahrhundert aus der Kirche hierher gebracht, um sie besser zu erhalten.
Auch der Kapitelsaal gehört zu diesem Ensemble. Seine MittelsĂ€ule wurde bereits um das Jahr 780 geschaffen und spĂ€ter als Abgabe an das Stift ĂŒbergeben, bevor sie hier ihren Platz fand.
Der Kreuzgang wurde im Laufe der Jahrhunderte mehrfach beschÀdigt, unter anderem durch die Explosion eines Pulverturms im Jahr 1857 und spÀter im Zweiten Weltkrieg. Zwischen 1968 und 1971 wurde er sorgfÀltig wiederhergestellt.
Heute wirkt der Innenhof trotz seiner Geschichte leicht und offen. Wer dort entlanggeht, spĂŒrt die Ruhe des Ortes und die vielen Schichten der Vergangenheit, die sich in den Mauern gesammelt haben.
1/40s f/5,6 ISO 100/21° f=7,5mm
1/40s f/5,6 ISO 100/21° f=7,5mm
1/60s f/5,6 ISO 100/21° f=7,5mm
1/50s f/5,6 ISO 100/21° f=7,5mm
Kreuzgang-Ecken
1/40s f/5,6 ISO 640/29° f=7,5mm
1/40s f/5,6 ISO 640/29° f=7,5mm
1/40s f/5,6 ISO 640/29° f=7,5mm
1/40s f/5,6 ISO 640/29° f=7,5mm
Kreuzgang-Eckpanorama
1/40s f/5,6 ISO 640/29° f=7,5mm
1/40s f/5,6 ISO 100/21° f=7,5mm
1/40s f/5,6 ISO 2000/34° f=7,5mm
Interaktives Panorama Kreuzgang 1 360x180
1/50s f/2 ISO 100/21° f=7,5mm
Interaktives Panorama Kreuzgang 2 360x180
1/50s f/2 ISO 100/21° f=7,5mm
AuĂenansicht
1/160s f/5,6 ISO 100/21° f=7,5mm
1/100s f/5,6 ISO 100/21° f=7,5mm
Mercator-Projektionen von:
-
Porta Nigra, Trier
Die Porta Nigra in Trier stammt aus der römischen Zeit und wurde im zweiten Jahrhundert nach Christus als Stadttor der damaligen Stadt Augusta Treverorum errichtet. Sie gilt als das am besten erhaltene römische Stadttor nördlich der Alpen. Der Bau besteht aus groĂen Sandsteinquadern, die ohne Mörtel gesetzt wurden und bis heute einen geschlossenen, massiven Eindruck vermitteln.
Der Name Porta Nigra, das schwarze Tor, entstand erst im Mittelalter und bezieht sich auf die im Laufe der Zeit nachgedunkelte OberflĂ€che des Steins. Im elften Jahrhundert wurde das Bauwerk zu einer Kirche umgebaut, was maĂgeblich zu seinem Erhalt beigetragen hat. Erst im neunzehnten Jahrhundert lieĂ Napoleon die spĂ€teren Anbauten wieder entfernen und den römischen Zustand weitgehend herstellen.
Das Panorama zeigt die Porta Nigra im Zusammenhang mit der heutigen Stadt Trier, wÀhrend die beiden Einzelaufnahmen den Blick auf Struktur, Proportionen und Details des Bauwerks lenken. So wird sichtbar, wie selbstverstÀndlich dieses römische Bauwerk noch immer Teil des Stadtbildes ist.
Interactive Panorama Porta Nigra
1/200s f/5,6 ISO 100/21° f=7,5mm
Ein Ausschnitt aus dem heutigen Panorama der Porta Nigra ist mit einer Ă€lteren Aufnahme aus dem Familienalbum kombiniert. Der Blick von frĂŒher liegt im aktuellen Bild und markiert dieselbe Stelle zu einer anderen Zeit.
Die Feldseite der Porta Nigra ist hier als Breitbild zu sehen. Geplant war ein vollstĂ€ndiges 360Ă180-Panorama, geblieben ist dieser Blick auf die RĂŒckseite. Nicht jedes Panorama wird eines, der Ort bleibt aber derselbe.
AuĂerdem war das Wetter nicht ideal. Die Belichtung lĂ€sst sich Ă€ndern, das Wetter nicht.
1/160s f/5,6 ISO 100/21° f=7,5mm
Und direkt in FuĂnĂ€he steht der Petrusbrunnen auf dem Hauptmarkt. Er wurde 1595 vom Bildhauer Hans Ruprecht Hoffmann errichtet und zĂ€hlt zu den bedeutenden Renaissancebrunnen der Stadt. Bekrönt wird er von der Figur des heiligen Petrus, dem Schutzpatron Triers, ergĂ€nzt durch Darstellungen der vier Kardinaltugenden.
Interactive Panorama Petrusbrunnen 360x180
1/250s f/5,6 ISO 100/21° f=7,5mm
Seite 1 von 53
Ăltere BeitrĂ€ge â