mcpm:mcp.
This guide covers the Splunk-specific details. For what MCP Manager sends, how forwarding behaves, who can configure it, and general troubleshooting, see Export to SIEM.
What you’ll need
- A Splunk Cloud Platform or Splunk Enterprise deployment with HTTP Event Collector enabled.
- A HEC token, and the index it writes to (the token’s default index is used, since MCP Manager sets no
indexon its events). - Access to MCP Manager with the Manage OpenTelemetry collector capability.
Step 1: Determine your HEC URL
MCP Manager posts to the URL you enter exactly as written, so paste the full collector path. Splunk accepts JSON events at either/services/collector or /services/collector/event; both work with MCP Manager.
<host> with your Splunk Cloud stack name (the first label of your Splunk Web URL). Splunk Cloud Platform HEC listens on port 443 for paid stacks and on 8088 for free trials; Splunk Enterprise defaults to 8088. MCP Manager does not follow redirects, so a URL that answers with a 3xx fails the export rather than being retried at the new location.
Step 2: Create a HEC token in Splunk
In Splunk Web, go to Settings → Add Data → Monitor → HTTP Event Collector, name the token, choose the index it should write to, and submit. Copy the token value.Step 3: Connect MCP Manager to Splunk HEC
Splunk authenticates HEC requests with anAuthorization header whose value is the keyword Splunk followed by a space and the token.
Open the OpenTelemetry collector panel
Enter the HEC URL as the logs collector URL
https://http-inputs-acme.splunkcloud.com/services/collector. The Logs format selector stays disabled until this field has a value, because the format applies to the logs destination.Set the logs format to Splunk HEC
400. A hint under the selector repeats the URL and header requirements once HEC is selected.Add the Authorization header
- Field name:
Authorization - Field value:
Splunk <your-hec-token>
Splunk ; do not prefix it with Bearer. MCP Manager sets Content-Type and Content-Length on every request itself, and ignores a configured header with either of those names (or Host or Transfer-Encoding), logging a warning on the gateway that names the ignored header.Save the configuration
set_otel_configuration through the Admin API and MCP server with logsFormat set to splunk_hec:
logsFormat keeps the stored format, and a collector saved before the setting existed behaves as otlp. Switching an existing collector between formats on the same URL takes effect for new records within a few seconds; records already queued are flushed to the previous destination first.
Step 4: Verify logs are flowing
Trigger an MCP call through a gateway (atools/list call is enough), wait a few seconds for the batch to flush, then search Splunk:
mcpm.correlation_id field — at minimum a proxy_request_success and a proxy_response_success — so a single tools/list call shows up as a small group.
If nothing arrives, check Alerts in MCP Manager for a “Failed to export telemetry logs to OTEL collector” alert. For Splunk HEC the alert names the HTTP status and, when Splunk sent one, the HEC reply code and its meaning — for example Splunk HEC code 4 (Invalid token) — so you can tell a bad token from a wrong index without reading Splunk’s own logs. See Troubleshooting for what each code means.
How each log record becomes a Splunk event
MCP Manager maps each OpenTelemetry log record to one HEC event the same way the OpenTelemetry Collector’ssplunk_hec exporter does, so events look the same whether they arrive from MCP Manager directly or through a Collector. The log body becomes the event payload and every attribute becomes an indexed field.
fields object carries the record’s metadata as indexed fields: user.email, user.full_name, http.response.status_code, mcpm.mcp.method, mcpm.mcp.server_name, mcpm.mcp.server_url, mcpm.mcp.gateway_name, mcpm.mcp.host_name, mcpm.mcp.feature_type, mcpm.mcp.feature_name, mcpm.log.type, and mcpm.correlation_id, along with trace_id, span_id, otel.log.severity.text, otel.log.severity.number, service.name, and service.version. Attributes that are empty on a given record are omitted rather than indexed as null, and nested attribute maps are flattened into dotted keys.
The event payload follows the workspace’s Export content setting (see Control what MCP Manager exports). With Full data the event carries the request and response headers and bodies; with Metadata only the same record arrives with its headers and body set to null, so field extraction and searches by mcpm.mcp.method or user.email keep working while message contents stay out of Splunk.
How MCP Manager delivers to HEC
MCP Manager batches log records before sending and reports every delivery problem as an alert. The numbers that shape what you see in Splunk:- Batching. Records are queued and flushed as one export every 5 seconds, or as soon as 512 records are waiting, so an event typically appears in Splunk a few seconds after the MCP call.
- Request size. Each export is split into HTTP requests of at most 1,000,000 bytes of newline-delimited JSON, the limit Splunk Cloud Platform documents for HEC request content. Requests are sent one after another under a single 30-second deadline for the whole export.
- Oversized records. A single record whose event alone exceeds 1,000,000 bytes is never sent. It is reported as its own alert that names the byte limit, and the rest of the batch is delivered. Under Full data a very large tool result can hit this; Metadata only cannot.
- One attempt. A failed request is not retried. Splunk’s
503(HEC code9, Server is busy) fails that export and raises an alert like any other error, and the records in it are not re-sent. - Confirmed delivery only. MCP Manager counts records as delivered only when Splunk answers HTTP
200with{"text":"Success","code":0}. Any other reply, including a2xxwhose body is not a HEC reply (for example an HTML page from a proxy in front of Splunk), is reported as a failure. MCP Manager reads at most 64 KiB of a reply; a longer or cut-off reply is reported as incomplete.
Troubleshooting
Splunk answers every HEC request with a JSON reply carrying a numericcode. MCP Manager parses it and puts both the HTTP status and the code’s meaning in the alert, and uses the code in alert deduplication, so two different Splunk rejections behind the same HTTP 400 (for example an invalid token index and a malformed event) raise two alerts instead of one hiding the other. The codes you are most likely to see:
404 means the URL path is wrong, since MCP Manager appends nothing: confirm it ends in /services/collector or /services/collector/event. A 401 or 403 with codes 1 to 4 points at the token or the header, and a 400 with code 6 almost always means the collector was saved with the OTLP format while pointed at a HEC URL.
Export is failing with 400 and HEC code 6 (Invalid data format)
Export is failing with 400 and HEC code 6 (Invalid data format)
Export is failing with 400 and HEC code 10 (Data channel is missing)
Export is failing with 400 and HEC code 10 (Data channel is missing)
X-Splunk-Request-Channel with a GUID value in MCP Manager. With the header present, Splunk answers code: 0 plus an ackId, and MCP Manager treats that as delivered.Events arrive but the index is wrong
Events arrive but the index is wrong
index field, so every event lands in the token’s default index. Change the default index on the token in Splunk Web rather than looking for a setting in MCP Manager.An alert says a record exceeded the request limit
An alert says a record exceeded the request limit
Test the HEC endpoint manually
Test the HEC endpoint manually
{"text":"Success","code":0} with HTTP 200 means the URL and token are valid. A 401 or 403 with codes 1 to 4 is a token problem, 404 is a wrong path, and 400 with code 10 means indexer acknowledgment is enabled on the token.Send traces to Splunk Observability Cloud
Splunk Observability Cloud accepts OTLP traces directly, so request traces need no Collector: set Traces collector URL to your realm’s trace endpoint,https://ingest.<realm>.observability.splunkcloud.com/v2/trace/otlp, and add an X-SF-Token request header carrying an Observability Cloud access token. Traces are always exported as OTLP regardless of the Logs format setting, and the same Request headers are sent with both signals, so a workspace that sends logs to HEC and traces to Observability Cloud carries both the Authorization: Splunk … header and X-SF-Token; each endpoint ignores the header it does not use.
Because MCP Manager sends OTLP/HTTP JSON and Splunk’s trace intake documents protobuf, verify delivery before relying on it, and fall back to a self-hosted Collector for traces if JSON is rejected. Splunk Observability Cloud has no OTLP logs endpoint — its /v2/trace/otlp and /v2/datapoint/otlp paths take traces and metrics only — which is why logs go to HEC instead.
Find your realm
Every Splunk Observability Cloud host is realm-specific (for exampleus0, us1, eu0, eu1, ap0). Your realm determines the ingest host https://ingest.<realm>.observability.splunkcloud.com. Find your realm in the Splunk Observability Cloud UI before configuring the traces endpoint.
Further reading
Self-hosted Collector
Export to SIEM
Admin API: Logging
Viewing Logs
External sources
Set up and use HTTP Event Collector
Authorization: Splunk header.Splunk Cloud Platform service details
OpenTelemetry Collector splunk_hec exporter
Splunk OTLP/HTTP exporter reference
/v2/trace/otlp and /v2/datapoint/otlp paths with X-SF-Token auth — and no logs endpoint.
