Skip to main content
Glama
toddstoffel

FairCom MCP Server

by toddstoffel

MCP Server (FairCom Proof of Concept)

CAUTION

Independent proof of concept: This project was created independently by Todd Stoffel for experimentation with FairCom products. It is not an official FairCom project and is not affiliated with, sponsored by, endorsed by, or supported by FairCom.

IMPORTANT

Developers and maintainers: useBUILD.md for build, packaging, and release instructions. This README is product and usage focused.

Connect AI assistants and LLMs to data backends with explicit write controls, Linux packaging, and operational tooling. The proof-of-concept adapter included here targets FairCom databases and their JSON APIs.

Proof-of-Concept Scope

The MCP transport, session handling, policy controls, write-confirmation workflow, rate limiting, and observability are not inherently dependent on FairCom software. FairCom is the reference backend used to demonstrate those capabilities in this repository.

Adapting the project to another database or service primarily means replacing the backend adapter and its tool-specific mappings while retaining the MCP server and operational layers. The implementation as currently distributed includes a FairCom adapter, so its FairCom-specific tools require access to the corresponding FairCom APIs.

Current release: v${PROJECT_VERSION}. The install examples and release automation in this repository are aligned to this version.

Set the release version once per shell session so the examples stay aligned with the package source of truth:

PROJECT_VERSION="$(make version)"
┌─────────────────────────────────────────────────────────────┐
│  Your AI Assistant (Claude, Copilot, etc.)                  │
└────────────────────┬────────────────────────────────────────┘
                     │ MCP Protocol
                     │ (HTTP + JSON-RPC)
┌────────────────────▼────────────────────────────────────────┐
│  FairCom MCP Server                                         │
│  • Session management                                       │
│  • Write safety enforcement (confirm_write=true)            │
│  • Tool exposure control                                    │
│  • Rate limiting, observability                             │
└────────────────────┬────────────────────────────────────────┘
                     │ FairCom JSON API
                     │ (HTTP REST)
┌────────────────────▼────────────────────────────────────────┐
│  FairCom Database                                           │
│  (Edge, DB, RTG, ISAM, MQ)                                  │
└─────────────────────────────────────────────────────────────┘

Why FairCom MCP?

  • Open source: Apache 2.0

  • Operationally ready: systemd service, log rotation, health checks

  • Safe by default: explicit write confirmation and tool allowlisting

  • Broad compatibility: works with Edge, DB, RTG, ISAM, and MQ

  • MCP-focused: intended for Claude, Copilot, and local LLM workflows

Related MCP server: UOFastMCP

Safe Write Workflow

Use the write controls to make destructive operations predictable and reviewable.

  1. Start with a read-only query to confirm the target data.

  2. Preview writes with dry_run=True before applying anything.

  3. Review the preview output, especially the scoped WHERE clause and row impact.

  4. Apply the change only with confirm_write=True and dry_run=False.

  5. Check the audit trail and metrics endpoints after execution.

# Preview a deletion without changing data
preview = faircom_mcp.sql_execute(
    "DELETE FROM staging_orders WHERE created_at < '2026-01-01'",
    dry_run=True,
)

if preview["would_succeed"]:
    # Only after review, run the real write
    faircom_mcp.sql_execute(
        "DELETE FROM staging_orders WHERE created_at < '2026-01-01'",
        confirm_write=True,
        dry_run=False,
    )

For production use, prefer an operator or admin policy bundle and keep dry-runs in the loop for high-risk statements such as DELETE, UPDATE, or DROP.

Use Cases

1. Business Intelligence & Reporting

Let users ask natural-language questions about FairCom data.

Example: "What were our top 5 products by revenue last quarter?"

The AI assistant translates this to SQL, queries FairCom, and summarizes results with visualizations.

# FairCom MCP exposes:
# sql_query(statement, params?) → fetch data
# list_tables(name_like?) → discover schema
# list_table_columns(table_name) → understand structure

2. Data Integration & ETL

Automate data pipelines that read/write to FairCom.

Example: Sync customer data from SaaS → FairCom using AI-guided transformations.

# The AI assistant can:
# 1. List available tables (list_tables)
# 2. Inspect target schema (describe_table)
# 3. Execute transformations (sql_execute with confirm_write=true)
# 4. Validate results (sql_query to spot-check)

3. Operational Analytics

Real-time status monitoring and anomaly detection.

Example: "Show me any orders with payment processing delays."

# FairCom MCP provides:
# - /metrics → Prometheus-compatible metrics
# - /diagnostics → System health
# - sql_query → Run diagnostic queries
# Combine for full observability loop

4. Domain-Specific AI Chatbots

Build internal tools (CRM, inventory, compliance).

Example: Chatbot for warehouse staff to check inventory levels, process returns.

# Sandbox the chatbot with:
# FAIRCOM_TOOL_GROUP_ALLOWLIST=metadata,query
# (write tools disabled for read-only workflows)
#
# FAIRCOM_SQL_DENYLIST=DELETE,DROP
# (prevent destructive operations)

Quick Start (5 Minutes)

Option 1: Docker (Fastest)

# Start FairCom MCP pointing to your FairCom instance
docker run -d --name faircom-mcp \
  -p 8000:8000 \
  -e FAIRCOM_API_BASE_URL=http://faircom-host:8080 \
  -e FAIRCOM_API_USERNAME=ADMIN \
  -e FAIRCOM_API_PASSWORD=ADMIN \
  faircomteam/faircom-mcp:latest --transport http

If FairCom is running on your local host machine, use:

-e FAIRCOM_API_BASE_URL=http://host.docker.internal:8080

Option 2: Linux Package (Production)

Debian/Ubuntu:

sudo apt-get install -y "./faircom-mcp_${PROJECT_VERSION}_all.deb"
sudo systemctl enable --now faircom-mcp

RHEL/Rocky/AlmaLinux:

sudo dnf install -y "./faircom-mcp-${PROJECT_VERSION}-1.noarch.rpm"
sudo systemctl enable --now faircom-mcp

Verify it's running:

# Health check
curl -fsS http://127.0.0.1:8000/health
# Output: {"status":"ok"}

# List available tables
curl -i -X POST http://127.0.0.1:8000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": {"name": "test", "version": "1.0"}
    }
  }' | head -20

Docker Hub Usage

The image repository maintained for this proof of concept is:

  • faircomteam/faircom-mcp

Recommended tag usage:

  • latest: Recommended default tag for standard users

  • v* tags (for example vX.Y.Z): Immutable release tags for production pinning

Pull examples:

# Default current image
docker pull faircomteam/faircom-mcp:latest

# Pin to an immutable release for production
docker pull faircomteam/faircom-mcp:vX.Y.Z

Run example (recommended default):

docker run -d --name faircom-mcp \
  -p 8000:8000 \
  -e FAIRCOM_API_BASE_URL=http://faircom-host:8080 \
  -e FAIRCOM_API_USERNAME=ADMIN \
  -e FAIRCOM_API_PASSWORD=ADMIN \
  faircomteam/faircom-mcp:latest --transport http

Notes:

  • Use latest for normal usage and quick evaluation.

  • Use release tag pins (v*) only when you need immutable version locking.

  • latest and v* tags are published together from the same release tag workflow.

Tutorial: Query Your First Table

Let's query FairCom using Claude or a local LLM via FairCom MCP.

Step 1: Initialize MCP Session

curl -i -X POST http://127.0.0.1:8000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": {"name": "my-client", "version": "1.0"}
    }
  }' 2>&1 | grep -i "mcp-session-id"

# Save the session ID from the response, e.g.: abc123
SESSION_ID="abc123"

Step 2: List Tables

curl -X POST http://127.0.0.1:8000/mcp \
  -H "Mcp-Session-Id: $SESSION_ID" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }' 2>&1 | grep -A 5 "list_tables"

Step 3: Describe a Table

# Let's examine the "customers" table
curl -X POST http://127.0.0.1:8000/mcp \
  -H "Mcp-Session-Id: $SESSION_ID" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "describe_table",
      "arguments": {"table_name": "customers"}
    }
  }' 2>&1 | tail -20

Step 4: Query Data

# Count customers
curl -X POST http://127.0.0.1:8000/mcp \
  -H "Mcp-Session-Id: $SESSION_ID" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "sql_query",
      "arguments": {
        "statement": "SELECT COUNT(*) as total FROM customers"
      }
    }
  }' 2>&1 | tail -20

Step 5: Configure in Claude/Copilot

For Claude Desktop:

