Stateless advisor + validator for Conducted Development: kickoff, artifact validation, rule checks.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Encode the Decision-Log 'when to use it' rules. Set whichever apply: `escalation_fired`, `gate_resolved_cross_cutting`, `affects_multiple_tickets`, `override_architectural`, `confined_to_one_session`. Returns { should_log, reason, entry_template? }; when should_log is true the Context/Trigger/Decision/Rationale/Affects skeleton is returned. A decision confined to one session does not need an entry — the session notes suffice.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Encode the Decision-Log 'when to use it' rules. Set whichever apply: `escalation_fired`, `gate_resolved_cross_cutting`, `affects_multiple_tickets`, `override_architectural`, `confined_to_one_session`. Returns { should_log, reason, entry_template? }; when should_log is true the Context/Trigger/Decision/Rationale/Affects skeleton is returned. A decision confined to one session does not need an entry — the session notes suffice.
| Argument | Type | Description |
|---|---|---|
| escalation_fired | boolean | |
| override_architectural | boolean | |
| confined_to_one_session | boolean | |
| affects_multiple_tickets | boolean | |
| gate_resolved_cross_cutting | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"escalation_fired": {
"type": "boolean"
},
"override_architectural": {
"type": "boolean"
},
"confined_to_one_session": {
"type": "boolean"
},
"affects_multiple_tickets": {
"type": "boolean"
},
"gate_resolved_cross_cutting": {
"type": "boolean"
}
},
"additionalProperties": false
}Encode the goal-brief rule that no session may begin while any gate is open. Supply either a structured `gates` list ([{ id, resolved }]) or a goal-brief `content` string, in which case the GATE LIST checkboxes (- [ ] / - [x]) are parsed. Returns { all_resolved, unresolved, may_begin } where may_begin === all_resolved. The server reads no files — the content is agent-supplied.
| Argument | Type | Description |
|---|---|---|
| gates | array | Structured gate list. |
| content | string | A goal-brief markdown string whose GATE LIST is parsed. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gates": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"resolved"
],
"properties": {
"id": {
"type": "string"
},
"resolved": {
"type": "boolean"
}
},
"additionalProperties": false
},
"description": "Structured gate list."
},
"content": {
"type": "string",
"description": "A goal-brief markdown string whose GATE LIST is parsed."
}
},
"additionalProperties": false
}Assemble, from the bundled templates, the four `_template.md` copies (front-matter tokens replaced), `decision-log.md`, and a filled `AGENT_CONVENTIONS.md` (kickoff guide Steps 2–5). Supply `project_type`, the interview `answers`, optional `detected` (brownfield pre-fill fallback), and optional `existing` (the agent's inventory of files already present). Returns { files: [{ path, content, action }], missing, open_questions, warnings }. The plan is ready iff `missing` is empty (D5 strict); a file with any unresolved {{…}} token is reported in `missing`. Idempotent: already-present files are 'review'/'skip', never overwritten. The server returns content + paths only — it writes nothing (Model C, D2/D6).
| Argument | Type | Description |
|---|---|---|
| answers* | object | Confirmed interview answers keyed by token id (e.g. PROJECT_NAME, LOCKED_DOCS). |
| detected | object | Facts the agent detected by inspecting the repo (brownfield only). |
| existing | object | Agent inventory of files already present in the target (for idempotent re-runs). |
| project_type* | string | 'greenfield' or 'brownfield'. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_type",
"answers"
],
"properties": {
"answers": {
"type": "object",
"description": "Confirmed interview answers keyed by token id (e.g. PROJECT_NAME, LOCKED_DOCS).",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"detected": {
"type": "object",
"properties": {
"ci": {
"type": "string"
},
"language": {
"type": "string"
},
"framework": {
"type": "string"
},
"project_name": {
"type": "string"
},
"existing_docs": {
"type": "array",
"items": {
"type": "string"
}
},
"test_framework": {
"type": "string"
},
"package_manager": {
"type": "string"
}
},
"description": "Facts the agent detected by inspecting the repo (brownfield only).",
"additionalProperties": false
},
"existing": {
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Agent inventory of files already present in the target (for idempotent re-runs).",
"additionalProperties": false
},
"project_type": {
"enum": [
"greenfield",
"brownfield"
],
"type": "string",
"description": "'greenfield' or 'brownfield'."
}
},
"additionalProperties": false
}Return the branched kickoff interview (DECISIONS.md D3/D4). Supply `project_type`: 'greenfield' asks the full set; 'brownfield' uses the agent-supplied `detected` facts (language, framework, tests, CI, existing docs) to pre-fill candidates and drop fully-inferable questions — except LOCKED_DOCS, which is always asked because it is human judgment. Returns { project_type, questions, inferred, notes }; the server reads no files.
| Argument | Type | Description |
|---|---|---|
| detected | object | Facts the agent detected by inspecting the repo (brownfield only). |
| project_type* | string | 'greenfield' or 'brownfield'. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_type"
],
"properties": {
"detected": {
"type": "object",
"properties": {
"ci": {
"type": "string"
},
"language": {
"type": "string"
},
"framework": {
"type": "string"
},
"project_name": {
"type": "string"
},
"existing_docs": {
"type": "array",
"items": {
"type": "string"
}
},
"test_framework": {
"type": "string"
},
"package_manager": {
"type": "string"
}
},
"description": "Facts the agent detected by inspecting the repo (brownfield only).",
"additionalProperties": false
},
"project_type": {
"enum": [
"greenfield",
"brownfield"
],
"type": "string",
"description": "'greenfield' or 'brownfield'."
}
},
"additionalProperties": false
}Return the ordered procedure for where the agent is in the methodology loop. Supply `phase` (one of: kickoff, goal_brief, intent_doc, session_open, session_active, session_close, standup) and optional `facts` (e.g. a ticket id) to tailor the output. Returns { steps, reads_first, escalation_points, notes? } sourced from the bundled guides and conventions — the procedure half of advisor + validator. The server reads no files.
| Argument | Type | Description |
|---|---|---|
| facts | object | Optional facts to weave into the procedure (e.g. ticket id, work dir). |
| phase* | string | Which phase of the methodology loop the agent is in. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"phase"
],
"properties": {
"facts": {
"type": "object",
"properties": {
"ticket": {
"type": "string"
},
"work_dir": {
"type": "string"
},
"goal_brief": {
"type": "string"
}
},
"description": "Optional facts to weave into the procedure (e.g. ticket id, work dir).",
"additionalProperties": false
},
"phase": {
"enum": [
"kickoff",
"goal_brief",
"intent_doc",
"session_open",
"session_active",
"session_close",
"standup"
],
"type": "string",
"description": "Which phase of the methodology loop the agent is in."
}
},
"additionalProperties": false
}Given agent-supplied facts, decide whether a standup is due. Triggers in priority order: a deliverable gate reached → 'gate'; else a dependency intersection → 'intersection'; else more than five working days since the last standup → 'weekly'; else 'none'. Working days are an input (the working week varies by team), never computed from a calendar. Returns { due, reason, detail }.
| Argument | Type | Description |
|---|---|---|
| today | string | |
| gate_reached | boolean | |
| last_standup_date | string | |
| dependency_intersection | boolean | |
| working_days_since_last_standup | number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"today": {
"type": "string"
},
"gate_reached": {
"type": "boolean"
},
"last_standup_date": {
"type": "string"
},
"dependency_intersection": {
"type": "boolean"
},
"working_days_since_last_standup": {
"type": "number"
}
},
"additionalProperties": false
}Strictly check whether a Conducted Development artifact's text satisfies the methodology's required structure. Supply the artifact's type and its full text (the server never reads files). Returns { valid, missing, warnings }: `missing` lists required sections that are absent, empty, or contain only unmodified template placeholder text (blocking); `warnings` lists sections that are present but look thin (advisory, non-blocking). `valid` is true iff `missing` is empty.
| Argument | Type | Description |
|---|---|---|
| content* | string | The full markdown text of the artifact to validate. |
| artifact_type* | string | Which artifact to validate. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"artifact_type",
"content"
],
"properties": {
"content": {
"type": "string",
"description": "The full markdown text of the artifact to validate."
},
"artifact_type": {
"enum": [
"goal_brief",
"intent_doc",
"session_log",
"standup"
],
"type": "string",
"description": "Which artifact to validate."
}
},
"additionalProperties": false
}