Skip to main content
Glama

product-spec-mcp

把一句模糊的产品想法,整理成 AI Agent 可以执行的工程规格。

很多人能说清“我想做什么”,但还没法直接写出功能范围、数据字段、架构边界和验收标准。product-spec-mcp 先帮你把想法过一遍产品经理式需求闸门,再交给 Codex、Claude、Cursor、OpenCode 等 Agent 开始写代码。

适合谁

  • 你有一个小应用、网站、工具或 SaaS 想法,但不知道怎样拆成开发规格。

  • 你是创始人、运营、设计师、小团队负责人、学生,或刚开始用 AI 写代码的人。

  • 你希望 Agent 少脑补,先确认对象、字段、权限、接口、风险和验收标准。

  • 你要判断一个需求第一版该做纯前端、本地存储、轻后端,还是完整 SaaS。

Related MCP server: deliver-cli

它会产出什么

  • 追问清单:先问真正会影响实现的缺口,不套固定模板。

  • 可执行规格:核心功能、数据模型、API 设计、非目标、风险边界。

  • 架构建议:判断是否需要后端、登录、后台、数据库、支付或 AI Key 保护。

  • 验收标准:把“做完了”变成可以检查的列表。

最短使用路径

用户只需要做三步

第一步:把 MCP 注册到当前 AI 工具。

通用 mcp.json 配置:

{
  "mcpServers": {
    "product-spec": {
      "command": "npx",
      "args": ["-y", "product-spec-mcp@latest"]
    }
  }
}

如果你的工具使用 opencode 风格配置:

{
  "mcp": {
    "product-spec": {
      "type": "local",
      "command": ["npx", "-y", "product-spec-mcp@latest"],
      "enabled": true,
      "timeout": 30000
    }
  }
}

保存后,重启 IDE 或刷新 MCP 连接。

第二步:把这句话发给 Agent。

请调用 product_spec_connect,帮我连接 product-spec-mcp 的完整在线能力。

它会返回连接页:

https://productmcp.opc-mind.top/connect

打开页面后点击“生成并下载连接文件”。

第三步:把下载的 JSON 文件发回 Agent。

页面会下载 product-spec-mcp-connect.json。把这个文件发回 Agent;Agent 会读取 JSON 文件里的 instructions.env,写入当前 MCP 配置。再次重启或刷新 MCP 后即可使用完整能力。

普通用户不需要配置 DeepSeek API Key。连接文件里包含的是托管 Worker 生成的专属 PRODUCT_SPEC_REMOTE_GATE_TOKEN,用于启用完整的在线 PM Gate 能力。

完整说明见 docs/quick-start.md

连接完成后,直接让 Agent 调用:

product_spec_assist

如果不确定从哪个工具开始,直接让 Agent 调用:

product_spec_assist

输入你的原话,例如:

我想做一个活动报名系统,用户填姓名电话报名人数,后台能查看、搜索和导出 Excel。

它会自动判断该追问、编译规格、给架构建议,还是生成验收标准。

需要完整开发前规格时,推荐流程是:

1. spec_interrogate   → 评估需求完整度,生成追问清单
2. spec_compile       → 编译产品规格和开发 Prompt
3. architecture_decide → 判断架构方案
4. acceptance_generate → 生成验收标准

在线 PM Gate 是完整能力的一部分。 默认本地规则已经可用;连接后,低置信或冲突需求会走在线 LLM 辅助归门。首次使用建议先调用 product_spec_connect,按连接页下载 JSON 文件并交给当前 Agent 写入配置。

Features

This MCP Server provides 8 tools for product development workflow:

Tool

Description

product_spec_assist

推荐入口 - 根据用户原话自动识别场景并调用对应能力

product_spec_connect

在线增强连接 - 引导用户下载连接文件,并生成当前 Agent 应写入的 MCP 环境变量

spec_interrogate

Analyze requirement completeness and generate clarification questions

spec_compile

Compile full product specification and development prompt

architecture_decide

Make architecture decisions based on product type and features

ui_translate

Translate user UI descriptions into frontend terminology

debug_guide

Generate structured debugging checklists

acceptance_generate

Generate acceptance criteria for features

Installation

For npm-based MCP clients:

npx -y product-spec-mcp --help

The help output gives copyable MCP config snippets and the exact first message to send to the Agent.

For local development:

npm install
npm run build

Usage

As MCP Server (stdio)

npm start

Development Mode

npm run dev

Optional Online PM Gate

默认只使用本地 PM Gate。需要让低置信或冲突需求走在线 LLM 辅助归门时,可以配置独立 HTTP gate:

对普通用户,推荐让 Agent 调用 product_spec_connect。用户只需要打开连接页,点击下载 product-spec-mcp-connect.json,再把文件发回 Agent;Agent 读取文件后把其中的 instructions.env 写入当前 MCP 配置即可。

PRODUCT_SPEC_REMOTE_GATE_URL=https://gate.example.com/v1/pm-intent
PRODUCT_SPEC_REMOTE_GATE_TOKEN=replace-with-token
PRODUCT_SPEC_REMOTE_GATE_TIMEOUT_MS=10000
PRODUCT_SPEC_REMOTE_GATE_MODE=auto
PRODUCT_SPEC_TELEMETRY=off

auto 模式只在本地规则低置信、unknown 或冲突时调用远程。远程失败、限流、超时或 schema 错误时会自动降级到本地判断。Cloudflare Workers 部署模板随 npm 包一起发布,见 docs/online-pm-gate.mddocs/connect-flow.md

MCP Client Configuration

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "product-spec": {
      "command": "npx",
      "args": ["-y", "product-spec-mcp@latest"]
    }
  }
}

Cursor

Add to your Cursor MCP configuration (.cursor/mcp.json):

{
  "mcpServers": {
    "product-spec": {
      "command": "npx",
      "args": ["-y", "product-spec-mcp@latest"]
    }
  }
}

VS Code (Continue)

Add to your Continue configuration:

{
  "mcpServers": {
    "product-spec": {
      "command": "npx",
      "args": ["-y", "product-spec-mcp@latest"]
    }
  }
}

opencode

Add to ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "product-spec": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "product-spec-mcp@latest"
      ],
      "enabled": true,
      "timeout": 30000
    }
  }
}

Note: opencode uses the mcp key. mcpServers is a Claude-style config key and will fail schema validation in current opencode versions.

FAQ

Where are maintainer notes?

If you plan to modify this MCP server itself, read the maintainer notes first:

Client-specific integration notes are intentionally kept out of the main user flow. They live under docs/ in the GitHub repository for maintainers who need them.

Tools Documentation

product_spec_assist (推荐入口)

统一入口:根据用户原话自动判断场景并调用对应能力。

Input:

  • message (required): 用户原话

  • known_context: 已有上下文

  • preferred_platform: web | mini_program | app | backend | unknown

  • strictness: light | normal | grill

  • auto_execute: boolean (default: true)

