Skip to main content
Glama

forge-mcp

The director of the forge pipeline. An MCP server that tells Claude Code which phase to run next, which subagent must run it, and what it must produce, then validates the evidence before letting the flow advance.

No phase is executed by the main agent. Each one goes to a dedicated subagent with the phase's full criterion; the main agent directs β€” it asks for the phase, launches the subagent, and closes the phase with its evidence. forge never runs the work itself, and never blocks either: see the contract for who enforces what.

πŸ‡ͺπŸ‡Έ LΓ©elo en espaΓ±ol


The idea

A long piece of work β€” design a feature, build it, test it, ship it β€” is easy to do out of order, skip a step of, or declare "done" without proof. forge turns that flow into a pipeline of phases that can only advance in order, and only when each phase hands back real evidence.

  • forge says which phase is next, which subagent runs it, and exactly what it expects (the full criteria, not a summary) β€” as a brief ready to hand to an Agent.

  • A dedicated subagent executes the phase β€” reading code, writing it, running tests. The main agent directs; it does not build.

  • The subagent records what it decided and why as it goes, so the reasoning outlives the session instead of dying with the context.

  • The phase is reported done with evidence; forge validates it and advances.

  • You cannot skip a phase, cannot close one with empty or fake evidence, and cannot finish before every phase is closed.

Why a subagent and not the main agent: 13 phases of full criteria would flood the main context, and each phase deserves to start clean. The main agent keeps the thread with the user; the subagents keep the work.

The state lives in SQLite (node:sqlite, a Node built-in β€” no native build step), so a run resumes in any session: Claude's context does not survive a close, a compaction or picking up the next day β€” the flow's state does.


Related MCP server: Vibe-Coder MCP Server

The 13 phases

classify β†’ clarify β†’ setup β†’ precondition β†’ design β†’ plan β†’ build
        β†’ gates β†’ qa β†’ reconcile β†’ contraste β†’ reflect β†’ deliver

Phase

Subagent

What it does

Asks the user

Optional

classify

analyst

Classify the request's nature (QUESTION / MICRO / STANDARD / HIGH-RISK) and scope.

clarify

analyst

Detect ambiguities that change the product, with options and consequences.

yes

setup

architect

Decide the stack and its REAL versions (via npm view / official CLIs, never from memory); scaffold, install deps, strict linter.

precondition

analyst

Verify the conditions to safely start the build are actually met (tools present, env ready).

design

architect

Before coding: brainstorm the solution, a UX/UI design brief, a QA plan with edge cases, a code-quality guide β€” persisted as artifacts.

plan

architect

Decompose the work into atomic tasks with disjoint file ownership, grouped into independent blocks.

build

builder

Implement the plan β€” reusing what exists, never rewriting a whole file, respecting the strict linter.

gates

verifier

Run the repo's real gates (strict lint + build + tests). Truth is the exit code, not the model's self-report.

qa

qa

Verify for real: run the app end to end, then ATTACK it (odd inputs, limits, impossible states) and report what broke.

reconcile

builder

Only if parallel work may have duplicated logic or created conflicts β€” resolve them.

yes

contraste

reviewer

An independent review that does NOT know the QA verdict, exploring the finished build with fresh eyes.

reflect

analyst

Look back on how this run went (what passed, what fell back, what failed) and extract lessons.

deliver

releaser

Publish per the request (remote push, deploy). Never reports "online" without a real URL; skips explicitly with a reason if it does not apply.

yes

Each phase carries a goal (short instruction), a full systemPrompt (the complete criteria, handed to the subagent verbatim), an agent role, a delegationBrief (one subagent or several in parallel β€” build opens by block, contraste demands a blind one), the skills to load, and flags for whether it needs the user or is optional. All in src/phases.ts.

The agent field is a role, not a specific agent name, because every project has its own: the main agent resolves the role against whatever agents exist and falls back to a general-purpose one.

One consequence worth stating: clarify runs in a subagent, but the subagent does not ask the user. It detects the ambiguities and returns them; the main agent brings them to the user, because it is the one holding the conversation.


Evidence is validated, not trusted

forge does not accept "done" as a string. forge_complete_phase validates the evidence each phase must hand back, and rejects the close if it does not hold up:

  • gates requires the real exit codes (lint / build / test) and they must all be 0.

  • qa requires a structured result: it passed, and it was actually attacked.

  • clarify (a user decision) requires an explicit userConfirmed.

  • An optional phase can only be skipped with a stated reason.

So a phase cannot be closed with an invented summary. The pipeline advances on proof.


