Skip to content
intentdocs/ docs
Docs menu
MCP Integration · 3.4

Tools & resources

Every tool, resource and prompt on the hosted and local MCP servers, with parameters, results and refusals.

This is the full reference for the hosted server at https://www.intentdocs.com/api/mcp, then the local server started by npx intentdocs mcp. For how the pieces fit together, read the MCP overview first.

The hosted server registers 42 tools, one resource and two prompts. The published manifest at GET /api/mcp/manifest lists the same 42 tools with the same parameter names.

Before you read the tables

project_id. Every hosted tool except list_projects and create_project takes project_id: a project UUID, required. The tables below leave it out. Get it from list_projects, or from create_project when the project is new.

Story references. Tool tables say which forms story_id accepts:

  • Key or UUID: a key like PB-42, or a full UUID.
  • Key, UUID or prefix: also a UUID prefix, such as the first 8 characters.

update_stories takes full UUIDs in stories[].id. get_story also accepts a build-sequence reference like #5.

Access. Reads need any role on the project. Writes need editor or owner. add_note needs comment access. A project you can't reach is refused as "Project not found or access denied". A refused write names the capability it needs.

Common refusals. "No story map found for this project" when the project has no map. "No story found matching ..." when a story reference names nothing. update_stories, create_stories and set_vision refuse with "Trial expired. Upgrade at https://intentdocs.com/pricing" when the map owner's trial has ended.

Criterion input. create_stories, add_criteria, replace_criteria and preview_criteria_replacement take criteria as plain strings, or objects:

FieldTypeMeaning
textstring, requiredThe criterion, e.g. "Given X, when Y, then Z".
prioritymust, should or couldDefaults to should.
given, when, thenstringThe criterion split into parts.
verificationobjectmethod is executable, agent_self_check, visual_render or founder_confirm. Optional command, check_prompt, expected.

A criterion read back from get_story can be passed straight back. Every bad field in a batch is reported at once, naming the field and what it accepts, and nothing is written.

Title and effect. This table is generated from the same hint table the server and GET /api/mcp/manifest use. Title is the human name a directory shows next to the tool. Effect is Read when the tool changes nothing, and Write when it changes the founder's project.

ToolTitleEffect
list_projectsList projectsRead
get_contextGet project contextRead
get_session_contextGet session contextRead
list_storiesList storiesRead
get_storyGet story detailsRead
get_statusGet project statusRead
get_build_orderGet build orderRead
get_visionGet visionRead
get_constitutionGet visionRead
find_orphaned_releasesFind orphaned releasesRead
check_release_readinessCheck release readinessRead
preview_criteria_replacementPreview criteria replacementRead
propose_drift_fixPropose drift fixRead
analyze_complexityAnalyze story complexityRead
researchResearch a questionRead
import_prdImport PRD documentRead
get_runRead a build runRead
get_founder_todoWhat's waiting on meRead
create_projectCreate a projectWrite
archive_projectArchive a projectWrite
restore_projectRestore an archived projectWrite
create_storiesCreate storiesWrite
add_criteriaAdd acceptance criteriaWrite
start_storyStart a storyWrite
next_in_runNext story in a build runWrite
uncancel_storyRestore a cancelled storyWrite
raise_blockerRaise a blockerWrite
needs_founderHand a step to the founderWrite
add_noteAdd implementation noteWrite
log_decisionLog a decisionWrite
complete_storyComplete a storyWrite
link_prLink pull requestWrite
get_designFetch a design referenceWrite
update_storiesUpdate storiesWrite
rename_releaseRename a releaseWrite
replace_criteriaReplace all criteriaWrite
update_criterionEdit one criterionWrite
set_visionSet vision answersWrite
set_constitutionSet vision answersWrite
amend_decisionAmend a decisionWrite
retract_decisionRetract a decisionWrite
cancel_storyCancel a storyWrite
save_planSave implementation planWrite
report_criteriaReport criteria resultsWrite
save_testsSave testsWrite
save_designAttach a design referenceWrite

