Ghost Inspector MCP
Analyze, validate and safely update Ghost Inspector end-to-end browser tests
Connector by charliemtnez · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying Ghost Inspector MCP?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/charliemtnez-ghost-inspector-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 14 read · 6 write · 2 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 22
Read from the source code; the running server may list different tools.
Read 14 · Look things up without changing anything.
gi_failure_groupsgi_find_testsgi_get_testgi_inventorygi_module_usagegi_plan_testgi_propose_repairgi_screenshot_diffgi_screenshot_statusgi_stale_testsgi_test_historygi_test_result
Show 2 more tools
gi_vacuous_testsgi_whoami
Write 6 · Create, change, send or run things.
gi_create_suitegi_duplicate_testgi_move_suitegi_move_testgi_run_testgi_validate_test
Delete 2 · Delete, drop, revoke or wipe things.
gi_accept_screenshotgi_update_test
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
GHOST_INSPECTOR_API_KEY
Other settings (environment variables or headers).
GHOST_INSPECTOR_ALLOW_RUNSGHOST_INSPECTOR_ALLOW_WRITESGHOST_INSPECTOR_BACKUP_DIRGHOST_INSPECTOR_ORG_ID
Files it touches
- Any path the agent passes to its tools
Tools (22)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
gi_accept_screenshotGhost Inspector: accept the latest screenshot as the new baselinecan change or delete dataMakes the latest result's screenshot the baseline that every later run of this test is compared against. 🔴 The API offers no way to restore an earlier baseline; the response returns `previousBaselineResult` so it can at least be found again. `expectedResultId` is required: the result whose screenshot you looked at, from gi_screenshot_status. The accept is refused if a newer run has landed since, if the latest run is still going, or if its comparison passed or did not run (there is nothing to accept then). The check is read-then-accept with no compare-and-swap, so a run landing in the moment …
gi_create_suiteGhost Inspector: create a suiteCreates an empty suite, optionally inside a folder. The folder is honoured at creation, so no follow-up move is needed. Refuses when a suite of the same name already exists in the same place, because Ghost Inspector allows the duplicate and nothing distinguishes the two afterwards. Pass allowDuplicateName only when the repetition is genuinely intended. 🔴 Getting the name right matters more than usual: this server never exposes suite deletion, because DELETE /suites/{id}/ cascades to every test inside with no version history and no recycle bin. Folders have no delete route in the API at all.…
gi_duplicate_testGhost Inspector: copy a test — the only way to get a new oneCopies an existing test, then places it in a suite and renames it in one call. Returns the new test with its steps and its dateUpdated. 🔴 This is how a test comes into existence here, and it is not a create. Ghost Inspector has no endpoint that builds a test from nothing — POST /tests/ is the listing wearing a POST — so a source test is mandatory and there is no way around that. Pick the closest existing test and adapt the copy with gi_update_test. 🔴 The copy's schedule is cleared unless keepSchedule is set. Whether a copy inherits its source's testFrequency is not verified, and in an acco…
gi_failure_groupsGhost Inspector: red tests grouped by when they started failingread-onlyRead-only. For every red test (modules excluded), finds its onset, the first failure after its last green run, and groups onsets that follow each other within `windowHours`, across suites and folders. Many tests going red within hours usually share one cause: a deploy, a shared module, a page change. Each group lists its tests with ids and the most common errors and targets, with numbers and quoted text normalised. A red test with no green run within `maxRunsPerTest` goes to `onsetUnknown` rather than being guessed. Costs one request per 50 runs per red test; narrow with folder or suite on a …
gi_find_testsGhost Inspector: find tests by name, place or stepread-onlyRead-only. Finds tests and returns their ids, which every other tool takes, with suite, folder, importOnly, passing and screenshotCompare. 🔴 `passing` is the functional result only. A test can be green there while its screenshot comparison fails: read `screenshotCompare.passing` for that, or pass `screenshotFailing: true` to list only those. Comparison settings a test leaves at null are inherited from its suite, and `screenshotCompare.enabled` resolves that. `name`, `folder` and `suite` are matched against the listing: case-insensitive substrings, or an exact id for folder and suite. They a…
gi_get_testGhost Inspector: read one test, with the token an edit requiresread-onlyReturns a single test's stored definition, identity and current state: steps, startUrl, suite, whether it is a module, its last run, and its `dateUpdated`. 🔴 `dateUpdated` is the concurrency token. gi_update_test requires it as `expectedDateUpdated` and refuses the write if the record moved since you read it. Call this first and pass the value through. Do not discover the token by sending a deliberately wrong one and reading the correct value off the refusal — that defeats the guard, which exists to prove the edit was composed against the definition that is actually stored. The steps return…
gi_inventoryGhost Inspector: account overviewread-onlyRead-only tour of the whole account: every folder, the suites inside it, and per-suite counts of passing / failing / module / not-yet-run tests, plus the names of the failing ones. Start here — no other question about this account can be answered without knowing what is in it. Import-only tests (modules: shared steps that other tests import, the equivalent of a function) are counted in their own bucket and never as failures. Marking a test import-only deletes its stored results, so every module looks permanently unrun; folding that into a failure count invents breakage that does not exist and…
gi_module_usageGhost Inspector: who imports each moduleread-onlyAnswers the one question the API cannot: if I edit this module, which tests break? Builds the reverse index of `execute` steps — for every imported test, its direct importers and its full transitive blast radius through nested chains. Run this BEFORE editing any module. Also surfaces three things that only appear once the index exists: import-only tests nobody imports (dead, or a test that lost its caller and is silently not running); imported tests NOT flagged import-only, which run standalone *and* inside their importers, so an edit changes both paths; and execute steps pointing at ids that…
gi_move_suiteGhost Inspector: move a suite to another folderMoves a suite, with all of its tests, into another folder. Reversible — unlike everything else on the write path — and the response carries `previousFolder` so the undo is one call. `expectedCurrentFolder` is required: state the folder you believe the suite is in, and the move is refused if it is somewhere else, which is the case where you are about to move the wrong suite. The result is verified by re-reading: the folder must have changed and `testCount` must be identical, since a move should never detach a test. Note that `DELETE /folders/{id}/` does not exist, so a folder left empty by a …
gi_move_testGhost Inspector: move a test to another suiteMoves one test into another suite, steps untouched. Reversible: the response carries `previousSuite`, so the undo is one call. This is also how to retire a test: move it to a suite that has no schedule. Deleting a test is not offered, because Ghost Inspector keeps no version history and no recycle bin. `expectedCurrentSuite` is required: the suite id you believe the test is in, from gi_get_test or gi_find_tests. The move is refused if it is elsewhere. 🔴 A test runs with its suite. If the destination is scheduled, the test starts running on that schedule, unattended; if it submits a form, ea…
gi_plan_testGhost Inspector: show what a validation would run, without running itread-onlyRead-only. Returns exactly what gi_validate_test would send: modules inlined, {{variables}} resolved from `variables`, the suite and the organization, and all three submit-guard layers applied. Nothing is executed, only definitions are read: no browser starts, and no organization id is needed. Use it before any validation of a test that touches production. `plan` lists the steps in order, numbered as every other report numbers them. `guard.stoppedAt` is the static cut, where a submit-shaped step became an assertion on its target. `guard.probedClicks` counts the clicks that will be probed in t…
gi_propose_repairGhost Inspector: propose a fix without applying oneread-onlyTurns a diagnosis into a concrete argument: what to change, in which test, and the token needed to write it. Read-only — it applies nothing and returns steps for you to validate first. 🔴 This server cannot see the page. It has the definition, the error and the Ghost Inspector contract, so proposals come in two kinds and are never blurred. `applicable` proposals carry a rewritten step and come from rules that hold whatever the page contains — an assertTextPresent with no target always fails, an eval without an explicit return is always undefined. `advisory` ones name a real problem that canno…
gi_run_testGhost Inspector: run a stored test for realExecutes a test exactly as saved and waits for the verdict. Use it to confirm a repair actually worked, or to get a fresh result when the stored one is stale. 🔴 Nothing is truncated here. Unlike gi_validate_test, which runs a throwaway copy and stops before anything can submit, this runs the real test against the real startUrl — in most accounts, production. If the test fills and submits a form, this posts a real record into whatever that form feeds, and nothing here can withdraw it. Because of that, a test that submits is refused unless `confirmSubmit` is set. The check inlines imported mo…
gi_screenshot_diffGhost Inspector: where a screenshot changedread-onlyRead-only. Downloads a result's full-size screenshot and a baseline's, compares them pixel by pixel, and returns the changed regions as horizontal bands (rows and columns in the full-size image, largest first), followed by PNG crops of the largest ones: baseline above a red rule, this result below. Look at the crops before gi_accept_screenshot: accepting cannot be undone. `changedShare` is this tool's own pixel count, not Ghost Inspector's `difference`, which uses an unpublished method, so the two will not match. A page that grew or content that moved down shows up as one band covering everyt…
gi_screenshot_statusGhost Inspector: screenshot comparison state of a testread-onlyRead-only. The test's screenshot-comparison settings and its latest result's comparison: enabled, passing, the measured difference against the threshold, the current screenshot (`screenshotUrl`) and the difference image (`diffUrl`). Two images are kept apart because they stop being the same one the moment a screenshot is accepted. `comparedAgainst` is the image the latest result was measured against. `currentBaseline` is the one the next run will be compared against: the newest result whose comparison passed. Accepting flips a result to passing, so right after an accept the latest result read…
Show 7 more tools
gi_stale_testsGhost Inspector: stale versus genuinely brokenread-onlyCall this BEFORE diagnosing or editing any red test. Splits failures into two piles by comparing the whole `execute` chain's `dateUpdated` against each test's last run. `staleFailures` are red tests whose definition or module chain changed AFTER the failing run. The failure describes a version that no longer exists — a colleague may already have fixed it and the test simply has not run again. Editing on top of one destroys their work, and Ghost Inspector keeps no version history of steps. One level deep is not enough here, because modules nest; the whole chain is walked. `genuineFailures` ha…
gi_test_historyGhost Inspector: a test's run history, and when its red beganread-onlyRead-only. Walks a test's results newest first, 50 per page, and returns each run's verdict and failing step (command, error, the selector that resolved), plus `lastPass` and `firstFail`, the oldest failure of the current red streak, which dates a regression. 🔴 Read `horizon` before concluding anything. Ghost Inspector purges old results. `exhausted: true` means retention ended there and nothing older exists. `exhausted: false` means more history exists than was asked for, and `streakMayContinue` says the red streak may have begun earlier: raise `runs`. A run with `passing: null` is in fligh…
gi_test_resultGhost Inspector: why is this test redread-onlyDescription is built at runtime.
gi_update_testGhost Inspector: update a test, behind four guardscan change or delete dataReplaces a test's steps, renames it, or changes its startUrl. 🔴 Ghost Inspector keeps NO version history of steps and no recycle bin, so this is permanent. Four guards run on every call and none can be turned off. (1) The whole `execute` chain's `dateUpdated` is compared against the test's last run; if anything changed after it, the test is stale and the call is refused, because a fix diagnosed from a failure that describes a deleted version is diagnosed from nothing — and a colleague may already have fixed it. (2) The complete prior definition, credentials removed, is saved to `backupFile` …
gi_vacuous_testsGhost Inspector: green tests that prove nothingread-onlyFinds tests that pass while verifying nothing. Green is the dangerous colour: a red test gets investigated, a hollow green one sits there while every report says coverage is fine. Three classes, kept apart because conflating them hides two of them. `executesNothing` runs zero steps — its definition is only `execute` calls into empty modules. `assertsNothing` runs its steps and contains no assertion anywhere in the chain, so it can only fail if a step errors; act on this one first, it is usually the largest. `worthChecking` is a SHORTLIST, not a verdict: their single assertion is the final ste…
gi_validate_testGhost Inspector: validate a definition without saving or submittingDescription is built at runtime.
gi_whoamiGhost Inspector: verify credentials and check what this server may doread-onlyConfirms the configured API key works, lists the organizations it can reach, and reports whether writing is enabled. Read-only and safe to call first when diagnosing setup. 🔴 Call this before concluding that this server cannot modify anything. Every tool is registered whether or not its gate is open, so a tool being listed says nothing about whether it will run. `writesEnabled` and `runsEnabled` are the authority — GHOST_INSPECTOR_ALLOW_WRITES and GHOST_INSPECTOR_ALLOW_RUNS. When one is false the operator must set the matching variable and restart this server; it cannot be turned on from a t…
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit
- Sep 28, 2026 (1 month ago)
- Last release
- Sep 28, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.charliemtnez/ghost-inspector-mcp- Version
- 0.4.1
- Auth
- API key
- Packages
- npm ghost-inspector-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get Ghost Inspector MCP running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
Ghost Inspector MCP. Agent Mart. https://agentmart.dev/connectors/charliemtnez-ghost-inspector-mcp (last updated 2026-10-25)