Docs · the prodready MCP server

One endpoint. Two products. Every tool.

The enterprise-grade due diligence is free. The SDLC is licensed. Both run through the same MCP server, in the coding agent you already use. You talk in plain language; your agent calls the tools. This page is the whole manual.

Endpointhttps://mcp.prodready.si/mcpstreamable HTTP · sign-in by email
Contents

01Install

One line per host. The endpoint speaks MCP over streamable HTTP and needs no key: the first call opens a sign-in page, you type your email and click the link we send. No password, no card.

Claude Codeterminal
claude mcp add --transport http prodready https://mcp.prodready.si/mcp --scope user

Drop --scope user to add it to the current project only. Check it with /mcp inside Claude Code.

OpenAI — Codex CLIterminal
codex mcp add prodready --url https://mcp.prodready.si/mcp

Or, in ~/.codex/config.toml: [mcp_servers.prodready] then url = "https://mcp.prodready.si/mcp"

Cursor~/.cursor/mcp.json
{"mcpServers":{"prodready":{"url":"https://mcp.prodready.si/mcp"}}}

Project-local instead: .cursor/mcp.json in the repository root, same shape.

Windsurfmcp_config.json
{"mcpServers":{"prodready":{"serverUrl":"https://mcp.prodready.si/mcp"}}}

Windsurf names the key serverUrl for remote servers, not url. Open it from Cascade → MCP servers → Manage → View raw config.

Clinecline_mcp_settings.json
{"mcpServers":{"prodready":{"type":"streamableHttp","url":"https://mcp.prodready.si/mcp"}}}

Set type explicitly — Cline will otherwise guess the transport.

Claude Desktopconnector

Settings → Connectors → Add custom connector, name it prodready, paste https://mcp.prodready.si/mcp, Add. In a chat, open the tools menu (the +) and switch prodready on. The first call opens the sign-in page.

claude.ai — web and mobileconnector

Settings → Connectors → Add custom connector, name it prodready, paste https://mcp.prodready.si/mcp, Add; then enable it in the chat's tools menu. Available on Pro, Max, Team and Enterprise plans.

A claude.ai chat cannot run commands in your repository, so the scan itself needs a coding agent (Claude Code, Codex, Cursor). From claude.ai you can ask for help, the licence, the status of an SDLC project and its report.

Claude for Work — Team & Enterpriseorganisation connector

An Owner or Admin adds it once for everyone: Admin settings → Connectors → Add custom connector, paste https://mcp.prodready.si/mcp. Each member then switches it on under their own Settings → Connectors and signs in with their work email — that email is the licence holder for the SDLC.

Claude Code — desktop app & VS Code / JetBrains.mcp.json
{"mcpServers":{"prodready":{"type":"http","url":"https://mcp.prodready.si/mcp"}}}

Put it in .mcp.json at the root of the repository and every teammate's Claude Code picks it up (approve once when asked). The one-line claude mcp add above works in the app's terminal too; /mcp shows the connection and lets you sign in again.

OpenAI — Responses APItools[] entry
{"type":"mcp","server_label":"prodready","server_url":"https://mcp.prodready.si/mcp","require_approval":"never"}

Add it to the tools array of a Responses call. Leave require_approval off if you want to see each tool call before it runs.

Anything that only speaks stdiofallback
npx -y mcp-remote https://mcp.prodready.si/mcp

Older hosts without remote transport — and Cursor, Windsurf or Cline builds that do not take a URL — bridge through this as a normal stdio command.

Once it is installed you do not call the tools by name. Ask in plain language — is my app production-ready? — and your host picks them up on its own. The tool names on this page are what your agent calls, not what you type.

02Sign in

The first tool call opens a browser tab. That tab is the whole account: an email address, and nothing to remember.

Installing does not sign you in. In Claude Code the prodready tools stay hidden until you do: start claude, type /mcp, pick prodready and choose Authenticate. In Codex, run codex mcp login prodready. In Cursor, Windsurf and Cline the first start opens the sign-in; click Needs login if it shows. For a connector, click Connect.

  1. Type your email on the sign-in page. The page is good for ten minutes.
  2. Open the email. It carries a one-time link and a 6-digit code. Both are good for fifteen minutes.
  3. Click the link in the same browser where the sign-in started. The link is bound to that browser, so a link someone else asked for cannot connect their app to your account. Reading the mail on another device? Type the 6-digit code into the sign-in page instead. Five wrong codes close the sign-in; start again from your host.
  4. Approve the connection. The consent page shows the name the app gave itself, marked not verified, and — large — where access goes. Approve only if that is the app you just started from. Otherwise press Cancel.
  5. Back in your host. It receives an access token (24 hours) and a refresh token (90 days, replaced on every use). No password, no card.

The contact record

Connecting creates a contact record at Innovate d.o.o.: your email, the time and the host name. Nothing else. The same email is the account the SDLC licence and your projects are bound to.

Revoking access

