
Conceptio Search
io.github.0x923041-dotcomPublished by GitHub account 0x923041-dotcomv0.3.14Updated Nov 4, 2026
Search 1M+ open-access papers, standards, and case law from an AI agent.
Overview
Searches the Conceptio Open Knowledge Archive of 1M+ open-access papers, standards and case law, and returns citations, PDFs and reference graphs.
- What you can do
- Search the archive by keyword with source, language and category filters, or queue batch searches
- Resolve known identifiers such as RFC, DOI, arXiv, PubMed, NIST/FIPS, W3C and US case citations to documents
- Fetch document metadata and citations in 11 formats, including BibTeX, APA, MLA and IEEE
- Download open-access PDFs into the workspace
- Walk the reference graph from a seed document, one or two hops, in either direction
- Hand documents to Zotero or Obsidian through connectors
- When to use it
- Useful when an assistant needs to find and cite scholarly or standards literature, verify a citation, or pull source PDFs while researching or writing. It suits research, legal and technical writing workflows that rely on open-access material.
- Requirements
- Runs locally as a Python package (Python 3.8+) started with uvx or the conceptio command. Needs a Conceptio API key, supplied through the CONCEPTIO_API_KEY environment variable or saved once with the CLI's auth command; a Pro license key is an alternative. Network access to the Conceptio HTTPS API is required.
Installation
In SourceWeft
- Open Conceptio Search in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
conceptio-search
Search 1M+ open-access documents — papers, standards, textbooks, and case law — right from your terminal or your AI agent.
conceptio-search is a CLI and Model Context Protocol (MCP) server for the Conceptio Open Knowledge Archive — 1M+ open-access documents from 500+ living sources, indexed daily. Every source is open access or public domain. The CLI authenticates with an API key: sign in once, save the key, search from anywhere.
- For humans — search, export citations in 11 formats (BibTeX, APA, MLA, Chicago, IEEE, Harvard, RIS, Bluebook, OSCOLA, ISO 690, ANSI Z39), and download PDFs to disk with one command.
- For AI agents — a stdio MCP server with nine tools, so Claude, Cursor, Windsurf, OpenCode, or any MCP client can search, queue batch searches, resolve identifiers (RFC, DOI, arXiv, PMID, PMCID, NIST/FIPS, W3C, US case citation), walk the reference graph, save PDFs into your workspace, and hand a document to Zotero or Obsidian.
- 100% self-contained — talks only to the public HTTPS API. No internal infrastructure; your key lives in
~/.conceptio/config.json.
Install
Requires Python 3.8+. (Checked, not just claimed: the suite parses every source file at the declared floor's grammar, so the promise cannot rot silently.)
The console script is conceptio; python -m conceptio_cli is the same entry
point for a virtualenv that was never activated.
Authenticate (one time)
The CLI needs an API key before it can search:
Get the key by signing in at conceptio.app and
creating one on your profile (Free, Dev, Pro, or Enterprise). The key is stored in
~/.conceptio/config.json and sent as X-Api-Key with every request.
conceptio quota reports your tier at any time. Every command below
assumes this step is done — without a key the CLI refuses to run and tells
you exactly this.
Quick start
Example
Query words are highlighted in gold in the title column. The PDF column shows
[x] when a direct PDF link is available; [ ] rows still surface the source
URL via conceptio info <id>.
Search directives
The CLI understands the same directives as the Conceptio web app — they are stripped from the query and applied as real filters:
Directives can be combined freely: conceptio search "cat:\"Computer Science & Tech\" source:nist lattice cryptography".
Resolve
conceptio resolve recognises several identifier shapes and returns a typed
response (kind: rfc | doi | arxiv | pmid | pmcid | nist | w3c | case plus
fallback null for plain text). Unrecognised identifiers degrade to a regular
search so the command never fails silently.
The kind describes the identifier, not the archive: a well-formed DOI this
archive does not hold answers with kind: "doi", total: 0 and an empty
results list, which is a correct empty answer rather than a failure. Every
example above resolves to at least one document today — the suite that drives
the shipped CLI against the live API asserts exactly that, so an example can
only rot if that check is skipped.
Model Context Protocol (MCP)
The conceptio mcp command starts a stdio JSON-RPC MCP server. It is dependency-free
(no MCP SDK required) and works with any MCP client.
The server is dual-era: it answers the current 2026-07-28 revision —
per-request _meta, server/discover, resultType, cache hints — and still
serves the older initialize handshake (2024-11-05 … 2025-11-25) for clients
that predate it. A client that speaks both eras probes with server/discover
first and finds us; a handshake client is served exactly as before.
A key is required for tool calls. The server starts without one, so a host can discover it and
read its tool list — and then answers every tools/call with an in-band error carrying the setup
steps. Hand it the key either way: run conceptio auth <key> once, or give it to the host through the
host's own environment, which is how the official registry listing declares it:
Tools
Claude Desktop
Add to claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Cursor
Settings → Cursor Settings → MCP → Add new MCP server:
OpenCode / Windsurf / Antigravity
The same JSON shape works in any MCP-aware client — point it at conceptio mcp
and the nine tools above are exposed automatically. An MCP host may supply the
credential by environment (CONCEPTIO_API_KEY, or CONCEPTIO_BEARER_TOKEN for a
signed-in session) instead of writing ~/.conceptio/config.json.
After adding, restart the client and you can ask, for example:
"Find the NIST post-quantum encryption standard and download the PDF into my workspace."
Manual smoke test
Windows PowerShell quirk: pwsh pipes text to native commands as UTF-16, which the server (UTF-8 JSON-RPC) answers with a
Parse error. Real MCP hosts speak UTF-8 and are unaffected — this only bites hand-rolledecho ... | conceptio mcpprobes from pwsh. Save the request as UTF-8 first instead:
Fair use
Every source in Conceptio is open access or public domain. The CLI sends your API key with every request and is rate-limited per tier (see the rate limits); the browser keeps a separate free trial for casual searching without an account.
Add a credential once with conceptio auth <key> — it is stored in
~/.conceptio/config.json and sent with every request. conceptio auth
accepts either a self-hosted API key (ckey_live_..., the
agent/machine credential issued from your account — store it plainly, it is
hashed server-side and shown only once) or a Pro license key
(CONCEPTIO-XXXX-XXXX-XXXX, one-time / account-bound). API keys are
X-Api-Key; license keys are X-License-Key; exactly one credential is sent.
Without a saved key, every data command exits before touching the network:
conceptio quota reports your current tier (public / pro /
enterprise) and which auth the server honored (api_key / license /
firebase / public); conceptio quota --json returns the same report as
the structured object a status surface can render, with the human credential
hint on stderr so stdout stays parseable.
Configuration
State lives in ~/.conceptio/config.json:
Override the API base (for staging, self-hosted mirrors, or a local proxy) by
editing api_base. Public API origins must use HTTPS; only loopback HTTP
origins such as http://127.0.0.1:8000 are allowed for local development.
The client refuses cross-origin API redirects so credentials cannot be sent to
an unexpected host. PDF downloads reject loopback/private-network targets,
limit responses to 100 MiB, and write atomically. The MCP server additionally
keeps output_path beneath its current workspace and rejects traversal or
symlink escapes. Set default_limit to change the search page size; set
default_citation_format to any of the 11 supported format names.
Host processes (editors, CI, agent runtimes) can supply credentials without
writing to the config file — environment variables win over saved values:
CONCEPTIO_API_KEY, CONCEPTIO_LICENSE_KEY, and CONCEPTIO_API_BASE. A
signed-in human session can also be passed per-run as
CONCEPTIO_BEARER_TOKEN (the same short-lived bearer token the web app uses);
it takes precedence over a machine key, and exactly one credential is ever
sent.
Development
The offline suite patches httpx with a MockTransport and stubs
ConceptioClient where it composes other services. No test in it makes a real
network call — which is also its ceiling: it can prove the client composes a
request and parses a response, but nothing about what the CLI decides from a
live exchange.
tests/live_check.py covers that gap. It starts the shared loopback stub
(conceptio-nvim/test/stub_api.py, dialled into done/running/expired job
modes and exhausted/pro/not_configured connector modes), points the real
binary at it with CONCEPTIO_API_BASE and an environment credential, and asserts
on exit codes, on stdout and on the stub's request log. It covers the whole
surface rather than a sample of it — search (directives, filters, markdown,
batch, jobs), resolve, cite, info, proof, download's boundary, the credential
paths, the connector failure reasons, all nine MCP tools, and the exact argv
each editor client sends (see below). It also refuses to run quietly against the
wrong binary: if conceptio --version does not match the version this tree
declares, every check would be proving an older install, so it fails and says so.
Everything stays on loopback: no account, no key, no production credit, and the
CLI is given a throwaway config directory so your real
~/.conceptio/config.json is never read or written. CONCEPTIO_CLI selects
the binary, CONCEPTIO_STUB the stub, CONCEPTIO_LIVE_VERBOSE=1 echoes each
command's output. It exits nonzero and prints every failing check with the
command's own output.
tests/live_prod_check.py is that harness's deliberate opposite, and closing
the pair is the point. Everything above is pinned against a server we control,
so none of it can see the live API moving — a renamed field in /api/me, a
refusal that changes wording, an edge rule that starts rejecting the CLI's
transport. Those ship silently, because this repo's own suite stays green while
every real user sees the drift.
It is opt-in (--yes) and safe by construction rather than by discipline: it
refuses to run unless the base is the shipped default, the credential is a
placeholder that any inherited CONCEPTIO_* variable is stripped out in favour
of, and it only runs reads the API keeps open without a credential plus commands
whose expected outcome is a refusal — no search ever executes. rm -f the
guard and it stops being able to tell production from a stub; re-point the
default base and 6 of its 9 checks go red, which is how you know they bite.
The client contract
The CLI is also a dependency of the shipped client surfaces — the Neovim plugin
and the Obsidian plugin. They exec this binary
with an argv list and read stdout; nothing couples them but that grammar. tests/client_contract.py records every
invocation they make, with the file it came from:
tests/test_cli_contract.pyparses each row againstcli.build_parser(), and while a client's checkout sits next to this repo, asserts its sources still contain the subcommand and flags the row claims.tests/live_check.pyruns the same rows against a real binary on the stub.
If you change a subcommand or a flag, one of the two will fail and name the client. Add a row when a client gains a call.
The README is a client too. tests/test_readme_contract.py extracts every
invocation from the code blocks above and parses it against the same grammar,
so a renamed flag cannot leave the documentation teaching a command that exits
with a usage error. Shell constructs (a pipe, a redirect) are skipped by an
explicit rule rather than by exception, and the test fails if it stops finding
the examples — an extractor that quietly matches nothing proves nothing.
License
MIT — see LICENSE.
Part of the Conceptio Open Knowledge Archive — 500+ living sources: arXiv, NIST, OWASP, CISA, PubMed/PMC, MIT OpenCourseWare, EUR-Lex, Project Gutenberg, and more.
Source: README.md at commit ae3603c
Tools
0Version history
4- v0.3.14LatestOct 7, 2026
- v0.3.11Oct 3, 2026
- v0.3.8Sep 27, 2026
- v0.3.7Sep 23, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts