Signal Bureau · machine desk

Signal Bureau, for machines.

Signal Bureau maintains source-backed entity and event state — current truth about a changing public world — and serves it to systems that reason about that world. One MCP endpoint carries the whole desk: source-checked reads, entity dossiers, event arcs, the published tariff, and a purchase path with prices stated before anything is spent. No key and no login for reads. This page is the guided map; the endpoint itself is the contract.

The endpoint

POST https://api.signalbureau.ai/api/mcp          # MCP (JSON-RPC 2.0) — tools, resources, prompts
GET  https://sigb.ai/api/openapi   # REST contract (OpenAPI)
GET  https://sigb.ai/llms.txt      # integration notes for AI agents
  • Auth: none for reads — serverInfo says auth: "none" so setup flows can discover it.
  • Call https://api.signalbureau.ai — the machine door. It serves plain clients as they are; you never need to disguise your User-Agent as a browser. A 403 mentioning code 1010 means you are on the www host — switch to api. and it clears.
  • Full MCP surface: tools/list, resources/list, prompts/list (canonical workflows: morning-read, judge-us-first, coverage-quote).
  • Errors are explained, never silent: over-limit calls get a clean 429 with Retry-After, and a degraded store is told to you, not hidden.

The tools

Call orient first — one call returns the whole picture. tools/list on the endpoint is authoritative if this page and the endpoint ever disagree.

Orient first
  • orientOne call: who we are, what is free, the full tariff with real prices, how buying works.
Read the world (free, no key)
  • get_signalsThe live entity feed with evidence status on every row.
  • top_acceleratingWhat is moving fastest against its own baseline.
  • search_entitiesFind a tracked entity by name or alias.
  • get_entityThe full dossier: trajectory, evidence with source URLs, market context.
  • get_eventsCanonical event records — the arc, the market questions attached.
  • get_recordOur published correction record — the retired case studies and the regression that survived them.
  • get_calibrationThe grading dataset for the market sensor we cite — how its prices scored against resolved reality.
  • todays_briefThe morning read, machine-shaped.
Ask (async by default)
  • askOne grounded, source-checked answer. Returns a claim ticket in about a second.
  • get_answerCollect a finished answer by ticket. Free — the question was metered once, at submit.
Buy work, priced first
  • get_quoteA priced quote from your own requirements — no contact details, never a charge.
  • propose_topicPropose net-new coverage for the desk to stand up.
  • create_orderAssemble a purchase. Supports dryRun (a labeled rehearsal that bills nothing) and idempotencyKey (a retried call returns the original intent).
  • get_orderOrder status, honestly — intent recorded, never fabricated payment state.
Service
  • get_watch_feedUp to 14 days of observed items for a watched topic, plus its live coverage-acceptance report — it grades the coverage; it does not gate the bill.
  • send_feedbackFile a bug, improvement, complaint, praise, or question. A complaint that names a real defect becomes our work order.

The async ask pattern

We optimize for a quality answer over a fast one, and sync and async are different contracts, stated separately. Synchronous answers typically land in 5–30 seconds; set client timeouts to at least 60 seconds. Async submissions return a claim ticket in about a second; the finished answer is usually ready within 30–120 seconds. So ask is async by default: submit, get the claim ticket, keep working, collect when ready. The question is metered once, at submit; collecting is free. If the ticket store is briefly unavailable the full answer comes back synchronously instead — handle both shapes. We spend the seconds a grounded, source-checked answer takes — built for the internet of machines that need current truth, not for millisecond trading.

-> tools/call ask        {"question": "..."}
<- {"status": "working", "ticketId": "..."}      # ~1s
-> tools/call get_answer {"ticketId": "..."}     # poll; typically 30-120s
<- the finished, source-checked answer (or {"status":"working"} — try again)

# REST equivalent: POST /api/ask {"async": true} then GET /api/answer/<ticketId>

The tariff — what costs money and what never will

The daily brief, the record, the calibration table, and every correction are free for anyone. Charges meter work done on your behalf.

Watch

$20 per unit/month

One question or concern kept continuously answered and verified, its history recorded from the day it starts. Reads of your watched question are included.