Remove the server from your host (claude mcp remove prodready in Claude Code, or the host's own settings). The host drops its tokens, and hosts that support it revoke them at /oauth/revoke. An access token already issued stops working within 24 hours; an unused refresh token is dead after 90 days. To connect again, add the server again and sign in.

Limits: five sign-in links per email per hour, thirty per network address. Past that the page says “Too many links requested. Try again in an hour.”

03The free scan

Say it in plain words:

is my app production-ready?is this safe to launch?what breaks when real users arrive?

In Claude Code you can also type /prodready:scan. Then, in order:

  1. Your agent calls prodready_probe and gets back the read-only commands for your stack.
  2. It runs them in your repository, on your machine.
  3. It hands the counts and paths to prodready_assess.
  4. You get a 0–100 score with a grade, the findings with their consequences, what could not be evaluated, and a link to the report page.

The server is remote and cannot see your disk, so it does not guess and it does not ask for your code. Nothing leaves your machine but counts, file paths and identifier names.

Then the due diligence — 18 dimensions, free

The scan is the first half of the end-to-end due diligence. The second half is the technical review our own team runs: eighteen dimensions — architecture, code quality, security posture, data architecture, infrastructure, API design, frontend, dependencies, scalability, load performance, technical debt, observability, documentation, accessibility, release management, compliance signals and cost — each scored 1 to 5 against its checklist, every finding with a file and line.

Say it in plain words:

due diligencedeep reviewaudit the architecturedubinska analiza

In Claude Code: /prodready:dd. Then, in order:

  1. If the scan has not run in this session, your agent runs it first.
  2. It calls prodready_dd_brief per dimension and gets the rubric, the checklist with item ids and the files to read.
  3. It reads the code on your machine and answers every item — a finding is an item id, a path and line, a severity and a short note. No file contents, no secrets.
  4. It hands the answers to prodready_dd_assess: the server validates them (a dimension with under 60% of its checklist answered is capped at 3; load performance is scored only from load-test results you supply, otherwise it stays “not evaluated”), computes the weighted score, the risk heatmap, the compound risks and the top ten risks, and writes the report page.
  5. You get the link and its access code. The page: cover with the 1–5 gauge, executive summary, critical risks, strengths, dimension scores with the weighting, top 10 risks by probability × impact, compound risks, the detail per dimension with every finding, what could not be evaluated, the method, the comparison with a prior run, and the next step. It prints to a clean PDF.

What it does not contain: remedies. The report names each gap, where it is and what it costs. Fixing it is the SDLC.

prodready_probe — the plan

Takes an optional stack (e.g. ["next","supabase","multi-tenant"]) and an optional depth:

depthWhat comes back
stackOnly the commands that work out what the app is built on.
coreThe shorter pass: every scoring probe plus the critical and high-severity checks — the ones that decide whether it is safe to put real users on.
full (default)The whole catalogue — the end-to-end due diligence — medium and low checks included. A much longer plan.

The plan is text. It opens with the contract — the read-only command vocabulary (grep, rg, find, ls, wc, head, cat, git and their usual companions), what never to run and what never to send. Without a stack it starts with the detection commands. Then a legend, once:

MarkMeaning
$A read-only shell command.
SQL>A read-only query against the database's own catalogue. Runs only on a connection you hand your agent; no check depends on one.
do:Work to do by reading files — not a command.
[structural]Read the files and work out the answer.
[corroborate]The detector has a documented exception: confirm before reporting it fired.
only if:The check's gate — report whether it matched under gates.

Then every check: its id, severity, the rule it belongs to, the condition under which it counts as fired, and its commands. Nothing writes, nothing installs, nothing calls the network. The credential detectors never print the line a match came from.

prodready_assess — the grade

Needs evidence.results: an object keyed by check id, exactly as the plan printed it. Per check: ran, fired, count, total, files (repo-relative paths, never contents), a short evidence quote of twelve words at most, corroborated where the plan asked for it, exempt where the documented exception applies. Optional: evidence.stack, evidence.repo counts (source files, routes, endpoints, locales, very large files) and evidence.gates. report picks the delivery: link (default), html or none.

It returns:

  • findings mapped to the numbered rule each one breaks, with the evidence that proves it;
  • a 0–100 score built from five dimensions of 20 — data, safety, tests, review, release — with a letter grade and a Green/Amber/Red standing;
  • the checks that could not be evaluated, named rather than passed over;
  • the report page;
  • the next step: what closing the gaps would take, and what the SDLC covers that a read-only scan cannot see.

The report page

With report: "link" the full report is stored as an unlisted page at https://mcp.prodready.si/r/<id>, in the prodready design, marked noindex, and kept for seven days. Your agent should open it for you; it is the deliverable. html returns the same page inline to save locally; none returns text and stores nothing. One account writes at most thirty report pages an hour.

Honesty rules

The rules the scan keeps

Attested, not observed. The results are what your agent reports it ran. The server scores what it is told and says so.

Not evaluated is not a pass. A check your agent did not run is left out, and the report lists it as not evaluated. It is never scored as a pass. When too much is missing, the score is stated as a ceiling.

No remedies. Each finding names the gap and the consequence of leaving it in. It never names the fix. Do not ask the tool for a patch, a policy, a migration or a config — it has none to give, and it will not invent one.

No secrets, no people. An evidence value that carries a credential, a token, a row of data, a person's details or a suggested fix is rejected, and the finding it belonged to is dropped, not softened. Email addresses and query-string URLs are stripped on the way out.

04SDLC on

The SDLC is our delivery process — the one our developers use to build large applications — handed to your coding agent one step at a time. It runs as a team of specialised agents behind gates: your agent discovers, plans and builds; the three reviewers and the sprint auditor each run as a separate agent that did not take part in building. The server hands out each step, checks the gate in front of it and keeps the ledger. It needs the licence (§08).

SDLC onrun the prodready SDLC on this project/prodready:sdlc

You never have to name a tool. Say what you want in your own words, in any language; your agent maps it to the step, and every result names the next allowed step. When you are unsure, say next — your agent does exactly that one step and stops.

Story states, in order:

Draft→Ready→In Development→In QA→In Review→Done·Blocked·Removed

The command map, step by step

The whole process in the order it runs. Under each step, the slash command that does the same in Claude Code; then what you say and what your agent calls.

discover→scope→vision→journeys→wireframes→SDD→docs→backlog→refine→plan→sprint→build · verify · review→audit→retro→readiness→release
StepYou sayYour agent callsGate
Switch it on
/prodready:sdlc
SDLC on · run the SDLC · fix it properlysdlc_licence_status, sdlc_project_init (or the project from sdlc_project_list)—
Discover
/prodready:discover
discovery · gather requirements · interview me · here are my docssdlc_playbook discovery, then sdlc_discovery start → round … → finish. It reads what exists first and asks you only the business questions it cannot answer.GD at 80 of 100
Scope
/prodready:sow
record the scope · statement of work · SoW · proposalsdlc_scope_set, then sdlc_sow_create — a versioned page with an access code, effort in points—
Vision
/prodready:vision
product vision · feature map · what are we buildingsdlc_vision_set—
Journeys
/prodready:journeys
user journeys · user flowssdlc_journeys_set—
Wireframes
/prodready:wireframes
wireframes · mock-ups · clickable prototypedrawn in your repository under .prodready/wireframes/, recorded by path with sdlc_wireframes_set—
Architecture (SDD)
/prodready:sdd
architecture document · SDD · architecture decisions · ADRsdlc_design_set — improvements can become stories—
Docs
/prodready:docs
generate the docs · API docsgenerators in your repository, recorded with sdlc_docs_record—
Backlogcreate the backlog · import my backlog · turn the requirements into stories · UI contractsdlc_contract_set, then sdlc_backlog_import as a dry run you see first, then for real. One story at a time: sdlc_backlog_add.—
Refine
/prodready:refine-all
refine the backlog · refine S-004 — or refine everything on autopilotsdlc_refine per story, or sdlc_refine_all for the whole queue (autonomous refinement)G0
Plan
/prodready:next
plan the sprint · plan sprint 2sdlc_sprint_plan — a new sprint, or an outlined one from the import—
Sprint
/prodready:next
start the sprintsdlc_sprint_start — held by an unowned critical risk, a grade-F prediction or a missing retro—
Build · verify · review
/prodready:next
next story · verify it · review itsdlc_story_start → build → sdlc_verify → sdlc_review_request → three fresh-context reviews → sdlc_review_submit ×3 → sdlc_story_doneG2 G3 G4 G6
Audit
/prodready:next
audit the sprintsdlc_audit_request → sdlc_audit_submit, then sdlc_sprint_complete (complete the sprint · close the sprint)G5 G7
Retro
/prodready:retro
retro · retrospective · what did we deliversdlc_sprint_retro with actuals; sdlc_sprint_analytics feeds it—
Readiness
/prodready:dd
/prodready:perf
/prodready:monitoring
record the due diligence · are we at 4 out of 5 · load test · monitoringthe free due diligence, then sdlc_dd_record; sdlc_perf_record; sdlc_monitoring_recordG8 at sprint completion
Release · deploy
/prodready:release
release · ship version 1.2 · deploy to staging · changelog · roll backsdlc_release plan → staging → ready → released (your approval) · rollback—

Then it iterates, sprint after sprint, until the app scores at least 4 out of 5 on the readiness scale. At any point: status (sdlc_status), report (sdlc_report), dashboard (§05).

Side lanes

These run beside the main line whenever they are needed. The server fits them into the order: a hotfix runs beside the active sprint, a hardening sprint takes over until the suite is green again.

LaneYou sayWhat happens
Bugs
/prodready:bugs
report a bug · there's a bug · find bugs · what's broken? · bug sweepOne bug becomes a bug story (sdlc_bug_report), refined by the bug template when it carries its evidence. A sweep runs typecheck, lint, build and tests here and triages every failure (sdlc_bug_detect).
Hardening
/prodready:bugs
harden it · make the build green · fix the queued bugsA failing sweep opens a hardening sprint (sdlc_sprint_harden): no new features, up to three cycles, then what is left waits for a person.
Hotfix
/prodready:hotfix
hotfix · production is down · urgent fix · P0 · SEV1A hotfix sprint beside the delivery sprint with one bug story (sdlc_hotfix_start). Preflight, verify, the three reviews and push stay mandatory — there is no shortcut.
Change requests
/prodready:change
change request · the client wants … · scope change · drop that featureThe change with its impact in points, stories, sprints and the statement of work (sdlc_change_request). Decided only on your yes, no or not now, recorded with your role.
Risksrisks · risk register · what could go wrong · will this succeedThe risk register scored into bands (sdlc_risk_set) — a critical risk without owner and mitigation holds the sprint — and a computed success prediction A–F (sdlc_success_predict).
Analytics
/prodready:analytics
velocity · how fast are we · burndown · how did the sprint go · bottlenecksNumbers computed from the project, read-only (sdlc_sprint_analytics); your agent writes three to five recommendations from them into the retro.
Costcost so far · effort so far · hours spent · tokens usedEffort only — points, recorded hours, wall-clock time and the model tokens your host reported, per sprint and story. No money is stored or printed. It is on the dashboard's Cost page (§05).

Gates

GateNameRecorded byPurpose
GDDiscovery completesdlc_discovery finishEnough is known about the product to write the backlog.
G0Refinedsdlc_refine, sdlc_refine_all, the bug templateA story is ready to be planned.
G2Preflightsdlc_story_startA story has enough detail to start building.
G3Verifysdlc_verify; sdlc_bug_detect for a whole sprintThe project's own checks pass.
G4Reviewsdlc_review_submit ×3Three independent reviewers clear the story.
G5Sprint auditsdlc_audit_submitThe finished sprint is audited as a whole.
G6Pushedsdlc_story_done; the merge in sdlc_sprint_completeThe work is on the remote.
G7Integration flowssdlc_sprint_completeThe sprint's critical journeys work end to end.
G8Readinesssdlc_sprint_completeThe sprint's own due diligence and load test: 3 of 5 passes, 4 meets the target.

G1 (design references) belongs to our process and is not recorded by a tool yet. What each gate requires is sent to your agent by the server, in the briefs, at the step where it applies. A step that skips a gate is refused with the reason and the next allowed step: “…Next allowed step: …”. Every gate result is attested: your agent reports it, and the ledger records who said so (provenance: "self-attested", or server-scored where the server computed it). The server cannot see your disk, so it does not claim your tests really ran. It checks the order.

Refinement (G0)

Twelve refinement questions, R1–R12. The server sends them to your agent with sdlc_playbook (topic refinement); your agent answers them per story in sdlc_refine's answers, keyed by id, with optional updates to the story's fields, a reason and a source per answer, and the business questions it found filed as decisions. sdlc_refine is also how a Blocked story is released once a person has decided what changes.

Preflight (G2) and the builder brief

sdlc_story_start runs on a Ready story in the active sprint. Preflight fails → the story stays Ready and the problems come back; close them with sdlc_refine updates and start again. Preflight passes → In Development, and the builder brief. Lost it? Call sdlc_story_start again; nothing changes, the brief comes back.

Verify (G3) — three attempts

sdlc_verify records the project's own typecheck, lint, build and tests, exactly as they came out: pass and a one-line summary each, plus counts for tests. All four pass → In QA. Otherwise one attempt is used and the story stays In Development; the third failed attempt → Blocked.

Reviews (G4) — three reviewers, three nonces

sdlc_review_request on a story In QA returns three reviewer briefs. Each reviewer runs as a separate agent in a fresh context and submits once with sdlc_review_submit.

ReviewerWhat it gets
Architecture architectureIts own criteria and a one-time nonce from sdlc_review_request.
Security securityIts own criteria and a one-time nonce from sdlc_review_request.
Functional functionalIts own criteria and a one-time nonce from sdlc_review_request.
  • Nonces: one per reviewer per round, used once. A used, unknown, replaced or mismatched nonce is refused. Scores that do not match the reviewer's criteria are refused without using the nonce.
  • The verdict: the server applies the reject rules from the brief to the scores and findings. A reviewer's own approve can be overruled, and the ledger says so.
  • All three approve → cleared for sdlc_story_done, which records the pushed branch, tag or commit (G6). Done without G3 and G4 on record is refused.
  • Any reject → the findings come back as tasks on the story, verify has to pass again, and the story returns to In Development. Rework cycles: three. The third rejected round → Blocked.

Decisions, questions and assumptions

The decision register holds three kinds of row (D-1, D-2, …): a business decision nobody has made yet — who has to make it, and how the behaviour ships meanwhile (switched off, or a conservative default); an open question with its urgency and your agent's best assumption; and an assumption your agent made, with its reasoning. Technical choices go into the architecture document instead.

You answer whenever you like, in one line: answer D-7: yes, 30 days. Your agent records it with sdlc_decision_resolve in your words. Business decisions and blocking questions are only ever closed by you; your agent may only assume a non-blocking question. Changing an answer later is allowed — it adds a new row, and the stories built on the old answer are re-opened or get a task.

Sprint audit (G5)

When no started story in the sprint is still in flight, sdlc_audit_request returns the audit brief and sdlc_audit_submit records a 0–5 score on each of five dimensions, with findings:

Story fulfilmentFunctional completenessData integrityIntegration flowsBaseline integrity

An audit can block the sprint; the server tells your agent the rule. A blocked sprint is fixed and audited again.

Sprint complete (G7, G8) and the retro

sdlc_sprint_complete takes the critical journeys walked — name and pass, optionally step counts and notes — and, when you send them, the merge and the readiness. All pass → the sprint is completed, and stories that did not reach Done go back to the backlog. A failing journey → the sprint stays active and the audit reopens. Once the project has a readiness history (or inside an autonomous run), completion also needs the sprint's own due-diligence run and load test (G8): 3 of 5 passes, 4 meets the target. Then the retrospective: the next delivery sprint does not start until the previous one has its retro.

Status and report

sdlc_status gives the board by state, the gate ledger summary, the open decisions and questions, discovery, risks and documents, the autonomous run when one is going, and the next allowed step; call it whenever you are unsure what comes next. sdlc_report gives the project and sprint report as text and as an unlisted page on mcp.prodready.si with an access code, kept seven days.

Autonomous mode

You can hand the whole loop to your agent and walk away. It takes every step through the same gates — refine, plan, build, verify, three reviews, audit — within the limits you give it, and stops when something needs you.

SDLC autonomousrun it unattended for one sprint/prodready:autonomous
  1. You give the go-ahead in your own words. Your agent asks you to confirm and passes your reply verbatim — it never writes the words itself. Run it unattended for one sprint or run it autonomously, at most 8 hours starts it; vague words like keep going or just build it do not — the server hands back the question to ask you instead.
  2. Limits. Stories, sprints and minutes. Unless you say otherwise: one sprint and 240 minutes, and the readiness target 4 out of 5. The defaults are recorded, so you can see what the run assumed. Modes: full starts from discovery, backlog works through the backlog, sprint finishes one sprint and stops.
  3. The loop rule. Your agent calls sdlc_autonomous status, does exactly the one step it names, and calls status again. Nothing is skipped; if the same step comes back five times without the project changing, the run pauses itself.
  4. Questions, every cycle. Business questions become decisions that ship switched off; the run keeps going. Every cycle your agent shows you what is pending and when each will be assumed. Answer any of them whenever you like: answer D-7: ….
  5. It stops when a blocking question or a Blocked story needs a person (needs_human — your agent asks you the one question), at a limit, or when you say SDLC off, stop or pause. Nothing is lost; resume the run or next picks it up. Stopping and pausing work even after a licence has ended.

What always stays yours: business decisions, closing a blocking question, releasing a Blocked story, and a production release. In an unattended run the server refuses those steps from your agent and waits for you. At the end your agent writes the report and gives you the link and the access code.

Autonomous refinement

refine everything on autopilotautonomous refinement/prodready:refine-all

Refines every Draft story without asking you, after the same go-ahead in your own words (refine the backlog on autopilot). Your agent answers each story's checklist from the sources — your repository first, then discovery, the scope, the documents, the UI contract and the decision register — every answer with its own reason; the same reason pasted everywhere is refused. A real business question never comes to you mid-run: it becomes a decision on the story, and the behaviour ships switched off. When nothing reasonable can be assumed, the story is paused with its question. Up to five stories per call; at the end you get the report — refined, paused, open — and the decisions to answer with answer D-n: …. Inside an autonomous run this happens on its own.

Things to say mid-run

You sayYour agent calls
status · where are we · what's nextsdlc_status
next · continue · go on · keep goingsdlc_status, then exactly the next allowed step (a paused run resumes)
next storysdlc_story_start on the next Ready story in the sprint
verify it · run the checkssdlc_verify
review itsdlc_review_request, three fresh-context reviews, sdlc_review_submit ×3
answer D-7: …sdlc_decision_resolve in your words
audit the sprint · complete the sprintsdlc_audit_request → sdlc_audit_submit → sdlc_sprint_complete
status of the run · resume the runsdlc_autonomous status · resume
SDLC off · stop · pausesdlc_autonomous stop or pause; otherwise your agent stops calling the SDLC
report · show me the pagesdlc_report
dashboard · show me the boardthe dashboard (§05)
what does the playbook say about refinement / reviews / auditssdlc_playbook with the topic

05Your dashboard, on your own computer

The whole project — board, backlog, sprints, gates, reviews, decisions — as a web app that runs on your machine. One line in your repository:

Local dashboardNode 18 or later · no install
npx https://prodready.si/dl/prodready-dashboard.tgz
  • Sign-in. The first time it sends you to mcp.prodready.si to sign in with your email — a one-time link, no password — the same email you use in your coding agent. After that it remembers you (~/.prodready/dashboard.json, readable only by you).
  • Which project. Keep the id in your repository as .prodready/project.json ({ "project_id": "…" }) and it opens that one; otherwise it picks the project whose repository matches, or shows the list.
  • What it shows. Overview (score, active sprint, next allowed step, open decisions), Board, Backlog, every Story with its refinement, gates and review rounds, Sprints with audits and journeys, the live run view, Decisions, Due diligence, Reports, Timeline, the gate Log, Analytics, Releases, Change requests, Cost and Docs. An empty page tells you what to say to your agent to fill it.
  • Read-only. It changes nothing. Stories, sprints, reviews and decisions change only through your coding agent — say status or next there. Gate results are shown as self-attested; report access codes are never shown.
  • Refresh. Live: while the tab is visible it reads the project again every ten seconds and updates when something changed.
  • Local. It listens on 127.0.0.1 only, behind a one-time link per run. It reads your project through sdlc_project_export; after a licence ends it still opens your own project data.

Prefer a single file? Say dashboard (/prodready:dashboard): your agent calls sdlc_dashboard, saves one self-contained HTML page as .prodready/dashboard.html and opens it. It is a snapshot — say dashboard again after each step. Nothing about either view is kept on our server.

06Tool reference

55 tools — 10 free, 45 licensed — generated from the server's own definitions. tools/list always lists every one, licensed or not, so your host can show what exists. Licensed tool descriptions start with [SDLC licence] (left off below). Every tool rejects unknown arguments (additionalProperties: false), and every refusal carries the reason and the next allowed step. Results over 40 KB keep their head and their tail — the next step — and say the middle was left out.

Common refusals — every licensed tool

No licence. The licence notice: what the licence contains and the link to unlock it; the free tools keep working. Prices: prodready.si/pricing.

Arguments. A missing required field, a wrong type, a value outside its bounds or an unknown field: “<tool> was not run: …”, nothing stored.

What the server will not take. File contents, credentials, email addresses where a role is asked for, and absolute paths (send them relative to the repository): “… Nothing was stored.”

Unknown project. “There is no project … on this account.”

Two calls at once. Calls on one project run one at a time; a write that lost a race says “…this change was not stored” — call again. “The project could not be reached just now; nothing was changed.” — the same.

A person's step. While an unattended session runs, the steps that belong to a person are refused: “A person decides this; an unattended session … is running.”

ToolTierWhat it does
Free: help, scan, due diligence, account
prodready_helpfreeWhat can prodready do here?
prodready_probefreePlan a production-readiness scan
prodready_assessfreeGrade the scan and price the gap
prodready_dd_brieffreeDue diligence: the brief
prodready_dd_assessfreeDue diligence: score and report
sdlc_licence_statusfreeSDLC licence status
sdlc_request_accessfreeRequest the SDLC licence
sdlc_project_listfreeList SDLC projects
sdlc_project_exportfreeProject export (for the local dashboard)
sdlc_project_deletefreeDelete an SDLC project
Project, discovery and scope
sdlc_project_initlicensedStart an SDLC project
sdlc_teamlicensedShare a project with your team
sdlc_playbooklicensedRead a process brief
sdlc_discoverylicensedDiscovery (start, round, finish)
sdlc_scope_setlicensedRecord the scope
sdlc_sow_createlicensedStatement of work
Product documents
sdlc_vision_setlicensedProduct vision
sdlc_journeys_setlicensedUser journeys
sdlc_wireframes_setlicensedWireframe inventory
sdlc_design_setlicensedArchitecture document (SDD)
sdlc_docs_recordlicensedRecord generated documentation
sdlc_contract_setlicensedUI consistency contract
Backlog and refinement
sdlc_backlog_importlicensedImport the whole backlog
sdlc_backlog_addlicensedAdd stories to the backlog
sdlc_refinelicensedRefine a story (G0)
sdlc_refine_alllicensedRefine everything (autopilot)
Sprints and the story cycle
sdlc_sprint_planlicensedPlan a sprint
sdlc_sprint_startlicensedStart a sprint
sdlc_story_startlicensedStart a story (G2)
sdlc_verifylicensedRecord verify results (G3)
sdlc_review_requestlicensedRequest the three reviews (G4)
sdlc_review_submitlicensedSubmit one review (G4)
sdlc_story_donelicensedMark a story Done (G6)
sdlc_audit_requestlicensedRequest the sprint audit (G5)
sdlc_audit_submitlicensedSubmit the sprint audit (G5)
sdlc_sprint_completelicensedComplete the sprint (G7)
sdlc_sprint_retrolicensedSprint retrospective
Decisions, risks and prediction
sdlc_decision_addlicensedRecord a decision, a question or an assumption
sdlc_decision_resolvelicensedAnswer, assume or change a decision
sdlc_risk_setlicensedRisk register (add or update)
sdlc_success_predictlicensedDevelopment success prediction
Bugs, hardening, readiness and operations
sdlc_bug_reportlicensedReport a bug
sdlc_bug_detectlicensedWhole-suite bug sweep (G3, sprint)
sdlc_sprint_hardenlicensedOpen a hardening sprint
sdlc_hotfix_startlicensedStart a hotfix (fast track)
sdlc_dd_recordlicensedRecord a due-diligence run (readiness trend)
sdlc_perf_recordlicensedRecord a load test
sdlc_monitoring_recordlicensedRecord monitoring and incidents
Releases, change requests and analytics
sdlc_releaselicensedReleases and deployments
sdlc_change_requestlicensedChange request (scope change)
sdlc_sprint_analyticslicensedSprint analytics (velocity and bottlenecks)
Status, report, dashboard and autonomous work
sdlc_statuslicensedProject status and next step
sdlc_reportlicensedProject report page
sdlc_dashboardlicensedProject dashboard (local file)
sdlc_autonomouslicensedRun it autonomously

Free: help, scan, due diligence, account

prodready_help What can prodready do here?

Free. Call it when the user asks what prodready can do, what to say, or says something you cannot map to a tool. Pass what they said in said (optional). Returns the flows this server offers, the plain phrases that start each, which tools they use, and — if said matched — the one flow to run now. No data leaves the machine.

Tierfree Free — signed in · read-only, idempotent
Arguments
  • said string · ≤ 500 chars — What the user said, as they said it, in any language.
ReturnsThe flows this server offers (scan, due diligence, SDLC, discovery, documents, backlog, bugs, hotfix, performance, monitoring, releases, change requests, analytics, autonomous work, dashboard, status, report, licence, delete, off), the plain phrases that start each and the tools each uses, the slash prompts, and — when said matched — the one flow to run now.
RefusalsAn argument other than said, or said over 500 characters.

prodready_probe Plan a production-readiness scan

Step one of a production-readiness and security review of the user's own codebase. Reach for this whenever someone asks whether the app they built is ready for real users, safe to launch, secure, safe to put customer data in, multi-tenant safe, or whether it will hold up when it gets traffic — and whenever they want a second opinion on something a coding tool generated for them.

This server is remote and cannot see the user's disk, so it does not guess and it does not ask for the code. It returns the exact read-only shell commands and file globs to run locally: one per detector in the prodready hardening catalogue — 25 numbered platform rules across wiring, configuration, multi-tenant isolation and row-level security, UI and internationalisation, operations, and compliance and lifecycle, plus the critical-rules set covering data integrity, API surface, state machines, auth and sessions, secrets, logging and tests.

Every command is read-only — grep and rg, find, ls, wc, head, cat, git, and their usual companions awk, sort and xargs. Nothing writes, nothing installs, and nothing a command does calls the network. Four checks carry a read-only query against the database's own catalogue; the plan marks those SQL> instead of $, they run only against a connection the user hands you, and no check depends on one. The credential detectors never print the line a match came from, so no secret value is read or sent.

By default the plan is every scoring probe plus the critical and high-severity detectors — the ones that decide whether the app is safe to put real users on. Pass depth:"full" for the whole catalogue, or depth:"stack" for just the commands that work out what the app is built on.

Run the steps, then hand what came back to prodready_assess for the graded report.

Tierfree Free — signed in · read-only, idempotent
Arguments
  • stack array of string or string — What the app is built on, if known — e.g. ["next","supabase","multi-tenant"]. Narrows the plan to the detectors that can apply. Omit it and the plan opens with the commands that work the stack out.
  • depth "stack" | "core" | "full" · default "full" — full (the default) is the whole catalogue — the end-to-end due diligence, every scoring probe and every critical, high, medium and low check. core is the shorter pass: scoring probes plus critical and high only. stack returns only the commands that identify what the app is built on.
ReturnsThe scan plan as text: the read-only contract (the command vocabulary, what never to run, what never to send), the stack-detection commands when no stack was given, a legend for the line marks ($ shell, SQL> catalogue query, do: read the files, [structural], [corroborate], only if:), then every check with its id, severity, rule reference, fires when condition and commands.
RefusalsAn argument that is not stack or depth, or a depth outside the three values.

prodready_assess Grade the scan and price the gap

Step two: turn what prodready_probe's commands returned into a graded readiness report.

Gives back: findings mapped to the numbered rule each one breaks, with the evidence that proves it; a 0-100 score built from five dimensions of 20 — data, safety, tests, review, release — with a letter grade and a Green/Amber/Red standing; the checks that could not be evaluated, named rather than passed over; a link to the full report page in the prodready design (open it for the user — it is the deliverable, unlisted, kept seven days); and the next step: what closing the gaps would take, and what our SDLC covers that a scan cannot see. The scan is free.

Each finding names the gap and the consequence of leaving it in. It does not name the remedy: the diagnosis is free, the fix is the product. Do not ask this tool for a patch, a policy, a migration or a config — it has none to give, and it will not invent one.

Evidence is used for this one call and is never stored and never logged. Send counts, file paths and identifier names. Never send the contents of a .env, a key file, or any matched secret value.

Tierfree Free — signed in · read-only, idempotent
Arguments
  • evidence required object — What the probe's commands returned. Never file contents, never secret values.
    • stack array of string — Stack tags the probe's detection commands yielded.
    • repo object — Counts the findings quote as denominators.
      • source_file_count integer
      • route_count integer
      • endpoint_count integer
      • locale_count integer
      • mega_files array of string
    • results required object of object — Keyed by check id, exactly as the plan printed it. A check you did not run is left out entirely — it is recorded as not evaluated, never scored as a pass.
      • ran boolean — The command was actually run.
      • fired boolean — The check's fires-when condition held. Omit it and the count decides.
      • count integer — Matches, or files returned.
      • total integer — The denominator, when the finding is a ratio.
      • files array of string — Repo-relative paths, optionally path:line. Paths only, never contents.
      • evidence string — A short literal quote of what the command returned, or that it returned nothing — twelve words at most. A handful of findings quote it; the rest are rendered from count, total and files, and the evidence line under a finding never carries it. Never a credential, a token, a row of data or a person's details, and never a suggested fix: this report names the gap and its consequence. A value carrying any of those is rejected and the finding it belonged to is dropped, not softened.
      • corroborated boolean — Required on checks the plan marked as needing corroboration.
      • exempt boolean — The check's documented exception applies here.
      • units integer — Distinct things affected, when that differs from count.
    • gates object of boolean — Check id -> did its applies-when gate match.
  • report "link" | "html" | "none" · default "link" — How to deliver the report page. link (default): an unlisted URL on mcp.prodready.si that shows the full report in the prodready design, kept for seven days — open it for the user and share it. html: the same page returned inline to save locally. none: text only.
ReturnsFindings mapped to the rule each one breaks, with the evidence that proves it; a 0–100 score from five dimensions of 20 (data, safety, tests, review, release), a letter grade and a Green/Amber/Red standing; the checks that were not evaluated, by name; the report page link and its access code (link), the page itself (html) or nothing (none); the next step.
Refusals{}, a missing results or an unknown field — refused, no page written. Over 30 report pages in an hour on one account — refused, nothing stored; report: "none" still works. An evidence string carrying a credential, personal data or a suggested fix drops that finding.

prodready_dd_brief Due diligence: the brief

Free. Step one of the 18-dimension technical due diligence of the user's own codebase — the deep review behind 'due diligence', 'deep review', 'audit the architecture'. Run prodready_probe and prodready_assess first if they have not run in this session (the end-to-end due diligence is both). Returns which dimensions apply to this stack and, for one dimension (or every applicable one when dimension is omitted — large), its 1-5 rubric, its checklist with item ids, the files and areas to read, and the exact JSON shape to hand back to prodready_dd_assess. Read-only; nothing is stored.

You read the code on this machine. Never send file contents, environment values or secrets: a finding is a checklist item id, a repository path (and line), a severity and a paraphrase of at most 200 characters naming the gap and its consequence — not a fix.

Tierfree Free — signed in · read-only, idempotent
Arguments
  • stack array of string or string — What the app is built on — the same tags prodready_probe works out, e.g. ["nextjs","supabase"] or "nextjs+supabase".
  • dimension "architecture" | "code-quality" | "security-posture" | "data-architecture" | "infrastructure-devops" | "api-design" | "frontend-architecture" | "dependencies-supply-chain" | "scalability-performance" | "performance-load" | "technical-debt" | "observability-sre" | "testing-maturity" | "documentation-dx" | "accessibility-i18n" | "release-change-mgmt" | "compliance-signals" | "cost-efficiency" — One dimension id. Omit it for the list plus every applicable brief (large).
ReturnsThe applicable dimensions with their weights; per dimension the rubric (what 1, 3 and 5 mean), the checklist items with ids, what to read, and the JSON shape for prodready_dd_assess. Nothing is stored.
RefusalsAn unknown dimension id; an argument outside stack and dimension.

prodready_dd_assess Due diligence: score and report

Free. Step two of the 18-dimension due diligence: hand back what you established per dimension with prodready_dd_brief. Validates it (unknown ids, scores outside 1-5, findings without a path are refused; a dimension with under 60% of its checklist answered is capped at 3 and marked partial; performance-load is scored only from load-test results you supply, otherwise it is 'not evaluated', never 1), then computes the weighted 1-5 score and grade, per-dimension risk (probability x impact), the 5x5 risk heatmap, compound risks across dimensions, the top findings and what could not be evaluated, and leaves a report page (link + six-character access code, seven days). Open the page for the user and give them the code.

The report names each gap, where it is and what it costs. It does not name the remedy and refuses fields that would carry one.

Tierfree Free — signed in · read-only
Arguments
  • stack required array of string or string — What the app is built on — the same tags prodready_probe works out, e.g. ["nextjs","supabase"] or "nextjs+supabase".
  • dimensions required array of object · ≥ 1 item, ≤ 18 items
    • id required string · ≤ 40 chars — A dimension id from prodready_dd_brief.
    • score required number or null — 1-5 per the rubric, or null when you could not evaluate it.
    • findings array of object · ≤ 15 items
      • item required string · ≤ 12 chars — The checklist item id this finding answers, e.g. ARCH-03.
      • path string · ≤ 300 chars — Repository-relative path, optionally path:line. Never an absolute path, never contents.
      • line integer · ≥ 1 — Line number, when the finding has one.
      • note required string · 1–200 chars — At most 200 characters: the gap and its consequence, paraphrased. No code, no secrets, no fix.
      • severity required "critical" | "high" | "medium" | "low"
      • probability integer · 1–5 — 1 = theoretical … 5 = already happening. Defaults from severity.
      • impact integer · 1–5 — 1 = minor annoyance … 5 = data loss, breach, outage, regulatory. Defaults from severity.
    • answered array of string · ≤ 40 items, each ≤ 12 chars — Every checklist item id you answered, with or without a finding.
    • notes string · ≤ 600 chars — Optional: the current state in a few sentences. Not a fix.
  • load_test object — k6-style results the user already has. Without them performance-load is 'not evaluated' — this review never runs the app.
    • tool string · ≤ 40 chars
    • source string · ≤ 300 chars — Repository-relative path of the summary JSON the numbers come from.
    • p95_ms required number · ≥ 0 — Worst-scenario p95 latency in milliseconds.
    • p99_ms number · ≥ 0
    • error_rate required number · 0–1 — Worst-scenario error rate as a fraction (k6 http_req_failed rate).
    • thresholds_passed boolean
    • requests integer · ≥ 0
    • vus integer · ≥ 0
    • duration_s number · ≥ 0
    • scenarios required array of object · ≥ 1 item, ≤ 30 items
      • name required string · ≤ 80 chars
      • p95_ms required number · ≥ 0
      • error_rate number · 0–1
      • passed boolean
  • project string · ≤ 80 chars — Optional: the project's name as the user calls it, for the report's cover.
  • prior array of object or object — Optional, for the comparison: an earlier run's dimensions as [{ id, score }] (its structuredContent.dimensions), or { overall, dimensions }.
  • report "link" | "html" | "none" · default "link" — link (default): an unlisted page behind an access code, seven days. html: the page inline. none: text only, nothing stored.
ReturnsThe overall 1–5 score and grade word, the per-dimension table, the risk heatmap, the top risks, the compound risks, what could not be evaluated, and report_url + report_access_code.
RefusalsUnknown dimension or item ids; a score outside 1–5; a finding without a path, or with an absolute path; any remedy-shaped field (recommendation, remediation, target state and the like); more than 30 report pages an hour on one account.

sdlc_licence_status SDLC licence status

Whether the signed-in account holds the prodready SDLC licence, until when, where to unlock it, and what it contains. Free, and works before the licence is paid. Call it when an sdlc_* tool refuses, or when the user asks what the SDLC is.

Tierfree Free — signed in, no licence needed · read-only, idempotent
Argumentsnone — call it with {}
ReturnsSigned in or not, the email, licence active or not, the date it runs until, the unlock link and what the licence contains.
RefusalsAny argument (“sdlc_licence_status takes no arguments”).

sdlc_request_access Request the SDLC licence

Asks for the prodready SDLC licence for the signed-in account (monthly, cancel any time; the price is on prodready.si/pricing). The payment link is emailed to that address automatically; the sdlc_* tools unlock on this account the moment it is paid. Free. Call it when the user wants the SDLC after sdlc_licence_status or a refusal, never on their behalf without asking them first.

Tierfree Free — signed in, no licence needed · writes
Arguments
  • note string · 1–1000 chars — Anything the user wants the person replying to know: the product, the team, the deadline.
  • company string · 1–120 chars — The company or product name, if the user gives one.
  • projects string · 1–40 chars — Roughly how many projects they would run through it.
  • plan "month" — The plan: "month" (cancel any time), the only plan offered. May be left out.
Returns“Request recorded”. The payment link goes to your sign-in email; the tools unlock on this account automatically once it is paid. Asking twice within a day is recorded once and mails nobody twice.
RefusalsFields other than note, company, projects. Already licensed: “Nothing to request.”

sdlc_project_list List SDLC projects

The projects on this account, with their ids. Works without an active licence, so a lapsed account can still find what to delete.

Tierfree Free — signed in, no licence needed · read-only, idempotent
Argumentsnone — call it with {}
ReturnsEvery project on this account: id, name, created, updated.
RefusalsAny argument. Works without a licence.

sdlc_project_export Project export (for the local dashboard)

The project document as JSON for the local dashboard (npx https://prodready.si/dl/prodready-dashboard.tgz), which reads it and renders every page on the user's own computer. Read-only; nothing is stored. No nonce, write token or email address is included. With a licence it also carries the spec labels and the derived views (next step, counts); without one it still returns your own project data. Pass if_version (the version you already hold) to get { unchanged: true } instead of the document when nothing changed.

Tierfree Free — signed in, no licence needed · read-only, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • if_version integer · ≥ 0 — The version the dashboard already holds; unchanged returns no document.
ReturnsOne text line and the project as JSON (prodready://export/<id>.json): { export_version, licensed, project }, plus spec_labels and derived with the licence. No nonce, write token, access code or email address. With a matching if_version: { unchanged: true, version }.
RefusalsUnknown project. Works without a licence for your own data.

sdlc_project_delete Delete an SDLC project

Deletes the project document, its index entry and its report pages. Cannot be undone. Works without an active licence: your data stays deletable after the licence ends.

Tierfree Free — signed in, no licence needed · writes, destructive, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • confirm required true — Must be true.
ReturnsConfirmation that the project document, its index entry and its report pages are gone. Cannot be undone.
Refusalsconfirm missing or not true; unknown project id. Works without a licence.

Project, discovery and scope

sdlc_project_init Start an SDLC project

Creates a project on the user's account and returns its id with the discovery brief: what to establish about the product before any story is written. Start here for a new app, a rebuild, or when the user wants their project run through our delivery process. Pass brownfield: true for an app that already exists.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • name required string · 1–120 chars — The project's working name.
  • repo string · 1–300 chars — owner/name, or the repository's name. Never an absolute path.
  • stack array of string · ≤ 20 items, each 1–40 chars — e.g. ["nextjs","postgres"].
  • brownfield boolean — true when the app already exists: due diligence and a codebase scan come first.
ReturnsThe new project id (8 characters) and the discovery brief: what to establish about the product before a story is written. Keep the id in .prodready/project.json; your agent remembers it for the session.
RefusalsThe account's project index at its storage bound — a storage limit, not a project limit; delete finished projects. + the common refusals

sdlc_team Share a project with your team

Invite people to work on one of your projects with you: they see and work on the same backlog, sprints, documents, decisions, reports and ledger, each with their own agent and their own licence. invite (owner: project_id + email; sends them a join link), accept (code from the invite), list (project_id), remove (owner: project_id + email), leave (member: project_id). Two people never build the same story: a story someone started stays theirs.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • action required "invite" | "accept" | "list" | "remove" | "leave"
  • project_id string · ≤ 64 chars
  • email string · ≤ 200 chars
  • code string · ≤ 40 chars
Returnsinvite: the join link and code, and whether the invite mail went out. accept: the joined project. list: owner, members and pending invites. remove / leave: confirmation.
Refusalsinvite, remove: not the project's owner, own address, already a member. accept: an unknown or expired code, or signed in with another email than the invited one. Each person needs their own licence. + the common refusals

sdlc_playbook Read a process brief

The structured brief for one part of our delivery process: how stories are written, refined, estimated, built, reviewed and audited, the gates between them, and how open business decisions ship. Read the relevant brief before doing that step.

Tierlicensed Licensed — the description starts with [SDLC licence] · read-only, idempotent
Arguments
  • topic required "story_writing" | "refinement" | "execution" | "coding_standards" | "definition_of_done" | "review" | "audit" | "gates" | "decisions" | "estimation" | "sprint" | "discovery" | "risks" | "success_prediction" | "sow" | "vision" | "journeys" | "wireframes" | "design" | "generate_docs" | "backlog" | "ui_contract"
ReturnsThe brief for one topic, as short structured rules. Topics: the delivery basics (story_writing, refinement, execution, coding_standards, definition_of_done, review, audit, gates, decisions, estimation, sprint), discovery and planning (discovery, risks, success_prediction, sow, backlog, ui_contract) and the documents (vision, journeys, wireframes, design, generate_docs).
RefusalsA topic outside the list. + the common refusals

sdlc_discovery Discovery (start, round, finish)

Discovery: what the product is, for whom, and what the first release holds, scored per knowledge area (0-100 in all). start: send the kinds and labels of the documents that exist here (never their contents), brownfield, and the scan or due-diligence score when there is one; returns the discovery plan (mode, round budget, areas, round 1's business questions, the rules). round: after reading and asking, send each area's score (0-20) and a short summary (counts and names only), the assumptions made, the questions still open (a non-blocking one carries its assumption), answers the owner gave, risks and contradictions; returns the knowledge score, the gaps and the next round. finish: at 80 or more, the first-release line, the features with priority and whether each has rough acceptance criteria; records gate GD (pass or fail). Read sdlc_playbook discovery first. The user says: 'discovery', 'gather requirements', 'interview me', 'here are my docs', 'next round', 'what's missing', 'finish discovery'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • action required "start" | "round" | "finish"
  • inputs array of object · ≤ 20 items — start: the documents that exist (kind and label only).
    • kind required "requirements" | "prd" | "schema" | "design" | "codebase" | "contract" | "notes" | "transcript" | "url" | "other"
    • label required string · 1–120 chars — A label, never the contents.
    • areas array of "vision" | "data_model" | "tech_stack" | "ui" | "business_rules" · ≤ 5 items
  • brownfield boolean — start: an existing app.
  • scan object
    • score required integer · 0–100
    • grade required string · 1–20 chars
    • report_id string
  • dd object
    • overall required number · 1–5
    • grade required string · 1–20 chars
  • areas object — round: area -> { score 0..20, summary (counts and identifier names only), source, sub }.
    • vision object
      • score required integer · 0–20
      • summary required string · 1–300 chars
      • source required "scan" | "interview" | "documents" | "dd" | "assumed"
      • sub object
        • domain "missing" | "thin" | "complete"
        • user_roles "missing" | "thin" | "complete"
        • owner_profile "missing" | "thin" | "complete"
    • data_model object
      • score required integer · 0–20
      • summary required string · 1–300 chars
      • source required "scan" | "interview" | "documents" | "dd" | "assumed"
      • sub object
        • entities "missing" | "thin" | "complete"
        • state_machines "missing" | "thin" | "complete"
    • tech_stack object
      • score required integer · 0–20
      • summary required string · 1–300 chars
      • source required "scan" | "interview" | "documents" | "dd" | "assumed"
      • sub object
        • stack "missing" | "thin" | "complete"
        • auth "missing" | "thin" | "complete"
        • integrations "missing" | "thin" | "complete"
    • ui object
      • score required integer · 0–20
      • summary required string · 1–300 chars
      • source required "scan" | "interview" | "documents" | "dd" | "assumed"
      • sub object
        • ui_patterns "missing" | "thin" | "complete"
        • page_inventory "missing" | "thin" | "complete"
    • business_rules object
      • score required integer · 0–20
      • summary required string · 1–300 chars
      • source required "scan" | "interview" | "documents" | "dd" | "assumed"
      • sub object
        • rules "missing" | "thin" | "complete"
        • decisions "missing" | "thin" | "complete"
        • risk_register "missing" | "thin" | "complete"
  • assumptions array of object · ≤ 10 items
    • text required string · 1–300 chars
    • rationale required string · 1–300 chars
    • confidence required "high" | "medium" | "low"
    • override_trigger string · 1–200 chars
    • category "vision" | "data_model" | "tech_stack" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
  • questions array of object · ≤ 10 items
    • question required string · 1–300 chars
    • urgency required "blocking" | "important" | "nice_to_have"
    • category required "vision" | "data_model" | "tech_stack" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
    • asked_of required "owner" | "domain" | "ops" | "security" | "user"
    • assumption string · 1–300 chars — Required unless blocking.
  • answered array of object · ≤ 10 items
    • decision_id required string · D-1 style
    • answer required string · 1–500 chars — The owner's words.
  • dd_validated array of object · ≤ 18 items
    • dimension required string · 1–40 chars
    • verdict required "confirmed" | "corrected" | "unknown"
    • note required string · 1–200 chars
  • risks array of object · ≤ 10 items
    • title required string · 1–120 chars
    • category required "technical" | "scope" | "timeline" | "dependency" | "integration" | "security" | "compliance" | "operational"
    • probability required integer · 1–5
    • impact required integer · 1–5
    • mitigation string · 1–300 chars
    • owner string · 1–60 chars — A role.
    • evidence string · 1–200 chars — path[:line]
  • contradictions array of object · ≤ 5 items
    • where required string · 1–200 chars
    • text required string · 1–300 chars
  • regulated_data array of "health" | "payment" | "personal" | "children" | "financial" | "government" · ≤ 6 items
  • reopen_reason string · 1–200 chars — round: reopens a complete discovery.
  • first_release object
    • in required array of string · ≤ 30 items, each 1–200 chars
    • out required array of string · ≤ 30 items, each 1–200 chars
    • confirmed_by_owner required boolean
  • features array of object · ≤ 60 items
    • id required string
    • title required string · 1–120 chars
    • priority required "must" | "should" | "later"
    • rough_ac required boolean
    • area "vision" | "data_model" | "tech_stack" | "ui" | "business_rules"
  • requirements object
    • personas array of string · ≤ 10 items, each 1–120 chars
    • workflows array of string · ≤ 15 items, each 1–200 chars
    • integrations array of string · ≤ 15 items, each 1–120 chars
    • nfrs array of string · ≤ 10 items, each 1–200 chars
    • file string · 1–200 chars — Repository-relative.
Returnsstart: the discovery plan — mode, round budget, the five knowledge areas, round one's business questions. round: the knowledge score (0–100), the gaps and the next round; thresholds 40 / 60 / 80 announced. finish: gate GD pass or fail with the reasons; on a pass the scope filled where empty and the requirement headings.
Refusalsstart twice; round before start or after completion (reopening needs a reason); a round without any area's score; a scan lowering a stored score; a non-blocking question without its assumption; answering a closed row; finish without first_release and features; confirmed_by_owner while an unattended session runs; fields that belong to another action. + the common refusals

sdlc_scope_set Record the scope

The scope baseline: the objective, what is in and out of scope, assumptions, integrations and the architecture in a line each. A field sent replaces that list; a field left out is kept. Returns the scope and what is still missing before a statement of work can be issued. The user says: 'record the scope', 'this is in scope / out of scope', 'what did we agree is not included'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • objective string · 1–600 chars
  • in_scope array of string · ≤ 40 items, each 1–300 chars
  • out_of_scope array of string · ≤ 40 items, each 1–300 chars
  • assumptions array of string · ≤ 40 items, each 1–300 chars
  • integrations array of string · ≤ 20 items, each 1–300 chars
  • architecture array of string · ≤ 20 items, each 1–300 chars
ReturnsThe scope and what is still missing before a statement of work can be issued; assumptions that read like unanswered business rules are flagged.
RefusalsNothing to record (no field sent). + the common refusals

sdlc_sow_create Statement of work

Issues a new version of the statement of work from the recorded scope, backlog, sprints, risks and architecture: summary, scope, solution, sprint plan, deliverables, effort in points (no hours, no money), risks, acceptance (gates by name), timeline. format page (default) writes a report page and returns REPORT PAGE and ACCESS CODE — give the user both; format text returns the text only. The version is draft while a story is unsized or Draft, or the first-release line is only assumed. Needs the scope (sdlc_scope_set) and at least one story. The user says: 'statement of work', 'SoW', 'proposal', 'give me something to sign off', 're-issue the SoW'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_ids array of string · ≤ 20 items, each SP-1 style — Default: every sprint, in planning order.
  • note string · 1–500 chars
  • format "page" | "text"
ReturnsThe statement of work as text in nine sections — effort in points, never hours or money — and, with format: "page" (default), a report page with REPORT PAGE: and ACCESS CODE:. Status draft while a story is unsized or Draft, or the first-release line is only assumed. Up to ten versions are kept.
RefusalsThe scope missing or incomplete; no stories; an unknown sprint in sprint_ids; the hourly report-page limit. + the common refusals

Product documents

sdlc_vision_set Product vision

The product vision in business language: 2-5 user journeys (steps that point at modules), 4-8 modules each with 2-5 features (features point at the stories that build them), and the connections between modules. Status is never sent: each feature is built / in progress / planned from its stories on every read. The server checks every reference, refuses paths and code in names, and returns the diff against the stored version and the gaps (features without stories, modules no journey uses). Read sdlc_playbook vision first. The user says: 'product vision', 'what are we building', 'feature map', 'refresh the vision'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • product_name required string · 1–120 chars
  • tagline required string · 1–200 chars
  • overview required string · 1–2000 chars
  • journeys required array of object · ≤ 5 items
    • id required string · 1–40 chars
    • title required string · 1–120 chars
    • persona required string · 1–60 chars
    • goal required string · 1–200 chars
    • business_value required string · 1–200 chars
    • entry_point required string · 1–120 chars
    • steps required array of object · ≤ 8 items
      • id required string · 1–40 chars
      • label required string · 1–80 chars
      • description required string · 1–200 chars
      • touchpoint required string · 1–40 chars
      • emotion "curious" | "confident" | "focused" | "relieved" | "satisfied" | "frustrated"
      • module_ref required string · 1–40 chars
    • success_outcome required string · 1–200 chars
    • kpis required array of string · ≤ 4 items, each 1–120 chars
  • modules required array of object · ≤ 8 items
    • id required string · 1–40 chars
    • name required string · 1–80 chars
    • description required string · 1–300 chars
    • business_value required string · 1–200 chars
    • features required array of object · ≤ 6 items
      • id required string
      • name required string · 1–80 chars
      • description required string · 1–300 chars
      • story_refs required array of string · ≤ 20 items, each S-001 style
      • journey_refs required array of string · ≤ 5 items, each 1–40 chars
  • connections required array of object · ≤ 30 items
    • from_module required string · 1–40 chars
    • to_module required string · 1–40 chars
    • label required string · 1–120 chars
    • type required "navigation" | "data-dependency" | "handoff"
  • sprint_notes array of object · ≤ 20 items — One business sentence per completed sprint; patched by sprint id.
    • sprint_id required string · SP-1 style — A sprint id such as SP-1.
    • delivered_value required string · 1–300 chars
  • sources_used required array of "discovery" | "backlog" | "dd" | "codebase" | "documents" | "design" · ≤ 6 items
ReturnsThe vision with each feature's status (built / in progress / planned) derived from its stories, the diff against the stored version and the gaps: features without stories, modules no journey uses.
RefusalsReferences to modules, journeys, features or stories that do not exist; duplicate feature ids; paths or code in names; a sprint note on a sprint that is not completed. + the common refusals

sdlc_journeys_set User journeys

The user journeys as screens and links: personas, screens (persona, route, the features it serves, its wireframe page), links between screens, and the critical journeys that are walked before a sprint completes. The server binds stories to screens and returns coverage per screen and the gaps (screens without stories, interface stories without a screen, links to unknown screens). Read sdlc_playbook journeys first. The user says: 'user journeys', 'user flows', 'storyflow', 'map the journeys'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • personas required array of object · ≤ 8 items
    • key required string
    • label required string · 1–60 chars
    • layout "marketing" | "app" | "admin" | "mobile"
  • screens required array of object · ≤ 80 items
    • id required string · 1–60 chars
    • title required string · 1–120 chars
    • persona required string · 1–30 chars
    • route string · 1–120 chars
    • feature_ids array of string · ≤ 10 items
    • wireframe string · 1–120 chars — The wireframe page name.
  • edges required array of object · ≤ 200 items
    • from required string · 1–60 chars
    • to required string · 1–60 chars
    • kind required "nav" | "cta" | "redirect"
    • label string · 1–80 chars
  • critical required array of object · ≤ 10 items
    • name required string · 1–120 chars
    • persona required string · 1–30 chars
    • screen_ids required array of string · ≤ 12 items, each 1–60 chars
ReturnsCoverage per screen and the gaps: screens without stories, interface stories without a screen, links to unknown screens.
RefusalsA persona listed twice; unknown personas; duplicate screen ids; links to screens that do not exist. + the common refusals

sdlc_wireframes_set Wireframe inventory

Records the wireframes drawn in this repository (paths only, never images): the design tokens by name, the navigation per persona, every page with its persona, file under .prodready/wireframes/, features and states, and the clickable prototype. Returns what is missing (vision features without a page, pages without all four states) and, unless assign is false, gives interface stories without a design reference the page that shows them. Read sdlc_playbook wireframes and follow it first. The user says: 'wireframes', 'mock-ups', 'clickable prototype', 'design the screens'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • design object
    • tokens required array of string · ≤ 30 items, each 1–40 chars
    • font required string · 1–60 chars
    • logo required boolean
    • source required "brand-files" | "defaults"
  • nav required array of object · ≤ 8 items
    • persona required string · 1–30 chars
    • layout required "sidebar" | "bottom" | "top"
    • items required array of object · ≤ 8 items
      • label required string · 1–40 chars
      • page required string · 1–120 chars
  • pages required array of object · ≤ 80 items
    • name required string · 1–120 chars
    • persona required string · 1–30 chars
    • file required string · 1–200 chars — Repository-relative, under .prodready/wireframes/.
    • feature_ids array of string · ≤ 10 items
    • states required array of "default" | "empty" | "loading" | "error" · ≤ 4 items
    • viewports required "mobile" | "desktop" | "both"
  • prototype string · 1–200 chars — Repository-relative.
  • assign boolean — Default true.
ReturnsWhat is missing (vision features without a page, pages without all four states) and, unless assign: false, the interface stories that received a page as their design reference.
RefusalsAbsolute paths, URLs or files outside .prodready/wireframes/; navigation to unknown pages; during a full autonomous run, a discovery score below 60. + the common refusals

sdlc_design_set Architecture document (SDD)

The architecture document: a summary, up to eight standard sections (system architecture, data flow, entities, state machines, interface structure, security, deployment, integrations), each with an optional diagram as mermaid, plantuml or dot text, the decision records (context, decision, alternatives, consequences) and architectural improvements. A section sent replaces that section; records and improvements patch by id; an improvement with to_backlog becomes a Draft story. Code is refused anywhere but a diagram's source. Returns the sections present and missing, the records, the gaps and the diff. Read sdlc_playbook design first. The user says: 'architecture document', 'SDD', 'system design', 'architecture decisions', 'ADR'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • summary string · 1–1000 chars
  • sections array of object · ≤ 8 items
    • id required "system_architecture" | "data_flow" | "entities" | "state_machines" | "api_structure" | "security_architecture" | "deployment" | "integrations"
    • title string · 1–120 chars
    • body required string · 1–1200 chars
    • diagram object
      • kind required "mermaid" | "plantuml" | "dot"
      • source required string · 1–2000 chars
  • adrs array of object · ≤ 15 items
    • id string · ADR-001 style
    • title required string · 1–200 chars
    • status required "proposed" | "accepted" | "superseded" | "deprecated"
    • context required string · 1–500 chars
    • decision required string · 1–500 chars
    • alternatives required array of string · ≤ 3 items, each 1–200 chars
    • consequences required array of string · ≤ 4 items, each 1–200 chars
    • supersedes string · ADR-001 style
    • story_refs array of string · ≤ 10 items, each S-001 style
  • improvements array of object · ≤ 10 items
    • id string · DI-001 style
    • title required string · 1–200 chars
    • why required string · 1–400 chars
    • layer required "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • estimate_points 1 | 2 | 3 | 5
    • to_backlog boolean
  • sources_used array of "discovery" | "backlog" | "codebase" | "dd" | "vision" · ≤ 5 items
ReturnsThe sections present and missing, the decision records (ADR-nnn) and improvements (DI-nnn), the gaps and the diff against the stored version; improvements sent to the backlog become Draft stories.
RefusalsCode anywhere but a diagram's source; a section sent twice; an unknown record or improvement id; a record citing a story that does not exist or superseding one that does not exist; more than 15 records or 10 improvements. + the common refusals

sdlc_docs_record Record generated documentation

Records documentation produced by a generator in this repository (interface reference, schema, components, architecture, setup): the output path, the generator's path, when it ran and how many items it covered. Documentation here is produced by software that can run again, never written by hand: an entry without a generator is refused, and a generator that is not idempotent or not timestamped is listed as an open item. One entry per type; a new one replaces it. Read sdlc_playbook generate_docs first. The user says: 'generate the docs', 'documentation', 'API docs', 'regenerate the docs'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • generated required array of object · ≤ 5 items
    • type required "api" | "schema" | "components" | "architecture" | "setup"
    • output required string · 1–200 chars — Repository-relative.
    • generator string · 1–200 chars — Repository-relative: the script that writes it.
    • generated_at required string · 10–40 chars
    • items integer · 0–100000
    • idempotent required boolean
    • timestamped required boolean
ReturnsThe documentation on record per type with its path, generator and date; a generator that is not idempotent or not timestamped listed as an open item.
RefusalsAn entry without a generator (“never written by hand”); a type listed twice; a bad path; generated_at that is not a date and time. + the common refusals

sdlc_contract_set UI consistency contract

The UI contract: route registry (path, screen, layout, nav group), navigation, layouts, shared components and token rules. Versioned; merged into the stored contract unless replace is true. Refuses duplicate or near-duplicate paths and nav entries to unknown routes; reports violations by stored stories (routes outside the registry, near-duplicates, orphan routes). Stories are then checked against it. The user says: 'UI contract', 'route registry', 'lock the routes', 'shared components', 'UI ugovor'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • routes required array of object · ≤ 80 items
    • path required string · 1–120 chars
    • screen required string · 1–80 chars
    • layout required string · 1–60 chars
    • nav_group required string · 1–40 chars
    • story_id string · S-001 style — A story id such as S-001.
  • nav required array of object · ≤ 40 items
    • group required string · 1–40 chars
    • order required integer · 0–999
    • label required string · 1–40 chars
    • path required string · 1–120 chars
  • layouts required array of object · ≤ 8 items
    • name required string · 1–60 chars
    • includes required array of string · ≤ 8 items, each 1–80 chars
    • used_by required string · 1–200 chars
  • components required array of object · ≤ 40 items
    • name required string · 1–60 chars
    • source required string · 1–80 chars
    • used_by required array of string · ≤ 20 items, each 1–80 chars
  • token_rules array of string · ≤ 8 items, each 1–200 chars
  • replace boolean
ReturnsThe contract version and the violations by stored stories: routes outside the registry, near-duplicates, orphan routes.
RefusalsDuplicate or near-duplicate paths; nav entries to unknown routes — the contract is not stored. + the common refusals

Backlog and refinement

sdlc_backlog_import Import the whole backlog

The whole backlog in one validated, atomic write: sprints (outlined, with goal, theme, outcomes and their stories) plus unassigned stories, and optionally the UI contract. depends_on may name a story of the same call as "#<n>" (1-based across the call). ≤ 60 stories. Checks route uniqueness and the contract, and the structure (foundation first, 3–8 stories per sprint, ≤ 5 points, a build-and-deploy check story per sprint). dry_run: true returns the same and stores nothing — show it to the user first. Any refusal stores nothing. Read sdlc_playbook backlog first. The user says: 'create the backlog', 'write the backlog', 'turn the requirements into stories', 'import my backlog', 'napravi backlog'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprints required array of object · ≤ 12 items
    • label string · 1–12 chars
    • goal required string · 1–500 chars
    • theme string · 1–200 chars
    • outcomes array of string · ≤ 8 items, each 1–300 chars
    • key_deliverable string · 1–300 chars
    • risks array of string · ≤ 6 items, each 1–300 chars
    • rationale string · 1–300 chars
    • unblocks string · 1–300 chars
    • stories required array of object · ≥ 0 items, ≤ 15 items
      • title required string · 1–200 chars — One short verb phrase naming what the user can do.
      • as_a string · 1–300 chars — The role this story serves.
      • i_want string · 1–500 chars — What that role can do after this story.
      • so_that string · 1–500 chars — The benefit the role gets.
      • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
      • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
      • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
      • risk "low" | "medium" | "high"
      • owner string · 1–200 chars — Who builds the story and answers questions about it.
      • depends_on array of string · ≤ 20 items — Existing S-ids, or "#<n>" for the n-th story of this call (1-based).
      • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
      • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
      • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
      • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
      • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
      • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
      • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
      • sort_order integer · 0–9999
  • unassigned array of object · ≤ 20 items
    • title required string · 1–200 chars — One short verb phrase naming what the user can do.
    • as_a string · 1–300 chars — The role this story serves.
    • i_want string · 1–500 chars — What that role can do after this story.
    • so_that string · 1–500 chars — The benefit the role gets.
    • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
    • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
    • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
    • risk "low" | "medium" | "high"
    • owner string · 1–200 chars — Who builds the story and answers questions about it.
    • depends_on array of string · ≤ 20 items — Existing S-ids, or "#<n>" for the n-th story of this call (1-based).
    • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
    • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
    • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
    • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
    • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
    • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
    • sort_order integer · 0–9999
  • ui_contract object
    • routes required array of object · ≤ 80 items
      • path required string · 1–120 chars
      • screen required string · 1–80 chars
      • layout required string · 1–60 chars
      • nav_group required string · 1–40 chars
      • story_id string · S-001 style — A story id such as S-001.
    • nav required array of object · ≤ 40 items
      • group required string · 1–40 chars
      • order required integer · 0–999
      • label required string · 1–40 chars
      • path required string · 1–120 chars
    • layouts required array of object · ≤ 8 items
      • name required string · 1–60 chars
      • includes required array of string · ≤ 8 items, each 1–80 chars
      • used_by required string · 1–200 chars
    • components required array of object · ≤ 40 items
      • name required string · 1–60 chars
      • source required string · 1–80 chars
      • used_by required array of string · ≤ 20 items, each 1–80 chars
    • token_rules array of string · ≤ 8 items, each 1–200 chars
  • dry_run boolean
ReturnsThe overview (sprints, stories, points), the structure and UI checks as warnings, and — without dry_run — the stored outlined sprints and Draft stories with their ids.
RefusalsMore than 60 stories; an empty sprint; route collisions or routes outside the contract; a contract that does not validate; during a full autonomous run, a discovery score below the backlog threshold. Any refusal stores nothing. + the common refusals

sdlc_backlog_add Add stories to the backlog

Stores user stories on a project. Each is checked against the story template and stored as Draft; what it still lacks is listed. Routes that collide with another story's, or that are missing from the UI contract, are refused. Read sdlc_playbook story_writing first; for a whole backlog use sdlc_backlog_import.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • stories required array of object · ≤ 50 items
    • title required string · 1–200 chars — One short verb phrase naming what the user can do.
    • as_a string · 1–300 chars — The role this story serves.
    • i_want string · 1–500 chars — What that role can do after this story.
    • so_that string · 1–500 chars — The benefit the role gets.
    • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
    • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
    • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
    • risk "low" | "medium" | "high"
    • owner string · 1–200 chars — Who builds the story and answers questions about it.
    • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
    • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
    • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
    • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
    • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
    • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
    • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
    • sort_order integer · 0–9999
ReturnsThe stored stories with their ids (S-001…), each Draft, each with what it still lacks against the template.
Refusalsdepends_on naming a story that does not exist; a route that collides with another story's or is missing from the UI contract — nothing is stored. Over 50 stories in one call, or a project document over its size bound. + the common refusals

sdlc_refine Refine a story (G0)

Records the answers to the refinement checklist for one story, with optional field updates. When every item is answered and the story fits the template, it becomes Ready (gate G0); otherwise the open items come back. Also how a Blocked story is released after a person has re-scoped it. v2: reasoning and sources per checklist id, selections (the question set of the round: options, default, pick, why), decisions (business questions filed with the story; it may still become Ready and ships the behaviour switched off), paused (a question nobody can answer from the sources: the story stays Draft and a blocking question is filed). Inside an autonomous session every answer needs its own reasoning (20+ characters), selections are required, blanket reasons are refused, and a third failed round pauses the story.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
  • answers required object of string — Checklist id -> answer. Ids: R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12. At most 600 characters each inside an autonomous session.
  • updates object
    • title string · 1–200 chars — One short verb phrase naming what the user can do.
    • as_a string · 1–300 chars — The role this story serves.
    • i_want string · 1–500 chars — What that role can do after this story.
    • so_that string · 1–500 chars — The benefit the role gets.
    • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
    • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
    • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
    • risk "low" | "medium" | "high"
    • owner string · 1–200 chars — Who builds the story and answers questions about it.
    • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
    • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
    • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
    • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
    • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
    • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
    • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
    • sort_order integer · 0–9999
  • reasoning object of string — Checklist id -> why this answer (20+ characters inside a session; at most 300 there).
  • sources object of "codebase" | "discovery" | "scope" | "vision" | "journeys" | "wireframes" | "design" | "contract" | "decisions" | "sibling" | "owner" | "story" — Checklist id -> where the answer came from: codebase, discovery, scope, vision, journeys, wireframes, design, contract, decisions, sibling, owner, story.
  • selections array of object · ≤ 12 items
    • question required string · 1–300 chars
    • options array of string · ≤ 4 items, each 1–200 chars
    • default string · 1–200 chars
    • pick required string · 1–200 chars
    • why required string · 1–300 chars — Its own reason, 20+ characters; the same reason on every item is refused.
  • session_id string · AS-1 style — An autonomous session id such as AS-1; implied when a session is active.
  • decisions array of object · ≤ 5 items — Business questions this story raises; filed atomically with the story, which ships the behaviour switched off.
    • question required string · 1–1000 chars
    • asked_by required string · 1–200 chars
    • ships_as required string · 1–300 chars — switched off | conservative default | …
    • category "vision" | "data_model" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
  • paused object
    • question required string · 1–300 chars
    • reason required string · 1–300 chars
ReturnsEvery checklist item answered and the story fits the template: refined: true, status Ready, G0 recorded. Otherwise the open items. Decisions filed with the story come back with their ids; a paused story stays Draft with its blocking question filed.
RefusalsNo such story; a story already In Development or later (“a story is refined before it is built”); an unknown checklist id; a dependency on itself or on a story that does not exist. Inside an autonomous session: an answer without its own reasoning, a repeated (blanket) reason, missing selections, releasing a Blocked story (a person's decision), a story that failed three rounds. + the common refusals

sdlc_refine_all Refine everything (autopilot)

Autonomous refinement: start opens a refinement session over the Draft stories of the backlog (or one sprint) and returns the brief for the first story — the checklist, the sources to read and the rule: answer from the sources; a real business question becomes a decision, never a question to the user. submit applies sdlc_refine v2 per story (≤ 5 per call; reasoning per answer, selections, decisions, paused) and returns the next brief; status lists the queue, the results and the open decisions ("answer D-n: <your answer>"); finish closes the session with the report { refined, paused, decisions_raised }. start needs the person's own go-ahead in authorised_words (for example 'refine the backlog on autopilot') unless an autonomous session is active.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • action required "start" | "submit" | "status" | "finish"
  • scope "backlog" | "sprint" — start: backlog (default) or one sprint (sprint_id).
  • sprint_id string · SP-1 style — A sprint id such as SP-1.
  • authorised_words string · 1–300 chars — start: the person's own words, verbatim.
  • authorised_as string · 1–80 chars — start: a display name or role (shown on the local dashboard only).
  • session_id string · AS-1 style — An autonomous session id such as AS-1; implied when a session is active.
  • stories array of object · ≤ 5 items — submit: up to five stories.
    • story_id required string · S-001 style — A story id such as S-001.
    • answers object of string
    • updates object
      • title string · 1–200 chars — One short verb phrase naming what the user can do.
      • as_a string · 1–300 chars — The role this story serves.
      • i_want string · 1–500 chars — What that role can do after this story.
      • so_that string · 1–500 chars — The benefit the role gets.
      • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
      • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
      • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
      • risk "low" | "medium" | "high"
      • owner string · 1–200 chars — Who builds the story and answers questions about it.
      • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
      • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
      • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
      • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
      • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
      • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
      • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
      • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
      • sort_order integer · 0–9999
    • reasoning object of string — Checklist id -> why this answer (20+ characters inside a session; at most 300 there).
    • sources object of "codebase" | "discovery" | "scope" | "vision" | "journeys" | "wireframes" | "design" | "contract" | "decisions" | "sibling" | "owner" | "story" — Checklist id -> where the answer came from: codebase, discovery, scope, vision, journeys, wireframes, design, contract, decisions, sibling, owner, story.
    • selections array of object · ≤ 12 items
      • question required string · 1–300 chars
      • options array of string · ≤ 4 items, each 1–200 chars
      • default string · 1–200 chars
      • pick required string · 1–200 chars
      • why required string · 1–300 chars — Its own reason, 20+ characters; the same reason on every item is refused.
    • session_id string · AS-1 style — An autonomous session id such as AS-1; implied when a session is active.
    • decisions array of object · ≤ 5 items — Business questions this story raises; filed atomically with the story, which ships the behaviour switched off.
      • question required string · 1–1000 chars
      • asked_by required string · 1–200 chars
      • ships_as required string · 1–300 chars — switched off | conservative default | …
      • category "vision" | "data_model" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
    • paused object
      • question required string · 1–300 chars
      • reason required string · 1–300 chars
  • story_id string · S-001 style — A story id such as S-001.
  • answers object of string — submit, one story: checklist id -> answer (≤ 600 characters).
  • updates object
    • title string · 1–200 chars — One short verb phrase naming what the user can do.
    • as_a string · 1–300 chars — The role this story serves.
    • i_want string · 1–500 chars — What that role can do after this story.
    • so_that string · 1–500 chars — The benefit the role gets.
    • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
    • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
    • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
    • risk "low" | "medium" | "high"
    • owner string · 1–200 chars — Who builds the story and answers questions about it.
    • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
    • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
    • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
    • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
    • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
    • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
    • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
    • sort_order integer · 0–9999
  • reasoning object of string — Checklist id -> why this answer (20+ characters inside a session; at most 300 there).
  • sources object of "codebase" | "discovery" | "scope" | "vision" | "journeys" | "wireframes" | "design" | "contract" | "decisions" | "sibling" | "owner" | "story" — Checklist id -> where the answer came from: codebase, discovery, scope, vision, journeys, wireframes, design, contract, decisions, sibling, owner, story.
  • selections array of object · ≤ 12 items
    • question required string · 1–300 chars
    • options array of string · ≤ 4 items, each 1–200 chars
    • default string · 1–200 chars
    • pick required string · 1–200 chars
    • why required string · 1–300 chars — Its own reason, 20+ characters; the same reason on every item is refused.
  • decisions array of object · ≤ 5 items — Business questions this story raises; filed atomically with the story, which ships the behaviour switched off.
    • question required string · 1–1000 chars
    • asked_by required string · 1–200 chars
    • ships_as required string · 1–300 chars — switched off | conservative default | …
    • category "vision" | "data_model" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
  • paused object
    • question required string · 1–300 chars
    • reason required string · 1–300 chars
Returnsstart: the session id and the brief for the first story (the checklist, the sources to read, the queue). submit: per story refined, open, paused or refused, then the next brief. status: the queue, the results and the open decisions with their answer phrase. finish: the report — refined, paused, open, decisions raised.
Refusalsstart without the person's own go-ahead (a confirmation_question comes back to ask); start with answers; a session already running or paused; scope: "sprint" without a sprint; submit without stories or with more than five. A refused story is rolled back without touching the others. + the common refusals

Sprints and the story cycle

sdlc_sprint_plan Plan a sprint

Creates a sprint with one business goal and the refined stories that deliver it, or — with sprint_id — promotes an outlined sprint from the imported backlog once its stories are refined. Stories that have not passed refinement are refused.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id string · SP-1 style — An outlined sprint to promote to planned; goal and story_ids then default to the outline's.
  • goal string · 1–500 chars
  • story_ids array of string · ≥ 1 item, ≤ 20 items, each S-001 style
ReturnsThe sprint (SP-1…) as planned, its stories and total points, plus notes: outside three to eight stories, open decisions to review. With sprint_id, the outlined sprint from the imported backlog promoted to planned.
RefusalsAny story that does not exist, is not refined (G0) or already sits in an unfinished sprint — the sprint is not planned. + the common refusals

sdlc_sprint_start Start a sprint

Makes a planned sprint the active one and returns the sprint brief: the goal, the stories in build order and the cycle to follow.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id required string · SP-1 style — A sprint id such as SP-1.
ReturnsThe sprint made active and the sprint brief: goal, stories in build order, the cycle. A note when no statement of work is on record.
RefusalsSprint not planned; another sprint still active (“sprints run one after another”); the previous delivery sprint has no retrospective; a story lost refinement since planning; a critical risk without owner and mitigation; the latest success prediction is grade F. + the common refusals

sdlc_story_start Start a story (G2)

Runs the preflight check (G2) on a story in the active sprint and, when it passes, moves it to In Development and returns the builder brief: execution rules, coding standards, the definition of done and the story itself.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
ReturnsG2 passes: status In Development and the builder brief — execution rules, coding standards, definition of done, the story. G2 fails: the story stays Ready with the problems listed. Called again on a story In Development: the brief again, nothing changes.
RefusalsStory not in the active sprint; story not Ready; the story waits on an open blocking question (only a person closes it). + the common refusals

sdlc_verify Record verify results (G3)

Records the results of the project's own typecheck, lint, build and tests for a story in development, exactly as they came out. All four pass: the story moves to In QA (gate G3). A failure counts as one attempt; the third failed attempt blocks the story.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
  • results required object
    • typecheck required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • lint required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • build required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • tests required object
      • pass required boolean
      • summary required string · 1–500 chars
      • passed required integer · ≥ 0
      • failed required integer · ≥ 0
      • skipped integer · ≥ 0 — Focused or skipped tests; any count fails the step.
ReturnsAll four pass: In QA, G3 recorded. Otherwise “attempt n of 3” with the failing steps; the third failed attempt sets Blocked.
RefusalsStory not In Development. Counted as a failed step, not a refusal: tests reported passing with failures, skipped or focused tests, zero tests run. + the common refusals

sdlc_review_request Request the three reviews (G4)

For a verified story: returns three reviewer briefs — architecture, security, functional — each with its own one-time nonce. Run each review in a fresh context (a separate sub-agent with no memory of the build), then submit each with sdlc_review_submit.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
ReturnsThe story printed once, then three reviewer sections — architecture, security, functional — each with its brief and a one-time nonce, and the exact sdlc_review_submit call to make.
RefusalsStory not In QA; no passing G3 on record; a round in which a review was already submitted (“a round cannot be re-issued”). + the common refusals

sdlc_review_submit Submit one review (G4)

Records one reviewer's scores, findings and verdict, using the nonce issued to that reviewer for that story. When all three are in, the story is either cleared for Done (G4) or sent back to development with every finding as a task.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
  • nonce required string
  • reviewer required "architecture" | "security" | "functional"
  • scores required object of integer — Criterion id -> 0-5, one per criterion in the brief.
  • findings required array of object · ≤ 100 items
    • severity required "critical" | "high" | "medium" | "low"
    • text required string · 1–2000 chars
    • location string · 1–500 chars — file:line — a finding without a location does not count.
    • criterion string · 1–64 chars
    • dimension string · 1–64 chars
  • verdict required "approve" | "reject"
  • rationale string · 1–2000 chars — Two or three sentences.
ReturnsThe reviewer's outcome and who is still pending. With the third review in: all three approve (G4) and the story is cleared for Done, or the round is rejected — every finding becomes a task, the story goes back to In Development, and the third rejected round sets Blocked.
RefusalsA nonce never issued, already used, issued for another story or another reviewer; a story not waiting on that round; scores that do not match the reviewer's criteria exactly (the nonce stays unused — submit again). + the common refusals

sdlc_story_done Mark a story Done (G6)

Marks a story Done once verify (G3) and the three-reviewer approval (G4) are on record, and records the pushed branch or commit (G6).

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id required string · S-001 style — A story id such as S-001.
  • pushed_ref required string · 1–200 chars — The pushed branch, tag or commit.
ReturnsStatus Done, G6 recorded with the pushed ref. An approved change request whose stories are all Done is marked implemented.
RefusalsAlready Done; no passing G3 on record; no three-reviewer approval (G4) on record; an open blocking question on the story. + the common refusals

sdlc_audit_request Request the sprint audit (G5)

When no story in the active sprint is still in flight: returns the audit brief — five dimensions, what to check in each, and when the audit blocks.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id required string · SP-1 style — A sprint id such as SP-1.
ReturnsThe audit brief: five dimensions, what to check in each, the scale, and when the audit blocks.
RefusalsSprint not active; a started story still in flight; no story Done; the audit already passed. + the common refusals

sdlc_audit_submit Submit the sprint audit (G5)

Records the audit's five scores (0-5) and findings. Any dimension at 1 or below, or any critical finding, blocks the sprint until the findings are fixed and the audit is run again.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id required string · SP-1 style — A sprint id such as SP-1.
  • scores required object
    • story_fulfilment required integer · 0–5
    • functional_completeness required integer · 0–5
    • data_integrity required integer · 0–5
    • integration_flows required integer · 0–5
    • baseline_integrity required integer · 0–5
  • findings required array of object · ≤ 200 items
    • severity required "critical" | "high" | "medium" | "low"
    • text required string · 1–2000 chars
    • location string · 1–500 chars — file:line — a finding without a location does not count.
    • criterion string · 1–64 chars
    • dimension string · 1–64 chars
ReturnsPass: G5 recorded, next step sdlc_sprint_complete. Block: the blockers and the blocking findings, next step fix and sdlc_audit_request again.
RefusalsSprint not active; no audit of that sprint waiting for results. + the common refusals

sdlc_sprint_complete Complete the sprint (G7)

Completes an audited delivery sprint and records the critical user journeys walked end to end (G7), the merge (G6, scope sprint) and readiness after the sprint (G8: the sprint's recorded due-diligence and load-test runs; score 3 or more passes, 4 meets the target). Stories that did not reach Done return to the backlog; the retrospective follows (sdlc_sprint_retro). A hardening or hotfix sprint completes when every story is Done or escalated and a clean sdlc_bug_detect on it is newer than its last Done. The user says: 'complete the sprint', 'close the sprint', 'finish sprint 2', 'merge the sprint', 'zaključi sprint'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id required string · SP-1 style — A sprint id such as SP-1.
  • integration_flows array of object · ≥ 1 item, ≤ 50 items — Required for a delivery sprint; optional for hardening and hotfix sprints.
    • name required string · 1–200 chars
    • pass required boolean
    • steps_total integer · ≥ 0
    • steps_working integer · ≥ 0
    • notes string · 1–1000 chars
  • merged object — The sprint branch merged and pushed (G6, scope sprint).
    • sprint_branch string · 1–200 chars
    • target_branch required string · 1–200 chars
    • merge_commit required string
    • pushed required true
  • readiness object — Only when no due-diligence or load-test run is recorded for this sprint (self-attested); incident_decision_id names the owner's decision to ship with a failed load test.
    • score required number · 1–5
    • dd_report_id string · 1–40 chars
    • scan_report_id string · 1–40 chars
    • load_test object
      • pass required boolean
      • summary required string · 1–500 chars
      • p95_ms integer · ≥ 0
      • error_rate_pct number · 0–100
    • incident_decision_id string · D-1 style
ReturnsThe sprint completed with G7 (journeys), G6 on the sprint (the merge, when sent) and G8 (readiness, when it applies) recorded; delivered stories and points; stories not Done back to the backlog; next step the retrospective. A failing journey or a G8 fail: the sprint stays active with the reason.
RefusalsSprint not active; a delivery sprint without integration_flows; no passing G5 on record; a story started after the audit; G8 due and the sprint's due-diligence or load-test run missing. A hardening or hotfix sprint: a story neither Done nor escalated, or no clean sweep newer than its last Done story. + the common refusals

sdlc_sprint_retro Sprint retrospective

The retrospective of a completed sprint: what went well, what to improve, what was blocked and why, and actual hours or points per story. The server tabulates estimates against actuals, stores the recalibration factor and says when sizes run outside the estimation bounds. The next delivery sprint does not start until the previous one has its retro. The user says: 'retro', 'retrospective', 'what did we deliver', 'what went wrong this sprint', 'retrospektiva'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id required string · SP-1 style — A sprint id such as SP-1.
  • went_well required array of string · ≤ 10 items, each 1–300 chars
  • improve required array of string · ≤ 10 items, each 1–300 chars
  • blocked required array of object · ≤ 20 items
    • story_id required string · S-001 style — A story id such as S-001.
    • why required string · 1–300 chars
  • actuals object of object — Story id -> { hours?, points? } for stories of this sprint (at most 50).
    • hours number · 0–1000
    • points 1 | 2 | 3 | 5 | 8
  • notes string · 1–1000 chars
  • replace boolean
ReturnsEstimates against actuals per story, the recalibration factor stored for the next estimates, and a note when sizes run outside the estimation bounds.
RefusalsAn unknown sprint; a sprint not completed; a retrospective already on record; actuals for more than 50 stories or for stories outside the sprint. + the common refusals

Decisions, risks and prediction

sdlc_decision_add Record a decision, a question or an assumption

Adds a row to the decision register. kind business (default): a business question nobody has answered yet, who must answer it, and how the behaviour ships until then (switched off, or a conservative default). kind question: an open question with its urgency and the agent's best assumption. kind assumption: something the agent assumed, with its reasoning and confidence. Technical choices belong in the architecture document (sdlc_design_set), not here. Returns the register.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • question required string · 1–1000 chars — Answerable in one line.
  • asked_by required string · 1–200 chars — Who has to answer it (a role).
  • ships_as string · 1–300 chars — switched off | conservative default | … Required for kind business, and for questions about business rules, scope or sign-in.
  • kind "business" | "question" | "assumption"
  • urgency "blocking" | "important" | "nice_to_have" — kind question only. blocking: nothing reasonable can be assumed.
  • category "vision" | "data_model" | "tech_stack" | "ui" | "auth" | "integration" | "business_rules" | "scope" | "other"
  • source "user" | "discovery" | "refinement" | "autonomous" | "review" | "audit" | "build" | "change_request"
  • context string · 1–500 chars
  • assumption string · 1–500 chars — The best assumption; required for a question that is not blocking.
  • auto_assume_minutes integer · 1–1440
  • rationale string · 1–500 chars
  • confidence "high" | "medium" | "low"
  • override_trigger string · 1–200 chars — kind assumption: what would overturn it.
  • story_ids array of string · ≤ 20 items, each S-001 style
ReturnsThe register with the new row (D-001…), status open, and how the behaviour ships until it is answered.
RefusalsA story_ids entry that does not exist; a non-blocking question without its assumption; a technical choice (it belongs in sdlc_design_set). + the common refusals

sdlc_decision_resolve Answer, assume or change a decision

Records the answer to an open row with its date and returns the register. by owner (default) is the owner's own answer — pass their words in owner_words; by agent may only assume a non-blocking question. override: true changes a decided row by appending a new row. Stories built on a changed answer are re-opened or get a task, and the result lists them.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • decision_id required string · D-1 style
  • decision required string · 1–2000 chars
  • outcome "decided" | "assumed" | "dismissed"
  • by "owner" | "agent"
  • rationale string · 1–500 chars
  • override true
  • owner_words string · 1–300 chars — What the owner said, verbatim.
ReturnsThe register with the answer, who gave it and its date; the stories built on a changed answer, re-opened or given a task.
RefusalsNo such decision; a decision already decided (unless override: true); the agent deciding a business decision or closing a blocking question (only the owner does, by: "owner"); a person-only decision while an unattended session runs. + the common refusals

sdlc_risk_set Risk register (add or update)

Adds or updates risks (with id: update). Scores probability × impact into bands (20–25 critical, 12–19 high, 6–11 medium, 1–5 low), flags duplicates by title, returns the sprint risk profile and buffer (10/20/30%) and which critical risks hold sdlc_sprint_start. A vague mitigation ('monitor', 'tbd', under 10 characters) is refused; accepting a risk needs a rationale and files a decision; spike: true drafts a spike story. The user says: 'risks', 'risk register', 'what could go wrong', 'add a risk', 'we accept that risk', 'rizici'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • risks required array of object · ≥ 1 item, ≤ 15 items
    • id string · RISK-001 style — Update this risk; omit to add one.
    • title required string · 1–120 chars
    • category required "technical" | "scope" | "timeline" | "dependency" | "integration" | "security" | "compliance" | "operational"
    • probability required integer · 1–5
    • impact required integer · 1–5
    • mitigation string · 1–300 chars
    • owner string · 1–60 chars — A role.
    • evidence string · 1–200 chars — path[:line]
    • source required "discovery" | "dd" | "scan" | "audit" | "sprint" | "incident" | "perf" | "user"
    • status "open" | "mitigating" | "mitigated" | "accepted" | "resolved"
    • rationale string · 1–300 chars
    • due string
    • spike boolean — The mitigation needs an experiment: draft a spike story.
ReturnsThe register with each risk's band, duplicates flagged, the sprint risk profile and buffer, and the critical risks that hold sdlc_sprint_start; accepted risks file a decision, spikes draft a story.
RefusalsA vague mitigation (monitor, tbd, under 10 characters); accepting a risk without a rationale; an unknown id; more than 60 risks. Nothing is stored when any row is refused. + the common refusals

sdlc_success_predict Development success prediction

A computed prediction (no model call): five dimensions × 20 — requirements clarity, technical feasibility, scope control, risk profile, delivery confidence — from your evidence plus what the project already records (stories, open questions, risks, the latest due diligence, verify and rework history). Grade A–F with RAG, hard caps and the delta against the last prediction. A grade F holds sdlc_sprint_start. The user says: 'will this succeed', 'success prediction', 'what are our chances', 're-score', 'hoće li uspjeti'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • evidence required object
    • tests_present required boolean
    • ci_present required boolean
    • stack_proven required boolean
    • integrations_documented required boolean
    • novel_architecture required boolean
    • infrastructure_understood required boolean
    • first_time_on_critical_path required integer · 0–10
    • integrations_without_public_api required integer · 0–10
    • timeline_vs_estimate required "at_least_80pct" | "60_to_80pct" | "below_60pct" | "unknown"
    • owner_named required boolean
    • entity_model_simple required boolean
    • contradictory_requirements required boolean
    • stakeholder_conflicts required boolean
    • scope_grew_over_20pct required boolean
    • tbd_in_core_features required integer · 0–20
  • feature_confidence array of object · ≤ 15 items
    • area required string · 1–60 chars
    • confidence required "high" | "medium" | "low"
    • note required string · 1–200 chars
  • reason string · 1–200 chars
ReturnsFive dimensions of 20, the caps that applied, the grade A–F with its RAG colour and the delta against the last prediction. Computed on the server, no model call.
RefusalsOnly the common refusals. + the common refusals

Bugs, hardening, readiness and operations

sdlc_bug_report Report a bug

Files one bug as a bug story ("Fix: …") with its severity, repro steps, expected and actual behaviour. With its evidence (error_summary, location path:line and category) and outside an active delivery sprint it is refined by the bug template (G0) and lands Ready; otherwise it lands Draft and is refined like any story. A report matching an open bug's check and location is attached to it. next fix_now (critical/high) leads to sdlc_hotfix_start. The user says: 'report a bug', 'there's a bug', 'this is broken', 'prijavi bug'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • title required string · 1–200 chars
  • what_happened required string · 1–500 chars
  • expected required string · 1–500 chars
  • repro required array of string · ≥ 1 item, ≤ 8 items, each 1–200 chars
  • error_summary string · 1–500 chars — The first error line only — never raw output.
  • location string · 3–300 chars — path:line, relative to the repository root.
  • category required "typecheck" | "lint" | "build" | "unit-test" | "integration-test" | "e2e-test" | "runtime"
  • severity required "critical" | "high" | "medium" | "low"
  • area required "data" | "api" | "interface" | "workflow" | "tests" | "integration" | "security" | "infrastructure"
  • owner required string · 1–200 chars
  • sprint_id string · SP-1 style — The active delivery or hardening sprint it was found in.
  • next "fix_now" | "queue" | "detect" — queue by default.
ReturnsThe bug story (Fix: …, 1 point, priority from severity), Ready when it carries its evidence and is refined by the bug template, otherwise Draft; attached to an open bug when it matches one. next: fix_now leads to the hotfix, detect to the sweep.
RefusalsAn unknown sprint; a completed sprint; a sprint that is not an active delivery or hardening sprint. + the common refusals

sdlc_bug_detect Whole-suite bug sweep (G3, sprint)

Records a whole-suite sweep — typecheck, lint, build, tests and e2e as your agent ran them — and triages every failure into a proposed bug (build critical; typecheck and tests high; lint medium), grouped by area, deduplicated, with the hardening cycle (n of 3). Recorded as gate G3 with scope sprint (never a story's verify failure). Clean → the next step; failures → sdlc_sprint_harden; at cycle 3 the remaining bug stories are Blocked for a person. The user says: 'find bugs', 'what's broken?', 'is everything green?', 'bug sweep', 're-test'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id string · SP-1 style — Default: the active sprint (a hardening or hotfix sprint first), else the last completed one.
  • results required object
    • typecheck required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • lint required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • build required object
      • pass required boolean
      • summary required string · 1–500 chars — One line: the command and what it printed.
    • tests required object
      • pass required boolean
      • summary required string · 1–500 chars
      • passed required integer · 0–100000
      • failed required integer · 0–100000
      • skipped integer · 0–100000
      • coverage_pct number · 0–100
      • duration_s integer · 0–86400
    • e2e object
      • pass required boolean
      • summary required string · 1–500 chars
      • passed required integer · 0–100000
      • failed required integer · 0–100000
      • duration_s integer · 0–86400
  • failures array of object · ≤ 30 items
    • check required "typecheck" | "lint" | "build" | "unit-test" | "e2e-test"
    • summary required string · 1–500 chars
    • location string · 3–300 chars — path:line, relative to the repository root.
    • area "data" | "api" | "interface" | "workflow" | "tests" | "integration" | "security" | "infrastructure"
    • count integer · 1–10000
ReturnsThe sweep (DT-nnn) with every failure triaged into a proposed bug, grouped by area and deduplicated, and the hardening cycle (n of 3); G3 recorded with scope sprint. Clean: the next step. Failures: sdlc_sprint_harden. At cycle three the remaining bug stories are Blocked for a person.
RefusalsA story still in flight in the sprint. + the common refusals

sdlc_sprint_harden Open a hardening sprint

Opens a hardening sprint — restore a green suite, no new features — from a failing sdlc_bug_detect (detection_id, with the bug stories to fix, or the detection's own failures when stories is omitted) or from queued bugs (bug_ids). Bug stories from a detection are refined by the bug template (G0). Returns the hardening brief and the first story by severity. Cycle budget 3. The user says: 'harden it', 'hardening sprint', 'fix what's broken', 'make the build green', 'fix the queued bugs'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • detection_id string · DT-001 style
  • bug_ids array of string · ≤ 20 items
  • stories array of object · ≥ 1 item, ≤ 20 items
    • title required string · 1–200 chars
    • check required "typecheck" | "lint" | "build" | "unit-test" | "e2e-test"
    • severity required "critical" | "high" | "medium" | "low"
    • priority "P0" | "P1" | "P2" | "P3"
    • area required "data" | "api" | "interface" | "workflow" | "tests" | "integration" | "security" | "infrastructure"
    • summary required string · 1–500 chars
    • location string · 3–300 chars — path:line, relative to the repository root.
    • owner required string · 1–200 chars
    • regression_test_needed boolean
  • max_cycles integer · 1–3
ReturnsThe hardening sprint (parent sprint, cycle, budget), its bug stories refined by the bug template, the hardening brief and the first story by severity.
RefusalsBoth or neither of detection_id and bug_ids; an unknown or clean detection, or not the newest one; no delivery sprint; a cycle over the budget; a hardening sprint already running for that parent; a story in flight. + the common refusals

sdlc_hotfix_start Start a hotfix (fast track)

The fast track for a critical or high bug: a hotfix sprint beside any active delivery sprint, holding one bug story marked hotfix. Preflight (G2), verify (G3, three attempts), the three reviews (G4, no shortcut) and push (G6) stay mandatory; then sdlc_bug_detect on the hotfix sprint and sdlc_sprint_complete. Pass story_id (an existing refined bug story) or bug (the sdlc_bug_report fields, with its evidence). The user says: 'hotfix', 'production is down', 'urgent fix', 'P0', 'SEV1', 'hitno popravi'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id string · S-001 style — A story id such as S-001.
  • bug object
    • title required string · 1–200 chars
    • what_happened required string · 1–500 chars
    • expected required string · 1–500 chars
    • repro required array of string · ≥ 1 item, ≤ 8 items, each 1–200 chars
    • error_summary string · 1–500 chars — The first error line only — never raw output.
    • location string · 3–300 chars — path:line, relative to the repository root.
    • category required "typecheck" | "lint" | "build" | "unit-test" | "integration-test" | "e2e-test" | "runtime"
    • severity required "critical" | "high" | "medium" | "low"
    • area required "data" | "api" | "interface" | "workflow" | "tests" | "integration" | "security" | "infrastructure"
    • owner required string · 1–200 chars
  • reason required string · 1–300 chars — Who is affected and why it cannot wait.
ReturnsThe hotfix sprint beside the delivery sprint, its one bug story marked hotfix, and the fast-track brief: preflight, verify, the three reviews, push, then a sweep and completion.
RefusalsBoth or neither of story_id and bug; a hotfix already running; not a bug story; a medium or low bug (it goes to hardening); a Draft story or a bug without its evidence; a story that is not Ready; a bug matching one already in progress. + the common refusals

sdlc_dd_record Record a due-diligence run (readiness trend)

Records a due-diligence run on this project — the fields from prodready_dd_assess (and optionally prodready_assess) — as DD-n: overall, grade, dimension scores, findings by severity and the top risks, never remedies. With the report_id of this account's due-diligence page from the last seven days the figures are taken from the server's own summary (server-scored); otherwise the run is self-attested. Updates the readiness and its trend toward the target of 4 out of 5. The user says: 'record the due diligence on the project', 'due-diligence trend', 'are we at 4 out of 5'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • run required object
    • overall required number · 1–5
    • grade required "weak" | "at risk" | "fair" | "strong" | "excellent"
    • dimensions required array of object · ≤ 18 items
      • id required string · 1–40 chars
      • score integer or null
      • status required "scored" | "partial" | "not_evaluated"
    • findings_by_severity required object
      • critical required integer · 0–10000
      • high required integer · 0–10000
      • medium required integer · 0–10000
      • low required integer · 0–10000
    • top_risks required array of object · ≤ 10 items
      • dimension required string · 1–40 chars
      • item string · 1–40 chars
      • location required string · 1–300 chars
      • severity required "critical" | "high" | "medium" | "low"
      • risk required integer · 1–25
      • note required string · 1–200 chars
    • coverage number · 0–1
    • report_id string
    • at string · 10–40 chars
  • scan object
    • score required integer · 0–100
    • grade required string · 1–20 chars
    • report_id string
  • sprint_id string · SP-1 style — A sprint id such as SP-1.
  • to_backlog boolean
ReturnsThe run (DD-n) — server-scored when its report page belongs to this account and is under seven days old, otherwise self-attested — its diff against the previous run, the readiness and the distance to 4 out of 5.
RefusalsUnknown dimension ids; an unknown sprint. + the common refusals

sdlc_perf_record Record a load test

Records k6-style load-test results (aggregate, per route, capacity): scored 1–5 with the due diligence's load-test bands, pass or fail against the thresholds (p95 800 ms, 5% errors by default), and a verdict against the previous run of the same profile. A run with sprint_id is that sprint's readiness load test (G8). Credentials only from environment variables; target_label is an environment name or bare host. Inside an unattended session only smoke runs, unless limits.perf names the profile and target. The user says: 'load test', 'performance test', 'how fast is it', 'capacity', 'run k6'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id string · SP-1 style — A sprint id such as SP-1.
  • profile required "smoke" | "load" | "stress"
  • target_label required string · 1–120 chars — An environment name or a bare host — no path, query or credentials.
  • outage_mode required boolean
  • aggregate required object
    • p95_ms_worst required integer · 0–600000
    • p95_ms_avg required integer · 0–600000
    • error_rate_worst_pct required number · 0–100
    • rps_total required number · ≥ 0
    • scenarios_total required integer · 0–1000
    • scenarios_failed required integer · 0–1000
    • thresholds_passed required boolean
  • per_route array of object · ≤ 30 items
    • route required string · 1–120 chars
    • family string · 1–40 chars
    • p95_ms required integer · 0–600000
    • error_rate_pct required number · 0–100
    • rps number · ≥ 0
  • capacity object
    • concurrent_users_at_slo required integer · 0–10000000
    • rps_sustained required number · ≥ 0
    • limiting_family required string · 1–40 chars
    • method required string · 1–60 chars
  • thresholds object
    • p95_ms integer · 1–600000
    • error_rate_pct number · 0–100
  • findings array of object · ≤ 15 items
    • route string · 1–120 chars
    • family string · 1–40 chars
    • severity required "critical" | "high" | "medium" | "low"
    • text required string · 1–300 chars
    • evidence string · 3–300 chars — path:line, relative to the repository root.
  • to_backlog boolean
ReturnsThe run with its 1–5 score, pass or fail against the thresholds, the verdict against the previous run of the same profile and, when asked, draft stories. With sprint_id it counts as that sprint's readiness load test (G8).
RefusalsA target_label with a path, query or credentials; an unknown sprint; inside an unattended session, any profile but smoke unless the session's limits name it. + the common refusals

sdlc_monitoring_record Record monitoring and incidents

Records the monitoring checklist (M-01…M-10: yes, no or n/a), the monitored targets and production incidents. Scores the monitoring, flags "armed but blind" when no target was seen in 24 hours, turns a SEV1 with its evidence into a critical bug story (next sdlc_hotfix_start) and reminds you of missing postmortems. The same incident twice within 15 minutes is refused. The user says: 'monitoring', 'alerts', 'is it monitored', 'incident', 'postmortem', 'uptime', 'on-call', 'nadzor'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • checklist required object of object — Checklist id (M-01, M-02, M-03, M-04, M-05, M-06, M-07, M-08, M-09, M-10) -> { status, note }.
    • status required "yes" | "no" | "n/a"
    • note string · 1–200 chars
  • targets array of object · ≤ 20 items
    • label required string · 1–80 chars
    • kind required "web" | "api" | "worker" | "db" | "queue"
    • last_seen string · 10–40 chars
  • incidents array of object · ≤ 10 items
    • id string
    • title required string · 1–200 chars
    • severity required "SEV1" | "SEV2" | "SEV3"
    • started required string · 10–40 chars
    • resolved string · 10–40 chars
    • summary required string · 1–500 chars
    • error_summary string · 1–500 chars
    • location string · 3–300 chars — path:line, relative to the repository root.
    • verdict "page" | "fix" | "tune" | "ignore"
    • story boolean
    • postmortem object
      • cause required string · 1–500 chars
      • what_changed required string · 1–500 chars
      • learning required string · 1–300 chars
ReturnsThe monitoring score, targets armed but blind (none seen in 24 hours), incidents recorded, missing postmortems; a SEV1 with evidence becomes a critical bug story and the next step is the hotfix.
RefusalsUnknown checklist ids; the same incident triaged twice within 15 minutes; an unknown incident id. + the common refusals

Releases, change requests and analytics

sdlc_release Releases and deployments

plan: a release (REL-n) of completed sprints with a derived changelog — Done stories by type, fixed bugs, decisions that ship switched off as known limitations, implemented change requests. Refused for a sprint that is not completed, already in a live release, or holding an open blocking question. advance: planned → staging (deployed to a non-production environment with a passing smoke check) → ready (rollback plan and a readiness score of 3 or more on record) → released (approved_by a role, merge_commit and a production deployment with a passing smoke check). rollback: released → rolled_back with a reason. Releasing and rolling back are a person's steps. Environment labels are names only — no URL, host or credentials. The user says: 'release', 'cut a release', 'ship version 1.2', 'ship it', 'deploy to staging', 'changelog', 'release notes', 'roll back', 'izdanje'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • action required "plan" | "advance" | "rollback"
  • release_id string · REL-1 style
  • version string · 1–40 chars
  • name string · 1–120 chars
  • type "major" | "minor" | "patch" | "hotfix"
  • sprint_ids array of string · ≥ 1 item, ≤ 20 items, each SP-1 style
  • status "staging" | "ready" | "released"
  • git_tag string · 1–100 chars
  • merge_commit string
  • approved_by string · 1–60 chars — A role, e.g. product owner — never a name or an email.
  • rollback_plan string · 1–1000 chars
  • notes string · 1–2000 chars
  • reason string · 1–500 chars
  • deployed object
    • environment_label required string · 1–60 chars — An environment name such as staging or production — no URL, host credentials or query.
    • ref required string · 1–100 chars — The tag or commit deployed.
    • smoke required object
      • pass required boolean
      • summary required string · 1–300 chars
    • at string · 10–40 chars
ReturnsThe release (REL-n) with its changelog, status and deployments; each advance the new status; rollback the rolled-back release. release_next names the following step.
Refusalsplan without version and sprints, a reused version, a sprint not completed or already in a live release, an open blocking question on its stories, 50 releases. advance out of order; staging without a passing non-production smoke check; ready without a rollback plan or with readiness below 3; released without approved_by (a role — an email is refused), merge_commit and a passing production smoke check. Releasing and rolling back while an unattended session runs (a person's step). + the common refusals

sdlc_change_request Change request (scope change)

submit: a change to the agreed scope (CR-nnn) — stories to add, modify or remove — with its impact computed: points added / removed / changed, stories and sprints affected, whether the active sprint is touched, the delta against the statement of work. At most 5 open at a time. decide (a person's step, reviewed_by a role): approved adds the new stories as Draft (origin change_request), applies the changes (the story is refined again), removes stories that have not started, and marks the SoW stale; rejected or deferred changes nothing. A story in flight or Done is not modified or removed (a Done story changes through a new story). The user says: 'change request', 'the client wants …', 'scope change', 'add this to the scope', 'drop that feature', 'zahtjev za promjenu'.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • action required "submit" | "decide"
  • cr_id string · CR-001 style
  • title string · 1–200 chars
  • description string · 1–1000 chars
  • justification string · 1–500 chars
  • priority "low" | "medium" | "high" | "critical"
  • requested_by string · 1–60 chars — A role, e.g. client or product owner.
  • stories_to_add array of object · ≤ 5 items
    • title required string · 1–200 chars — One short verb phrase naming what the user can do.
    • as_a string · 1–300 chars — The role this story serves.
    • i_want string · 1–500 chars — What that role can do after this story.
    • so_that string · 1–500 chars — The benefit the role gets.
    • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
    • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
    • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
    • risk "low" | "medium" | "high"
    • owner string · 1–200 chars — Who builds the story and answers questions about it.
    • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
    • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
    • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
    • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
    • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
    • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
    • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
    • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
    • sort_order integer · 0–9999
  • stories_to_modify array of object · ≤ 10 items
    • story_id required string · S-001 style — A story id such as S-001.
    • changes required object
      • title string · 1–200 chars — One short verb phrase naming what the user can do.
      • as_a string · 1–300 chars — The role this story serves.
      • i_want string · 1–500 chars — What that role can do after this story.
      • so_that string · 1–500 chars — The benefit the role gets.
      • acceptance_criteria array of string · ≤ 8 items, each 1–500 chars — Observable pass-or-fail statements; at least 3, at most 8.
      • tasks array of string · ≤ 15 items, each 1–500 chars — Technical tasks in build order; at least 2, at most 15 — a story that needs more is split.
      • estimate_points integer · 0–100 — Points on the scale 1, 2, 3, 5, 8; above 5 is split.
      • risk "low" | "medium" | "high"
      • owner string · 1–200 chars — Who builds the story and answers questions about it.
      • depends_on array of string · ≤ 20 items, each S-001 style — Stories that must be Done before this one starts.
      • functional_requirements array of string · ≤ 10 items, each 1–300 chars — What the story must do, in business terms.
      • non_functional_requirements array of string · ≤ 8 items, each 1–300 chars — Response time, access, accessibility, logging: the targets that apply.
      • type "feature" | "bug" | "refactor" | "test" | "docs" | "chore" | "spike" | "ops" — feature by default.
      • layer "data" | "server" | "workflow" | "interface" | "tests" | "ops" | "docs"
      • design_refs array of string · ≤ 6 items, each 1–200 chars — Repository-relative design file, wireframe page name, or the literal "none".
      • routes array of string · ≤ 6 items, each 2–120 chars — The routes this story creates, e.g. /settings/profile.
      • requirement_refs array of string · ≤ 10 items, each 1–64 chars — Discovery or vision feature ids, e.g. feat-checkout.
      • sort_order integer · 0–9999
  • stories_to_remove array of string · ≤ 10 items, each S-001 style
  • decision "approved" | "rejected" | "deferred" — yes → approved, no → rejected, not now → deferred.
  • reviewed_by string · 1–60 chars — A role, e.g. product owner.
  • rationale string · 1–500 chars
Returnssubmit: the request (CR-nnn) with its impact — points added, removed and changed, stories and sprints affected, the active sprint touched or not, the delta against the statement of work. decide: the decision and what was applied.
Refusalssubmit without a title or without any change; a sixth open request; 100 requests; an email in requested_by. decide without a decision or reviewed_by (a role); a closed request; changing or removing a story in flight or Done. + the common refusals

sdlc_sprint_analytics Sprint analytics (velocity and bottlenecks)

Read-only metrics computed from the project: per sprint the stories total / Done / Blocked / carried over, completion, points planned and done (velocity), verify failures (story G3 rows only), rework cycles, the review rejection rate, audit rounds, cycle time (median, p90), estimate accuracy from the retro, gate pass/fail counts, bottlenecks (top 5), retry root causes, per owner, tokens where the host reported them, the readiness trend and — with compare — the trend between sprints with neutral signals. Nothing is stored; the recommendations are yours, written into sdlc_sprint_retro improve. The user says: 'sprint analytics', 'velocity', 'how fast are we', 'burndown', 'how did the sprint go', 'bottlenecks', 'compare sprints', 'analitika'.

Tierlicensed Licensed — the description starts with [SDLC licence] · read-only, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • sprint_id string · SP-1 style — A sprint id such as SP-1.
  • compare boolean
ReturnsPer sprint: stories, completion, velocity, verify failures, rework, review rejection rate, audit rounds, cycle time (median, p90), estimate accuracy, gate pass/fail; across sprints the bottlenecks, retry causes, per-owner figures, the readiness trend and, with compare, the trend table. Nothing is stored.
RefusalsAn unknown sprint. + the common refusals

Status, report, dashboard and autonomous work

sdlc_status Project status and next step

The board by state, the gate ledger summary, open decisions and questions, discovery, risks and documents, and the next allowed step. Call it whenever you are unsure what comes next. With story_id it prints that one story in full — how a builder, reviewer or auditor fetches a story a brief listed by id. With a reviewer's one-time nonce it prints that reviewer's brief and the story, so the host hands a reviewer only its nonce.

Tierlicensed Licensed — the description starts with [SDLC licence] · read-only, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • story_id string · S-001 style — A story id such as S-001.
  • nonce string · 8–64 chars — A reviewer's one-time nonce from sdlc_review_request.
ReturnsThe board by state, the gate ledger summary, open decisions and questions, discovery, risks and documents, the autonomous session when one runs, and the next allowed step. With story_id, that one story in full.
RefusalsOnly the common refusals. + the common refusals

sdlc_report Project report page

The project and sprint report as text, plus an unlisted page on mcp.prodready.si in the prodready design, kept for seven days. Open it for the user and give them the link.

Tierlicensed Licensed — the description starts with [SDLC licence] · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
ReturnsThe project and sprint report as text, and an unlisted page on mcp.prodready.si/r/… with REPORT PAGE: and ACCESS CODE:, kept seven days.
RefusalsOver 30 report pages in an hour on one account. + the common refusals

sdlc_dashboard Project dashboard (local file)

The whole project as one self-contained HTML file for the user's own computer: board, backlog, sprints, gate ledger, reviews, decisions, audits, timeline, cost and report pages. Save the attached file as .prodready/dashboard.html in the repository and open it in the browser; call this again after each step to refresh it. Nothing is stored on the server. format "summary" returns the counts as text only.

Tierlicensed Licensed — the description starts with [SDLC licence] · read-only, idempotent
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • format "html" | "summary" — html (default): the dashboard file plus a note; summary: text only.
ReturnsOne self-contained HTML file as an embedded resource (prodready://dashboard/<id>.html) to save as .prodready/dashboard.html: board, backlog, sprints, gate ledger, reviews, decisions, audits, timeline, cost and report ids (never their access codes). format: "summary": the counts and the next step as text.
RefusalsOnly the common refusals. + the common refusals

sdlc_autonomous Run it autonomously

Autonomous work. start opens a session (limits: stories, sprints, minutes; defaults 1 sprint and 240 minutes) — it needs the person's go-ahead in their own words (authorised_words, e.g. 'run it unattended for one sprint'). status returns the ONE next step of the loop: do exactly that step, then call status again; it pauses with needs_human when a blocking question or a Blocked story needs a person, stops at a limit, and lists the questions (blocking, pending with when each is assumed, assumed) — show them to the user every cycle and keep working. pause, resume, stop ('SDLC off') and compact manage the session; pause and stop work without a licence.

Tierlicensed Licensed — the description starts with [SDLC licence]; pause and stop work without one · writes
Arguments
  • project_id required string · 8-char id — The id sdlc_project_init returned.
  • action required "start" | "status" | "pause" | "resume" | "stop" | "compact"
  • mode "full" | "backlog" | "sprint" — start: full (default without stories), backlog (default with stories), sprint (finish the active or next sprint, then stop).
  • authorised_words string · 1–300 chars — start: the person's own words, verbatim — never written by the agent.
  • authorised_as string · 1–80 chars — start: a display name or role (local dashboard only).
  • limits object
    • stories integer · 1–500
    • sprints integer · 1–50
    • minutes integer · 10–10080
    • readiness_target number · 3–5
  • max_parallel integer · 1–5
  • reason string · 1–300 chars — pause / stop.
  • for_ids array of string · ≤ 5 items — pause: the items a person is about to decide.
  • user_words string · 1–300 chars — pause: the person's words.
  • session_id string · AS-1 style — An autonomous session id such as AS-1; implied when a session is active.
Returnsstart: the session (AS-1…), its limits and which were defaulted, the autonomous brief and the first step. status: exactly one next step, the phase and status line, the work streams, the questions (blocking, pending with when each is assumed, assumed recently), the limits left — or needs_human, a stop at a limit, or completion. pause / resume / stop: the session's new state; nothing is lost. compact: the step history trimmed.
Refusalsstart without the person's own go-ahead, or with vague words (keep going, just build it) — a confirmation_question comes back; start while another session is active or paused; mode full on a project that already has stories; resume on a stopped or completed session; no session running. pause and stop work without a licence. + the common refusals

07Prompts and slash commands

The server publishes 26 MCP prompts. Hosts that surface prompts show them as commands; in Claude Code each is /prodready:<name>. Every SDLC prompt starts with the licence check and, without a licence, tells you what the SDLC includes before asking whether to request it.

CommandWhat it does
/prodready:scan
Is my app production-ready?
Run the free readiness scan on this repository: probe, run the 118 read-only checks, assess, open the report.
/prodready:dd
Due diligence
Run the free 18-dimension technical due diligence on this repository: the scan first if it has not run, then every dimension's checklist with file:line evidence, scored and reported with a risk heatmap.
/prodready:sdlc
SDLC on
Run the prodready SDLC on this project: licence check, project init, backlog, refinement, sprint, verify, three reviews, audit — every gate in order.
/prodready:status
Where are we?
Show the state of the SDLC project in this repository: board, gate ledger, open decisions and the next allowed step.
/prodready:next
Next step
Do the next allowed SDLC step for this project — whatever the server says comes next — and stop after it.
/prodready:dashboard
Dashboard
Open the SDLC dashboard for this project on your own computer: the board, backlog, sprints, gate ledger, reviews, decisions, audits and timeline in one local HTML file.
/prodready:report
Report
Write the project report page and hand over the link and its access code.
/prodready:licence
Licence
Say whether this account has the SDLC licence, and request it if the user wants it.
/prodready:help
What can prodready do?
Explain, in the user's words, what to say to get a scan, a due diligence, the SDLC, a status, a report or the licence.
/prodready:refine-all
Refine everything (autopilot)
Refine every Draft story without asking you: answers from the sources with their reasons, business questions filed as decisions that ship switched off, then the report.
/prodready:autonomous
Run it autonomously
Run the SDLC unattended within your limits: loop on sdlc_autonomous status, take every step through the gates, show the pending questions every cycle, stop when a decision needs you.
/prodready:discover
Discovery
Discovery on this project: read what exists here, ask only the business questions the rounds list, reach 80 of 100 and pass gate GD.
/prodready:vision
Product vision
Record the product vision: journeys, modules and features, with what is built, in progress, planned or missing.
/prodready:sow
Statement of work
Record the scope if it is missing and issue the statement of work as a report page with its access code.
/prodready:journeys
User journeys
Map the user journeys as screens and links, bound to the stories, and show the gaps.
/prodready:wireframes
Wireframes
Draw the wireframes in this repository following the brief, record them by path and open the prototype.
/prodready:sdd
Architecture document
Write the architecture document (SDD): sections, decision records and improvements that become stories.
/prodready:docs
Generate the docs
Generate the documentation with generators in this repository and record them by path.
/prodready:bugs
Bugs
Report a bug as a bug story, or sweep the whole suite and triage what fails; a failing sweep opens a hardening sprint.
/prodready:hotfix
Hotfix
The fast track for a critical bug: a hotfix sprint with the gates and the three reviews still mandatory.
/prodready:perf
Load test
Run a load test on this project and record the result: score, verdict against the last run, pass or fail.
/prodready:monitoring
Monitoring
Record the monitoring checklist, the watched targets and production incidents; a SEV1 goes to the hotfix fast track.
/prodready:retro
Retrospective
The retrospective of the last completed sprint: delivered, blocked, estimates against actuals.
/prodready:analytics
Sprint analytics
Velocity, completion, verify failures, rework, cycle time, bottlenecks and the trend between sprints; 3–5 recommendations into the open retro.
/prodready:release
Release
Plan a release of the completed sprints, show the changelog and what ships switched off, deploy to staging, record the rollback plan; production only on your approval.
/prodready:change
Change request
Submit a scope change with its impact; it is decided only on your yes, with your role, then the new or changed stories are refined.

Plain-language triggers

You never need the commands. Your agent matches what you say — in any language, by meaning — to one of these flows; prodready_help does the same when your agent is unsure. Straight from the server's router:

You say (any language)What happensTools
SDLC off · stop · pause · stop the autopilotstops the flow; an autonomous session is stopped (or paused) with sdlc_autonomous — free even without a licence; sdlc_status resumes later, nothing is lostsdlc_autonomous
refine everything · refine the whole backlog on autopilot · autonomous refinementautonomous refinement: every Draft story answered from the discovery brief, the documents and the codebase, each answer with its own reason; business questions become decisions that ship switched off — never questions to you. Needs your go-ahead in your own wordssdlc_project_list sdlc_refine_all
SDLC autonomous · run it autonomously · autopilot · status of the run · resume the runautonomous work: the whole SDLC loop unattended within your limits (stories, sprints, minutes) — refine, plan, build, verify, three reviews, audit — stopping when a decision needs you; pending questions are shown every cycle. Needs your go-ahead in your own wordssdlc_project_list sdlc_autonomous
velocity · how fast are we · burndown · how did the sprint go · bottleneckssprint analytics computed from the project: velocity, completion, verify failures, rework, review rejections, cycle time, estimate accuracy, bottlenecks and the trend between sprints — read-only; the recommendations go into the retrosdlc_sprint_analytics
release · deploy · ship it · changelog · roll backa release of completed sprints with its changelog, deployed to staging with a smoke check, ready with a rollback plan, released to production only on a person's approval; roll back when it breakssdlc_release
change request · scope change · the client wants …a scope change with its impact in points, stories and the statement of work; a person approves it, then the new stories arrive as Draftsdlc_change_request
cost · effort so far · hours spent · tokens usedeffort only — points, recorded hours, wall-clock time and the model tokens the host reported, per sprint and story (the dashboard's Cost tab); no money is stored or printedsdlc_project_export sdlc_dashboard
record the due diligence on the project · due-diligence trend · are we at 4 out of 5a due-diligence run recorded on the SDLC project (server-scored from its report page, or self-attested): the readiness trend toward 4 out of 5prodready_dd_assess sdlc_dd_record
hotfix · production is down · urgent fix · P0the fast track for a critical bug: a hotfix sprint beside the delivery sprint, one bug story, preflight, verify, the three reviews and push still mandatorysdlc_bug_report sdlc_hotfix_start
report a bug · find bugs · what's broken · bug sweepone bug becomes a bug story (refined by the bug template when it carries its evidence); a whole-suite sweep triages every failure; a hardening sprint restores a green suitesdlc_bug_report sdlc_bug_detect sdlc_sprint_harden
load test · performance test · how fast is it · capacitya k6-style load test your agent runs (credentials from the environment only), recorded with its score, verdict against the last run and pass or fail against the thresholdssdlc_playbook sdlc_perf_record
monitoring · alerts · incident · postmortem · on-call · sentinelthe monitoring checklist, the watched targets (armed but blind when none was seen in a day) and production incidents; a SEV1 with evidence goes to the hotfix fast tracksdlc_monitoring_record sdlc_hotfix_start
retro · retrospective · what did we deliverthe sprint retrospective: delivered and blocked, estimates against actuals and the recalibration factorsdlc_sprint_retro
risks · risk register · what could go wrong · will this succeedthe risk register scored into bands (critical risks without owner and mitigation hold the sprint), and a computed success prediction A–Fsdlc_risk_set sdlc_success_predict
create the backlog · import my backlog · turn the requirements into stories · UI contractthe whole backlog in one validated write — sprints, stories and the UI contract — dry run first, nothing stored on any refusalsdlc_playbook sdlc_contract_set sdlc_backlog_import
due diligence · deep review · audit the architecturethe free 18-dimension technical due diligence: your agent reads the code against our rubrics and checklists (1-5 per dimension, file:line evidence), the server scores it, weights it, draws the risk heatmap and leaves a report page with an access code. End-to-end due diligence is both: the scan first (if it has not run in this session), then thisprodready_probe prodready_assess prodready_dd_brief prodready_dd_assess
discovery · gather requirements · interview me · here are my docsdiscovery: your agent reads what exists here, asks you only the business questions it cannot answer, scores five knowledge areas to 80 of 100 and records gate GD — kinds, labels and scores only, never document contentssdlc_licence_status sdlc_project_list sdlc_discovery
statement of work · SoW · proposalrecords the scope (objective, in, out) and issues a versioned statement of work as a report page with an access code — points, never hours or moneysdlc_scope_set sdlc_sow_create
product vision · feature map · what are we buildingthe product vision in business language: journeys, modules and features, each feature built / in progress / planned from its storiessdlc_vision_set
user journeys · user flowsthe screens and links per persona, bound to the stories that build them, with coverage and gapssdlc_journeys_set
wireframes · mock-ups · prototypewireframes drawn in this repository by your agent (paths recorded, never images), completeness checked and pages assigned to storiessdlc_playbook sdlc_wireframes_set
architecture document · SDD · architecture decisionsthe architecture document: eight standard sections with text diagrams, decision records and improvements that become storiessdlc_playbook sdlc_design_set
generate the docs · API docsdocumentation produced by generators in this repository that can run again, recorded by pathsdlc_playbook sdlc_docs_record
is it production-ready? · scan · check my app · auditthe free readiness scan: 118 read-only checks run by your agent on this machine, a 0-100 score and a graded report page with an access code. The 18-dimension review is the dd flow; end-to-end due diligence is bothprodready_probe prodready_assess
SDLC on · run the SDLC · fix it properly · sprintour delivery process on this project: refined backlog, sprints, seven gates, three independent reviews per change, audits, a ledger (needs the licence)sdlc_licence_status sdlc_project_init
dashboard · show me the board · open the dashboardthe whole project as one HTML file on your own computer: board, backlog, sprints, gate ledger, reviews, decisions, audits, timeline, reports. Your agent saves it as .prodready/dashboard.html and opens it; say it again after each step to refresh. Nothing is stored on the serversdlc_project_list sdlc_dashboard sdlc_project_export
where are we? · status · what's nextthe board, the gate ledger, open decisions and the next allowed stepsdlc_project_list sdlc_status
next · continue · go on · keep goingexactly the next allowed step, then stop; a paused autonomous session is resumed (sdlc_autonomous action resume). These words never start an unattended runsdlc_status sdlc_autonomous
report · give me the linkthe project report page (link + access code) — or the scan report if there is no SDLC projectsdlc_report
do I have the licence? · unlock · request the SDLClicence state; the payment link by email; tools unlock automatically once paid. Prices: prodready.si/pricingsdlc_licence_status sdlc_request_access
delete my project · remove my datadeletes the project documents and its report pages; nothing else is keptsdlc_project_list sdlc_project_delete

08Licence

  • Sign-in is free. So is the readiness scan, and it stays free.
  • The SDLC tools unlock with the licence. One licence per sign-in email; unlimited projects; the reviewer panel included; process updates for the year; the SDLC dashboard on your own computer.
  • Request it by saying request the SDLC (your agent calls sdlc_request_access, optionally with a note, a company and a rough project count) or with the form on the pricing page. Your agent should ask you before it calls the tool.
  • The payment link comes by email, to the address you signed in with. A person reads every request too and answers questions.
  • Unlock is automatic. Once it is paid, the sdlc_* tools unlock on your account, usually within a minute. Nothing to reinstall; sdlc_licence_status shows the date it runs until.
  • When it ends, the licensed tools lock again. sdlc_project_list, sdlc_project_export and sdlc_project_delete keep working — your data stays readable in the dashboard and deletable — and an autonomous run can still be paused or stopped.

The price: see pricing.

09Privacy & data

WhatLeaves your machineStored
Scan evidenceCounts, repo-relative file paths, identifier names, short quotes of command output. Never file contents, never secrets.No. Scored in memory for one call, never stored, never logged.
Scan report page—Unlisted, noindex, deleted after seven days. report: "none" stores nothing.
SDLC project documentsStories, sprints, gate results, the ledger, decisions — what your agent sends. Never code.Under your account until you delete them.
SDLC report pages—Unlisted, seven days, behind an access code, and removed with the project. The statement of work is one of them.
Discovery and documentsDocument kinds and labels, scores, short summaries, repository paths of wireframes and generated docs. Never document contents, never images.In the project document, until you delete it.
Local dashboardNothing: it reads your project from our server into your own browser.The sign-in on your computer (~/.prodready/dashboard.json); nothing new on the server.
Contact recordYour email, the time, the host name.Yes — it is the account.
Licence requestYour email, the host name and what you type into the request.Yes, to answer it.

Deleting a project: ask your agent to delete it. It calls sdlc_project_list for the id, then sdlc_project_delete with confirm: true, which removes the document, its index entry and its report pages. It cannot be undone, and it works without a licence.

Usage is counted per day, per event and per host, without the account; analytics never receive your email or its hash. The full policy: prodready.si/privacy.

10Troubleshooting

You seeIt meansDo this
“tools fetch failed” right after sign-inThe host's first tool fetch after sign-in did not go through.Reconnect once: /mcp in Claude Code → prodready → Reconnect. The token is fine.
401 / “The access token is invalid or expired” / the host asks you to authenticate againThe access token lapsed and could not be refreshed, or was revoked.Reconnect from the host; sign in by email again if asked. Your projects are bound to the email, not the token.
“Open the link in the browser where you started.”The magic link was opened in another browser or device.Open it in the starting browser, or type the 6-digit code into the sign-in page there.
“Sign-in expired” / “Link expired”The sign-in page is older than ten minutes, the link older than fifteen, or it was already used.Start the connection again from your host.
“Unknown client”The host's registration with the server is gone.Remove the server from your host and add it again; it registers anew.
“Too many links requested. Try again in an hour.”Five links per email, thirty per address, per hour.Use the last link you received, or wait the hour.
“The SDLC tools are part of the prodready SDLC licence…”The licence is not active for the email you signed in with.Request it (§08). Signed in with another address? Remove the server, add it again and sign in with the licensed one.
“…Next allowed step: …”A step skipped a gate, or ran in the wrong state.Do that step. The server will not skip a gate for anyone. sdlc_status shows where you are.
“…this change was not stored” / “not stored, call again”Two calls changed one project at the same instant.Call the same tool again with the same arguments.
“This report link has expired or never existed.”Report pages live seven days.Run the scan or sdlc_report again for a fresh page.
“Report pages are limited to 30 an hour per account…”The hourly report-page limit.Wait, or run prodready_assess with report: "none".
“prodready_assess needs the structured results of prodready_probe”The agent called assess without results, or with fields the schema does not list.Call prodready_probe, run the commands, send evidence.results keyed by check id.
“Not started: an unattended run needs the person's go-ahead in their own words.”Autonomous mode or autonomous refinement was asked to start without your own words, or with vague ones.Tell your agent in a sentence, e.g. run it unattended for one sprint; it passes your words as they are.
An autonomous run paused with needs_humanA blocking question or a Blocked story needs a person, or the same step came back five times.Answer the one question your agent shows (answer D-n: …), then resume the run.
The local dashboard asks you to sign in againIts sign-in expired or was revoked.Sign in with the same email you use in your coding agent. Delete ~/.prodready/dashboard.json to switch accounts.
A story is BlockedThree failed verify attempts, or three rejected review rounds.A person decides what changes about the story; then sdlc_refine releases it.
HTTP 413A request body over 2 MB.Send fewer results per call.

11Protocol notes for integrators

Transport and versions

MCP over streamable HTTP at https://mcp.prodready.si/mcp. The era is chosen by method and headers, never guessed.

Protocol versionBehaviour
2025-03-26 · 2025-06-18 · 2025-11-25initialize handshake, Mcp-Session-Id, GET with Accept: text/event-stream opens an SSE stream, DELETE ends a session. A request without MCP-Protocol-Version is read as 2025-03-26; an unknown version at initialize is answered with 2025-11-25.
2026-07-28Stateless: no initialize, no session, per-request _meta, server/discover. Mcp-Method (and Mcp-Name) must match the body. GET and DELETE answer 405.

The server offers tools and prompts. The session id is protocol furniture, not a key into anything: the readiness tools keep no state beyond the report page.

Authorization

OAuth 2.1: authorization code with PKCE (S256), dynamic client registration, rotating refresh tokens, scope readiness. A call without a bearer token gets 401 with WWW-Authenticate pointing at the resource metadata; CORS exposes WWW-Authenticate, Mcp-Session-Id and MCP-Protocol-Version.

EndpointPurpose
GET /.well-known/oauth-protected-resource (also …/mcp)RFC 9728 resource metadata
GET /.well-known/oauth-authorization-server (also /.well-known/openid-configuration)RFC 8414 server metadata
POST /oauth/registerRFC 7591 dynamic client registration
GET /oauth/authorize · POST /oauth/authorizeThe sign-in page; sends the magic link and the 6-digit code
GET /oauth/verify · POST /oauth/codeThe consent page, by link or by code
POST /oauth/consentApprove or cancel; redirects back with a code
POST /oauth/tokenauthorization_code and refresh_token grants
POST /oauth/revokeRFC 7009 revocation

Other URLs

URLWhat it is
GET /healthOpen, no token. Status, version, transport, supported protocol versions, the tool names and the check count.
GET /r/<id>A report page: unlisted, noindex, no-referrer, seven days.
GET /A landing page for people who open the server in a browser.
# no token needed
curl -s https://mcp.prodready.si/health
# {"status":"ok","service":"prodready","transport":"mcp-streamable-http",
#  "protocol_versions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26"],
#  "tools":[…],"stateful":false,"stores_evidence":false, …}

Bounds

  • A JSON-RPC batch carries at most 20 messages; a body at most 2 MB (413).
  • Report pages: 30 per account an hour (per address when signed out), across prodready_assess and sdlc_report.
  • Tool results are cut at 40 KB, keeping the head and the next step.
  • A project document is at most 4 MiB. Story fields: ≤ 8 acceptance criteria, ≤ 15 tasks, 500 characters each.
  • Calls on one project run one at a time; a write that lost a race says so instead of confirming.
  • Tool annotations mark readOnlyHint, destructiveHint and idempotentHint; only sdlc_project_delete is destructive.
  • Stories per import: 60. Decisions, risks, releases and change requests are bounded per project; the tool says so when a bound is reached.

Install it. Run the free enterprise-grade due diligence tonight.

Sign-in is by email and free. The due diligence tells you what is wrong; the prodready SDLC is how your agent fixes it without skipping a step.

▶ StartSee pricing