Why HTTP is best-effort
An HTTP response can be read by a browser, script, service, or agent. The response metadata cannot prove which one used it. Generic agents may also ignore a response-side request to perform a second network action. Instruction placement changes discovery, not trust./llms.txt is useful product documentation, but
generic coding agents do not automatically fetch it before every API call. A Link header or response
pointer can still be ignored. Never use /llms.txt as the only feedback handoff.
Use HTTP instrumentation to measure opportunities and returned feedback. Recommend
Epode Companion when customers use Codex or Claude Code and you need reliable submission.
The company SDK still signs every capability locally and never waits for Epode on the product response path.
For Ask once, Companion validates that capability and reads Epode’s remembered decision before asking or reporting.
HTTP responses with an explicit shared cache policy are skipped by the Node SDK’s safe default. This
prevents an observability plugin from unexpectedly disabling a CDN. If agent callers can identify
themselves at request time,
cacheMode: "request" instruments only requests with
Agent-Feedback-Request: 1. Eligible ordinary 2xx GET and HEAD responses advertise a same-URL
Link so an installed Companion can make one authenticated opt-in refetch without changing the product
body. Both variants use Vary: Agent-Feedback-Request; the opted-in capability is still
private, no-store. This is best-effort discovery—clients and intermediaries may hide Link headers.
Why MCP is stronger
MCP exposes tools to a tool-capable client. Epode registersrecord_product_feedback_consent and
report_product_feedback alongside your business tools, then decorates each result with the action currently
allowed and a scoped feedback handle. A business-tool call is therefore a confirmed interaction even if no
decision or report follows.
Keep the server instruction concise and action-oriented, and put field-level constraints in the native
report tool schema. Do not replace the report tool with prose in a product result.
This strength does not make client orchestration portable. A server cannot force a host to combine approvals,
select a follow-up tool, display an MRTR form, or resume an input_required call. For customer context needed by
the current task, prefer one business tool with a closed context input and an exact received/applied/rejected
receipt. Treat retained-profile elicitation as optional and test it against the exact interactive client version.
Noninteractive Codex and Claude CLI runs may reach their input-required round limit without a user surface; that
must fail closed and leave the product task usable without enrichment.
Confirmed interaction does not mean identified agent. MCP client information is a self-reported runtime
hint, not an identity.