The skills library (128)

src/skills.ts + the skills/ folder ship 128 skills, each with its own SKILL.md, versioned in the repo (forge is self-contained β€” it does not depend on anything external for these). Each phase declares which skills it loads; the domain map (SKILL_MAP) says which skills belong to which domain. Skills load on demand β€” Claude asks for the list with forge_skills and the content of a specific one with forge_skill(name), never all at once.


The 10 tools

Tool

What it does

forge_start(request, cwd)

Start a new run; returns the first phase (classify) as a delegation brief.

forge_status(runId?)

Which phase a run is in and its progress ([x] closed, [>] current, [ ] pending).

forge_next(runId?)

The CURRENT phase as a brief ready to hand to a subagent: which role to use, how to split it, the skills to load, and the full systemPrompt to pass verbatim.

forge_start_phase(runId?, agentId)

Called right BEFORE launching the subagent. Starts the phase clock and records who runs it.

forge_log(runId?, kind, title, detail?)

Record a decision (with its reason), an evidence (real exit codes, QA verdict), or a note in the timeline.

forge_complete_phase(runId?, summary, evidence, agentId?)

Close the current phase with validated evidence, then advance. If it was the last phase, mark the run done.

forge_timeline(runId?, write?)

Render the run: Markdown with a Mermaid gantt + trackable JSON. Writes .ai/forge/<runId>.md and .json unless write=false.

forge_tasks()

List active runs β€” to resume from any session without re-reading context.

forge_skills(phase?)

List the full skills library, or filtered by domain if a phase is given.

forge_skill(name)

Return a specific skill's SKILL.md to load and apply.

The phase token

forge_next embeds a [forge:<runId>:<phase>] marker in the subagent prompt. It exists so the forge-flow gate can check, when it sees an Agent call, that the prompt really is the current phase's brief β€” without it, "I delegated this phase" would be self-report and an invented brief would pass.


The timeline

Every run keeps an append-only log of what actually happened: which subagent ran each phase and how long it took, what was decided and why, and the real verification evidence. It lives in SQLite next to the flow state, so it survives a session close or a compaction.

forge_timeline renders it two ways, because they are read differently:

  • Markdown with a Mermaid gantt β€” to look at. GitHub and VS Code render it as-is, so no tool or server is needed to see where the time went.

  • JSON β€” to track. Stable and diffable between runs, so you can mechanically compare whether the flow is getting better.

gantt
    title Time per phase
    dateFormat x
    axisFormat %H:%M:%S
    section Pipeline
    Build (builder) :done, 1788703521000, 1788703941000
    Deterministic gates (verifier) :done, 1788703941500, 1788704019500
    QA - it works and holds (qa) :done, 1788704020000, 1788704280000

Both are written to .ai/forge/<runId>.md and .ai/forge/<runId>.json inside the project, so the record is versioned alongside the code it documents.


Install

Requires Node β‰₯ 22.5 (for node:sqlite). Nothing else β€” no native build step, no database to provision.

On any machine (published package)

Add this to Claude Code's .mcp.json (project) or your user config. There is nothing to install first: npx fetches it on the first run.

{
  "mcpServers": {
    "forge": { "command": "npx", "args": ["-y", "@devrik-tools/forge-mcp"] }
  }
}

Pin a version when you want the same one everywhere: "args": ["-y", "@devrik-tools/forge-mcp@1.1.0"].

Prefer it resident rather than fetched each time:

npm install -g @devrik-tools/forge-mcp
{ "mcpServers": { "forge": { "command": "forge-mcp" } } }

Restart the session (or run /mcp) and check that forge_tasks answers.

Checking what you actually have

/mcp lists forge with the version it announces in its handshake, which is read from the installed package.json β€” so that number IS the installed version. (Before 1.1.1 it was pinned to 0.1.0 and told you nothing; if you see 0.1.0, you are on an older build no matter what npm says.)

From a shell:

npm view @devrik-tools/forge-mcp version   # what the registry has
npm ls -g @devrik-tools/forge-mcp          # what this machine has, if installed globally

npx keeps its own cache, so a machine can run an older copy than the registry holds until the cache turns over. npx -y @devrik-tools/forge-mcp@latest forces the current one.

What does NOT travel with the install. The state lives in a global SQLite file at ~/.forge/forge-mcp.db, which is per machine: a second PC starts with no runs, and a run started on one machine is not visible on the other. Point FORGE_MCP_DB at a synced path if you want them to share, and read the concurrency note below before you do β€” two machines writing one SQLite file over a sync service is not the same as two processes on one disk.

