Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Martin Loop

NPM · @MARTINLOOP/MCP

One system around coding agents to run, verify, recover, and hand off software work.

Available components

0 this week 96 Trust /100

Last scanned (1 hour ago)

Scores higher than 99% of npm servers

Category Developer Tools

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Keesan12/martin-loop). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability86
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 4624 tokens (~100/item across 46 items; 24 tools + 22 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 81% of tool parameters carry a description.Partial
  • Structured output schemas are declared (96% of tools); any adoption earns full credit.Pass
Tool Safety92
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 2 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "martin_eval" implies "eval" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
    • Destructive annotations: 50% → 67% ▲ functional
    • Package version: 0.8.10 → 0.9.0 functional
  • 27 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 26 Oct 26 −13
    • Malware scan: pass → unverified ▼ security
    • CVE-2026-54285 no longer affects this package ▲ security
    • Known CVEs: fail → pass ▲ security
    • Package version: 0.8.9 → 0.8.10 functional
  • 24 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 23 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
    • Package version: 0.8.8 → 0.8.9 functional
  • 22 Oct 26 0
    • Stability: 0.97 → pass security
    • Package version: 0.8.7 → 0.8.8 functional
  • 21 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/@martinloop/mcp@0.9.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo Keesan12/martin-loop
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Keesan12/martin-loop/.github/workflows/publish-mcp.yml@refs/heads/main
Rekor log index 3679759815
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:8ea5d52448c2ab046fe302cfd9c0234abd9e259cbd86675d4d890fa06f7d6a567043128d7b1ed6eb44d37076c5d24fc9fb8a31b8cac1abf84c2e96eab

Background: How many MCP packages publish verified provenance →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 24 exposed · ~4,140 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
martin_arcade ~32

Open the presentation-only MartinLoop Arcade when the host supports MCP Apps. The Arcade cannot change governed execution or evidence.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

martin_arcade_status ~93

Read the read-only evidence projection used by the Arcade view. Provide loopId for one exact run or omit it to load the latest run. Use only for Arcade rendering; use martin_status for budget pressure or martin_run_dossier for full evidence. This tool reads persisted evidence and never changes run state.

NameTypeReqDescription
loopIdstring–Optional MartinLoop run identifier. Omit it to read the latest persisted run.
NameTypeReqDescription
attemptsintegeryesNumber of recorded attempts.
budgetobjectyes–
completedbooleanyesWhether the run is outside an active lifecycle state.
costobjectyes–
displayOutcome–yesTerminal verified-handoff outcome, or null while the run is active.
lifecycleStatestringyesCurrent persisted lifecycle state.
loopIdstringyesRun identifier represented by this Arcade snapshot.
receiptIntegrityobjectyesPersisted receipt-integrity verdict.
verificationobjectyesPersisted verifier evidence summary.
warningsarrayyesEvidence or interpretation warnings for the Arcade view.

No examples provided.

martin_cancel ~180

Publish the canonical durable cancellation signal for one active MartinLoop run. The active executor polls this signal, aborts its provider, restores governed workspace state, and records terminal evidence. Use the tool when work must stop; publication is not application proof, so use martin_status to observe terminal state or martin_pause for a reversible safe-boundary hold.

NameTypeReqDescription
filestring–Path to one canonical run record or directory. Mutually exclusive with loopId and latest.
latest––When true, targets the latest canonical run. Mutually exclusive with file and loopId.
loopIdstring–Canonical MartinLoop run identifier. Mutually exclusive with file and latest.
reasonstring–Optional non-empty reason recorded in the cancellation receipt.
runsDirstring–Optional run-store root override used to resolve loopId or latest.
NameTypeReqDescription
actionstringyesThe control action that was recorded.
applicationStatestringyesWhether the active executor has applied the control; publication alone is not application proof.
authorityBoundary–yes–
controlIdstringyesUnique receipt ID for this control action.
loopIdstringyesMartinLoop run identifier the control was applied to.
okbooleanyesWhether the control receipt was recorded.
principal–yes–
publicationStatestringyesWhether an authoritative cancellation signal was published or a cooperative receipt was recorded.
reasonstring–Human-readable reason for the control, if provided.
receiptHashstringyes–
requestedActionstringyesThe control action that was requested.
requestedAtstringyesISO 8601 timestamp when the control was recorded.
stateobjectyes–
summarystringyesHuman-readable result of the control request.

No examples provided.

martin_continue ~79

Release the exact pending cooperative pause for one active MartinLoop run. Continue is bound to that pause and does not grant approval, widen safety policy, or resume a terminal approval escalation.

NameTypeReqDescription
filestring––
latest–––
loopIdstring––
reasonstring––
runsDirstring––
NameTypeReqDescription
actionstringyesThe control action that was recorded.
applicationStatestringyesWhether the active executor has applied the control; publication alone is not application proof.
authorityBoundary–yes–
controlIdstringyesUnique receipt ID for this control action.
loopIdstringyesMartinLoop run identifier the control was applied to.
okbooleanyesWhether the control receipt was recorded.
principal–yes–
publicationStatestringyesWhether an authoritative cancellation signal was published or a cooperative receipt was recorded.
reasonstring–Human-readable reason for the control, if provided.
receiptHashstringyes–
requestedActionstringyesThe control action that was requested.
requestedAtstringyesISO 8601 timestamp when the control was recorded.
stateobjectyes–
summarystringyesHuman-readable result of the control request.

No examples provided.

martin_create_pr ~87

Create or preview a GitHub PR with a MartinLoop dossier body. Use execute=true to actually call gh.

NameTypeReqDescription
basestring––
executeboolean––
filestring––
formatstring––
latest–––
loopIdstring––
runsDirstring––
titlestring––
NameTypeReqDescription
bodystringyesGitHub-flavoured Markdown PR body containing the run dossier.
branchstring–Current branch of the run's repository, when known.
createdbooleanyesWhether a pull request was created.
executebooleanyesWhether gh was asked to create the pull request.
gradestringyesVerification grade assigned to the run.
loopIdstringyesMartinLoop run identifier used to generate the summary.
scorenumberyesNumeric verification score from 0–100.
titlestringyesSuggested GitHub pull-request title.
urlstring–URL of the created pull request.

No examples provided.

martin_doctor ~122

Read-only environment, engine, workspace, and run-store diagnostics for MartinLoop. Use first for software work, fresh installs, suspicious state, or before retries. Do not use as proof that a task is complete. Next: call martin_estimate or martin_triage_runs depending on whether this is new work or failed prior work.

NameTypeReqDescription
enginestring–Optional engine to highlight in diagnostics.
runsDirstring–Optional runs-root override resolved under the default Martin runs root.
workingDirectorystring–Optional repo-root override for doctor context.
NameTypeReqDescription
enginesobjectyes–
environmentobjectyes–
receiptScopeobjectyes–
requestedEnginestring––
runStoreobjectyes–
serverobjectyes–
statusstringyes–
summarystringyes–
warningsarrayyes–

No examples provided.

martin_dossier ~207

Read a formatted evidence summary for one MartinLoop run. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root. Set format to json, md, or github-pr; json is the default. Use after martin_run, before merge or release claims, or when sharing what happened. Do not use as a substitute for missing verifier evidence; use martin_run_dossier for the full structured record. Next: review verification results, retry, or hand off the receipt.

NameTypeReqDescription
filestring–Path to one run record or directory. Mutually exclusive with loopId and latest.
formatstring–Output format. Defaults to json.
latest––When true, loads the latest run. Mutually exclusive with file and loopId.
loopIdstring–MartinLoop run identifier. Mutually exclusive with file and latest.
runsDirstring–Optional run-store root override used to resolve loopId or latest.
NameTypeReqDescription
artifactsobjectyes–
attemptsarrayyes–
budgetobjectyes–
costobjectyes–
inspectionobjectyes–
loopobjectyes–
recentEventsarrayyes–
relatedobjectyes–
sourcestringyes–
sourceKindstringyes–
verificationobjectyes–
warningsarrayyes–

No examples provided.

martin_estimate ~162

Read-only cost, route, and pre-work burn estimate for a software objective. Use before planning/preflight when a change may spend agent time or exceed budget. Do not use for casual questions or as permission to execute. Next: call martin_plan if the estimate is acceptable, or ask for consent if budget/risk is high.

NameTypeReqDescription
budgetUsdnumber–Budget ceiling for estimation. Defaults to 5.
enginestring–Which agent CLI would be used. Defaults to claude.
fileScopearray–Optional file paths to scope the estimate.
objectivestringyesThe coding task to estimate.
workingDirectorystring–Optional workspace path for recording the estimate receipt against the same task root you plan to run.
NameTypeReqDescription
blockedStepsarray––
budgetUsdnumberyes–
compressedboolean––
compressionSummarystring––
confidencenumberyes–
enginestringyes–
expectedCostUsdnumberyes–
expectedPreworkBurnPctnumberyes–
objectivestringyes–
reasonarrayyes–
recommendedBudgetUsdnumber––
selectedModestringyes–

No examples provided.

martin_eval ~235

Grade a MartinLoop run across six dimensions — task completion, verifier health, diff discipline, regression risk, security risk, and reviewability — and return a scored merge-readiness verdict. Use after a governed run completes to decide whether the result is safe to merge or promote. Use before martin_pr_summary or martin_create_pr to confirm the run is merge-ready. Do not use to retrieve raw verification command output — use martin_get_verification_results for that. Do not use to review an existing PR body — use martin_review_pr instead. This tool reads saved run evidence and inspects local git signals; it does not modify state or contact GitHub.

NameTypeReqDescription
filestring–Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest.
latest––When true, evaluates the most recently updated run in the run store. Mutually exclusive with file and loopId.
loopIdstring–MartinLoop run identifier from the run store. Mutually exclusive with file and latest.
runsDirstring–Override the default run-store root directory. Optional.
NameTypeReqDescription
checksobjectyes–
gradestringyesOverall merge readiness grade derived from the six check dimensions.
loopIdstringyesUnique MartinLoop run identifier.
scorenumberyesNumeric evaluation score from 0–100.
sourcestringyesResolved path to the loop-record source file.
sourceKindstringyesHow the run was identified.
summarystringyesOne-paragraph plain-English evaluation summary.
warningsarrayyesNon-blocking advisory warnings from the evaluation.

No examples provided.

martin_get_attempt ~85

Load one Martin attempt summary with artifact directory references for a canonical run.

NameTypeReqDescription
attemptIndexinteger–Attempt index to inspect. Defaults to the latest attempt.
filestring–Path to a canonical loop-record.json file or run directory.
loopIdstring–Loop ID under the run store.
runsDirstring–Optional runs-root override.
NameTypeReqDescription
attemptobjectyes–
loopobjectyes–
sourcestringyes–
sourceKindstringyes–
warningsarrayyes–

No examples provided.

martin_get_run ~96

Load one Martin run and return its budget, cost, verification, artifact, and canonical path summary.

NameTypeReqDescription
filestring–Path to a canonical loop-record.json, legacy file, or run-store directory.
latest––When true, loads the most recently updated loop record in the run store.
loopIdstring–Loop ID under the run store.
runsDirstring–Optional runs-root override.
NameTypeReqDescription
artifactsobjectyes–
budgetobjectyes–
costobjectyes–
inspectionobjectyes–
loopobjectyes–
sourcestringyes–
sourceKindstringyes–
verificationobjectyes–
warningsarrayyes–

No examples provided.

martin_get_verification_results ~184

Load structured verification evidence for a MartinLoop run — verifier commands, pass/fail outcomes, and contradiction signals — from stored loop events and ledger entries. Use after a run completes to confirm whether automated verifiers passed before merging or promoting the result. Do not use to get a merge-readiness grade — use martin_eval for a scored grade with six check dimensions. Do not use for live run status — use martin_get_status instead. This tool only reads persisted run files and does not execute commands, modify state, or contact GitHub.

NameTypeReqDescription
filestring–Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId.
loopIdstring–MartinLoop run identifier from the run store. Mutually exclusive with file.
runsDirstring–Override the default run-store root directory. Optional.
NameTypeReqDescription
loopobjectyes–
sourcestringyes–
sourceKindstringyes–
verificationobjectyes–
warningsarrayyes–

No examples provided.

martin_inspect ~78

Summarise Martin Loop run records from a saved loop file or run-store directory.

NameTypeReqDescription
filestring–Optional path under the Martin runs root to a loop-record.json file, a legacy .jsonl file, or a run-store directory.
runsDirstring–Optional runs-root override resolved under the default Martin runs root.
NameTypeReqDescription
inspectionobjectyes–
latestRunobject––
lifecycleBreakdownobjectyes–
loopCountintegeryes–
portfolioobjectyes–
recentRunsarrayyes–
sourcestringyes–
statusBreakdownobjectyes–
warningsarrayyes–

No examples provided.

martin_list_runs ~127

List recent Martin runs from the run store with lightweight filters for status, lifecycle, engine metadata, and recency.

NameTypeReqDescription
adapterIdstring–Filter by attempt adapter ID.
lifecycleStatestring–Filter by lifecycle state.
limitinteger–Maximum number of runs to return. Defaults to 20.
modelstring–Filter by attempt model.
runsDirstring–Optional runs-root override.
statusstring–Filter by loop status.
updatedAfterstring–Optional ISO-8601 timestamp for recency filtering.
NameTypeReqDescription
filtersobjectyes–
latestRunobject––
lifecycleBreakdownobjectyes–
loopCountintegeryes–
recentRunsarrayyes–
runsRootstringyes–
sourcestringyes–
statusBreakdownobjectyes–
warningsarrayyes–

No examples provided.

martin_logs ~235

Read recent MartinLoop events, ledger entries, operator control receipts, and reconciled executor control-application records for a single run. Use to observe live or completed run activity, diagnose stuck or failed runs, or audit operator actions. Do not use to check run completion status — use martin_get_status instead. Do not use to retrieve verification evidence — use martin_get_verification_results instead. This tool only reads persisted run files and does not execute commands, modify state, or contact GitHub.

NameTypeReqDescription
filestring–Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest.
latest––When true, loads the most recently updated run in the run store. Mutually exclusive with file and loopId.
limitinteger–Maximum number of log entries to return, sorted by timestamp descending. Defaults to 20.
loopIdstring–MartinLoop run identifier from the run store. Mutually exclusive with file and latest.
runsDirstring–Override the default run-store root directory. Optional; defaults to the MartinLoop runs directory.
NameTypeReqDescription
entriesarrayyesLog entries sorted by timestamp descending, capped at limit.
liveobjectyes–
logCountintegeryesNumber of log entries returned after applying the limit.
loopIdstringyesUnique MartinLoop run identifier.
sourcestringyesResolved path to the loop-record source file.
sourceKindstringyesHow the run was identified: by file path, loop ID, latest flag, or runs directory.

No examples provided.

martin_pause ~184

Request a durable cooperative pause for one active MartinLoop run. The executor applies it at the next safe attempt boundary; it does not suspend or kill an in-flight provider. Provide exactly one selector: file, loopId, or latest. Use martin_status to distinguish requested from applied state; use martin_cancel to abandon work or martin_continue to release the applied pause.

NameTypeReqDescription
filestring–Path to one canonical run record or directory. Mutually exclusive with loopId and latest.
latest––When true, targets the latest canonical run. Mutually exclusive with file and loopId.
loopIdstring–Canonical MartinLoop run identifier. Mutually exclusive with file and latest.
reasonstring–Optional non-empty reason recorded in the pause receipt.
runsDirstring–Optional run-store root override used to resolve loopId or latest.
NameTypeReqDescription
actionstringyesThe control action that was recorded.
applicationStatestringyesWhether the active executor has applied the control; publication alone is not application proof.
authorityBoundary–yes–
controlIdstringyesUnique receipt ID for this control action.
loopIdstringyesMartinLoop run identifier the control was applied to.
okbooleanyesWhether the control receipt was recorded.
principal–yes–
publicationStatestringyesWhether an authoritative cancellation signal was published or a cooperative receipt was recorded.
reasonstring–Human-readable reason for the control, if provided.
receiptHashstringyes–
requestedActionstringyesThe control action that was requested.
requestedAtstringyesISO 8601 timestamp when the control was recorded.
stateobjectyes–
summarystringyesHuman-readable result of the control request.

No examples provided.

martin_plan ~191

Read-only planning step that turns an objective into bounded scope, verifier proposal, policy pack, and risk recommendation. Use for authorized software changes before preflight/run. Do not use to mutate files or replace the verifier. Next: call martin_preflight with the chosen scope, budget, and verifier.

NameTypeReqDescription
allowedPathsarray––
contextstring–Optional extra issue or bug context.
deniedPathsarray––
maxCommandsinteger––
maxFilesChangedinteger––
maxIterationsinteger––
maxMinutesinteger––
maxTokensinteger––
maxUsdnumber––
objectivestringyesThe coding objective to plan.
policyPackstring––
verificationPlanarray––
workingDirectorystring–Optional repo-root override resolved under the MCP workspace root.

Structured output declared, but exposes no named fields.

No examples provided.

martin_pr_summary ~242

Generate a GitHub-ready pull-request title and Markdown body from a completed MartinLoop run dossier, including its verification grade and score. Use after a governed run completes when you need PR copy without creating the PR. Use martin_create_pr instead to actually open the PR on GitHub. Use martin_review_pr to evaluate an existing PR body against run evidence. Use martin_eval first if you need a merge-readiness grade before generating the PR body. This tool only reads saved run evidence and does not modify the repository or contact GitHub.

NameTypeReqDescription
filestring–Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest.
formatstring–Dossier rendering format. Defaults to github-pr for PR body generation. Use md for plain Markdown or json for structured output.
latest––When true, generates the summary for the most recently updated run. Mutually exclusive with file and loopId.
loopIdstring–MartinLoop run identifier from the run store. Mutually exclusive with file and latest.
runsDirstring–Override the default run-store root directory. Optional.
NameTypeReqDescription
bodystringyesGitHub-flavoured Markdown PR body containing the run dossier.
gradestringyesVerification grade assigned to the run.
loopIdstringyesMartinLoop run identifier used to generate the summary.
scorenumberyesNumeric verification score from 0–100.
titlestringyesSuggested GitHub pull-request title.

No examples provided.

martin_preflight ~304

Read-only validation of the exact run contract before execution or spend. Use after planning and before martin_run to check engine, verifier, path scope, and budget. Do not use as execution or completion proof. Next: call martin_run if allowed, otherwise resolve the reported blocker.

NameTypeReqDescription
allowedPathsarray–Repo-relative path globs Martin may modify.
contextstring–Optional issue context carried into the run contract.
deniedPathsarray–Repo-relative path globs Martin must never modify.
enginestring–Which agent CLI would be used. Defaults to claude.
maxCommandsinteger–Estimated maximum commands allowed for the run contract.
maxFilesChangedinteger–Estimated maximum files changed for the run contract.
maxIterationsinteger–Maximum number of loop attempts.
maxMinutesinteger–Estimated wall-clock minutes allowed for the run contract.
maxTokensinteger–Maximum total tokens across all attempts.
maxUsdnumber–Hard budget ceiling in USD.
modelstring–Model override passed to the CLI.
objectivestringyesThe coding task to validate.
policyPackstring––
projectIdstring––
verificationPlanarray–Commands that must all exit 0 for completion.
workingDirectorystring–Optional repo-root override resolved under the MCP workspace root.
workspaceIdstring––
NameTypeReqDescription
executionobjectyes–
normalizedobjectyes–
okbooleanyes–
readinessobjectyes–
receiptScopeobjectyes–
summarystringyes–
warningsarrayyes–

No examples provided.

martin_review_pr ~268

Review a PR body or draft against the MartinLoop run dossier and evaluation evidence, and return a verdict with specific findings. Use when you have an existing PR body and want to check whether it accurately represents the governed run evidence. Supply prBody to review a specific body string; omit it to evaluate the auto-generated dossier body. Do not use to generate a PR body from scratch — use martin_pr_summary instead. Do not use to open or create a PR — use martin_create_pr instead. This tool only reads saved run evidence and does not modify the repository or contact GitHub.

NameTypeReqDescription
filestring–Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest.
formatstring–Dossier format used when generating the reference body for comparison. Defaults to github-pr.
latest––When true, reviews against the most recently updated run. Mutually exclusive with file and loopId.
loopIdstring–MartinLoop run identifier from the run store. Mutually exclusive with file and latest.
prBodystring–The PR body text to review. If omitted, the auto-generated dossier body is evaluated instead.
runsDirstring–Override the default run-store root directory. Optional.
NameTypeReqDescription
findingsarrayyesSpecific findings that informed the verdict.
loopIdstringyesMartinLoop run identifier the review was performed against.
summarystringyesPlain-English review summary.
verdictstringyesMerge verdict: approve_with_review means safe to merge with human review; needs_changes requires fixes; blocked means do not merge.

No examples provided.

martin_run ~338

Execute a governed MartinLoop coding run after MCP workflow admission is satisfied. Use when the user has authorized implementation, bug fixing, tests, or refactoring and doctor/estimate/plan/preflight receipts match this task. Do not use for question-only diagnosis or when policy, budget, credentials, or scope still need consent. Next: read martin_dossier and verifier evidence.

NameTypeReqDescription
allowedPathsarray–Repo-relative path globs Martin may modify.
deniedPathsarray–Repo-relative path globs Martin must never modify.
enginestring–Which agent CLI to use. Defaults to claude.
fallbackEnginesarray–Explicit ordered provider fallbacks authorized for this run. No provider is added implicitly.
maxIterationsinteger–Maximum number of loop attempts.
maxTokensinteger–Maximum total tokens across all attempts.
maxUsdnumber–Hard budget ceiling in USD.
modelstring–Optional model override passed to the primary provider.
objectivestringyesThe coding task to complete. Be specific about what needs to change.
projectIdstring–Project identifier for telemetry.
providerExecutionTimeoutMsinteger–Hard timeout for each provider coding process in milliseconds.
verificationPlanarray–Commands that must all exit 0 for the task to be considered complete.
verifyTimeoutMsinteger–Hard timeout for each verifier command in milliseconds.
workingDirectorystring–Optional repo-root override resolved under the MCP workspace root. Must stay within that safe root.
workspaceIdstring–Workspace identifier for telemetry.
NameTypeReqDescription
attemptsintegeryes–
budgetobjectyes–
costUsdnumberyes–
enginestringyes–
inspectionobjectyes–
lifecycleStatestringyes–
loopIdstringyes–
pressurestringyes–
reasonstringyes–
remainingBudgetUsdnumberyes–
remainingIterationsintegeryes–
remainingTokensinteger––
shouldStopbooleanyes–
statusstringyes–
verificationPassedbooleanyes–
workingDirectorystringyes–

No examples provided.

martin_run_dossier ~190

Read the full structured execution dossier for one MartinLoop run, including attempts, events, artifacts, verification, integrity, cost, and related discovery surfaces. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root. Use for comprehensive evidence review. Do not use for a compact state check; use martin_get_run, or use martin_dossier when formatted sharing output is required.

NameTypeReqDescription
filestring–Path to a canonical loop-record.json, legacy file, or run-store directory. Mutually exclusive with loopId and latest.
latest––When true, loads the most recently updated loop record. Mutually exclusive with file and loopId.
loopIdstring–Loop ID under the run store. Mutually exclusive with file and latest.
runsDirstring–Optional run-store root override used to resolve loopId or latest.
NameTypeReqDescription
artifactsobjectyes–
attemptsarrayyes–
budgetobjectyes–
costobjectyes–
inspectionobjectyes–
loopobjectyes–
recentEventsarrayyes–
relatedobjectyes–
sourcestringyes–
sourceKindstringyes–
verificationobjectyes–
warningsarrayyes–

No examples provided.

martin_status ~235

Read the current budget, cost, remaining limits, and stop pressure for one MartinLoop run. Provide exactly one selector: loopJson for an inline record, file for a saved record, loopId for a run-store ID, or latest for the newest run; runsDir only changes the run-store root. Use for a compact budget check. Do not use for full events or artifacts; use martin_get_run or martin_run_dossier instead.

NameTypeReqDescription
filestring–Path under the Martin runs root to a loop-record.json file, a legacy .jsonl file, or a run-store directory. Mutually exclusive with loopJson, loopId, and latest.
latest––When true, loads the most recently updated loop record. Mutually exclusive with loopJson, file, and loopId.
loopIdstring–Loop ID resolved as <runsDir>/<loopId>/loop-record.json. Mutually exclusive with loopJson, file, and latest.
loopJsonstring–JSON-serialized LoopRecord.
runsDirstring–Optional runs-root override resolved under the default Martin runs root.
NameTypeReqDescription
attemptsintegeryes–
avoidedUsdnumberyes–
budgetobjectyes–
costUsdnumberyes–
inspectionobjectyes–
lifecycleStatestringyes–
liveobjectyes–
loopIdstringyes–
pressurestringyes–
remainingBudgetUsdnumberyes–
remainingIterationsintegeryes–
remainingTokensinteger––
shouldStopbooleanyes–
sourcestringyes–
statusstringyes–

No examples provided.

martin_triage_runs ~186

Read-only prioritization of saved Martin runs that need attention. Use when the user says a prior attempt failed, asks what to fix next, or resumes an interrupted session. Do not use for a brand-new objective with no relevant run history. Next: inspect the selected run or dossier before retrying.

NameTypeReqDescription
adapterIdstring–Filter by attempt adapter ID.
includeHealthyboolean–When true, include healthy runs instead of only attention-worthy findings.
lifecycleStatestring–Filter by lifecycle state.
limitinteger–Maximum number of runs to triage. Defaults to 20.
modelstring–Filter by attempt model.
runsDirstring–Optional runs-root override.
statusstring–Filter by loop status.
updatedAfterstring–Optional ISO-8601 timestamp for recency filtering.
NameTypeReqDescription
evaluatedRunsintegeryes–
filtersobjectyes–
findingCountintegeryes–
findingsarrayyes–
runsRootstringyes–
severityBreakdownobjectyes–
sourcestringyes–
warningsarrayyes–

No examples provided.

Install

How do I install the Martin Loop MCP server?

Martin Loop runs locally as an npm package, launched with npx -y @martinloop/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @martinloop/mcp

# add to Claude Code
claude mcp add keesan12-martin-loop -- npx -y @martinloop/mcp
Common questions

What is the Martin Loop MCP server?

Martin Loop is an MCP server listed in the public MCP registry as io.github.Keesan12/martin-loop. One system around coding agents to run, verify, recover, and hand off software work. This page covers its npm package (@martinloop/mcp).

Is the Martin Loop MCP server safe to use?

Martin Loop scores 96 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Martin Loop MCP server expose?

Martin Loop exposes 24 tools: martin_run, martin_inspect, martin_status, martin_doctor, martin_plan, and 19 more. Their descriptions and schemas cost roughly 4,140 tokens of context every time the server is loaded.

Is the Martin Loop MCP server still maintained?

Martin Loop is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Martin Loop MCP server under?

Martin Loop declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.