Kind. The sections below split writes into adds and overwrites. Clients use the hints to decide what to confirm with you.

Projects and context

ToolPurposeKind
list_projectsList every project you can reach, with vision status.Read
create_projectCreate a project in the founder's personal workspace from an agreed name and a one-line idea.Adds
get_session_contextOne compact summary to start a session.Read
get_contextThe full spec as INTENT.md.Read
get_statusProgress, cancelled stories, drift, CI regressions, sync state.Read

list_projects

No parameters. Returns a JSON array. Each project has id, name, description, created_at, has_synced, vision_status, vision_progress, and the same values as constitution_status and constitution_progress. A second text block names the workspace the token reads from. With no projects, the array is [].

create_project

ParamTypeRequiredMeaning
namestringYesThe project name the founder agreed to.
ideastringYesA one-line description of the idea.

Creates the project in the founder's personal workspace and returns project_id plus a link to open it. The same name and idea again within a few minutes returns that project instead of creating a second one. When the plan has no free project slot, nothing is created and the response says why, linking only to the plans page. It is a write that creates something, so hosts ask before running it. The project's activity records that it was created from a chat assistant and names the client.

get_session_context

No parameters beyond project_id. Returns workspace, project, constitution (status, progress, and summary or unanswered), stories, sync and blockers.

stories has counts by status, total, cancelled, map_id, and either current (the story in progress, with its criteria) or next (the highest-priority todo). It also lists spec_changed_since_built when built stories' specs have moved. Cancelled stories are left out of the counts.

get_context

ParamTypeRequiredMeaning
agent_typeclaude_code, cursor, copilot or windsurfNoWhich agent is calling.

Returns the project's INTENT.md as Markdown: brief, personas, activities, release labels, stories with their criteria and design references, and going-live answers. Parked backlog ideas are left out.

get_status

No parameters beyond project_id. Returns a text summary: complete count and percentage, approved, dev complete (done), in progress and todo. It then lists the vision state, cancelled stories ("stop all work on these"), stories whose spec changed since they were built, done or approved stories whose criteria now fail in CI, and the sync state: last activity, first sync, and stories with no reported evidence. Counts leave out cancelled stories and parked ideas. Renders a progress card.

Vision

ToolPurposeKind
get_visionRead the five vision questions and answers.Read
set_visionSave answers, in full or in part.Overwrites

get_constitution is an alias of get_vision, and set_constitution of set_vision. Same schema, same result.

get_vision

No parameters beyond project_id. Returns status (missing, draft or complete), progress, unanswered, and questions. Each question has key, heading, hint, text and answered_at. A complete vision also has a short summary.

set_vision

ParamTypeRequiredMeaning
answersobjectOne of these twoKeys users, problem, switch, first, proof, each a non-empty string. Keys you leave out are untouched.
reportstringOne of these twoA brownfield report to derive answers from. Only users can be derived from a codebase.
confirmbooleanNoRequired when a report-derived answer would replace an answered key.

With both, answers wins for the keys it names. Returns status, progress, unanswered, next_step and questions, plus missing_constitution_keys for a report.

Refused with neither parameter, or with error: "invalid_report" and the problems. A report that would overwrite an answer returns requires_confirmation: true and would_overwrite, and writes nothing until you call again with confirm: true.

Stories

ToolPurposeKind
list_storiesList stories with filters.Read
get_storyEverything about one story.Read
create_storiesAdd stories, by hand or from a brownfield report.Adds
update_storiesChange story fields, in a batch.Overwrites
cancel_storyStop work on a story, reversibly.Overwrites
uncancel_storyRestore a cancelled story.Adds
import_prdParse a PRD into a story structure. Saves nothing.Read

list_stories

ParamTypeRequiredMeaning
statustodo, ready_for_dev, in_progress, needs_rework, done or approvedNoFilter by status.
activitystringNoFilter by activity name, ignoring case.
releasenumberNoFilter by release number.
limitnumberNoMaximum stories. Defaults to 200.
fieldsarray of criteria, notes, user_story, depends_on, build_sequenceNoExtra detail per story.

Returns map, stories and summary. Each story has id, key, title, status, activity, release, priority, effort, criteria_count, passing_count and version, plus cancelled_at and cancellation_reason when cancelled. When the limit cuts the list, the result has truncated, showing and total_matching. Parked ideas are left out.

get_story

ParamTypeRequiredMeaning
story_idstringYesKey, UUID, prefix, or build-sequence reference like #5.

Returns the story with:

  • key, suggested_branch, title, status, activity, user_story, priority, effort, release, build_sequence, depends_on, version
  • claim: who is building it, the client, claimed_at, last_seen_at, and state (held or stalled)
  • acceptance_criteria: each with id, text, priority, given/when/then, verification, last_result, test_count, and ci_regressed when CI now fails it
  • tests, and test_coverage with untested_criteria and unlinked_tests
  • plan (the structured plan, its version and review state), plan_feedback, plan_warnings, and the older implementation_plan when there is one
  • notes, review_notes, implementation_summary, implemented_files, implemented_at
  • spec_changed_since_built, and tests_predate_code when results are older than the latest code change in the linked PR
  • design_refs: each with id, kind, url, selector, match_instruction, drifted
  • record (who marked it ready, built it and approved it) and history (every status change, by whom and from where)

Renders a story card.

create_stories

ParamTypeRequiredMeaning
storiesarrayOne of stories or reportStories to create.
stories[].titlestringYesStory title.
stories[].activitystringNoActivity name. Created if new.
stories[].as_a, i_want, so_thatstringNoThe user story.
stories[].prioritymust, should or couldNoDefaults to should.
stories[].effortXS, S, M, L or XLNoDefaults to M.
stories[].release_ordernumberNoDefaults to 1. See Releases.
stories[].acceptance_criteriaarrayNoSee criterion input above.
reportstringOne of stories or reportA brownfield report. Each bullet under "Existing features" becomes a story, under the activity "Existing functionality (from brownfield report)".
confirmbooleanNoRequired when report targets a map that already has stories.
forcebooleanNoSkip the vision gate. Not recommended.

New stories start as todo. A title that matches a live story on the map, ignoring case, is skipped rather than duplicated.

Returns created, and stories with each new story's id, title and criteria ids. Also skipped_duplicates when titles were skipped, and missing_constitution_keys and missing_sections for a report.

Refused without a complete vision (error: "constitution_required"), for bad criteria (nothing is created), or for a release out of sequence. A report on a non-empty map without confirm returns requires_confirmation: true with a stories_preview, and writes nothing.

update_stories

ParamTypeRequiredMeaning
storiesarrayYesOne entry per story.
stories[].idstring (UUID)YesThe story.
stories[].expected_versionnumberNoRefuse if the story changed since this version.
stories[].statustodo, in_progress, needs_rework or doneNoready_for_dev and approved are refused: a person sets them in the app.
stories[].title, priority, effortNoAs in create_stories.
stories[].releasenumberNoMove to this release. The next sequential number creates it.
stories[].activitystringNoMove to this activity. It must exist.
stories[].sort_ordernumberNoPosition in its activity lane, from 0.
stories[].build_sequencenumber or nullNoPlace in the build order, from 1. null clears it.
stories[].dependenciesarray of UUIDsNoReplaces the story's dependencies.
stories[].notesstringNoReplaces the notes. To append, use add_note.
stories[].implementation_summary, implemented_filesNoWhat was built.
stories[].as_a, i_want, so_thatstringNoThe user story.

Returns updated, the applied stories, dependencies_updated, and readyReleases with a release_note when a release can now be closed.

Refused for human-only statuses, an unknown activity (the valid names are listed), a release out of sequence, or a dependency outside the project. With expected_version, every row is checked before any is written. One stale row refuses the batch with VERSION_CONFLICT and stale_stories.