The 128 skills ship inside the package, so a fresh machine needs no extra fetch for them β€” at the price of size: 4.1 MB packed, 12.9 MB on disk, 901 files, 874 of them skills. npx pays that once and caches it. That trade is the point of the design, not an oversight: forge carries its own arsenal instead of depending on whatever happens to be installed.

From a clone (to work on forge itself)

git clone https://github.com/DevRik99/forge-mcp
cd forge-mcp
npm install
npm run build
{ "mcpServers": { "forge": { "command": "node", "args": ["dist/server.js"] } } }

How a run resumes

The state lives in a single global SQLite DB at ~/.forge/forge-mcp.db (override with FORGE_MCP_DB), so every project shares one store and runs are told apart by their cwd. Two tables:

  • runs: one row per run (id, request, cwd, current_phase, status, timestamps).

  • phase_artifacts: one row per closed phase (run_id, phase, summary, closed_at, started_at, agent_id) β€” the real decision/artifact reported, not a boolean flag, plus who ran it and how long it took.

  • timeline: append-only, one row per event (phase_started, phase_closed, decision, evidence, note) with its agent and timestamp.

After a lost session (close, compaction, next day), any new Claude session with this MCP connected can:

  1. Call forge_tasks() to see which runs are still active and in what phase.

  2. Call forge_next(runId) to get the current phase's full systemPrompt again β€” Claude does not need to remember anything; forge hands it back verbatim.

  3. Read the closed phases' artifacts via forge_status so nothing already decided (e.g. in clarify) is re-asked.


Guarantees (and honest limits)

forge enforces: the phase order, closing every phase before finishing, and validated evidence per phase (no fake gates/qa, no skipping user decisions or optional phases without a reason). Under concurrency, closing a phase is atomic β€” a stale double-close is rejected, not silently applied.

forge cannot stop you from editing the project without using it at all, and it cannot stop the main agent from doing a phase itself β€” an MCP only sees its own tools, not your Edit/Write/Bash. Trying to enforce from here would be a paper lock.

That half is the forge-flow gate's job in claude-gates, which does see those calls and can tell whether they come from the main agent or from a subagent. The two pair like this:

forge-mcp

claude-gates

Sees

only its own tools

every Edit/Write/Bash/Agent, and who made it

Guarantees

the criterion is complete; no phase closes on fake evidence

the main agent does not touch the code; only a subagent does

Role

director β€” never blocks

lock β€” knows nothing about phases

They are coupled by exactly one thing: the SQLite DB. The gate reads it, forge writes it, neither imports the other's code. Full contract in PROTOCOL.md.

License

MIT.

Available Tools

7 tools
forge_complete_phaseA

Closes the CURRENT phase with a summary of what you did/decided, and advances to the next one. The summary is persisted (for resuming). Do not close a phase you have not actually done. Phases with a completionSchema (gates, qa, design, plan), phases needing user confirmation, and optional phases require structured evidence matching their contract β€” see the rejection message if it is missing or invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdNoRun id; optional when exactly one run is active.
summaryYesWhat you did/decided in this phase (the artifact that closes it).
evidenceNoStructured evidence closing this phase (required shape depends on the phase): gates needs {lintExit,buildExit,testExit} all 0; qa needs {passed:true,failures,adversarial:{attacksTried,...}}; design needs {brainstormDone,designBriefDone,qaPlanDone,qualityGuideDone} all true; plan needs {leaves:[{leafId,block,owns},...]}; a phase needing user input needs {userConfirmed:true}; skipping an optional phase needs {skipped:true,reason}.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does a good job: it discloses side effects (closes current phase, advances to next, persists summary) and warns about required structured evidence. It could additionally explain reversibility or what happens to the current phase after closure, but it is already genuinely informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main action is front-loaded, and the evidence caveat logically follows immediately. Every clause earns its place, including the guardrail against closing uncompleted phases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects, no annotations, and no output schema, the description covers the essential invocation context: what the tool does, what is persisted, when evidence is required, and how invalid evidence is surfaced. It does not describe the return value, but that is not critical for correct invocation here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some framingβ€”'summary is persisted' and 'evidence matching their contract'β€”but the input schema already provides detailed evidence shapes for gates, qa, design, plan, user confirmation, and optional phases. runId is left to the schema, which adequately covers it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb/resource/effect: 'Closes the CURRENT phase with a summary...' and 'advances to the next one.' It also conveys the tool's core contract around persisted summaries and structured evidence. However, it does not explicitly contrast itself with sibling tools like forge_next, so it misses the full sibling-differentiation benchmark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-not: 'Do not close a phase you have not actually done.' It also specifies when evidence is required (completionSchema phases, user-confirmation phases, optional phases) and points to the rejection message for invalid evidence. It does not explicitly name alternatives or say 'use forge_next instead', so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_nextA

