MCP Client Compatibility Probe
MCP 클라이언트 호환성 프로브
다양한 MCP 클라이언트가 실제로 무엇을 지원하는지 확인하기 위한 소형 진단 서버입니다.
이 서버는 의도적으로 외부 의존성이 없으며, 전송(transport) 중립적인 핵심 로직과 로컬 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가 무엇을 하는지 미리 확인하고 싶다면 이 방법을 사용하세요.
이 저장소를 클론합니다.
git clone https://github.com/kascada/mcp-client-compat-probe.git cd mcp-client-compat-probe대부분의 테스터에게 HTTPS가 권장됩니다. SSH 키가 이미 구성되어 있다면 SSH도 동일하게 사용할 수 있습니다:
git clone git@github.com:kascada/mcp-client-compat-probe.git cd mcp-client-compat-probe클론한 디렉터리를 MCP 지원 어시스턴트/클라이언트에서 엽니다.
어시스턴트에게
PROMPT.md를 실행하도록 요청합니다. 예:PROMPT.md 실행어시스턴트가 로컬 파일을 읽을 수 없다면PROMPT.md의 전체 내용을 붙여넣기하세요.클라이언트 재시작, MCP 설정 확인, 푸시/PR 승인에 대한 명시적 안내만 따르세요.
나머지는 어시스턴트가 처리해야 합니다:
npm run smoke실행필요한 경우 로컬
stdioMCP 서버 구성 지원프로브 상호작용 실행
트레이스 파일 검사
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-probeGitHub 계정 이름을 <username> 자리에 사용하여 공유 컬렉션에서 결과를 식별할 수 있게 하세요.
풀 리퀘스트를 열 수 없거나 열고 싶지 않다면, 다음 중 하나도 괜찮습니다:
이슈를 열고 결과 파일을 첨부
결과 파일을 저장소 작성자에게 직접 전송 (클라이언트 버전, 운영체제, 시크릿을 제거한 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/listtools/callresources/listresources/readresources/templates/listprompts/listprompts/getsubscriptions/list스텁
도구:
echo_echo: 수신된_arguments, 클라이언트 기능, 전송 관찰 결과를 반환합니다.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 호환 fetch 스텁입니다.
스모크 테스트
이 디렉터리에서 실행:
npm run smoke또는 npm 없이:
node scripts/smoke-stdio.mjs스모크 테스트는 트레이스를 다음 경로에 기록합니다:
/tmp/mcp-probe-smoke.ndjson트레이스 로그
서버는 진단 메시지를 stdout에 기록하지 않습니다. stdout에는 MCP JSON-RPC 메시지만 포함되어야 하기 때문입니다. 진단 메시지는 stderr와 트레이스 파일로 전달됩니다.
기본 트레이스 경로:
/tmp/mcp-probe.ndjsonOpenCode 구성의 트레이스 경로(opencode.json):
/tmp/mcp-probe-opencode.ndjson각 줄은 JSON 형식입니다:
ts: 타임스탬프pid: 서버 프로세스 IDdirection:in또는outpayload: 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존재: 클라이언트가 비도구(non-tool) 프리미티브를 적극적으로 조회함input_required이후 재시도: MRTR/일리시테이션 흐름이 처리됨
Codex CLI 또는 ChatGPT Desktop으로 테스트하기
Codex CLI, ChatGPT Desktop 앱, Codex IDE 확장은 로컬 MCP 서버를 지원하므로 동일한 로컬 stdio 서버를 사용할 수 있습니다.
Codex CLI 등록 예시(이 디렉터리에서):
codex mcp add probe --env MCP_PROBE_TRACE=/tmp/mcp-probe-codex.ndjson -- node stdio-server.mjs그런 다음 Codex에서 /mcp를 사용하여 활성 서버를 확인하고 위와 동일한 프로브 도구를 요청하세요.
ChatGPT Desktop 앱의 경우 Settings에서 새 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는 newline으로 구분된 JSON-RPC를handleJsonRpc에 연결하는 어댑터일 뿐입니다.향후
http-server.mjs는 동일한handleJsonRpc를 호출하고 전송 객체에 HTTP 헤더를 전달할 수 있습니다.기존
search및fetch도구는 이미structuredContent와 URL 기반 결과를 갖춘 간단한 ChatGPT 호환 형태를 따릅니다.
향후 추가할 HTTP 특화 검사 항목:
MCP-Protocol-Version,Mcp-Method,Mcp-Name정적/Bearer 헤더
OAuth 동작
도구 파라미터의
x-mcp-headerStreamable HTTP 응답 동작
Available Tools
9 toolscreate_handleCreate HandleA
Creates an explicit short-lived probe handle to test stateless multi-call tool design.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Target system or scenario for the handle. |
Output Schema
| Name | Required | Description |
|---|---|---|
| handle | Yes | |
| target | Yes | |
| expiresInSeconds | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Any message to echo back. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| observed | Yes | |
| arguments | Yes |
TDQS
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.
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.
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.
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.
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.
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 DocumentARead-only
ChatGPT-compatible read-only fetch stub. Retrieves full text for an ID returned by search.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Document ID returned by search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Topic for the requested follow-up input. |
TDQS
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.
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.
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.
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.
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.
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.
resource_link_resultResource Link ResultC
Returns a resource_link content item pointing at a probe resource.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 states the return type and points at a probe resource, but gives no information about side effects, error behavior, permissions, or whether the operation is read-only. This is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It is appropriately concise and front-loaded, stating the core behavior immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is too sparse. It does not explain what a resource_link content item is, what a probe resource is, or how to handle the result. This leaves significant gaps for an agent selecting among sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description has no need to explain parameter syntax or semantics. The baseline for zero parameters is 4, and the description does not miss anything here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a resource_link content item, which is specific and differentiates it somewhat from generic tools. However, it does not clarify what a 'probe resource' is or how this differs from sibling result tools 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.
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 lacks any mention of prerequisites, exclusions, or sibling tools, leaving the agent without a basis for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch Probe DocumentsARead-only
ChatGPT-compatible read-only search stub. Returns result IDs, titles, and URLs. Use fetch to retrieve full text.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds context by stating it is a 'stub' and returns specific fields (IDs, titles, URLs). This provides behavioral insight beyond the annotation, though it does not elaborate on limitations like pagination or result counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that states purpose, output, and usage guidance without any redundancy. It is front-loaded and immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter search tool, the description covers its return values and relationship to fetch. The presence of an output schema and annotations reduces the burden, and the description fills the essential gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single 'query' parameter with a basic description. The tool description does not add any additional semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool performs a search, returns result IDs, titles, and URLs, and is specifically for probe documents. It distinguishes from the sibling tool 'fetch' which retrieves full text, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use fetch to retrieve full text,' providing a clear alternative and when to use another tool. It also labels the tool as read-only, suggesting it is for search queries only, not for retrieval or modification.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional label for the generated result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| label | Yes | |
| answer | Yes | |
| nested | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Probe query to associate with the handle. | |
| handle | Yes | Handle returned by create_handle. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| handle | Yes | |
| target | Yes | |
| callCount | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
9 tools is a well-scoped set for a compatibility probe, covering the key MCP client interaction patterns without redundancy or bloat.
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
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
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
MCP server to assist with JxBrowser development.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Public MCP server for summaries, DNS lookup, catalog, replies, and JSON checks.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceMCP server providing greeting and echo tools for testing and demonstration.
- AlicenseAqualityBmaintenanceAn MCP server that provides echo resource, tool, and prompt functionality for testing and demonstration.9161MIT
- AlicenseNot gradedqualityDmaintenanceA test server that exercises all MCP protocol features including prompts, tools, resources, and sampling, intended for MCP client builders.274,866Inno Setup
- AlicenseNot gradedqualityDmaintenanceA test MCP server that exercises all MCP protocol features, including prompts, tools, resources, and sampling, for client builders.274,866Unlicense - libtelnet variant
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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