Skip to main content
Glama

Helvabase — Governed response dossiers

helvabase_submit_draft

Idempotent

Persist a complete draft authored in the customer's LLM. Use helvabase_read_answer_brief first. Contract 1.0.2 accepts helvabase.client_draft.v2: each section has answers with id, exact target, text, citationMarkers, coverage and limitations. The server resolves questions from the saved analysis or form; include dossierRevision for field targets. Write an actual answer to the question before saving, retaining limitations; quotations alone are sufficient only when requested. v1 section drafts remain readable and accepted. Reconnect if an older schema is cached. Use exact current context and analysis revisions, all returned section IDs, source markers in factual sentences, and explicit unsupportedClaims. If a section is translated from cited evidence, declare translation {sourceLanguage,targetLanguage,method:'client_declared'}; lexical mismatch then requires human review and is never auto-covered. Declare nonAssertiveSentences only for exact headings, framing, gap reports or source-conflict reports; they remain visible for human review and are not treated as supplier claims. The server validates references and deterministic support; it never accepts submitted approvals. Changing content invalidates prior review. Returns a compact receipt with sentence diagnostics and original revision hashes, omitting the full catalog and repeated source excerpts. payloadHash covers the full stored artifact; read it with helvabase_jobs(jobId=outputJobId) only when needed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
basisYes
sectionsYes
projectIdYesHelvabase project/mapping ID returned by list or create dossier, never a local path.
schemaVersionYes
idempotencyKeyYes
dossierRevisionNo
analysisRevisionYes
expectedRevisionYes
declaredProvenanceYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / dossierRevision
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "outputJobId": {
      +      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +      "type": "string"
      +    },
      +    "payloadHash": {
      +      "pattern": "^[a-f0-9]{64}$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "outputJobId",
      +    "payloadHash"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / schemaVersion / const
      Removed value: -"helvabase.client_draft.v1"
    • addedInput schema / properties / schemaVersion / enum
      Added value: +[
      +  "helvabase.client_draft.v1",
      +  "helvabase.client_draft.v2"
      +]
    • removedInput schema / properties / sections / items / additionalProperties
      Removed value: -false
    • addedInput schema / properties / sections / items / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "citationMarkers": {
      +        "items": {
      +          "pattern": "^S[1-9][0-9]{0,5}$",
      +          "type": "string"
      +        },
      +        "maxItems": 64,
      +        "type": "array"
      +      },
      +      "nonAssertiveSentences": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "kind": {
      +              "enum": [
      +                "heading",
      +                "framing",
      +                "gap_report",
      +                "source_conflict_report"
      +              ],
      +              "type": "string"
      +            },
      +            "text": {
      +              "maxLength": 4000,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "text",
      +            "kind"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 50,
      +        "type": "array"
      +      },
      +      "requirementIds": {
      +        "items": {
      +          "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +          "type": "string"
      +        },
      +        "maxItems": 500,
      +        "type": "array"
      +      },
      +      "sectionId": {
      +        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +        "type": "string"
      +      },
      +      "text": {
      +        "maxLength": 20000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "translation": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "method": {
      +            "const": "client_declared",
      +            "type": "string"
      +          },
      +          "sourceLanguage": {
      +            "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +            "type": "string"
      +          },
      +          "targetLanguage": {
      +            "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "sourceLanguage",
      +          "targetLanguage",
      +          "method"
      +        ],
      +        "type": "object"
      +      },
      +      "unsupportedClaims": {
      +        "items": {
      +          "maxLength": 2000,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 50,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "sectionId",
      +      "requirementIds",
      +      "text",
      +      "citationMarkers",
      +      "unsupportedClaims"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "answers": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "citationMarkers": {
      +              "items": {
      +                "pattern": "^S[1-9][0-9]{0,5}$",
      +                "type": "string"
      +              },
      +              "maxItems": 64,
      +              "type": "array"
      +            },
      +            "coverage": {
      +              "enum": [
      +                "answered",
      +                "partial",
      +                "unanswered"
      +              ],
      +              "type": "string"
      +            },
      +            "id": {
      +              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +              "type": "string"
      +            },
      +            "limitations": {
      +              "items": {
      +                "maxLength": 2000,
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "maxItems": 10,
      +              "type": "array"
      +            },
      +            "nonAssertiveSentences": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "kind": {
      +                    "enum": [
      +                      "heading",
      +                      "framing",
      +                      "gap_report",
      +                      "source_conflict_report"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "text": {
      +                    "maxLength": 4000,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "text",
      +                  "kind"
      +                ],
      +                "type": "object"
      +              },
      +              "maxItems": 50,
      +              "type": "array"
      +            },
      +            "target": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +                  "type": "string"
      +                },
      +                "kind": {
      +                  "enum": [
      +                    "requirement",
      +                    "field"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "kind",
      +                "id"
      +              ],
      +              "type": "object"
      +            },
      +            "text": {
      +              "maxLength": 20000,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "translation": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "method": {
      +                  "const": "client_declared",
      +                  "type": "string"
      +                },
      +                "sourceLanguage": {
      +                  "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +                  "type": "string"
      +                },
      +                "targetLanguage": {
      +                  "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "sourceLanguage",
      +                "targetLanguage",
      +                "method"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "target",
      +            "text",
      +            "citationMarkers",
      +            "coverage",
      +            "limitations"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 500,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "sectionId": {
      +        "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "sectionId",
      +      "answers"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / sections / items / properties
      Removed value: -{
      -  "citationMarkers": {
      -    "items": {
      -      "pattern": "^S[1-9][0-9]{0,5}$",
      -      "type": "string"
      -    },
      -    "maxItems": 64,
      -    "type": "array"
      -  },
      -  "nonAssertiveSentences": {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "kind": {
      -          "enum": [
      -            "heading",
      -            "framing",
      -            "gap_report",
      -            "source_conflict_report"
      -          ],
      -          "type": "string"
      -        },
      -        "text": {
      -          "maxLength": 4000,
      -          "minLength": 1,
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "text",
      -        "kind"
      -      ],
      -      "type": "object"
      -    },
      -    "maxItems": 50,
      -    "type": "array"
      -  },
      -  "requirementIds": {
      -    "items": {
      -      "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      -      "type": "string"
      -    },
      -    "maxItems": 500,
      -    "type": "array"
      -  },
      -  "sectionId": {
      -    "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$",
      -    "type": "string"
      -  },
      -  "text": {
      -    "maxLength": 20000,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "translation": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "method": {
      -        "const": "client_declared",
      -        "type": "string"
      -      },
      -      "sourceLanguage": {
      -        "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      -        "type": "string"
      -      },
      -      "targetLanguage": {
      -        "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "sourceLanguage",
      -      "targetLanguage",
      -      "method"
      -    ],
      -    "type": "object"
      -  },
      -  "unsupportedClaims": {
      -    "items": {
      -      "maxLength": 2000,
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "maxItems": 50,
      -    "type": "array"
      -  }
      -}
    • removedInput schema / properties / sections / items / required
      Removed value: -[
      -  "sectionId",
      -  "requirementIds",
      -  "text",
      -  "citationMarkers",
      -  "unsupportedClaims"
      -]
    • removedInput schema / properties / sections / items / type
      Removed value: -"object"
  2. Changed2 schema fields changed
    • addedInput schema / properties / sections / items / properties / nonAssertiveSentences
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "kind": {
      +        "enum": [
      +          "heading",
      +          "framing",
      +          "gap_report",
      +          "source_conflict_report"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "maxLength": 4000,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • addedInput schema / properties / sections / items / properties / translation
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "method": {
      +      "const": "client_declared",
      +      "type": "string"
      +    },
      +    "sourceLanguage": {
      +      "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +      "type": "string"
      +    },
      +    "targetLanguage": {
      +      "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "sourceLanguage",
      +    "targetLanguage",
      +    "method"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

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

With only annotations covering the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description adds substantial behavioral detail: the server resolves questions, validates references and deterministic support, never accepts submitted approvals, rejects lexical-mismatch translations without human review, and invalidates prior review when content changes. It also describes the return value (compact receipt with sentence diagnostics and revision hashes). No contradiction with annotations.

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 purpose is front-loaded in the first sentence, and the dense sentences generally each carry a distinct rule (validation, translation, nonAssertiveSentences, invalidation, return shape). It is a run-on wall of jargon with little whitespace, but there is minimal pure filler.

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

Completeness5/5

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

For a 9-parameter, 8-required mutation tool with no output schema, the description is impressively complete: it covers the write contract, schema versions, revision/invalidation semantics, translation and non-assertive handling, and the return shape including how to read payloadHash via helvabase_jobs. An agent has what it needs to call this correctly.

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

Parameters4/5

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

Schema description coverage is only 11% (projectId alone), so the description must carry parameter meaning, and it does: it explains v2 section answers (id, target, text, citationMarkers, coverage, limitations), dossierRevision for field targets, the translation block, nonAssertiveSentences kinds, and unsupportedClaims. It leaves declaredProvenance and idempotencyKey implicit, and relies on the schema for many enum/format details.

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?

States a specific verb+resource: persist a complete draft authored in the customer's LLM, with a clear contract version (1.0.2) and accepted schema (client_draft.v2). It distinguishes its role as the write/persist step from read siblings, though it does not explicitly contrast with close neighbors like check_draft or draft_checks.

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 a clear prerequisite ('Use helvabase_read_answer_brief first') and operational conditions (reconnect if an older schema is cached; v1 drafts remain readable and accepted). It provides context for when to submit but does not spell out when NOT to use this tool versus alternatives such as check_draft.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.