Example:

{
  "message": "我想做一个报名系统,学生可以提交资料,后台老师审核",
  "preferred_platform": "web"
}

路由规则:

场景

自动调用

产品开发

spec_interrogate

UI 修改

ui_translate

Debug 排查

debug_guide

上线部署

信息缺口检查


product_spec_connect

引导用户连接在线 PM Gate。未配置时返回连接页面;收到连接文件后返回当前 Agent 应写入 MCP 配置的环境变量。

Input:

  • connect_file: 用户从连接页下载的 product-spec-mcp-connect.json 内容

  • client: 当前 Agent 名称,例如 workbuddycodexopencode

Example:

{
  "client": "workbuddy"
}

如果用户已经上传连接文件:

{
  "client": "workbuddy",
  "connect_file": {
    "type": "product-spec-mcp-connect",
    "client": "workbuddy",
    "useCases": ["personal_app_site", "client_requirements"],
    "instructions": {
      "env": {
        "PRODUCT_SPEC_REMOTE_GATE_URL": "https://productmcp.opc-mind.top/v1/pm-intent",
        "PRODUCT_SPEC_REMOTE_GATE_TOKEN": "psm_xxx",
        "PRODUCT_SPEC_REMOTE_GATE_MODE": "auto"
      }
    }
  }
}

spec_interrogate

Analyze requirement completeness and generate clarification questions.

Input:

  • raw_idea (required): User's original idea description

  • scenario: build_product | modify_ui | debug | launch | unknown

  • target_platform: web | mini_program | app | backend | unknown

  • strictness: light | normal | grill

  • known_context: Object with known context information

Example:

{
  "raw_idea": "我想做一个报名系统,用户可以提交资料,后台能看到",
  "scenario": "build_product",
  "target_platform": "web"
}

spec_compile

Compile full product specification and development prompt.

Input:

  • raw_idea (required): User's original idea

  • answers: Object with answers to clarification questions

  • allow_assumptions: boolean (default: true)

  • min_readiness_score: number (default: 70)

Example:

{
  "raw_idea": "报名系统",
  "answers": {
    "target_user": "学生",
    "platform": "web",
    "data_persistence": true
  },
  "allow_assumptions": true
}

architecture_decide

Make architecture decisions based on product type and features.

Input:

  • product_type (required): Product type description

  • platform (required): web | mini_program | app | backend

  • features (required): Array of feature descriptions

  • commercial_intent: boolean

  • expected_users: individual | small_team | enterprise | massive

Example:

{
  "product_type": "电商系统",
  "platform": "web",
  "features": ["商品展示", "购物车", "支付", "订单管理"],
  "commercial_intent": true,
  "expected_users": "small_team"
}

ui_translate

Translate user UI descriptions into frontend terminology.

Input:

  • description (required): User's UI description

  • current_page: Current page name

  • target_component: Target component name

Example:

{
  "description": "首页看起来太廉价了,高级一点",
  "current_page": "首页"
}

debug_guide

Generate structured debugging checklists.

Input:

  • platform (required): web | mini_program | app | backend | build | unknown

  • error_description (required): Error description

  • current_info: Object with known error information

Example:

{
  "platform": "web",
  "error_description": "点击提交按钮后页面白屏"
}

acceptance_generate

Generate acceptance criteria for features.

Input:

  • product_type (required): Product type

  • features (required): Array of features

  • platform (required): web | mini_program | app | backend

  • has_backend: boolean

  • has_payment: boolean

  • has_auth: boolean

Example:

{
  "product_type": "表单工具",
  "features": ["表单提交", "数据查看"],
  "platform": "web",
  "has_backend": true
}

Development

Run Tests

npm test

Type Check

npm run typecheck

Build

npm run build

Architecture

src/
├── index.ts           # Entry point
├── server.ts          # MCP Server setup and tool registration
├── tools/             # Tool handlers
├── core/              # Business logic engines
├── schemas/           # Zod schemas
├── rules/             # JSON rule files
└── utils/             # Utility functions

License

MIT

Structured Outputs

Each tool returns human-readable Markdown in content and machine-readable JSON in structuredContent.

Example: spec_interrogate structured output

{
  "readiness": {
    "score": 35,
    "status": "Not Ready",
    "fields": { ... }
  },
  "clarification": {
    "missingFields": ["target_user", "data_persistence"],
    "questions": [
      {
        "field": "target_user",
        "question": "目标用户是谁?",
        "whyImportant": "决定 UI 风格、交互复杂度、技术选型",
        "options": ["个人用户", "小团队", "企业用户"],
        "defaultAssumption": "个人用户",
        "priority": "P0"
      }
    ],
    "defaultAssumptions": { ... }
  },
  "recommendation": {
    "canProceed": false,
    "suggestedNextTool": "spec_interrogate",
    "reason": "信息不足,需要先回答追问"
  }
}

Key structured fields:

Tool

Key Fields

spec_interrogate

readiness.score, clarification.questions, recommendation.canProceed

spec_compile

mode, spec.coreFeatures, nextAction.type

acceptance_generate

categories, checklist, definitionOfDone

architecture_decide

decision.canBeFrontendOnly, riskLevel, blockers

ui_translate

translation.frontendTerms, confidence

debug_guide

guide.checklist, missingRequiredInfo, canDiagnoseNow

示例

示例 1:报名系统

输入:

{
  "raw_idea": "我想做一个报名系统,用户可以提交资料,后台能看到所有报名信息并审核",
  "scenario": "build_product",
  "target_platform": "web"
}

推荐流程:

  1. 先调用 spec_interrogate,会追问:目标用户是谁?是否需要登录?是否需要保存数据?

  2. 补充信息后调用 spec_compile,生成产品规格和开发 Prompt

  3. 调用 architecture_decide,判断是否需要后端和数据库

  4. 调用 acceptance_generate,生成验收清单

示例 2:展示官网

输入:

{
  "raw_idea": "做一个产品展示官网,只需要静态展示",
  "scenario": "build_product",
  "target_platform": "web"
}

预期行为:

  • architecture_decide 会推荐纯前端架构,不推荐数据库

  • spec_compile 会生成简洁的静态站点规格

  • 不会输出伪 API 设计

Available Tools

7 tools
acceptance_generate验收标准生成B

根据产品类型和功能,生成验收标准。

ParametersJSON Schema
NameRequiredDescriptionDefault
product_typeYes产品类型
featuresYes功能列表
platformYes目标平台
has_backendNo是否有后端
has_paymentNo是否涉及支付
has_authNo是否涉及鉴权

Output Schema

ParametersJSON Schema
NameRequiredDescription
productTypeYes
platformYes
technicalProfileNo
pmIntentDecisionNo
categoriesYes
definitionOfDoneYes
checklistYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the tool's output ('generate acceptance criteria') without mentioning any side effects, authorization needs, rate limits, or limitations.

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 description is a single concise sentence that front-loads the main purpose. It is appropriately sized for a simple tool, though it could include more detail without being verbose.

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

