Skip to main content
Glama
kascada

MCP Client Compatibility Probe

by kascada

MCP クライアント互換性プローブ

MCP クライアントが実際に何をサポートしているかを確認するための小型診断用 MCP サーバー。

このサーバーは意図的に依存関係ゼロで設計されており、トランスポートに依存しない中核ロジックと、ローカルの stdio アダプターに分割されています。将来の HTTP アダプターは、ChatGPT Web、OpenAI API、またはリモート MCP テスト用に probe-core.mjs を再利用できます。

想定されるワークフローは AI 支援型です。テストしたいアシスタント/クライアントにこのリポジトリを指定してプローブを実行させ、トレースを検査し、結果ファイルを作成し、コミットを準備させます。実際には、これは単一のプロンプトで完了します。

現在の非公式なクライアントサポート概要は CLIENT-MATRIX.md にあります。詳細なテスト設計と結果テンプレートは TESTPLAN.md にあります。

テスター向けクイックスタート

オプション A: 単一プロンプト

テストしたいアシスタントまたはクライアントを、書き込みが許可されているディレクトリで起動し、以下を渡します:

Clone https://github.com/kascada/mcp-client-compat-probe.git, then read PROMPT.md from that clone and follow the prompt inside it. You are the client under test.

これでセットアップは完了です。以降、アシスタントはリポジトリのクローン、スモークテストの実行、プローブのローカル MCP サーバーとしての登録、プローブ操作の実行、トレースの検査、結果ファイルの作成を自動で行います。アシスタントが自力ではできないこと、つまり MCP 設定を反映するためのクライアント再起動、クライアントがユーザー操作としてのみ公開している機能の呼び出し、プッシュまたはプルリクエストの承認のみが、あなたに戻ってきます。

これは、Claude Code、Codex CLI、OpenCode、Cursor など、シェルコマンドを実行してローカルファイルを読み取れるクライアントを前提としています。できない場合は、オプション B を使用してください。

オプション B: ステップバイステップ

同じテストを段階的に示したものです。クライアントが単独でクローンできない場合、またはオプション A が何を行うかを実行前に確認したい場合に使用します。

  1. このリポジトリをクローンします。

    git clone https://github.com/kascada/mcp-client-compat-probe.git
    cd mcp-client-compat-probe

    ほとんどのテスターには HTTPS が推奨されます。SSH キーの設定がなくても動作するためです。すでに GitHub を SSH 経由で使用している場合は、以下も同等です:

    git clone git@github.com:kascada/mcp-client-compat-probe.git
    cd mcp-client-compat-probe
  2. クローンしたディレクトリを、テストしたい MCP 対応アシスタント/クライアントで開きます。

  3. アシスタントに PROMPT.md を実行するよう依頼します。例: Run PROMPT.md。 アシスタントがローカルファイルを読み取れない場合は、PROMPT.md の全文を貼り付けてください。

  4. クライアント再起動、MCP セットアップ確認、プッシュ/PR 承認に関する明示的なプロンプトにのみ従ってください。

アシスタントが残りを処理します:

  • npm run smoke を実行

  • 必要に応じてローカル stdio MCP サーバーの設定を支援

  • プローブ操作を実行

  • トレースファイルを検査

  • results/<client>-<username>-<date>.md を作成

  • その結果ファイルのみをステージしてコミット

デフォルトでは完全なトレースファイルをコミットしないでください。結果ファイルには、小さな匿名化された抜粋のみを含める必要があります。

Related MCP server: jakegaylor-com-mcp-server

結果の貢献

このリポジトリは公開されており、誰でも読み取りとクローンはできますが、プッシュはできません。クローンはフォークを作成するものではなく、書き込みアクセスも付与しないため、結果の貢献は自分のフォークからのプルリクエストを通じて行います。アシスタントがこれを代行できます。手動での同等の操作は次のとおりです:

gh repo fork --remote                                   # your own fork, no permissions needed here
git switch -c probe-result-<client>-<username>
git add results/<client>-<username>-<date>.md           # only the result file
git commit -m "Add <client> probe result <username> <date>"
git push -u origin probe-result-<client>-<username>     # pushes to your fork
gh pr create --repo kascada/mcp-client-compat-probe

<username> には GitHub アカウント名を使用してください。共有コレクション内で結果の帰属が明確になります。

プルリクエストを開けない、または開きたくない場合は、次のいずれも問題ありません:

  • イシューを開き、結果ファイルを添付する。

  • 結果ファイルをリポジトリ作成者に直接送信する。その際、クライアントバージョン、オペレーティングシステム、シークレットを除去した MCP 設定も含めてください。

ファイル

mcp-probe/
  README.md              # quickstart and feature overview
  CLIENT-MATRIX.md       # informal client support matrix
  PROMPT.md              # assistant prompt for running and recording tests
  TESTPLAN.md            # repeatable client test plan
  probe-core.mjs          # JSON-RPC handlers and probe tools
  stdio-server.mjs        # local stdio transport
  opencode.json           # isolated OpenCode test config
  package.json            # npm scripts, no dependencies
  results/                # contributed client observations
  scripts/smoke-stdio.mjs # direct stdio smoke test

プローブ対象範囲

実装済みの MCP メソッド:

  • server/discover

  • レガシー initialize フォールバック応答

  • tools/list

  • tools/call

  • resources/list

  • resources/read

  • resources/templates/list

  • prompts/list

  • prompts/get

  • スタブ subscriptions/listen

ツール:

  • echo_meta: 受信した引数、_meta、クライアント機能、トランスポートの観察結果を返します。

  • structured_result: outputSchema に一致する structuredContent とともにテキストを返します。

  • create_handle: 明示的な状態ハンドルを作成します。

  • use_handle: create_handle のハンドルを使用します。

  • needs_form_input: inputResponses で再試行されるまで resultType: "input_required" を返します。

  • tool_error: isError: true でツール実行エラーを返します。

  • resource_link_result: resource_link コンテンツ項目を返します。

  • search: ChatGPT 互換の検索スタブ。

  • fetch: ChatGPT 互換のフェッチスタブ。

スモークテスト

このディレクトリから実行します:

npm run smoke

または npm なしの場合:

node scripts/smoke-stdio.mjs

スモークテストはトレースを次の場所に書き込みます:

/tmp/mcp-probe-smoke.ndjson

トレースログ

サーバーは診断情報を stdout に書き込みません。stdout には MCP JSON-RPC メッセージのみを含める必要があるためです。診断情報は stderr とトレースファイルに送られます。

デフォルトのトレースパス:

/tmp/mcp-probe.ndjson

opencode.json からの OpenCode トレースパス:

/tmp/mcp-probe-opencode.ndjson

各行は JSON で、以下を含みます:

  • ts: タイムスタンプ

  • pid: サーバープロセス ID

  • direction: in または out

  • payload: JSON-RPC ペイロード

OpenCode でのテスト

このディレクトリには分離された opencode.json が含まれています:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "probe": {
      "type": "local",
      "command": ["node", "stdio-server.mjs"],
      "cwd": ".",
      "enabled": true,
      "timeout": 10000,
      "environment": {
        "MCP_PROBE_TRACE": "/tmp/mcp-probe-opencode.ndjson"
      }
    }
  }
}

ローカル設定を読み込むために、このディレクトリから OpenCode を起動します:

opencode

次に、以下を依頼します:

Nutze das probe echo_meta Tool und zeige mir, welche MCP-Metadaten du gesendet hast.

追加で役立つプロンプト:

Nutze probe structured_result mit label opencode.
Erzeuge mit probe create_handle ein Handle fuer confluence und nutze es danach mit probe use_handle fuer die Query release notes.
Teste probe needs_form_input fuer topic OpenCode Elicitation.
Nutze probe search fuer query probe und danach probe fetch fuer das erste Ergebnis.

トレースの解釈:

  • server/discover が存在: 最新の MCP ディスカバリープローブが使用されています。

  • initialize が存在: レガシーハンドシェイクパスが使用されています。

  • _meta.io.modelcontextprotocol/protocolVersion が存在: リクエストごとのプロトコルバージョンが送信されています。

  • _meta.io.modelcontextprotocol/clientCapabilities.elicitation が存在: クライアントが elicitation サポートを宣言しています。

  • resources/list または prompts/list が存在: クライアントがツール以外のプリミティブを積極的に照会しています。

  • input_required 後の再試行: MRTR/Elicitation フローが処理されています。

