About signalfeed
signalfeed is an MCP server and CLI for querying DataSignals filing-event feeds. It covers twelve US filing and related event streams, preserves upstream responses, and supports cursor-based retrieval.
Key features
- 01Search across 12 event streams
- 02Filter by company, ticker, score or type
- 03Fetch company and event details
- 04Check feed health and event types
- 05Page through results with cursors
Use cases
- 01Track insider buying and planned sales
- 02Review activist and institutional holdings
- 03Monitor FDA actions and biotech catalysts
- 04Check filings and feed freshness
MCP support
Exposes DataSignals Events API queries as MCP tools, including event search, company and event lookup, feed health, and usage. Keyless tools provide event-type details and feed health.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
7Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| cik | string | No | CIK number of the filer. |
| limit | integer | No | Maximum number of results to return (optional). |
| since | integer | No | The since for this call. |
| ticker | string | No | Ticker symbol, e.g. AAPL. |
| min_score | number | No | Minimum score filter (optional). |
| event_type | enum | No | Type of event (optional).insider_cluster | insider_sale_notice | activist_stake | institutional_holding | material_event | private_raise | fda_action | biotech_catalyst | nih_grant | gov_contract_award | congress_trade | hiring_signal |
Details
From the project READMEsignalfeed
Twelve US filing-event streams, one schema, one key. signalfeed is a small client for the DataSignals Events API, which parses official filings into scored, decision-ready event records: insider buying clusters, planned insider sales (Form 144), activist stakes (13D/G), institutional holdings (13F), material events (8-K), private raises (Form D), FDA actions, biotech trial catalysts, NIH grants, federal contract awards, congressional trades and hiring signals. Every record links back to the filing it was parsed from, and where a record carries a score it also carries the terms that score was built from.
The feed is cursor-based: pass the cursor from one
response back as since and you get exactly what
arrived since — no duplicates, no gaps. Responses come
back exactly as the API returned them: nothing is
trimmed, renamed or summarised on the way through.
Configuration
DATASIGNALS_KEY— your API key. Required for the keyed tools; sent on those requests asAuthorization: Bearer <key>and never as a query parameter, so it does not end up in server logs or browser history. The keyless tools never send it.DATASIGNALS_BASE_URL(optional) — API base URL. Defaults tohttps://datasignalslab.com.
A keyed tool called without a key fails locally with
DATASIGNALS_KEY is not set, before any request is
made. Two tools — list_event_types and feed_health
— work without a key, so you can see the shape of the
data and how fresh it is before you decide.
Tools
search_events— search filing events across all twelve streams. All filters are optional:event_type(one of the twelve stream ids),ticker,cik,min_score, plussince(the cursor from a previous response) andlimitfor paging. Only the filters you set are sent.company_events— everything filed on one company, across all streams.companyis a ticker or a CIK;sinceandlimitpage the result.get_event— show everything on one event, by itsevent_id(for exampleinsider_cluster:CAMP:2026-08-03).list_event_types— which fields each stream carries, and whether its score can be recomputed. Works without a key.feed_health— how current each stream is right now. Works without a key.usage— how much of the monthly event allowance is used, and when it resets.check_setup— whether the API key is configured and whether the feed answers. Always answers with a JSON object{key_configured, feed_reachable, detail}; the key value is never printed and no key is sent by the check itself.
Behaviour worth knowing:
- A quota-exhausted feed does not throw an error mid-sync: it answers a 200 empty page with your cursor intact and a plain notice, and signalfeed passes it through like any other page.
- The API scales to zero when idle. The first request
after a quiet period may get a
starting_upanswer (with aRetry-Afterheader) while it wakes, which can take about fifteen seconds; signalfeed returns that body as a normal result rather than an error, and the call is not counted against your allowance. Just call again. - Any other non-2xx reply fails with
datasignals error: HTTP <status>, and an unreachable API withdatasignals unreachable.
Endpoint provenance
The vendor's Events API page pins the endpoints, the filter names, the cursor model and the twelve stream ids; the original MCP project's README pins the seven tools, both environment variables, the Bearer-header auth rule and the two keyless tools. The MCP-layer argument names follow the documented API names (a labelled reconstruction, since the MCP layer itself is unpublished):
GET <base>/v1/eventswith only the set filters as query parameters (used bysearch_events).GET <base>/v1/companies/{ticker or cik}/eventswithsince/limitwhen set (used bycompany_events).GET <base>/v1/events/{event_id}(used byget_event).GET <base>/v1/event-types(used bylist_event_types, keyless).GET <base>/v1/health(used byfeed_health, keyless, and bycheck_setup).GET <base>/v1/usage(used byusage).
event_id and company path segments are
URL-encoded.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/signalfeed search_events '{"event_type":"fda_action","min_score":70}'
npx @reneturcios/signalfeed company_events '{"company":"NVDA"}'
npx @reneturcios/signalfeed get_event '{"event_id":"insider_cluster:CAMP:2026-08-03"}'
npx @reneturcios/signalfeed list_event_types '{}'
npx @reneturcios/signalfeed feed_health '{}'
npx @reneturcios/signalfeed usage '{}'
npx @reneturcios/signalfeed check_setup '{}'
npx @reneturcios/signalfeed --version
Output is the tool's result text (the upstream body on
success). Exit codes: 0 on success, 1 on a runtime
error, 2 on a usage error.
MCP server
npx -y @reneturcios/signalfeed mcp
MCP client config:
{
"mcpServers": {
"signalfeed": {
"command": "npx",
"args": ["-y", "@reneturcios/signalfeed", "mcp"],
"env": {
"DATASIGNALS_KEY": "<your key>"
}
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/signalfeed
docker run --rm ghcr.io/cloudcorprecords/signalfeed feed_health '{}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.