Completeness2/5

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

Given that the tool has 6 parameters and an output schema, the description is too brief. It does not explain the output format or constraints, leaving the agent with incomplete information for effective use.

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 description coverage is 100%, so the input schema adequately documents all parameters. The description adds no additional meaning beyond what is already in the schema, warranting a baseline score of 3.

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?

The description clearly states the tool's purpose: generating acceptance criteria based on product type and features. It distinguishes itself from sibling tools like product_spec_assist or spec_compile by focusing specifically on acceptance criteria.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites or exclusions, leaving the agent without context for appropriate invocation.

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

architecture_decide架构决策C

根据产品类型、平台、功能、商业化意图判断架构方案。

ParametersJSON Schema
NameRequiredDescriptionDefault
product_typeYes产品类型描述
platformYes目标平台
featuresYes功能列表
commercial_intentNo是否有商业化意图
expected_usersNo预期用户规模individual

Output Schema

ParametersJSON Schema
NameRequiredDescription
decisionYes
technicalProfileNo
riskLevelYes
blockersYes

TDQS

C2.9/5.0
Behavior2/5

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

The description does not disclose behavioral traits beyond its purpose. It does not mention whether the decision is deterministic, what the output format is, or any side effects. With no annotations provided, the description carries the full burden but adds minimal behavioral insight.

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 description is a single sentence that efficiently conveys the core purpose. It is front-loaded and contains no redundant information, though it could be slightly more informative.

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

Completeness3/5

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

Given the output schema exists, the description does not need to cover return values. However, it omits context about optional parameters and enum options, which would help an agent understand the decision basis better. It is minimally complete.

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?

The input schema has 100% description coverage for all parameters. The description simply lists parameter names without adding extra semantics or constraints, so it aligns with the baseline score of 3 for high-coverage schemas.

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

Purpose4/5

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

The description clearly states that the tool determines an architecture plan based on inputs like product type, platform, features, and commercial intent. It uses a specific verb ('judge') and resource ('architecture plan'), but does not explicitly differentiate from sibling tools, though the domain is distinct.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description only states what it does, lacking context for choosing it over siblings like 'acceptance_generate' or 'debug_guide'.

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

debug_guideDebug 指引B

当用户说程序出错时,引导用户提供正确错误信息,并生成结构化排查步骤。

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYes出错平台
error_descriptionYes错误描述
current_infoNo已知的错误信息

Output Schema

ParametersJSON Schema
NameRequiredDescription
guideYes
missingRequiredInfoYes
canDiagnoseNowYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral transparency. It does not disclose whether the tool modifies state, logs interactions, or what side effects may occur. For an interactive tool, this is a significant gap.

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 description is one sentence with no wasted words. However, it could benefit from a more structured format, such as bullet points for the two key actions (guidance and generation).

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

Completeness3/5

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

Given the tool's interactive nature and the presence of an output schema (not shown), the description is adequate but not comprehensive. It explains the main goal but lacks detail on how the guidance works or what the structured steps look like.

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?

All three parameters have descriptions in the input schema (100% coverage), so the schema already handles parameter semantics. The description adds minimal additional meaning beyond the overall purpose, but does not elaborate on parameter usage or provide examples.

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?

The description clearly states what the tool does: it guides users to provide correct error information and generates structured troubleshooting steps. This distinguishes it from sibling tools which focus on acceptance, architecture, product specification, compilation, interrogation, and translation.

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

Usage Guidelines3/5

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

The description implies usage when a user reports an error, but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The usage context is clear but lacks depth.

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

product_spec_assist产品规格助手A

统一入口:根据用户原话自动判断场景(产品开发、UI 修改、Debug、上线),并调用对应能力。

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes用户原话,必填
known_contextNo已有上下文
preferred_platformNo用户已知平台unknown
strictnessNo追问强度normal
auto_executeNo是否允许自动调用对应 engine

Output Schema

ParametersJSON Schema
NameRequiredDescription
routedIntentYes
selectedToolYes
executedYes
resultYes
nextActionYes
technicalProfileNo
pmIntentDecisionNo
quickQuestionsYes
agentGuidanceYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states high-level behavior (scenario detection and routing) without detailing side effects, prerequisites, or what happens in ambiguous cases. This is insufficient for a dispatcher tool.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the core purpose. Every word is meaningful, and there is no redundancy.

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

Completeness2/5

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

Given the tool has 5 parameters, nested objects, and an output schema, the description is too minimal. It does not explain the role of parameters like known_context, preferred_platform, strictness, or auto_execute, nor the nature of the output.

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?

The input schema has 100% description coverage, so the parameters are documented. The description adds no additional meaning beyond the schema, which is acceptable here.

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?

The description clearly states the tool as a unified entry point that automatically determines the scenario (product development, UI modification, Debug, launch) and calls the corresponding capability. This distinguishes it from sibling tools, which are specific to individual tasks.

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

Usage Guidelines4/5

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

The description indicates it is the first contact point for user requests, implying when to use it. However, it does not explicitly state when not to use it or mention alternatives for known scenarios.

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

spec_compile规格编译C

编译完整产品规格和开发 Prompt。根据信息完整度输出追问、草案或正式规格。

ParametersJSON Schema
NameRequiredDescriptionDefault
raw_ideaYes用户原始想法
answersNo用户对追问的回答
allow_assumptionsNo是否允许使用默认假设
min_readiness_scoreNo最低可接受的 readiness 分数

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
readinessYes
inputConsumptionNo
technicalProfileNo
pmIntentDecisionNo
specNo
confirmationNo
clarificationNo
nextActionYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, description carries full burden. It mentions output type (questions/draft/formal) based on completeness, but does not disclose side effects, authentication needs, or other behaviors beyond generation. No annotation contradiction.

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?

Single sentence is efficient and front-loaded. Could benefit from slightly more structure, but no waste.

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

Completeness2/5

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

Description lacks details on decision logic for output type (e.g., what completeness level triggers questions vs draft vs formal). Does not explain parameter roles or readiness score thresholds. Output schema may cover return format, but the core logic is missing.

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%, so baseline is 3. Description adds no extra meaning beyond schema; does not explain how 'answers', 'allow_assumptions', or 'min_readiness_score' affect compilation outcome.

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

Purpose4/5

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

Description clearly states the tool compiles complete product specs and dev prompt, and outputs questions/draft/formal spec based on completeness. It's specific verb+resource, and distinguishes from siblings like spec_interrogate (which may drill down) and product_spec_assist (which may assist). However, explicit differentiation from siblings is missing.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives like product_spec_assist or spec_interrogate. Description only states its function, not context of use.

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

spec_interrogate需求追问A

分析用户的原始 idea 或页面修改需求,判断信息是否足够进入开发阶段。当信息缺失较多时,输出追问问题清单。

