Skip to Content
ReferenceMCP Tools

MCP Tools

Complete reference for all 17 SpecForge MCP tools — parameters, usage, and examples.

SpecForge exposes 17 MCP tools organized in five categories. These tools are available to any MCP-compatible coding agent (Claude Code, Cursor, VS Code with Copilot, Gemini CLI, etc.) once the SpecForge MCP server is configured.

Queries

Six tools for reading project data, searching tickets, and generating reports. These are read-only — they never modify your specification.

get

Retrieves a single entity by type and ID.

ParameterTypeRequiredDescription
type"project" | "specification" | "epic" | "ticket" | "blueprint"YesEntity type to retrieve
idstringYesEntity ID
specificationIdstringNoSpecification context (required for epics and tickets)
{ "type": "ticket", "id": "tkt_abc123", "specificationId": "spec_xyz789" }

Returns

Returns the full entity object. The shape depends on the type parameter:

Ticket (type: "ticket"):

FieldTypeDescription
idstringTicket ID
epicIdstringParent epic ID
ticketNumbernumberSequential ticket number
titlestringTicket title
descriptionstringDetailed description
status"pending" | "ready" | "active" | "done" | "blocked"Current status
progressnumberCompletion progress (0–100)
complexity"small" | "medium" | "large" | "xlarge"Complexity estimate
tagsstring[]Tags
estimatedHoursnumberEstimated effort in hours
acceptanceCriteriaobject[]Acceptance criteria with id, description, validated
implementationobjectImplementation steps, code examples, prerequisites
technicalDetailsobjectFile operations, API endpoints, database operations
notesstring | objectImplementation notes or structured notes
blockReasonstringWhy the ticket is blocked (if applicable)
createdAtstringISO 8601 timestamp
updatedAtstringISO 8601 timestamp

Specification (type: "specification"):

FieldTypeDescription
idstringSpecification ID
projectIdstringParent project ID
titlestringSpecification title
descriptionstringWhat to build
status"draft" | "planning" | "ready" | "in_progress" | "done"Current status
progressnumberOverall progress (0–100)
goalsstring[]Specification goals
requirementsstring[]Requirements
techStackstring[]Technologies used
tagsstring[]Tags
estimatedHoursnumberTotal estimated effort

Epic (type: "epic"):

FieldTypeDescription
idstringEpic ID
specificationIdstringParent specification ID
epicNumbernumberSequential epic number
titlestringEpic title
descriptionstringEpic description
objectivestringWhat this epic achieves
status"todo" | "in_progress" | "completed"Current status
progressnumberCompletion progress (0–100)
ordernumberDisplay order
ticketCountnumberTotal tickets
completedTicketCountnumberCompleted tickets

Project (type: "project"):

FieldTypeDescription
idstringProject ID
namestringProject name
descriptionstringProject description
specCountnumberTotal specifications
completedSpecCountnumberCompleted specifications
ticketCountnumberTotal tickets across all specs

list

Lists entities of a given type with optional filters.

ParameterTypeRequiredDescription
type"projects" | "specifications" | "epics" | "tickets" | "blueprints"YesEntity type to list
projectIdstringNoFilter by project (required for specifications)
specificationIdstringNoFilter by specification (required for epics and tickets)
epicIdstringNoFilter tickets by epic
{ "type": "tickets", "specificationId": "spec_xyz789", "epicId": "epic_456" }

Returns

Returns a paginated list:

FieldTypeDescription
itemsobject[]Array of entities matching the query
totalnumberTotal number of matching entities
nextTokenstringPagination token for the next page (if more results exist)

Each item in items is the full entity object (see get returns above for field details).

{ "items": [ { "id": "tkt_abc123", "title": "Set up User model", "status": "ready", ... }, { "id": "tkt_def456", "title": "Implement bcrypt hashing", "status": "pending", ... } ], "total": 4 }

Unified search across tickets with full-text queries and structured filters.

ParameterTypeRequiredDescription
querystringNoFull-text search across ticket titles and descriptions
filesstring[]NoFilter by expected file paths
tagsstring[]NoFilter by tags
statusstring[]NoFilter by status: "pending", "ready", "active", "done"
complexitystring[]NoFilter by complexity: "small", "medium", "large", "xlarge"
limitnumberNoMaximum results to return
offsetnumberNoPagination offset
fieldsstring[]NoSpecific fields to include in results
{ "query": "authentication middleware", "status": ["ready", "pending"], "complexity": ["large", "xlarge"], "limit": 10 }

Returns

Returns a paginated list of tickets:

FieldTypeDescription
itemsTicket[]Array of matching tickets
totalnumberTotal number of matches
nextTokenstringPagination token (if more results exist)

When using the fields parameter, only the requested fields are included in each ticket object.

✅ Combine files with tags to find all tickets touching a specific part of your codebase. For example, files: ["src/auth/**"] with tags: ["security"].


get_next_actionable_tickets

Returns tickets in ready status with all dependencies satisfied, ordered by complexity.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to query
projectIdstringNoProject context
limitnumberNoMaximum tickets to return
{ "specificationId": "spec_xyz789", "limit": 5 }

Returns

Returns an array of ticket objects in ready status with all dependencies satisfied, ordered by complexity (smallest first).

[ { "id": "tkt_abc123", "title": "Implement JWT token generation", "status": "ready", "complexity": "medium", "epicId": "epic_456", "ticketNumber": 3, ... } ]

This is the primary entry point for agents deciding what to work on next. In Agent Teams, the orchestrator calls this to assign tickets to workers.


get_blocked_tickets

Returns tickets in pending status along with the reasons they’re blocked.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to query

Returns

Returns an array of blocked ticket entries:

FieldTypeDescription
ticketTicketThe blocked ticket object
blockedByobject[]Array of { id, title, status } for each unresolved dependency
daysBlockednumberNumber of days the ticket has been blocked
[ { "ticket": { "id": "tkt_ghi789", "title": "Build login endpoint", "status": "pending", ... }, "blockedBy": [ { "id": "tkt_def456", "title": "Implement bcrypt hashing", "status": "active" } ], "daysBlocked": 2 } ]

get_report

Generates analytical reports at different scopes and time ranges.

ParameterTypeRequiredDescription
type"implementation" | "time" | "blockers" | "work" | "sessions"YesReport type
scope"project" | "specification" | "epic"YesReport scope. sessions requires scope="project".
scopeIdstringYesID of the scope entity
startDatestringNoStart date for time-ranged reports (ISO 8601)
endDatestringNoEnd date for time-ranged reports (ISO 8601)
Report TypeDescription
implementationProgress summary with completion percentages and remaining work
timeTime tracking analysis with estimated vs. actual hours
blockersDetailed blocker analysis with dependency chains
workWork session history and activity log
sessionsActive planning, work, and review sessions for a project (project scope only)

Returns

The response shape varies by report type:

implementation — Progress summary:

FieldTypeDescription
projectProjectProject or scope entity
specificationsobject[]Per-spec breakdown with completedEpics, totalEpics, completedTickets, totalTickets
recentActivityobject[]Recent actions with ticketId, ticketTitle, action, timestamp

time — Time tracking:

FieldTypeDescription
totalHoursnumberActual hours spent
estimatedHoursnumberTotal estimated hours
variancenumberDifference between estimated and actual
ticketBreakdownobject[]Per-ticket { ticketId, ticketTitle, estimated, actual }

blockers — Blocker analysis:

FieldTypeDescription
blockedTicketsobject[]Blocked tickets with ticket, blockedBy[], daysBlocked
blockingChainsobject[]Root blockers with rootBlocker, affectedTickets count

sessions — Active sessions (project scope only):

FieldTypeDescription
planningobject[]Active planning sessions with sessionId, specificationId, specificationTitle, startedAt
workobject[]Active work sessions with sessionId, ticketId, ticketTitle, startedAt
reviewobject[]Active review sessions with sessionId, specificationId, specificationTitle, startedAt
summaryobject{ totalActive, planningCount, workCount, reviewCount }

Errors — calling with scope !== "project" or a missing scopeId returns a validation error telling the agent to call get_report({ type: "sessions", scope: "project", scopeId: <projectId> }).


Lifecycle

Nine tools that drive specifications through planning, implementation, and review. These are the core workflow tools.

start_planning_session

Opens a planning session for a specification, enabling structural changes.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to plan

The specification must be in draft or planning state.

Returns

FieldTypeDescription
specificationIdstringSpecification ID
sessionIdstringPlanning session ID
previousStatusstringStatus before opening the session
newStatusstringStatus after opening (e.g., "planning")
messagestringConfirmation message

action_planning_session

Performs operations within an active planning session. This is the primary tool for building specifications — it handles 25 distinct operations. Each operation is passed as an operation object whose type is the operation name; the remaining fields are that operation’s payload.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification being planned
operationobjectYesOperation to perform — an object with a type field (see tables below) plus per-operation payload fields

To read a single ticket, use the get tool (type: "ticket") rather than a planning operation.