Setting status: "done" here skips the must-criteria gate and doesn't release the story's claim. To finish a story you built, use complete_story.

cancel_story

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
reasonstringNoShown wherever the story appears.

Drops the story from progress counts and "what's next" answers. Its status stays as it was, and nothing is deleted. Returns cancelled: true, status_preserved, cancellation_reason and effect. Refused when the story is already cancelled.

start_story and complete_story refuse cancelled stories, with the reason.

uncancel_story

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.

Restores the story at the status it was cancelled at, never reset to todo. Refused when the story isn't cancelled.

import_prd

ParamTypeRequiredMeaning
prdstringYesThe PRD or spec text.
formatPRD, Markdown or textNoDefaults to PRD.
forcebooleanNoSkip the vision gate. Not recommended.

Parses the text with AI. Returns hierarchy (activities, their steps and stories with acceptance criteria), a summary of counts, and existingActivities. It doesn't write stories to the map. Pass the stories you want to create_stories.

Refused without a complete vision. A failed parse returns "PRD import failed" with the HTTP status.

Building a story

ToolPurposeKind
start_storyClaim a story and get everything needed to build it.Adds
save_planSave the next version of a story's plan.Overwrites
save_testsSave tests and link them to criteria.Overwrites
report_criteriaRecord pass, fail or blocked per criterion.Overwrites
raise_blockerRecord a blocker and the decision needed.Adds
add_noteAppend an implementation note.Adds
complete_storyMark a story done, with a summary and PR.Adds
link_prLink a pull request to a story.Adds

start_story

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
release_currentbooleanNoThis session already holds another story: put it back and start this one.

Sets the story to in_progress and claims it for this session. A story with no build sequence is added to the end of the build order.

Returns story_id, title, status, priority, effort, release, build_sequence, version, user_story, notes, acceptance_criteria, plan and plan_feedback, design_refs, affected_built_stories, warnings and note. You don't need get_story as well. Renders a story card.

warnings can say: the story was already in progress; it was taken over from a quiet session; another session's plan touches the same files; other stories are in progress; criteria have no linked test yet; the story has no criteria or no plan; it is outside the current release; or the plan touches files that built stories own, which you should re-verify before completing.

Refused when the story is cancelled, when the project's build gate isn't met, when this session already holds another story (unless release_current: true), or when another live session holds it. See One story per session.

save_plan

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
stepsarray, at least oneYesThe whole new version, in order.
steps[].textstringYesThe step.
steps[].idstringNoThe step's id from the current plan (s1, s2, ...) when this step continues one.
steps[].filesarray of stringsNoFiles this step creates or changes.
questionsarray of text and optional optionsNoThings a person needs to decide before building.
riskstringNoOne line on what could go wrong. Shown to the reviewer first.
responsesarray of feedback_id and replyWhen changes were requestedYour answer to every point in plan_feedback.
expected_versionnumberNo, but recommendedRefuse if the story changed since you read it.

Returns story_id, the saved plan, review: "awaiting", how many feedback points were answered, and warnings.

Refused with FEEDBACK_UNANSWERED and the open plan_feedback when a requested change has no response, or VERSION_CONFLICT. Steps a person edited keep their words: pass their id and text unchanged. A save that rewords or drops one is saved, recorded as a conflict for the reviewer, and warned about.

save_tests

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
testsarray, at least oneYesTests to add or link.
tests[].idstringNoAn existing test's id, to set its links. Omit to add a new test.
tests[].titlestringUnless id is givenThe new test's title.
tests[].steps, expected_resultstringNoHow to run it and what passing looks like.
tests[].test_typefunctional, edge_case, integration or error_handlingNoDefaults to functional.
tests[].criterion_idsarray of stringsNoFull ids of the criteria this test proves. Prefixes aren't accepted here. One test can prove several.
tests[].filestringNoTest file path as JUnit reports it, e.g. src/lib/__tests__/foo.test.ts.
tests[].full_namestringNoFull test name as JUnit reports it, e.g. MyLib > when X > does Y. Set with file to match CI results.