ParametersJSON Schema
NameRequiredDescriptionDefault
raw_ideaYes用户原始表达,必填
scenarioNo场景类型unknown
target_platformNo目标平台unknown
strictnessNo追问严格程度normal
known_contextNo已知上下文信息

Output Schema

ParametersJSON Schema
NameRequiredDescription
readinessYes
clarificationYes
recommendationYes
technicalProfileNo

TDQS

A4/5.0
Behavior3/5

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

The description explains the core behavior (analyze, judge sufficiency, output questions) but doesn't specify the output format when info is sufficient, whether it modifies any state, or any authentication or rate limit requirements. With no annotations, the description carries the full burden, and more details would improve transparency.

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

Conciseness5/5

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

The description is two sentences, directly stating the purpose and output. It is front-loaded and every sentence earns its place with no waste.

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

Completeness4/5

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

Given the presence of an output schema and 5 params (with 3 enums), the description covers the main behavior. However, it could mention the output structure more explicitly (though output schema exists) and discuss error handling or edge cases for missing info.

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%, so baseline is 3. The description adds little beyond the schema; it mentions the raw_idea is required but doesn't elaborate on parameter meanings or usage nuances. The schema already provides sufficient descriptions for each parameter.

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?

The description clearly states it analyzes raw ideas or page modifications to determine if info is sufficient for development, and outputs follow-up questions if needed. This distinguishes it from siblings like spec_compile (which likely compiles to a spec) or product_spec_assist (which assists in writing specs).

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

Usage Guidelines4/5

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

The description implies usage when user input is vague and needs clarification before development, and notes when info is missing. However, it doesn't explicitly differentiate from siblings or state when not to use this tool versus alternatives.

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

ui_translateUI 术语翻译A

把普通用户的页面修改描述翻译成前端开发术语和可执行修改 Prompt。

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes用户原始描述
current_pageNo当前页面名称
target_componentNo目标组件名称

Output Schema

ParametersJSON Schema
NameRequiredDescription
translationYes
confidenceYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the translation produces front-end terminology and executable prompts but does not disclose behavior with invalid input, completeness guarantees, or processing details. It is adequate but not rich.

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

Conciseness5/5

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

A single sentence front-loads the action and resource without any fluff. Every word contributes to conveying the purpose, achieving high conciseness.

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

Completeness4/5

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

Given only 3 simple string parameters with full schema descriptions and an output schema present, the description provides sufficient high-level context. A minor gap is lack of examples or edge case notes, but overall complete for the tool's simplicity.

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 each parameter having a description (e.g., '用户原始描述' for description). The tool description adds no extra semantic meaning beyond what the schema already provides, meeting baseline for full coverage.

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?

The description clearly states the tool translates user page modification descriptions into front-end terminology and executable prompts. It uses specific verb 'translate' and specifies resources, distinguishing it from siblings like acceptance_generate or debug_guide which handle different tasks.

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

Usage Guidelines3/5

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