OpenCode は起動時に設定を読み取ります。opencode.json またはサーバーファイルを変更した後は、OpenCode を再起動してください。

Codex CLI または ChatGPT Desktop でのテスト

同じローカル stdio サーバーは、Codex CLI、ChatGPT Desktop アプリ、Codex IDE 拡張機能でも使用できます。これらはローカル MCP サーバーをサポートしているためです。

このディレクトリからの Codex CLI 登録の例:

codex mcp add probe --env MCP_PROBE_TRACE=/tmp/mcp-probe-codex.ndjson -- node stdio-server.mjs

次に、Codex で /mcp を使用してアクティブなサーバーを確認し、上記と同じプローブツールを依頼します。

ChatGPT Desktop アプリの場合、設定で新しい MCP サーバーを追加します:

  • 名前: probe

  • タイプ: STDIO

  • コマンド: node

  • 引数: stdio-server.mjs の絶対パス

  • 環境: MCP_PROBE_TRACE=/tmp/mcp-probe-chatgpt-desktop.ndjson

ChatGPT Web および OpenAI API パス

ChatGPT Web はローカルの stdio サーバーを直接起動したり、ローカルの Codex/OpenCode 設定を読み取ったりすることはできません。ChatGPT Web または OpenAI API のテストには、後でリモート HTTP アダプターを追加してください。

現在の設計では、そのパスは開かれたままです:

  • probe-core.mjs には stdio 固有の動作はありません。

  • stdio-server.mjs は、改行区切りの JSON-RPC を handleJsonRpc に適応させるだけです。

  • 将来の http-server.mjs は、同じ handleJsonRpc を呼び出し、トランスポートオブジェクトに HTTP ヘッダーを渡すことができます。

  • 既存の search および fetch ツールは、structuredContent と URL ベースの結果を備えた、シンプルな ChatGPT 互換の形状にすでに従っています。

後で追加する HTTP 固有のチェック:

  • MCP-Protocol-VersionMcp-MethodMcp-Name

  • 静的/Bearer ヘッダー

  • OAuth 動作

  • ツールパラメータからの x-mcp-header

  • Streamable HTTP 応答動作

Available Tools

9 tools
create_handleCreate HandleA

Creates an explicit short-lived probe handle to test stateless multi-call tool design.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesTarget system or scenario for the handle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
handleYes
targetYes
expiresInSecondsYes

TDQS

A3.5/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 mentions the handle is 'short-lived' and 'explicit,' but does not explain what the handle is for, what it returns, any side effects, or lifecycle details. For a creation tool, this is insufficient.

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 the action, and contains no unnecessary words. It is appropriately concise.

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 (1 parameter) and has an output schema, so the description does not need to explain return values. However, it lacks context about how the handle is used, its lifecycle, and its relationship to sibling tools like use_handle. This incomplete context could confuse agents.

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?

The input schema has 100% description coverage for the 'target' parameter, so the baseline is 3. The tool description adds no additional parameter-level context beyond restating the purpose.

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 verb 'creates' and the resource 'explicit short-lived probe handle,' and it adds the specific purpose 'to test stateless multi-call tool design.' This distinguishes it from sibling tools like use_handle, which presumably consumes the handle.

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 testing stateless multi-call tool design but does not explicitly state when to use this tool versus alternatives like use_handle. No exclusions or when-not-to-use guidance is provided.

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

echo_metaEcho MetadataA

Returns the received arguments and MCP request metadata. Use this first to inspect protocolVersion, clientInfo, and clientCapabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoAny message to echo back.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
observedYes
argumentsYes

TDQS

A4.3/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. It transparently states that the tool returns the received arguments and MCP metadata, and specifically calls out the metadata fields. This is a read-only behavior implied by 'Returns,' and it discloses what the agent can expect without needing to infer hidden side effects.

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 exactly two sentences. The first sentence states the core function, and the second provides usage guidance. Every word earns its place, with no filler or repetition. It is front-loaded with the primary purpose and immediately actionable.

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?

