{"_id":"@askturret/mcp-explorer","_rev":"4-a2dfb417052fd88caaefb82714788ccf","name":"@askturret/mcp-explorer","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@askturret/mcp-explorer","version":"0.1.0","license":"Apache-2.0","_id":"@askturret/mcp-explorer@0.1.0","maintainers":[{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},{"name":"alprimak","email":"alprimak@gmail.com"}],"dist":{"shasum":"16e36b2b0054819c28de2d1d99dc460f28218f67","tarball":"https://registry.npmjs.org/@askturret/mcp-explorer/-/mcp-explorer-0.1.0.tgz","fileCount":22,"integrity":"sha512-yjENzzmNRkSi5c2eBP6Ai3t1labF11Zmlo3E6b4emYuyr4OMxDiUROdnZJfpGzVrxbXmSfLiQF5/vKOBf0JfYw==","signatures":[{"sig":"MEUCIQDWLghfCFi/uDEsFJhK7lOsE4LtSiZJr78zNafmynEpjQIgHMODnfk1Tuda6x38Q2iX5gi5uBgI9fUW03+wjIfLbDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104985},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c54b62a19421ed3bc620807cfc871e2c94b76576","scripts":{"lint":"echo \"Linting not yet configured\"","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"tsc"},"_npmUser":{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},"_npmVersion":"11.8.0","description":"Local Explorer UI - dev-only tool browser and safe invoke panel","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@askturret/mcp-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.0","typescript":"*","@types/jest":"^29.5.0","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-explorer_0.1.0_1788200406803_0.47103661341411995","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@askturret/mcp-explorer","version":"0.1.1","keywords":["askturret","mcp","server","client"],"license":"Apache-2.0","_id":"@askturret/mcp-explorer@0.1.1","maintainers":[{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},{"name":"alprimak","email":"alprimak@gmail.com"}],"dist":{"shasum":"b52dbd327f22983230edb99512cd8c09c3bd121d","tarball":"https://registry.npmjs.org/@askturret/mcp-explorer/-/mcp-explorer-0.1.1.tgz","fileCount":24,"integrity":"sha512-vceVweaI44xvCDMg9hQ01QNrza7uEoPUOcPrGAGJeu424kPQb7MnXFkV/WA3aVNbiZsJvndgwpXbldaClyHBgQ==","signatures":[{"sig":"MEUCIHGKA29SM4Z5sJEHwoRgT2XHEekE+UqlhynsyASgD7yZAiEAwdHJ4svuu3HmgG1XCneFe/TsXRtoi6pKDCTfDNHqqVs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126636},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"69d35f79c070c6322357902e786a527261463d3f","scripts":{"lint":"echo \"Linting not yet configured\"","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"tsc"},"_npmUser":{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},"_npmVersion":"11.8.0","description":"Local Explorer UI - dev-only tool browser and safe invoke panel","directories":{},"_nodeVersion":"25.5.0","dependencies":{"@askturret/mcp-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.0","typescript":"*","@types/jest":"^29.5.0","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-explorer_0.1.1_1788458643973_0.9165183190078865","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@askturret/mcp-explorer","version":"0.1.2","keywords":["askturret","mcp","server","client"],"license":"Apache-2.0","_id":"@askturret/mcp-explorer@0.1.2","maintainers":[{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},{"name":"alprimak","email":"alprimak@gmail.com"}],"homepage":"https://github.com/askturret/mcp#readme","bugs":{"url":"https://github.com/askturret/mcp/issues"},"dist":{"shasum":"8eccd31a5213c3ca51b9911b3efaf223b6c53211","tarball":"https://registry.npmjs.org/@askturret/mcp-explorer/-/mcp-explorer-0.1.2.tgz","fileCount":24,"integrity":"sha512-NNoyPWZ9dZkQaFj1mqM+XEp+h3l4h+2doQo4G1FXVLHo5disI4smhIDjOMrNC4kKV5AM0gOIAVk7CfEcI9+1sA==","signatures":[{"sig":"MEUCIQDwS/y/MeujGy4qq+cHIjbdlUvMiQQmDV8y/C/rhUEftwIgYeuWgOaUCeCISO8Ga4T8n4M2W5OYdTL4YtZERRTC+qE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@askturret%2fmcp-explorer@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":126930},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ec334b34d1a55df0d4f8c2d5f69c7e80679476e5","scripts":{"lint":"echo \"Linting not yet configured\"","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"tsc"},"_npmUser":{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},"repository":{"url":"git+https://github.com/askturret/mcp.git","type":"git","directory":"packages/explorer"},"_npmVersion":"10.8.2","description":"Local Explorer UI - dev-only tool browser and safe invoke panel","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@askturret/mcp-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.0","typescript":"*","@types/jest":"^29.5.0","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-explorer_0.1.2_1788607220713_0.12300547345830126","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@askturret/mcp-explorer","version":"0.2.0","description":"Local Explorer UI - dev-only tool browser and safe invoke panel","type":"module","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/askturret/mcp.git","directory":"packages/explorer"},"homepage":"https://github.com/askturret/mcp#readme","bugs":{"url":"https://github.com/askturret/mcp/issues"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsc","test":"NODE_OPTIONS=--experimental-vm-modules jest","lint":"echo \"Linting not yet configured\""},"dependencies":{"@askturret/mcp-core":"^0.2.0"},"devDependencies":{"@jest/globals":"^29.7.0","@types/jest":"^29.5.0","jest":"^29.7.0","ts-jest":"^29.1.0","typescript":"*"},"keywords":["askturret","mcp","server","client"],"_id":"@askturret/mcp-explorer@0.2.0","gitHead":"01db00fa88fb96dac636f82fc70bd248e834c9c7","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-4Q7KNuPfqjuYDioU5JCT6e/R3BBDMPuRNMnV/WTz85e/sgdmGWCLga96CWrF/enKuY0JvPZyulhRb9pv+hdVVQ==","shasum":"869b932c75253c0528bb722b388d252d1555a5c1","tarball":"https://registry.npmjs.org/@askturret/mcp-explorer/-/mcp-explorer-0.2.0.tgz","fileCount":24,"unpackedSize":125655,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@askturret%2fmcp-explorer@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAPimMWyN9hjTs2X/aBFpXa2ApuSsF6HA/4nQl1gtCohAiEA8dxVxaBrCFX/DmOMMf/OHsypcTy3vHDHaRfSPS8uSlo="}]},"_npmUser":{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},"directories":{},"maintainers":[{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},{"name":"alprimak","email":"alprimak@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-explorer_0.2.0_1789133927133_0.352144693642211"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T18:20:06.628Z","modified":"2026-09-11T13:38:47.620Z","0.1.0":"2026-08-31T18:20:06.944Z","0.1.1":"2026-09-03T18:04:04.102Z","0.1.2":"2026-09-05T11:20:20.851Z","0.2.0":"2026-09-11T13:38:47.253Z"},"bugs":{"url":"https://github.com/askturret/mcp/issues"},"license":"Apache-2.0","homepage":"https://github.com/askturret/mcp#readme","keywords":["askturret","mcp","server","client"],"repository":{"type":"git","url":"git+https://github.com/askturret/mcp.git","directory":"packages/explorer"},"description":"Local Explorer UI - dev-only tool browser and safe invoke panel","maintainers":[{"name":"didi178","email":"dmitry.stepanov37@gmail.com"},{"name":"alprimak","email":"alprimak@gmail.com"}],"readme":"# @askturret/mcp-explorer\n\nLocal, **dev-only** Explorer UI — a Swagger-like human view of the effective MCP\ntool surface, with a safe test-invoke panel.\n\nIt renders from the same `RegistrySnapshot` the transport serves, so what it\nshows cannot drift from what `tools/list` returns, and it invokes tools through\nthe same `/mcp` endpoint any MCP client uses. There is no Explorer-private\nendpoint.\n\n## What it shows\n\n- Every visible tool in the current snapshot, filterable.\n- Per-tool detail: description, input **and output** schema as a JSON Schema\n  tree with per-field docs, effect flags, and executor type.\n- A test-invoke form derived from the input schema, submitted as `tools/call`.\n- A response viewer showing the pretty-printed result or the typed error.\n- Registry hash, version and `createdAt` in the header.\n\n## Usage from an adapter\n\n```ts\nimport { buildExplorerViewModel, renderExplorerHtml } from '@askturret/mcp-explorer';\n\nconst html = renderExplorerHtml(buildExplorerViewModel(registry.current(), basePath));\n```\n\n`buildExplorerViewModel` is pure — snapshot in, view model out — so an adapter\nonly has to serve the string. The Express adapter mounts it at\n`${basePath}/explorer`.\n\n### Diagnostic panels (#56)\n\n`renderExplorerHtml` takes an optional second argument — the six diagnostic\npanels from `buildExplorerPanels`:\n\n```ts\nconst html = renderExplorerHtml(model, buildExplorerPanels({ /* live state */ }));\n```\n\nOmit it and the page is unchanged apart from per-tool provenance, which rides\non the view model and needs nothing from the host. Adapters expose this as the\n`explorerPanels` option, called per request. See\n[`docs/explorer-panels.md`](https://github.com/askturret/mcp/blob/main/docs/explorer-panels.md).\n\nEverything embedded in the page is redacted at serialization, so a hand-built\npanel set cannot route around the pipeline the builders apply.\n\n## Production\n\nPer §10.1 invariant 9, the Explorer is **disabled by default when\n`NODE_ENV=production`**, where the route returns `404`. An operator can opt in\nexplicitly (`enableExplorer: true`), which is not blocked but logs a startup\nwarning naming the setting.\n\nEnabling it in production is risky and deliberately so: the Explorer publishes\nthe full tool surface and can invoke tools. **It has no authentication of its\nown** — it inherits only whatever the host app puts in front of\n`${basePath}/explorer`. Protecting that route is the adopter's responsibility.\n\nExecutor `config` is never sent to the browser; only the executor *type* is,\nsince config can hold upstream URLs and credential references.\n\n## Delivery\n\nA single self-contained HTML document with inline CSS and JS — no framework, no\nbuild step, no runtime dependency. A typical page is **~5 KB gzipped**, against\nthe 100 KB budget in the architecture doc.\n\n## Scope\n\nThis is the v0.1 developer inner-loop. Provenance UI, policy explanation,\ntrace/audit history, breaker/bulkhead state, version diff and the\nprincipal-aware effective surface ship with their owning epics.\n","readmeFilename":"README.md"}