Returns the CURRENT phase with its detailed goal: what to do now. Call this when you are unsure what comes next.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdNoRun id; optional when exactly one run is active.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It clarifies that despite the 'next' name, the tool does not advance anythingβ€”it 'returns' the current phase and its goal, which implies a read-only, non-mutating operation. It stops short of explicitly stating side effects or prerequisites, but the wording is sufficiently indicative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core behavior and then provides the direct usage condition, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers what the tool returns and when to call it. It could additionally note behavior when no run is active or when multiple runs exist, but the schema already hints at the single-active-run condition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the optional runId parameter is fully documented in the schema. The description adds no additional parameter meaning, which places it at the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it 'Returns the CURRENT phase with its detailed goal.' It clarifies exactly what the tool provides and frames it as guidance for 'what to do now,' which distinguishes it from siblings like forge_status and forge_complete_phase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger: 'Call this when you are unsure what comes next.' It clearly communicates when the tool should be used, though it does not explicitly mention when not to use it or name alternative tools for exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_skillA

Returns the SKILL.md content of a skill so you can load and apply it in the current phase.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSkill name (a folder in the arsenal).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It clearly indicates a read-only retrieval behavior by saying 'Returns... content', but it does not disclose behavior for missing skills, error handling, or whether applying the skill has side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, purposeful sentence with no filler. It front-loads the return value and immediately states the intended usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one well-documented parameter, the description provides enough context to call it correctly: it names the input, states the output, and explains why the agent would use it. It does not describe output format, but for SKILL.md content this is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'name' is fully described in the schema as 'Skill name (a folder in the arsenal)', giving 100% coverage. The description adds no additional parameter details, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns'), a specific resource ('SKILL.md content of a skill'), and the intended purpose ('load and apply it in the current phase'). This clearly distinguishes it from sibling tools like forge_skills, which likely lists skills, and forge_complete_phase, which advances phases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when you need a skill's SKILL.md content to apply it in the current phase. However, it gives no explicit guidance on when not to use it or how it relates to alternatives such as forge_skills for finding skills.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_skillsA

Lists available skills. With a phase key (brainstorm/design/frontend/quality/qa/monetization/product), returns the skills that phase must load (from the SKILL_MAP). Without it, lists the whole arsenal.

ParametersJSON Schema
NameRequiredDescriptionDefault
phaseNoPhase key to filter skills by (optional).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It clearly indicates a read-only listing behavior, explains the conditional filtering, and names the data source (SKILL_MAP). It does not discuss error cases or return structure, but for a simple list operation the disclosed behavior is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero wasted words. The main purpose is front-loaded, and the conditional variations are presented in a logical order that an agent can parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: one optional parameter, no required inputs, and no output schema. The description covers the purpose, the valid parameter values, and the behavioral difference between the two call forms. It leaves minor ambiguity about the exact return shape, but nothing essential for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the phase parameter at 100% coverage, establishing a baseline of 3. The description adds meaningful value beyond the schema by enumerating the valid phase keys and explaining how the parameter changes the result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Lists available skills.' It further clarifies two modes of operation (with or without a phase key), making the purpose unambiguous. It does not explicitly differentiate itself from sibling tools like forge_skill, though the behavior is specific enough to infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on when to use each mode: provide a phase key to get phase-specific skills, omit it to list everything. It does not mention alternatives or when not to use the tool, but the conditional usage context is explicit and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_startA

Start a new forge pipeline run for a request. Returns the first phase (classify) and its goal. From here, follow the flow phase by phase using forge_next and forge_complete_phase β€” do not skip phases.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYesProject directory where the pipeline runs.
requestYesThe user's request, verbatim.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden, and it does disclose the key behavior: starting a run and returning the first phase, with an imperative not to skip phases. It doesn't mention permissions, persistence, or cancellation, but for a start-tool the main behavioral contract is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, with the core purpose first, then return behavior, then workflow guidance. Every sentence carries information needed for correct use, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter start tool with no output schema, the description provides the essential return info (first phase and goal), the required inputs are fully documented in the schema, and the follow-up tool sequence is explicit. An agent has enough context to invoke it correctly and continue the pipeline.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters clearly ('Project directory where the pipeline runs' and 'The user's request, verbatim'). The description restates the request concept but adds no new meaning or formatting details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Start'), a specific resource ('a new forge pipeline run'), and a concrete entry point ('first phase (classify) and its goal'). This clearly differentiates it from sibling tools like forge_next and forge_complete_phase, which handle later phases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use the tool (at the beginning) and explicitly routes the agent through the subsequent flow: 'follow the flow phase by phase using forge_next and forge_complete_phase β€” do not skip phases.' This both names alternatives and gives an exclusion (no skipping).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_statusA