{
  "mcpServers": {
    "faircom": {
      "type": "http",
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

For GitHub Copilot (VS Code):

{
  "mcpServers": {
    "faircom": {
      "type": "http",
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

Then ask your AI assistant: "Show me a count of customers by region" – it will use FairCom MCP to execute the query.

Configuration

Edit /etc/faircom-mcp/faircom-mcp.env (package install) or pass as environment variables (Docker):

# Required: FairCom connectivity
FAIRCOM_API_BASE_URL=https://faircom.example.com:9443
FAIRCOM_API_USERNAME=ADMIN           # or use FAIRCOM_API_TOKEN
FAIRCOM_API_PASSWORD=ADMIN

# Optional: Server binding
FAIRCOM_HTTP_HOST=0.0.0.0
FAIRCOM_HTTP_PORT=8000

# Optional: TLS

## Connector Management

FairCom MCP exposes connector inspection and lifecycle operations for FairCom Edge input and output connectors.

Read-oriented connector tools:

- `list_inputs(payload?)`
- `describe_inputs(payload)` — `payload.inputNames` (non-empty list of strings) is required; call `list_inputs` first to discover names.
- `list_outputs(payload?)`
- `describe_outputs(payload?)`

CamelCase parity aliases are also available for API-name alignment:

- `listInputs(payload?)`
- `describeInputs(payload?)`
- `listOutputs(payload?)`
- `describeOutputs(payload?)`

Write-oriented connector tools:

- `create_input(payload, confirm_write=False, dry_run=False)`
- `alter_input(payload, confirm_write=False, dry_run=False)`
- `delete_input(payload, confirm_write=False, dry_run=False)`
- `create_output(payload, confirm_write=False, dry_run=False)`
- `alter_output(payload, confirm_write=False, dry_run=False)`
- `delete_output(payload, confirm_write=False, dry_run=False)`

CamelCase parity aliases are also available for write operations:

- `createInput(payload, confirm_write=False, dry_run=False)`
- `alterInput(payload, confirm_write=False, dry_run=False)`
- `deleteInput(payload, confirm_write=False, dry_run=False)`
- `createOutput(payload, confirm_write=False, dry_run=False)`
- `alterOutput(payload, confirm_write=False, dry_run=False)`
- `deleteOutput(payload, confirm_write=False, dry_run=False)`

Connector writes follow the same explicit safety model as SQL writes:

1. Use `dry_run=True` first to preview the intended connector change.
2. Review the returned action and target payload.
3. Re-run with `confirm_write=True` to apply the change.

Example preview:

```json
{
  "name": "create_output",
  "arguments": {
    "payload": {
      "outputName": "writeTemperatureToModbus",
      "serviceName": "modbus",
      "tableName": "modbusTableTCP",
      "sourceFields": ["source_payload"],
      "modbusProtocol": "TCP",
      "modbusServer": "127.0.0.1",
      "modbusServerPort": 502
    },
    "dry_run": true
  }
}

Example apply:

{
  "name": "create_output",
  "arguments": {
    "payload": {
      "outputName": "writeTemperatureToModbus",
      "serviceName": "modbus",
      "tableName": "modbusTableTCP",
      "sourceFields": ["source_payload"],
      "modbusProtocol": "TCP",
      "modbusServer": "127.0.0.1",
      "modbusServerPort": 502
    },
    "confirm_write": true
  }
}

Flat modbus* properties are auto-nested under settings before the request reaches FairCom, matching the shape FairCom's wire format expects. outputName is the output identity field; connectorName is also accepted as an alias and renamed automatically.

mqtt is not a valid serviceName for create_input/create_output. MQTT delivery is configured through MQ topic bindings instead — see MQTT Delivery (MQ Topics) below.

The server does not auto-discover device register maps or connector-specific address models. Supply the connector payload details required by the FairCom Edge configuration API for the connector family you are managing.

MQTT Delivery (MQ Topics)

MQTT delivery in FairCom Edge does not go through create_output. There is no mqtt integration service to enable and no mqtt output connector. Instead, an MQTT topic is bound directly to an integration table through the JSON MQ API's topic actions; records inserted into that table are then published to subscribers of the topic.

Read-oriented tools:

  • list_topics(payload?) — list MQTT topic names the server is tracking.

  • describe_topics(payload?) — describe topics, including their bound table and transform settings.

Write-oriented tools:

  • configure_topic(payload, confirm_write=False, dry_run=False) — create or update (upsert) a topic binding. Unlike create_input/create_output, this is an upsert, not a create-only action.

  • delete_topic(payload, confirm_write=False, dry_run=False)

Example:

{
  "name": "configure_topic",
  "arguments": {
    "payload": {
      "topic": "factory/line-1/mixing_tank/temperature",
      "databaseName": "faircom",
      "tableName": "modbus_mixing_tank_temp"
    },
    "confirm_write": true
  }
}

configureTopic also accepts transformName to transform messages before they are stored, plus downgradeQoS and maxDeliveryRatePerSecond (defaults come from defaultDowngradeQoS/defaultMaxDeliveryRatePerSecond in FairCom's services.json). After configuring, configure_topic's response includes mutation_applied/mutation_verification, since the write is verified with a describe_topics read-back rather than trusted blindly.

FairCom JSON API Surface

FairCom's JSON API is split into three separate namespaces, selected by the api field on every request:

  • db — SQL query/execute and table metadata (sql_query, sql_query_page, sql_execute, table tools).

  • hub — Edge connector lifecycle (createInput/createOutput and friends), plus integration tables and their transformSteps.

  • admin — code packages, accounts, and other server administration actions.

There is no single unified endpoint that covers all three — for example, a JavaScript transform is not one object. It is a code package registered through admin and then attached to an integration table's transformSteps through hub. FairCom MCP routes each tool call to the correct namespace and payload shape automatically so you don't need to track this split yourself, but if you see an upstream error referencing an api value, this is why.

FAIRCOM_TLS_VERIFY=true # Set to false for self-signed certs

Optional: Safety controls

FAIRCOM_POLICY_PRESET=default # default, read_only, analyst, operator, admin FAIRCOM_TOOL_GROUP_ALLOWLIST=metadata,query,write,admin,diagnostics FAIRCOM_SQL_ALLOWLIST=SELECT,INSERT,UPDATE,DELETE FAIRCOM_SQL_DENYLIST=DROP,TRUNCATE,ALTER


## Available Tools

| Tool | Purpose | Safety |
|---|---|---|
| `list_tables(name_like?)` | Discover tables | Read-only |
| `describe_table(table_name)` | Get columns, indexes, constraints (falls back to integration table metadata) | Read-only |
| `list_table_columns(table_name)` | Column names and types (works for integration tables too) | Read-only |
| `list_table_indexes(table_name)` | Index details | Read-only |
| `sql_query(statement, params?)` | Execute SELECT (read-only) | Read-only |
| `sql_query_page(statement, params?, page, page_size)` | Paginated SELECT | Read-only |
| `sql_execute(statement, params?, confirm_write, dry_run)` | INSERT/UPDATE/DELETE (requires `confirm_write=true` unless `dry_run=true`) | Write |
| `list_services(payload?)` | List Edge connector services and runtime state | Read-only |
| `manage_service(payload, confirm_write, dry_run)` | Start/stop/restart a connector service | Write |
| `describe_connector_schema(payload?)` | Local payload schema profiles and known-good examples per connector service and direction (input/output) | Read-only |
| `validate_connector_payloads(payload)` | Preflight-validate connector payloads without mutating backend state, including cross-checking `serviceName` against `list_services` | Read-only |
| `get_usage_contract()` | Canonical args, aliases, transport/session guidance, examples | Read-only |
| `runtime_status()` | Health, version, diagnostics | Read-only |
| `capabilities_summary()` | Discover enabled tool groups and policy preset | Read-only |
| `observability_metrics()` | Snapshot of internal runtime metrics | Read-only |
| `observability_audit()` | Snapshot of the write/audit event log | Read-only |
| `observability_health()` | Readiness/liveness state as an MCP tool call | Read-only |
| `list_topics(payload?)` | List MQTT topic names being tracked | Read-only |
| `describe_topics(payload?)` | Describe MQTT topics, including bound table and transform settings | Read-only |
| `configure_topic(payload, confirm_write, dry_run)` | Upsert an MQTT topic binding to an integration table | Write |
| `delete_topic(payload, confirm_write, dry_run)` | Delete an MQTT topic binding | Write |

See [Connector Management](#connector-management) for input/output connector tools, [Integration Tables & Code Packages](#integration-tables--code-packages) for transform pipeline tools, and [MQTT Delivery (MQ Topics)](#mqtt-delivery-mq-topics) for MQTT publish tools.

## Integration Tables & Code Packages

Integration tables capture data landed by an input connector and apply `transformSteps` to it. A transform step's JavaScript logic lives in a separately registered code package; a table then references it by `codeName`. There is no single "transform" object — FairCom splits this across the `hub` API (integration tables) and the `admin` API (code packages), and FairCom MCP routes each tool call to the correct one for you.

Read-oriented tools:

- `list_integration_tables(payload?)` — list integration tables visible to the configured access context.
- `describe_integration_tables(payload)` — describe tables including their `fields` and `transformSteps`. Pass a `tables` array, not a bare `tableName`.
- `list_code_packages(payload?)` — list registered code package names for a database/owner.
- `describe_code_packages(payload)` — describe registered code packages, including source code.

Write-oriented tools (same `dry_run` / `confirm_write` safety model as SQL and connector writes):

- `create_integration_table(payload, confirm_write, dry_run)` — create a table, optionally with `fields` and `transformSteps` in the same call.
- `alter_integration_table(payload, confirm_write, dry_run)` — alter a table's fields, transform steps, or retention policy. The server polls `describe_integration_tables` after the write and reports `mutation_applied` / `mutation_verification` in the response, because FairCom can return success while silently not applying some field or transform-step changes.
- `delete_integration_tables(payload, confirm_write, dry_run)`
- `register_code_package(payload, confirm_write, dry_run)` — create or update a code package (`createCodePackage`/`alterCodePackage`). Accepts `input_fields` (list of field names the transform reads) and `output_field_definitions` (list of `{name, type}` objects the transform writes); both are merged into `metadata.inputFields`/`metadata.outputFieldDefinitions`.
- `clone_code_package(payload, confirm_write, dry_run)` — clone an existing code package under a new name.
- `revert_code_package(payload, confirm_write, dry_run)` — revert a code package to a prior version. There is no delete; re-registering the same `code_name` is how you update it.
- `test_integration_table_transform_steps(payload, confirm_write, dry_run)` — dry-run transform steps against a table. `payload.testTransformScope` is required and validated against the known enum (`allRecords`, `stop`, `firstRecord`, `lastRecord`, `specificRecords`) since FairCom's own error does not list valid values.

Important, field-tested gotchas:

- Declare every target field in `create_integration_table`'s `fields` array up front. Neither the transform nor `alter_integration_table` can reliably add fields to an existing table afterward.
- Put `databaseName` and `ownerName` inside each transform step object, not only at the table's top level, or FairCom rejects the step with a missing-default-database error.
- A `transformStepMethod` of `"javascript"` requires `transformStepService: "v8TransformService"` alongside it.
- Set `input_fields`/`output_field_definitions` on `register_code_package` for `integrationTableTransform` packages. Without `metadata.inputFields`/`metadata.outputFieldDefinitions`, the code package is created successfully but the FairCom Edge Explorer wizard reports "no suitable Integration Table Transform Code Packages" and cannot find it — the Code Editor GUI sets these automatically, but the Code Package API does not. `register_code_package` returns a `warnings` entry naming the missing property when this happens. **Unverified:** the exact shape this tool writes (`metadata.inputFields`/`metadata.outputFieldDefinitions`) has not been confirmed to resolve wizard visibility in all environments — `register_code_package` always includes an `UNVERIFIED` warning when these fields are set as a reminder to check the wizard after registering. If the wizard still can't find the package, compare against the metadata a Code Editor-created package actually has.

## Common AI Client Mistakes (And Fixes)

These are the most common payload issues across Claude, Copilot, ChatGPT, Gemini, and custom agents.

### 1) Wrong key for `sql_query`

Wrong:
```json
{"name":"sql_query","arguments":{"sql":"SELECT COUNT(*) FROM demo_assets"}}

Correct canonical form:

{"name":"sql_query","arguments":{"statement":"SELECT COUNT(*) FROM demo_assets"}}

Notes:

  • The server accepts aliases sql and query, normalizes to statement, and returns normalization metadata.

  • The server also normalizes SELECT FIRST N ... to SELECT TOP N ... for FairCom compatibility.

2) Wrong key for table metadata tools

Wrong:

{"name":"describe_table","arguments":{"table":"demo_assets"}}

Correct canonical form:

{"name":"describe_table","arguments":{"table_name":"demo_assets"}}

Notes:

  • The server accepts table alias and normalizes to table_name.

3) list_tables filtering key mismatch

Wrong:

{"name":"list_tables","arguments":{"table_like":"demo_%"}}

Correct canonical form:

{"name":"list_tables","arguments":{"name_like":"demo_%"}}

Notes:

  • table_like is accepted as an alias and normalized to name_like.

  • database is accepted for compatibility; current adapter may ignore backend scoping and reports that explicitly.

4) SQL dialect mismatch (LIMIT/OFFSET/FETCH)

Risky for this backend:

SELECT * FROM demo_assets ORDER BY id DESC LIMIT 25 OFFSET 10

Preferred FairCom-compatible style:

SELECT SKIP 10 TOP 25 * FROM demo_assets ORDER BY id DESC

Notes:

  • The server returns a structured validation error with suggested_fix and example_payload for unsupported SQL feature patterns.

  • Unsupported SQL tokens are reported explicitly in unsupported_sql_feature (for example: LIMIT, OFFSET, FETCH).

Session Recovery Quick Fix

If you receive a missing/stale session error:

  1. Call initialize again.

  2. Capture the new Mcp-Session-Id.

  3. Retry the failed tools/call request with the new session id.

Tip:

  • Call get_usage_contract once at startup to load canonical argument keys and aliases.

  • A versioned contract snapshot is also published at docs/mcp-usage-contract.v2026-07-28.json.

JSON Mode vs SSE Mode

  • --transport http: best for JSON-only clients.

  • --transport sse: best for clients that parse text/event-stream framing.

  • --transport stdio: local process transport for MCP hosts.

If your parser is brittle against SSE envelopes, run the server in HTTP mode and keep request/response handling strictly JSON.

Project-Provided JSON-RPC Helper Clients

Reference helper clients are available for strict JSON-RPC integrations:

  • examples/clients/python/mcp_http_helper.py

  • examples/clients/javascript/mcpHttpHelper.mjs

These helpers implement the compatibility workflow used by this server:

  • initialize session before tool calls

  • reuse Mcp-Session-Id

  • force Accept: application/json for deterministic JSON mode

  • reinitialize once and retry when reason_code indicates missing_session or stale_session

  • preview writes using sql_execute with dry_run=true

Observability & Operations

Health Endpoints

GET  /health       # Simple health check (JSON)
GET  /healthz      # Kubernetes-style liveness
GET  /ready        # Readiness check (JSON)
GET  /readyz       # Kubernetes-style readiness
GET  /metrics      # Prometheus-compatible metrics
GET  /diagnostics  # Human-readable diagnostics
GET  /diagnostics/json  # Machine-readable diagnostics

Logs

Package install:

journalctl -u faircom-mcp -f       # Follow logs
journalctl -u faircom-mcp --since 1h # Last hour

Docker:

docker logs -f faircom-mcp

Log Rotation

Package install includes logrotate policy:

/var/log/faircom-mcp/faircom-mcp.log {
  daily
  rotate 7
  compress
  delaycompress
  notifempty
  missingok
}

Development

See BUILD.md for building, testing, and releasing.

Community

License

Licensed under the Apache License, Version 2.0. See LICENSE for terms.

Support

This independent proof of concept is not supported by FairCom. For issues with this project or its MCP integration, open a GitHub issue.

For questions about FairCom products themselves, see https://www.faircom.com/support.


An independent proof of concept built for experimentation with FairCom products and adaptable to other backends.

Available Tools

42 tools
alter_inputC

Modify settings on an existing input connector.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

There are no annotations to disclose safety or side effects, so the description carries the full burden. It simply says 'Modify settings' without explaining the impact of the dry_run and confirm_write parameters, whether changes are reversible, or whether special permissions are needed. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no verbosity, which is appropriate for conveying the core purpose. However, it is under-specified and lacks any structural information about parameters or usage, making it minimally concise but not effectively structured.

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

Completeness2/5

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

Given the tool has three undocumented parameters, no annotations, and an output schema whose content is unexplained, the description is far from complete. The agent cannot safely or correctly invoke the tool without knowledge of payload format, dry_run semantics, or confirm_write behavior. This is inadequate for a tool with this complexity.

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

Parameters1/5

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

The input schema has three parameters (dry_run, payload, confirm_write) with 0% schema description coverage, and the description does not mention any of them. The agent receives no help understanding the payload structure, the purpose of dry_run, or how confirm_write affects execution. The description fails to compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Modify' and names the resource 'settings on an existing input connector', which clearly differentiates it from sibling tools like create_input, delete_input, and describe_inputs. It precisely identifies what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. It does not mention prerequisites, scenarios, or contrast with create_input/alter_output. The only weak implication is 'existing', which hints it is for modification rather than creation, but this is not explicit.

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

alter_integration_tableB

Alter an integration table's fields, transform steps, or retention policy.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description must disclose behavior, but it fails to mention the dry_run and confirm_write parameters that gate writes, nor does it warn about destructive potential.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single-sentence description is concise and front-loaded with the action and target, containing no filler.

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

Completeness2/5

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

For a mutation tool with no annotations and an open payload schema, the description is minimal and omits critical behavioral and parameter usage details, making it insufficient for reliable invocation.

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

Parameters2/5

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

With 0% schema coverage, the description should compensate, but it only lists high-level alteration areas without explaining how payload, dry_run, and confirm_write should be used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Alter' with the resource 'integration table' and enumerates the modifiable aspects (fields, transform steps, retention policy), making its purpose clear and distinguishing it from create/delete siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage for modifying an existing table's configuration, but provides no explicit guidance on when to use this tool over alternatives like create_integration_table or test_integration_table_transform_steps.

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

alter_outputC

Modify settings on an existing output connector.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only states 'Modify settings' without explaining side effects, reversibility, or the existence of safety mechanisms like dry_run and confirm_write. This is comparable to a mutation tool lacking permission or reversibility details.

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 description is a single, grammatically clear sentence with no waste. It effectively communicates the core action, though it sacrifices depth for brevity, which is acceptable for conciseness but not for completeness.

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

Completeness2/5

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

The tool includes safety-related parameters (dry_run, confirm_write) and an output schema, yet the description fails to mention these or how they shape behavior. It does not explain the write confirmation flow or how to use the tool safely, leaving significant gaps for a mutation tool.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not compensate. It mentions no parameters (dry_run, payload, confirm_write) and adds no meaning beyond the schema's bare field names. With three undocumented parameters, the agent cannot reliably construct a correct call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Modify settings on an existing output connector' uses a specific verb (Modify), identifies the resource (existing output connector), and clearly distinguishes from sibling tools like create_output, delete_output, and alter_input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention creation or deletion as separate tools, nor does it state prerequisites or exclusions, leaving the agent to infer usage from the name alone.

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

capabilities_summaryA

Summarize the tools this MCP server exposes and their write-safety model.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the transparency burden. The verb 'Summarize' strongly signals a read-only informational operation, and the zero-parameter schema reinforces that no state changes are involved. It does not explicitly state side-effect freedom or auth requirements, but for a no-param meta-summary tool this is adequately transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It conveys the tool's purpose and distinctive value in a compact form.

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?

Given the tool's simplicity (zero parameters, output schema provided, no complex behavior), the description fully covers what the agent needs to know. It succinctly explains both the subject matter (tools exposed) and the specific angle (write-safety model).

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?

The parameter schema is empty, so there are no parameter semantics to explain. The baseline of 4 applies since no parameters exist and the description does not need to compensate for undocumented inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: summarizing the exposed tools and their write-safety model. This is a specific verb-resource pairing that distinguishes it from sibling tools, which are individual data operations.

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?

The description implies usage context: when an agent needs an overview of the MCP server's capabilities and safety classification. It does not explicitly mention alternatives or exclusions, but no competing summary tool exists among siblings, so the context is clear.

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

clone_code_packageB

Clone an existing code package under a new name.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
code_nameYes
owner_nameNoadmin
confirm_writeNo
database_nameNofaircom
new_code_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for disclosing behavior. It fails to mention that this is a write operation, the role of confirm_write or dry_run, potential side effects, or whether it overwrites existing packages. This lack of transparency leaves safety concerns unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single succinct sentence with no redundant words, effectively communicating the core action. It is well-structured and front-loaded.

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

Completeness2/5

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

Given the tool has 6 parameters and a write operation with safeguards (dry_run, confirm_write), the description is underspecified. It does not mention return behavior, prerequisites, or the workflow of cloning, making it insufficient for an agent to invoke without additional information.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. While it clarifies code_name and new_code_name, it says nothing about dry_run, owner_name, confirm_write, or database_name, leaving their purpose and defaults unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('clone') and resource ('code package') with a target ('under a new name'), which is distinct from sibling tools like register_code_package, revert_code_package, list_code_packages, and describe_code_packages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as register_code_package or revert_code_package. It does not mention prerequisites, suitable scenarios, or any exclusions. The usage context is left entirely to inference.

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

configure_topicC

Create or update an MQTT topic and bind it to an integration table.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must carry the behavioral disclosure burden. It reveals that the tool can create or update (implying mutation) and bind to an integration table, but it does not disclose side effects, idempotency, permission requirements, dry_run semantics, confirm_write behavior, or error conditions. The single sentence is insufficient for a write-oriented tool.

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 description is a single, front-loaded sentence with no fluff or wasted words. It communicates the primary purpose efficiently. However, it is somewhat under-specified, though that is more a completeness issue than a conciseness issue, so a 4 is appropriate.

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

Completeness2/5

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

Given the tool's moderate complexity (3 parameters, output schema, no annotations), the description is too thin. It does not explain the payload structure, the meaning of dry_run/confirm_write, or any behavioral consequences. While an output schema exists, the input semantics remain entirely unexplained, making the tool difficult to invoke correctly.

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

Parameters1/5

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

Input schema coverage is 0% and the description provides no explanation for the three parameters (dry_run, payload, confirm_write). Since the description must compensate for the missing parameter information but does not, the agent has no clues about what payload structure is expected or how dry_run and confirm_write affect execution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create or update') and the resource ('an MQTT topic') plus the binding outcome ('bind it to an integration table'). This differentiates it from sibling tools like delete_topic, list_topics, and describe_topics, which perform different operations on topics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. The description only states what the tool does, leaving the agent to infer that it is used for configuring topics. There are no explicit exclusions or mentions of sibling tools that might be more appropriate for read-only or deletion scenarios.

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

create_inputC

Create a new input connector that collects data from a device or software system.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action of creating, but it does not explain side effects, confirm_write behavior, dry_run implications, or any other practical consequences. This is a significant gap for a mutating tool.

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 description is a single, concise sentence with no wasted words, efficiently conveying the core purpose. However, its brevity borders on under-specification, which is more of a completeness issue than a conciseness problem.

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

Completeness2/5

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

Given the tool has three parameters, no annotations, and an output schema (though its content is unknown), the description is too sparse to fully understand the tool's behavior, parameters, or expected outcomes. It is only minimally viable for a simple creation action.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not mention any of the three parameters (dry_run, payload, confirm_write). It fails to compensate for the lack of schema documentation, leaving the agent without any semantic understanding of these parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new input connector, with a specific verb 'create' and a defined resource 'input connector', and it adds context by mentioning it collects data from a device or software system. This distinguishes it from sibling tools like create_output or alter_input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as alter_input or create_output. Sibling tools exist for related operations, but no exclusions or preferred scenarios are mentioned.

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

create_integration_tableB

Create an integration table, optionally with fields and transform steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description should carry the full burden of behavioral disclosure. It only states 'create an integration table' and does not mention side effects, permissions, idempotency, or the roles of dry_run and confirm_write parameters.

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 description is a single, front-loaded sentence with no redundant wording. It is efficient, though it may be too terse to convey necessary details.

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

Completeness2/5

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

Despite having an output schema, the description remains incomplete for a create operation. It does not explain the parameters' semantics, preconditions, or expected behavior, making it insufficient for an agent to fully understand the tool's invocation and effects.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It vaguely references 'fields and transform steps' but does not clarify how these map to the payload parameter, nor does it explain dry_run or confirm_write. This adds minimal value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: creating an integration table, with optional fields and transform steps. This distinguishes it from sibling tools like alter, delete, and list operations on integration tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb 'create' implies the tool is for creating new integration tables, but there is no explicit guidance on when to use it versus alternatives, nor any exclusion of use cases. The usage is implied but not articulated.

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

create_outputB

Create a new output connector that delivers collected data to an external service.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states the basic create action and outcome, but omits critical behavioral details such as the dry_run mode, confirm_write requirement, side effects, or whether creation is reversible. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It is front-loaded with the action and resource, making it immediately understandable and appropriately concise.

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

Completeness2/5

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

The tool has three parameters and an output schema, but the description gives no context about the creation workflow, the role of dry_run/confirm_write, or what the payload should contain. The presence of an output schema means return values don't need explanation, but the operational process is left entirely unspecified, making the description incomplete for effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention any of the three parameters (dry_run, payload, confirm_write). It adds no meaning beyond the bare schema, failing to compensate for the lack of parameter-level documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create'), identifies the resource ('output connector'), and clarifies its purpose ('delivers collected data to an external service'). This clearly distinguishes it from sibling tools like create_input or create_integration_table.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended usage is implied by the tool name and description: use it when you need to create a new output connector. However, it provides no explicit guidance on when to use it versus alternatives (e.g., alter_output) or any exclusions, so it falls short of clear contextual guidance.

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

delete_inputC

Delete an input connector definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavioral traits. It only restates the delete action from the name, omitting side effects, reversibility, confirmation requirements, or the meaning of dry_run and confirm_write.

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 description is a single short sentence with no redundancy, making it concise and front-loaded. However, its brevity comes at the cost of missing critical operational details.

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

Completeness2/5

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

Given the tool has three parameters and no annotations, the description is under-specified. It does not explain the purpose of dry_run or confirm_write, nor does it address the deletion process, leaving the agent without sufficient context for correct invocation.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter information. The parameters dry_run, payload, and confirm_write are completely undocumented, leaving the agent without any semantic understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Delete' and clearly identifies the resource as 'input connector definition'. This distinguishes it from sibling tools like delete_output, delete_topic, and delete_integration_tables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like alter_input, or any prerequisites. The presence of dry_run and confirm_write parameters suggests a safety workflow, but the description fails to mention these or any usage context.

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

delete_integration_tablesC

Delete one or more integration tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It states the tool deletes resources, which implies destructive action, but does not explain confirm_write, dry_run, or consequences such as reversibility. The presence of safety parameters is ignored, leaving the agent without awareness of safeguards.

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 description is very concise, consisting of a single clear sentence. It is front-loaded with the verb and resource, avoiding unnecessary words. However, it omits essential details, making it arguably too terse for a tool with multiple safety parameters.

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

Completeness1/5

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

The description is highly incomplete for a tool with three parameters and no annotations. It does not explain safety mechanisms (dry_run, confirm_write), the format of payload, or the effect on dependencies. The presence of an output schema does not compensate for missing behavioral context.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no information about the parameters. It does not explain how to specify which integration tables to delete, what payload should contain, or how dry_run and confirm_write affect behavior. This is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete'), the resource ('integration tables'), and scope ('one or more'). It is specific and distinguishes from sibling tools like create_integration_table or alter_integration_table. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool or when not to. It does not mention alternatives, prerequisites, or confirmation requirements. The description merely restates the function without contextualizing it relative to other integration table operations.

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

delete_outputC

Delete an output connector definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Delete' without mentioning the destructive and irreversible nature, the need for confirm_write or dry_run, or what happens to dependent resources. This is a serious gap for a deletion tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, but it is under-specified. It is not a tautology, yet it lacks necessary detail about the operation's parameters and safety behavior. It is concise but not optimally structured for an AI agent.

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

Completeness1/5

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

The tool has three parameters, an output schema, and no annotations, but the description explains none of this. It fails to cover the dry_run/confirm_write flow, what payload is required, or any side effects. For a delete operation, this is completely inadequate.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention any of the three parameters (dry_run, payload, confirm_write). It fails to explain what payload contains, how dry_run works, or the role of confirm_write. The description adds no semantic value beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete an output connector definition.' It clearly identifies the tool's function and distinguishes it from related sibling tools like delete_input or delete_topic by specifying 'output connector.' The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when deletion is appropriate, prerequisites (e.g., needing to describe outputs first), or mention alternative tools such as alter_output for modification. There is no when-to-use or when-not-to-use guidance.

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

delete_topicC

Delete an MQTT topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It only states 'Delete an MQTT topic' without mentioning the destructive nature, the need for confirmation (confirm_write), the availability of dry_run, or any side effects. The schema hints at these safety mechanisms, but the description does not elaborate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise in length, but it is under-specified for a tool with three parameters, an output schema, and destructive semantics. It omits essential information, so it is not appropriately sized for the tool's complexity.

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

Completeness2/5

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

The description provides only a minimal purpose statement and lacks any information about usage context, parameter semantics, behavioral details, or safety considerations. Although an output schema exists, the description itself is insufficient for an agent to select and correctly invoke this tool in a realistic workflow.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the three parameters (dry_run, payload, confirm_write). An agent has no way to infer what these parameters mean or how to set them from the description alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (delete) and the resource (MQTT topic), which distinguishes it from sibling tools like list_topics, describe_topics, and configure_topic. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites, conditions, or contrasting scenarios with the many related sibling tools. For example, it doesn't say when to use delete_topic instead of configure_topic.

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

describe_code_packagesC

Describe one or more code packages by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
code_namesYes
owner_nameNoadmin
code_formatNoutf8
database_nameNofaircom

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only mentions that it describes one or more packages by name, but does not disclose read-only behavior, handling of invalid names, or any side effects. Minimal behavioral detail is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, front-loading the verb and object. Every word earns its place.

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

Completeness2/5

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

Despite having an output schema, the description lacks essential context for a tool with 4 parameters and no annotations. It does not explain the optional parameters, usage scenarios, or behavior with multiple inputs, making it minimally viable at best.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only hints at 'code_names' via 'by name'. Optional parameters like owner_name, code_format, and database_name are left completely unexplained.

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 description uses a specific verb 'Describe' and resource 'code packages' with scope 'by name', clearly identifying the tool's function. It distinguishes from list_code_packages by implying specific named lookups, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like list_code_packages. The description simply states the action without any contextual cues or exclusions.

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

describe_connector_schemaC

Describe the expected input or output connector payload schema for a service.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNoinput
service_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The brief wording implies a read-only operation but does not explicitly state it, nor does it mention any side effects, permissions, error conditions, or details about the response format. This lack of transparency could mislead an agent about expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant words. It front-loads the primary action and effectively conveys the core purpose within a compact structure.

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

Completeness2/5

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

For a simple tool with an output schema, the description is minimal but lacks contextual completeness. It does not explain how this tool fits among siblings or when to choose it over describe_inputs/describe_outputs. While the output schema can provide return details, the absence of usage guidance and parameter clarification leaves the agent under-informed.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It hints at parameter meanings by mentioning 'input or output' (relevant to 'direction') and 'for a service' (relevant to 'service_name'). However, it does not explicitly specify allowed values for 'direction' or clarify that 'service_name' is a configured service identifier. The default value in the schema helps, but the description adds only partial semantic value.

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 description clearly states the tool's function: to describe the expected input or output connector payload schema for a service. It uses a specific verb ('Describe'), a resource ('connector payload schema'), and a scope ('for a service'). However, it does not explicitly distinguish this from sibling tools like describe_inputs/describe_outputs, though the term 'payload schema' implies a distinct focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or scenarios where another sibling tool would be more appropriate. This is a significant gap given the number of similar describe/list tools available.

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

describe_inputsA

Describe one or more input connectors by name (payload.inputNames is required; call list_inputs first to discover names).

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior itself. It adds that payload.inputNames is required and that the tool expects names from list_inputs, which is helpful. However, it does not explicitly state that the operation is read-only, what happens for invalid names, or any error conditions, leaving notable gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, directly front-loaded with the action and resource, and every word adds value. It avoids repetition and clearly conveys the essential information without any fluff.

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

Completeness4/5

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

Given that an output schema exists, the description does not need to explain return values. The tool is simple (one parameter), and the description covers the critical input requirement and the discovery step. The only notable gap is a minor inconsistency with the schema's nullable payload default, but the description itself is sufficiently complete for a tool of this complexity.

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 0%, so the description must compensate. It clearly identifies the required key 'inputNames' within the payload and explains its purpose, which is essential. It could go further by specifying the expected type (e.g., array) or format, but the provided guidance adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: describing one or more input connectors by name. It uses a specific verb ('Describe') and resource ('input connectors'), and distinguishes this from sibling tools like list_inputs by indicating names come from a prior listing.

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?

The description gives explicit usage guidance: 'payload.inputNames is required' and instructs users to 'call list_inputs first to discover names'. This is a clear prerequisite that aids in correct invocation, though it does not mention when not to use the tool or alternatives beyond the implied listing step.

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

describe_integration_tablesC

Describe one or more integration tables, including fields and transform steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of disclosing behavior. It mentions 'describe' (implying read-only) and includes fields and transform steps, but it does not explicitly state whether it is a read-only operation, what authentication or permissions are needed, or what the response format will be. The output schema exists but the description does not reference it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one short sentence captures the essential purpose and scope. It is front-loaded and contains no unnecessary words, achieving maximum clarity in minimal space.

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

Completeness2/5

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

The description is far too skeletal for a tool with no annotations and an opaque parameter. It does not explain what 'payload' means, how to specify which tables to describe, or what the output schema contains. Given the availability of sibling tools for listing and altering tables, more context is needed to position this tool correctly.

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

Parameters1/5

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

The input schema has one generic parameter 'payload' with no description, and the schema description coverage is 0%. The tool description does not mention the payload at all, leaving its purpose and expected content entirely unexplained. This is a significant gap for a parameter-driven tool.

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 description clearly states the tool's function: 'Describe one or more integration tables, including fields and transform steps.' It uses a specific verb ('describe') and identifies the resource and scope. However, it does not explicitly distinguish itself from sibling tools like 'list_integration_tables'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, use cases, or exclusions. Sibling tools like 'list_integration_tables' or 'test_integration_table_transform_steps' exist, but the description does not indicate how this tool relates to them.

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

describe_outputsB

Describe one or more output connectors by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It only says 'describe', which suggests read-only behavior, but does not disclose what happens for unknown names, whether multiple names are accepted at once, or how the payload should be formed. The optional/null payload creates ambiguity about whether no payload describes all outputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single concise sentence with no redundant words, easy to parse.

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

Completeness2/5

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

For a tool with one optional payload and an output schema, the description leaves critical input semantics ambiguous. It doesn't explain what the payload should contain, how to identify outputs, or the effect of omitting it. The output schema covers returns, but not invocation details.

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

Parameters2/5

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

The input schema has a single generic payload object with no documentation (0% coverage). The description adds only that describing happens 'by name', but doesn't specify the payload structure (e.g., an array of strings, an object with a names field).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (describe) and target (output connectors), with a specific constraint (by name), distinguishing it from list_outputs which presumably enumerates all outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives like list_outputs or describe_connector_schema. The phrase 'by name' implies the caller must know the connector names, but no exclusions or alternative tool references are provided.

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

describe_tableB

Describe a table's columns and metadata by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNo
table_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. The word 'Describe' implies a read-only operation, and 'by name' indicates a lookup-by-name behavior, which adds some value. However, it does not disclose potential errors for missing tables, the effect of having both optional parameters set, or any permission or performance characteristics. It partially misses the opportunity to clarify behavior beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise, and front-loaded with the action verb. It contains no unnecessary words or redundancy, earning a high score for conciseness.

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

Completeness2/5

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

Given the tool has two ambiguous optional parameters and numerous sibling tools, the description is far too sparse to provide complete guidance. It does not explain when to choose this tool, how to handle the parameters, or what 'metadata' exactly includes. While an output schema exists and could cover return values, the overall context is insufficient for correct tool selection and invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should clarify the parameters. It says 'by name' but does not indicate which of the two parameters (table or table_name) should be used, nor the relationship between them. The property names are somewhat self-explanatory, but the description fails to add meaningful disambiguation, leaving uncertainty for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Describe' with a clear resource 'a table' and specifies the scope 'columns and metadata'. This distinguishes it from siblings like list_table_columns and list_table_indexes, which focus on individual structures. The phrase 'by name' further clarifies that the input is a table name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like list_table_columns or describe_integration_tables. It lacks any mention of when to prefer this tool, when not to, or how it relates to sibling tools in a workflow. The only implication is that it is used for table schema lookup, but no explicit context or exclusions are given.

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

describe_topicsB

Describe one or more MQTT topics by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of describing behavior. 'Describe' suggests a read-only operation, but the description doesn't explicitly state whether it returns details, whether multiple topics are handled, or any side effects. It is too minimal to inform the agent about the tool's operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no redundant words. It is front-loaded with the key information and earns its place without filler.

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

Completeness2/5

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

The tool is simple but the description omits essential details about the input format, even though an output schema exists. The generic 'payload' parameter is unexplained, making the tool under-specified for reliable invocation. The description does not adequately compensate for the lack of schema documentation.

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

Parameters2/5

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

The input schema has a single 'payload' parameter with anyOf object/null and no description, and schema coverage is 0%. The description says 'by name' but fails to explain how names should be provided in the payload. This leaves a critical gap in understanding how to correctly invoke the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Describe') and clearly identifies the resource ('MQTT topics') and the means of selection ('by name'). This distinguishes it from sibling tools like list_topics, which list topics, and configure_topic/delete_topic, which modify them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case (get details on one or more named topics) but provides no explicit guidance on when to choose this over list_topics or other describe tools. No alternatives or exclusions are mentioned, leaving the agent to infer the appropriate context.

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

get_usage_contractA

Return this server's tool usage contract: argument aliases, canonical arg names, and payload examples.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states what is returned but does not explicitly mention side effects or safety profile. As a 'getter' it is safe to assume read-only, but that is not disclosed; this is adequate but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the verb and resource, followed by a colon and a list of specific contents. Every word earns its place with no filler or repetition.

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?

Given the tool has no parameters and an output schema exists, the description does not need to explain return values. It fully covers the tool's scope by describing exactly what the contract contains, making it complete for a simple metadata getter.

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?

The tool has zero parameters, so the baseline is 4 per rubric. The description adds no parameter information because none is needed; the empty schema is already self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Return' with a clear resource: 'this server's tool usage contract.' It explicitly lists the contract's contents (argument aliases, canonical arg names, payload examples), making it distinctly different from sibling tools that manage tables, inputs, or services.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a reference for understanding tool argument conventions, but it does not explicitly state when to use it versus alternatives or provide any exclusions. There is no guidance on scenarios like before using other tools, so it only meets the 'implied usage' level.

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

list_code_packagesC

List registered code packages.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_likeNo
owner_nameNoadmin
max_recordsNo
database_nameNofaircom
status_filterNo
code_type_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It merely states the action 'List' without revealing read-only nature, filtering behavior, default limits, or any side effects. The description adds no context beyond the tool name itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it is under-specified and borders on tautology. It avoids bloat but sacrifices necessary information, making it minimally acceptable rather than well-structured.

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

Completeness2/5

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

Despite having six optional parameters and an output schema, the description is severely incomplete. It does not explain what a code package is, how filtering works, or what the output represents, leaving the agent to guess or rely on schema names alone.

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

Parameters2/5

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

Schema description coverage is 0%, and the description provides no explanation of parameters like name_like, max_records, or status_filter. Parameter names offer some hints, but the description fails to define formats, allowed values, or how filters interact, leaving significant ambiguity.

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 description 'List registered code packages' clearly states a specific verb and resource, making the tool's purpose unambiguous. It distinguishes from siblings by using 'list' as opposed to 'describe' or 'register', though it does not explicitly call out that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or scenarios where this tool is preferred over sibling tools like describe_code_packages or other list tools.

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

list_inputsA

List the names of previously created input connectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are present, so the description must carry the behavioral burden. The verb 'list' and the phrase 'names of previously created' imply a read-only operation and indicate the return content, but it does not disclose potential effects of the payload parameter or any edge cases. It is minimally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to understanding the tool's purpose and scope.

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

Completeness3/5

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

For a simple listing operation, the description is adequate and benefits from having an output schema. However, the complete lack of payload semantics and absence of any pointer to describe_inputs for details leaves the description minimally viable but not fully self-sufficient.

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

Parameters1/5

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

The schema defines a single 'payload' parameter with 0% description coverage, and the tool description does not mention it at all. The agent has no guidance on whether payload is needed for filtering or what format it should take, making this a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list), the resource (input connectors), and the scope (names of previously created). This distinguishes it from sibling tools like describe_inputs and list_outputs.

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?

The description provides clear context: it lists existing input connector names. It does not explicitly name alternative tools for similar tasks, but the use case is evident. A 4 is appropriate because it lacks explicit when-not-to-use guidance.

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

list_integration_tablesC

List integration tables in a database.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description is responsible for disclosing behavior. It only says 'lists integration tables' and gives no information about output format, pagination, filtering, or potential side effects. This is minimal disclosure for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, which is concise. However, it is under-specified, lacking essential details about the payload and the nature of integration tables, making it minimally useful.

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

Completeness2/5

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

The tool has a generic optional payload parameter, no annotations, and an output schema that is not referenced. The description does not explain what 'integration tables' are, what the payload accepts, or what the response contains. This is inadequate for a tool with this level of ambiguity.

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

Parameters1/5

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

The schema has one parameter 'payload' with 0% description coverage, and the description does not explain what the payload should contain or how it affects the listing. The tool description must compensate for the lack of schema documentation but fails to do so.

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 description clearly states the action (list) and the resource (integration tables) within a database. It is specific enough to indicate the tool's core function, but it does not distinguish itself from siblings like list_tables or describe_integration_tables, which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as list_tables or describe_integration_tables. The description only states what it does, without providing context, prerequisites, or exclusions.

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

list_outputsC

List the names of previously created output connectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It indicates a read-only listing operation but does not clarify the role of the optional payload parameter, potential filtering, pagination, or error behavior. The description is too sparse to adequately inform the agent of the tool's behavior beyond the obvious 'list' semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that directly states the tool's purpose without unnecessary words. It is appropriately concise for a simple listing operation.

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

Completeness2/5

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

The tool is simple, but the description is incomplete given the presence of an optional payload parameter and context from sibling tools. It does not explain the payload's role, nor does it position the tool relative to describe_outputs or other output-related tools. The output schema may describe return values, but the input side remains ambiguous, making the overall guidance insufficient for correct invocation.

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

Parameters1/5

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

The input schema has one optional payload parameter with no description (schema coverage 0%). The description also does not mention the payload parameter, its purpose, or how to use it. The description fails to compensate for the lack of schema documentation, leaving the agent with no understanding of the parameter's meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists names of previously created output connectors, using a specific verb and resource. It distinguishes from siblings like describe_outputs (which would provide details) and list_inputs (different resource type).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention that describe_outputs is better for detailed information or that list_inputs covers inputs. The description only states what the tool does, leaving the agent to infer usage context from sibling names.

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

list_servicesA

List FairCom services and their runtime state (enabled/running/disabled).

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It does mention the runtime state values, which adds useful context. However, it does not explicitly state that the tool is read-only or has no side effects, though 'List' implies this. The description is adequate for a simple list operation but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It clearly communicates the main function and the specific state filter in an efficient manner.

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

Completeness3/5

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

The tool is simple and has an output schema, so return values are likely covered there. However, the description omits any meaning for the payload parameter and provides no usage guidance relative to sibling tools. These gaps make it minimally complete but not comprehensive.

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

Parameters2/5

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

The single optional parameter 'payload' is not mentioned in the description, and the schema provides no description for it (coverage 0%). This leaves the parameter's purpose entirely unexplained, offering no guidance on what values to pass or how it affects the listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists FairCom services and includes their runtime state (enabled/running/disabled). It uses a specific verb (List) and resource (FairCom services), and the added state detail distinguishes it from sibling list tools like list_table_columns or list_inputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a read-only listing operation but does not explicitly mention when to use this tool versus alternatives. It offers no exclusion criteria or reference to sibling tools like manage_service for actions on services. The usage context is clear from the verb and resource, but not explicit.

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

list_table_columnsC

List the columns defined on a table, including integration tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNo
table_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior1/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It only restates the basic operation and does not disclose any behavioral traits such as read-only status, required permissions, pagination, or edge cases.

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 description is a single clear sentence with no wasted words. It is efficiently structured, though it could have added a bit more detail without becoming verbose.

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

Completeness2/5

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

Given the tool has two ambiguous optional parameters and no parameter documentation, the description is too minimal. It does not clarify which parameter to use or what 'table' vs 'table_name' refers to, making it insufficient for reliable tool invocation.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation of the parameters 'table' and 'table_name'. Both are optional with default null, leaving the agent confused about how to specify the table or what distinguishes the two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists columns on a table, using the specific verb 'list' and resource 'columns defined on a table'. It also notes that integration tables are included, which helps distinguish it from related tools like list_table_indexes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need column definitions, but it doesn't explicitly state when to prefer this over list_table_indexes or describe_table, nor does it mention alternatives or exclusions. The phrase 'including integration tables' offers some context but no clear guidance.

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

list_table_indexesC

List the indexes defined on a table.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNo
table_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states that indexes are listed, with no details about output format, ordering, error behavior, or permissions. For a read operation, this is minimally transparent but falls short of what the rubric expects.

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 description is a single clear sentence with no waste, and the main action is front-loaded. However, it is slightly under-specified given the ambiguous parameters, but conciseness itself is strong.

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

Completeness2/5

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

Although an output schema exists, the description leaves significant gaps: the two parameters are unexplained, no usage context is given, and no alternative tools are mentioned. For a tool with low complexity, the description is still not complete enough to use correctly without further investigation.

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

Parameters1/5

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

Schema coverage is 0%, yet the description does not explain the two parameters ('table' and 'table_name') at all. Both are optional with default null, but their purpose and relationship are entirely ambiguous, and the description adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('List') and resource ('indexes defined on a table'). It distinguishes from siblings like list_table_columns by specifying indexes rather than columns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no exclusions, and no mention of prerequisites. The description is a single sentence with no contextual usage advice.

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

list_tablesC

List database tables, optionally filtered by a name pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
name_likeNo
table_likeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The verb 'list' implies read-only, but the description does not confirm this, nor does it disclose pagination, ordering, permissions, or scope (e.g., all tables vs. within a specific schema). This leaves key behavioral traits unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and free of any filler. It is appropriately concise for the simple action of listing tables, although it could have included parameter details without losing its efficiency.

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

Completeness2/5

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

The tool has three optional parameters, no annotations, and is part of a large sibling group with many table-related tools. The description is too minimal to provide complete context for correct invocation, leaving ambiguity about parameter meanings and when to choose this tool over others. The output schema provides return type info but does not compensate for the lack of parameter and usage guidance.

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

Parameters1/5

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

The schema defines three optional parameters with zero coverage in the description. The phrase 'name pattern' is ambiguous and does not distinguish between name_like and table_like, and the database parameter is completely unexplained. The description adds no meaningful information about parameter purposes or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List database tables'. It is specific about the resource (database tables) and the verb (list), distinguishing it from sibling tools like list_table_columns and list_table_indexes which focus on other database objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or typical scenarios. The sibling tools are not referenced, leaving the agent to infer usage from the name alone.

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

list_topicsA

List the names of MQTT topics the server is tracking.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavioral traits. The verb 'list' implies a read-only operation, and 'the server is tracking' adds scoping context. However, it does not mention pagination, ordering, or whether system topics are included, and it does not explicitly state that no modifications occur. The description is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It states the action, resource, and scope in eleven words, earning its place.

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

Completeness4/5

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

Given the tool's simplicity and the presence of an output schema, the description sufficiently covers the core purpose. It could be more complete by clarifying what 'tracking' means or whether the result includes system topics, but for a list-names utility, the description is reasonably complete.

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

Parameters2/5

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

The input schema has one parameter 'payload' with no description (schema coverage 0%), and the description does not mention it. Since the parameter is optional and defaults to null, it may be a generic placeholder, but the agent receives no guidance on what to pass or why. The description fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' plus the resource 'names of MQTT topics' and scoping 'the server is tracking.' This clearly distinguishes it from sibling tools like describe_topics (which would provide details) and configure_topic/delete_topic (which mutate).

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?

The context is clear: use this tool to get topic names. However, it does not explicitly state when not to use it or mention alternatives (e.g., 'for details, use describe_topics'). The sibling tool names provide implicit guidance, but the description itself offers no exclusions.

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

manage_serviceB

Pause, resume, restart, shut down, or start up a FairCom service.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only lists the actions without explaining side effects, required confirmations, permissions, or the impact of a dry run. The mutating nature is implicit but not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, succinct sentence that immediately lists all supported actions. It is front-loaded, contains no filler, and every word contributes to the meaning.

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

Completeness2/5

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

The tool has multiple parameters and an output schema, but the description lacks the necessary detail to invoke it correctly. It does not explain how to select an action (likely via payload) or the meaning of dry_run and confirm_write, leaving significant gaps for a mutating service management tool.

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

Parameters1/5

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

With zero schema description coverage, the description was expected to compensate by explaining parameters like payload, dry_run, and confirm_write, but it makes no mention of them. The agent receives no guidance on how to specify which action to perform or what values these parameters accept.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's function: pausing, resuming, restarting, shutting down, or starting up a FairCom service. It uses a specific verb+resource structure and distinguishes itself from sibling tools like list_services by describing actions rather than observation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for service lifecycle management by listing the available actions, but it does not explicitly state when to use this tool versus alternatives or provide context about prerequisites or exclusions. There is no mention of when not to use it or how it complements listing tools.

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

observability_auditA

Return recent audit log entries for write operations performed through this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden for behavioral disclosure. It clearly indicates a read-like operation ('Return') and specifies the content, but does not disclose any caveats such as access restrictions, retention period, pagination behavior, or whether the operation is safe/idempotent. For a read-only audit tool, this is adequate but leaves room for more context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that is front-loaded with the action and object. No filler, every word adds meaning, and it is immediately understandable.

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

Completeness4/5

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

The tool is simple with no parameters, and an output schema exists, so the description does not need to explain return values. The description covers the core purpose and scope, but the term 'recent' is underspecified regarding the time window. Overall, it is sufficient for an agent to select and invoke the tool correctly, though additional detail on the time window would improve completeness.

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?

The tool has zero parameters, and the input schema is an empty object, so the baseline is 4. The description does not add parameter-specific details because there are none to describe. It does not overcomplicate or introduce ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return') and resource ('recent audit log entries') with a clear scope ('for write operations performed through this server'). It clearly distinguishes from sibling observability tools like observability_metrics and observability_health, which focus on metrics and health status, whereas this tool returns audit log entries.

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?

The description implies appropriate usage by specifying the subject (audit log entries) and the subset (write operations), which helps the agent decide when to use this tool versus the observability_metrics or observability_health siblings. However, it does not explicitly mention when not to use it or name alternative tools.

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

observability_healthB

Return this MCP server's health status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It only says 'returns health status' without disclosing whether the operation is read-only, what error conditions exist, or what the health response structure is. For a simple health check, these details are minimal but still absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or wasted words. It gets straight to the point and is appropriately brief.

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

Completeness4/5

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

Given the tool's simplicity (no parameters) and the existence of an output schema (which presumably explains the return value), the one-line description is nearly complete. However, it could mention the intended use case or differentiate from runtime_status, but this is not critical for a health check.

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?

The tool has zero parameters, so there is nothing to document. The schema coverage is trivially 100%, and the description correctly avoids adding redundant parameter information.

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 description clearly states the tool returns the MCP server's health status, with a specific verb and resource. It is distinguishable from sibling tools like observability_metrics and observability_audit, but the overlap with runtime_status is not addressed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like runtime_status. The description implies a health check, but there are no explicit exclusions or alternative references.

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

observability_metricsB

Return this MCP server's own operational metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention whether the operation is read-only, what specific metrics are included, or any side effects. The phrase 'operational metrics' is vague and lacks detail about the tool's behavior beyond its name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, grammatically correct sentence that conveys the core purpose without unnecessary words. It is appropriately sized and front-loaded, achieving maximum efficiency.

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

Completeness4/5

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

Given that this is a simple no-parameter tool and an output schema exists, the description does not need to explain return values. However, it lacks context on what 'operational metrics' encompasses, which could be clarified to help the agent decide if this is the right tool among similar observability functions. Still, the description is adequate for a low-complexity tool.

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?

The tool has zero parameters, and the schema is empty, so there is nothing to explain. The description does not add parameter-specific information, but none is needed. The baseline of 4 applies for tools with no parameters.

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 description clearly states the tool returns operational metrics for the MCP server, using a specific verb and resource. However, it does not explicitly distinguish itself from sibling tools like observability_health or observability_audit, which likely serve related purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as observability_audit or observability_health. It merely states what the tool does, leaving the agent to infer usage context without explicit direction.

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

register_code_packageC

Create or update a JavaScript code package, such as an integration table transform.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
commentNo
dry_runNo
metadataNo
code_nameYes
code_typeNointegrationTableTransform
owner_nameNoadmin
code_statusNoactive
descriptionNo
input_fieldsNo
confirm_writeNo
database_nameNofaircom
output_field_definitionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description should disclose side effects but only says 'Create or update.' It fails to mention whether updates overwrite existing code packages, how dry_run or confirm_write affect behavior, or any permission/ownership requirements. This is a significant transparency gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single-sentence description is concise and front-loaded, but it is under-specified. It earns its place by stating the core purpose but omits critical operational details that could be added without excessive length. This is closer to under-specification than model conciseness.

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

Completeness2/5

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

Given the tool has 13 parameters, a write action, and an output schema, the description is far from complete. It does not explain the create/update distinction, required parameters, or the role of safety flags like dry_run and confirm_write. The output schema reduces the need to describe return values, but the input complexity demands more context.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the 13 parameters. It only adds the fact that the code is JavaScript, but does not explain code_name, code, metadata, input_fields, output_field_definitions, code_status, or any other parameter. The provided example gives a use case but no parameter-level meaning.

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 description clearly states the action (create or update) and resource (JavaScript code package) with a concrete example ('such as an integration table transform'). It implies a write/upsert behavior, distinguishing it from read-only siblings like list_code_packages and describe_code_packages, though it does not explicitly name alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus siblings such as clone_code_package or revert_code_package. The description does not mention prerequisites, create-vs-update decision factors, or exclusion scenarios, leaving usage context ambiguous.

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

revert_code_packageC

Revert a code package to a prior version.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
versionYes
code_nameYes
owner_nameNoadmin
confirm_writeNo
database_nameNofaircom

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not explain whether the revert is destructive, requires confirmation, or is reversible. The presence of dry_run and confirm_write parameters is not mentioned in the description, leaving critical behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that communicates the core purpose efficiently. It is appropriately concise with no wasted words.

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

Completeness2/5

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

Despite having an output schema and 6 parameters, the description is incomplete for a mutation tool. It fails to cover essential behavioral context, parameter semantics, and safety considerations, making it insufficient for an agent to invoke correctly without additional information.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds almost no parameter semantics. It gives general context for 'code_name' and 'version' but completely ignores dry_run, confirm_write, owner_name, and database_name, offering no help in understanding their purpose or usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'revert' with a clear resource 'code package' and target 'prior version'. This clearly distinguishes it from sibling tools like register_code_package, clone_code_package, and describe_code_packages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites, when to avoid, or selection criteria. It merely states the action without contextual usage direction.

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

runtime_statusA

Report this MCP server's own runtime and configuration status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description communicates the tool's non-destructive nature via 'Report', and it adds context by scoping to the server's own runtime and configuration. However, it doesn't elaborate on potential failure modes or access requirements, though this is acceptable for a status endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded, with no wasted words. It perfectly achieves conciseness while conveying the essential purpose.

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 zero-parameter status tool with an output schema, this description is complete. It provides enough information for an agent to select the tool for server status checks without needing further explanation.

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?

The tool has zero parameters, so the description does not need to explain parameter semantics. The schema already documents everything (100% coverage), and the baseline for zero params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's function with the verb 'Report' and specifies the resource as 'this MCP server's own runtime and configuration status', which distinguishes it from sibling tools that focus on external resources or observability metrics.

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?

The description implies use when an agent needs to check the server's runtime or configuration state. While it doesn't explicitly exclude alternatives, the clarity of 'own...status' provides sufficient context for when to invoke. No exclusions are needed for such a simple introspection tool.

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

sql_executeB

Execute a write SQL statement (insert/update/delete) against FairCom.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNo
queryNo
paramsNo
dry_runNo
statementNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It correctly states that the tool performs writes, but it does not disclose the mutative side effects, the need for confirm_write, the behavior of dry_run, or what the response contains. For a write tool, this leaves important behavioral ambiguities.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It efficiently conveys the core purpose, though its brevity comes at the cost of completeness.

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

Completeness2/5

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

For a mutation tool with six parameters, no annotations, and no schema descriptions, one sentence is far from complete. It lacks guidance on parameter selection, safeguards like dry_run and confirm_write, and the boundary with sql_query. It is not redundant with the schema because the schema has no descriptions.

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

Parameters2/5

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

Schema description coverage is 0%, and the description adds almost no parameter-level meaning. It only indicates the SQL should be an insert/update/delete; it does not clarify that sql/query/statement are likely alternative parameters, nor explain the roles of params, dry_run, or confirm_write. This is insufficient given six undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the exact operation ('Execute a write SQL statement'), enumerates the statement types (insert/update/delete), and names the target ('FairCom'). This distinguishes it from sibling read tools like sql_query and sql_query_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'write SQL statement' wording establishes that the tool is for mutations, which implies sql_query/sql_query_page are for reads, but the description does not explicitly state when to use this tool vs alternatives or mention any exclusions or prerequisites.

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

sql_queryB

Run a read-only SQL query against a FairCom database.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNo
queryNo
paramsNo
statementNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

The description discloses the key behavioral trait of being read-only, which is important for safety. However, no annotations exist, and the description does not mention behavior around parameter precedence, query execution limits, or error handling, leaving gaps beyond the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It immediately communicates the tool's core purpose.

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

Completeness2/5

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

Given there are four parameters, no annotations, and a complex set of sibling query-related tools, the description is too minimal. The read-only note and database mention help, but the lack of parameter guidance and tool-comparison context makes the overall definition incomplete for reliable use.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any of the four parameters (sql, query, params, statement). The description adds no meaning beyond what the schema lists, leaving the agent uncertain whether sql/query/statement are aliases or how params should be used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Run') and resource ('FairCom database') while explicitly noting the read-only nature, which distinguishes it from the sibling tool sql_execute. This is a clear, specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like sql_execute or sql_query_page. The description only states what it does, not the context that differentiates it from siblings.

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

sql_query_pageB

Run a read-only SQL query and return one page of results at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNo
pageNo
queryNo
paramsNo
order_byNo
page_sizeNo
statementNo
continuation_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It states 'read-only,' which is a key safety property, and notes pagination, but it does not explain continuation tokens, ordering, or the relationship between multiple SQL parameters. This is a moderate level of transparency for a complex tool.

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 description is a single, concise sentence that front-loads the core purpose. It contains no redundant or extraneous content. However, the extreme brevity leaves out useful details, preventing a perfect score.

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

Completeness2/5

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

Given the high complexity (8 params, no annotations, no schema descriptions), the one-sentence description is inadequate. It does not explain how pagination is controlled, how the query parameter variants relate, or how the tool handles large result sets. The presence of an output schema helps but does not compensate for the missing operational context.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter-level detail. With 8 parameters including sql, statement, query, page, continuation_token, params, order_by, and page_size, the description fails to clarify which are mutually exclusive, how pagination works, or what values are expected. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Run a read-only SQL query and return one page of results at a time.' It specifies the verb, the resource (SQL query), and a distinguishing feature (pagination). This also differentiates it from sibling tools like sql_query and sql_execute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for read-only, paginated querying, but it does not explicitly state when to choose this tool over alternatives such as sql_query or sql_execute. There is no mention of when not to use it or any exclusion criteria. The usage context is reasonable but relies on inference.

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

test_integration_table_transform_stepsB

Test an integration table's transform steps against records before applying them for real.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
payloadNo
confirm_writeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the burden of disclosing behavior. It suggests the tool is non-destructive ('before applying them for real'), but it does not disclose the effects of parameters like 'dry_run' or 'confirm_write', nor does it mention permissions, rate limits, or potential side effects. This is a significant gap for a tool that may have write behavior via 'confirm_write'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that immediately states the purpose. No filler or redundant information. It is appropriately sized for a tool aimed at testing, though it could be slightly richer in detail.

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

Completeness2/5

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

Given the tool has three parameters, no annotations, and an output schema, the description should provide more context about the testing flow, what happens with different parameter combinations, and the expected behavior. The current description is too minimal to fully guide an agent in using this tool effectively, especially regarding the rollout aspect and the meaning of 'real' application.

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

Parameters1/5

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

Schema description coverage is 0% and the description adds no meaningful information about the three parameters ('dry_run', 'payload', 'confirm_write'). It only vaguely references 'records' without explaining how they map to the payload parameter. The description fails to compensate for the schema's lack of parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Test') on a specific resource ('an integration table's transform steps') with a specific scope ('against records before applying them for real'). It distinguishes this from sibling tools by focusing on the testing/validation aspect rather than listing, creating, or deleting tables.

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 provides clear context for when to use the tool: to test transform steps against records before applying them for real. This implies a dry-run validation purpose. However, it does not explicitly mention when not to use it or name alternative tools, so it falls just short of a 5.

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

validate_connector_payloadsA

Validate one or more connector payloads locally without writing to FairCom.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNocreateInput
payloadNo
payloadsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that validation is performed 'locally without writing to FairCom,' which is a crucial side-effect disclosure. However, it stops short of detailing what validation entails (e.g., error reporting, prerequisites), so it is not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that leads with the verb and resource, then adds the essential qualifier. Every word earns its place, and there is no redundant or extraneous information.

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

Completeness3/5

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

The tool has a simple interface with optional parameters and an output schema, so the description does not need to explain return values. However, the lack of parameter documentation and missing usage guidance leaves gaps in the overall understanding. The description conveys the core purpose but is not fully complete for an agent to invoke the tool correctly without additional schema inspection.

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

Parameters2/5

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

The input schema has 0% description coverage, and the description only partially compensates by mentioning 'one or more connector payloads,' which maps to the 'payload' and 'payloads' parameters. The 'action' parameter is entirely unexplained; the schema provides a default but no semantic guidance. The description fails to clarify how to use the tool correctly for different validation scenarios.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Validate') and resource ('connector payloads') and adds a key qualifier ('locally without writing to FairCom') that clearly distinguishes it from sibling CRUD tools. It immediately conveys the tool's unique scope and non-destructive nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a pre-check before writing to FairCom, but does not explicitly state when to use this tool versus alternatives or name specific sibling tools. The context is present but vague, leaving the agent to infer when it should be selected over create/alter operations.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.46
    • Addedconfigure_topic
    • Addeddelete_topic
    • Changeddescribe_connector_schema1 field changed
      • addedInput schema / properties / direction
        Added value: +{
        +  "default": "input",
        +  "type": "string"
        +}
    • Addeddescribe_topics
    • Addedlist_topics
    • Changedregister_code_package2 fields changed
      • addedInput schema / properties / input_fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / output_field_definitions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  2. 37 tool updatesv0.1.42
    • Addedalter_integration_table
    • Removedalter_transform
    • RemovedalterInput
    • RemovedalterOutput
    • RemovedalterTransform
    • Addedclone_code_package
    • Addedcreate_integration_table
    • Removedcreate_transform
    • RemovedcreateInput
    • RemovedcreateOutput
    • RemovedcreateTransform
    • Addeddelete_integration_tables
    • Removeddelete_transform
    • RemoveddeleteInput
    • RemoveddeleteOutput
    • RemoveddeleteTransform
    • Removeddescribe_code_package
    • Addeddescribe_code_packages
    • Addeddescribe_integration_tables
    • Removeddescribe_transforms
    • RemoveddescribeCodePackage
    • RemoveddescribeInputs
    • RemoveddescribeOutputs
    • RemoveddescribeTransforms
    • Changedlist_code_packages3 fields changed
      • addedInput schema / properties / code_type_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / max_records
        Added value: +{
        +  "default": 200,
        +  "type": "integer"
        +}
      • addedInput schema / properties / status_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Addedlist_integration_tables
    • Addedlist_services
    • Removedlist_transforms
    • RemovedlistCodePackages
    • RemovedlistInputs
    • RemovedlistOutputs
    • RemovedlistTransforms
    • Addedmanage_service
    • Changedregister_code_package5 fields changed
      • removedInput schema / properties / code_format
        Removed value: -{
        -  "default": "javascript",
        -  "type": "string"
        -}
      • addedInput schema / properties / code_status
        Added value: +{
        +  "default": "active",
        +  "type": "string"
        +}
      • removedInput schema / properties / created_by
        Removed value: -{
        -  "default": "admin",
        -  "type": "string"
        -}
      • removedInput schema / properties / language
        Removed value: -{
        -  "default": "javascript",
        -  "type": "string"
        -}
      • removedInput schema / properties / service_name
        Removed value: -{
        -  "default": "v8TransformService",
        -  "type": "string"
        -}
    • RemovedregisterCodePackage
    • Addedrevert_code_package
    • Addedtest_integration_table_transform_steps
  3. 51 tool updatesv0.1.0
    • First observedalter_input
    • First observedalter_output
    • First observedalter_transform
    • First observedalterInput
    • First observedalterOutput
    • First observedalterTransform
    • First observedcapabilities_summary
    • First observedcreate_input
    • First observedcreate_output
    • First observedcreate_transform
    • First observedcreateInput
    • First observedcreateOutput
    • First observedcreateTransform
    • First observeddelete_input
    • First observeddelete_output
    • First observeddelete_transform
    • First observeddeleteInput
    • First observeddeleteOutput
    • First observeddeleteTransform
    • First observeddescribe_code_package
    • First observeddescribe_connector_schema
    • First observeddescribe_inputs
    • First observeddescribe_outputs
    • First observeddescribe_table
    • First observeddescribe_transforms
    • First observeddescribeCodePackage
    • First observeddescribeInputs
    • First observeddescribeOutputs
    • First observeddescribeTransforms
    • First observedget_usage_contract
    • First observedlist_code_packages
    • First observedlist_inputs
    • First observedlist_outputs
    • First observedlist_table_columns
    • First observedlist_table_indexes
    • First observedlist_tables
    • First observedlist_transforms
    • First observedlistCodePackages
    • First observedlistInputs
    • First observedlistOutputs
    • First observedlistTransforms
    • First observedobservability_audit
    • First observedobservability_health
    • First observedobservability_metrics
    • First observedregister_code_package
    • First observedregisterCodePackage
    • First observedruntime_status
    • First observedsql_execute
    • First observedsql_query
    • First observedsql_query_page
    • First observedvalidate_connector_payloads

TDQS

B3.1/5.0
Disambiguation4/5

Most tools have clear resource+action pairs, but list_table_columns and describe_table overlap in column information, and sql_query vs sql_query_page could cause confusion. The list/describe pattern for inputs/outputs/integration tables is otherwise distinct.

Naming Consistency3/5

The list/describe/create/alter/delete prefix pattern is consistent, but observability_*, capabilities_summary, runtime_status, and sql_query/sql_execute use noun phrases or different verb styles. This mixing of conventions is noticeable but still readable.

Tool Count2/5

42 tools is excessive. Even for a broad integration server, many could be consolidated (e.g., observability_* group, list vs describe pairs). The count exceeds the typical heavy threshold and may overwhelm agents.

Completeness5/5

The tool set provides full CRUD-like coverage for connectors, integration tables, MQTT topics, and code packages, plus SQL read/write, validation, testing, and observability. There are no obvious dead ends for core workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables MCP hosts to use NeoSQL Desktop tools for database management, including querying, table operations, and code generation, through a local stdio MCP server.
    10
    235
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with U2 UniData/UniVerse databases through MCP tools for file, record, dictionary, and BP program operations, with built-in admin UI, JWT authentication, RBAC, and audit logging.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A versatile MCP server that connects to multiple relational databases (MySQL, PostgreSQL, Oracle, SQL Server, SQLite) and enables secure read-only SQL query execution and metadata access.
    4
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/toddstoffel/faircom-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server