Specification & Structure Operations

OperationDescription
update_specUpdate specification fields (background, goals, nonGoals, constraints, successCriteria)
create_epicCreate a new epic shell (title, description, objective)
update_epicExpand or modify an existing epic
delete_epicRemove an epic and its tickets
create_ticketCreate a ticket within an epic
ticket_general_actionsUpdate a ticket’s general fields (title, description, complexity, …)
ticket_step_actionsAdd, update, or remove a ticket’s implementation steps
ticket_criteria_actionsAdd, update, or remove a ticket’s acceptance criteria
ticket_test_actionsAdd, update, or remove a ticket’s tests
delete_ticketRemove a single ticket

Blueprint Operations

OperationDescription
create_blueprintCreate a new blueprint document
update_blueprintModify an existing blueprint
delete_blueprintRemove a blueprint
link_blueprint_to_ticketsLink a blueprint to one or more tickets
unlink_blueprint_to_ticketsUnlink a blueprint from tickets
OperationDescription
link_step_fileAttach a file path to an implementation step
unlink_step_fileDetach a file path from an implementation step
link_step_snippetAttach a blueprint snippet to an implementation step
unlink_step_snippetDetach a blueprint snippet from an implementation step

Dependency Operations

OperationDescription
create_dependenciesDefine dependency links between tickets
delete_dependenciesRemove dependency links between tickets

Justification & Election Operations

OperationDescription
apply_creator_electionApply the creator-election decision for contested entities
justifyDeclare a field not-applicable with a justification
unjustifyRemove a not-applicable justification

Status Operation

OperationDescription
get_planning_statusGet the current planning session status and phase progress

Example — Creating a ticket:

{ "specificationId": "spec_xyz789", "operation": { "type": "create_ticket", "epicId": "epic_456", "title": "Implement JWT token generation", "description": "Create a service that generates signed JWT access tokens with configurable expiration.", "complexity": "medium" } }

Returns

The response depends on the operation:

Structure operations (create_epic, create_ticket, update_epic, ticket_general_actions, …): Returns the created or updated entity object.

Delete operations (delete_epic, delete_ticket, delete_blueprint): Returns { id, message } confirmation.

Linking operations (create_dependencies, link_blueprint_to_tickets, link_step_file, …): Returns { id, message } or the linked entity.

Status operation (get_planning_status): Returns the current planning session status and phase progress.

ℹ️ The specification stays in the single planning state for the whole session. The 7-phase planning machine (planning_specepic_decompositionepic_expansionticket_decompositionticket_expansioncross_validationplanned) advances on the planning session, not the specification. You don’t manage these phases manually.


complete_planning_session

Ends the planning session and triggers the Planning Review gate.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to complete planning

Returns

FieldTypeDescription
specificationIdstringSpecification ID
messagestringConfirmation message
gateResultobjectPlanning Review result (if gate is enabled)
gateResult.passedbooleanWhether the review passed
gateResult.scorenumberReadiness score (0–100)
gateResult.findingsobject[]Issues found: { severity, category, field, message, suggestion }

If the Planning Review gate is enabled and the specification passes, it advances to ready.


start_work_session

Begins implementation work on a specific ticket.

ParameterTypeRequiredDescription
ticketIdstringYesTicket to work on (must be in ready status)

Transitions the ticket from ready to active.

Returns

Returns the full implementation context:

FieldTypeDescription
ticketTicketThe ticket being implemented (full object)
epicEpicThe parent epic
specificationSpecificationThe parent specification
dependencies.blockedByobject[]Tickets that must complete before this one: { id, title, status }
dependencies.blocksobject[]Tickets waiting on this one: { id, title, status }
relatedTicketsobject[]Other tickets in the same epic: { id, title, status, sameEpic }
patternsobjectCode patterns and conventions from the project
activeSessionobject | nullActive implementation session summary
previousAttemptsobject[]Previous implementation attempts with test results
relatedDiscoveriesobject[]Discoveries from related tickets
{ "ticket": { "id": "tkt_abc123", "title": "Implement JWT token generation", "status": "active", "acceptanceCriteria": [ { "id": "ac-0", "description": "Tokens are signed with RS256", "validated": false } ], "implementation": { "steps": [ { "order": 1, "title": "Create JwtService", "action": "create", "detail": "..." } ] }, ... }, "epic": { "id": "epic_456", "title": "Token Management", ... }, "specification": { "id": "spec_xyz789", "title": "Auth System", ... }, "dependencies": { "blockedBy": [], "blocks": [...] }, "relatedTickets": [...], "previousAttempts": [], "relatedDiscoveries": [] }