Returns added, linked, tests, untested_criteria and unlinked_tests. A criterion id that isn't a live criterion on the story is refused, with the valid ids listed, and nothing is saved. So is an id that names no test on the story.

report_criteria

ParamTypeRequiredMeaning
story_idstringYesKey or UUID.
resultsarrayYesOne entry per criterion.
results[].criterion_idstringYesFull id, or a prefix of at least 4 characters that names one criterion.
results[].statuspass, fail or blockedYesThe result.
results[].detailstringNoWhat you observed.
results[].caveatstringNoAnything a person should read before accepting this result. A result with a caveat is never bulk-approved.
results[].testsarray of file, full_name, optional titleNoTests that prove this criterion. Saved as the story's tests and linked.
expected_versionnumberNoRefuse if the story changed since this version.

Each result is stored as the criterion's latest, with its attempt number and time. A story still todo moves to in_progress and is claimed for this session. Reporting also clears the story's "code changed" flag.

Returns updated, passed, failed, started when the story was started, tests_saved when tests were named, and the full criteria list.

If any criterion_id names no criterion, names more than one, or appears twice, the whole report is refused, nothing is saved, and the valid ids are listed. Also refused with VERSION_CONFLICT.

raise_blocker

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
summarystringYesShort summary.
attemptingstringYesWhat you were trying to do.
failingstringYesWhat's failing and why.
decision_neededstringYesThe single decision the owner needs to make.
criterion_idstringNoThe blocked criterion.
attemptsnumberNoHow many fix attempts were made. Defaults to 1.

Records the blocker on the story and in the project's activity. Returns the summary and the decision needed. Stop work on the story after calling it.

add_note

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
notestringYesThe note.

Appends to the story's notes after a blank line. Needs comment access, not edit access.

complete_story

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
summarystringYesWhat you built, key decisions, anything the owner should know.
implemented_filesarray of stringsNoFiles created or changed.
pr_urlstring (URL)NoThe pull request to link and stamp.
forcebooleanNoMark done even with failing must criteria. Use sparingly.

Sets the story to done, saves the summary and files, releases the claim and links the PR. When GitHub is connected, the PR body is stamped with the IntentDocs footer. Otherwise the response gives you the footer line to add.

The response is text. It names must criteria with no linked test, files that overlap built stories or another session's planned work, and, when the GitHub App is installed, files that differ between implemented_files and the PR. It ends with the next story in the release by build sequence, and the top of the whole build order when that is a different story. Renders a story card.

Without force, it refuses while any must criterion is failing or unreported, listing each with its state. It can also refuse when implemented_files overlaps built stories and the project's PR check is set to require action. Fix and report, or pass force: true. Refused for a cancelled story.

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
pr_urlstring (URL)Yese.g. https://github.com/org/repo/pull/123

Saves the link, so the PR number shows on the story card, then stamps the PR body as complete_story does. The link is saved even when stamping fails.

Criteria

ToolPurposeKind
add_criteriaAppend criteria to a story.Adds
update_criterionChange one criterion's text or priority.Overwrites
preview_criteria_replacementShow what a replacement would change.Read
replace_criteriaReplace all of a story's criteria.Overwrites

report_criteria is under Building a story.

add_criteria

ParamTypeRequiredMeaning
story_idstringYesKey or UUID.
criteriaarrayYesCriteria to append.

Existing criteria are kept. Returns added, total, and the new criteria with their ids. Bad criteria are refused, and nothing is added.

update_criterion

ParamTypeRequiredMeaning
story_idstringYesKey or UUID.
criterion_idstringYesThe full criterion id.
textstringOne of text or priorityNew wording.
prioritymust or shouldOne of text or priorityNew priority.
expected_versionnumberNoRefuse if the story changed since this version.

