Query Markup Documents - On-device hybrid search for markdown files with BM25, vector search, and LLM reranking
Signal Bureau is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
SigB (Signal Bureau): maintained, source-traced record of entities and events in your named domain.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http signal-bureau-mcp https://api.signalbureau.ai/api/mcp
# 2 — ask your agent for something these tools do
# start_here, traverse, search_entities and 26 more
Signal Bureau costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http signal-bureau-mcp https://api.signalbureau.ai/api/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
29 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
START HERE — first call, no arguments, no key, no charge. Who Signal Bureau is and what we are not, the tests you can run to check that claim yourself, what is free (most of it), what is paid (Watches and Reads) at live published prices, how to propose coverage we don't carry, and how buying works. Read this before evaluating anything else here.
No parameter schema on file.
To see how the record fits together, start at an entity or event (e.g. Hormuz) and traverse its maintained relationships; each step returns its relation type, receipts, standing and time. Walk the maintained record node to node. Opens ONE node (schema sb.node.v1): an entity, a situation, a corroborated claim or a co-mention relation, with its identity, standing (five separate records, never one sc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | A node id (sb:e/<hex>, sb:p/<hex>, sb:r/<hex>) or a starting point by name (entity:<label>, event:<slug>). Optional when cursor is given. |
| level | string | no | node (default): the node with the first page of children and relations; children or relations: page through that level only. |
| cursor | string | no | A cursor from a previous node's children or relations, exactly as returned. |
| pageSize | number | no | Items per level, 1-50 (default 10). |
| edgeKind | string | no | Only relations of this kind. |
| depth | number | no | Must be 1 (one level per call). Anything else is refused with code depth_limit. |
| asOf | string | no | The knowledge cutoff to read at. Only the deploy's cutoff is served; another value is refused with code as_of_unavailable. |
Find tracked entities/topics by name or vertical (e.g. 'iran', 'semiconductors'). Every row is self-describing: canonicalId (sb:e/..., the durable identity the traverse door serves; slug is a discovery input and may change), aliases, addresses, and counts.attention.current (tracked coverage on the detection day) beside counts.evidence.total (the retained corpus, firstSeen..lastSeen), each count wi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
Full dossier for one entity: its canonical identity (canonicalId sb:e/... is durable and equals the traverse node id; slug is a discovery input and may change; aliases; addresses for the page, the node door and MCP), self-describing counts — counts.attention.current (documents and coverage verticals on the detection day, scope tracked-coverage) and counts.evidence.total (documents and publishers o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
The maintained record for one subject — the ONE file its /exhibit page renders from and GET /api/record/{slug} serves (the earlier names get_truth_record and GET /api/truth/{slug} answer identically, permanently), so their numbers agree by construction and a value-parity gate fails the build if they stop: what the subject is, the first-party documents we read, the claims and how many separate publ
| Parameter | Type | Required | Notes |
|---|---|---|---|
| subject | string | no | Which subject, by slug or name — "Interest Rates", "interest_rates" and "interest-rates" all reach the same record. Omit for the flagship. |
| topic | string | no | The earlier name of subject. Still accepted, always will be. |
| claims | string | no | Unfold one consensus list a page at a time instead of fetching the record: kernel (the who/what/when/where claims), frames or retired. By default those lists come folded: a count, a first page and a n |
| cursor | string | no | A nextCursor from a previous answer, exactly as returned. Implies its list. |
| pageSize | integer | no | Rows per page when unfolding, 1-100 (default 25). |
Tracked world events (situations, races, negotiations) the engine follows as named arcs — each with its entities, related market-question count, cross-domain mention volume, and first/last-seen dates. Optional query filters by name or entity.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Filter by event name or entity (optional) |
| limit | number | no | How many (default 20, max 50) |
START HERE for browsing — the cheap read (500/day, no model work). The full machine-readable signal feed (same payload as GET /api/signals): every entity currently flagged by the attention engine, with trajectory, domains, desk membership, canonical identity (canonicalId sb:e/..., durable; slug may change), self-describing counts (counts.attention.current vs counts.evidence.total, each with unit,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | How many signals (default all flagged) |
| direction | string | no | Filter by trajectory regime: rising|fading|steady|new|insufficient_history. An unknown value is refused, never answered with an empty list. |
The entities/topics accelerating most across the information environment right now, ranked by cross-domain attention. Every row is self-describing: canonicalId (sb:e/..., the durable identity the traverse door serves; slug is a discovery input and may change), aliases, addresses, and counts.attention.current (tracked coverage on the detection day) beside counts.evidence.total (the retained corpus,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | How many (default 10, max 50) |
Today's morning brief — the daily synthesized narrative of what moved across the information environment and what to watch, from the engine's cross-domain analysis. Same content as the public /today page. Carries gaps (where prediction-market money and the day's coverage disagree) and watch (what would change the story); every market figure in either arrives with the contract URL behind it, or
No parameter schema on file.
Ask what the tracked record shows about a named entity or unfolding event: what changed, what the record holds now, and which sources corroborate it. Not general knowledge or history — grounding is live tracked coverage. 25 questions a day per network address need no key; then each costs one Read on a free key (POST /api/keys). Async — a ticket in ~1s, collected with get_answer.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| question | string | yes | — |
| fresh | boolean | no | Force a new synthesis instead of the maintained record's recent answer to the same question (default false — shared state is the default) |
| observer | string | no | Optional. The observer this question is asked as (e.g. an observer list_standard_watches names). Recorded as declared on the answer's replay block; default "public". A malformed value is named in `r |
| watch | string | no | Optional. The Watch this question is asked under. Recorded as declared on the answer's replay block. A malformed value is named in replay.declared.rejected, never applied. Same field as POST /api/ |
Collect an async answer by ticketId (from ask). Free and unmetered — the work was paid for once at submit. status:'working' → poll again after pollAfter seconds; 'done' → the complete answer rides in this response; 'failed' or 'lost' → the reason, stated plainly, and asking again is the remedy.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticketId | string | yes | The uuid the ask tool returned |
What separate sources agreed on in the published window — the maintained record's corroboration layer. Each event carries the claim as its sources state it, the corroboration tier, two counts — publisherCount (distinct outlets that carried it) and originCount (separate evidentiary origins: a wire republished by fifteen outlets, two pages behind one address, or three outlets relaying what one named
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | How many events (default 20, max 60) |
| tier | string | no | Optional filter: 'strong' (carried from 4 or more separate origins) or 'moderate' (2 or 3 separate origins). An unknown value is refused, never answered with an empty list. |
The correction record: the flagged-vs-control repricing regression at population level (estimate, 95% CI, cohort sizes, window, as-of), plus the dated retirement object for the case-study track record we withdrew in 2026 when re-measurement put it under our own publication bar. Appended, never edited, including about ourselves. This is where every withdrawal we have made is kept, dated and address
No parameter schema on file.
The grading dataset for the market sensor we cite, and only that — the prediction-market price (crowd) and the naive null it is scored against (base_rate), against how reality resolved (Brier score, log loss, skill vs base rate, 95% CIs), each price captured while its market was OPEN and graded as it matured, so the grade cannot be back-filled. No forecaster of ours is published, here or in th
No parameter schema on file.
Feed in your requirements — free-form concerns, questions, whole areas of interest — and get back an enumerated quote: your requirements intelligently grouped and disambiguated into well-formed watched topics, then checked BY CODE, topic by topic, against what we actually read: a topic is priced ($20/topic/month at the opening rate) ONLY when a desk, a Watch we keep or a standard Watch reads it fr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| requirements | string | yes | What you want watched, in your own words — one blob of text or bullet points; the desk does the grouping |
Assemble a basket and get exact prices plus Stripe checkout links. Checkout runs on Stripe's hosted page, completed by whoever holds the payment credentials. Pass dryRun:true to REHEARSE: same validation, same price math, clearly labeled, no order recorded, no links issued, nothing billed — integration-test the full flow risk-free. Item ids — plans: 'pilot', 'desk-private', and 'api' (the Metered
| Parameter | Type | Required | Notes |
|---|---|---|---|
| items | array | yes | Array of {id, quantity?, amount?} — catalog ids above; quantity applies to unit items only, and amount (USD, min 5 / max 500) applies to the 'balance' item only and is required on it |
| quoteId | string | no | Optional: the quoteId from get_quote — recorded on the order intent so the desk provisions against that exact quote. |
| topics | array | no | Optional: the topic names this order's Watch lines cover. Pass each topic's name from get_quote verbatim, so this order checks the same topic the quote priced and you see the same verdict; your own |
| string | no | Contact email to attach to the order intent (optional) | |
| dryRun | boolean | no | true → rehearse: validate + price the basket, record nothing, issue no links, bill nothing |
| idempotencyKey | string | no | Optional client key (≤128 chars): makes the orderId deterministic and a retried call return the original intent instead of recording a second one — safe machine retries |
Re-read an order intent created by create_order — the recorded basket and its honest status. Poll it after forwarding create_order's handoff note: it re-resolves each topic's payment link against the current registry, so a link still being minted shows up here when ready. Payment status for checkout purchases lives with Stripe (the payer's receipt is authoritative); metered work is receipted on
| Parameter | Type | Required | Notes |
|---|---|---|---|
| order_id | string | yes | The UUID returned by create_order |
Your meter-account statement, live: month-to-date metered Reads counted at the published tariff, your watched topics with billing/billing status and their acceptance evidence, and your daily cap. Requires your identified key on the request (x-api-key header, or authorization: Bearer sb_live_...). Without a key this tool explains how to get one — every read surface stays available in the free anony
No parameter schema on file.
Watches: configure and unfurl free; saving is the paid step. The free standard Watches, each with every coordinate explicit and a reading state (available: it has a reading today; not-yet-projected: configurable and free to unfurl, but it answers cannot-measure until its reading is built), plus the published terms: what saving a Watch costs (read from the tariff), what it includes, and its l
No parameter schema on file.
Watches: configure and unfurl free; saving is the paid step. Configure a Watch and run it once, without saving: the governed reading (sb.watch-reading.v1) plus a line per coordinate saying whether it was applied. Free, as often as you like; no key. Either start from a standard Watch (base; these read the Strait of Hormuz record) or name your own domain (domain + topics, from get_quote). For a doma
| Parameter | Type | Required | Notes |
|---|---|---|---|
| base | string | no | The standard Watch to start from: std.hormuz.maritime-operator, std.hormuz.energy-desk, std.us-iran.geopolitical-analyst. Leave it out when you name a domain. |
| domain | string | no | Your domain in your own words, e.g. Arizona startup ecosystem. Use with topics instead of base. |
| topics | array | no | The topics your domain splits into (get_quote proposes them), as names or {name, scope}; 1 to 40. Only the ones coverage we keep reads are kept; the rest come back as free coverage requests. |
| quoteId | string | no | The quoteId get_quote returned. Recorded with the Watch; the coverage is checked again here either way. |
| coordinates | object | no | The coordinates you want to change from the base Watch; every one you leave out takes the base Watch's value. Keys: observer, question, domain, interval, language, depth, cadence, selection, threshold |
| expand | string | no | Override the Watch's depth for this call: 0, 1, 2 ... or full. |
Watches: configure and unfurl free; saving is the paid step. Save a Watch to your key so you can recall it from any door and be told what changed since your last delivery. Saving is the paid step, at the published Watch rate per saved Watch per month (see list_standard_watches terms); with no free paid slot the answer is a plain payment-required with the next step, and nothing is saved or charged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| base | string | no | The standard Watch to start from: std.hormuz.maritime-operator, std.hormuz.energy-desk, std.us-iran.geopolitical-analyst. Leave it out when you name a domain. |
| domain | string | no | Your domain in your own words, e.g. Arizona startup ecosystem. Use with topics instead of base. |
| topics | array | no | The topics your domain splits into (get_quote proposes them), as names or {name, scope}; 1 to 40. Only the ones coverage we keep reads are kept; the rest come back as free coverage requests. |
| quoteId | string | no | The quoteId get_quote returned. Recorded with the Watch; the coverage is checked again here either way. |
| coordinates | object | no | The coordinates you want to change from the base Watch; every one you leave out takes the base Watch's value. Keys: observer, question, domain, interval, language, depth, cadence, selection, threshold |
| label | string | no | Your own name for the Watch. |
| watchId | string | no | Edit this saved Watch (a new version) instead of saving a new one. |
Watches: configure and unfurl free; saving is the paid step. Your saved Watches, newest version of each, active and retired. Needs your key. Same content as GET /api/v1/watches.
No parameter schema on file.
Watches: configure and unfurl free; saving is the paid step. Recall a saved Watch: its reading now (sb.watch-reading.v1) and what changed since the last time it was delivered to you. Recording this delivery is what makes the next recall's change exact. Needs your key. Same content as GET /api/v1/watches/%7BwatchId%7D.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| watchId | string | yes | The saved Watch's id (sw_...). |
| expand | string | no | Override the Watch's depth for this call: 0, 1, 2 ... or full. |
Watches: configure and unfurl free; saving is the paid step. Retire a saved Watch: it stops being recallable and frees its paid slot. Nothing is deleted; its versions and deliveries are kept. Needs your key. Same content as POST /api/v1/watches/%7BwatchId%7D with {"action":"retire"}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| watchId | string | yes | The saved Watch's id (sw_...). |
The structured daily delivery for a machine-watched topic: up to 14 days of observed items (title, url, source, date) newest-first, plus the topic's live coverage-acceptance report, which grades the coverage and shows the evidence (it does not gate billing — billing starts when the Watch starts, and the month you are in is refundable in full, any time you ask, for any reason). Delivery is pull: po
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | yes | The watched topic name (as quoted/ordered) |
| days | number | no | How many recent days to return (1-14, default 14) |
| since | string | no | Optional. What changed since then: an ISO time (2026-10-01 or 2026-10-01T12:00:00Z) or the readingId a previous call returned. Adds a delta block listing the items first seen after it, by canonical |
A newsletter DESK's machine feed at one predictable, slug-addressable location: up to 14 days of the desk's observed items (title, url, source), newest-first, from the same panel the human edition reads. Unlike watch topics, the desk roster is PUBLIC PRODUCT — the desks are: cognitive-investor, tax-nexus, crc-kras, crc-digest, space-economy, paradise-valley, lyt-intel, aztc-aasd, newspace-asu, lq-
| Parameter | Type | Required | Notes |
|---|---|---|---|
| desk | string | yes | The desk slug (e.g. 'space-economy') |
| days | number | no | How many recent days to return (1-14, default 14) |
File structured feedback with the desk: a bug, an improvement, a complaint, praise, or a question about the service itself. Free, no contact details required. Plan ONE call per report: each call is a separate write (many clients ask your user to confirm each one), so put everything in one. Caps, stated up front: summary 4,000 characters (overflow moves to detail, never cut); detail 40,000 characte
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | bug | improvement | complaint | praise | question |
| summary | string | yes | One sentence: what happened or what you want (keeps 4,000 characters; overflow moves to detail) |
| detail | string | no | The full story — reproduction steps, expected vs observed (optional; up to 40,000 characters) |
| about | string | no | Which tool/endpoint/page this concerns (optional) |
| ref | string | no | A quoteId, ticketId, or orderId to tie this to (optional) |
| reporter | object | no | Who is reporting (optional; every field optional, any may be "unexposed"). Stored with the report and used to label the work order by product. |
| attachments | array | no | Up to 5 text files stored with the report (optional). Each at most 64,000 bytes of UTF-8 content; one over its cap, or of another type, refuses the call with the reason named — nothing is cut. |
| continues | string | no | The feedbackId of part 1 when this call carries a later part of a split report (optional); the parts merge into one work order |
| part | integer | no | This part's number when a report is split (optional) |
| of | integer | no | How many parts the report has (optional) |
The state of a report you filed via send_feedback, by its feedbackId: filed, working, or resolved — with its work-order reference. A report filed in the last few hours may still read 'filed'; the response states where it is.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| feedbackId | string | yes | The feedbackId returned by send_feedback |
Propose NET-NEW coverage — a topic, entity, or standing question we don't track yet. Records a coverage request as a work order and returns its id. A daily machine pass matches it against coverage we keep; you get one status email when it matches, or a plain status at 30 days (not yet covered, with what we read nearby). Needs your human principal's contact email for follow-up. Free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | yes | What to cover — a topic, entity, or standing question |
| string | yes | Your human principal's contact email, used only to follow up on this request | |
| why | string | no | Why this coverage matters (optional — helps the review) |
| requester | string | no | Name to file the request under (optional) |
| fromGap | boolean | no | True when this request answers a coverage gap a quote reported (optional) |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Signal Bureau or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.1.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Signal Bureau can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.