Skip to main content
Glama

SpecPilot: next onboarding questions

specpilot_next_questions
Read-onlyIdempotent

Returns the unanswered SpecPilot onboarding questions of the next incomplete step, gated by the answers so far: questions that do not apply are omitted, and options are filtered, badged or flagged as in the SpecPilot web chat. Stateless: send every answer collected so far on each call.

Procedure: (1) Set isNewBuild from whether the repo already has real source code. (2) Infer what the repo answers instead of asking: platforms from the manifests and layout, languageOverride, ideAgent (you are the IDE), handle from git config or the origin remote, projectName from the manifest or folder name, projectDescription from the README only if it plainly says what the project is. (3) Call this tool, answer what the repo makes obvious and ask the developer the rest, a whole step per message. Send an empty value for a declined optional question or it is asked again; send todoSentinel verbatim when they do not know yet. For projectDescription, an exact returned chip label infers projectCategory and gates later questions; free prose infers nothing. Confirm pre-seeded values rather than accepting them silently. (4) Loop until done is true, then call specpilot_generate_specs and follow its nextSteps for where each file goes.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "specpilot_next_questions"
  }
}

Input Schema

NameRequiredDescriptionDefault
answersNoEvery SpecPilot onboarding answer collected so far. The server is stateless, so resend the whole object on every call; omit it entirely on the first call to get step 1.

Output Schema