Every other criterion, and this criterion's id and results, stay as they are. Returns updated_criterion and other_criteria_untouched. Refused with nothing to change, an unknown id (the valid ids are listed), or VERSION_CONFLICT.

preview_criteria_replacement

ParamTypeRequiredMeaning
story_idstringYesKey or UUID.
criteriaarrayYesThe proposed full set.

Writes nothing. Returns would_remove, would_add, removing (with has_results and last_status for each), adding, and an evidence_warning when criteria with reported results would be discarded.

replace_criteria

ParamTypeRequiredMeaning
story_idstringYesKey or UUID.
criteriaarrayYesThe full new set.
expected_versionnumberNoRefuse if the story changed since this version.
dry_runbooleanNoDeprecated. Use preview_criteria_replacement.

Deletes every criterion and inserts the new set. On a done or approved story, a new criterion worded the same as an old one keeps the old id and result. Returns replaced and the new criteria with their ids. Refused for bad criteria or VERSION_CONFLICT.

Build order and runs

ToolPurposeKind
get_build_orderThe order stories are built in.Read
get_runA build run and all its stories.Read
get_founder_todoEverything waiting on the founder, across every project.Read
next_in_runStart the next story in an approved run.Adds

get_build_order

No parameters beyond project_id. Returns order, each story with id, title, activity, effort, priority, status, build_sequence, depends_on and reason. Also generated_at. Stories with no build order yet are listed under unsequenced (each with unsequenced: true, its release and story_url), with a note saying how many.

The order lists stories with a build sequence, and finished stories; agents don't build an unsequenced story until it's sequenced. Sequence the rest on the Plan view. If the project offers current-release stories first, those come first, in their existing order. Renders a card with a reorderable build order.

get_run

ParamTypeRequiredMeaning
runstringYesThe run's key, like R-7, or its id.

Returns run (key, id, title, status, concurrency, on_failure), progress, and stories in build order. Each story has its status, claim, pull request, has_plan, plan_steps and acceptance_criteria with each result. next says what to do: call next_in_run, wait for approval, or stop. Refused when no run matches.

get_founder_todo

ParamTypeRequiredMeaning
project_idstring (uuid)NoOnly this project's items. Omit it for every project.

Returns what waits on the founder, most unblocking first: steps an agent handed them (needs_founder), blockers, plans awaiting approval (or approved before the spec changed), and built stories awaiting acceptance. An item that unblocks more unbuilt stories comes first, then items in an approved run. Each item has a url to the page where it's cleared, plus kind, story_key, action, detail, unblocks and run. get_status ends with the same list for its project, and the app's To do page and the daily email carry it too. On both addresses.

next_in_run

ParamTypeRequiredMeaning
runstringYesThe run's key, like R-7, or its id.

When there is a story to build, starts it and returns what start_story returns, plus run with key, position and of. Call it again after each complete_story.

Otherwise returns run, state and message, and you stop. state is draft, paused, cancelled, stopped, complete, full or waiting. waiting includes waiting_on, the stories the rest depend on. When a run completes and the next phase is lined up as a draft for a person to approve, next_run names it. Don't start it until next_in_run hands it out.

Releases

ToolPurposeKind
check_release_readinessPre-flight check before building a release.Read
rename_releaseRename a release.Overwrites
find_orphaned_releasesFind releases stories use but the canvas can't show.Read

Releases are created by placing stories in them. Pass the next sequential number as release in update_stories or release_order in create_stories, and the release is created, as the canvas's "Add release" does. A bigger jump is refused, naming the next available number. Release 1000 is Go live, the release every project ends with.

A release number stories use with no label is an orphan, and the canvas doesn't show it. Placing a story in an orphan creates its label.

check_release_readiness

ParamTypeRequiredMeaning
release_ordernumberNoThe release to check. Omit it to check the current release: the one the team made current, else the first that isn't closed.

Show the report to the person and ask before building.