Shows which phase a run is in and its progress (done / pending). If no runId is given and exactly one run is active, uses that one.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdNoRun id; optional when exactly one run is active.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the tool shows phase and progress and that it auto-selects the active run when runId is omitted, which is helpful. However, it does not explain what happens when runId is omitted and there are zero or multiple active runs, nor any error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, purposeful sentences. The main purpose is front-loaded, and the conditional behavior is stated efficiently without filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status tool with one optional parameter and no output schema, the description adequately covers what the tool reports and how runId selection works. It could mention edge-case behavior when no runId is provided and the active-run condition is not met, but overall it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents runId and the optional condition with 100% coverage. The description mostly restates this, adding only the phrase 'uses that one' to clarify the auto-selection behavior, so it adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Shows') and resource ('which phase a run is in and its progress'). It is easy to tell this is a status/read tool, though it does not explicitly name or contrast sibling tools like forge_next or forge_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need a run's phase and progress. It also gives a useful fallback rule for when runId can be omitted, but it provides no explicit guidance about when to prefer this tool over its siblings or what alternatives exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forge_tasksA

Lists the active pipeline runs (to resume from any session). Shows id, request and current phase.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral disclosure. It does so by stating that it shows 'id, request and current phase', giving the agent an understanding of what the tool returns. It also implicitly signals a read-only operation ('Lists'). While it doesn't mention ordering or limits, the behavior is sufficiently disclosed for a zero-parameter listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, both informative. The main action and purpose are front-loaded ('Lists the active pipeline runs'), and the second sentence adds output details without redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with zero parameters and no output schema, the description is complete: it states what is listed, why it is used, and what fields are returned. An agent has everything needed to call this tool correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so the baseline is 4. There are no parameters to document, and the description correctly does not invent any. Nothing more is needed here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Lists the active pipeline runs'. It also clarifies the purpose with 'to resume from any session', which distinguishes it from siblings like forge_start or forge_status that start or check status of runs. The scope is clear and non-tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use context ('to resume from any session'), indicating when this tool is appropriate. However, it does not explicitly mention alternatives or when not to use it. Still, the context is enough for an agent to recognize this as the listing/resume discovery tool among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.3
    • First observedforge_complete_phase
    • First observedforge_next
    • First observedforge_skill
    • First observedforge_skills
    • First observedforge_start
    • First observedforge_status
    • First observedforge_tasks

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct job: start a run, advance a phase, check progress, list runs, and load skill metadata/content. The only close pair, forge_next and forge_status, is separated by guidance vs. state, so an agent should not misselect.

Naming Consistency4/5

All tools share the forge_ prefix and snake_case, making them predictable. However, the pattern mixes verbs (start, complete_phase) with bare nouns (status, tasks, skills, skill), so it is not a fully consistent verb_noun convention.

Tool Count5/5

Seven tools is well-scoped for a pipeline-orchestration server. Each tool covers a necessary part of the run lifecycle or skill access without redundancy or bloat.

Completeness4/5

The core lifecycle is covered: start, advance, inspect status, list runs, and load skills. The only notable gap is the lack of an explicit cancel/abort operation for a run, though that may be intentionally unsupported by the guided pipeline model.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables comprehensive software lifecycle management with structured tracking of requirements, tasks, and architecture decisions through an SQLite database with full traceability and automated state validation.
    38
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Implements a structured development workflow for LLM-based coding with feature clarification, PRD generation, phased development, and task tracking. Guides LLMs through organized feature development from requirements gathering to completion with document storage and progress monitoring.
    41 npm
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Transforms ideas into detailed, executable development plans with built-in verification, lessons learned tracking, and GitHub issue remediation workflows. Guides Claude through structured interviews, plan generation, execution with Haiku agents, and verification with Sonnet agents to maintain context and code quality across sessions.
    7
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    An autonomous software-engineering pipeline for Claude Code that runs on real evidence: codebase intelligence tools, git analytics, deterministic verification rules, and zero LLM-judges-LLM. Every claim traces to a paper and every PR passes its own gates.
    1
    MIT