A short-lived, rate-limited bearer token that lets an agent or script call the graph API directly — no account, no card. Modeled on OAuth 2.0 client credentials plus the metadata discovery shape MCP clients already expect, so a generic MCP/OAuth client needs no Syntology-specific code to use it.
have answers “do you hold code for this?” for free, with no token, no signup and no card. It is the shortest way to find out whether the rest of this page is worth your time, and a no costs you nothing — that is deliberate, not a trial allowance.
curl "https://syntology.ai/api/graph/have?x=Performers"
Method name, arXiv id or paper title. The argument is accepted as x or name. It answers verified_code, unverified_code, declared_code, no_code or unknown_name — and the difference between the last two matters: no_code asserts absence for the exact name it resolved, unknown_name asserts nothing at all and lists near matches.
have, ask and chat are the REST surface a bearer token opens. draft/commit are on REST too but are browser-only: they take a Turnstile token, not a Bearer token, and back the Explorer rather than an agent. The other typed tools — get_code_for_method, get_reference_implementation, list_reference_implementations, compose, assembly and the rest — have no REST twin, and guessing a path for one returns 404. There is no OpenAPI document. Their names and full JSON input schemas are published, unauthenticated, in the MCP server card, which is generated from the live tool list rather than maintained by hand.
X-Syntology-Dev is not a credentialIf you have been handed that header: it does not authenticate anything and it will not open /mcp. It waives metering on the Atlas routes (/api/atlas/*) so we stop paying to verify our own map, and it is additive — a Bearer token is still required, and the trial budget still moves. Mint one below.
curl -X POST https://syntology.ai/api/oauth/trial/token \
-H "Content-Type: application/json" \
-d '{"grant_type":"client_credentials"}'
# -> { "access_token": "trial_...", "expires_in": 1800,
# "scope": "graph:ask", "queries_remaining": 20 }
curl "https://syntology.ai/api/graph/ask?q=..." \
-H "Authorization: Bearer trial_..."
# Optional: code_samples=true attaches declared code repositories
# (provenance-tagged) for every paper in the answer. Default false.
curl "https://syntology.ai/api/graph/ask?q=...&code_samples=true" \
-H "Authorization: Bearer trial_..."
No CAPTCHA, no signup, no key to request — one POST and you have a token. There is one mint per IP per minute, so hold the token you get rather than asking for another. A subscriber connecting over OAuth (grant_type=authorization_code) gets their own tier's limits instead: the entitlement is re-read from Stripe at exchange time, so a code minted before a cancellation cannot be redeemed for paid limits afterwards.
Everything above is the machine path. The same graph answers questions in your browser with no token, no account and no card — ask a real question and the sources, the confidence and the citation neighbourhood come back under the answer. Free questions are capped per address per day, the same 50 the API is.
Live at syntology.ai/mcp, gated by the same trial token above — listed on the official MCP registry. graph_ask handles any natural-language question through the same pipeline this page's REST examples use. Fourteen additional typed tools exist for callers (Cursor, Windsurf, and similar coding agents) that want a direct resolve-and-call instead of routing everything through NL parsing. Every one of them is callable on the same trial token — the narrower anonymous tier that three of them used to be withheld from was retired on 2026-09-04, and this sentence outlived it by three days:
Point a client at it by adding this to your MCP configuration. Claude Desktop and Claude Code both read the same shape; the OAuth handshake happens on first use, and a subscriber signing in there gets their tier's limits rather than the free ceiling.
{
"mcpServers": {
"syntology": {
"type": "http",
"url": "https://syntology.ai/mcp"
}
}
}
Other clients take the same URL. There is nothing Syntology-specific to configure and no key to request — it is a remote HTTP server with OAuth discovery, so the client handles sign-in itself.
# OpenClaw openclaw mcp add syntology --url https://syntology.ai/mcp --transport streamable-http openclaw mcp login syntology # Cursor / Windsurf: same JSON as above, in the editor's MCP settings. # Anything that speaks Streamable HTTP or SSE: point it at # https://syntology.ai/mcp
get_paperLook up a paper by arXiv IDget_code_for_paperDeclared and archived repos for a paperget_harvested_code_for_paperA paper's own functions, and which of them ranget_code_for_methodRepos implementing a named methodget_citation_pathShortest citation path between two papersget_concepts_for_paperConcepts a paper discussesget_reviews_for_paperRaw per-reviewer OpenReview recordsget_papers_by_authorA named author's papers in the corpusget_papers_by_institutionPapers affiliated with an institutionget_reference_implementationVerified, runnable Python for a method, generated from its paper (V0–V3 verification ladder)list_reference_implementationsBrowse the verified-code index by keyword or level, before fetching onecomposeGiven a verified routine's output contract, what else verified fits with ithaveDoes the graph hold code for this method or paper? Free — it does not spend your query budgetassemblyA paper's claimed method as typed, wired, swappable bricks, with the assembly's verification levelexplore_pathsExploratory multi-hop traversal record (seeds, kept edges, provenance) — candidates to confirm, not an answerEvery reference implementation carries a level on a fixed four-rung ladder. A sample's level is the highest contiguous rung it passed from V0 up — the moment one rung fails, everything above it is unreachable, not untested-but-probably-fine. There is no confidence score anywhere in the schema: the level is the confidence, and it is returned raw, never re-derived or defaulted.
V0Parses and importsV1Executes on shape-valid inputs, returns sane outputV2Two independently generated implementations agree numerically at 1e−6V3Paper-derived property tests pass on both implementations — top rungV2 and V3 ask different questions. V2 asks whether two independent readings of a paper agree with each other — they could both be wrong the same way. V3 checks the routine against properties the true function must satisfy however it is written. V2 is consensus; V3 is an oracle. Two real samples:
Both implementations import and run. On the first input they agree to three significant figures — and then they don't:
That gap is 7.5e−03 against a 1e−06 tolerance — roughly 7,500× over budget. The cause is a transposition: one implementation read the rate matrix as Q[y,x], the other as Q[x,y], because the extracted spec declared one layout and wrote the formula in the other. Pre-transposing makes them match bit-for-bit.
So V2 fails, and contiguity puts V3 out of reach. It is served at V1, not rounded up — and the defect it exposed is in our own spec, not in either implementation.
The beam-selection step — the argmax over subsets of size b. It cleared V2, then seven invariants, each run against both implementations independently:
Each is a mathematical claim, not a smoke test. Translation invariance says shifting every score by a constant cannot change which states get selected — true of the argmax, and a property a subtly wrong implementation fails. A test that passes on one implementation but not the other is recorded as a one-sided divergence and does not count.
Ask for these through get_reference_implementation and list_reference_implementations on the MCP server above; both take a min_level floor and refuse — naming the highest level actually available — rather than serving below it. The browsable index at /api/code-library is part of the paid plan.
Trial token issuance is free and needs no account or card. Metered paid access is live -- see /pricing for current plans. For enterprise or higher-volume API access, get in touch.