arcade-mcp/examples/mcp_servers/tool_metadata/README.md
2026-02-17 14:31:45 -08:00

2.7 KiB

Tool Metadata Example

This example demonstrates how to use tool metadata to describe your tools' classification, behavior, and custom properties.

What is Tool Metadata?

Tool metadata provides structured information about what a tool does:

Field Purpose Used For
Classification What type of service the tool interfaces with Tool discovery & selection boosting
Behavior What effects the tool has Policy decisions, MCP annotations
Extras Arbitrary key/values Custom logic (routing, rate limits, etc.)

Classification

Describes what type of service the tool interfaces with.

classification=Classification(
    service_domains=[ServiceDomain.EMAIL],  # What type of service?
)

Service Domains (what type of service): EMAIL, CRM, MESSAGING, DOCUMENTS, CLOUD_STORAGE, SOURCE_CODE, PAYMENTS, SOCIAL_MEDIA, etc.

For tools with no external service (open_world=False), classification is None.

Behavior

Describes the tool's effects and maps to MCP annotations.

behavior=Behavior(
    operations=[Operation.CREATE],  # What effect? READ, CREATE, UPDATE, DELETE, OPAQUE
    read_only=False,                # Does it only read data?
    destructive=False,              # Can it cause irreversible data loss?
    idempotent=True,                # Are repeated calls safe?
    open_world=False,               # Does it interact with external systems?
)

These values become MCP annotations that clients like Claude can use to make informed decisions.

Extras

Arbitrary key/values for custom logic that don't affect tool selection.

extras={
    "billing_tier": "free",
    "max_requests_per_minute": 100,
    "data_classification": "internal",
}

Use extras for: IDP routing, feature flags, rate limiting hints, compliance metadata.

Running the Example

cd examples/mcp_servers/tool_metadata

# Install dependencies
uv sync

# Run with stdio transport
uv run src/tool_metadata/server.py stdio

# Or run with HTTP transport
uv run src/tool_metadata/server.py http

Tools in This Example

Tool Operations Behavior Notes
reverse_text READ read_only, idempotent Pure computation
search_notes READ read_only, idempotent Query data
create_note CREATE not idempotent Creates new data
update_note UPDATE idempotent Modifies existing data
delete_note DELETE destructive, idempotent Removes data permanently
get_notes_stats READ read_only Has extras for custom metadata
upsert_note CREATE, UPDATE idempotent Multi-operation compound action