Returns release, release_order, auto_selected, selection_reason, counts (total, done, in_progress, to_build), gaps, verification_gaps, blocking, advisory, ready and a Markdown report. Renders a progress card.

  • Gaps block the verdict: a story to build with no criteria, or no must criteria.
  • Verification gaps also block: a finished story with no passing result, or with passing results reported more than an hour before it was implemented.
  • Advice doesn't block: stories with no plan, under advisory.missing_plans.
  • Acceptance says how approved stories were accepted: reviewed by someone else, self-accepted, carried end to end by one person, or approved before the record began. A viewer's agent doesn't get it.

An unknown release is refused, listing the valid releases.

rename_release

ParamTypeRequiredMeaning
release_ordernumberYesThe release to rename.
labelstringYesThe new name.

Returns release_order, previous_label and label. Refused when the release doesn't exist yet. Create it first by placing a story in it.

find_orphaned_releases

No parameters beyond project_id. Returns orphaned_releases, and orphans with each release number, its story_count and stories. When there are orphans, fix says how to heal one: call update_stories on one of its stories with release set to that number.

Decisions

ToolPurposeKind
log_decisionRecord a decision.Adds
amend_decisionCorrect a decision.Overwrites
retract_decisionWithdraw a decision, keeping the record.Overwrites

log_decision

ParamTypeRequiredMeaning
titlestringYesShort title.
descriptionstringYesWhat was decided and why.
categoryarchitecture, product, technical or trade-offNoDefaults to technical.
story_idstringNoA story to link it to.

Records the decision and an activity entry. Returns a confirmation with the title.

amend_decision

ParamTypeRequiredMeaning
decision_idstringYesFull UUID or prefix.
title, descriptionstringAt least one fieldThe new text.
categoryas in log_decisionAt least one fieldThe new category.

Refused with nothing to change, an unknown id, or a retracted decision.

retract_decision

ParamTypeRequiredMeaning
decision_idstringYesFull UUID or prefix.
reasonstringNoWhy.

Marks the decision retracted with a time and reason. Nothing is deleted. Refused when already retracted.

Design

ToolPurposeKind
save_designAttach a design reference to a story.Overwrites
get_designFetch a Figma or Claude design for a story.Adds

save_design

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
urlstringYesA Figma frame, a claude.ai design, an image, a Storybook story, or a repo-relative path.
kindfigma, claude-design, image-url, repo-path, storybook or otherNoInferred from the URL when left out.
selectorstringNoFrame or node id, Storybook path. Taken from the URL where possible.

The reference shows under Spec › Design, grouped by the story's activity. Attach the same URL to every story a screen covers. Existing references stay. Returns ref and design_refs_count, or already_attached: true with the existing reference.

get_design

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix.
ref_idstringNoWhich reference, from get_story's design_refs. Omit when the story has one Figma or Claude design reference.

Fetches the design so the agent can see it without its own credentials: the HTML of a Claude design, or Figma's node or file JSON. Returns ref_id, kind, url, content_type, content (the first 50,000 characters), fetched_at, content_hash and drifted. drifted: true means the design changed since an earlier fetch. Only the hash and time are stored.

Other kinds have nothing to fetch: open their URL. Figma needs a token configured on the IntentDocs server. Without one, the result says Figma isn't configured. A failed fetch returns error: "FETCH_FAILED".

Drift and analysis

ToolPurposeKind
propose_drift_fixPropose how to settle a story whose spec drifted after it was built.Read
analyze_complexityScore stories' complexity with AI.Read
researchResearch a question with the project as context.Read

propose_drift_fix

ParamTypeRequiredMeaning
story_idstringYesKey, UUID or prefix. The story must be drifted (code_changed or regressed).

Reads the PR diff and the spec, then proposes either spec changes that lock in what was built, or a rework note for the code. Nothing is written. A person accepts the proposal or sends the story back. Returns text with the drift, the verdict (update_spec or rework), the reasoning, and the spec changes or rework instruction. A story with no drift says so.

