Privacy
Exactly what the MCP server and the connectors record about a call, and what they never receive.
The Signals MCP server answers tool calls. It never receives your prompts or your conversation: a connector (Claude, ChatGPT, the Excel add-in, your own agent) sends only the name of the tool it wants and the arguments the assistant composed for it.
Those arguments are of two kinds:
- Identifiers: a ticker, an accession number, a document or transcript
id, a metric key, a fiscal period, a date range, a limit. Where a record
below lists
ticker, this is the value it holds. - Free text: a search query, keywords, anything else a caller typed. Free
text is used to answer the call and then discarded. It is not logged, not
stored, and not sent to error tracking; when an error message would quote
it, the text is replaced with
[redacted]before the error is recorded.
What is recorded
These are the only records a call produces. The list is enforced by a test that calls every MCP tool with marker text in every free-text argument and checks that each record holds exactly these fields and never the marker.
| Record | Fields |
|---|---|
request_log: one line per request | ts, request_id, account_id, api_key_id, key_prefix, mode, method, path, status, duration_ms, bytes_out, client_ip, user_agent |
application_log: one line per tool call, and per rejected or failed call | event, tool, lane, account_id, fetch, ok, request_id, code, argument_names, skill_id, version, outcome, error_type |
usage_ledger_daily: one row per key per day, for billing | id, account_id, api_key_id, period_date, request_count, error_count, bytes_out, units_spent, datapoints_returned |
usage_ledger_events: one row per metered call, shown on GET /v1/usage | id, account_id, api_key_id, request_id, method, route, status_code, datapoints, units, at |
usage_counters: weekly counters behind the usage receipt, expiring after 8 days | account_id, tool, ticker, day |
argument_names records the NAMES of the arguments a rejected call used
(for example symbol,limit), never their values. key_prefix is the first
characters of the key, never the secret. api_key_id is empty for a
connector signed in with OAuth.
What is never recorded
- Your prompts, your conversation, or the assistant's reply.
- The value of any free-text argument (a query, keywords).
- The response body of a tool call.
- The full API key or bearer token.