This is a simple tool with one optional parameter and an output schema present. The description fully covers its purpose and usage context. Since the output schema exists, the description does not need to explain return values. For the tool's complexity, the description is complete and well-rounded.

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?

The input schema fully documents the only parameter 'message' with a description ('Any message to echo back'), so schema coverage is 100%. The description does not add any additional parameter-specific meaning beyond what the schema provides, but it does mention 'received arguments' which encompasses the parameter. This meets the baseline of 3.

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 'Returns the received arguments and MCP request metadata,' which is a specific verb+resource combination. It distinguishes itself from siblings by explicitly mentioning metadata fields (protocolVersion, clientInfo, clientCapabilities) and the directive to 'Use this first,' making its diagnostic role clear.

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 context: 'Use this first to inspect protocolVersion, clientInfo, and clientCapabilities.' This tells the agent when to invoke the tool, though it does not explicitly name alternatives or exclusions. The clear 'use this first' directive provides adequate guidance.

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

fetchFetch Probe DocumentA
Read-only

ChatGPT-compatible read-only fetch stub. Retrieves full text for an ID returned by search.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument ID returned by search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
textYes
titleYes
metadataNo

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds that this is a 'ChatGPT-compatible' and a 'stub,' suggesting a simulated or compatibility-oriented behavior, and that it returns 'full text' for the ID. This provides useful context not present in annotations, with no contradictions.

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 short sentences with no filler. The first provides contextual framing ('stub'), the second the core functionality. Every word contributes meaning.

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 simple one-parameter fetch operation with an output schema and clear read-only annotation, the description sufficiently covers purpose, input requirement, and relationship to search. The 'stub' characterization adds a behavioral hint without needing further detail.

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?

The schema already provides 100% parameter coverage with 'Document ID returned by search.' The tool description echoes the same requirement without adding new semantic details, so it stays at the baseline for high schema coverage.

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 'Retrieves full text for an ID returned by search,' specifying the verb (retrieves), resource (full text), and the relationship to the search tool. This distinguishes it from siblings like search (which finds IDs) and handle tools.

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 explicitly ties usage to search by requiring an ID returned by search, implying the correct invocation sequence. It does not explicitly name alternatives or exclusion conditions, so it doesn't reach a 5.

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

needs_form_inputNeeds Form InputA

Returns resultType input_required until the client retries with inputResponses. This tests MRTR and elicitation form mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesTopic for the requested follow-up input.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the key behavioral trait: the tool repeatedly returns input_required until the client sends inputResponses. However, it doesn't specify what happens after the retry or any side effects, but for a simple test tool this is adequate.

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?

Two sentences, front-loaded with the return behavior and testing purpose. No wasted words.

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?

For a simple tool with one parameter and no output schema, the description covers the core behavior and purpose. It might benefit from stating the expected response after inputResponses, but the description is sufficient for an agent to understand invocation context.

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 coverage is 100% with a clear description of 'topic'. The main description doesn't add significant new meaning beyond the schema; it reinforces the context of follow-up input but doesn't explain format or constraints. Baseline 3 applies given high schema coverage.

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 explicitly states the tool's behavior: it returns resultType input_required until retried with inputResponses. It also states its testing purpose (MRTR and elicitation form mode), clearly distinguishing it from siblings like echo_meta or structured_result.

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 identifies a clear use case: testing MRTR and elicitation form mode. It doesn't explicitly mention when not to use it or alternatives, but the testing context is specific enough for an agent to select it appropriately.

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

structured_resultStructured ResultB

Returns both text content and structuredContent conforming to outputSchema.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional label for the generated result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
labelYes
answerYes
nestedYes

TDQS

B3.4/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 carry the full burden of disclosing behavior. It does state the core return behavior (both text and structuredContent), which is useful, but it does not address the role of the label parameter, edge cases, or any limitations. This is minimal but not misleading.

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 one sentence that front-loads the primary action and includes no filler or redundant information. Every word contributes to understanding the tool's function, making it highly concise and well-structured.

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: one optional parameter, no required fields, and an output schema. The description states the core return behavior, and the output schema presumably covers the structure of structuredContent. However, it does not mention the intended use case or how the label parameter influences the result, leaving a small but noticeable gap. Given the simplicity, it is mostly complete.

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?

