← MCP Security Catalog

decisionnode/DecisionNode 0.6.0

npm · decisionnode · latest release

Scan failed
Security result
9
Observed tools
43
Version rating
100
Change risk

Independent inventory

Observed 2026-08-15T19:20:40.238Z using mcpSecurity-inventory. Protocol 2025-06-18.

ToolCategoryRisk
add_decision**Call this IMMEDIATELY** when user says phrases like: "Let's use...", "From now on...", "Always do...", "Never do...", "I prefer...", "The standard is...", "We should always...", or confirms ANY technical approach. Also call when: (1) A design pattern is established, (2) An architectural choice is made, (3) Coding standards are discussed, (4) UI/UX conventions are agreed, (5) Technology stack decisions happen. Capture decisions DURING the conversation, not after. Focus on WHY, not just WHAT.
Input schema
{
  "type": "object",
  "properties": {
    "scope": {
      "type": "string",
      "description": "Category: UI, Backend, API, Architecture, Database, Security, Testing, DevOps, Styling, Performance"
    },
    "decision": {
      "type": "string",
      "description": "Clear statement of what was decided (be specific and actionable)"
    },
    "rationale": {
      "type": "string",
      "description": "Why this decision was made - this is crucial for future context"
    },
    "constraints": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Specific rules or requirements to follow"
    },
    "global": {
      "type": "boolean",
      "description": "Set to true to create a global decision that applies across ALL projects (e.g., \"always use TypeScript strict mode\", \"never commit .env files\")"
    },
    "force": {
      "type": "boolean",
      "description": "Set to true to skip conflict detection and add the decision even if similar ones exist. Use after reviewing the conflicts returned by a previous add_decision call."
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "scope",
    "decision",
    "rationale",
    "constraints",
    "project"
  ]
}
delete_decisionPermanently delete a decision. Only use when a decision was created in error. For outdated decisions, prefer update_decision with status=deprecated to preserve history.
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Decision ID to delete"
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "id",
    "project"
  ]
}
get_decisionGet full details of a specific decision by ID. Use this after search_decisions returns relevant results to get complete context including rationale and constraints.
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Decision ID (e.g., ui-001)"
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "id",
    "project"
  ]
}
get_historyView the activity log of recent decision changes. Use this to understand what decisions were recently added or modified.
Input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Number of entries (default: 10)"
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "limit",
    "project"
  ]
}
get_statusGet project decision status overview including total count and last activity. Use this for a quick health check of the decision store.
Input schema
{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "project"
  ]
}
list_decisionsList all recorded decisions for the project. Use this when you need a complete overview of project conventions, or when starting work on a new feature area to understand existing patterns.
Input schema
{
  "type": "object",
  "properties": {
    "scope": {
      "type": "string",
      "description": "Filter by scope (e.g., UI, Backend, API, Architecture)"
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "project"
  ]
}
list_projects**Call this FIRST if unsure which project to use.** In monorepos or multi-project workspaces, this lists all projects with decisions. Match the returned project name to the subfolder in the user's active file path. Example: if user is editing ".../my-app/src/component.tsx", look for project "my-app" in the results.
Input schema
{
  "type": "object",
  "properties": {
    "verbose": {
      "type": "boolean",
      "description": "Include detailed statistics (default: false)"
    }
  }
}
search_decisions**MANDATORY: Call this FIRST before ANY code changes.** When user asks you to: add a feature, modify code, fix a bug, implement something, refactor, style UI, or make ANY technical choice — you MUST call this tool FIRST to check for existing conventions. Skipping this causes inconsistency and wasted rework. Query with what you're about to work on: "button styling", "error handling", "API design", "authentication", "database schema", "component structure". If no decisions exist, proceed freely; if decisions exist, FOLLOW them.
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Natural language query describing what you are about to work on (e.g., \"button styling\", \"API error handling\", \"database connection\")"
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of results (default: 3)"
    },
    "project": {
      "type": "string",
      "description": "REQUIRED: The project folder name. Extract this from the user's active file path (e.g., if path is \".../decisionnode-marketplace/src/...\", use \"decisionnode-marketplace\"). Call list_projects first if unsure."
    }
  },
  "required": [
    "query",
    "project"
  ]
}
update_decisionUpdate an existing decision when requirements change or the approach evolves. Use this instead of creating duplicate decisions.
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Decision ID to update"
    },
    "decision": {
      "type": "string",
      "description": "Updated decision text"
    },
    "rationale": {
      "type": "string",
      "description": "Updated rationale"
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "deprecated"
      ],
      "description": "Set to \"deprecated\" to hide from search (keeps for history), or \"active\" to re-enable. Only change when the user explicitly asks."
    },
    "constraints": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Updated list of constraints"
    },
    "project": {
      "type": "string",
      "description": "The workspace folder name"
    }
  },
  "required": [
    "id",
    "decision",
    "rationale",
    "constraints",
    "project"
  ]
}

Resources 0

Resource templates 0

Prompts 0

Changes from previous version

Compared with initial baseline using full_baseline.

RiskChangeSubject
No material changes recorded.

Confirmed vulnerabilities

SeverityFindingAdvisory
No confirmed vulnerability is published for this version.

Provenance

Artifact SHA-256: 867a31e5d6d95340bd6527bdcefc71fefac6764d7e04744aff50d2bbec4a1aad

Scanner: mcp-proof-engine 0.1.0.

Let’s talk about MCP security.

Share your details and our security team will contact you.