﻿---
title: "Declare Tools with their defined fields"
description: "A Tool has a non-empty name and an inputSchema, and accepts only the properties of the Section 9.1 table, each with its defined type. The execution object accepts only taskSupport."
source: "https://mcpdesc.org/docs/rules/0.9.0-rc.3/mcpdesc/tool-members/"
---

A Tool has a non-empty name and an inputSchema, and accepts only the properties of the Section 9.1 table, each with its defined type. The execution object accepts only taskSupport.

## Requirement

A Tool Object has its required fields, defined property types, and no unknown properties; so does its Execution Object.

## Details

**Rule ID:** `mcpdesc.tool.members`  
**Owner:** mcpdesc  
**Surface:** Tool, Execution  
**Kind:** structural  
**Requirement level:** must  
**Protocol versions:** independent of the MCP protocol version  
**Document schema locations:** `#/$defs/tool`, `#/$defs/execution`  
**Status:** internal · **Enforcement:** internal

## Required by

* **MCP Description 0.9.0, Sections 9.1 and 9.7**  
  * 9\. Tools: [req-tool-fields](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tools#req-tool-fields)
  * 1. Tools: [req-tool-input-schema-required](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tools#req-tool-input-schema-required)
  * 1. Tools: [req-execution-fields](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tools#req-execution-fields)
  * 1. Elicitation Declarations: [req-elicitations-non-empty](https://mcpdesc.org/docs/specification/0.9.0-rc.3/elicitation#req-elicitations-non-empty)
  * 1. Tags: [req-entity-tags-shape](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tags#req-entity-tags-shape)
  * 1. Tags: [req-entity-tags-unique](https://mcpdesc.org/docs/specification/0.9.0-rc.3/tags#req-entity-tags-unique)

## Examples

### Invalid example

Source: [expected-invalid/empty-ordinary-nested-collections.json](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/fixtures/expected-invalid/empty-ordinary-nested-collections.json) · Selected: `/tools/0/elicitations`

```json
[]
```

### Invalid example

Source: [expected-invalid/missing-tool-input-schema.json](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/fixtures/expected-invalid/missing-tool-input-schema.json) · Selected: `/tools/0`

```json
{
  "name": "missing_schema"
}
```

## Rule Source Code

[tool.yaml](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft/validation/rules/tool.yaml) at immutable tag [v0.9.0-rc.3](https://github.com/mcpdesc/mcpdesc-specification/blob/v0.9.0-rc.3/spec/draft).