analyze_complexity

ParamTypeRequiredMeaning
story_idsarray of stringsNoStories to analyze. Defaults to every story not done.

Returns, per story, a complexity score from 1 to 10, the reasoning, risks and a suggested effort. Nothing is saved.

research

ParamTypeRequiredMeaning
querystringYesWhat to research.

Returns findings, recommendations, risks and next steps as text. Nothing is saved.

Resources and prompts

Card resource

The hosted server registers one resource, ui://intentdocs/card.html. Clients that support MCP Apps, such as Claude.ai and Claude Desktop, render it as an interactive card beside these tools' results:

  • Story card: get_story, start_story, complete_story
  • Progress card: get_status, check_release_readiness
  • Build order card, which can reorder stories: get_build_order

A card-bearing tool's structuredContent carries everything its text does, plus a card object. Some clients show the agent structuredContent instead of the text, so nothing is lost either way. Cards name stories by their keys.

Prompts

spec-my-idea takes no arguments. It starts the flow described on Spec my idea. The prompt, the server instructions and that page are one text.

intentdocs-workflow takes no arguments. It returns a guide to the workflow: orient, check release readiness, pick a story, start it, build, save tests, report criteria, raise blockers, complete, repeat. Its examples use the same tools and parameters as this page.

Local server

The local server, started by npx intentdocs mcp, is a separate, smaller server. Its tools act on the one project linked in .intent/config.json, so none of them take project_id. It authenticates with the login saved by npx intentdocs login. story_id accepts a story key like PB-42, a full UUID or a UUID prefix.

--mode picks the tools. Each mode includes the ones before it. The default is all. A tool outside the current mode is refused with the mode it needs.

Core (7 tools)

ToolParametersWhat it does
list_storiesfilter (optional): todo, in_progress, done, or a search termStories with status, priority, effort and criteria, and a summary.
mark_in_progressstory_idMark a story in progress.
report_criteriastory_id, results of criterion_id, status (pass, fail or blocked), optional detail and attemptReport criteria results.
raise_blockerstory_id, summary, attempting, failing, decision_needed, optional criterion_id and attemptsRecord a blocker. Stop work after, and don't call mark_done.
mark_donestory_id, optional forceMark done. Returns the blocking list instead while any must criterion is failing or unreported, unless force: true.
get_statusnoneDone, in progress and todo counts.
add_notestory_id, noteAdd an implementation note.

Standard (adds 5)

ToolParametersWhat it does
create_storytitle, optional activity, priority (must, should, could), effort (S, M, L, XL)Create one story.
get_contextnoneThe project's INTENT.md.
log_decisiontitle, description, optional category, story_idRecord a decision.
amend_decisiondecision_id, optional title, description, categoryCorrect a decision.
retract_decisiondecision_id, optional reasonWithdraw a decision.

All (adds 3)

ToolParametersWhat it does
analyze_complexityoptional story_idsAI complexity scores.
researchqueryAI research with project context.
import_prdprd, optional format (PRD, Markdown, text)Parse a PRD into stories.

Resources

Always available, whatever the mode:

ResourceURIType
Story Mapintentdocs://project/storymaptext/markdown
Storiesintentdocs://project/storiesapplication/json
Project Statusintentdocs://project/statusapplication/json
Decisionsintentdocs://project/decisionsapplication/json
Data Modelintentdocs://project/data-modelapplication/json
Build Orderintentdocs://project/build-orderapplication/json

Cancelled stories

If a story has been cancelled, the local server refuses every tool call that names it, except list_stories and get_status. The response starts "Development of ... was cancelled" and tells the agent to stop all work on it. Treat it as a hard stop, not an error to retry.

What the local server doesn't have

There are no claims, build runs, plans, tests, design tools or PR linking. mark_in_progress and mark_done are the local equivalents of start_story and complete_story, without the claim, the summary or the next-story handout.