action_work_session

Records progress, results, and discoveries during implementation.

ParameterTypeRequiredDescription
ticketIdstringYesActive ticket
stepsobject[]NoStep completion updates
acceptanceCriteriaobject[]NoAcceptance criteria results
testResultsobject[]NoTest execution results
notesstringNoImplementation notes
filesobject[]NoFile changes made
discoveryobjectNoNew information discovered during implementation
blockReasonstringNoReport an external blocker
{ "ticketId": "tkt_abc123", "steps": [ { "index": 0, "completed": true }, { "index": 1, "completed": true } ], "files": [ { "path": "src/auth/jwt.service.ts", "action": "created" }, { "path": "src/auth/jwt.service.test.ts", "action": "created" } ], "notes": "Used jose library instead of jsonwebtoken for Edge Runtime compatibility." }

Returns

Returns confirmation with the updated work session state:

FieldTypeDescription
ticketIdstringTicket ID
workSessionIdstringWork session ID
messagestringConfirmation message

complete_work_session

Finalizes work on a ticket with a summary and validation results.

ParameterTypeRequiredDescription
ticketIdstringYesActive ticket
summarystringYesSummary of work performed
filesobject[]NoFinal list of file changes
actualHoursnumberNoHours spent on implementation
validationobjectNoValidation results: tests, lint, typeCheck, build

Returns

FieldTypeDescription
ticketIdstringTicket ID
status"done"New ticket status
workSessionIdstringCompleted work session ID
messagestringConfirmation message
dependentsUnblockedstring[]IDs of tickets that became ready as a result

Transitions the ticket from active to done. Dependent tickets are recalculated and may become ready.


Mutations

Two tools for modifying and linking project data.

reopen_specification

Reopens a completed or reviewed specification for additional work.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to reopen

Returns

FieldTypeDescription
specificationIdstringSpecification ID
previousStatusstringStatus before reopening
newStatusstringNew status (e.g., "in_progress")
messagestringConfirmation message

Associates a pull request with a completed ticket.

ParameterTypeRequiredDescription
ticketIdstringYesTicket to link
prNumbernumberYesPull request number
prUrlstringYesFull pull request URL
titlestringYesPR title
authorstringYesPR author
repoUrlstringYesRepository URL

Returns

Returns the created link object:

FieldTypeDescription
idstringLink ID
ticketIdstringTicket ID
linkType"pull_request"Link type
urlstringPR URL
prNumbernumberPR number
titlestringPR title
statusstringPR status
createdAtstringISO 8601 timestamp

Orchestration

Two tools for understanding and navigating the dependency graph.

get_critical_path

Calculates the longest dependency chain in a specification — the sequence of tickets that determines the minimum time to completion.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to analyze

Returns

FieldTypeDescription
criticalPathobject[]Ordered list of tickets on the critical path
criticalPath[].idstringTicket ID
criticalPath[].titlestringTicket title
criticalPath[].statusstringCurrent status
criticalPath[].estimatedHoursnumberEstimated effort
criticalPath[].complexitystringComplexity level
totalEstimatedHoursnumberSum of estimated effort on the critical path
pathLengthnumberNumber of tickets in the critical path

get_dependency_tree

Renders the complete upstream and downstream dependency tree for a specification.

ParameterTypeRequiredDescription
specificationIdstringYesSpecification to analyze

Returns

Returns a tree structure showing all tickets, their dependencies, and statuses:

FieldTypeDescription
treeobject[]Root nodes (tickets with no dependencies)
tree[].idstringTicket ID
tree[].titlestringTicket title
tree[].statusstringCurrent status
tree[].epicIdstringParent epic ID
tree[].childrenobject[]Downstream dependent tickets (recursive structure)
totalTicketsnumberTotal ticket count
completedTicketsnumberCompleted ticket count

Useful for visualizing the overall shape of work and identifying bottlenecks.


Utility

feedback

Submit feedback, report issues, or suggest improvements.

ParameterTypeRequiredDescription
operation"submit" | "list" | "get"YesFeedback operation
categorystringNoFeedback category (for submit)
summarystringNoFeedback summary (for submit)
severitystringNoIssue severity (for submit)
toolstringNoWhich tool the feedback relates to (for submit)

Returns

Depends on the operation:

  • submit: Returns { id, message } — the feedback ID and confirmation.
  • list: Returns an array of feedback entries with id, category, summary, status, createdAt.
  • get: Returns the full feedback entry by ID.

See Also