Skip to main content
Glama
AIR MCP Server

AIR MCP Server

by VericyIO

Save a project choice

air_record_project_decision
Destructive

Records a developer's stated decision to mark a project risk-assessment topic not applicable or accept a missing control, saving the reason and scan context for later reviews.

Instructions

Save a developer choice on the project, in the person's own words. Ask them first. Use not_applicable when the whole topic (themeId) does not apply to this system: later scans keep that topic and its gaps quiet while it is raised on the same documents and seriousness, and bring it back when the scan cites new text, the topic grows more serious, or six months have passed. Use accept_gap when the topic applies but the person accepts one missing control (controlId required): the gap stays listed with the saved sentence beside it. Pass the assessmentPid the person decided on; the choice remembers that scan's documents. The scan the choice is recorded on does not judge it; later scans do. A later choice for the same theme or control replaces the earlier one. Requires projects:write.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectPid": "<projectPid>",
      "assessmentPid": "<assessmentPid>",
      "choice": "<choice>",
      "themeId": "<themeId>",
      "reason": "<reason>"
    },
    "name": "air_record_project_decision"
  }
}

Input Schema

NameRequiredDescriptionDefault
choiceYes
reasonYes
themeIdYes
controlIdNo
projectPidYes
assessmentPidYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.0.2

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the destructiveHint=true and openWorldHint=true annotations by spelling out downstream consequences: suppressed topics stay quiet on the same documents until new text, increased severity, or six months elapse, and the recording scan does not judge its own choice while later scans do. It also discloses the replacement semantics of a later choice and the projects:write permission requirement.

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?

Front-loaded with purpose, and nearly every clause conveys operational detail about persistence or permissions. The not_applicable sentence is long and grammatically tangled ('while it is raised on the same documents and seriousness'), which costs some readability.

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?

For a 6-parameter mutation with no output schema, it covers the essentials: auth scope, replacement rules, post-save scan behavior, and conditional parameter requirements. It does not say what the tool returns on success or how failures surface, which is a minor gap given the absence of an output schema.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: choice values are defined, controlId is flagged as required only for accept_gap (a conditional requirement the schema's required list does not express), assessmentPid is explained as pinning the choice to that scan's documents, and reason is characterized as the person's own words. This meaningfully exceeds the bare schema types.

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?

Opens with a specific verb and resource: 'Save a developer choice on the project,' and immediately explains that the reason must be captured 'in the person's own words.' It does not explicitly name the read counterpart air_list_project_decisions, so sibling differentiation is only implied through the save-vs-list relationship.

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?

Gives concrete selection rules for each enum value: not_applicable 'when the whole topic does not apply,' accept_gap 'when the topic applies but the person accepts one missing control.' The instruction 'Ask them first' is a real procedural constraint that shapes use. It stops short of saying when to call this instead of related tools such as air_submit_fact_answers.

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