MCP Tool Contract Linter

Checks a supplied tool name, description, JSON input/output schema, security declarations, and action annotations. It performs bounded local analysis only and never contacts the declared server.

Use when

  • An MCP tool contract needs a bounded pre-review lint pass.
  • Names, schemas, security declarations, or action hints may be ambiguous.

Do not use when

  • Runtime behavior or host compatibility must be measured empirically.
  • The contract contains secrets or exceeds the published schema bounds.

Invocation contract

HTTP
/v1/tools/mcp-tool-contract-linter
Version
0.1.0
Mode
lookup
Idempotency
not required
Retention
The supplied contract is validated and linted in memory. Raw schemas are not retained.
Tested with
MCP tool contracts, JSON Schema 2020-12

Positive and negative examples

{
  "input": {
    "name": "lookup_contract",
    "description": "Look up one known contract without changing external state.",
    "input_schema": {
      "type": "object",
      "properties": {
        "contract_id": {
          "type": "string"
        }
      },
      "required": [
        "contract_id"
      ],
      "additionalProperties": false
    },
    "output_schema": {
      "type": "object",
      "properties": {
        "found": {
          "type": "boolean"
        }
      },
      "required": [
        "found"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true,
      "destructiveHint": false,
      "openWorldHint": false,
      "idempotentHint": true
    },
    "security_schemes": [
      "noauth"
    ]
  },
  "output": {
    "valid": true,
    "finding_count": 0,
    "checked_rules": 9,
    "findings": []
  },
  "negative": [
    {
      "scenario": "Runtime behavior or host compatibility must be measured empirically.",
      "expected_error": "NOT_COVERED",
      "charged": false
    }
  ]
}

Deterministic errors

CodeRetryChargedRecovery
INVALID_INPUTfalsefalseCorrect the request to match input_schema.
NOT_COVEREDfalsefalseCheck dataset scope or submit a capability request.
TOOL_PAUSEDtruefalseWait for the operator to resume the tool.
RATE_LIMITEDtruefalseRetry after the response Retry-After interval.
DEPENDENCY_UNAVAILABLEtruefalseRetry with the same idempotency identity.

Full machine manifest

The HTTP, OpenAPI, MCP, llms.txt, and ARD descriptions are generated from this same registry record.

Open JSON manifest →