Skip to main content
Glama

Record usefulness of your original answer

research_feedback_submit
Idempotent

Original-caller private opinion on the exact delivered ordinary research answer. Requires its private bearer capability; a public report ID or link grants no authority. First choice is retained, exact retries are idempotent. Silence is no response. No research, source fetching, revision execution, refunds, signing or payments.

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": {
      "choice": "<choice>",
      "token": "<token>"
    },
    "name": "research_feedback_submit"
  }
}

Input Schema

NameRequiredDescriptionDefault
tokenYesPrivate capability received with your original completed answer. Keep it out of reports, prompts to Keryx research, public links and exports.
choiceYesYour opinion of this exact delivered answer: useful, revise or reject.
reasonNoOptional private explanation of your choice, up to 1000 characters; defaults to empty.

Output Schema

NameRequiredDescriptionDefault
runIdYes
formatYes
feedbackYes
executionYes
deliveredDigestYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / choice / description
      Added value: +"Your opinion of this exact delivered answer: useful, revise or reject."
    • addedInput schema / properties / reason / description
      Added value: +"Optional private explanation of your choice, up to 1000 characters; defaults to empty."
    • changedOutput schema / properties / feedback / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "choice": {
      -        "enum": [
      -          "useful",
      -          "revise",
      -          "reject"
      -        ],
      -        "type": "string"
      -      },
      -      "deliveredDigest": {
      -        "$ref": "#/properties/deliveredDigest"
      -      },
      -      "format": {
      -        "const": "keryx-requester-feedback-v1",
      -        "type": "string"
      -      },
      -      "observations": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "costBasis": {
      -            "const": "partial-captured-policy-estimate",
      -            "type": "string"
      -          },
      -          "durationBasis": {
      -            "const": "recorded-orchestrator-completion",
      -            "type": "string"
      -          },
      -          "excluded": {
      -            "const": "search-infrastructure-gas-and-unrecorded-provider-charges",
      -            "type": "string"
      -          },
      -          "failedCalls": {
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "format": {
      -            "const": "keryx-recorded-job-observations-v1",
      -            "type": "string"
      -          },
      -          "generationDurationMs": {
      -            "anyOf": [
      -              {
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "invoice": {
      -            "type": "null"
      -          },
      -          "missingUsageCalls": {
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "modelCostUsd": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "lower": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "upper": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "lower",
      -                  "upper"
      -                ],
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "pendingCalls": {
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "profit": {
      -            "type": "null"
      -          },
      -          "recordedCalls": {
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "unpricedUsageRecords": {
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "usageRecords": {
      -            "minimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "format",
      -          "generationDurationMs",
      -          "durationBasis",
      -          "modelCostUsd",
      -          "costBasis",
      -          "recordedCalls",
      -          "failedCalls",
      -          "pendingCalls",
      -          "missingUsageCalls",
      -          "unpricedUsageRecords",
      -          "usageRecords",
      -          "excluded",
      -          "invoice",
      -          "profit"
      -        ],
      -        "type": "object"
      -      },
      -      "reason": {
      -        "default": "",
      -        "maxLength": 1000,
      -        "type": "string"
      -      },
      -      "runId": {
      -        "$ref": "#/properties/runId"
      -      },
      -      "submittedAt": {
      -        "format": "date-time",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "choice",
      -      "format",
      -      "runId",
      -      "deliveredDigest",
      -      "submittedAt",
      -      "observations"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "choice": {
      +        "description": "Your opinion of this exact delivered answer: useful, revise or reject.",
      +        "enum": [
      +          "useful",
      +          "revise",
      +          "reject"
      +        ],
      +        "type": "string"
      +      },
      +      "deliveredDigest": {
      +        "$ref": "#/properties/deliveredDigest"
      +      },
      +      "format": {
      +        "const": "keryx-requester-feedback-v1",
      +        "type": "string"
      +      },
      +      "observations": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "costBasis": {
      +            "const": "partial-captured-policy-estimate",
      +            "type": "string"
      +          },
      +          "durationBasis": {
      +            "const": "recorded-orchestrator-completion",
      +            "type": "string"
      +          },
      +          "excluded": {
      +            "const": "search-infrastructure-gas-and-unrecorded-provider-charges",
      +            "type": "string"
      +          },
      +          "failedCalls": {
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "format": {
      +            "const": "keryx-recorded-job-observations-v1",
      +            "type": "string"
      +          },
      +          "generationDurationMs": {
      +            "anyOf": [
      +              {
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "invoice": {
      +            "type": "null"
      +          },
      +          "missingUsageCalls": {
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "modelCostUsd": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "lower": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "upper": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "lower",
      +                  "upper"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "pendingCalls": {
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "profit": {
      +            "type": "null"
      +          },
      +          "recordedCalls": {
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "unpricedUsageRecords": {
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "usageRecords": {
      +            "minimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "format",
      +          "generationDurationMs",
      +          "durationBasis",
      +          "modelCostUsd",
      +          "costBasis",
      +          "recordedCalls",
      +          "failedCalls",
      +          "pendingCalls",
      +          "missingUsageCalls",
      +          "unpricedUsageRecords",
      +          "usageRecords",
      +          "excluded",
      +          "invoice",
      +          "profit"
      +        ],
      +        "type": "object"
      +      },
      +      "reason": {
      +        "default": "",
      +        "description": "Optional private explanation of your choice, up to 1000 characters; defaults to empty.",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "runId": {
      +        "$ref": "#/properties/runId"
      +      },
      +      "submittedAt": {
      +        "format": "date-time",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "choice",
      +      "format",
      +      "runId",
      +      "deliveredDigest",
      +      "submittedAt",
      +      "observations"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Added

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark this as non-read-only, idempotent, non-destructive and open-world. The description adds critical behavior beyond those flags: the token is a private capability, public IDs or links confer no authority, the first choice is retained, exact retries are idempotent, and silence yields no response.

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, followed by authority, idempotency, retention and exclusion constraints in short sentences. A few phrases are jargon-heavy or terse, such as 'ordinary research answer' and 'Silence is no response', but there is little wasted content.

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 three-parameter feedback submission with full schema coverage, annotations and an output schema, the description supplies the missing operational context: caller identity and token authority, idempotency, first-choice retention and scope exclusions. Return-value detail is unnecessary because an output schema exists.

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 coverage is 100%, so token, choice and reason are already documented in the input schema. The description still adds authority semantics for token, since a public report ID or link is insufficient, and retention semantics for choice, since the first choice is retained, but it does not elaborate reason beyond the schema.

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 first sentence identifies a private opinion on the exact delivered ordinary research answer, which maps clearly to submitting feedback and distinguishes it from a read-side tool. It is specific about the subject, but it does not use a direct verb like 'submit' or name the sibling research_feedback_read, so it is clear rather than maximally differentiated.

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?

It tells the caller to use this only with the private bearer capability received with the original answer and explicitly states that public report IDs or links grant no authority. It also rules out research, fetching, revisions, refunds, signing and payments, though it never names research_feedback_read as the read-side alternative.

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.