NameRequiredDescriptionDefault
doneYesTrue when every applicable question is answered and specpilot_generate_specs can be called.
stepNoNumber of the step these questions belong to.
answersYesEvery answer as the server now understands it, including defaults and seeded values. Send this back on the next call.
questionsYesThe still-unanswered questions of the next incomplete step. Empty when done.
stepLabelNoHuman-readable name of that step, e.g. "Scale & deploy".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • addedInput schema / properties / answers / properties / designNotes
      Added value: +{
      +  "description": "Notes on the designs.",
      +  "type": "string"
      +}
    • addedInput schema / properties / answers / properties / designSystem
      Added value: +{
      +  "description": "Design system in use.",
      +  "type": "string"
      +}
    • addedInput schema / properties / answers / properties / figmaUrl
      Added value: +{
      +  "description": "Figma link.",
      +  "type": "string"
      +}
    • addedInput schema / properties / answers / properties / hasDesignAssets
      Added value: +{
      +  "description": "Whether Figma files, a design system or mockups exist.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / answers / properties / uiStyle
      Added value: +{
      +  "description": "Preferred UI style.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / answers / properties / designNotes
      Added value: +{
      +  "description": "Notes on the designs.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / answers / properties / designSystem
      Added value: +{
      +  "description": "Design system in use.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / answers / properties / figmaUrl
      Added value: +{
      +  "description": "Figma link.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / answers / properties / hasDesignAssets
      Added value: +{
      +  "description": "Whether Figma files, a design system or mockups exist.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / answers / properties / uiStyle
      Added value: +{
      +  "description": "Preferred UI style.",
      +  "type": "string"
      +}
  2. Changed20 schema fields changed
    • changedInput schema / properties / answers / properties / accessControl / description
      Previous value: -"The access control model. Drives the security spec auth/authorization section and the permission model."New value: +"The access control model."
    • changedInput schema / properties / answers / properties / apiStyle / description
      Previous value: -"API style - REST, GraphQL, gRPC or tRPC. Shapes how the architecture spec documents client-server communication."New value: +"API style - REST, GraphQL, gRPC or tRPC."
    • changedInput schema / properties / answers / properties / authStrategy / description
      Previous value: -"Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase). Feeds the security spec."New value: +"Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase)."
    • changedInput schema / properties / answers / properties / availability / description
      Previous value: -"Availability SLA target as a fraction of uptime; higher percentages allow far less downtime per year."New value: +"Availability SLA target as a fraction of uptime."
    • changedInput schema / properties / answers / properties / compliance / description
      Previous value: -"Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments), since getting it wrong has legal consequences."New value: +"Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments)."
    • changedInput schema / properties / answers / properties / handle / description
      Previous value: -"The developer GitHub handle. Optional; it namespaces generated task IDs (e.g. CD-jsmith-001). Infer from git config or the origin remote."New value: +"The developer GitHub handle. Optional. Infer from git config or the origin remote."
    • changedInput schema / properties / answers / properties / ideAgent / description
      Previous value: -"The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself; it decides which rules and config files are generated."New value: +"The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself."
    • changedInput schema / properties / answers / properties / isNewBuild / description
      Previous value: -"True for a greenfield project, false when adding onto an existing codebase. Decides which onboarding analysis is generated at the end."New value: +"True for a greenfield project, false when adding onto an existing codebase."
    • changedInput schema / properties / answers / properties / nonGoals / description
      Previous value: -"What this project explicitly will NOT do. Becomes the non-goals section of the specs."New value: +"What this project explicitly will NOT do."
    • changedInput schema / properties / answers / properties / scaleTier / description
      Previous value: -"Expected scale of the system. Drives infrastructure and architecture choices."New value: +"Expected scale of the system."
    • changedOutput schema / properties / answers / properties / accessControl / description
      Previous value: -"The access control model. Drives the security spec auth/authorization section and the permission model."New value: +"The access control model."
    • changedOutput schema / properties / answers / properties / apiStyle / description
      Previous value: -"API style - REST, GraphQL, gRPC or tRPC. Shapes how the architecture spec documents client-server communication."New value: +"API style - REST, GraphQL, gRPC or tRPC."
    • changedOutput schema / properties / answers / properties / authStrategy / description
      Previous value: -"Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase). Feeds the security spec."New value: +"Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase)."
    • changedOutput schema / properties / answers / properties / availability / description
      Previous value: -"Availability SLA target as a fraction of uptime; higher percentages allow far less downtime per year."New value: +"Availability SLA target as a fraction of uptime."
    • changedOutput schema / properties / answers / properties / compliance / description
      Previous value: -"Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments), since getting it wrong has legal consequences."New value: +"Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments)."
    • changedOutput schema / properties / answers / properties / handle / description
      Previous value: -"The developer GitHub handle. Optional; it namespaces generated task IDs (e.g. CD-jsmith-001). Infer from git config or the origin remote."New value: +"The developer GitHub handle. Optional. Infer from git config or the origin remote."
    • changedOutput schema / properties / answers / properties / ideAgent / description
      Previous value: -"The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself; it decides which rules and config files are generated."New value: +"The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself."
    • changedOutput schema / properties / answers / properties / isNewBuild / description
      Previous value: -"True for a greenfield project, false when adding onto an existing codebase. Decides which onboarding analysis is generated at the end."New value: +"True for a greenfield project, false when adding onto an existing codebase."
    • changedOutput schema / properties / answers / properties / nonGoals / description
      Previous value: -"What this project explicitly will NOT do. Becomes the non-goals section of the specs."New value: +"What this project explicitly will NOT do."
    • changedOutput schema / properties / answers / properties / scaleTier / description
      Previous value: -"Expected scale of the system. Drives infrastructure and architecture choices."New value: +"Expected scale of the system."
  3. Changed2 schema fields changed
    • addedInput schema / properties / answers / description
      Added value: +"Every SpecPilot onboarding answer collected so far. The server is stateless, so resend the whole object on every call; omit it entirely on the first call to get step 1."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "answers": {
      +      "additionalProperties": false,
      +      "description": "Every answer as the server now understands it, including defaults and seeded values. Send this back on the next call.",
      +      "properties": {
      +        "accessControl": {
      +          "description": "The access control model. Drives the security spec auth/authorization section and the permission model.",
      +          "type": "string"
      +        },
      +        "accessibilityNotes": {
      +          "description": "Anything further on accessibility or constraints, in free text.",
      +          "type": "string"
      +        },
      +        "activeUsers": {
      +          "description": "Roughly how many active users are expected, as a range.",
      +          "type": "string"
      +        },
      +        "apiResponseTime": {
      +          "description": "Target API response time.",
      +          "type": "string"
      +        },
      +        "apiStyle": {
      +          "description": "API style - REST, GraphQL, gRPC or tRPC. Shapes how the architecture spec documents client-server communication.",
      +          "type": "string"
      +        },
      +        "authStrategy": {
      +          "description": "Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase). Feeds the security spec.",
      +          "type": "string"
      +        },
      +        "availability": {
      +          "description": "Availability SLA target as a fraction of uptime; higher percentages allow far less downtime per year.",
      +          "type": "string"
      +        },
      +        "buildTimeline": {
      +          "description": "How long the build is expected to take.",
      +          "type": "string"
      +        },
      +        "cicd": {
      +          "description": "CI/CD practices - automatically running tests and deploying on every change.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "compliance": {
      +          "description": "Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments), since getting it wrong has legal consequences.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "constraintDescription": {
      +          "description": "More detail on whatever was named in technicalConstraints.",
      +          "type": "string"
      +        },
      +        "customUserType": {
      +          "description": "A user type in free text, when none of the userTypes options fit.",
      +          "type": "string"
      +        },
      +        "dataSyncStrategy": {
      +          "description": "How conflicting local and server state gets reconciled once the device is back online.",
      +          "type": "string"
      +        },
      +        "databases": {
      +          "description": "Database kinds in use - SQL, NoSQL, cache/key-value, vector. As many as apply.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "deploymentTargets": {
      +          "description": "Where this ships - cloud hosting, a package registry, a browser store. The option list depends on the project type.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "handle": {
      +          "description": "The developer GitHub handle. Optional; it namespaces generated task IDs (e.g. CD-jsmith-001). Infer from git config or the origin remote.",
      +          "type": "string"
      +        },
      +        "ideAgent": {
      +          "description": "The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself; it decides which rules and config files are generated.",
      +          "type": "string"
      +        },
      +        "integrations": {
      +          "additionalProperties": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "description": "Third-party integrations keyed by category, e.g. { payments: [\"stripe\"] }. Only categories relevant to the project type apply.",
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "isNewBuild": {
      +          "description": "True for a greenfield project, false when adding onto an existing codebase. Decides which onboarding analysis is generated at the end.",
      +          "type": "boolean"
      +        },
      +        "languageOverride": {
      +          "description": "Primary language, when it should override what SpecPilot infers from the repo.",
      +          "type": "string"
      +        },
      +        "localDatabases": {
      +          "description": "On-device stores backing offline support. Leave empty when offline is not needed.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "nonGoals": {
      +          "description": "What this project explicitly will NOT do. Becomes the non-goals section of the specs.",
      +          "type": "string"
      +        },
      +        "offlineSupport": {
      +          "description": "Whether this has to work offline. Set automatically when localDatabases is non-empty.",
      +          "type": "boolean"
      +        },
      +        "otherApis": {
      +          "description": "External APIs or services not covered by integrations.",
      +          "type": "string"
      +        },
      +        "platforms": {
      +          "description": "Platforms this should run on, e.g. web, ios, android, desktop. Infer from the dependency manifests and repo layout.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "projectCategory": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "saas",
      +                "api",
      +                "mobile",
      +                "cli",
      +                "pipeline",
      +                "ml",
      +                "static",
      +                "docs",
      +                "extension",
      +                "library",
      +                "other"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Project archetype. Normally inferred from projectDescription when it exactly matches a returned chip label - send it only if you already know it."
      +        },
      +        "projectDescription": {
      +          "description": "One line saying what the project is. Required by specpilot_generate_specs. Sending one of the chip labels returned by specpilot_next_questions verbatim is what infers projectCategory and gates every later question; free prose infers nothing.",
      +          "type": "string"
      +        },
      +        "projectName": {
      +          "description": "Short name for the project. Required by specpilot_generate_specs. Infer from the package manifest or the folder name.",
      +          "type": "string"
      +        },
      +        "realtimeEnabled": {
      +          "description": "Whether anything updates live without a refresh. Set automatically when realtimeTypes is non-empty.",
      +          "type": "boolean"
      +        },
      +        "realtimeTypes": {
      +          "description": "Realtime transports - WebSockets, SSE, polling. Leave empty when nothing needs to update live.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "scaleTier": {
      +          "description": "Expected scale of the system. Drives infrastructure and architecture choices.",
      +          "type": "string"
      +        },
      +        "securityConcerns": {
      +          "description": "Security measures to plan for - encryption, rate limiting, audit logging.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "specialConsiderations": {
      +          "description": "Cross-cutting concerns that apply, such as accessibility, internationalisation or offline support.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "systemPattern": {
      +          "description": "Architecture pattern - monolith, modular monolith, or microservices.",
      +          "type": "string"
      +        },
      +        "teamSize": {
      +          "description": "How many people are building this.",
      +          "type": "string"
      +        },
      +        "technicalConstraints": {
      +          "description": "Hard constraints - budget, existing infrastructure, legacy systems, a fixed deadline.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "testingStrategy": {
      +          "description": "Testing approaches this project will use.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "userTypes": {
      +          "description": "Who is going to use this system, e.g. end users, admins, internal staff.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "done": {
      +      "description": "True when every applicable question is answered and specpilot_generate_specs can be called.",
      +      "type": "boolean"
      +    },
      +    "questions": {
      +      "description": "The still-unanswered questions of the next incomplete step. Empty when done.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "allowCustom": {
      +            "description": "True when a value outside the listed options is accepted.",
      +            "type": "boolean"
      +          },
      +          "field": {
      +            "description": "The answers field this question fills - send the reply under this key.",
      +            "type": "string"
      +          },
      +          "groups": {
      +            "description": "Choices arranged into groups, for grouped questions.",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "group": {
      +                  "description": "Group heading.",
      +                  "type": "string"
      +                },
      +                "items": {
      +                  "description": "Options within this group.",
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "badge": {
      +                        "description": "recommended marks a suggested choice; flagged marks one that needs care.",
      +                        "enum": [
      +                          "recommended",
      +                          "flagged"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "description": {
      +                        "description": "Longer explanation of what choosing this means.",
      +                        "type": "string"
      +                      },
      +                      "group": {
      +                        "description": "Group this option belongs to.",
      +                        "type": "string"
      +                      },
      +                      "id": {
      +                        "description": "Value to send back for this option.",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "description": "Human-readable label shown to the developer.",
      +                        "type": "string"
      +                      },
      +                      "warning": {
      +                        "description": "Caveat to surface to the developer before they pick this.",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "id",
      +                      "label"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                }
      +              },
      +              "required": [
      +                "group",
      +                "items"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "id": {
      +            "description": "Stable question id.",
      +            "type": "string"
      +          },
      +          "optional": {
      +            "description": "True when the question may be answered with an empty value to decline it.",
      +            "type": "boolean"
      +          },
      +          "options": {
      +            "description": "Choices for a select-style question.",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "badge": {
      +                  "description": "recommended marks a suggested choice; flagged marks one that needs care.",
      +                  "enum": [
      +                    "recommended",
      +                    "flagged"
      +                  ],
      +                  "type": "string"
      +                },
      +                "description": {
      +                  "description": "Longer explanation of what choosing this means.",
      +                  "type": "string"
      +                },
      +                "group": {
      +                  "description": "Group this option belongs to.",
      +                  "type": "string"
      +                },
      +                "id": {
      +                  "description": "Value to send back for this option.",
      +                  "type": "string"
      +                },
      +                "label": {
      +                  "description": "Human-readable label shown to the developer.",
      +                  "type": "string"
      +                },
      +                "warning": {
      +                  "description": "Caveat to surface to the developer before they pick this.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "label"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "prompt": {
      +            "description": "The question text, rendered against the answers so far.",
      +            "type": "string"
      +          },
      +          "required": {
      +            "description": "True when a non-empty answer is needed to move on.",
      +            "type": "boolean"
      +          },
      +          "todoSentinel": {
      +            "description": "Send this exact value when the developer does not know yet.",
      +            "type": "string"
      +          },
      +          "type": {
      +            "description": "Shape of the expected answer, e.g. text, single-select, multi-select.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "field",
      +          "type",
      +          "prompt"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "step": {
      +      "description": "Number of the step these questions belong to.",
      +      "type": "number"
      +    },
      +    "stepLabel": {
      +      "description": "Human-readable name of that step, e.g. \"Scale & deploy\".",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "done",
      +    "questions",
      +    "answers"
      +  ],
      +  "type": "object"
      +}
  4. Changed38 schema fields changed
    • addedInput schema / properties / answers / properties / accessControl / description
      Added value: +"The access control model. Drives the security spec auth/authorization section and the permission model."
    • addedInput schema / properties / answers / properties / accessibilityNotes / description
      Added value: +"Anything further on accessibility or constraints, in free text."
    • addedInput schema / properties / answers / properties / activeUsers / description
      Added value: +"Roughly how many active users are expected, as a range."
    • addedInput schema / properties / answers / properties / apiResponseTime / description
      Added value: +"Target API response time."
    • addedInput schema / properties / answers / properties / apiStyle / description
      Added value: +"API style - REST, GraphQL, gRPC or tRPC. Shapes how the architecture spec documents client-server communication."
    • addedInput schema / properties / answers / properties / authStrategy / description
      Added value: +"Auth approach - a protocol built in-house (JWT/OAuth/SAML) or a managed service (Clerk, Auth0, Firebase). Feeds the security spec."
    • addedInput schema / properties / answers / properties / availability / description
      Added value: +"Availability SLA target as a fraction of uptime; higher percentages allow far less downtime per year."
    • addedInput schema / properties / answers / properties / buildTimeline / description
      Added value: +"How long the build is expected to take."
    • addedInput schema / properties / answers / properties / cicd / description
      Added value: +"CI/CD practices - automatically running tests and deploying on every change."
    • addedInput schema / properties / answers / properties / compliance / description
      Added value: +"Compliance regimes that apply - GDPR, HIPAA, SOC 2. Pick by the actual situation (EU users, health data, payments), since getting it wrong has legal consequences."
    • addedInput schema / properties / answers / properties / constraintDescription / description
      Added value: +"More detail on whatever was named in technicalConstraints."
    • addedInput schema / properties / answers / properties / customUserType / description
      Added value: +"A user type in free text, when none of the userTypes options fit."
    • addedInput schema / properties / answers / properties / dataSyncStrategy / description
      Added value: +"How conflicting local and server state gets reconciled once the device is back online."
    • addedInput schema / properties / answers / properties / databases / description
      Added value: +"Database kinds in use - SQL, NoSQL, cache/key-value, vector. As many as apply."
    • addedInput schema / properties / answers / properties / deploymentTargets / description
      Added value: +"Where this ships - cloud hosting, a package registry, a browser store. The option list depends on the project type."
    • addedInput schema / properties / answers / properties / handle / description
      Added value: +"The developer GitHub handle. Optional; it namespaces generated task IDs (e.g. CD-jsmith-001). Infer from git config or the origin remote."
    • addedInput schema / properties / answers / properties / ideAgent / description
      Added value: +"The editor or AI IDE in use - claudecode, cursor, copilot, codex, windsurf. You are the IDE, so set this yourself; it decides which rules and config files are generated."
    • addedInput schema / properties / answers / properties / integrations / description
      Added value: +"Third-party integrations keyed by category, e.g. { payments: [\"stripe\"] }. Only categories relevant to the project type apply."
    • addedInput schema / properties / answers / properties / isNewBuild / description
      Added value: +"True for a greenfield project, false when adding onto an existing codebase. Decides which onboarding analysis is generated at the end."
    • addedInput schema / properties / answers / properties / languageOverride / description
      Added value: +"Primary language, when it should override what SpecPilot infers from the repo."
    • addedInput schema / properties / answers / properties / localDatabases / description
      Added value: +"On-device stores backing offline support. Leave empty when offline is not needed."
    • addedInput schema / properties / answers / properties / nonGoals / description
      Added value: +"What this project explicitly will NOT do. Becomes the non-goals section of the specs."
    • addedInput schema / properties / answers / properties / offlineSupport / description
      Added value: +"Whether this has to work offline. Set automatically when localDatabases is non-empty."
    • addedInput schema / properties / answers / properties / otherApis / description
      Added value: +"External APIs or services not covered by integrations."
    • addedInput schema / properties / answers / properties / platforms / description
      Added value: +"Platforms this should run on, e.g. web, ios, android, desktop. Infer from the dependency manifests and repo layout."
    • addedInput schema / properties / answers / properties / projectCategory / description
      Added value: +"Project archetype. Normally inferred from projectDescription when it exactly matches a returned chip label - send it only if you already know it."
    • addedInput schema / properties / answers / properties / projectDescription / description
      Added value: +"One line saying what the project is. Required by specpilot_generate_specs. Sending one of the chip labels returned by specpilot_next_questions verbatim is what infers projectCategory and gates every later question; free prose infers nothing."
    • addedInput schema / properties / answers / properties / projectName / description
      Added value: +"Short name for the project. Required by specpilot_generate_specs. Infer from the package manifest or the folder name."
    • addedInput schema / properties / answers / properties / realtimeEnabled / description
      Added value: +"Whether anything updates live without a refresh. Set automatically when realtimeTypes is non-empty."
    • addedInput schema / properties / answers / properties / realtimeTypes / description
      Added value: +"Realtime transports - WebSockets, SSE, polling. Leave empty when nothing needs to update live."
    • addedInput schema / properties / answers / properties / scaleTier / description
      Added value: +"Expected scale of the system. Drives infrastructure and architecture choices."
    • addedInput schema / properties / answers / properties / securityConcerns / description
      Added value: +"Security measures to plan for - encryption, rate limiting, audit logging."
    • addedInput schema / properties / answers / properties / specialConsiderations / description
      Added value: +"Cross-cutting concerns that apply, such as accessibility, internationalisation or offline support."
    • addedInput schema / properties / answers / properties / systemPattern / description
      Added value: +"Architecture pattern - monolith, modular monolith, or microservices."
    • addedInput schema / properties / answers / properties / teamSize / description
      Added value: +"How many people are building this."
    • addedInput schema / properties / answers / properties / technicalConstraints / description
      Added value: +"Hard constraints - budget, existing infrastructure, legacy systems, a fixed deadline."
    • addedInput schema / properties / answers / properties / testingStrategy / description
      Added value: +"Testing approaches this project will use."
    • addedInput schema / properties / answers / properties / userTypes / description
      Added value: +"Who is going to use this system, e.g. end users, admins, internal staff."
  5. First observed

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, and the description's 'Stateless: send every answer collected so far on each call' is consistent with that, not contradictory. Beyond annotations it adds real behavioral context: gating/filtering of options, re-asking of declined questions, and the projectDescription chip-label rule that gates every later question. It stops short of describing the response shape itself (step ordering, chip/option payloads), leaning on the output schema for that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-sentence summary is front-loaded, then a clearly numbered four-step procedure, which is well suited to a stateful-looking, high-parameter tool. It is dense and long, and a few infer-from-repo hints duplicate schema descriptions, but almost every sentence carries an instruction the agent would otherwise get wrong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with ~40 answer fields, nested objects and an output schema, the description supplies exactly the missing operational layer: statelessness, the loop termination condition, the handoff to the sibling, and the inference rules that prevent the agent from interrogating the developer about things it can read from the repo. Return values are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-field descriptions, so the schema already carries the parameter semantics and baseline 3 applies. The description does add genuinely non-schema meaning — resend the whole object every call, omit it on the first call, empty string vs todoSentinel semantics, infer-don't-ask rules for platforms/ideAgent/handle/projectName, and the projectDescription-to-projectCategory inference — but most of that is procedural rather than per-parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence gives a specific verb and resource ('Returns the unanswered SpecPilot onboarding questions of the next incomplete step') plus the scoping rule that answers gate which questions appear. It also names the sibling specpilot_generate_specs and the condition (done === true) that hands off to it, so the two tools are trivially distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It spells out an explicit numbered procedure: set isNewBuild, infer six named fields from the repo rather than asking, answer what's obvious and ask the rest one step per message, then loop until done and call specpilot_generate_specs. Edge cases are covered too — empty value for a declined optional question, todoSentinel when the developer doesn't know, confirm pre-seeded values instead of accepting them silently.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.