The description implies usage for translation tasks but provides no explicit guidance on when to use or not use this tool compared to siblings. No alternatives or exclusions are mentioned, relying on user inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.3.20
    • Changedacceptance_generate2 fields changed
      • addedOutput schema / properties / pmIntentDecision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "accessTopology": {
        +      "enum": [
        +        "single_device",
        +        "lan_only",
        +        "internet_ip",
        +        "public_domain",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "actions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "boundaryQuestionIds": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "coreObjects": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "defaultAssumptions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "maintenanceMode": {
        +      "enum": [
        +        "agent_assisted",
        +        "manual_files",
        +        "web_admin",
        +        "visitor_submission",
        +        "runtime_collaboration",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "mustNotUse": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "needType": {
        +      "enum": [
        +        "static_display",
        +        "personal_local_tool",
        +        "multi_user_collaboration",
        +        "content_marketing_site",
        +        "data_visualization_site",
        +        "transaction_workflow",
        +        "content_knowledge",
        +        "ai_automation",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "recommendedDeployment": {
        +      "enum": [
        +        "static_only",
        +        "local_browser_only",
        +        "static_hosting_with_agent_updates",
        +        "local_lan_server_sqlite",
        +        "cheap_vps_sqlite_by_ip",
        +        "vps_domain_https",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "route": {
        +      "enum": [
        +        "spec_compile",
        +        "spec_interrogate",
        +        "architecture_decide"
        +      ],
        +      "type": "string"
        +    },
        +    "source": {
        +      "enum": [
        +        "local_rule",
        +        "online_llm",
        +        "merged"
        +      ],
        +      "type": "string"
        +    },
        +    "states": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "strongSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "technicalShape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "usageScope": {
        +      "enum": [
        +        "self",
        +        "fixed_group",
        +        "public_audience",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "weakSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "needType",
        +    "usageScope",
        +    "maintenanceMode",
        +    "accessTopology",
        +    "technicalShape",
        +    "recommendedDeployment",
        +    "route",
        +    "confidence",
        +    "strongSignals",
        +    "weakSignals",
        +    "coreObjects",
        +    "states",
        +    "actions",
        +    "mustNotUse",
        +    "boundaryQuestionIds",
        +    "defaultAssumptions",
        +    "source"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / technicalProfile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "blockers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "evidence": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "frontendOnly": {
        +      "type": "boolean"
        +    },
        +    "needsAdmin": {
        +      "type": "boolean"
        +    },
        +    "needsAuth": {
        +      "type": "boolean"
        +    },
        +    "needsBackend": {
        +      "type": "boolean"
        +    },
        +    "nextQuestions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "example": {
        +            "type": "string"
        +          },
        +          "question": {
        +            "type": "string"
        +          },
        +          "why": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "question",
        +          "example",
        +          "why"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "suggestedStorage": {
        +      "enum": [
        +        "none",
        +        "localStorage",
        +        "indexedDB",
        +        "static_json",
        +        "json_file",
        +        "sqlite",
        +        "postgresql"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "shape",
        +    "confidence",
        +    "frontendOnly",
        +    "needsBackend",
        +    "needsAuth",
        +    "needsAdmin",
        +    "suggestedStorage",
        +    "evidence",
        +    "blockers",
        +    "nextQuestions"
        +  ],
        +  "type": "object"
        +}
    • Changedarchitecture_decide4 fields changed
      • addedOutput schema / properties / decision / properties / capacityRisk
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / decision / properties / domain
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / decision / properties / pmIntentDecision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "accessTopology": {
        +      "enum": [
        +        "single_device",
        +        "lan_only",
        +        "internet_ip",
        +        "public_domain",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "actions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "boundaryQuestionIds": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "coreObjects": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "defaultAssumptions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "maintenanceMode": {
        +      "enum": [
        +        "agent_assisted",
        +        "manual_files",
        +        "web_admin",
        +        "visitor_submission",
        +        "runtime_collaboration",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "mustNotUse": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "needType": {
        +      "enum": [
        +        "static_display",
        +        "personal_local_tool",
        +        "multi_user_collaboration",
        +        "content_marketing_site",
        +        "data_visualization_site",
        +        "transaction_workflow",
        +        "content_knowledge",
        +        "ai_automation",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "recommendedDeployment": {
        +      "enum": [
        +        "static_only",
        +        "local_browser_only",
        +        "static_hosting_with_agent_updates",
        +        "local_lan_server_sqlite",
        +        "cheap_vps_sqlite_by_ip",
        +        "vps_domain_https",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "route": {
        +      "enum": [
        +        "spec_compile",
        +        "spec_interrogate",
        +        "architecture_decide"
        +      ],
        +      "type": "string"
        +    },
        +    "source": {
        +      "enum": [
        +        "local_rule",
        +        "online_llm",
        +        "merged"
        +      ],
        +      "type": "string"
        +    },
        +    "states": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "strongSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "technicalShape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "usageScope": {
        +      "enum": [
        +        "self",
        +        "fixed_group",
        +        "public_audience",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "weakSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "needType",
        +    "usageScope",
        +    "maintenanceMode",
        +    "accessTopology",
        +    "technicalShape",
        +    "recommendedDeployment",
        +    "route",
        +    "confidence",
        +    "strongSignals",
        +    "weakSignals",
        +    "coreObjects",
        +    "states",
        +    "actions",
        +    "mustNotUse",
        +    "boundaryQuestionIds",
        +    "defaultAssumptions",
        +    "source"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / technicalProfile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "blockers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "evidence": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "frontendOnly": {
        +      "type": "boolean"
        +    },
        +    "needsAdmin": {
        +      "type": "boolean"
        +    },
        +    "needsAuth": {
        +      "type": "boolean"
        +    },
        +    "needsBackend": {
        +      "type": "boolean"
        +    },
        +    "nextQuestions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "example": {
        +            "type": "string"
        +          },
        +          "question": {
        +            "type": "string"
        +          },
        +          "why": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "question",
        +          "example",
        +          "why"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "suggestedStorage": {
        +      "enum": [
        +        "none",
        +        "localStorage",
        +        "indexedDB",
        +        "static_json",
        +        "json_file",
        +        "sqlite",
        +        "postgresql"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "shape",
        +    "confidence",
        +    "frontendOnly",
        +    "needsBackend",
        +    "needsAuth",
        +    "needsAdmin",
        +    "suggestedStorage",
        +    "evidence",
        +    "blockers",
        +    "nextQuestions"
        +  ],
        +  "type": "object"
        +}
    • Changedproduct_spec_assist5 fields changed
      • changedOutput schema / properties / nextAction / properties / type / enum
        Previous value: -[
        -  "answer_questions",
        -  "compile_spec",
        -  "translate_ui",
        -  "provide_debug_info",
        -  "review_launch_readiness",
        -  "choose_tool_manually"
        -]New value: +[
        +  "answer_questions",
        +  "compile_spec",
        +  "confirm_spec",
        +  "translate_ui",
        +  "provide_debug_info",
        +  "review_launch_readiness",
        +  "choose_tool_manually"
        +]
      • addedOutput schema / properties / pmIntentDecision
        Added value: +{
        +  "$ref": "#/properties/result/anyOf/0/anyOf/1/properties/pmIntentDecision"
        +}
      • addedOutput schema / properties / quickQuestions / items / properties / example
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "clarification": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "defaultAssumptions": {
        -                "additionalProperties": {
        -                  "type": "string"
        -                },
        -                "type": "object"
        -              },
        -              "missingFields": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "questions": {
        -                "items": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "defaultAssumption": {
        -                      "type": "string"
        -                    },
        -                    "field": {
        -                      "type": "string"
        -                    },
        -                    "options": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "priority": {
        -                      "type": "string"
        -                    },
        -                    "question": {
        -                      "type": "string"
        -                    },
        -                    "whyImportant": {
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "field",
        -                    "question",
        -                    "whyImportant",
        -                    "options",
        -                    "defaultAssumption",
        -                    "priority"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              }
        -            },
        -            "required": [
        -              "missingFields",
        -              "questions",
        -              "defaultAssumptions"
        -            ],
        -            "type": "object"
        -          },
        -          "readiness": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "fields": {
        -                "additionalProperties": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "present": {
        -                      "type": "boolean"
        -                    },
        -                    "value": {
        -                      "type": "string"
        -                    },
        -                    "weight": {
        -                      "type": "number"
        -                    }
        -                  },
        -                  "required": [
        -                    "weight",
        -                    "present"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "object"
        -              },
        -              "score": {
        -                "type": "number"
        -              },
        -              "status": {
        -                "enum": [
        -                  "Not Ready",
        -                  "Draft Ready",
        -                  "Build Ready"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "score",
        -              "status",
        -              "fields"
        -            ],
        -            "type": "object"
        -          },
        -          "recommendation": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "canProceed": {
        -                "type": "boolean"
        -              },
        -              "reason": {
        -                "type": "string"
        -              },
        -              "suggestedNextTool": {
        -                "enum": [
        -                  "spec_compile",
        -                  "spec_interrogate"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "canProceed",
        -              "suggestedNextTool",
        -              "reason"
        -            ],
        -            "type": "object"
        -          }
        -        },
        -        "required": [
        -          "readiness",
        -          "clarification",
        -          "recommendation"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "confidence": {
        -            "enum": [
        -              "low",
        -              "medium",
        -              "high"
        -            ],
        -            "type": "string"
        -          },
        -          "translation": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "codeHints": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "frontendTerms": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "identifiedIntent": {
        -                "type": "string"
        -              },
        -              "modificationPrompt": {
        -                "type": "string"
        -              },
        -              "originalDescription": {
        -                "type": "string"
        -              },
        -              "suggestedComponent": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "originalDescription",
        -              "identifiedIntent",
        -              "frontendTerms",
        -              "modificationPrompt",
        -              "suggestedComponent",
        -              "codeHints"
        -            ],
        -            "type": "object"
        -          }
        -        },
        -        "required": [
        -          "translation",
        -          "confidence"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canDiagnoseNow": {
        -            "type": "boolean"
        -          },
        -          "guide": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "checklist": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "commonIssues": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "knownInfo": {
        -                "additionalProperties": {},
        -                "type": "object"
        -              },
        -              "platform": {
        -                "type": "string"
        -              },
        -              "requiredInfo": {
        -                "items": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "description": {
        -                      "type": "string"
        -                    },
        -                    "field": {
        -                      "type": "string"
        -                    },
        -                    "how_to_get": {
        -                      "type": "string"
        -                    },
        -                    "priority": {
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "field",
        -                    "description",
        -                    "how_to_get",
        -                    "priority"
        -                  ],
        -                  "type": "object"
        -                },
        -                "type": "array"
        -              },
        -              "troubleshootingSteps": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              }
        -            },
        -            "required": [
        -              "platform",
        -              "requiredInfo",
        -              "knownInfo",
        -              "checklist",
        -              "commonIssues",
        -              "troubleshootingSteps"
        -            ],
        -            "type": "object"
        -          },
        -          "missingRequiredInfo": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          }
        -        },
        -        "required": [
        -          "guide",
        -          "missingRequiredInfo",
        -          "canDiagnoseNow"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "blockers": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "decision": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "aiKeyRisk": {
        -                "type": "boolean"
        -              },
        -              "canBeFrontendOnly": {
        -                "type": "boolean"
        -              },
        -              "mvpSuggestion": {
        -                "type": "string"
        -              },
        -              "needAdmin": {
        -                "type": "boolean"
        -              },
        -              "needAuth": {
        -                "type": "boolean"
        -              },
        -              "needBackend": {
        -                "type": "boolean"
        -              },
        -              "needLogging": {
        -                "type": "boolean"
        -              },
        -              "needSeparation": {
        -                "type": "boolean"
        -              },
        -              "paymentRisk": {
        -                "type": "boolean"
        -              },
        -              "productionSuggestion": {
        -                "type": "string"
        -              },
        -              "reasoning": {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              "recommendedDatabase": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "canBeFrontendOnly",
        -              "needBackend",
        -              "needSeparation",
        -              "recommendedDatabase",
        -              "needAuth",
        -              "needAdmin",
        -              "needLogging",
        -              "paymentRisk",
        -              "aiKeyRisk",
        -              "mvpSuggestion",
        -              "productionSuggestion",
        -              "reasoning"
        -            ],
        -            "type": "object"
        -          },
        -          "riskLevel": {
        -            "enum": [
        -              "low",
        -              "medium",
        -              "high"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "decision",
        -          "riskLevel",
        -          "blockers"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "clarification": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "defaultAssumptions": {
        +                "additionalProperties": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "missingFields": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "questions": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "defaultAssumption": {
        +                      "type": "string"
        +                    },
        +                    "example": {
        +                      "type": "string"
        +                    },
        +                    "field": {
        +                      "type": "string"
        +                    },
        +                    "options": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "priority": {
        +                      "type": "string"
        +                    },
        +                    "question": {
        +                      "type": "string"
        +                    },
        +                    "whyImportant": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "field",
        +                    "question",
        +                    "whyImportant",
        +                    "options",
        +                    "defaultAssumption",
        +                    "priority"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "missingFields",
        +              "questions",
        +              "defaultAssumptions"
        +            ],
        +            "type": "object"
        +          },
        +          "readiness": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fields": {
        +                "additionalProperties": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "present": {
        +                      "type": "boolean"
        +                    },
        +                    "value": {
        +                      "type": "string"
        +                    },
        +                    "weight": {
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "weight",
        +                    "present"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "object"
        +              },
        +              "score": {
        +                "type": "number"
        +              },
        +              "status": {
        +                "enum": [
        +                  "Not Ready",
        +                  "Draft Ready",
        +                  "Build Ready"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "score",
        +              "status",
        +              "fields"
        +            ],
        +            "type": "object"
        +          },
        +          "recommendation": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "canProceed": {
        +                "type": "boolean"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "suggestedNextTool": {
        +                "enum": [
        +                  "spec_compile",
        +                  "spec_interrogate"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "canProceed",
        +              "suggestedNextTool",
        +              "reason"
        +            ],
        +            "type": "object"
        +          },
        +          "technicalProfile": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "blockers": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "confidence": {
        +                "enum": [
        +                  "high",
        +                  "medium",
        +                  "low"
        +                ],
        +                "type": "string"
        +              },
        +              "evidence": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "frontendOnly": {
        +                "type": "boolean"
        +              },
        +              "needsAdmin": {
        +                "type": "boolean"
        +              },
        +              "needsAuth": {
        +                "type": "boolean"
        +              },
        +              "needsBackend": {
        +                "type": "boolean"
        +              },
        +              "nextQuestions": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "example": {
        +                      "type": "string"
        +                    },
        +                    "question": {
        +                      "type": "string"
        +                    },
        +                    "why": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "question",
        +                    "example",
        +                    "why"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "shape": {
        +                "enum": [
        +                  "static_page",
        +                  "local_storage_tool",
        +                  "local_json_import_export",
        +                  "static_json_data_page",
        +                  "light_backend_json_sqlite",
        +                  "full_backend_saas",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "suggestedStorage": {
        +                "enum": [
        +                  "none",
        +                  "localStorage",
        +                  "indexedDB",
        +                  "static_json",
        +                  "json_file",
        +                  "sqlite",
        +                  "postgresql"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "shape",
        +              "confidence",
        +              "frontendOnly",
        +              "needsBackend",
        +              "needsAuth",
        +              "needsAdmin",
        +              "suggestedStorage",
        +              "evidence",
        +              "blockers",
        +              "nextQuestions"
        +            ],
        +            "type": "object"
        +          }
        +        },
        +        "required": [
        +          "readiness",
        +          "clarification",
        +          "recommendation"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "clarification": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "defaultAssumptions": {
        +                "additionalProperties": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "missingFields": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "questions": {
        +                "items": {},
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "missingFields",
        +              "questions",
        +              "defaultAssumptions"
        +            ],
        +            "type": "object"
        +          },
        +          "confirmation": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "items": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "items"
        +            ],
        +            "type": "object"
        +          },
        +          "inputConsumption": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "confidence": {
        +                "enum": [
        +                  "high",
        +                  "medium",
        +                  "low"
        +                ],
        +                "type": "string"
        +              },
        +              "consumedAnswers": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "matchedDomain": {
        +                "type": "string"
        +              },
        +              "unusedAnswers": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "consumedAnswers",
        +              "unusedAnswers",
        +              "matchedDomain",
        +              "confidence"
        +            ],
        +            "type": "object"
        +          },
        +          "mode": {
        +            "enum": [
        +              "not_ready",
        +              "draft",
        +              "formal"
        +            ],
        +            "type": "string"
        +          },
        +          "nextAction": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "message": {
        +                "type": "string"
        +              },
        +              "type": {
        +                "enum": [
        +                  "answer_questions",
        +                  "confirm_spec",
        +                  "start_build"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "type",
        +              "message"
        +            ],
        +            "type": "object"
        +          },
        +          "pmIntentDecision": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "accessTopology": {
        +                "enum": [
        +                  "single_device",
        +                  "lan_only",
        +                  "internet_ip",
        +                  "public_domain",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "actions": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "boundaryQuestionIds": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "confidence": {
        +                "enum": [
        +                  "high",
        +                  "medium",
        +                  "low"
        +                ],
        +                "type": "string"
        +              },
        +              "coreObjects": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "defaultAssumptions": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "maintenanceMode": {
        +                "enum": [
        +                  "agent_assisted",
        +                  "manual_files",
        +                  "web_admin",
        +                  "visitor_submission",
        +                  "runtime_collaboration",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "mustNotUse": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "needType": {
        +                "enum": [
        +                  "static_display",
        +                  "personal_local_tool",
        +                  "multi_user_collaboration",
        +                  "content_marketing_site",
        +                  "data_visualization_site",
        +                  "transaction_workflow",
        +                  "content_knowledge",
        +                  "ai_automation",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "recommendedDeployment": {
        +                "enum": [
        +                  "static_only",
        +                  "local_browser_only",
        +                  "static_hosting_with_agent_updates",
        +                  "local_lan_server_sqlite",
        +                  "cheap_vps_sqlite_by_ip",
        +                  "vps_domain_https",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "route": {
        +                "enum": [
        +                  "spec_compile",
        +                  "spec_interrogate",
        +                  "architecture_decide"
        +                ],
        +                "type": "string"
        +              },
        +              "source": {
        +                "enum": [
        +                  "local_rule",
        +                  "online_llm",
        +                  "merged"
        +                ],
        +                "type": "string"
        +              },
        +              "states": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "strongSignals": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "technicalShape": {
        +                "enum": [
        +                  "static_page",
        +                  "local_storage_tool",
        +                  "local_json_import_export",
        +                  "static_json_data_page",
        +                  "light_backend_json_sqlite",
        +                  "full_backend_saas",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "usageScope": {
        +                "enum": [
        +                  "self",
        +                  "fixed_group",
        +                  "public_audience",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "weakSignals": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "needType",
        +              "usageScope",
        +              "maintenanceMode",
        +              "accessTopology",
        +              "technicalShape",
        +              "recommendedDeployment",
        +              "route",
        +              "confidence",
        +              "strongSignals",
        +              "weakSignals",
        +              "coreObjects",
        +              "states",
        +              "actions",
        +              "mustNotUse",
        +              "boundaryQuestionIds",
        +              "defaultAssumptions",
        +              "source"
        +            ],
        +            "type": "object"
        +          },
        +          "readiness": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "score": {
        +                "type": "number"
        +              },
        +              "status": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "score",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "spec": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "apiDesign": {
        +                "type": "string"
        +              },
        +              "architecture": {
        +                "type": "string"
        +              },
        +              "assumptions": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "coreFeatures": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "dataModel": {
        +                "type": "string"
        +              },
        +              "inputConsumption": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "confidence": {
        +                    "enum": [
        +                      "high",
        +                      "medium",
        +                      "low"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "consumedAnswers": {
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "matchedDomain": {
        +                    "type": "string"
        +                  },
        +                  "unusedAnswers": {
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "consumedAnswers",
        +                  "unusedAnswers",
        +                  "matchedDomain",
        +                  "confidence"
        +                ],
        +                "type": "object"
        +              },
        +              "nonGoals": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "platform": {
        +                "type": "string"
        +              },
        +              "pmIntentDecision": {
        +                "$ref": "#/properties/result/anyOf/0/anyOf/1/properties/pmIntentDecision"
        +              },
        +              "productGoal": {
        +                "type": "string"
        +              },
        +              "riskBoundaries": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "successCriteria": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "targetUser": {
        +                "type": "string"
        +              },
        +              "technicalProfile": {
        +                "$ref": "#/properties/result/anyOf/0/anyOf/0/properties/technicalProfile"
        +              }
        +            },
        +            "required": [
        +              "productGoal",
        +              "targetUser",
        +              "platform",
        +              "coreFeatures",
        +              "dataModel",
        +              "architecture",
        +              "apiDesign",
        +              "riskBoundaries",
        +              "nonGoals",
        +              "successCriteria",
        +              "assumptions"
        +            ],
        +            "type": "object"
        +          },
        +          "technicalProfile": {
        +            "$ref": "#/properties/result/anyOf/0/anyOf/0/properties/technicalProfile"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "readiness",
        +          "nextAction"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "confidence": {
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "translation": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "codeHints": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "frontendTerms": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "identifiedIntent": {
        +                "type": "string"
        +              },
        +              "modificationPrompt": {
        +                "type": "string"
        +              },
        +              "originalDescription": {
        +                "type": "string"
        +              },
        +              "suggestedComponent": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "originalDescription",
        +              "identifiedIntent",
        +              "frontendTerms",
        +              "modificationPrompt",
        +              "suggestedComponent",
        +              "codeHints"
        +            ],
        +            "type": "object"
        +          }
        +        },
        +        "required": [
        +          "translation",
        +          "confidence"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canDiagnoseNow": {
        +            "type": "boolean"
        +          },
        +          "guide": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "checklist": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "commonIssues": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "knownInfo": {
        +                "additionalProperties": {},
        +                "type": "object"
        +              },
        +              "platform": {
        +                "type": "string"
        +              },
        +              "requiredInfo": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "description": {
        +                      "type": "string"
        +                    },
        +                    "field": {
        +                      "type": "string"
        +                    },
        +                    "how_to_get": {
        +                      "type": "string"
        +                    },
        +                    "priority": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "field",
        +                    "description",
        +                    "how_to_get",
        +                    "priority"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "troubleshootingSteps": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "platform",
        +              "requiredInfo",
        +              "knownInfo",
        +              "checklist",
        +              "commonIssues",
        +              "troubleshootingSteps"
        +            ],
        +            "type": "object"
        +          },
        +          "missingRequiredInfo": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "guide",
        +          "missingRequiredInfo",
        +          "canDiagnoseNow"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "blockers": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "decision": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "aiKeyRisk": {
        +                "type": "boolean"
        +              },
        +              "canBeFrontendOnly": {
        +                "type": "boolean"
        +              },
        +              "capacityRisk": {
        +                "type": "boolean"
        +              },
        +              "domain": {
        +                "type": "string"
        +              },
        +              "mvpSuggestion": {
        +                "type": "string"
        +              },
        +              "needAdmin": {
        +                "type": "boolean"
        +              },
        +              "needAuth": {
        +                "type": "boolean"
        +              },
        +              "needBackend": {
        +                "type": "boolean"
        +              },
        +              "needLogging": {
        +                "type": "boolean"
        +              },
        +              "needSeparation": {
        +                "type": "boolean"
        +              },
        +              "paymentRisk": {
        +                "type": "boolean"
        +              },
        +              "pmIntentDecision": {
        +                "$ref": "#/properties/result/anyOf/0/anyOf/1/properties/pmIntentDecision"
        +              },
        +              "productionSuggestion": {
        +                "type": "string"
        +              },
        +              "reasoning": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "recommendedDatabase": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "canBeFrontendOnly",
        +              "needBackend",
        +              "needSeparation",
        +              "recommendedDatabase",
        +              "needAuth",
        +              "needAdmin",
        +              "needLogging",
        +              "paymentRisk",
        +              "aiKeyRisk",
        +              "mvpSuggestion",
        +              "productionSuggestion",
        +              "reasoning"
        +            ],
        +            "type": "object"
        +          },
        +          "riskLevel": {
        +            "enum": [
        +              "low",
        +              "medium",
        +              "high"
        +            ],
        +            "type": "string"
        +          },
        +          "technicalProfile": {
        +            "$ref": "#/properties/result/anyOf/0/anyOf/0/properties/technicalProfile"
        +          }
        +        },
        +        "required": [
        +          "decision",
        +          "riskLevel",
        +          "blockers"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / technicalProfile
        Added value: +{
        +  "$ref": "#/properties/result/anyOf/0/anyOf/0/properties/technicalProfile"
        +}
    • Changedspec_compile6 fields changed
      • addedOutput schema / properties / inputConsumption
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "consumedAnswers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "matchedDomain": {
        +      "type": "string"
        +    },
        +    "unusedAnswers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "consumedAnswers",
        +    "unusedAnswers",
        +    "matchedDomain",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / pmIntentDecision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "accessTopology": {
        +      "enum": [
        +        "single_device",
        +        "lan_only",
        +        "internet_ip",
        +        "public_domain",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "actions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "boundaryQuestionIds": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "coreObjects": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "defaultAssumptions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "maintenanceMode": {
        +      "enum": [
        +        "agent_assisted",
        +        "manual_files",
        +        "web_admin",
        +        "visitor_submission",
        +        "runtime_collaboration",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "mustNotUse": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "needType": {
        +      "enum": [
        +        "static_display",
        +        "personal_local_tool",
        +        "multi_user_collaboration",
        +        "content_marketing_site",
        +        "data_visualization_site",
        +        "transaction_workflow",
        +        "content_knowledge",
        +        "ai_automation",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "recommendedDeployment": {
        +      "enum": [
        +        "static_only",
        +        "local_browser_only",
        +        "static_hosting_with_agent_updates",
        +        "local_lan_server_sqlite",
        +        "cheap_vps_sqlite_by_ip",
        +        "vps_domain_https",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "route": {
        +      "enum": [
        +        "spec_compile",
        +        "spec_interrogate",
        +        "architecture_decide"
        +      ],
        +      "type": "string"
        +    },
        +    "source": {
        +      "enum": [
        +        "local_rule",
        +        "online_llm",
        +        "merged"
        +      ],
        +      "type": "string"
        +    },
        +    "states": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "strongSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "technicalShape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "usageScope": {
        +      "enum": [
        +        "self",
        +        "fixed_group",
        +        "public_audience",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "weakSignals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "needType",
        +    "usageScope",
        +    "maintenanceMode",
        +    "accessTopology",
        +    "technicalShape",
        +    "recommendedDeployment",
        +    "route",
        +    "confidence",
        +    "strongSignals",
        +    "weakSignals",
        +    "coreObjects",
        +    "states",
        +    "actions",
        +    "mustNotUse",
        +    "boundaryQuestionIds",
        +    "defaultAssumptions",
        +    "source"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / spec / properties / inputConsumption
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "consumedAnswers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "matchedDomain": {
        +      "type": "string"
        +    },
        +    "unusedAnswers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "consumedAnswers",
        +    "unusedAnswers",
        +    "matchedDomain",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / spec / properties / pmIntentDecision
        Added value: +{
        +  "$ref": "#/properties/pmIntentDecision"
        +}
      • addedOutput schema / properties / spec / properties / technicalProfile
        Added value: +{
        +  "$ref": "#/properties/technicalProfile"
        +}
      • addedOutput schema / properties / technicalProfile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "blockers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "evidence": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "frontendOnly": {
        +      "type": "boolean"
        +    },
        +    "needsAdmin": {
        +      "type": "boolean"
        +    },
        +    "needsAuth": {
        +      "type": "boolean"
        +    },
        +    "needsBackend": {
        +      "type": "boolean"
        +    },
        +    "nextQuestions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "example": {
        +            "type": "string"
        +          },
        +          "question": {
        +            "type": "string"
        +          },
        +          "why": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "question",
        +          "example",
        +          "why"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "suggestedStorage": {
        +      "enum": [
        +        "none",
        +        "localStorage",
        +        "indexedDB",
        +        "static_json",
        +        "json_file",
        +        "sqlite",
        +        "postgresql"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "shape",
        +    "confidence",
        +    "frontendOnly",
        +    "needsBackend",
        +    "needsAuth",
        +    "needsAdmin",
        +    "suggestedStorage",
        +    "evidence",
        +    "blockers",
        +    "nextQuestions"
        +  ],
        +  "type": "object"
        +}
    • Changedspec_interrogate2 fields changed
      • addedOutput schema / properties / clarification / properties / questions / items / properties / example
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / technicalProfile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "blockers": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "confidence": {
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "evidence": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "frontendOnly": {
        +      "type": "boolean"
        +    },
        +    "needsAdmin": {
        +      "type": "boolean"
        +    },
        +    "needsAuth": {
        +      "type": "boolean"
        +    },
        +    "needsBackend": {
        +      "type": "boolean"
        +    },
        +    "nextQuestions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "example": {
        +            "type": "string"
        +          },
        +          "question": {
        +            "type": "string"
        +          },
        +          "why": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "question",
        +          "example",
        +          "why"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shape": {
        +      "enum": [
        +        "static_page",
        +        "local_storage_tool",
        +        "local_json_import_export",
        +        "static_json_data_page",
        +        "light_backend_json_sqlite",
        +        "full_backend_saas",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "suggestedStorage": {
        +      "enum": [
        +        "none",
        +        "localStorage",
        +        "indexedDB",
        +        "static_json",
        +        "json_file",
        +        "sqlite",
        +        "postgresql"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "shape",
        +    "confidence",
        +    "frontendOnly",
        +    "needsBackend",
        +    "needsAuth",
        +    "needsAdmin",
        +    "suggestedStorage",
        +    "evidence",
        +    "blockers",
        +    "nextQuestions"
        +  ],
        +  "type": "object"
        +}
  2. 7 tool updatesv1.0.0
    • First observedacceptance_generate
    • First observedarchitecture_decide
    • First observeddebug_guide
    • First observedproduct_spec_assist
    • First observedspec_compile
    • First observedspec_interrogate
    • First observedui_translate

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: acceptance generation, architecture decision, debugging, unified routing, spec compilation, idea interrogation, and UI translation. No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent noun_verb pattern (e.g., acceptance_generate, architecture_decide, ui_translate), making it easy to predict tool behavior from the name.

Tool Count5/5

With 7 tools, the set is well-scoped for a product specification assistant. Each tool serves a specific, necessary role without unnecessary bloat or duplication.

Completeness4/5

The tools cover the core workflow from idea analysis (spec_interrogate) to spec compilation, acceptance criteria generation, architecture decisions, and UI translation. Missing are update/delete operations for specs, but the set is still comprehensive for an assistant.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/georgelue0321-vibe/product-spec-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server