The input schema has 100% coverage for the single optional 'label' parameter, described as 'Optional label for the generated result.' The description adds no further semantic detail about how the label affects the output, so it remains at the baseline for high schema coverage without adding extra 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 states the tool's primary function: returning both text content and structuredContent conforming to outputSchema. This clearly identifies what the tool does, though it does not explicitly differentiate it from sibling tools like resource_link_result. The verb 'Returns' and the specific resource make the purpose clear.

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. The description only states what it does, without mentioning any context, prerequisites, or exclusions. Sibling tools are listed but not referenced, so the description fails to help the agent decide when to invoke this tool.

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

tool_errorTool ErrorA

Always returns a tool execution error via isError true, not a JSON-RPC protocol error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure responsibility. It clearly states the tool always errors with isError true and clarifies that it is not a protocol-level error, providing useful context. It does not detail the error message content, but the key behavioral trait is fully disclosed.

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 the core behavior front-loaded ('Always returns a tool execution error'). It is concise and contains no unnecessary words or filler.

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, no-output-schema tool, the description is fully complete. It precisely specifies what the tool does without needing to explain parameters or return values. The purpose is fully captured.

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 empty schema is fully covered. The description adds no parameter semantics because none are needed. The baseline for 0 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 states the tool always returns a tool execution error via isError true, and explicitly distinguishes this from a JSON-RPC protocol error. This specific verb and resource make the tool's purpose unambiguous and differentiate it from siblings like structured_result or echo_meta.

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 only states what the tool does, not when or why to use it. It does not reference any testing scenarios or contrast with alternative tools. 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.

use_handleUse HandleC

Uses a handle returned by create_handle. Unknown handles return a tool execution error.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesProbe query to associate with the handle.
handleYesHandle returned by create_handle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
handleYes
targetYes
callCountYes

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 carries the full burden. It discloses one behavioral trait: unknown handles return a tool execution error. But it does not describe success behavior, side effects, or whether the operation is read-only or mutating. This is minimal transparency beyond the error condition.

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, compact sentence that states the essential dependency on create_handle and the error behavior for unknown handles. It is appropriately sized and front-loaded, 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 two well-documented parameters, the description fails to convey the tool's actual operation or purpose. It does not explain what 'uses a handle' accomplishes, making the tool's functionality incomplete for an agent trying to select and invoke it correctly. The error condition is noted, but the success path and overall behavior are absent.

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 100%, so the baseline is 3. The description reinforces the handle parameter's origin ('returned by create_handle') but adds no additional meaning to 'query' beyond the schema's 'Probe query.' It does not compensate for or enhance the parameter understanding beyond what the schema already provides.

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

Purpose3/5

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

The description states it 'Uses a handle returned by create_handle,' which identifies the tool as the counterpart to create_handle and distinguishes it by its dependency on a prior handle. However, the verb 'uses' is vague—it does not specify what action is performed with the handle or what output is produced, leaving the core purpose unclear.

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 that the tool should be used after create_handle, since it requires a handle returned by that tool. It also warns that unknown handles error, which guides the user to provide a valid handle. However, it does not state when to use this tool instead of other siblings (e.g., search, fetch) or specify exclusions.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct MCP feature: metadata inspection, structured output, handle-based state, MRTR input, error simulation, resource links, and search/fetch stubs. There is no overlap between their purposes.

Naming Consistency3/5

Names are a mix of verb_noun (echo_meta, create_handle), standalone verbs (search, fetch), and nouns (structured_result, tool_error). While all are snake_case, the varying forms make the naming pattern less predictable than a uniform verb_noun convention.

Tool Count5/5

9 tools is a well-scoped set for a compatibility probe, covering the key MCP client interaction patterns without redundancy or bloat.

Completeness4/5

The tool surface covers essential probe scenarios: metadata, structured content, handles, MRTR, errors, resource links, and search/fetch. Minor gaps exist (e.g., no explicit tool for protocol-level logging or sampling), but the core compatibility checks are well represented.

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

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/kascada/mcp-client-compat-probe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server