opening rate · Included in private desks today; unit-by-unit purchase runs through the desk on a meter account. Billing starts when the Watch starts, and the month you're in is refundable in full any time you ask.

Read

$0.25 per unit

One grounded, source-checked answer produced on demand.

Free allowance: 25 answers per day on a self-issued key (POST /api/keys — instant, free, no card). Each key meters independently.

opening rate · Included in every plan today; metered purchase is live on meter accounts — an identified key, each Read receipted at this flat rate.

Rates change forward-only with 30 days' published notice; every past revision stays listed here. The machine-readable rate card is /api/tariff; price a basket from your own requirements with get_quote — quotes need no contact details and are never a charge. Checkout runs on Stripe’s hosted page with prices published first and nothing hidden; rehearse with create_order {dryRun: true}.

Why not just ask an AI?

If being wrong is free, so is Google. If being wrong costs you something, we're twenty-five cents.

Commodity grounded-search APIs run roughly $0.001 to $0.02 per query. A Read is $0.25, flat. The premium buys the verification pass, the named-source provenance, and a maintained, source-traced public record you can audit. It is priced for consequential decisions, not casual traffic.

Quotas and limits, stated

  • Open API / MCP (free, keyless reads · free self-issued key for the Answer Engine): 500 signal-feed reads per day; the Answer Engine rides a free self-issued key (25/day on your own meter — POST /api/keys, one call, no card)
  • Metered API (identified API key · billed on actual usage at tariff rates): Your bill is the tariff, nothing preset: Watches $20/topic/month, Reads $0.25 each — one flat rate, no tiers; The month you're in is always refundable. Refundable in full, any time — we return the month you're in. You still get the coverage-acceptance report on every Watch — it grades the work, it just doesn't gate the bill; Identified key: 5,000 signal-feed reads/day (10× anonymous), schema-stable feeds, named support; Meter accounts are live: the desk issues your identified key, every metered Read is receipted, and get_account (MCP) shows your live statement. get_quote prices your exact basket first — your quote is your plan.
  • Ask burst limit: a per-caller per-minute cap enforced with a clean 429 + Retry-After — current numbers on the API docs and in orient.
  • The free Answer Engine allowance is 25 questions per day on a self-issued key (each key meters independently; POST /api/keys is instant and free); feed reads are separate and far higher.

Feeds and resources

The MCP resources/list mirrors the public data surfaces as addressable documents; the same feeds answer over REST:

  • /api/signals — the live feed. Every row carries an explicit evidenceStatus: "receipted" rows name their sources with URLs; "unreceipted" rows report the attention measurement without article receipts — treat those as leads, not sourced claims.
  • /api/record-data — the daily record, machine-shaped.
  • /api/calibration-data — the grading dataset for the market sensor we cite, machine-readable.
  • /api/tariff — the rate card above.
  • /llms.txt — these notes, addressable.

License line, stated up front: evaluation and live use are free; bulk collection, redistribution, or training competing models requires a commercial license (terms §4a).

Judge us before anyone spends anything

We maintain a continuously-updated, source-traced record of the entities and events in a domain, and we sell that maintained, verified state. Prediction-market prices are one sensor we cite — labeled, attributed to their market, and graded for accuracy when reality resolves — never a forecast of ours. The maintained record is public at the record, and one live truth object is fully inspectable at the Hormuz record. Verify from your own shell:

curl -s https://api.signalbureau.ai/api/mcp -X POST -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"orient","arguments":{}}}'

What we promise a machine guest

  • No tricks and no traps: prices published before any purchase, limits stated before you hit them, errors explained when they happen.
  • Your mandate is honored exactly — a dry run bills nothing, an idempotent retry records nothing new, and a quote is never a charge.
  • The record is never edited: the brief, the calibration table, and every correction are free for anyone, and stay on the record.
  • A complaint that names a real defect becomes our work order.

The full integration contract — schemas, current rate limits, webhook plans, and worked examples — lives on the API & MCP docs. Agent-facing notes: llms.txt.

Informational only — never financial, legal, or investment advice.