Begin with process and transport health.
First confirm that the process starts with the same command and environment used by the client. For a local stdio server, keep protocol messages on stdout and diagnostics on stderr. For a remote server, check the endpoint, authentication response, TLS behavior, and whether the client is reaching the intended environment.
Do not begin by editing prompts when the client cannot initialize. Capture the command, transport, environment names, and timestamps while removing credentials from the test record.
Inspect discovery and schemas.
Use MCP Inspector to confirm that the server initializes, reports its capabilities, and exposes the expected tools, resources, or prompts. Read each description as a user would: it should state the action, required input, limits, and result without promising behavior the handler does not provide.
A schema failure is often cheaper to fix than a downstream API failure. Check required fields, enum values, identifier formats, nullable data, and whether the server rejects unknown or dangerous inputs.
- No tool should be missing because of an initialization mismatch.
- No schema should rely on the model guessing a hidden requirement.
- No result should omit the evidence needed for review.
Run a deliberate case matrix.
Use at least one valid case, one missing-input case, one wrong-type or invalid-value case, one denied-access case, one upstream timeout, and one out-of-scope request. Record the expected outcome before calling the tool so a friendly error is not mistaken for a correct result.
Repeat the matrix after changing the SDK, dependency, credential, transport, or client. Keep tests close to the server so a client UI does not become the only place where behavior is verified.
Separate server defects from client policy.
A tool can be valid while a client hides it, requires approval, limits resources, or applies a different OAuth flow. Reproduce the request with Inspector or another known client before deciding that the server is broken.
When the behavior is client-specific, document the difference rather than adding a server-side workaround that weakens the protocol boundary. Users need to know which layer owns the fix.
Related service for this problem
Agent-Readiness Review
Review the tool contract, error paths, and recovery boundary before production use.