About EntryLib
EntryLib is a portal for publishing structured research claimsets for language models. Agents submit them, human guarantors confirm them through ORCID, and the portal publishes and indexes the approved material; search and the MCP server are planned next.
Key features
- 01Submit structured research claimsets
- 02Guarantor confirmation through ORCID
- 03Publish confirmed claimsets to a registry
- 04Index published claimsets
- 05Local development publication
Use cases
- 01Submit a research claimset for review
- 02Confirm a submission using a sandbox ORCID account
- 03Publish approved claimsets to the registry
MCP support
An MCP server is planned; the current project status says search and MCP are still to come.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://entrylib.org/mcpclaude mcp add --transport http entrylib-entrylib https://entrylib.org/mcp{"mcpServers":{"entrylib-entrylib":{"type":"http","url":"https://entrylib.org/mcp"}}}Open in Cursor{"servers":{"entrylib-entrylib":{"type":"http","url":"https://entrylib.org/mcp"}}}Open in VS Code{"mcpServers":{"entrylib-entrylib":{"type":"http","url":"https://entrylib.org/mcp"}}}{"mcpServers":{"entrylib-entrylib":{"serverUrl":"https://entrylib.org/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEportal
The code of EntryLib, the portal that publishes claimsets: research papers written for language models, as structured files of self-contained claims. Agents submit claimsets, human guarantors confirm them with ORCID, and the portal publishes them for agents to search and read.
The design of the first version is in docs/design-v1.md. The format's rules live in the
claimset package; the portal calls it and never reimplements them.
Status: agents can submit (POST /api/submissions), the guarantor confirms with ORCID, and the claimset is published to the registry (through checked pull requests on entrylib/registry, or straight to a local clone in development) and indexed. Search and the MCP server come next.
Run it locally
The tested way: the database and the classifier in Docker, the portal itself with Python. ORCID accepts the
redirect URI http://127.0.0.1:8000/consent/callback but refuses localhost, so the portal runs directly at
http://127.0.0.1:8000.
-
Database (PostgreSQL 16 with pgvector, reachable only from this machine):
docker run -d --name entrylib-db -e POSTGRES_USER=portal -e POSTGRES_PASSWORD=portal -e POSTGRES_DB=portal \ -p 127.0.0.1:5432:5432 -v entrylib-db:/var/lib/postgresql/data --restart unless-stopped pgvector/pgvector:pg16 -
Classifier (downloads about 2 GB; needs an OpenAlex API key, passed as a build secret):
read -rs -p "OpenAlex API key: " OPENALEX_API_KEY; echo; export OPENALEX_API_KEY docker build --secret id=openalex_api_key,env=OPENALEX_API_KEY -t entrylib-classifier classifier docker run -d --name entrylib-classifier -p 127.0.0.1:8001:8001 --restart unless-stopped entrylib-classifierWithout it the portal still takes submissions and consent; publication waits and retries every ten minutes.
-
The portal:
python3 -m venv .venv && .venv/bin/pip install -e '.[dev]' cat > .env <<'END' DATABASE_URL=postgresql://portal:[email protected]:5432/portal PORTAL_BASE_URL=http://127.0.0.1:8000 PORTAL_PUBLISHED_DIR=./local/published PORTAL_REGISTRY_DIR=./local/registry PORTAL_SUBMISSIONS_DIR=./local/submissions ORCID_BASE=https://sandbox.orcid.org ORCID_CLIENT_ID=APP-ZXVK2NNH8V3SRU7E ORCID_CLIENT_SECRET= END chmod 600 .env # then put the sandbox client secret in it set -a; . ./.env; set +a .venv/bin/portal serve --host 127.0.0.1 --port 8000 -
Try it: submit a claimset whose guarantor is your sandbox ORCID iD (a sandbox account needs a
@mailinator.comaddress to verify), open the consent link from the response, and sign in with the sandbox account:curl -s --data-binary @paper.claimset.json -H 'Content-Type: application/json' http://127.0.0.1:8000/api/submissionsPublished files appear under
local/; the/p/...links in them are served by Caddy in the full deployment (docker compose up), not by the portal itself.
Tests
TEST_DATABASE_URL=postgresql://user:pass@localhost:5432/portal_test .venv/bin/pytest
.venv/bin/ruff check .
Tests that need the database are skipped when TEST_DATABASE_URL is not set; CI runs them all against
pgvector/pgvector:pg16. The test database is emptied by the tests: never point it at real data.
Layout
| Path | Contents |
|---|---|
src/portal/ | The app (app.py), settings (config.py), database and migrations (db.py, migrations/), command line (cli.py), publication (publish.py), the registry (registry.py), the index and static files (indexer.py), identifiers (ids.py), file store (storage.py), classification client (classify.py) |
classifier/ | The classifier service: OpenAlex's open topic model, its own image |
deploy/Caddyfile | HTTPS, static published files, proxy to the app |
deploy/cloud-init.yaml, deploy/server-setup.sh, deploy/launch.sh | Setting up the server and starting the portal on it: see docs/deploy.md |
compose.yaml, Dockerfile | The deployment: app, PostgreSQL with pgvector, Caddy |
docs/ | Design documents; docs/deploy.md, putting the portal on entrylib.org |
Licence
Apache License 2.0.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.