{"name":"io.github.juanklagos/sdd-mcp","slug":"juanklagos-sdd-mcp","title":null,"description":"Spec-Driven Development workflow: specs, plans, gates, status and logbook tools. Bilingual EN/ES.","url":"https://mcp.market/server/juanklagos-sdd-mcp","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":33,"stars":21,"forks":2,"downloads_week":108,"last_push_at":"2026-08-30T23:01:38.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/juanklagos/spec-driven-development-template","website":null,"version":"2.8.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@juanklagos/sdd-mcp","version":"2.8.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Path to the SDD workspace (project with specs/ or a spec/ sidecar). Defaults to the current working directory.","name":"SDD_PROJECT_ROOT"},{"description":"Where sdd_create_workspace creates ./www/<project-name>. Defaults to the current working directory.","name":"SDD_WORKSPACES_ROOT"}]}],"tools":[{"name":"sdd_add_task","description":"Append one unchecked task (- [ ] text) to a spec's tasks.md, right after the last existing checkbox (atomic write, same primitive as sdd_set_task_done), and return the updated task list with line numbers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_append_project_log","description":"Append content to bitacora/global/PROJECT_LOG.md.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_approve_spec","description":"Surgically fill the existing approval block of a spec.md: Estado -> Aprobado, approval date -> today, approver -> given name, evidence when provided (always wins) or when the line is empty. Fails clearly when the block is missing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_board_connect","description":"Connect two existing board cards with an optional labeled edge and persist specs/board.canvas. Idempotent for identical edges.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_board_read","description":"Read the visual SDD Builder board: the specs/board.canvas layout (JSON Canvas) plus every spec with its approval status and task progress.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_board_write","description":"Replace the specs/board.canvas layout (JSON Canvas: nodes + edges). Only layout is stored; markdown files are never touched by this tool.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_check_drift","description":"Spec↔code drift (spec 025) as a direct answer: did the code a spec governs change AFTER its approval date? One spec (specId) or every spec (omitted). States: clean, drifted (with offending commits), unscoped (no File scope declared), unknown (not approved / no git). Same computeSpecDrift rule the board and dashboard use.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_check_gate","description":"Verify whether implementation can proceed under SDD rules.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_check_policy","description":"Run the multi-agent policy check (sdd.policy.yaml blocks, agent rule files aligned with the canonical operating system) WITHOUT running the full gate. Paired with scripts/check-sdd-policy.sh: same messages, same codes. The gate embeds this check; this tool answers it on its own.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_check_version","description":"Compare an installed sidecar against this server's version WITHOUT writing anything: which files the framework would repair, which user-owned files diverged from the new reference, and which are missing. `upToDate` is false when content differs even if the version number matches — a tampered gate has survived a reinstall before.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_create_spec","description":"Create the next numbered spec folder from the template.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_create_workspace","description":"Create a runnable SDD workspace inside the recommended default folder ./www/<project-name>.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_gate_summary","description":"One-call gate semaphore: runs the SDD gate check plus the structural validation and groups every message by the spec it belongs to (the same data the SDD Builder chip and per-card badges show). Includes advisory dependencyWarnings from the board's typed edges (approved spec depending on a not-approved one).","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_generate_roadmap","description":"Generate docs/roadmap.mmd and docs/roadmap.md from specs/INDEX.md.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_generate_status","description":"Generate STATUS.md from the current project specs and logbook.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_install_sidecar","description":"Install the compact spec/ sidecar into an EXISTING external project directory (the recommended layout for real projects outside this template), via scripts/install-spec-sidecar.sh. After this, every other tool works against that projectRoot. Refuses the template root, like every tool here.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_legacy_discovery","description":"Scan an existing codebase for route/API and user-flow signals and write analysis/legacy-discovery/ (evidence files + report with suggested first specs). TypeScript port of scripts/legacy-discovery.sh — no bash, no ripgrep needed. The entry point for adapting a project that already has code (Case 2 of the guides).","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_lint_ears","description":"Lint acceptance criteria against the EARS skeleton (CUANDO/SI/MIENTRAS … EL SISTEMA DEBERÁ … / WHEN/IF/WHILE … THE SYSTEM SHALL …) plus vague-word checks. Pure and advisory — the same validateEarsCriterion the Builder uses; results are suggestions, never blockers. No filesystem access.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_list_specs","description":"List numbered specs and their approval status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_move_task","description":"Swap one task with the nearest task above/below it in tasks.md, skipping non-task lines (atomic write). 'Move to the end' is repeated 'down'. Returns the updated task list with line numbers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_next_request","description":"Claim the oldest pending AI-assist request published by the SDD Builder (pending -> in_progress) and return it with its full context: target field, its current text, and the user's instruction. Returns { request: null } when the queue is empty — polling also records agent presence, which is what the builder shows as 'agent connected'. Answer with sdd_respond_request; never write the spec files you","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_read_bitacora","description":"Read the project logbook: without fileName, list the markdown files of one bitácora folder (handoffs, decisiones, diaria, global — sorted, so the last one is the latest); with fileName, return that file's content. The read counterpart of sdd_write_handoff/sdd_write_decision/sdd_write_daily_log/sdd_append_project_log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_read_spec_document","description":"Read one document of a numbered spec bundle (spec.md, plan.md, tasks.md, research.md or history.md) as raw markdown. The read counterpart of sdd_approve_spec/sdd_update_spec_sections, for agents without filesystem access (HTTP/Desk).","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_read_tasks","description":"Read the checkbox tasks of a spec's tasks.md with their line numbers and done state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_record_user_consent","description":"Record explicit user consent before implementation starts. Pass specId so the consent is bound to that spec; without it the entry is a legacy, markerless line that only covers specs approved before it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_remove_task","description":"Delete one task checkbox line from tasks.md; every other line survives byte for byte (atomic write). Returns the updated task list with line numbers.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_rename_task","description":"Replace the text of one task checkbox line in tasks.md, preserving its indentation and done mark (atomic write, same primitive as sdd_set_task_done). Returns the updated task list with line numbers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_respond_request","description":"Attach a proposal to a claimed AI-assist request (in_progress -> answered). The proposal is plain text for the target field; for structure-idea and review-spec requests it is exactly the JSON the instruction asks for, with no markdown around it. A review-spec answer is a list of findings anchored to the spec sections — findings, never a rewritten spec. It is NOT written to any spec file: the user ","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_score_spec","description":"Score a spec bundle 0-100 with grade (A/B/C/D) and improvement notes: required files present, spec sections, plan signals (milestones/dependencies/risks), task breakdown, research rationale, dated history. One spec (specId) or every spec (omitted). Heuristics-parity port of scripts/score-spec.sh.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_set_task_done","description":"Toggle one checkbox line in a spec's tasks.md (surgical edit, atomic write) and return the updated tasks.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_update_spec_sections","description":"Replace ONLY the content under the guided-editor headings of a spec.md (user story, acceptance scenarios, EARS criteria, requirements, spec properties, success criteria, out of scope — the full template) preserving everything else, the approval block included. Tolerant to the EN/ES headings of the canonical repo template (specs/_template/spec.md).","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_update_spec_status","description":"Update the status, priority and/or owner cells of ONE spec's row in specs/INDEX.md (and refresh its updated date). The only write INDEX accepts besides appending a new row — until now a status change meant editing the table by hand. Fails when the spec has no row.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_upgrade","description":"Bring an installed SDD sidecar up to the version of this server. Framework-owned files (the gate, validators, root resolver) are repaired; files the user owns (sdd.policy.yaml, specs/_template/*, logbook templates) are NEVER written unless named in applyPreserved. Call with dryRun: true first — it reports what would change and writes nothing. An already-current sidecar performs zero writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_validate","description":"Validate the SDD structure and required files of a project.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sdd_write_daily_log","description":"Create or replace a daily log entry in bitacora/diaria.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_write_decision","description":"Create or replace a decision file in bitacora/decisiones.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_write_handoff","description":"Create or replace a handoff file in bitacora/handoffs.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sdd_write_spec_document","description":"Write the FULL content of one spec bundle document (spec.md, plan.md, tasks.md, research.md or history.md), atomically. The low-level counterpart of sdd_read_spec_document; prefer sdd_update_spec_sections for structured edits of spec.md. Any name outside the five fails without touching the filesystem.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":88,"grade":"A","scanned_at":"2026-10-31T17:27:50.844Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-31T17:27:50.716Z","components":{"code":{"score":25,"max":25,"notes":["40 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 62 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@juanklagos/sdd-mcp","version":"2.8.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-08-25T21:20:00.637Z","repositoryUrl":"git+https://github.com/juanklagos/spec-driven-development-template.git","weeklyDownloads":108}],"repo":{"found":true,"owner":"juanklagos","repo":"spec-driven-development-template","archived":false,"pushedAt":"2026-08-30T23:01:38Z","stars":21,"forks":2,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/90840286?v=4","ownerCreatedAt":"2021-09-16T11:22:21Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/90840286?v=4&s=128","source":"registry"},"presence":{"stars":21,"forks":2,"downloadsWeek":108,"license":"MIT","lastPushAt":"2026-08-30T23:01:38.000Z","score":33}}}},"grade_history":[],"reviews":[]}