# Qscape > Qscape (https://qscape.vc) tracks funding rounds into quantum technology companies (computing, networking, sensing, security, photonics, software, enabling hardware), with the companies, their founders' backgrounds and the investors. Every value an agent may cite carries the exact quote it was read from and the URL of that source. Rules filled every value; no language model wrote one. Docs: /llms.txt, /llms-full.txt (every endpoint, field, unit and example), /agents (setup per agent), /AGENTS.md, /openapi.json and /.well-known/. ## Access - Public and read-only: the dashboard (https://qscape.vc/), the API, the bulk files and the MCP server need no sign-up and no credentials. Agents that can only fetch a URL use the URLs below as they are. - CORS: responses send `Access-Control-Allow-Origin: *`. ## Freshness - Rebuilt and redeployed after each daily tracker run (07:15 Mac local time, plus the arXiv run). Every response carries `generated_at` (when this copy was built) and `data_date` (the tracker's run date); JSON responses also send `Last-Modified`. /api/meta `source_health` lists each source's last run. ## Citations - A cited value is `{value, quote, url, src}`: quote `quote` and link `url`. `src: "inferred"` (quote and url null) means no source text states the value: do not cite it. People facts carry `status`: `verified` (2+ independent sources agree) or `single` (one source); `checks[]` marks a `conflict` between sources, a red flag. ## Money - `amount_usd` is US dollars (whole dollars, not millions) at the ECB reference rate on the round's date; null when the round names no amount or only a vague one. `money` keeps the amount as written (`orig`, `cur`, `value`, `rate`, `rate_date`). `money.approx = true` marks a vague amount whose `money.usd` is its floor. ## API (GET; JSON, or markdown tables with `.md`, `format=md` or `Accept: text/markdown`) - [/api/rounds](https://qscape.vc/api/rounds): funding rounds, newest first. Filters: `from`, `to`, `segment`, `subsegment`, `stage`, `country`, `min_usd`, `max_usd`, `include_approx`, `lead`, `investor`, `company`. Markdown: /api/rounds.md - [/api/companies](https://qscape.vc/api/companies): companies. Filters: `q`, `segment`, `subsegment`, `country`, `has_team`, `has_rounds`, `min_total_usd`, `raised_since`. Markdown: /api/companies.md - /api/companies/{id}: one company with its rounds, team and signals. Markdown: /api/companies/{id}.md - [/api/investors](https://qscape.vc/api/investors): investors. Filters: `q`, `type`, `led`, `min_rounds`, `min_fund_usd`, `company`. Markdown: /api/investors.md - [/api/search?q=](https://qscape.vc/api/search?q=photonics): name search across companies, investors, people and rounds. Markdown: /api/search.md?q= - [/api/meta](https://qscape.vc/api/meta): freshness, counts, source health, coverage, money rules, valid stages and segments. Markdown: /api/meta.md - Lists take `limit` (1-500, default 50), `offset`, `sort`, `order` and return `{total, limit, offset, next_offset, sort, order, generated_at, data_date, data}`. - Novelty: each company in /data/companies.json has `novelty`, a grade per hand-checked axis (team, bottleneck): Rare, Common, Unclear or Not found, with `why`, the `quote` and `src` it rests on and `n` of `of` companies sharing it. Rare is the rarest tenth; null when no axis passed the check. - Bulk files: /data/rounds.json, /data/companies.json, /data/people.json, /data/investors.json, /data/meta.json. - /data/findings.json: the conclusions that open each tab (Market, Companies, Investors), recomputed every build. Each has `title` (the sentence with its number), `body`, `n` with `unit` (what n counts, e.g. "disclosed rounds"), `method` (the statistical test, when one applies), `small_n`, `inferred`, a `chart` spec and `rows` (the rounds behind it, with ids and source URLs); `checked_not_shown` lists conclusions tested and dropped, with why. - /data/novel.json: new and active companies, ranked by evidence `score` (newness and activity, not rarity); each has `company_id`, its first `round_id` (null before a round) and `reasons` ({kind, text, url}). `about` gives the scoring rule. - Ids are slugs: a company id is its name (`acme-quantum`), a round id adds the date (`acme-quantum-2026-10-22`). They stay the same across rebuilds. - A bad parameter gets `400`, an unknown id `404`, each with the reason and a link to these docs. ## MCP - Streamable HTTP, stateless, JSON responses, no authentication: `https://qscape.vc/mcp`. - Read-only tools: `search_rounds` (the /api/rounds filters), `get_company` (id or name), `list_investors` (the /api/investors filters), `search` (q), `meta`. Lists default to 10 rows; page with `offset`. ## Setup per agent ### For Grok and other URL-only agents Grok's browsing, ChatGPT search and most chat agents can only fetch a URL. Paste one of these URLs into the chat and ask your question. The markdown routes return plain tables the model reads directly. Example URLs: ```text https://qscape.vc/api/rounds.md https://qscape.vc/api/rounds.md?from=2026-10-01 https://qscape.vc/api/rounds.md?stage=Seed,Series%20A&country=United%20States https://qscape.vc/api/rounds.md?min_usd=50000000&sort=amount_usd https://qscape.vc/api/rounds.md?investor=Ground%20State https://qscape.vc/api/companies.md?segment=Sensing&has_rounds=true https://qscape.vc/api/companies/.md https://qscape.vc/api/investors.md?led=true&sort=rounds_led https://qscape.vc/api/search.md?q=photonics https://qscape.vc/api/meta.md ``` Example prompts: ```text Read https://qscape.vc/api/rounds.md?from=2026-10-01 and list this month's quantum rounds over $10M. Quote the evidence line and link for each amount. Open https://qscape.vc/api/search.md?q=, then the company's /api/companies/.md page, and summarize its rounds and team. Say which facts are verified and which come from a single source. Using https://qscape.vc/api/investors.md?led=true&sort=rounds_led, who led the most quantum rounds? Then open https://qscape.vc/api/meta.md and tell me how fresh the data is. ``` - Use `.md` routes for chat agents; drop `.md` for JSON. Page with the `Next page` link at the bottom of each table. ### Claude Code Add Qscape as a remote MCP server. User scope makes it available in every project. Add the server: ```bash claude mcp add --transport http --scope user qscape https://qscape.vc/mcp ``` Check it: ```bash claude mcp list claude mcp get qscape ``` Drop-in CLAUDE.md or skill snippet: ```markdown ## Qscape: quantum funding data - For any question about funding rounds, companies, founders or investors in quantum technology, use the `qscape` MCP tools: `search` to find ids, `search_rounds` for filtered rounds, `get_company` for one company, `list_investors`, and `meta` for freshness. - Amounts are US dollars (`amount_usd`, null when undisclosed). Cite each value with its `evidence..quote` and `url`; never cite a value whose `src` is `inferred`. - Say how fresh the answer is from `generated_at`. Without MCP, fetch https://qscape.vc/api/rounds.md. ``` - Docs: https://code.claude.com/docs/en/mcp. Remove with `claude mcp remove qscape -s user`. ### Claude (claude.ai and desktop) Add a custom connector: Settings, Connectors, Add custom connector. Paste the URL below and leave sign-in empty. Connector URL: ```text https://qscape.vc/mcp ``` - Docs: https://claude.com/docs/connectors/custom/add-unlisted ### ChatGPT For a quick question, paste a URL from the Grok section into the chat. For tools, add Qscape as an MCP app in developer mode (Settings, Apps and connectors, Advanced, Developer mode, then Create): the connector URL below, authentication No authentication. Connector URL: ```text https://qscape.vc/mcp ``` Custom GPT action: ```text Import the schema from https://qscape.vc/openapi.json. Authentication: None. ``` - Docs: https://developers.openai.com/api/docs/guides/developer-mode ### OpenAI Codex CLI Add this to ~/.codex/config.toml. ~/.codex/config.toml: ```toml [mcp_servers.qscape] url = "https://qscape.vc/mcp" ``` - Docs: https://developers.openai.com/codex/mcp ### OpenCode Add a remote server to opencode.json (project) or ~/.config/opencode/opencode.json (global). `oauth: false` stops OpenCode from trying an OAuth flow. opencode.json: ```json { "$schema": "https://opencode.ai/config.json", "mcp": { "qscape": { "type": "remote", "url": "https://qscape.vc/mcp", "enabled": true, "oauth": false } } } ``` - Docs: https://opencode.ai/docs/mcp-servers/ ### Muse Code (Meta) Add the server under `mcpServers` in ~/.config/muse/settings.json, then start a new session. ~/.config/muse/settings.json: ```json { "mcpServers": { "qscape": { "type": "streamable-http", "url": "https://qscape.vc/mcp" } } } ``` - Docs: https://meta-models.github.io/muse-code-sdk/next/guides/extend/mcp-servers/ ### Grok through the xAI API The xAI Responses API calls remote MCP servers itself. Give it the MCP URL as the server. Tool entry: ```json { "type": "mcp", "server_label": "qscape", "server_url": "https://qscape.vc/mcp" } ``` - Docs: https://docs.x.ai/developers/tools/remote-mcp ### curl The same filters on every route. Requests: ```bash curl "https://qscape.vc/api/rounds?from=2026-10-01&min_usd=10000000" curl "https://qscape.vc/api/rounds.md?stage=Seed" curl -H "Accept: text/markdown" "https://qscape.vc/api/meta" curl -X POST "https://qscape.vc/mcp" -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_rounds","arguments":{"stage":"Seed","limit":5}}}' ``` ### Python Standard library only. Pages until next_offset is null. rounds.py: ```python import json, urllib.parse, urllib.request def rounds(**filters): offset = 0 while offset is not None: q = urllib.parse.urlencode({**filters, "limit": 500, "offset": offset}) page = json.load(urllib.request.urlopen(f"https://qscape.vc/api/rounds?{q}")) yield from page["data"] offset = page["next_offset"] for r in rounds(segment="Sensing", **{"from": "2026-01-01"}): ev = r["evidence"].get("amount") print(r["date"], r["company"], r["amount_usd"], ev and ev["src"] != "inferred" and ev["url"]) ``` ## Endpoint reference ### GET /api/rounds Funding rounds. Parameters: - `from` (string): Earliest round date, inclusive (YYYY-MM-DD). - `to` (string): Latest round date, inclusive (YYYY-MM-DD). - `segment` (string): Comma-separated segments, case-insensitive. - `subsegment` (string): Comma-separated subsegments. - `stage` (string): Comma-separated stages: Pre-seed, Seed, Series A, Series B, Series C+, Strategic, Unstated. - `country` (string): Comma-separated countries, e.g. United States,Finland. - `min_usd` (number): Minimum amount in USD. - `max_usd` (number): Maximum amount in USD. - `include_approx` (boolean): true: compare and sort vague amounts at their floor (money.usd). Default false: only disclosed amount_usd. - `lead` (string): Substring of the lead investor. - `investor` (string): Substring of the lead or any investor. - `company` (string): Company id, or substring of the company name. - `sort` (string): Sort key, default date. Nulls sort last. - `limit` (integer): Page size, 1-500 (default 50). - `offset` (integer): Rows to skip (default 0). - `order` (string): asc or desc (default desc). - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`. Example: `https://qscape.vc/api/rounds` ### GET /api/companies Companies (without team and signals). Parameters: - `q` (string): Substring of the name. - `segment` (string): Comma-separated segments. - `subsegment` (string): Comma-separated subsegments. - `country` (string): Comma-separated countries. - `has_team` (boolean): Only companies with (true) or without (false) team data. - `has_rounds` (boolean): Only companies with (true) or without (false) a tracked round. - `min_total_usd` (number): Minimum sum of disclosed rounds, USD. - `raised_since` (string): Last round on or after this date. - `sort` (string): Sort key, default last_round. Nulls sort last. - `limit` (integer): Page size, 1-500 (default 50). - `offset` (integer): Rows to skip (default 0). - `order` (string): asc or desc (default desc). - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`. Example: `https://qscape.vc/api/companies` ### GET /api/companies/{id} One company with rounds, team and signals. Parameters: - `id` (string, required): Company id from /api/companies - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`, `404`. Example: `https://qscape.vc/api/companies/` ### GET /api/investors Investors. Parameters: - `q` (string): Substring of the name. - `type` (string): Comma-separated firm types, e.g. venture capital. - `led` (boolean): true: led at least one tracked round; false: led none. - `min_rounds` (integer): Minimum distinct rounds led or joined. - `min_fund_usd` (number): Minimum fund size in USD. - `company` (string): Company id, or substring of a company name the investor backed. - `sort` (string): Sort key, default rounds_in. Nulls sort last. - `limit` (integer): Page size, 1-500 (default 50). - `offset` (integer): Rows to skip (default 0). - `order` (string): asc or desc (default desc). - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`. Example: `https://qscape.vc/api/investors` ### GET /api/search Search names across companies, investors, people and rounds. Parameters: - `q` (string, required): Search text, 2+ characters. - `limit` (integer): Hits per kind, 1-50 (default 10). - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`. Example: `https://qscape.vc/api/search` ### GET /api/meta Freshness, source health, field coverage, money rules, vocabulary. Parameters: - `format` (string): md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown). Responses: `200`, `400`. Example: `https://qscape.vc/api/meta` ## Field reference Units: amounts in US dollars (whole dollars); dates YYYY-MM-DD; timestamps ISO 8601 with offset; `rate` is US dollars per unit of the original currency. ### Money An amount as written and in USD. - `orig` (string): Amount as written in the source - `label` (string): Display label (same as orig, or the parsed amount) - `cur` (string): ISO 4217 currency of the original - `value` (number/null): Amount in the original currency - `usd` (number/null): US dollars at the ECB rate on rate_date; the floor when approx - `rate` (number/null): USD per unit of cur - `rate_date` (string): ECB rate date: the round date or the last business day before it - `approx` (boolean): Vague amount; usd is its floor, never a disclosed amount - `src` (string): ECB, or USD when no conversion was needed ### Evidence A citable value. - `value` (any): The value - `quote` (string/null): Exact sentence or headline the value was read from; null when src is inferred - `url` (string/null): Source page; null when src is inferred - `src` (string): Where it came from: article, headline, SEC Form D, round_facts, company website, Wikidata, ...; inferred = no source text states it, do not cite ### Round - `id` (string): company_id-date - `company_id` (string): Company id (slug of the name), for /api/companies/{id} - `company` (string): Company name - `date` (string): Round date (first non-government headline) - `amount_usd` (number/null): Disclosed amount in USD at the round-date ECB rate; null when undisclosed or vague - `amount_as_written` (string/null): Amount text as the source wrote it, or null - `money` (see Money): The amount as written and converted (see Money); null with no amount - `stage` (string): Pre-seed, Seed, Series A, Series B, Series C+, Strategic or Unstated - `lead` (string/null): Lead investor(s), as named - `investors` (array): Lead and participating investors named in the round's articles - `country` (string/null): Country of the company (English name), or null - `segment` (string): Market segment: Computing, Networking, Security, Sensing, Photonics, Software, Enabling or Other - `subsegment` (string/null): Subsegment within the segment, or null - `evidence` (object): Quote and URL per field - `sources` (array): Headlines and filings behind the round - `origin` (string): press or cn press ### Fact - `field` (string): education, academic_position, prior_employer, prior_company, exit, publications, h_index, role - `value` (any): The fact as read - `quote` (string): Exact sentence the fact was read from - `url` (string): Source page - `src` (string): Source kind: press, LinkedIn profile, Wikidata, Companies House, OpenAlex, ... - `status` (string): verified (2+ independent sources) or single ### Person - `id` (string): Person id: company id plus a slug of the name - `company_id` (string): Company id - `company` (string): Company name - `name` (string): Full name - `role` (string): Role at the company, as stated in the source - `facts` (array): Background facts, each with quote, url, src and status - `checks` (array): Cross-source checks per claim: status verified, single or conflict - `linkedin` (string/null): LinkedIn profile URL, or null ### CompanySummary - `id` (string): Company id (slug of the name, stable across rebuilds) - `name` (string): Company name - `segment` (string): Market segment - `subsegment` (string/null): Subsegment, or null - `subsegment_evidence` (any): Evidence for the subsegment ({value, quote, url, src}), or null - `country` (string/null): From its latest round with a country - `rounds` (integer): Number of rounds tracked - `round_ids` (array): Ids of those rounds, newest first - `last_round` (string/null): Date of the latest round (YYYY-MM-DD), or null - `total_usd` (number/null): Sum of disclosed round amounts, USD - `team_size` (integer): People on record - `signal_count` (integer): Signals on record (up to 20 kept per company) - `profile` (any): What the company does, why it matters, HQ and founders, with quotes; see CompanyProfile ### Company CompanySummary fields plus team, signals and full rounds (rounds replaces the count). - `id` (string): Company id - `name` (string): Company name - `segment` (string): Market segment - `subsegment` (string/null): Subsegment, or null - `country` (string/null): Country, or null - `last_round` (string/null): Date of the latest round, or null - `total_usd` (number/null): Sum of disclosed round amounts in US dollars, or null - `team` (array): People with background facts (see Person, without id/company fields) - `rounds` (array): The full Round records - `signals` (array): Up to 20 recent signals: {date, kind, network, author, text, url, people} - `profile` (any): What the company does, why it matters, HQ and founders, with quotes; see CompanyProfile - `novelty` (any): How rare the company is on each hand-checked axis (tools/novelty.py); null when no axis is wired ### Investor - `id` (string): Investor id (slug of the name) - `name` (string): Investor name as written in the round sources - `kind` (string/null): firm (an organisation) or angel (a person investing in their own name); null when the tracker could not tell - `partners` (array): People the round articles quote as a partner of this firm, shown as Firm (Person) - `type` (string/null): Firm type - `fund_usd` (number/null): Fund or AUM in USD at the export day's rate - `fund` (see Money): Latest fund size as written and converted (see Money), or null - `fund_kind` (string/null): fund or under management - `how` (array): How the tracker saw them - `rounds_led` (array): Round ids - `rounds_in` (array): Round ids they joined or led - `companies` (array): Companies the investor was seen with: {company_id, company, date} - `facts` (array): Facts about the investor, each with quote and url ### Meta - `sector` (string): Sector key (quantum) - `generated_at` (string): When this copy was built (ISO 8601 with offset) - `data_date` (string): Tracker run date (YYYY-MM-DD) - `update_schedule` (string): When the data is rebuilt - `counts` (object): Rows per dataset: rounds, companies, people, investors, signals - `money_rules` (array): How amounts are converted and flagged - `field_coverage` (object): Per dataset and field: {filled, of} - `source_health` (array): Last run per source: rows fetched and added, error, method that served it - `recall` (object): Share of known rounds the press sources caught - `vocab` (object): Valid stages, segments and subsegments (per segment) ### CompanyProfile What the company does and who founded it (tools/profiles.py). Only fields that passed a 25-company hand check at 90%+ precision are present: tldr, why_novel, why_useful, why_money, bottleneck, approach, hq, founders. Every value carries its verbatim quotes and URLs in evidence. null: no profile. - `tldr` (string/null): One or two plain-English sentences on what the company does, written only from its fetched sources (company site, round articles, round_facts, subsegment quote); null when no source says - `why_novel` (string/null): What the sources say sets its technology or approach apart, or null - `why_useful` (string/null): What problem it solves or who uses it, as the sources say, or null - `why_money` (string/null): What the raise is for, only when a source says so, or null - `bottleneck` (object/null): The problem or limit the company works on, in one plain sentence, only as its sources state it (never a novelty claim); null without a source - `approach` (object/null): How the company goes at that problem, in one plain sentence, only as its sources state it (never a novelty claim); null without a source - `hq` (object/null): Headquarters: city, country, src (URL), q (quote), via (round_details rules or model with quote) - `founders` (array): Founders, CEO and CTO: people.json background checks plus people the sources name with a quote - `evidence` (object): Per field, the verbatim quotes and URLs it was written from - `sources` (array): Every URL the shown fields cite - `model` (string/null): Model that wrote the summaries (claude-sonnet, or grok (backup)) - `generated_at` (string/null): When the model wrote it (ISO 8601) ### NoveltyGrade One axis of tools/novelty.py. Rare: a bottleneck category shared by the rarest tenth of companies with a stated bottleneck, or a verified founder fact held by a tenth or fewer of comparable founders. Common: shared more widely. Unclear: stated but too general to compare, or the rare fact rests on one source. Not found: nothing in the sources read. - `grade` (string): - `why` (string/null): The grade in words, with its count, e.g. '2 of 165 companies with a stated bottleneck target ...' - `text` (string/null): bottleneck: the profile's statement - `quote` (string/null): bottleneck: the source sentence the grade rests on - `src` (string/null): bottleneck: URL of that source - `category` (string/null): bottleneck: category id in novelty_taxonomy.json - `label` (string/null): bottleneck: category in words - `n` (integer/null): bottleneck: companies sharing the category - `of` (integer/null): bottleneck: companies with a stated bottleneck - `facts` (array): team: founder attributes compared, each {founder, attr, label, status, quote, src, n, of, basis, rare} ## Example records (illustrative values) A round (abbreviated): ```json {"id": "acme-quantum-2026-10-22", "company_id": "acme-quantum", "company": "Acme Quantum", "date": "2026-10-22", "amount_usd": 2200000, "amount_as_written": "$2.2 Million", "money": {"orig": "$2.2 Million", "cur": "USD", "value": 2200000, "usd": 2200000, "rate": 1.0, "rate_date": "2026-10-22", "approx": false, "src": "USD"}, "stage": "Pre-seed", "lead": "Example Ventures", "investors": ["Example Ventures", "Second Fund"], "country": "Germany", "segment": "Software", "subsegment": "Middleware and OS", "evidence": {"amount": {"value": "$2.2 Million", "quote": "Acme Quantum has raised a $2.2 million pre-seed round led by Example Ventures.", "url": "https://example.com/press", "src": "article"}, "stage": {"value": "Pre-seed", "quote": null, "url": null, "src": "inferred"}}, "sources": [{"title": "Acme Quantum raises $2.2M", "url": "https://example.com/press", "outlet": "Business Wire", "date": "2026-10-22"}], "origin": "press"} ``` A list response wraps rows: `{"total": 41, "limit": 50, "offset": 0, "next_offset": null, "sort": "date", "order": "desc", "generated_at": "2026-10-30T16:34:00-07:00", "data_date": "2026-10-30", "data": [...]}`. An MCP call: POST /mcp with `{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_company","arguments":{"id":"acme-quantum"}}}` returns `result.content[0].text`, the same JSON as GET /api/companies/acme-quantum.