Start with the public error code, request ID, current domain manifest, and the same request-specific Doris identity. Do not copy tokens, passwords, raw OAuth responses, or private model bindings into an issue.
doris-mcp-server --version
curl --fail http://127.0.0.1:3000/live
curl --verbose http://127.0.0.1:3000/readyRecord:
- package version and commit/image digest;
- transport and exposure mode;
- normalized Doris version and deployment mode;
- domain/child and public
reason_code; - request ID and timestamp;
- whether
/liveand/readydiffer; - whether the same Doris account can run a minimal equivalent read-only check.
Symptom: startup refuses 0.0.0.0 or another non-loopback address.
Resolution: enable one reviewed authentication mode and deploy behind TLS with
validated Host/Origin. Use ALLOW_UNAUTHENTICATED_NON_LOOPBACK=true only for
isolated disposable testing.
External OAuth and Doris-backed OAuth cannot be active together. Select one trust model. Also verify required issuers, resources, keys, base URLs, proxy CIDRs, and secrets.
Doris-backed OAuth requires Streamable HTTP and WORKERS=1 in 1.0 because its
authorization and per-user pool state are process-local.
doris_admin is reserved and intentionally unavailable. Remove attempts to
enable it; there is no 1.0 management-tool bypass.
Every name in MCP_TOOL_PROVIDERS must resolve to an installed, valid entry
point with non-colliding bounded schemas. Remove the name or repair the
provider. Allowlisted provider failures are fail-closed by design.
The process is alive, but the bounded Doris readiness route failed.
Check:
- FE MySQL host/port and network policy.
- The configured database exists and is visible.
- Credentials and account lock/expiry.
- TLS/proxy requirements between Server and Doris.
- Pool exhaustion or repeated timeout disposal.
- Multi-FE candidates and whether at least one is healthy.
Test with the same account and network path. Do not treat a different admin
account's successful SELECT 1 as proof that the MCP identity works.
The bind address is not an allowlist. Confirm the actual Host and Origin
seen by the Server, reverse-proxy rewrites, TLS scheme, and trusted proxy CIDR.
Avoid globally trusting forwarded headers.
Ensure:
MCP-Protocol-Versionmatches_meta;Mcp-Methodexactly matches JSON-RPCmethod;Mcp-Namematches the tool/resource/prompt name or URI;Acceptincludes JSON and event-stream media types;- the proxy preserves these headers.
Use /mcp for MCP 2026-07-28. Validated 2025-06-18 clients such as Dify
1.16.1 and 2025-11-25 clients must use the explicitly enabled
/mcp/legacy endpoint. HTTP+SSE clients must migrate.
Confirm the credential type matches the enabled mode, the token is active and unexpired, issuer/audience/resource match, and the proxy does not remove the Authorization header.
Read the exact required scope. A domain discovery grant does not imply a child call grant. Pre-1.0 names and wildcard guesses are invalid.
An unauthorized child is intentionally indistinguishable from a nonexistent child. Re-run domain discovery under the same identity and verify exact discovery/call scopes and channel enablement.
MCP authorization may pass while Doris RBAC denies the actual object. Test the same SQL/metadata view with the same Doris account, then grant only the minimum required privilege. See the fine-grained access guide.
Call the domain with {} again and use the new manifest. Route, permission,
provider, model, feature probe, or capability cache generation may have
changed.
Use structured reason_code and evidence sources. Common causes:
- Doris version below the feature range;
- mixed or unknown active component versions;
- missing system table/function/index;
- disabled or unhealthy optional provider;
- unreadable metadata for the request account;
- incomplete lineage store;
- stale evidence outside its allowed window.
Call doris_cluster.get_runtime_capabilities when authorized. Do not edit the
description or force execution around callable=false.
This indicates catalog/provider/schema drift. Built-in manifests and flat tools have hard budgets. Regenerate/check the tool catalog and reduce provider descriptions/schemas; do not raise limits casually because Host context is a product contract.
Submit one read-only statement. Remove DDL/DML/administration, stacked statements, unsafe comments, or unsupported query shape. The Query child is not an administrative SQL escape hatch.
Use the exact discovered schema. Validate identifier fields, parameter names and types, query target shape, requested format, and limits.
Reduce scanned data, add predicates, use Explain/diagnosis, lower requested result volume, and inspect Doris workload state. Retry only when the error says it is retryable. A timed-out connection may be disposed intentionally.
Use smaller pages, narrower columns, stronger filters, aggregation, or a lower limit. Do not increase process limits before estimating serialized response size and model context impact.
Check FE HTTP host/port, allowlist, route identity, profile retention, query ID, and the Doris account's visibility. A working MySQL route does not prove FE HTTP is configured.
An invalid cursor can mean expiry, tampering, visibility change, principal change, wrong list type, different state secret, or a changed snapshot. Restart the list without a cursor.
With independent replicas, configure the same
MCP_STATE_HANDLE_SECRET. Do not decode or construct cursors in the Host.
- Ensure no log/banner/debug output is written to stdout.
- Launch
doris-mcp-server, notdoris-mcp-client. - Confirm the Host uses MCP
2026-07-28request metadata. - Check environment inheritance and executable path.
- Reproduce with a true subprocess, not a shell pipeline that mixes streams.
Confirm ADBC_ENABLED, Arrow Flight SQL ports, provider installation, and live
connectivity. Confirm the end-user request explicitly selected ADBC and the
call includes explicit_adbc=true. ADBC execution intentionally fails closed
on token-bound routes. Use the MySQL read-only query child for ordinary SQL.
Confirm OSSIE_ENABLED, model directory, reviewed schema revision, exact
model_ref, private binding manifest, semantic scopes, and Doris visibility.
The Server never guesses a model.
Confirm METRICFLOW_ENABLED, the absolute provider command, project directory,
sidecar protocol version, exact model_ref, Doris-dialect support, timeout and
output bounds, semantic scopes, and Doris visibility. Provider stderr is
intentionally hidden; inspect operator logs with secrets removed. The sidecar
must compile only—Doris SQL execution belongs to the MCP Query runtime.
Check normalized Doris version, companion producer health, queryable store,
required canonical columns, and request permissions. Use
get_lineage_capability_status before tracing. Audit fallback is explicit and
may be unavailable or incomplete.
Include:
- version, commit/image digest, OS/Python;
- sanitized configuration keys (no values for secrets);
- domain manifest availability/reason codes;
- health status and timestamps;
- request IDs and sanitized log lines;
- minimal reproducible read-only SQL with sensitive identifiers/data replaced;
- whether the failure reproduces on stdio, HTTP, or both.
Exclude:
- bearer/admin tokens, passwords, JWT keys, OAuth client secrets;
- Authorization headers, token files, raw environment dumps;
- private Ossie bindings, connection URLs with credentials;
- customer SQL/data unless explicitly sanitized and approved.